TCP 三次握手(TCP Three-way Handshake)
TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
第一次握手 - 建立连接
客户端发送连接请求报文段,将Control Flag中的SYN位置为1,Sequence Number(发送序号)为x;然后,客户端进入 SYN_SENT
状态,等待服务器的确认。
SYN报文段是指,Control Flag中的SYN位为1的TCP报文段。
第二次握手 - 服务器收到SYN报文段
服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置 Acknowledgment Number(确认序号)为x+1(即Sequence Number+1);同时,自己还要发送SYN请求信息(即将 SYN 位为1),Sequence Number(发送序号)为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV
状态。
类似地,ACK报文段是指Control Flag中的ACK位为1的TCP报文段。而SYN+ACK报文段是指Control Flag中的SYN位和ACK位均为1的TCP报文段。
第三次握手 - 客户端收到服务器的SYN+ACK报文段
客户端收到服务器发送的SYN+ACK报文段后,将Acknowledgment Number(确认序号)设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端进入 ESTABLISHED
状态。当服务器端接收到这个ACK报文段后,服务器端进入 ESTABLISHED
状态,完成TCP三次握手。
而如果,客户端向服务器发送ACK报文段没有达到服务器端(或者延迟了),服务器会重新发送一个第二次握手阶段中的SYN+ACK报文段。
...