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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM