最近在玩wireshark抓包,抓了一下文件上傳,發現有的數據包達到了16312byte,因而產生了一個疑問一個數據包最大負載能達到多少?
網絡
查了一通資料,找到了65495byte這個數字,這個數字有什麼依據呢?tcp
是這樣算出來的:
由於ip協議頭中段總長度(length)最多爲16bit
ip首部最少20,tcp首部最少也爲20
因此留給數據的最大長度爲2^16-1-20-20=65495
(忽然也明白了端口範圍爲何也是這個了^_^)大數據
這個數據太理論化了,實際上呢?spa
先看個表,來自wiki:
blog
再補補概念:
MTU: Maximum Transmission Unit,是指一種通訊協議的某一層上面所能經過的最大數據包大小(以字節爲單位)。最大傳輸單元這個參數一般與通訊接口有關(網絡接口卡、串口等)。 接口
MSS: Maximum Segment Size,是傳輸控制協議(TCP)的一個參數,以字節數定義一個計算機或通訊設備所能接受的分段的最大數據量。 它並不會計算 TCP 或 IP 協議頭的大小。圖片
一個TCP包(數據段)的荷載 <= MSS < MTUip
前面的那次上傳總文件大小是30000+,數據包達到了16312,是由於lookback網卡的MTU爲16384,去掉頭部佔用76,最大負載也就是16312
get
若是MTU=1500,單位爲byte,PPPoE首部6,PPP協議2
數據鏈路層最大data爲1500-8=1492
IPv4首部最少20,IPv6首部40,TCP首部最少20
MSS最大爲1492-20-20=1452文件上傳
結論:數據包最大荷載是由網絡設備的MTU決定的
Reference: