TCP的三次握手和四次挥手(面)
1. 三次握手(建立连接)
-
客户端 → 服务端:发送
SYN=1, seq=x
(同步序列号)。 -
服务端 → 客户端:回复
SYN=1, ACK=1, seq=y, ack=x+1
。 -
客户端 → 服务端:发送
ACK=1, seq=x+1, ack=y+1
。
简单来说, 小明和小红在打电话。1、小明对小红说,你听得到吗。2、小红对小明说,我听得到,你听得到吗。3、小明对小红说,是的我听得到。
为什么需要三次呢?
-
目的:确保双方收发能力正常,防止历史连接请求的干扰。
-
两次握手可能导致服务端误认为连接已建立(客户端未确认服务端的响应)。
2. 四次挥手(断开连接)
-
主动方 → 被动方:发送
FIN=1, seq=u
。 -
被动方 → 主动方:回复
ACK=1, ack=u+1
(进入 CLOSE_WAIT 状态)。 -
被动方 → 主动方:发送
FIN=1, seq=v, ACK=1, ack=u+1
(数据发送完毕后)。 -
主动方 → 被动方:回复
ACK=1, ack=v+1
(进入 TIME_WAIT 状态)。
简单来说,小明和小红正在打电话:1、小明对小红说,我要挂了。2、小红对小明说,等一下我还没有讲完。3、小红对小明说我讲完了。4、小明说,好的拜拜
为什么需要四次挥手
-
TCP 是全双工的,需分别关闭两个方向的数据流。
-
被动方收到
FIN
后可能还有数据要发送,先回复ACK
,待数据发送完再发FIN
。