Protocol/VoIP
08 SIP Header 분석 (23.03.31)
Orangetasteboy
2023. 4. 22. 21:00
■ 주요 SIP Header 분석
● 기본 6개 + 멀티미디어 세션 관리
INVITE sip:bob@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob sip:bob@Biloxi.com
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: sip:alice@pc33.atlanta.com
Content-Type: application/sdp
Content-Length: 142
- INVITE sip: bob@biloxi.com SIP/2.0
- INVITE : 요청한 method
- sip:bob@biloxi.com: Request URI(요청 메시지의 최종 목적지)
- 일반적으로 To 필드의 URI 값 참조
- SIP/2.0: 버전
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
- Via: INVITE 요청에 대한 응답을 위한 경로
- Branch: 트랜젝션 식별자
- Max-Forwards: 70
- 경로 상의 SIP 서버의 최대 홉 수
- IP 의 TTL 과 유사
- To: Bob sip:bob@Biloxi.com
- SIP 트래잭션의 목적지 표시
- 실제 SIP 메시지의 라우팅에 사용 X
- Display Name의 의미
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- SIP 트래잭션의 출발지 표시
- 실제 SIP 메시지의 라우팅에 사용 X
- Display Name 의 의미
- Call-ID: a84b4c76e66710@pc33.atlanta.com
- 세션에 대한 global unique identifier
- 다이얼로그 식별
- Call ID 와 From 및 To 의 Tag
- 호스트 네임 또는 IP address와 시간의 조합으로 생성
- CSeq: 314159 INVITE
- Command Sequence(Sequence Number)
- [정수 method]로 표현
- 트랜젝션 단위로 증가
- Contact: sip:alice@pc33.atlanta.com
- 요청을 보낸 사용자에 대한 직접적인 경로
- Via 헤드 필드는 요청에 대한 응답 경로
- Contact 헤더 필드는 새로운 요청을 송신할 경로
- FQDN나 IP 주소 선호
- Content-Type: application/sdp
- SIP 메시지 바디가 포함될 경우 메시지 바디 타입 정의
- Content-Length: 142
- 메시지 바디의 크기
■ SIP Header 분석 - SIP Proxy가 없는 경우
● INVITE
INVITE sip:bob@192.168.10.20 SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob sip:bob@biloxi.com
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: sip:alice@pc33.atlanta.com
Content-Type: application/sdp
Content-Length: 142
- 앨리스가 수화기를 들고 밥의 전화번호를 누르는 순간 INVITE 메시지가 전송
- From Header와 To Header
- 앨리스가 밥에게 보내는 다이얼로그
- Via Header
- INVITE 요청에 대한 응답을 pc33.atlanta.com로 전송
- 밥이 자신의 pc33에서 SIP 통화를 시도했다는 것을 유추 가능
- CSeq Header
- 값이 314159번이므로 응답도 같은 Cseq 번호를 사용
- Content-Type Header
- SIP 메시지 바디에 SDP 메시지를 포함
● 200 OK
SIP/2.0 200 OK
Via: SIP/2.0/TCP pc33.atlanta.com;
branch= z9hG4bK776asdhds;received=10.1.3.33
To: Bob sip:bob@biloxi.com:tag=a6c85dcf
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: sip: alice@ 192.168.10.20
Content-Type: application/sdp
Content-Length: 131
- 밥의 전화기는 INVITE를 수신 후에 벨소리를 재생하고, 밥이 수화기를 드는 순간 200 OK 응답이 앨리스에게 전달
- From Header와 To Header
- 값이 바뀌지 않고 SIP INVITE 메시지의 헤더의 값이 동일
- 각 메시지의 출발지와 목적지를 표시하는 것이 아니라 호의 진행방향을 표시
- CSeq Header
- INVITE 헤더의 값과 동일한 314159 INVITE
- SIP 패킷 캡쳐 시에 여러 호가 동시에 진행되더라도 어떤 요청에 대한 200 OK 응답인지를 분석
- Via Header
- 값은 기존 INVITE 메시지의 헤더 값을 그대로 복사
- 'received=10.1.3.33'이라는 필드를 추가하여 INVITE 메시지는 10.1.3.33 앨리스로부터 직접 받았다는 것을 명기
● ACK
ACK sip:bob@192.168.10.20 SIP/2.0
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bKnashds8
Max-Forwards: 70
To: Bob sip:bob@biloxi.com;tag=a6c85dcf
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 ACK
Contact: sip:alice@192.168.10.20
Content-Type: application/sdp
Content-Length: 0
- 앨리스의 전화기가 200 OK를 수신하였음을 확인하는 ACK를 전송
- CSeq Header
- 값이 31459이므로 앞의 200 OK에 대한 ACK 임을 확인
● BYE
BYE sip:alice@10.1.3.33 SIP/2.0
Via: SIP/2.0/TCP 192.168.10.20
To: Alice <sip:alice@atlanta.com>;tag=1928301774
From: Bob <sip:bob@biloxi.com>;tag=a6c85dcf
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 231 BYE
Content-Length: 0
- BYE 세션은 발신자와 수신자 누구나 생성 가능
- 전화기의 훅 스위치에 수화기를 올려놓는 쪽에서 BYE가 전송
- From Header와 To Header
- 값에서 알 수 있듯이 세션 종료 절차의 진행 방향은 밥이 앨리스에게 요청하는 다이얼로그
- 수화기를 내려놓은 사람은 밥
- CSeq Header
- 세션 종료 절차는 새롭게 시작하는 다이얼로그이자 트랜잭션이므로 값이 다름.
■ SIP Header 분석 - SIP Proxy가 있는 경우
● INVITE - Alice to SIP Proxy
INVITE sip:bob@Biloxi.com/TCP SIP/2.0
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob sip:bob@biloxi.com
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: sip:alice@pc33.atlanta.com
Content-Type: application/sdp
Content-Length: 142
- 앨리스의 전화기는 밥의 전화기의 IP 주소를 알지 못하므로 INVITE 메시지를 SIP Proxy 서버로 전송
- 엘리스가 밥에게 보내는 SIP INVITE 메시지는 SIP Proxy 서버가 없을 때와 마찬가지로 동일
● INVITE - SIP Proxy to Bob
INVITE sip:bob@192.168.10.20/TCP SIP/2.0
Via: SIP/2.0/TCP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asdhds
received=10.1.3.33
Max-Forwards: 69
To: Bob sip:bob@biloxi.com
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Content-Type: application/sdp
Content-Length: 142
- SIP Proxy 서버는 앨리스로 받은 INVITE 메시지를 Request-URI에 적힌 밥의 주소로 전달
- SIP Proxy 서버는 Via Header를 추가하고 Max-Forwards Header를 수정
- Via Header
- SIP Proxy 서버의 주소를 나타냄.
- INVITE 요청의 응답인 200 OK가 SIP 프락시 서버를 경유할 것을 요청
- 밥의 200 OK 응답이 SIP Proxy 서버를 경유하지 않고 바로 앨리스에게 전달된다면, SIP Proxy 서버는 호의 진행 상태를 알 수 없음.
- 앨리스가 보낸 Via 헤더에는 'received=10.1.3.33'이라는 값을 추가하여 어디서 받았는지를 명기
- Max-Forwards Header
- 값이 70에서 69로 감소
- 한 개의 SIP 서버를 지날 때마다 1씩 감소
- CSeq Header와 Call-ID Header
- 변경되지 않았으므로 SIP 호 설립 절차가 하나의 다이얼로그로 진행
● 200 OK - Bob to SIP Proxy
SIP/2.0 200 OK
Via: SIP/2.0/TCP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;
received=192.168.10.1
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asdhds
received=10.1.3.33
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.168.10.20
Content-Type: application/sdp
Content-Length: 131
- 밥은 200 OK 응답을 INVITE 메시지의 Via Header가 가리키는 SIP Proxy 서버의 주소로 전송
- Via Header
- 2개의 Via Header는 INVITE 메시지에 있던 두 개의 Via 헤더를 그대로 복사하여 추가
- SIP Proxy 서버가 추가한 Header에 SIP Proxy 서버의 주소를 'received=192.168.10.1' 필드로 추가
● 200 OK - SIP Proxy to Alice
SIP/2.0 200 OK
Via: SIP/2.0/TCP pc33.atlanta.com;branch=z9hG4bK776asdhds
received=10.1.3.33
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.168.10.20
Content-Type: application/sdp
Content-Length: 131
- SIP Proxy 서버는 밥으로부터 받은 200 OK 메시지에서 자신이 추가했던 Via Header를 삭제한 후 앨리스에게 전송