请详细介绍一下 TCP 的三次握手机制,为什么要三次握手?

在讲三次握手之前首先要介绍 TCP 报文中两个重要的字段:一个是序号字段, 另一个是确认号字段,这两个字段将在握手阶段以及整个信息传输过程起到重要作用。

第一步

客户端 TCP 向服务端的 TCP 发送一个不带额外数据的特殊 TCP 报文段,该报文段的 SYN 标志位会被置 1,所以把它称为 SYN 报文段。

这时客户端会选取一个初始序列号(假设为 client_num),并将此编号放置在序号字段中。 该报文段会被封装在一个 IP 数据报中发送给服务器。

第二步

服务器接收到 SYN 报文段后,会为该 TCP 分配缓存和变量,并发送 允许连接的确认报文。在允许连接的报文中,SYN 标志位仍被置为 1,确认号字 段填的是 client_num + 1 的值。最后服务端也会选取一个 server_num 存放到 序号字段中,这个报文段称为 SYNACK 报文段。

第三步

在接收到 SYNACK 报文段后,客户端最后也要向服务端发送一个确认报文,这个报文和前两个不一样,SYN 标志位置 0,在确认号字段中填上 server_num + 1的值,并且这个报文段可以携带数据。

 

一旦完成这3个步骤, 客户端和服务器之间就可以相互发送包含数据的报文了。 如果不是三次握手,二次两次的话,服务器就不知道客户端是否接收到了自己 的 SYNACK 报文段,从而无法建立连接;

四次握手就显得多余了。

回复

共1条回复 我来回复
  • 迷失技术de小猪
    迷失技术de小猪
    稍等伙伴们,思考简介中~
    评论

    在讲三次握手之前首先要介绍 TCP 报文中两个重要的字段:一个是序号字段, 另一个是确认号字段,这两个字段将在握手阶段以及整个信息传输过程起到重要作用。

    第一步

    客户端 TCP 向服务端的 TCP 发送一个不带额外数据的特殊 TCP 报文段,该报文段的 SYN 标志位会被置 1,所以把它称为 SYN 报文段。

    这时客户端会选取一个初始序列号(假设为 client_num),并将此编号放置在序号字段中。 该报文段会被封装在一个 IP 数据报中发送给服务器。

    第二步

    服务器接收到 SYN 报文段后,会为该 TCP 分配缓存和变量,并发送 允许连接的确认报文。在允许连接的报文中,SYN 标志位仍被置为 1,确认号字 段填的是 client_num + 1 的值。最后服务端也会选取一个 server_num 存放到 序号字段中,这个报文段称为 SYNACK 报文段。

    第三步

    在接收到 SYNACK 报文段后,客户端最后也要向服务端发送一个确认报文,这个报文和前两个不一样,SYN 标志位置 0,在确认号字段中填上 server_num + 1的值,并且这个报文段可以携带数据。

     

    一旦完成这3个步骤, 客户端和服务器之间就可以相互发送包含数据的报文了。 如果不是三次握手,二次两次的话,服务器就不知道客户端是否接收到了自己 的 SYNACK 报文段,从而无法建立连接;

    四次握手就显得多余了。

    1个月前 0条评论
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载