tcpdump抓包长度大于1514的原因

抓包调试时,发现tcpdump抓包长度大于1514,这里总结一下几种原因。

一般以太网数据包长度范围

标准以太网帧长度下限为:64 字节
标准以太网帧长度上限为:1518 字节

常见几个最大包长度值1492,1500,1514,1518

  • 以太网MTU值

    Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制留给网络层的数据长度。在早期CSMA/CD机制中设计中,多个网卡在同一个以太网物理链路传输数据会互相影响,因此设置最大长度以免占用物理链路过长。

在Linux命令行中ifconfig,可以看到通常以太网接口MTU设置的值为1500。

这里的1500指是三层包(IP头以上)长度,对应标准以太网帧长度上限1518 字节。

  • wireshark抓到的包长

    通常最大包长显示为1514,对应标准以太网帧长度上限1518 字节。

  • 家庭宽带路由器PPPoE接口

    通常设置MTU为1492,对应标准以太网帧长度上限1518 字节。

上述几个数值可能过下面以太网数据包总长1518字节示意图解释:

Mac头长度14字节PPPoE头长度8字节IP报文CRC校验4字节

1518指的是以太网数据总长;
1500指的是以太网IP报文长度;
1514指的是内核收包,已校验完数据的长度;
1492指的是考虑PPPoE头需要设置的MTU值;

tcpdump抓包长度大于1514

一次调查问题时,发现抓包的数据长度大于1514:

这里有几种可能的情况

1,巨型帧(Jumbo Frames)

巨型帧,是指有效负载超过IEEE 802.3标准所限制的1500字节的以太网帧。通常来说,巨型帧可以携带最多9000字节的有效负载。许多以太网千兆以太网以太网交换机和千兆网卡可以支持巨型帧。

这种情形可以通过查看网口mtu来确定,如果MTU是9000,说明这个口开启了巨型帧。可以接收到长度超过1514的数据包。

2,TSO,GRO,GSO数据流分组重组
上述三个功能很类似,都是网卡驱动层提供的流分组重组技术,用于减轻CPU负载。简单说就是通过将TCP或IP数据分包发送的工作,推迟到网卡驱动层实现,来加速数据传输。比如内核可以发送一个14K的长包,驱动层就会给长包分成10个小于1514的包,发送出去。接收过程也一样,网卡驱动在收到多个同一会话的包后,组合成一个超过1514的长包,发送给内核。

tcp-segmentation-offload
generic-receive-offload
generic-segmentation-offload

这三个是相应的选项,可以用ethtool查看或配置。

这里的GRO选项开启后,网卡收到的TCP数据流,可以在发送给内核之前,进行流重组,生成大于MTU值的数据包。

3,IP分片?

一些网卡支持IP分片的offload功能,但ethtool并没有相关的配置选项。如果实现了IP分片的offload功能,也可以收到长包。

总结一下

tcpdump抓包中:
存在9k以上的包,可能开启了TSO,GRO,GSO;
存在1514~9k的包可能开启了TSO,GRO,GSO或Jumbo Frames;

通过通过ifconfig 看MTU或ethtool看TSO,GRO,GSO来判断。

如果觉得系统受到长包影响,可以用ifconfig或ethtool关闭相应的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值