TCP
描述下 TCP 的三次握手与四次挥手
三次握手是什么
所谓三次握手(Three-way Handshake),是指建立一个 TCP
连接时,需要客户端和服务器总共发送 3 个包。 ### 为什么进行三次握手
三次握手的目的是连接服务器指定端口,建立 TCP
连接,并同步连接双方的序列号(seq)和确认号(ack), 交换 TCP 窗口大小(slidding window
size)信息 ### 三次握手具体做了什么
• 第一次握手(SYN=1, seq=x):
客户端发送一个 TCP 的 SYN
标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号
X,保存在包头的序列号(Sequence Number)字段里。
发送完毕后,客户端进入 SYN_SEND 状态。
• 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己
ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的
ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
• 第三次握手(ACK=1,ACKnum=y+1)
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK
的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入
ESTABLISHED 状态,TCP 握手结束。