0

我使用原始套接字构建一个 tcp 客户端程序并在机器 A 上运行它,我在机器 B 上运行一个常规的 tcp 服务器程序

基于原始套接字的客户端程序首先发送一个 SYN 数据包,然后它从远程 tcp 服务器接收一个 SYN/ACK 数据包,然后机器 A 的内核向远程 tcp 服务器发送一个 RST

序列号和确认序列号很好有什么潜在原因?
以及如何处理?谢谢!

顺便说一句:我使用 tcpdump 在远程机器 B 上捕获数据包,它显示来自客户端的 SYN 数据包的“TCP 端口号已重用”,实际上在客户端发送 SYN 之前,我使用

netstat -tnp

检查正在进行的 tcp 会话,它什么也没显示

4

1 回答 1

1

这是完全正常的。如果一台机器收到它不期望的 SYN/ACK 数据包,它应该以 RST 响应,让对方知道它不知道或对该连接不感兴趣。内核发送了一个 RST,因为这是它应该做的——它不知道你的程序在做什么。

如果您尝试在已经有 TCP 堆栈的机器上运行自己的 TCP 堆栈,则必须阻止常规 TCP 堆栈响应您的堆栈试图与之通信的机器——否则,它们将与两个不可能工作的 TCP 堆栈交谈。

于 2013-03-18T13:01:21.007 回答