TCP状态转移图

一、三次挥手状态转移
- 客户端
SYN_SENT:调用connect()函数发送SYN请求时;
ESTABLISHED:收到服务器ACK时;
- 服务器
LISTEN:调用listen()函数监听时;
SYN_RCVD:收到客户端SYN请求时,并发送SYN请求、回复ACK;
ESTABLISHED:收到客户端ACK时;
二、数据传输
双方均处于ESTABLISHED状态。
三、四次挥手状态转移
- 客户端(主动关闭方)
FIN_WAIT_1:调用close()函数并发送FIN请求时;
FIN_WAIT_2:收到服务器ACK时;
TIME_WAIT:收到服务器FIN请求时,并回复ACK;
CLOSED:TIME_WAIT经过2MSL后;
- 服务器
CLOSE_WAIT:收到客户端FIN请求时,并回复ACK;
LAST_ACK:调用close()函数并发送FIN请求时;
CLOSED:收到客户端ACK时。
问题1:为什么需要TIME_WAIT?
1、防止ACK丢失时,服务器重新FIN请求,而客户端已经CLOSED无法重传。
2、防止服务器有残留数据包发送,却发送给新建立的连接(相同IP、port),TIME_WAIT状态保证不能建立新连接。

最低0.47元/天 解锁文章
2555

被折叠的 条评论
为什么被折叠?



