乙太網最大傳輸單元(mtu)
乙太網的最大資料幀1518bytes,乙太網的幀頭14bytes,幀尾校驗4bytes
乙太網最大傳輸單元(mtu):1518b - 14b - 4b = 1500bytes
乙太網最小mtu是576bytes
internet上的標準mtu值為576位元組
tcp資料報每次能夠傳輸的最大量(mss)
mss就是tcp資料報每次能夠傳輸的最大量。為了達到最佳的傳輸效能,tcp協議在建立連線的時候通常要協商雙方的mss值,這個值tcp協議在實現的,預設是536bytes。傳送大於mtu就會被分片。理論上,單個tcp包能打包的資料量遠遠多於1448位元組,現在為了適應mtu,只要在乙太網上跑tcp,系統就預設最大以1448位元組打包tcp。最小的tcp的mtu是576位元組。
mss = mtu(1500b) - ip頭(20b)- tcp頭(20b)= 1460bytes
實際場景下,tcp包頭中會帶有12位元組的選項,時間戳。
所以單個tcp包實際傳輸的最大量就縮減為1448位元組:
實際mss = mtu(1500b) - ip頭(20b) -tcp頭(20b)- tcp選項時間戳(12b) = 1448bytes
udp資料報最大傳輸量
udp的最大包長度是 2^16-1 = 65535bytes
udp資料報每次能夠傳輸的最大理論長度 = udp的最大包長度(65535b) - udp頭(8b) - ip頭(20b) = 65507bytes
然而這個只是udp資料報的最大理論長度。
首先,我們知道,tcp/ip通常被認為是乙個四層協議系統,包括鏈路層、網路層、傳輸層、應用層。udp屬於傳輸層,在傳輸過程中,udp包的整體是作為下層協議的資料字段進行傳輸的,它的長度大小受到下層ip層和資料鏈路層協議的制約。
udp資料報每次能夠傳輸的最大長度 = mtu(1500b) - ip頭(20b) -udp頭(8b)= 1472bytes
當我們傳送的udp資料大於1472的時候會怎樣呢?這也就是說ip資料報大於1500位元組,大於mtu。這個時候傳送方ip層就需要分片(fragmentation)。把資料報分成若干片,使每一片都小於mtu。ip資料報分片後,只有第一片帶有udp首部,其餘的分片只有ip頭部,到了端點後根據ip頭部中的資訊在網路層進行重組。由於udp的特性,當某一片資料傳送中丟失時,接收方便無法重組資料報,將導致丟棄整個udp資料報。因此,在普通的區域網環境下,將udp的資料控制在1472位元組以下為好。
而tcp報文段的每個分段中都有tcp首部,到了端點後根據tcp首部的資訊在傳輸層進行重組。ip資料報分片後,只有到達目的地後才進行重組,而不是像其他網路協議,在下一站就要進行重組。
進行internet程式設計時則不同,因為internet上的路由器可能會將mtu設為不同的值。如果我們假定mtu為1500來傳送資料的,而途經的某個網路的mtu值小於1500位元組,那麼系統將會使用一系列的機制來調整mtu值,使資料報能夠順利到達目的地。鑑於internet上的標準mtu值為576位元組,所以在進行internet的udp程式設計時,最好將udp的資料長度控制項在548位元組(576-8-20)以內。
幾種常見的報文方法和報文例項
幾種常見的報文方法 報文例項 http 1.1 200 ok http版本 1.1 狀態碼200 原因短語ok date mon,21 dec 2015 21 27 50 gmt 響應的時間日期 server bws 1.0 伺服器應用程式軟體的名稱和版本 bws 1.0 content lengt...
TCP傳輸的單個報文最大位元組(MSS和MTU)
1448位元組是實際場景下,單個tcp包的實際運載能力。也就是說,實際場景下,上層呼叫send 1000kb 下層會把這1000kb封裝成多個tcp包進行傳送。單個tcp包每次打包1448位元組的資料進行傳送。詳細的tcp在傳輸情景wireshark截圖如圖1 圖1每個tcp包在理論上應該能打包更多...
TCP UDP的阻塞和非阻塞模式
假設傳送緩衝區大小為4096kb,其中已經使用4000kb空間,剩餘96kb空間 現在又有200kb的資料需要傳送,則只能先將96kb的資料放入傳送緩衝區但不傳送 阻塞 直到緩衝區空出空間足夠放入剩餘104kb,再send操作將這200子節傳送,返回傳送成功位元組數200 與阻塞不同,非阻塞模式,傳...