tcp/ip 協議棧中定義了mss
, 為的是提高網路的效能,因為如果讓ip層分包的話,丟包後的重發沒法控制,需要重傳整個tcp包(浪費了網路資源)。
mss
就是這個協商的結果,不能人為修改,這個mss的大小是mtu減去tcp頭,從tcpdump
結果中我們可以看到我們的tcp協商的mss
都在1.3~1.4k
。
所以一定需要我們自己來重新組裝tcp包的 (傳送乙個分拆的tcp包對方收到也是乙個分拆的tcp包,如果看底層還要複雜一些)。
為了減少這種情況我們可以禁止nagle
演算法,設定乙個tcp_nodelay
,但是只能說這個也只能減緩這個問題,因為其一,這個根本解決不了問題,其二,底層的sk_buff
還是可能鏈結在一起的(傳送速度不是無限的)。
或者就是用udp包,因為udp是用ip層來分包的,所以對於udp層來說發乙個大包,收到就是乙個大包,但是ip層丟了包也不管,這樣就需要應用層多一點校驗,不過現在網路udp丟包率已經很低了,所以也不是不可以考慮。
區別:
故採用tcp協議進行資料傳輸,是不會造成ip分片的。若資料過大,只會在傳輸層進行資料分包,到了ip層就不用分片。
而我們常提到的ip分片是由於udp傳輸協議造成的,因為udp傳輸協議並未限定傳輸資料報的大小。
IP分片與TCP分片的考慮
剛剛終於想明白了關於tcp分片後,為什麼抓包是從來沒看到過ip分片,而在pingicmp報文的時候,很容易就出現ip分片。之前考慮問題只考慮了一方面 作為接收方,tcp的mss欄位和ip的mtu欄位,在tcp連線的前兩次握手時,溝通好了,以小的值為最大傳輸位元組。一般情況下mtu 40 mss。具體...
TCP分段與IP分片
我們在學習tcp ip協議時都知道,tcp報文段如果很長的話,會在傳送時發生分段,在接受時進行重組,同樣ip資料報在長度超過一定值時也會發生分片,在接收端再將分片重組。我們先來看兩個與tcp報文段分段和ip資料報分片密切相關的概念。myu 最大傳輸單元 mtu前面已經說過了,是鏈路層中的網路對資料幀...
TCP分段與IP分片
鏈路層的乙個作用就是資料成幀,幀包括了head和data,而data有大小限制,就是常說的mtu,對乙太網來說是1500位元組。data包括了上層的網路層head和傳輸層head,這兩個head共佔了40位元組,剩下的資料大小不能超過1460位元組,也就是mms。mss是tcp資料報每次能夠傳輸的最...