Backend/Network

SIP 기본 통신 -두 번째 이야기

petitCoding 2011. 5. 13. 10:08

SIP 기본 통신- INVITE 요청에 이어 오늘 올릴 내용은 이에 따른 밥의 응답 및 통화-통화 종료에 관한 이야기이다.

정리되는 내용은 RFC 3261 문서에서 발췌한 것이며, 간혹 오타가 있을수도 있으니 양해 바람.

 

 


밥의 전화가 울리게 되면, 밥의 SIP 전화기는 180(Ringing)응답을 앨리스에게 먼저 전송하여 요청이 잘 도착하여 전화가 울리고 있다는 것을 알려준다. 이때 VIA헤더를 통해 왔던 길을 거쳐 응답이 앨리스에게 도착한다. 그러면 앨리스의 전화기 에서도 송신음이 발생하게 된다. 따릉따릉~~ 그리고 액정에 전화가 걸리고 있다는 표시가 나타난다..!

 

이제 밥이 전화를 받을지 말지 결정을 해야한다. 그가 전화를 받으면, SIP 전화는 200(OK) 응답을 앨리스에게 전송한다. 이때 200OK 응답의 메시지body에는 밥이 앨리스와 통화하고자 하는 SDP media description이 포함되어 있다.

 

만약 밥이 전화를 받지 않거나, 통화중이라면 200 (OK)대신 다른 응답을 보내게 된다. (Error response)

 

다음은 밥의 200(OK)응답이다.

 

SIP/2.0 200 OK

Via: SIP/2.0/UDP server10.biloxi.com

;branch=z9hG4bKnashds8;received=192.0.2.3

Via: SIP/2.0/UDP bigbox3.site3.atlanta.com

;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2

Via: SIP/2.0/UDP pc33.atlanta.com

;branch=z9hG4bK776asdhds ;received=192.0.2.1

To: Bob <sip:bob@biloxi.com>;tag=a6c85cf

From: Alice <sip:alice@atlanta.com>;tag=1928301774

Call-ID: a84b4c76e66710@pc33.atlanta.com

CSeq: 314159 INVITE

Contact: <sip:bob@192.0.2.4>

Content-Type: application/sdp

Content-Length: 131

(Bob’s SDP not shown)

 

응답의 첫번째 라인에는 SIP 버전 및 상태 코드가 나타난다.

Via, To, From, Call-ID, CSeq 헤더는 INVITE 요청에서 복사되었다.

그런데 Via 헤더를 보면 요청시와는 달리 2개가 더 추가되어 있는 것을 볼 수 있다.

첫번째 헤더는 앨리스의 SIP 전화에서, 두번째는 atlanta.com 프록시 서버, 그리고 마지막은 밥의 도메인 프록시인 biloxi.com 프록시 서버에서 붙여진다.

Contect 헤더는 밥의 SIP 폰에 직통으로 접근할 수 있는 URI를 가지고 있다.

Content-Type, Content-Length 헤더는 앨리스의 요청에서와 동일하게 밥의 SDP 미디어 정보를 포함하는 메시지 바디에 대한 타입과 길이를 나타낸다.

 

이렇게 200 OK응답이 전송되면,  밥은 전화를 받은 것이고, 앨리스의 소프트 폰에서는 마지막으로 ACK 메시지를 밥의 SIP 폰으로 전송한다.

위의 그림에서 보면 ACK 메시지는 두 개의 프록시 서버를 거치지 않고 바로 밥에게 전달되는데, 그 이유는 INVITE/200 OK 요청-응답을 통해 서로의 주소를 알 수 있게 되었기 때문이다. 

이렇게 INVITE/200/ACK 3-way handshaking 이 끝나면, 이제부터 중간의 두 프록시 서버는 통신에서 제외되고 양자간에 직접적인 세션 (RTP Session: Real-Time Transport Protocol Session)이 성립되는 것이다.

이제 앨리스-밥 간의 전화 통신은 SIP가 아닌 SDP를 이용해 이루어 지게 된다. 일반적으로  이때 대화가 오가게 되는 경로는 SIP와는 다른 경로를 사용한다.

 

앨리스-밥이 통화를 마치고, 밥은 전화를 먼저 끊으면서 BYE 메시지를 발생한다. 이 BYE 메시지 역시 프록시 서버를 거치지 않고 바로 앨리스의 소프트 폰으로 전달된다. 앨리스는 BYE메시지를 받으면 200 OK 응답을 함으로서 세션을 종료시킨다. (여기서는 ACK 가 발생되지 않는데, ACK는 INVITE 요청시에만 발생한다.)


반응형

'Backend > Network' 카테고리의 다른 글

예약된 IP주소  (0) 2011.05.13
패킷 송/수신 처리  (0) 2011.05.13
SIP 기본 통신 - 첫번째 이야기  (0) 2011.05.13
VoIP 용어 정리~~ > <  (0) 2011.05.13
인터넷 제어 메시지 프로토콜, ICMP.  (0) 2011.05.13