• FreeSWITCH小结:关于sip的UDP、TCP与MTU


    1、关于SIP的UDP与MTU的关系

    如果sip消息的大小超过了MTU,则有可能被网络中的某一节点分片,而UDP处理分片会有很大的问题,从而导致sip消息传输失败。要解决该问题的话,两种方案:
    1)减少sip消息的体积,比如减少codecs、x headers等
    2)使用tcp来替代udp传输sip消息
    这就是为什么sip终端要同时支持tcp与udp的原因。

    2、为什么TCP传输sip不会出现问题?

    因为tcp传输sip消息时,不会出现分片,下面是具体原因:
    为什么TCP不会造成IP分片呢?原因是TCP自身支持分段,在TCP进行三次握手的时候,会协商MSS的大小(一般就是MTU),该MSS值存放在TCP段的选项中。当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,因此,TCP一般不会造成IP分片。

    而UDP和ICMP就不支持这种分段功能了,UDP和ICMP认为网络层可以传输无限长(实际上有65535的限制)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层就万事大吉了。接着网络层IP协议对这种“身长头短”的数据进行分片,不要指望IP能很“智能”地识别传给它的数据上层头部在哪里,载荷又在哪里,它会直接将整个的数据切成N个分片,这样做的结果是,只有第一个分片具有UDP或者ICMP首部,而其它分片则没有。

    备注:
    最大传输单元(Maximum Transmission Unit)

  • 相关阅读:
    解决VMwave下卡死的办法
    深度探索C++对象模型第四章:函数语义学
    cc
    tbb库的使用
    10内核同步方法
    哈希
    django 和restful framework 初始配置轻松搞定
    linux有趣动画--代码雨
    linux有趣开机图标--佛祖保佑
    Socket是什么,通俗易懂点说
  • 原文地址:https://www.cnblogs.com/jizha/p/freeswitch_sip_tcp_udp_mtu.html
Copyright © 2020-2023  润新知