TCP三次握手四次挥手
本文最后更新于 2024-07-16,文章内容可能已经过时。
三次握手(建立连接)
客户端到服务器的SYN: 客户端选择一个初始序号
x
,发送一个SYN报文段给服务器,其中包含SYN标志位设为1,初始序号为x
。服务器到客户端的SYN+ACK: 服务器收到客户端的SYN报文后,如果同意连接,选择自己的初始序号
y
,发送一个SYN+ACK报文段给客户端,其中SYN和ACK标志位都设为1,确认序号ack
设置为x+1
,自己的序号seq
设置为y
。客户端到服务器的ACK: 客户端收到服务器的SYN+ACK报文后,检查ACK是否正确,然后发送一个ACK报文段给服务器,其中ACK标志位设为1,序号
seq
设置为x+1
,确认序号ack
设置为y+1
。
完成这三次握手后,连接就成功建立,客户端和服务器可以开始传输数据。
四次挥手(终止连接)
客户端到服务器的FIN+ACK: 客户端决定关闭连接,发送一个FIN+ACK报文段给服务器,其中FIN和ACK标志位都设为1,序号
seq
为u
,确认序号ack
为v
。服务器到客户端的ACK: 服务器收到FIN+ACK报文后,发送一个ACK报文段给客户端,确认序号
ack
设置为u+1
,序号seq
为v
。服务器到客户端的FIN+ACK: 服务器准备好关闭连接后,发送一个FIN+ACK报文段给客户端,其中FIN和ACK标志位都设为1,序号
seq
为w
,确认序号ack
为u+1
。客户端到服务器的ACK: 客户端收到服务器的FIN+ACK报文后,发送一个ACK报文段给服务器,确认序号
ack
设置为w+1
。
完成这四次挥手后,连接被成功关闭。TCP连接是全双工的,因此每个方向都可以独立地开始关闭过程。
为什么需要三次握手和四次挥手?
三次握手 确保了双方都准备好发送和接收数据,同时防止了连接请求的重复。例如,一个旧的连接请求可能在网络中延迟了,然后在新连接建立后到达服务器。
四次挥手 允许每个方向独立关闭,因为TCP连接是双向的。每个端点都可以独立地结束它的发送和接收操作。
这些机制确保了TCP连接的可靠性和数据传输的稳定性。