什么是TCP的三次握手?

三次握手是指建立一个 TCP 连接时,需要客户端和服务端发送三个数据包的过程。进行三次握手是为了确定双方的接收能力和发送能力是否正常。

刚开始客户端处于 Closed 状态,服务端处于 Listen 状态。

第一次握手:

    客户端给服务端发送一个 SYN 报文,并指定客户端的初始化序列号 ISN ,此时客户端处于 SYN_SEND 状态。 SYN 报文内容:首部的同步位 SYN = 1,初始序号 Sequence number = x。 SYN = 1 的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:

    服务端受到客户端的SYN报文后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN。同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD状态。 SYN报文内容:SYN = 1,ACK = 1, Sequence number = y, Acknowledgment number = x + 1。

第三次握手:

    客户端受到 SYN 报文后,会发送一个 ACK 报文,把服务器的 ISN + 1 作为自己Acknowledgment number的值,表明自己已经收到了 SYN 报文,此时客户端处于ESTABLISHED状态,服务器收到 ACK 报文后,也处于 ESTABLISHED状态。此时双方已经建立链接。 ACK报文内容: ACK = 1, Acknowledgment number = y + 1, Sequence number = x + 1。 ACK报文段可以携带数据,不携带数据则不消耗序号。
经验分享 程序员 微信小程序 职场和发展