传输层TCP 三次握手与四次挥手:你真的理解了吗?
传输层TCP 三次握手与四次挥手:你真的理解了吗?
前言 作者:神的孩子都在歌唱
当你打电话给朋友,不能上来就直接聊吧?总得先确认对方在线,否则就是自言自语。
TCP 连接也是一样,得先握手,后通信:
- 1. 你:喂,在吗?(SYN)
- 2. 朋友:在啊,你呢?(SYN+ACK)
- 3. 你:OK,开始聊!(ACK)
断开时,也得挥手告别,否则可能对方还在等你继续说话。
一. TCP 三次握手
来看一下 TCP 连接建立的完整流程:
- 1. 第一次握手:客户端发送 SYN 报文,表示“我要建立连接”,同时携带一个初始序列号
seq = x
。 - 2. 第二次握手:服务器收到 SYN 后,回应一个 SYN-ACK,表示“我收到了你的请求,并且我也准备好了”,同时附带自己的初始序列号
seq = y
,以及对客户端seq = x
的确认ack = x + 1
。 - 3. 第三次握手:客户端收到服务器的 SYN-ACK,发送 ACK 确认“好的,我们可以通信了”,并且
ack = y + 1
,至此连接建立。
为什么是三次握手?一次两次不行吗
- • 防止历史连接的影响:如果采用二次握手,服务器收到 SYN 后直接建立连接,但客户端的 SYN 可能是网络延迟后重复到达的“旧请求”,这会导致服务器错误地建立无效连接,而三次握手可以避免这一问题。
- • 确保双方的收发能力:第三次握手让客户端确认了服务器的接收和发送能力,避免了“盲目同意”的情况。
二. TCP 四次挥手
如果说三次握手是“恋爱的开始”,那么四次挥手就是“分手的全过程”——理性且克制,既保证对方准备好,也不给彼此拖泥带水的机会。
- 1. 第一次挥手:客户端不想再发送数据了,向服务器发送一个 FIN(Finish)请求,表示“我准备关闭连接了”。
- 2. 第二次挥手: 服务器收到 FIN 后,回复一个 ACK,表示“我知道你要关闭了,但我这边可能还有些数据没处理完”。
- 3. 第三次挥手: 服务器处理完数据后,也发送一个 FIN,表示“好了,我也不发送数据了”。
- 4. 第四次挥手: 客户端收到服务器的 FIN 后,回复 ACK,并进入
TIME_WAIT
状态,确保服务器收到 ACK 后才彻底关闭连接。
为什么是四次挥手?
- • TCP 是全双工通信:数据的发送和接收是分开的,每一方都要单独关闭自己的数据流,因此需要两对 FIN-ACK 进行确认。
- • TIME_WAIT 机制:客户端在最后进入
TIME_WAIT
状态,确保服务器收到 ACK,防止“最后的再见”丢失。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1747881624a4699543.html
评论列表(0条)