为什么TCP需要三次握手?一次不行吗?

文章目录

    • [1. 三次握手的过程](#1. 三次握手的过程)
    • [2. 为什么需要三次握手?](#2. 为什么需要三次握手?)
    • [3. 握手过程中每一步的具体作用](#3. 握手过程中每一步的具体作用)
    • [4. 简单比喻](#4. 简单比喻)
    • [5. 为什么是三次握手,而不是两次或四次?](#5. 为什么是三次握手,而不是两次或四次?)
    • [6. 三次握手中的序列号有什么作用?](#6. 三次握手中的序列号有什么作用?)
    • [7. 总结](#7. 总结)

1. 三次握手的过程

三次握手是建立 TCP 连接的过程,目的是确保通信双方能够可靠地建立连接。它的基本过程如下:

  • 第一次握手:客户端发送一个 SYN 报文给服务器,表示请求建立连接。
  • 第二次握手:服务器收到 SYN 后,发送 SYN+ACK 报文给客户端,表示确认收到请求,并同意建立连接。
  • 第三次握手:客户端收到 SYN+ACK 后,发送 ACK 报文给服务器,确认连接建立。

当这三步完成后,TCP 连接正式建立,双方可以开始通信。

2. 为什么需要三次握手?

三次握手的主要目的是防止已失效的连接请求报文被误接收,从而引发错误。

例如:如果没有三次握手,假设客户端第一次发送的 SYN 报文因网络延迟滞留很久,服务器收到后误以为是新的连接请求,发送 SYN+ACK,而客户端实际上已经关闭或不需要连接了。这样,服务器就会白白等待,浪费资源。

三次握手通过让客户端确认服务器的响应,确保双方都明确知道对方的通信能力,从而建立可靠的连接。

3. 握手过程中每一步的具体作用

第一次握手(SYN):

  • 客户端主动发送一个 SYN 报文,标志着它想要建立连接,同时携带一个序列号(Sequence Number,简写为 Seq)。
  • 作用:客户端告诉服务器,"我想和你建立连接,同时我的序列号是 X。"

第二次握手(SYN+ACK):

  • 服务器收到 SYN 报文后,会回复一个 SYN+ACK 报文,表示同意连接,并告知客户端它的初始序列号。
  • 作用:服务器告诉客户端,"我同意你的请求,我的序列号是 Y,同时我收到你的序列号 X。"

第三次握手(ACK):

  • 客户端收到 SYN+ACK后,再发送一个 ACK 报文,确认连接已建立。
  • 作用:客户端告诉服务器,"我确认收到你的序列号 Y,同时你也收到了我的序列号 X,我们可以正式通信了。"

4. 简单比喻

假设一个日常场景:你和朋友约好电话联系。

第一次握手: 你拨通朋友的号码,电话响了(客户端发送SYN)。

  • 作用:表示你希望和朋友建立通话。

第二次握手: 朋友接起电话并回应:"喂,你好"(服务器发送 SYN+ACK)。

  • 作用:朋友同意与你通话,并向你确认他可以正常接收你的声音。

第三次握手: 你说:"你好,我能听到你,我们可以聊天了。"(客户端发送ACK)。

  • 作用:确认双方的通信能力正常,通话开始。

5. 为什么是三次握手,而不是两次或四次?

两次握手的问题:

  • 如果仅用两次握手,服务器在收到客户端的第一次 SYN 后就认为连接已经建立,这可能导致服务器被无效连接请求拖累。三次握手让客户端确认了服务器的响应,避免了这种情况。

为什么不需要四次握手?

  • 四次握手会浪费一次额外的交互,在双方都已确认的情况下没有必要。三次握手已经足够确保双方的通信能力和连接的可靠性。

6. 三次握手中的序列号有什么作用?

序列号用于保证数据传输的有序性和可靠性。在握手中,双方交换初始序列号,后续传输中,数据会按照序列号排列并校验,以避免丢包、乱序等问题。

比如,客户端的初始序列号是 100,服务器的初始序列号是 200,那么双方的后续数据传输会以这两个值为起点,确保数据能被正确接收。

7. 总结

三次握手的精妙之处在于:既确保了双方的通信能力,又避免了不必要的资源浪费,同时为后续可靠通信奠定了基础。

相关推荐
闲倚一枝藤2 分钟前
网络机顶盒常见问题全解析:从安装到故障排除
网络·电视盒子·智能电视·电视机·tv·网络机顶盒·乐看家桌面
无名之逆4 分钟前
高性能文件上传服务
java·服务器·网络·http·rust
hgdlip1 小时前
跨省发布抖音作品,IP属地会随之变化吗?
服务器·tcp/ip·抖音
Ctrl Z.1 小时前
【计算机网络实践】(十二)大学校园网综合项目设计
网络·计算机网络·智能路由器
半路_出家ren1 小时前
动态路由, RIP路由协议,RIPv1,RIPv2
网络·网络安全·rip·路由协议·动态路由·ripv1·ripv2
muxue1781 小时前
centos 7:虚拟机网络配置
网络
ShAn DiAn2 小时前
C++ 重构muduo网络库
网络·c++·网络协议
Lfsd3 小时前
从 SYN Flood 到 XSS:常见网络攻击类型、区别及防御要点
网络·安全·xss
rainFFrain3 小时前
网络基础1
网络
Respect@5 小时前
tcpdump`是一个非常强大的命令行工具,用于在网络上捕获并分析数据包
网络·测试工具·tcpdump