如何引用属于特定 TCP 会话的数据包?

网络工程 思科 通讯协议 线鲨 网络核心
2021-07-05 16:13:34

如何知道哪个数据包属于特定 TCP 会话?在我的实验中,客户端使用wget命令每 5 秒与 Web 服务器建立一次 TCP 会话(我还注意到它每次使用不同的端口号)。当我在 Wireshark 中跟踪数据包时,我使用客户端的端口号来过滤属于每个会话的数据包。那实用吗?我以为我可以使用序列号,但这会很乏味!!!

1个回答

TCP 在 TCP 对等体之间创建连接。每个 TCP 对等体创建一个套接字,由 TCP 地址(端口)和 IP 地址标识。这对套接字(每个 TCP 对等体中的一个)唯一标识连接。要识别哪些TCP 段属于哪个TCP 连接,需要识别源IP 地址和目的IP 地址以及源和目的TCP 地址(端口)。

RFC 793,传输控制协议解释了这一点:

多路复用:

为了允许单个主机内的多个进程同时使用 TCP 通信设施,TCP 在每个主机内提供了一组地址或端口。与来自互联网通信层的网络和主机地址连接,形成一个套接字。一对套接字唯一标识每个连接。也就是说,一个套接字可以同时用于多个连接。

端口与进程的绑定由每个主机独立处理。然而,将经常使用的进程(例如,“记录器”或分时服务)附加到公知的固定套接字被证明是有用的。然后可以通过已知地址访问这些服务。建立和学习其他进程的端口地址可能涉及更多的动态机制。

连接:

上面描述的可靠性和流量控制机制要求 TCP 为每个数据流初始化和维护某些状态信息。这些信息(包括套接字、序列号和窗口大小)的组合称为连接。每个连接由一对标识其两侧的套接字唯一指定。

当两个进程希望通信时,它们的 TCP 必须首先建立连接(初始化每一方的状态信息)。当他们的通信完成时,连接被终止或关闭以释放资源以供其他用途。

由于必须在不可靠的主机和不可靠的互联网通信系统之间建立连接,因此使用具有基于时钟的序列号的握手机制来避免连接的错误初始化。

您的问题表示您仅使用了标识唯一 TCP 连接的四个标准中的一个标准。

正如您所发现的,每次 HTTP 客户端请求连接到 HTTP 服务器时,它都会使用不同的随机 TCP 地址,称为临时端口。对于这些临时端口,您的操作系统中有一个端口范围(因操作系统而异)。IANA 对临时端口的建议是使用端口4915265535,但不同的操作系统使用不同的范围。


供参考:

TCP 数据报通常称为段,因为 TCP 将数据流分段。Packet 用于指代第 3 层数据报,例如 IP 数据包,但 TCP 是第 4 层协议。