ChatTCP是怎么像Wireshark那样识别TCP重传、乱序和心跳保活的

TCP协议并没有提供一个单独的标志位来标识一个数据包是否是重传数据包、乱序数据包,或者是Keep-Alive数据包。但是我们能够看到Wireshark能识别出哪些数据包是重传、乱序或Keep-Alive数据包,通常会给出提示[TCP Retransmission][TCP Out-Of-Order][TCP Dup ACK],也能识别出Keep-Alive数据包和Keep-Alive应答数据包,通常会给出提示 [TCP Keep-Alive]或者[TCP Keep-Alive ACK]

ChatTCP是一款能让查看网络数据包变得像阅读聊天记录一样简单的工具。作为一个能够简化TCP数据包查看和分析的工具,当然也必须能够像Wireshark那样识别出[TCP Retransmission][TCP Out-Of-Order][TCP Dup ACK][TCP Keep-Alive]以及[TCP Keep-Alive ACK]数据包。那么我们是怎么识别的呢?

如何识别一个数据包是重传或乱序数据包?

重传不是根据时间判断,同一时间发的就是重传吗?

当然不是,不能单纯依靠时间判断。因为TCP协议并没有时间!我们看到的时间只是抓包时间。当我们在客户端抓包时,抓包时间只是客户端发送数据包的时间,或是客户端接收到服务端发来的数据包的时间。

为了分析重传和乱序,我们需要关注同一个方向(例如,所有从客户端发往服务端的数据包)的数据流。将这些数据包按照抓包时间排序后进行分析:

  • 重传:如果一个数据包之前已经出现过,那么这个数据包就是重复的数据包,也就是重传数据包。
  • 乱序:如果一个数据包的序列号比它前面的一个数据包还小,那就是乱序。[TCP Out-Of-Order]

乱序很容易理解,判断序列号(seq)是否是有序的就可以,而重传的判断就比较复杂。

要判断一个数据包是否重传其实就是判断这个数据包是否是一个重复 的数据包,那么怎么样才算重复的TCP数据包呢?

当两个数据包具有相同的序列号(seq)、确认号(ack)、以及相同Payload和标志位(flags)时,那么就可以确认这是一个重复的数据包。

序列号和确认号相同,Payload就一定相同(或Payload都是空),所以也可以简化为:当两个数据包具有相同的序列号、确认号、以及相同标志位时,那么就可以确认这是一个重复的数据包。

为什么标志位也要相同才算重复

因为序列号、确认号相同,而标志位不同时,可能一个是纯应答数据包,另一个是挥手+应答数据包:(行为不同)

ini 复制代码
seq=1000, ack=3000, Flags=ACK 
seq=1000, ack=3000, Flags=FIN、ACK

怎么进一步区分是[TCP Retransmission]还是[TCP Dup ACK]呢,这就需要通过标志位判断了,一个重传数据包,如果存在ACK标志位并且不是发送数据(Payload为空)基本可以判定为[TCP Dup ACK]

在ChatTCP中,我们还会进一步判断重传数据包的细分类型:

  • 如果存在SYN标志位,那么这是一个重传的握手数据包。[TCP Retransmission]
  • 如果存在FIN标志位,那么这是一个重传的挥手数据包。[TCP Retransmission]
  • 如果存在ACK标志位,且该数据包应答的是一个握手数据包(对应待应答的数据包存在SYN标志位),那么这是一个重传的应答握手的数据包。[TCP Dup ACK]
  • 如果存在ACK标志位,且Payload为空,那么这是一个重传的应答数据包。[TCP Dup ACK]
  • 如果存在ACK标志位,且Payload不为空,那么这是一个重传的数据数据包。[TCP Retransmission]

如何识别一个数据包是Keep-Alive数据包?

Wireshark判断的条件是: - 只含ACK标识位 - Payload大小为0或1 - seq等于本端下一个待发送序列号减1

那怎么区分[TCP Keep-Alive][TCP Keep-Alive ACK]呢?

如果对应待应答的数据包是一个Keep-Alive数据包,那么这个数据包就是一个Keep-Alive应答数据包([TCP Keep-Alive ACK])。

Keep-Alive应答数据包不会出现重传情况(没有[TCP Keep-Alive Retransmission]),因为Keep-Alive数据包不要求对方一定回复一个应答数据包。

相关推荐
liulilittle7 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
27669582928 小时前
泡泡玛特app 腾讯企业加固/支付宝加固脱修frida rpc调用
网络·网络协议·rpc·frida·泡泡玛特·ppmt·泡泡玛特app-rpc调用
сокол9 小时前
【网安-研判-WireShark流量分析】端口扫描流量分析(高频短连接、SYN 扫描、ICMP 存活探测、扫描 IP / 时段 / 工具指纹)
网络·tcp/ip·wireshark
未来侦察班10 小时前
网络协议 网络层,万物归于IP
网络·网络协议·协议·ip·网络层·tcpip
colofullove10 小时前
实时游玩页与 WebSocket 状态管理实现
websocket·网络协议·状态模式
小短腿的代码世界10 小时前
WebSocket协议在Qt中的工业级实现:5层架构设计与万级并发压测验证
qt·websocket·网络协议
行走__Wz11 小时前
【网工入门-eNSP模拟-01】ip地址配置
网络·tcp/ip·智能路由器
城东12 小时前
Wireshark蓝牙抓包过滤条件[eth.src == mac过滤条件不可用而其他条件比如btle.length确可以]
wireshark·蓝牙抓包过滤条件
葡萄皮sandy12 小时前
SSE和WebSocket
网络·websocket·网络协议