Skip to content

重组(re-assemble) TCP 流 #24

@peter-way

Description

@peter-way

根据 TCP 序号(Seq)及确认号(Ack) 对 PCAP 文件中的 TCP 流进行重组,并按时间顺序导出内容。

举个例子,客户端要给服务器发送 "ab" 两个字符串,服务器收到之后回复 "c",最后客户端关闭连接。
我们抓包得到的内容是这样的

time src sport dst dport seq ack flags content
1 192.168.1.1 5200 1.2.3.4 80 0 - SYN
2 1.2.3.4 80 192.168.1.1 5200 0 1 SYN,ACK
3 192.168.1.1 5200 1.2.3.4 80 1 1 ACK
4 192.168.1.1 5200 1.2.3.4 80 1 1 PUSH a
5 192.168.1.1 5200 1.2.3.4 80 1 1 PUSH a
6 1.2.3.4 80 192.168.1.1 5200 1 2 ACK
7 192.168.1.1 5200 1.2.3.4 80 2 1 PUSH b
8 1.2.3.4 80 192.168.1.1 5200 1 3 ACK
9 1.2.3.4 80 192.168.1.1 5200 1 3 PUSH c
10 192.168.1.1 5200 1.2.3.4 80 3 2 FIN,ACK
12 1.2.3.4 80 192.168.1.1 5200 2 4 FIN,ACK
10 192.168.1.1 5200 1.2.3.4 80 4 3 ACK

重组完成是这样的

client: IP=192.168.1.1, PORT=5200
server: IP=1.2.3.4, PORT=80
flow:
  time=4, direction=c2s, content="a"
  time=7, direction=c2s, content="b"
  time=9, direction=s2c, content="c"

注意第 5 个是重发第 4 个没收到的包,必须剔除。

名词解释

客户端(client)

我们称 TCP 连接的发起方为客户端,即先发送 SYN 标志的那一端。

服务器(server)

与客户端通讯的一端称为服务器端。

TCP 端点(endpoint)

指使用 TCP 交换数据的双方,上述客户端和服务器端都是 TCP 端点。
每个端点均由 IP 地址和 TCP 端口标识,例如:

  • 端点1(IP=1.2.3.4, PORT=80)
  • 端点2(IP=1.2.3.4, PORT=90)

TCP 流(flow)

指 TCP 两端点之间传输的数据(流),按流向来分的话,它有两条,分别是

  1. 客户端 --->>> 服务器
  2. 服务器 --->>> 客户端

TCP 流由两端点标识,即两 IP 加两 TCP 端口,例如:

  • 端点1(IP=192.168.1.1, PORT=5200) <<<------>>> 端点2(IP=1.2.3.4, PORT=80)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions