서론

직접 미디어를 전송하지는 않지만, VoIP와 스트리밍 분야에서 빠질 수 없는 프로토콜인 SDP에 대해 알아보자.


SDP (Session Description Protocol)

SDP는 인터넷(통신) 상에서 멀티미디어 세션 정보를 기술하는 프로토콜이다.

SDP가 기술하는 세션 정보는 다음과 같다.

  • SDP 작성자 및 세션 식별자
  • 세션의 이름과 상세 정보 (추가 설명, 이메일 등)
  • 세션의 연결 정보 (IP, Port 등)
  • 세션의 시간 정보 (시작 시간, 종료 시간 등)
  • 세션의 미디어 정보 (비디오/오디오 포맷, 코덱 정보 등)

SDP는 엔드포인트 간의 미디어 정보를 협상하는 용도로 많이 사용된다.

SDP를 사용하는 대표적인 프로토콜로는 SIP, RTP, RTSP, WebRTC 등이 있다.

SDP는 IETF에 의해 1998년(RFC 2327) 표준화되었고 2006년(RFC 4566), 2021년(RFC 8866)에 개정되었다.


SDP 표현 방식

SDP는 텍스트 기반의 필드 그룹으로, 각 줄마다 하나의 필드를 표현한다.

필드는 구성 방식은 다음과 같다.

<character>=<value><CR><LF>
<character>=<parameter> <parameter> <parameter> .. <CR><LF>
  • <character> : 대소문자를 구분하는 단일 문자
  • <value> : <character>에 맞게 달라지는 구조화된 텍스트 (일반적으로 UTF-8로 인코딩된다.)
  • <paramter> : 만약 <value>가 다수의 <parameter>로 구성될 경우, 각 <parameter>는 공백으로 구분한다.
  • <CR><LF> : 각 필드를 구분하기 위한 개행 문자


SDP 필드는 크게 세가지 그룹으로 나눌 수 있다.

Session description

Session description은 세션 정보를 기술하는 필드 그룹이다. (*은 없어도 되는 선택 필드를 의미한다.)

v=  (protocol version number, currently only 0)
o=  (originator and session identifier : username, id, version number, network address)
s=  (session name : mandatory with at least one UTF-8-encoded character)
i=* (session title or short information)
u=* (URI of description)
e=* (zero or more email address with optional name of contacts)
p=* (zero or more phone number with optional name of contacts)
c=* (connection information—not required if included in all media)
b=* (zero or more bandwidth information lines, b=<modifier>:<bandwidth-value>)
-> 1개 이상의 Time description 필드가 포함되는 위치
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
-> 0개 이상의 Media descriptions 필드가 포함되는 위치

Time description

Time description은 시간 정보를 기술하는 필드 그룹이다.

t=  (time the session is active, t=<start time> <stop time>)
r=* (zero or more repeat times)

세션 시간 정보를 표현할 수 있는 t=(time) 필드는 NTP 값을 사용한다.

NTP(Network Time Protocol) : 네트워크 상에서 시스템들의 시간을 동기화하기 위한 프로토콜

t=0 0일 경우, 세션은 시간에 제한을 받지 않는다.

Media description

Media description은 미디어 정보를 기술하는 필드 그룹이다.

m=  (media name and transport address, m=<media> <port> <transport> <fmt_list>)
i=* (media title or information field)
c=* (connection information — optional if included at session level)
b=* (zero or more bandwidth information lines, b=<modifier>:<bandwidth-value>)
k=* (encryption key)
a=* (zero or more media attribute lines — overriding the Session attribute lines)

이 중에서도 세션 및 미디어의 속성을 표현할 수 있는 a=(attribute) 필드는 높은 확장성을 제공한다.

SDP를 사용하는 프토토콜은 해당 필드를 통해 원하는 정보를 추가할 수 있다.

  • a=sendrecv, a=recvonly, a=sendonly, a=inactive
  • a=rtpmap <payload type> <encoding name>/<clock rate>[/<encoding paramters>]
  • a=fmtp:<format> <format specific parameter>

자세한 속성 정보는 RFC 8866 : SDP: Session Description Protocol 참고


SDP 예시

이제 이해한 SDP 표현 방식을 바탕으로 다음 예시를 해석해보자.

v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
e=j.doe@example.com (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
  • 이 세션은 IP4 10.47.16.5 주소의 jdoe에 의해 시작했다.
  • 세션 이름은 SDP Seminar이며 추가 정보를 위한 설명, 이메일, 주소가 있다.
  • 세션의 연결 주소는 IP4 224.2.17.12이며 TTL(Time-To-Live)은 127이다.
  • 세션은 2873397496(NTP)부터 2873404696(NTP)까지 2시간 동안 지속된다.
  • 세션의 수신자는 미디어 수신만 가능(recvonly)하다.
  • 두 가지 media description이 제공되며, 둘 다 RTP payload types(RTP/AVP)을 기술한다.
  • 첫 번쨰 미디어는 49170 포트의 오디오 스트림으로 RTP payload type 0(PCMU)을 사용한다.
  • 두 번째 미디어는 51372 포트의 비디오 스트림으로 RTP payload type 99(dynamic)을 사용한다.
  • RTP payload type 9990000Hz 클럭 속도의 h263-1998 포맷과 매핑한다.

자세한 RTP payload types 종류는 RTP payload formats 위키 참고


제안-응답 모델 (Offer-Answer Model)

앞서 SDP는 엔드포인트 간의 미디어 정보를 협상하는 용도로 많이 사용된다고 언급했다.

이때 각 엔드포인트들은 SDP를 주고 받기 위해 주로 제안-응답 모델을 사용한다.

제안-응답 모델은 제안자가 사용 가능한 모든 미디어 정보를 보내면(SDP Offer), 응답자가 이를 분석하여 허용 가능한 미디어를 응답(SDP Answer)하는 협상 모델이다.

자세한 내용은 RFC 3264 : An Offer/Answer Model with the Session Description Protocol (SDP) 참고


참조