我非常了解 UDP 和 TCP 之间的区别(例如http://www.onsip.com/about-voip/sip/udp-versus-tcp-for-voip)
问题是,在什么情况下使用 TCP 作为传输特别是在 SIP VOiP 通信下具有优势?
我非常了解 UDP 和 TCP 之间的区别(例如http://www.onsip.com/about-voip/sip/udp-versus-tcp-for-voip)
问题是,在什么情况下使用 TCP 作为传输特别是在 SIP VOiP 通信下具有优势?
很多人通常会将 UDP 与 voip 相关联,并且可能会留在那里,但简单来说,voip 有两个部分 - 连接和语音数据传输。
SIP 是一种非常轻量级的协议,一旦建立连接,它就会有效地保持空闲状态,直到有人拨打电话的罕见事件。TCP(与 UDP 不同)实际上将通过消除需要减少到服务器的流量;
您可以通过 TCP 运行 SIP,然后使用(推荐的)UDP 进行 RTP。
我忍不住也指出了我看过的明显的东西。例如。连接到服务器的设备数量。随着数量的增长,等式向 UDP 倾斜。但是您还必须考虑扩展 SIP 用户代理以涵盖多种编解码器、多媒体、视频和屏幕共享。INVITE 数据包可能开始变大,并可能超过 UDP 单个数据报大小,从而再次倾斜等式以支持 TCP。
说了这么多,我希望你有足够的信息来回答你想要回答的问题。
希望这可以帮助。
信用:onSip 的精彩讨论:https ://www.onsip.com/blog/sip-via-udp-vs-tcp
对于移动设备,基于 TCP 的 SIP 比 UDP 具有显着优势。原因是由于使用了 NAT,以及无线路由器或信元提供商的路由器中的 NAT 表条目通常如何比 TCP 更快地超时。由于保持相同的 NAT 表条目对于能够可靠地接收呼叫是必要的,因此 SIP 必须定期发送保持活动状态以维护 NAT 表条目。UDP(可能每 30 秒)与 TCP(可能每 15 分钟)相比,所需的保持活动频率要高得多,因此导致移动设备电池使用量明显增加。通常,当您看到有人抱怨他们的电池使用量在使用 VOIP 客户端时受到重大打击时,这是因为客户端使用的是 UDP。
因此,对于移动设备,TCP 胜过 UDP。
请注意,以上假设您希望能够在移动设备上可靠地接听电话。如果您只想打电话,那就另当别论了。
如果消息很大(在 MTU 大小的 200 字节内),则 RFC 3261 第 18.1.1 节要求使用 TCP(准确地说,它要求使用“拥塞控制的传输协议,例如 TCP”)。INVITE
在发送包含大量标头和复杂请求 URI的初始值时,我在实践中遇到了这一点。
您无法从基于 TCP 的协议可靠地组装音频流。在音频中,丢包比因为丢包而重发包要好得多。如果数据包时序中存在过度抖动,音频将无法工作。音频是实时的,需要像 UDP 这样的协议才能正常工作。丢包不会破坏音频,只会降低质量。TCP 的完美交付对音频没有任何帮助,如果您获得 100% 的数据包,就没有质量,但它们不是实时的。在音频中,时间(延迟、抖动)比数据完整性更能决定质量。
当信号和控制通过 TCP 但语音数据通过 UDP 时,此 sip 效果最佳。
自从我在 1987 年为日本新兴的数字蜂窝网络设计了首批智能手机之一以来,我一直致力于通过网络协议传输数字语音。自 1987 年以来,数字语音传输唯一没有改变的方面就是我在此描述的内容。音频(语音)传输的实时性以及它对系统设计的影响仍然与我从前的恐龙时代完全一样。
当 UDP 可能无法理解时,TCP 可以非常清晰地通过有损连接。使用 UDP 可以降低延迟,但如果您无法理解所说的内容,这对您没有帮助。