为什么是三次握手?不是两次、四次?

TCP 的可靠连接是靠 seq( sequence numbers 序列号)来达成的。

所以说,建立可靠连接,需要对客户端和服务器的起始序列号达成共识。TCP建立链接的过程如下:

)

一、为什么不能两次握手?

第一步:客户端发送一个起始序列号seq = x的 报文段给服务器。

第二步:服务器端返回向客户端发送确认号 ack = x+1,表示对客户端的起始序列号x 表示确认,并告诉客户端,他的起始序列号是 seq = y.

所以,为什么不能两次握手?因为这种情况下,只有服务器对客户端的起始序列号做了确认,但客户端却没有对服务器的起始序列号做确认,不能保证传输的可靠性。

二、为什么不是四次握手?

第一步:客户端A 发送同步信号SYN + A的初始序列号 seq = x

第二步:服务器端B 确认收到A的同步信号,并记录A的初试序列号到本地,并向A发送确认信息 ack =x+1。

第三步:B发送同步信号SYN + B的初始序列号 seq 给客户端A。

第四步:A确认收到B的同步信号,并记录 B'的初试序列号到本地,并向B发送确认信息 ack = y + 1.很显然,第二,三步可以合并,只需要三次握手,可以提高连接的速度与效率。

三、综上

TCP链接之所以可靠,是因为其链接是面向字节的。

在通信的过程中,协议会给每个字节一个序分配一个序号。三步握手的过程,主要是为了互相确认双方的起始序列号。

如果只进行两次握手,客户端发送链接请求及起始序列号seq = x, 收到 服务器端的起始序列号seq = y及对客户端序列号seq= x 的确认。此时,双方就 客户端的起始序列号达成了共识。

此时,并没有对服务器的起始序列号达成共识,所以就需要进行第三次握手。对B的起始序列号达成共识,不能保证通信的可靠。

如果进行四次握手,在四次握手的过程中,可以把第二、三步合并,这样可以提高连接的速度与效率。

链接:https://www.zhihu.com/question/24853633/answer/632071336

posted @ 2020-04-25 18:33  xyztank  阅读(447)  评论(0编辑  收藏  举报