wireshark抓包发现大于1500字节的包

问题&现象:嵌入式软件开发,抓包平台->设备,发现有很多数据包大于配置的MTU值1500

“MTU”项可以设置最大传输单元,指TCP/UDP协议网络传输中所通过的最大数据包的大小。

找了如下两篇文章解释两种大于1500字节的数据包的存在,1518字节以上的和1818字节以下的。

下文原创链接

现象:

1、在电脑A上挂一个程序,上传数据的时候,用wireshark抓包,偶然发现发送的包居然有上万的。回想起mss,tcp连接不是会协商mss吗?

2、在电脑B上写个tcp连接的程序,上传数据,发现wireshark抓包全部小于mss.


关于第一个问题,问过熊大神,告诉我wireshark上抓的不是单个ip包。稍微释疑。

继续百度,看到一篇csdn文章说到是网卡在做分段的工作。提到几个关键词:LSO, TSO, 卸载。


想起前段时间测试网卡的时候,网卡有些地方可以配置。然后在电脑A网卡配置处找到一处" 大量发送卸载(IPv4)",发现开关这个选项,会完全影响wireshark抓到的tcp包的大小。


结论:

A、现象1产生的原因,在于网卡做分段的工作,wireshark在网卡分段之前就抓包了。

B、电脑A与B表现不同,在于LSO的运行。LSO的运行取决与3点:

1、操作系统支持。(电脑B的系统不支持,所以无论怎么配置也没用)

2、网卡支持。

3、配置网卡,打开选项。


————————————————
版权声明:本文为CSDN博主「wuxinyanzi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


 

下文原创链接

以太网的MTU最大为1500字节,但是抓包的时候我却发现大量的1506的字节包,这让我百思不得其解

1,TCP的MTU是哪里来的?

TCP的MTU一般使用默认值,当然,程序员也可以自己设定。我们这里讨论的是以太网的MTU值,以太网的MTU值为1500。

2,以太网的MTU为1500,为什么包长度达到了1506?

以太网的最大传输单元是1500,但这个长度是不包含链路层的,这个值是链路层针对网络层的设计,我们可以看看链路层的帧结构

这里我们讨论最常见的以太网帧封装结构,网络上99%以上都是以太网帧封装结构

由以太网帧结构,我们很容易就看出数据链路层针对网络层数据进行了限制,而wireshark的length项是整个帧的长度。

即14+20+20+1452 = 1506

1452这个值我们很容易从抓包的TCP层获取到

由此,我们得出,TCP层三次握手时候的MSS交换的值取决于网络层,受限于数据链路层协议。

在以太网数据帧中,开始的那部分是变长的字段(IP首部和TCP首部,数据部分是固定的,但不影响),把它们移动到尾部(CRC之前),这样把数据复制到内核时,就可以

把数据帧中的DATA部分映射到一个硬件页面,节省内存到内存的复制过程。也就是说CRC之后不必要再将已经在内存的DATA再重复复制一遍来使用。TCP数据报的长度是512字节的

整数倍,正好可以用内核中的页表来处理。

 我们注意到一个细节,CRC并未被计数到链路层数据长度

CRC是在数据发送期间进行计算的,是对整个帧的校检,也就是说,当一个帧封流出之后,CRC校检也随即完成,故,CRC是不计入链路层的。我们设想,如果把CRC放在帧头部,或帧中,那就需要对整个帧进行2次

操作方可完成,因为帧校检完成之后,若不附在尾部,必然要进行数据的插入操作。

同时我们也知道,一个以太网数据流,最大可达到1500 + 18 即1518字节。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值