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가 없는 경우

SIP Call Flow without 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가 있는 경우

SIP Call Flow with 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를 삭제한 후 앨리스에게 전송