(转)探究 TCP 一次数据包最大负载,上限真的是 65495 byte 吗
最近在玩wireshark抓包,抓了一下文件上傳,發現有的數據包達到了16312byte,于是產生了一個疑問一個數據包最大負載能達到多少?
查了一通資料,找到了65495byte這個數字,這個數字有什么依據呢?
是這樣算出來的:
因為ip協議頭中段總長度(length)最多為16bit
ip首部最少20,tcp首部最少也為20
所以留給數據的最大長度為2^16-1-20-20=65495
(突然也明白了端口范圍為什么也是這個了^_^)
這個數據太理論化了,實際上呢?
先看個表,來自wiki:
再補補概念:
MTU: Maximum Transmission Unit,是指一種通信協議的某一層上面所能通過的最大數據包大小(以字節為單位)。最大傳輸單元這個參數通常與通信接口有關(網絡接口卡、串口等)。
MSS: Maximum Segment Size,是傳輸控制協議(TCP)的一個參數,以字節數定義一個計算機或通信設備所能接受的分段的最大數據量。 它并不會計算 TCP 或 IP 協議頭的大小。
一個TCP包(數據段)的荷載 <= MSS < MTU
前面的那次上傳總文件大小是30000+,數據包達到了16312,是因為lookback網卡的MTU為16384,去掉頭部占用76,最大負載也就是16312
如果MTU=1500,單位為byte,PPPoE首部6,PPP協議2
數據鏈路層最大data為1500-8=1492
IPv4首部最少20,IPv6首部40,TCP首部最少20
MSS最大為1492-20-20=1452
結論:數據包最大荷載是由網絡設備的MTU決定的
Reference:
- What is the difference between MSS and MTU?
總結
以上是生活随笔為你收集整理的(转)探究 TCP 一次数据包最大负载,上限真的是 65495 byte 吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音色度抠图代码
- 下一篇: 虚拟键码 键盘消息(初稿)