qbytearry有数据上限吗_探究TCP一次数据包最大负载,上限真的是65495byte吗

最近在玩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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值