wireshark抓tcp包长度的疑惑

问题

今天用wireshark抓包调试的时候遇到了一点小困扰,如下图

本来就是两条很普通的192.168.10.90发给195的fin包,195回应ack,但是这两个包的长度是挺诡异的,为什么一个是54,一个是60呢,而且查看60长度的包,发现在TCP协议的数据区有6个字节的00。

那么这6个字节的00又是哪里来的呢?

探(sou)寻(suo)答案

  • 首先确定的是这数据区6个字节的00不是应用程序发送的,那么必定是应用层以下的某一层填充的。

  • 为什么要填充呢?先上图

    上图是以太网(IEEE 802.3)帧格式,其中以太网数据帧部分最小46字节,发现什么了吗?最小46字节去掉IP头和tcp头各20字节,还剩6个字节,也就是说你tcp什么数据都不发,为了满足最小46字节,你还需要填充6个字节,也就是之前看到的6个字节的00。最后我们算一下可以抓到包的最小长度6+6+2+46=60。正好跟上面抓到的60个字节的数据包吻合。

  • 问题又来了,54字节长度的包是怎么整出来的呢?
    正好看到wireshark官网也有人遇到跟我类似的疑惑Size of Frames(又一次验证了一句话,你遇到的问题99%别人都遇到过,还有接近1%根本不是问题,最后才是你遇到过而别人没遇到过)。不废话了,大体意思就是最小以太网帧是64字节(去掉前导码和帧其实定位符,为什么是64字节也有讲究,可以看文章结尾的参考),其中包括4个字节的帧校验序列(FCS),而wireshark通常开到的是加入FCS前的发送帧和剥离FCS的接收帧。因此wireshark能抓到包的最小长度为60字节,但是由于接收帧是发送方操作系统填充的所以最小为60字节,但发送帧wireshark抓到的是填充之前的数据包,所以最小为54字节

  • 不同网卡可能会有不同的结果
    回家后因为笔记本用的是无线,对同样的数据包用wireshark发现,无线网卡对于没有数据的tcp抓包长度都是54字节,按上文理解可能就是wireshark抓到的包已经是剔除掉6个字节的填充位的数据了

参考
维基百科:TCP/IP协议族
IEEE8023
以太网帧长度

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值