为啥我的 tcp syn 消息没有得到 tcp syn ack 所以我无法连接到服务器

Posted

技术标签:

【中文标题】为啥我的 tcp syn 消息没有得到 tcp syn ack 所以我无法连接到服务器【英文标题】:why my tcp syn message doesn't get tcp syn ack so i cant connect to server为什么我的 tcp syn 消息没有得到 tcp syn ack 所以我无法连接到服务器 【发布时间】:2021-10-31 00:25:03 【问题描述】:

我在嵌入式系统中编写了一个 C 代码。客户可以连接到我,但我无法连接服务器,因为他们没有回复 syn ack。事实上,他们什么都不做。这是框架(前 5 个是我 PC 的 mac,所以我用 00 替换它们):

00 00 00 00 00 00 12 48 07 06 20 03 08 00 45 00 00 34 E2 44 40
00 80 06 00 00 A9 FE 19 FC A9 FE 19 FE 00 50 1F 90 00 BC 61 4E
00 00 00 00 80 02 FA F0 8A 16 00 00 02 04 FF D7 01 03 03 08 01
01 04 02  //old hex bytes new below

大家好。又是我回来了。我已经查看了 cmets 和答案,因此我更改了我的代码。现在我正在尝试通过路由器连接到我的电脑(正在监听服务器套接字 HERCULES 8080 端口)我的嵌入式系统(客户端)。我还发现我的校验和计算是错误的。我根据 RFC 1071 对其进行了修复。在尝试 SYN 后,我仍然无法收到 SYN ACK 消息。我在下面分享新的以太网框架(新答案在 2021 年 9 月 9 日之后):

80 发 5b 90 发 5c 12 48 07 06 20 03 08 00 45 00 00 34 b4 00 40 00 80 06 00 00 c0 a8 01 6d c0 a8 01 64 00 50 1f 90 87 65 43 21 00 00 00 00 80 02 ff ff 06 64 00 00 02 04 ff d7 01 03 03 08 01 01 04 02

你可以解码@:https://hpd.gasmi.net/ 得到与wireshark相同的结果

【问题讨论】:

在开始之前我已经研究过以太网、ip 和 tcp 帧。失败后,我通过wireshark将我的与其他TCP SYN示例进行了比较。 您是否检查了 PC 是否收到了 SYN,以及 PC 是否以其他内容作为 ICMP 消息进行响应? 请提供足够的代码,以便其他人更好地理解或重现问题。 我可以用 ICMP ping 通。如何检查 PC 是否收到 SYN?我可以在wireshark上看到它。我也可以连接到我的嵌入式系统,但我现在想使用我的嵌入式系统作为客户端。 【参考方案1】:

您的 IP 是 169.254.25.252,它在自动专用 Internet 协议寻址范围内。 此范围未在 Internet 上路由,您将永远不会收到回复

萨利姆

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。 谢谢。我通过以太网将我的嵌入式系统直接连接到 PC。因此,我使用了类似的 IP 地址。所以,我没有收到任何我刚刚写的 IP 地址(暂时不使用 dhcp)。我将通过路由器尝试此操作(默认为 192.168.1.1)我也使用 Hercules,但我可以使用 169.254.25.252 通过其客户端端口连接到服务器端口【参考方案2】:

我找到了解决方案。复制 hercules SYN 框架对我来说是一个错误。我认为 IPv4 标头校验和一定是 0。但是,当我更正该帧时,它现在可以正常工作了。

【讨论】:

以上是关于为啥我的 tcp syn 消息没有得到 tcp syn ack 所以我无法连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

TCP为啥需要3次握手与4次挥手

为啥使用 PCap.NET 发送的数据包没有填写 TCP 选项?

TCP协议介绍

TCP SYN 和 TCP RST 的 TCP 序列和确认值

closewait状态默认多久释放

TCP 流控制错误