1. 当请求到达,但是当前主机没有绑定请求端口
2. 连接异常释放:
正常情况是一方发送FIN,等待对端ACK和FIN,接收到FIN后,发ACK,进入TIME_WAIT。但是如果由于某些情况导致异常释放,发送方会丢弃任何待发送数据并且立即发送RST给对端,接收方会区分对端是正常关闭还是异常关闭,应用程序使用的API必须提供产生异常而关闭而不是正常关闭的手段(socket当中为SO_LINGER选项, l_onoff 非零,l_linger为0)。RST报文不会导致另一端产生任何响应,另一端不会进行确认。收到RST的一方将终止该连接,并通知应用层连接复位
3. 检测半打开连接:
如果一方已经关闭或者异常终止连接,而对端却不知道,这样的TCP称为半开的。任何一端的主机异常都可能发生这种情况。只要不打算在半开连接上传输数据,仍旧处于连接状态的一方就不会检测另一方已经出现异常。当一台主机宕机重启之后,之前的客户端如果在这期间不发送数据,不会发现这条连接已经废弃,它仍然认为这条连接可用。当宕机重启之后,客户端发送数据到重启之后的主机,重启之后的主机不认识这个连接,直接发回RST
总结:
可以分为两种情况:a. 主动发RST(对应上面的2); b. 被动接受RST(对应上面的1, 3)
阅读(2154) | 评论(0) | 转发(0) |