搞了三年網路,今天才知道這個細節,汗,總結下:
mtu大家都知道,是鏈路層中的網路對資料幀的乙個限制,依然以乙太網為例,mtu為1500個位元組。乙個ip資料報在乙太網中 傳輸,如果它的長度大於該mtu值,就要進行分片傳輸,使得每片資料報的長度小於mtu。分片傳輸的ip資料報不一定按序到達,但ip首部中的資訊能讓這些資料報片按序組裝。ip資料報的分片與重組是在網路層進完成的。
mss(最大分段大小)
mss是tcp裡的乙個概念(首部的選項欄位中)。mss是tcp資料報每次能夠傳輸的最大資料分段,tcp報文段的長度大於mss時,要進行分段傳輸。tcp協議在建立連線的時候通常要協商雙方的mss值,每一方都有用於通告它期望接收的mss選項(mss選項只出現在syn報文段中,即tcp三次握手的前兩次)。mss的值一般為mtu值減去兩個首部大小(需要減去ip資料報包頭的大小20bytes和tcp資料段的包頭20bytes)所以如果用鏈路層乙太網,mss的值往往為1460。而internet上標準的mtu(最小的mtu,鏈路層網路為x2.5時)為576,那麼如果不設定,則mss的預設值就為536個位元組。很多時候,mss的值最好取512的倍數。tcp報文段的分段與重組是在運輸層完成的。
到了這裡有乙個問題自然就明了了,tcp分段的原因是mss,ip分片的原因是mtu,由於一直有mss<=mtu,很明顯,分段後的每一段tcp報文段再加上ip首部後的長度不可能超過mtu,因此也就不需要在網路層進行ip分片了。因此tcp報文段很少會發生ip分片的情況。
再來看udp資料報,由於udp資料報不會自己進行分段,因此當長度超過了mtu時,會在網路層進行ip分片。同樣,icmp(在網路層中)同樣會出現ip分片情況。
總結:udp不會分段,就由ip來分。tcp會分段,當然就不用ip來分了!
UDP報文分片問題
在進行udp程式設計的時候,我們最容易想到的問題就是,一次傳送多少bytes好?當然,這個沒有唯一答案,相對於不同的系統,不同的要求,其得到的答案是不一樣的,我這裡僅對 像icq一類的傳送聊天訊息的情況作分析,對於其他情況,你或許也能得到一點幫助 首先,我們知道,tcp ip通常被認為是乙個四層協議...
IP分片和TCP分片的區別
前段時間要做乙個關於網路嗅探的程式,裡面要重組ip分片,tcp分片.但做的時候忽視了乙個很重要的東西 ip分片與tcp分片弄混淆了.首先宣告 tcp分片應該稱為tcp分段.區別 1.ip分片產生的原因是網路層的mtu tcp分段產生原因是mss.2.ip分片由網路層完成,也在網路層進行重組 tcp分...
TCP面向位元組流和UDP面向報文的區別
tcp是一種流模式的協議,udp是一種資料報模式的協議 這句話相信大家對這句話已經耳熟能詳 但是,流模式 與 資料報模式 在程式設計的時候有什麼區別呢?以下是我的理解,僅供參考!1 tcp 打個比方比喻tcp,你家裡有個蓄水池,你可以裡面倒水,蓄水池上有個龍頭,你可以通過龍頭將水池裡的水放出來,然後...