TCP的三次握手

214 阅读2分钟

TCP

传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流传输层通信协议,由IETFRFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内另一个重要的传输协议。

------维基百科

TCP:一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP的三次握手

握手的目的是为了确保双方都具备收发的能力,指定自己的初始序列号

TCP三次握手 (1).jpg

第一次握手:客户端想要创建一个连接,发送SYN(SYN=1)报文,并指定自己的初始化序列号ISN,即seq=k,表示本报文段所发送的数据的第一个字节的序号,客户端进入SYN_SENT状态

第二次握手:服务器端收到SYN,于是回应客户端SYN(SYN=1),并且指定自己的初始化序列号ISN,即seq=p,并让自己的确认号ack=k+1(客户端的随机序列号+1)表示已经收到了客户端发来的SYN报文,希望收到的下一个数据的第一个字节的序号是k+1,进入SYN_RECV状态。

第三次握手:客户端收到服务器端的SYN报文,发送一个ACK报文,并让自己的确认号ack=p+1,表示已经收到了服务端的SYN报文,希望收到的下一个数据的第一个字节的序号是p+1,并指明此时客户端的序列号seq=k+1,进入ESTABLISHJED状态

服务端收到ACK报文后进入ESTABLISHED状态,可进行数据传输

为什么握手次数是三次

第一次握手:

服务端确认客户端具备发送能力

自身具备接收能力

第二次握手:

客户端确认服务端具备接收能力和发送能力

自身也具备收发能力

第三次握手:

服务端确认客户端具备接收能力

经过三次握手以后,双方就可确认自身和对方的收发功能正常,可以正常通信,所以握手次数是三次

三次握手的一个重要作用是告知对方自己的初始序列号,表示即将发送的数据将从这个号开始,便于对方在接收后按照序列号组装数据