TCP三次握手和四次挥手
2022-01-06 14:34:56 34 举报
三次握手和四次挥手图示
作者其他创作
大纲/内容
LAST_ACK
CLOSED
Client
ACK=1
数据传输
FIN_WAIT_2
SYN=1 ACK=1
Sever
seq=v ack=u+1
问:为什么TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态?答:MSL 指的是报文在网络中最大生存时间。在客户端发送对服务器端的 FIN 的确认包 ACK 后,这个 ACK 包是有可能不可达的,服务器端如果收不到 ACK 的话需要重新发送 FIN 包。所以客户端发送 ACK 后需要留出 2MSL 时间(ACK 到达服务器 + 服务器发送 FIN 重传包,一来一回)等待确认服务器端确实收到了 ACK 包。也就是说客户端如果等待 2MSL 时间也没有收到服务器端的重传包 FIN,说明可以确认服务器已经收到客户端发送的 ACK。还有第 2 个理由,避免新旧连接混淆。在客户端发送完最后一个 ACK 报文段后,在经过 2MSL 时间,就可以使本连接持续的时间内所产生的所有报文都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文。你要知道,有些自作主张的路由器会缓存 IP 数据包,如果连接重用了,那么这些延迟收到的包就有可能会跟新连接混在一起。
ACK=1
断开连接
seq=x+1 ack=y+1
seq=y ack=x+1
seq=u+1 ack=w+1
seq=x
FIN=1
seq=w ack=u+1
seq=u
四次挥手
问:为什么需要三次握手?首先明确三次握手的目的是确认双方的接收、发送能力是否都正常,即:服务端要确认自己的接收和发送正常,还要确认客户端的接收和发送正常;客户端要确认自己的接收和发送正常,还要确认服务端的接收和发送正常。a. 客户端发送SYN包,服务端接收到后,服务端可确认客户端的发送能力正常,自己的接收能力正常b. 接着服务端发送SYN+ACK包给客户端,客户端收到后,客户端可确认自己的发送、接收能力正常,服务端的发送、接收能力正常c. 接着客户端发送ACK包给服务端,服务端收到后,服务端可确认自己的发送能力正常,客户端的接收能力正常
三次握手
SYN=1
ESTABLISHED
SYN_RCVD
FIN_WAIT_1
SYN_SENT
LISTEN
FIN=1 ACK=1
CLOSE_WAIT
TIME_WAIT等待2个MSL
收藏
0 条评论
回复 删除
下一页