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