TCP为什么需要3次握手

TCP报文段首部

大致的流程想必大家并不陌生,我们先具体分析一下它这三次传输 首部都包含了哪些信息。

我们先来认识一下TCP报文段的首部都有哪些字段是需要用到的:

  • s e q seqseq:序号

➢ TCP会给每一个字节都编上一个序号,而序号字段的值则是当前报文段所发送数据报的第一个字节的序号。

➢ 假设当前发送的数据序号为 1 − 200 1-2001−200,那么序号字段的值就是 1 11。

TCP为什么需要3次握手

  • a c k ackack:确认号

➢ 确认号的值是期望收到对方下一个报文段的数据的第一个字节的序号

➢ 假设上方举例 发送的数据序号为 1 − 200 1-2001−200:发送方为 A AA,接收方为 B BB,那么此时 B BB 返回的确认号即为 201 201201。

TCP为什么需要3次握手

展开全文

一共需要用到两个校验位 ( b i t ) (bit)(bit),分别是 S Y N SYNSYN 和 A C K ACKACK

  • S Y N SYNSYN:同步位

➢ 当同步位被置为 1 11 时,就是在建立连接。

➢ 当同步位被置为 0 00 时,连接建立成功。

TCP为什么需要3次握手

A C K ACKACK:确认位

➢ 当确认位被置为 1 11 时,说明确认号字段有效。

➢ 当确认位被置为 0 00 时,确认号无效。

TCP为什么需要3次握手

注意:确认号 a c k ackack 是小写的,确认位 A C K ACKACK 是大写的。

TCP建立连接

A AA 为客户端 ( C l i e n t ) (Client)(Client),B BB 为服务端 ( S e r v e r ) (Server)(Server)。

第一次握手

TCP为什么需要3次握手

此时主机 A AA 向主机 B BB 第一次发出请求(刚开始它的报头肯定有源端口、目的端口等,但这不是我们关注的重点),关键的是,我怎么体现我要跟你建立连接?

此时还并没有确认号、确认位的参与。

TCP为什么需要3次握手

第二次握手

TCP为什么需要3次握手

此时仅代表,A AA 给 B BB 发请求,B BB 已经收到了,但怎么确定 B BB 给 A AA 发的数据,A AA 也能收到呢?所以还需要下面两个字段,来进行第三次的握手:

第一次握手表示 A AA 给 B BB 发请求,第二次握手表示 B BB 给 A AA 做确认,同时 B BB 也向 A AA 发起连接请求;但此时 B BB 还需要 A AA 的回应。

就像打电话:

A问:你能听到我说话吗?

B回答:能,那你能听到我说话吗?

A回答:我也能

TCP是一个全双工的协议,所以此时必须要有第三次握手。

第三次握手

TCP为什么需要3次握手

A AA 给 B BB 做出最后一次的确认,表示你刚才给我发的请求和数据我都已经收到了。

至此,A AA 和 B BB 的连接就建立成功了。

注意,此时同步位 S Y N = 0 SYN=0SYN=0 已被置为 0 00,因为连接已经建立成功。

三次握手TCP连接的各个状态

  • C L O S E D CLOSEDCLOSED:关闭状态
  • L I S T E N LISTENLISTEN:监听状态
  • S Y N − S E N T SYN-SENTSYN−SENT:连接发送状态
  • S Y N − R C V D SYN-RCVDSYN−RCVD:连接接收状态
  • E S T A B − L I S H E D ESTAB-LISHEDESTAB−LISHED:已确认连接状态

TCP为什么需要3次握手

面试题

TCP为什么需要3次握手

这是一道很常见的面试题,但是大家有没有思考过,为什么是 3 33 次呢?2 22、4 44 次不可以吗?

我的理解:

  • TCP是一个全双工的协议,对于发送端 A AA 和 接收端 B BB 来说,我发送的消息一定是有回复的,达到了有去有回才代表着我建立的道路是连通的,所以对于 A B ABAB 两台机器来说,都需要一去一回,这样就是 3 33 次了。
  • 所以 2 22 次握手肯定不是不够的,而对于TCP,3 33 次握手就可以建立可靠连接,4 44 次甚至更多次通信都会造成资源的浪费。

————————————————

版权声明:本文为CSDN博主「小成同学_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:【计算机网络】TCP为什么需要3次握手_小成同学_的博客-CSDN博客

发表评论