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

网络 通信技术
TCP协议需要经过三次握手,才能建立连接,而像SCTP协议,则必须经过四次握手,才能建立连接。不禁我们要问了,为什么TCP不是两次握手,或者四次握手来建立连接呢?

TCP协议需要经过三次握手,才能建立连接,而像SCTP协议,则必须经过四次握手,才能建立连接。不禁我们要问了,为什么TCP不是两次握手,或者四次握手来建立连接呢?

TCP是一种可靠的传输控制协议,它必须做到两点,一是保证数据的可靠传输,二是尽可能提高传输效率,三次握手正是为了做到这两点才出现的。

[[397071]]

可靠性的实现

假设A、B双方欲建立TCP连接。

首先,由操作系统随机选取一个32位序列号,假设A的初始序列号为1000,接着对所要发送的数据进行编号,1001,1002,1003...

A会把初始序列号ISN告诉给B,让B知道,什么样的编号数据是合法的,什么样的编号数据是非法的,比如接收到一个编号999的数据,那就是非法的。

B也会对A每一个编号数据进行确认,如果收到编号为2001,1001-2000说明有1000个字节已经安全到达。

同理,B也会进行类似的操作。如果B的初始序列号ISN为2000,B也会开始编号2001,2002,2003...

B再将初始序列号ISN告诉A,A同样可以确认B发送了多少个字节,这些数据合不合法。

通过以上步骤,不难发现,TCP协议握手的本质是通信双方数据原点的序列号,从而实现可靠性。

传输效率

实现数据可靠传输,为什么刚好需要三次握手呢?如果两次握手,行不行?

两次握手:

  • A发送同步信号SYN+A的初始序列号
  • B发送同步信号SYN+B的初始序列号+B的ACK序列号

两次握手会产生一个问题,B没办法知道A是不是已经接收了自己的同步信号。一旦这个同步信号丢了,A和B就B的初始序列号将无法达成一致。

显然,两次握手是不可取的。

那么四次握手又如何呢?

  • A发送同步信号SYN+A的初始序列号
  • B确认收到A的同步信号,并记录A的ISN到本地,命名B的ACK序列号
  • B发送同步信号SYN+B的初始序列号
  • A确认收到B的同步信号,并记录B的ISN到本地,命名A的ACK序列号

显然,并不需要四个步骤,2和3和可以合并,提高连接的速度和效率。

TCP协议需考虑到可靠性和传输效率,明白了这一点,我们也就明白了为什么只能是三次握手,而不是两次或者四次了。

 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-05-14 10:09:06

TCP连接握手

2021-07-26 08:08:56

TCPIP网络协议

2021-05-28 09:08:20

TCP连接序列号

2015-10-13 09:42:52

TCP网络协议

2019-06-12 11:26:37

TCP三次握手四次挥手

2021-12-02 09:20:33

TCPLinux三次握手

2023-10-24 15:22:09

TCPUDP

2024-01-12 08:23:11

TCPACK服务器

2021-07-03 17:47:25

TCP控制协议

2023-09-07 16:46:54

TCP数据传递

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制协议

2019-02-01 09:38:16

2020-02-17 10:10:43

TCP三次握手四次挥手

2017-09-25 21:27:07

TCP协议数据链

2020-06-29 14:50:47

TCP状态ACK

2015-11-09 09:58:56

2023-10-28 09:07:57

TCP面试三次握手

2022-11-17 10:20:49

TCP三次握手四次挥手

2014-09-19 09:46:46

TCPIP
点赞
收藏

51CTO技术栈公众号