请详细介绍一下 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 报文段,从而无法建立连接;

四次握手就显得多余了。

回复

我来回复
  • 暂无回复内容

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部