wireshark抓tcp包长度的疑惑

本文解释了在使用Wireshark抓包时遇到的包长度问题,特别是关于54字节和60字节长度的包,以及6个字节00填充的来源。通过解析以太网帧格式,揭示了最小帧长度需求以及Wireshark抓包长度的由来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

今天用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
以太网帧长度

<think>好的,用户想了解如何使用WiresharkTCP数据。首先,我需要回忆之前提供的引用内容,看看有没有相关的步骤。引用3和4都提到了TCP的具体方法,特别是引用3详细描述了从选择网卡到过滤数据的过程。用户可能已经看过这些,但需要更清晰的步骤指导。首先,用户可能需要安装Wireshark,但引用里已经给出下载地址,可能不需要重复。接下来,要确定正确的网卡,比如WLAN或者以太网,这取决于用户的网络连接方式。然后开始捕获,但用户可能不知道如何选择正确的网卡,需要强调这一点。过程中,用户可能需要快速访问目标网站,比如LeetCode,这样才能生成足够的TCP流量。但用户可能不清楚如何在Wireshark中过滤数据,所以需要详细说明过滤表达式,比如tcp或者结合IP地址。引用3中使用了ip.addr和tcp的组合过滤,这可以作为例子。另外,用户可能需要分析三次握手的过程,所以需要解释如何识别SYN、ACK等标志位。引用4提到了IP和TCP头的结构,可以结合这些信息帮助用户理解捕获的数据内容。同时,用户可能对相对序列号的概念有疑问,需要说明Wireshark默认显示的是相对值,方便分析。最后,用户可能需要保存或导出数据,这部分在引用中没有提到,但作为常见操作应该含进去。还要注意提醒用户隐私和合规问题,避免在不可信的网络中捕获他人数据。整个过程需要分步骤,结构清晰,语言简洁,确保用户能逐步跟随操作。</think>### 使用WiresharkTCP数据的步骤 1. **选择网卡并启动** - 打开Wireshark,在首页选择与当前网络活动关联的网卡(如`WLAN`或`以太网`),点击蓝色鲨鱼鳍图标开始捕获[^3]。 - 若不确定具体网卡,可通过观察流量波动(右侧柱状图)判断活跃网卡。 2. **生成TCP流量** - 在浏览器中快速访问目标网站(如`https://leetcode.com`),或通过命令行工具(如`ping`、`curl`)触发TCP通信。 - 若需精准取特定服务的流量,可提前通过`ping`获取目标IP地址(例如`ping leetcode.com`)[^3]。 3. **停止捕获并过滤数据** - 点击红色停止按钮结束,在过滤栏输入表达式: ``` tcp # 过滤所有TCP协议数据 ``` 或结合IP地址精确过滤: ``` ip.addr == 203.107.53.81 && tcp # 过滤特定IP的TCP流量[^3] ``` 4. **分析TCP报文** - **三次握手**:查找`SYN`、`SYN-ACK`、`ACK`标志的连续数据(可通过`tcp.flags.syn==1`和`tcp.flags.ack==1`过滤)[^3]。 - **数据传输**:观察`Seq`(序列号)和`Ack`(确认号)的变化规律,确认数据完整性。 - **协议头解析**:点击具体数据,在下方窗口展开`Transmission Control Protocol`查看TCP头字段(如源/目标端口、窗口大小等)[^4]。 5. **保存或导出数据** - 通过`File > Export Specified Packets`导出特定数据(支持`.pcapng`格式),便于后续离线分析。 --- ### 关键注意事项 - **过滤技巧**:使用`tcp.port == 443`可过滤HTTPS流量,但需私钥才能解密内容[^2]。 - **序列号显示**:Wireshark默认显示相对序列号(非真实值),可在右键菜单取消`Relative Sequence Numbers`切换为原始值[^3]。 - **性能优化**:若流量过大,可提前设置捕获过滤器(如`tcp port 80`)减少冗余数据。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值