【问题标题】:TCP sequence and acknowledgment numbers | do these numbers matter during TCP handshakeTCP 序列号和确认号 |这些数字在 TCP 握手期间是否重要
【发布时间】:2022-01-25 18:18:35
【问题描述】:

我用 C 编写了一个简单的程序。

目前我正在尝试在服务器和客户端之间建立 TCP 握手。

  1. 所以当我收到 [SYN] 标志时,我会用 [SYN+ACK] 标志(以及任何序列号,所以我选择它为零)和任何 ACK 号来响应

  2. 并且在代码中,当我在 TCP 握手的最终数据包中从客户端收到服务器 ACK 标志时,我会发送 ACK 标志以及我自己选择的序列号(任何数字),并且 ACK numebr = 收到的 SYC 数据包的序列号增加一,因为没有数据已经从服务器传输过来了。

但我没有收到任何 ACK 数据包。我的客户端一直在发送 SYN 数据包,而我的服务器一直用 Syn +ACK 数据包响应。

我想知道 TCP 握手过程中的序列号和确认号是无关紧要的,因此我可以专注于其他领域,这可能是我的客户端忽略我的 SYN 响应 SYC+ACK 数据包(如 IP 和 tcp 校验和)的原因。还是我先处理的序列号和确认号有什么问题

此外,我在 Linux 中使用从服务器程序创建的 TUN 设备

【问题讨论】:

标签: c tcp


【解决方案1】:

TCP 序列号和确认号在握手期间(或 TCP 连接中的任何时间)绝对并非无关。事实上,TCP 握手的存在是为了让服务器和客户端可以了解彼此的序列号。您的数据包被忽略,因为 ACK 不匹配。

SYNACK 包中的 ACK 号是第一个 SYN + 1 中的序列号。最后一个 ACK​​ 包中的 ACK 号是 seq。在 SYNACK 数据包中 + 1。

除了标准,@Barmar链接的,可以用这张图(source)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 2016-11-10
    • 2013-11-17
    • 1970-01-01
    • 2016-10-04
    • 2015-01-15
    • 2019-01-14
    • 2015-06-16
    相关资源
    最近更新 更多