八股文-TCP的三次握手

简介: TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。

TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。

tcp.jpg

漫画TCP的三次握手

TCP连接的建立采用了三次握手的机制,确保通信双方都能够正常收发数据。我们通过漫画的形式示例下:
-2023-11-04-2144b30e777bc73a1a2b.png

第一次握手(SYN)

连接的发起方是客户端,它向服务器发起连接请求。这个过程称为“第一次握手”;

1. 客户端发送SYN(同步序列号)标志的数据包给服务器。

客户端希望建立连接,于是发送一个包含SYN标志的数据包。这个包中还包含一个随机生成的序列号(ISN,Initial Sequence Number),用于后续数据的顺序传输。

2. 客户端进入SYN-SENT状态。

客户端发送完SYN后,进入SYN-SENT状态,等待服务器的响应。

第二次握手(SYN + ACK)

服务器收到客户端的SYN后,决定是否接受连接请求。如果服务器愿意接受,就会回应一个包含SYN/ACK标志的数据包;

1. 服务器发送SYN/ACK标志的数据包给客户端。

服务器接收到客户端的SYN后,向客户端发送一个包含SYN/ACK标志的数据包,表示已收到连接请求,并同样包含一个随机生成的序列号。

2. 服务器进入SYN-RECEIVED状态。

服务器发送完SYN/ACK后,进入SYN-RECEIVED状态,等待客户端的最后确认。

第三次握手(ACK)

客户端收到服务器的SYN/ACK后,决定是否接受连接。如果接受,客户端会发送一个带有ACK标志的数据包;

1. 客户端发送ACK标志的数据包给服务器。

客户端收到服务器的SYN/ACK后,向服务器发送一个带有ACK标志的数据包,表示连接建立成功。

2. 客户端进入ESTABLISHED状态。

客户端发送完ACK后,进入ESTABLISHED状态,连接建立成功。此时,服务器也接收到了客户端的确认,进入ESTABLISHED状态。

至此,三次握手完成,连接建立成功,双方可以进行正常的数据传输了。

详细图示如下:

tcp.png

为什么是三次握手?

  • 确保双方都具备通信能力

第一次握手: 服务端可以确认客户端的发送能力,自己的接收能力是正常的;

第二次握手: 客户端确认服务端的发送能力,自己的接收能力是正常的;服务端可以确认自己的发送能力是正常的;

第三次握手: 服务端确认客户端的接收能力是正常的;

  • 防止失效的连接请求被误认为是新连接

如果只有两次握手,会出现以下问题:

  1. 客户端发送连接请求(SYN)。
  2. 服务器收到请求后,发送确认(ACK)。
  3. 客户端在接收到确认前就突然宕机或丢失数据包。

此时,服务器无法知道是因为连接成功而没有收到客户端的确认,还是客户端的连接请求根本没有到达。如果客户端重新启动并发送一个新的连接请求,而这个新请求的序列号与旧请求一致,服务器可能会误认为是同一个连接请求,导致连接的混乱。

总结

通过三次握手,TCP协议在连接建立阶段建立了双方的信任,确保了后续数据传输的可靠性和有序性。这个过程是TCP协议中非常重要的一部分,也是网络通信中的基石之一。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
1
1
1
177
分享
相关文章
为什么TCP需要三次握手?一文讲透!
TCP三次握手是TCP协议建立连接的关键步骤,确保客户端和服务端同步状态并确认彼此的存在。过程分为三步:1) 客户端发送SYN包请求连接;2) 服务端回应SYN/ACK包确认收到并提供初始序列号;3) 客户端发送ACK包确认服务端的序列号,双方进入连接状态。此机制确保了双向通信的可靠性和资源的有效利用,避免了失效请求导致的问题。
通俗易懂理解三次握手、四次挥手(TCP)
这篇文章用通俗的语言解释了TCP协议中的三次握手和四次挥手过程,通过比喻和详细的状态变化描述,帮助读者理解建立和断开连接的原理和原因。
通俗易懂理解三次握手、四次挥手(TCP)
你从未见过如此详细的 TCP 八股文!
重传丢失的数据包; 如果再收到重复的 ACK,那么拥塞窗口值加 1; 如果收到新数据的 ACK 后,把拥塞窗口值设置为慢启动门限值,原因是该 ACK 确认了新的数据,说明丢失的数据包已收到,快速恢复过程结束,再次进入拥塞避免状态; 没有像超时重传一夜回到
144 3
八股文-TCP的四次挥手
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时,使用四次挥手来保证数据的完整传输和连接的正常终止。
117 3
八股文-TCP的四次挥手
面试突击68:为什么 TCP 需要 3 次握手?
面试突击68:为什么 TCP 需要 3 次握手?
181 1
TCP三次握手四次挥手(三国版)
TCP的三次握手四次挥手 TCP的三次握手和四次挥手不管是我们自己使用还是面试都是需要掌握的,本文先将原理,然后以三国为例讲个小栗子帮助理解。
199 0
TCP三次握手四次挥手(三国版)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等