mtu=mss+ip header+tcp header+鏈路層開銷+加密報文頭(某些程式加密強度不一樣)
mtu,對udp和tcp報文都檢測,當超過時,如果報文df=0,就進行分段,如果df=1,就丟棄,同時返回rfc 792定義的icmp type3 code 4(icmp destination unreachable-fragmentation needed and df set)或rfc 1191定義的icmp包(包含**失敗鏈路的mtu),主機收到後會調節mss以適應,後續包不會分片就可進行傳輸。如果兩端之間某router配置了acl,deny掉所有的icmp,那就無法收到咯。
mss其實就是tcp報文payload大小。一般的應用軟體,當客戶端和伺服器端在建立tcp連線的時候需要根據實際傳輸的報文大小來協商tcp的視窗大小mss。tcp連線成功後會進行兩次滑動視窗的協商,一次是pc與server,一次是與閘道器,然後在兩次協商裡選擇乙個較小的值作為視窗來傳送報文。
當協商出來的mss比較大時,加上ip header+tcp header+鏈路層開銷+加密報文頭後,就有可能大於mtu,當df=1時,就會丟棄掉。
正如所說:「對於udp協議而言,這個協議本身是無連線的協 議,對資料報的到達順序以及是否正確到達不甚關心,所以一般udp應用對分片沒有特殊要求。」所以在路由 器上進行ip tcp mss命令只對tcp packet檢測就夠了。
再提供乙個案例:msn是使用https方式登陸的,有時會有突發大報文,而且df位是設定為1的。雖然目前大部分出現的故障現象都是:不能傳送附件;不能開啟網頁等。都是在pppoe中發生的。但就算源和目的網路的mtu都是1500,但是由於中間經過的節點鏈路可能存在不同,可能少於1500。或者在傳輸過程中的某個路由器設定了較小的mtu。而往往配置路由器或交換機時, 習慣禁止了所有的icmp資訊,這樣的話那路由器就無法返回icmp 3/4的包給源主機了。rfc 2923(tcp problems with path mtu discovery)。
所以,有時候出現的故障,不止要除錯mtu值,還要除錯mss值,才能使所有應用正常
其實碰到此問題時,最好是借助sniffer抓包分析(不過奇怪,銳捷nbr1000無法抓到icmp type 3 code 4的包,所以無法抓包提供分析圖,好可惜!是路由器不支援還是其他原因,以後有機會考證)
附:sniffer抓包協助理解分片過程以及df
上圖是:
ping
–l 2000 [url]www.163.com[/url]
首先看ip header
,more fragments位為1
,向對方通告此資料報為多幀傳送(分段),
total lengt=1300bytes
(1280bytes+ip
報頭20bytes
)。再看
icmp
處,可以看到分了兩個包,大小分 別為
1280bytes
和728bytes
,2008 bytes of reassembled data
指明重組後的資料為
2008bytes
(icmp
包頭8bytes
,資料2000bytes
)。然後看
dlc部分,指明了以太型別
0800(ip
),幀大小為
1314bytes
(icmp
的1280bytes+ip
報頭20bytes+
幀14bytes)
再接著看下乙個幀。首先看到
dlc部分寫著了幀大小為
762bytes,ip
部分,continuation of frame 17
,第17
個幀的後續。
fragment offset
分段偏移量為
1280bytes
(第乙個包的大 小)。至此,第乙個
icmp echo
包全部傳送完畢。
ping –f –l 1200
[url]www.163.com[/url]
-f命令:將資料報df(
don』t fragment
)位設定為
1(不能分段)
本文出自 「我是木頭 」 部落格,請務必保留此出處http://infotech.blog.51cto.com/391844/123859
MTU,MSS基本概念
傳輸層 對於udp協議來說,整個包的最大長度為65535,其中包頭長度是65535 20 65515 對於tcp協議來說,整個包的最大長度是由最大傳輸大小 mss,maxitum segment size 決定,mss就是tcp資料報每次能夠傳 輸的最大資料分段。為了達到最佳的傳輸效能tcp協議在建...
可靠的UDP連線 MTU MSS
這個網頁裡面寫了 其可靠性必須由上層應用實現。一般都會採用訊息重傳來實現其可靠性,採用訊息重傳的時候有兩種方式,一種是傳送者發起,另一種是接收者發起。前一種接收者發的是ack。傳送者收到ack,就不重傳。但是可能ack內爆。第二種接收者發的是nack。傳送者收到nack,就重傳。但是可能nack內爆...
網路7層模型理解 分段 分片 MTU MSS
應用層 telnet,ftp,http,snmp 第七層 表示層 第六層 會話層 第五層 傳輸層 tcp,udp 第四層 網路層 ip 第三層 資料鏈路層 sdlc,hdlc,ppp,stp,幀中繼 第二層 物理層 第一層 舉個例子 1 應用層使用ftp協議,傳遞各種引數,包括使用者名稱,密碼,ip...