有关网络包长度与校验和的研究

本文探讨了网络包的大小限制,如MAC帧的1500字节最大长度,以及TCP数据部分通常的1460字节。在Wireshark中,通过设置可以选择是否检查帧的CRC校验和。正常情况下,Wireshark只会显示校验和正确的帧,但有时可能会捕获到校验和错误的帧,这可能是由于Wireshark进行了二次校验。文中提到了UDP长度字段的定义,并指出Wireshark中某些协议的校验功能可能默认关闭,可通过设置启用。此外,文章还讨论了IP报头校验和错误的问题。
摘要由CSDN通过智能技术生成

当网络通畅时,也就是拥塞窗口和接收窗口足够大,那么为了提高吞吐量,一个ip数据报会携带尽可能多的数据,但是由于数据链路层MAC帧对帧数据的长度有限制,最小64字节,最大1500字节,一般情况下tcp包是没有option的,那么这个时候一个帧的最大长度就是这样:


MAC帧的data最大1500,也就是20+20+1460,也就是说tcp的data最多1460,ip的data最多1480


这就是我们利用tcp通信时最常看见的数据包长度的情况,例如网络通畅下http请求,好多包都是这样。


在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目 的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处 理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据

在wireshark设置中可以设置是否对FCS进行校验:


而可以知道,只有FCS正确的,物理网卡才会将将帧进一步交给网络适配器,wireshark才能接收到,所以wireshark显示出来的帧按照理论来讲就一定是帧校验和正确的,所以wirkshark一般不会显示帧的校验和这个信息,也就是说被wireshark过滤掉了,像这样显示:


但是如果勾选上面那个选项,wireshark虽然收到了来自网卡判断的正确校验和的帧,但是wireshark也会再进行一次,按理说这是没有必要的,但是在林沛满即将上市的新书《wireshark网络分析艺术中》,确实出现了wireshark抓的帧中,出现校验和错误的情况:


那么,网卡为什么没有丢掉这个错误的帧呢?首先物理网卡出问题的可能性不大,所以我们先假定这个帧是正确的,那么wireshark收到这个正确的帧,再去做校验的时候,为什么又会出错呢?这里,满哥的书中也给出了解释:



注意:UDP中的length包括UDP头和data,具体可看FRC 768:


另外,各个协议里面关于长度字段的意义都不一样,有时候容易搞混,所以不清楚的时候还是记得查RFC

最后,有时候会发现对于某种协议,wirkshark显示校验功能关闭:


这时候只用去设置里面,找到相应的协议,然后启用功能就好了:


还有就是wirkshark里面带中括号的都是wirkshark提供的数据,并不是包中的格式:


具体可看wireshark说明文档

最后关于ip数据报校验和在wireshark中显示出错的情况可以看下面这篇文章,虽然我没看懂。。。

wireshark使用过程无法抓取前序和FCS或出现IP报头校验和错误--原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值