我知道当进程崩溃时,现有的TCP套接字将通过向其他对等体发送RST数据包(段)而被放弃,而其他对等体上的相关套接字fd将接收RST数据包 .
是否有其他情况发送RST数据包?例如,如果一个进程在套接字fd上调用close()但是该套接字上有未读数据,它是否还会将该套接字fd上的RST数据包(段)发送给其他对等体?
引用TCP/IP Guide
一般来说,只要TCP软件发生“意外”的事情,就会产生复位 . 生成重置的一些最常见的特定情况包括:从接收该段的设备当前没有连接的任何设备接收任何TCP段(除了请求新连接的SYN之外) . 收到消息带有无效或不正确的序列号或确认号字段,表示该消息可能属于先前的连接或以其他方式是虚假的 . 在没有进程侦听连接的端口上接收SYN消息 .
如果您发现奇怪的行为,您可能会成为TCP Reset Attack的受害者
关于你的最后一个问题,我想当你用未读数据关闭套接字缓冲区的套接字时,不会发出 RST ,因为它不会破坏任何TCP规则(数据包被正确传递,它会详细说明) . 而是发送 FIN .
RST
FIN
1 回答
引用TCP/IP Guide
如果您发现奇怪的行为,您可能会成为TCP Reset Attack的受害者
关于你的最后一个问题,我想当你用未读数据关闭套接字缓冲区的套接字时,不会发出
RST
,因为它不会破坏任何TCP规则(数据包被正确传递,它会详细说明) . 而是发送FIN
.