为什么内核在收到SYN / ACK数据包后将RST发送到远程TCP服务器?

时间:2013-03-18 12:58:33

标签: tcp network-programming

我使用raw socket构建一个tcp客户端程序并在机器A上运行它 我在机器B上运行常规tcp服务器程序

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

序列号和ack序列号很好 有什么可能的原因?
以及如何处理它?谢谢!

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

netstat -tnp

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

1 个答案:

答案 0 :(得分:1)

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

如果您尝试在已有TCP堆栈的计算机上运行自己的TCP堆栈,则必须阻止常规TCP堆栈响应堆栈尝试与之通信的计算机 - 否则,它们将与两个无法工作的TCP堆栈进行通信。