最近在玩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:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。