tcp状态机
建立连接过程
流程图
tcpdump抓包(listen port 1234)
客户端代码
服务端代码
tcpdump抓包
netstat查看连接状态
关闭连接过程
为验证CLOSE_WAIT状态,服务端accpet后sleep,客户单立即调用close
流程图
客户端代码
服务端代码
tcpdump抓包
netstat查看连接状态
服务端sleep时间到后,此时客户端已close,read返回0后,服务端也调用close,进入TIME_WAIT状态。
为什么需要TIME_WAIT?
a. 当发起关闭一方的最后一个ack丢失后,对方会重传FIN,如果直接关闭连接,发起发就收不到重传FIN。
b. 当被动关闭一方的最后一个FIN包超时重传,如果没有TIME_WAIT状态而且此时发起方用相同的ip和port建立了新的连接,这时候会收到这个重传的包,并认为他是新连接的包,就会导致严重错误。