SIP 中 180 与 183 的区别

临时响应

在 SIP 通信中,所有 1 开头的响应叫临时响应,常见的有 100、180 和 183。这些响应一般是对 INVITE 请求的响应。使用场景是这样的:主叫用户(A)在发起一个呼叫时,会向被叫用户(B)发起一个 INVITE 请求,被叫用户在收到这个请求后,会给主叫用户一个响应,一般的响应流程是回 100,紧接着回 180,或(和)183。

INVITE
A <--------------------> B
            180/183

其中,100 主要是信令层的,它的作用是 B 告诉 A 它收到了 A 的 INVITE 请求。

180/183 的作用是 B 告诉 A,你可以听回铃音了。

回铃音

A 给 B 打电话,B 的话机会振铃,同时 A 的话机会放回铃音(嘟嘟声),这样一来 A 就知道 B 的话机振铃了。

所以,回铃音的作用就是给 A 一个提示,告诉 A 对方的电话已经在振铃了,这样 A 就可以放心地等待 B 接电话。当然,随着技术的进步和时代的发展,回铃音也在进步,除了模拟时代的嘟嘟声以外,电信运营商也会利用这段等待的时间给用户放一些音乐,甚至是广告。这些音乐或广告就称为彩铃,这些是在 A 与 B 正式通话前播放的,因此不对 A 收费。但是由于彩铃也是资源,因此运营商可能会对 B 收费(B 放音乐提高自己的逼格,或者放广告提升自己的形象甚至获取商业利益,收费也是有道理的)。

到了 SIP 时代,就需要在 SIP 中描述这些回铃音或彩铃。这些回铃音是真正的声音数据,是一种媒体,但为了将它与真正的通话媒体(即 A 与 B 真正的通话数据)相区别,这种回铃音媒体被称为 Early Media。

SIP 中的回铃音

SIP 的全称是 Session Initiation Protocol(会话初始协议),它仅仅是完成会话的协商,但是实际的媒体如何传输却需要另外一个协议来协商,负责描述媒体的协议称为 SDP(Session Description Protocol),即会话描述协议。不过,SDP 寄生在 SIP 中,典型地,它寄生在 INVITE 消息和 183 消息中。当 A 向 B 发起呼叫时,它需要把自己的 SDP 放到 INVITE 消息中发给 B,同时,B 在 183 消息中放入自己的 SDP,回送给 A。当双方都知道对方的 SDP 后,真正的媒体数据就可以传输了,这时,A 才听到 B 的 Early Media。

为了帮助大家理解 SDP,我们再进一步。假设 B 接听了电话,B 会响应 200 OK 消息,该消息也带了 SDP(可能跟 183 中的相同也可能不同),用于建立 A 与 B 真正的通话,毕竟 A 给 B 打电话是为了跟 B 通话,而不是为了听 Early Media 中的音乐或广告。

所以,不管是 183 中的 SDP,还是 200 OK 中的 SDP,都是为了建立媒体服务的。区别只是一个叫 Early Media,另一个叫 Media。其实 Early Media 和 Media 差别除了一个是音乐/广告而一个是真正的 B 的声音外,差别也不大。

那 180 和 183 又有什么区别呢?

现在最流行的实现方式是:180 不带 SDP,183 带 SDP。

所以,180 与 183 的区别关键是看它们带不带 SDP,即 180 也可以带 SDP,183 也可以不带 SDP。为了防止思维混乱,我们下面认为 180 不带 SDP,而 183 带 SDP。如上面所说,这些符合绝大多数人的思维。

那么,带 SDP 的 183 我们上面讲过了,180 不带 SDP 有什么用呢?

SIP 终端属于智能终端,比以前的模拟电话可先进多了。其中的一点就是它能区别 180 和 183。如果 A 的 SIP 终端收到 183,它就协商媒体,将 B 端发过来的 Early Media 在自己的扬声器里放出来;但如果收到的是 180,没有 SDP 就没法协商媒体,因此,B 就没法给 A 发 Early Media 了。不能让主叫用户干等着,所以,A 的话机在这种情况下能自己产生一个回铃音,或任何用户在 A 话机上设置的音乐。




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • DTMF 的三种模式(SIP INFO、RFC 2833、IN BAND)
  • RFC 3581 中的 rport 例子详解
  • DNS 记录的类型及其功能
  • IPv6 地址类型详解
  • DTMF payload type 介绍