1. 三次握手大致过程:
- 客户端发送
seq=x
(随机选取一个序列号x作为自己的初始序号发送给B)、SYN = 1
,客户端将自身状态设为SYN-SENT
; - 服务端接收到
seq=x
的包之后,需要继续接收seq=x+1
的包,因此对客户端发送SYN = 1
(发起一个新连接)、ack = x + 1
、seq = y
(自身数据包序列号)、ACK = 1
(确认序号有效),同时将自身状态设置为SYN-RECEIVED
; - 客户端同理发送
ack = y + 1
、seq = x + 1
、ACK = 1
、SYN = 1
;
2.四次挥手大致过程
- 第一次挥手:Client发送一个
FIN=M
(释放一个连接),用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1
状态。 - 第二次挥手:Server收到
FIN
后,发送一个ack=M+1
给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT
状态。 - 第三次挥手:Server发送一个
FIN = N
,用来关闭Server到Client的数据传送,Server进入LAST_ACK
状态。 - 第四次挥手:Client收到
FIN
后,Client进入TIME_WAIT
状态,接着发送一个ACK
给Server,确认序号为收到序号ack=N+1
,Server进入CLOSED
状态,完成四次挥手。
参考:
1. TCP三次握手详解及释放连接过程