八股文-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协议中非常重要的一部分,也是网络通信中的基石之一。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
安全 Linux 数据安全/隐私保护
国内外四款强大的远控使用体验:ToDesk、向日葵、AnyDesk、Microsoft 远程桌面横向比较
国内外四款强大的远控使用体验:ToDesk、向日葵、AnyDesk、Microsoft 远程桌面横向比较
2758 0
|
10天前
|
监控 安全 Linux
告别失联:OpenClaw 阿里云/本地部署与网关维护、免费大模型配置手册
OpenClaw的Gateway网关是整个系统的通信核心、会话中枢、任务调度中心与安全入口,一旦网关异常,所有聊天渠道、技能调用、模型交互都会中断。本文以稳定运行为目标,完整说明Gateway工作机制、全平台部署流程、阿里云百炼Coding Plan免费大模型API配置、网关守护与日志监控方案、常见故障一站式排查,所有内容均为实操可落地命令,无复杂术语,适合零基础用户长期稳定使用。
440 3
|
11月前
|
网络协议 算法 安全
TCP协议(三次握手、流量控制、拥塞控制)
TCP协议是一种可靠的传输层通信协议,通过三次握手建立连接,确保数据安全传输。流量控制通过接收窗口避免接收方缓冲区溢出,拥塞控制则利用拥塞窗口调节网络传输速度,防止网络拥堵。三者协同工作,保障TCP在复杂网络环境中实现高效、可靠的数据传输。
3405 11
数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)
数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)
1293 0
|
缓存 网络协议 算法
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!
672 2
|
存储 运维 应用服务中间件
【运维知识进阶篇】Ansible Roles详解
【运维知识进阶篇】Ansible Roles详解
518 0
|
网络协议 安全 数据挖掘
IPv6与IPv4有何不同
【10月更文挑战第26天】IPv6与IPv4相比,具有更大的地址空间、更小的路由表、增强的组播支持、自动配置支持和更高的安全性。IPv6地址长度为128位,几乎无限的地址资源解决了IPv4地址枯竭的问题;聚类原则减少了路由表大小,加快数据转发速度;自动配置简化了网络管理;加密技术提升了网络安全性。企业迁移到IPv6可以确保未来网络的可持续发展,提高效率和安全性。
2401 0
|
安全 程序员 Linux
探索操作系统的核心:用户态与核心态的深度解析
本文介绍了操作系统中用户态与核心态的概念,两者分别代表程序执行的不同权限级别。用户态限制应用程序访问敏感资源以确保安全,而核心态赋予操作系统完全控制权以管理硬件和内存。文章详细解释了这两种状态的重要性、区别以及如何在二者之间进行切换,包括通过系统调用、异常和中断等方式。理解这些概念对于确保系统的稳定性和安全性至关重要。
1182 3
|
SQL 安全 网络协议
BUUCTF:Misc 解析(九)
BUUCTF:Misc 解析(九)
|
安全 网络安全 数据安全/隐私保护
BUUCTF:Crypto 解析(三)
BUUCTF:Crypto 解析(三)