📑 题目:19. 什么是 TCP 三次握手?

参考解析

三次握手,简单来说,就是:

  • 发送方:我要和你建立链接?
  • 接收方:你真的要和我建立链接么?
  • 发送方:我真的要和你建立链接,成功。

详细来说,步骤如下:

19. 什么是 TCP 三次握手? - 图1

TCP 三次握手的干货

  • 第一次握手:Client 将标志位 SYN=1 ,随机产生一个值 seq=J ,并将该数据包发送给 Server 。此时,Client 进入SYN_SENT 状态,等待 Server 确认。

  • 第二次握手:Server 收到数据包后由标志位 SYN=1 知道Client请求建立连接,Server 将标志位 SYNACK 都置为 1 ,ack=J+1,随机产生一个值 seq=K ,并将该数据包发送给 Client 以确认连接请求,Server 进入 SYN_RCVD 状态。此时,Server 进入 SYC_RCVD 状态。

  • 第三次握手:Client 收到确认后,检查

    1. ack

    是否为

    1. J+1

    1. ACK

    是否为 1 。

    • 如果正确,则将标志位 ACK 置为 1 ,ack=K+1 ,并将该数据包发送给 Server 。此时,Client 进入 ESTABLISHED 状态。
    • Server 检查 ack 是否为 K+1ACK 是否为 1 ,如果正确则连接建立成功。此时 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。
  • 仔细看来,Client 会发起两次数据包,分别是 SYNCACK ;Server 会发起一次数据包,包含 SYNCACK 。也就是说,三次握手的过程中,Client 和 Server 互相做了一次 SYNCACK