對於 網路最大傳輸單元與粘包 沒有引起學習者的重視在這裡我給大家簡單的介紹介紹
一、mtu和mss的含義
1.網路.上層呼叫send (1024kb),下層會把這1024kb封裝成多個tcp包進行傳送。單個tcp包每次打包1448位元組的資料進行傳送。
2.乙太網ethernet最大的資料幀是1518位元組。
3.mtu(maximum transmission unit,mtu):乙太網幀的幀頭14位元組和幀尾crc校驗4位元組(共佔18位元組),剩下承載. 上層協議的地方也就是data域最大就只剩1500位元組.這個值我們就把它稱之為mtu。
4.mss(maximumsegmentsize,最大報文段大小)為1460,由1500-20 (ip頭) -20 (tcp頭)計算出的。實際場景下,tcp包頭中會帶有12位元組的時間戳。於是單個tcp包實際傳輸的最大量就縮減為1448位元組。1448=1500-20 (ip頭)-32 (20位元組tcp頭和12位元組tcp選項時間戳)。
5.mss就是tcp資料報每次能夠傳輸的最大量,在建立連線的時候通常要協商雙方的mss值。
如圖:
是不是覺得豁然開朗(嘿嘿)
接下來我們來聊聊粘包的問題
二、粘包
出現的原因:
tcp發了兩個資料: a資料長度18byte; b資料長度14byte。接受端一-下子讀了32byte。(意思就是說接收端把他們當成了乙個包了 把排在第二個包的幀頭當成資料傳給了上層)
解決方法:
:每段資料前加乙個2byte的長度,用來表示這個資料段的長度。a資料: 2byte (表示a資料長度) + 16byte (a的實際資料)。接受端先讀2byte得出剩下資料長度18,再讀18byte那麼就是a的資料了。這個問題並不是tcp協議的問題,其實就是「如何設計應用層協議的問題
來一起討論
TCP網路傳輸「粘包」問題
原文出處 http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控制協議 是面向連線的...
TCP網路傳輸 粘包 問題
解決tcp網路傳輸 粘包 問題http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控...
解決TCP網路傳輸「粘包」問題
解決tcp網路傳輸 粘包 問題http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控...