请详细介绍一下 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 报文段,从而无法建立连接;
四次握手就显得多余了。
-
在讲三次握手之前首先要介绍 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个月前