初始状态:
服务端监听某个端口,处于 LISTEN 状态。
客户端处于 CLOSE (关闭)状态。
第一次握手:
客户端 给 服务器 发送一个 SYN,
户端 处于 SYN_SENT 状态。
首部 的 同步位 SYN = 1
初始序列号 seq = 1
SYN = 1 的报文段不能携带任何的数据,但要指定序号。
第二次握手:
服务器 接收到来自 客户端 的 SYN 后,
会以自己的 SYN 报文作为应答,
客户端 的 seq+1 确认序列号 ack 的值,
表示自己已经收到了 客户端 的 SYN,
此时 服务器 处于 SYN_RCVD 的状态
确认报文段中 SYN = 1, ACK = 1
确认序列号 ack = m+1,
初始序列号 seq = n
第三次握手:
客户端 收到 服务器 的 SYN 之后,
客 户端进入 ESTABLISHED 状态,
发送一个报文段 ACK
服务器收到 报文段 ACK 之后,
也会进入 ESTABLISHED 状态。
确认报文段中,ACK = 1,
确认序列号 ack = n+1,序列号 seq = m+1。
双方已经建立起连接,可以正常的发送数据。
服务器和客户端在握手中的状态:
首先,三次握手之前,客户端和服务器端都是处于关闭状态。
然后客户端发起了第一个SYN包,想要去跟服务器建立链接。
发完SYN包之后就变成syn_sent状态
服务器收到客户端的syn包之后,变成syn_rcvd状态
回了一个syn,ack。
客户端收到syn,ack之后变成 establish 的状态,
并且向服务器发送了一个ack包,
服务器收到ack包后也建立链接了。


