本节介绍TCP可能会出现的异常的时候以及部分原因, 提出来的问题大概都会在后面实验中会有所涉及. TCP异常会出现在连接的任何时候, 比如三次握手, 四次挥手等阶段.
三次握手
TCP在三次握手过程中的每一步都可能出错, 这里也就介绍以下问题.
- 服务端没有监听, 所以服务端TCP协议返回一个RST段, 而客户端收到后立即返回并停止连接. 客服端调用
connect
返回错误, 错误类型是ECONNREFUSED. - 客户端一直没有收到对端的
ACK
确认报文, 当超时后继续发送FIN, 多次失败之后客户端停止尝试连接. 客户端connect
函数返回错误, 错误类型是ETIMEDOUT. - 如果客户机的SYN段导致某个路由器产生“目的地不可到达”类型的ICMP消息, 超时重发后也是一样, 最后断开连接. 客服端调用
connect
返回错误, 错误类型是EHOSTUNREACH/ENETUNREACH. - 虽然三次握手成功了, 但是客户端立马发送一个
RST
段后断开而服务端处于繁忙状态, 等服务端返回时才发现对端已经关闭, 此时服务端也关闭. 客户端connect
后立即断开, 服务端在accept
函数返回前收到RST
段, 则accept
函数返回ECONNABORTED