3

我知道当一个进程崩溃时,现有的 TCP 套接字将通过向其他对等方发送 RST 数据包(段)而被放弃,并且其他对等方上的相关套接字 fd 将接收 RST 数据包。

还有其他发送RST数据包的情况吗?例如,如果一个进程在套接字 fd 上调用 close(),但该套接字上仍有未读数据,它是否还会通过该套接字 fd 向其他对等方发送 RST 数据包(段)?

4

1 回答 1

2

引用TCP/IP 指南

一般来说,只要发生 TCP 软件“意外”的事情,就会产生复位。生成重置的一些最常见的特定情况包括:

  • 接收到来自任何设备的任何 TCP 段,但接收该段的设备当前没有与之建立连接(请求新连接的 SYN 除外。)

  • 收到带有无效或不正确的序列号或确认号字段的消息,表明该消息可能属于先前的连接或以某种其他方式是虚假的。

  • 在没有进程侦听连接的端口上收到 SYN 消息。

如果您观察到奇怪RST的行为,您可能是TCP 重置攻击的受害者

关于你的最后一个问题,我想当RST你关闭一个带有未读数据的套接字到套接字缓冲区时不会发出 no ,因为它不会破坏任何 TCP 规则(数据包被正确传递,只是没有详细说明它的过程)。相反,FIN将发送一个。

于 2013-01-30T13:21:05.287 回答