🔥🔥TCP协议:三次握手、四次挥手,你真的了解吗?

简介: 这篇面试文章主要介绍了TCP协议的网络分层以及TCP的三次握手和四次挥手的原理。TCP协议的分层结构和三次握手、四次挥手的原理确保了数据的可靠传输和连接的可靠建立与断开。这些概念和原理在网络工程中起着重要的作用,并且是网络面试中常见的考点。

什么是TCP网络分层

image

应⽤层

应用层是网络协议栈中的最顶层,主要负责应用程序之间的通信。其中一种常见的应用层协议是HTTP协议,它定义了应用程序之间如何传递报文。

传输层

传输层是为两台主机之间的应用进程提供端到端的逻辑通信的层级。其中一种常见的传输层协议是TCP协议,它负责可靠的数据传输。

⽹络互连层

网络互连层负责主机之间的通信,它将传输层产生的数据包封装成分组数据包,并通过路由选择将其发送到目标主机。IP协议是网络互连层的主要协议,TCP和UDP协议都使用IP协议作为网络层协议。该层的主要作用是为数据包添加源地址和目标地址,并将数据包传送到目标地址。

⽹络访问层

网络访问层,也称为网络接口层,负责主机连接到物理网络所需的硬件和相关协议。以太网、Wi-Fi和蓝牙工作在这一层。网络访问层提供了主机与物理网络之间的接口。

网络协议栈中的分层结构有许多优点:

  1. 各层独立:分层结构限制了依赖关系的范围,使得各层之间可以使用标准化的接口进行通信。每一层不需要了解上下层的具体工作方式,这样增加或修改一个应用层协议不会对传输层协议造成影响。
  2. 灵活性更好:分层结构使得路由器等网络设备可以只加载较少数量的协议,不需要应用层和传输层的功能。这样可以根据设备的需求选择加载的协议,提高了设备的灵活性。
  3. 易于测试和维护:分层结构提高了可测试性,可以独立地测试特定层的功能。此外,如果某一层有了更好的实现,可以整体替换掉该层,而无需对其他层进行修改,简化了系统的维护工作。
  4. 能促进标准化:分层结构使得每一层的职责清晰明确,便于进行标准化工作。每一层都有自己的规范和接口,使得不同厂商或组织可以遵循相同的标准进行开发,提高了网络设备和应用程序的互操作性。

TCP的三次握手中为什么是三次?为什么不是两次、四次?

image

TCP的三次握手是为了建立可靠的连接,确保通信双方都能够正常发送和接收数据。下面是三次握手的过程:

  1. 第一次握手:客户端向服务器发送一个带有SYN标志的数据包,表示请求建立连接。客户端将随机生成一个初始序列号(ISN)并将其放入SYN字段中。
  2. 第二次握手:服务器接收到客户端的请求后,会发送一个带有SYN和ACK标志的数据包作为响应。服务器将确认序列号(ACK)设置为客户端的ISN加一,并生成自己的初始序列号。
  3. 第三次握手:客户端收到服务器的响应后,会发送一个带有ACK标志的数据包作为确认。客户端将确认序列号设置为服务器的ISN加一。

通过三次握手,双方确认了彼此的收发能力和初始序列号,并建立了可靠的连接。为什么是三次握手而不是两次或四次呢?

如果只有两次握手,那么在某些情况下可能会导致不可靠的连接建立。例如,客户端发送了一个建立连接的请求,但由于网络延迟或其他原因,该请求在传输过程中被延迟到达服务器。服务器此时会误认为客户端要建立连接,于是发送确认响应。然而,客户端并未发送过请求,因此不会回复确认。这样就会导致服务器一直等待客户端的回复,浪费资源。

通过引入第三次握手,可以解决上述问题。在第一次握手时,客户端发出建立连接的请求,服务器接收到后进行响应。但是如果响应丢失了,客户端会再次发送请求,即第二次握手。服务器接收到后再次响应,这样就确保了双方都能正确地建立连接。

至于为什么不是四次握手,主要是因为虽然四次握手也可以实现可靠地同步双方的初始序列号,但由于第二步和第三步可以合并为一步,所以最终演变成了三次握手。而两次握手只能保证一方的初始序列号被对方成功接收,无法保证双方的初始序列号都能被确认接收。因此,三次握手是为了确保TCP连接的稳定性和可靠性而采取的最佳选择。

TCP的四次挥手为什么是四次?为什么不能是三次?

image

TCP的四次挥手是为了结束已建立的连接,确保双方都能正确地关闭连接并释放资源。下面是四次挥手的过程:

  1. 第一次挥手:客户端发送一个带有FIN(结束)标志的数据包,表示自己已经没有数据要发送了,请求关闭连接。
  2. 第二次挥手:服务器接收到客户端的结束请求后,会发送一个带有ACK(确认)标志的数据包作为响应,表示已收到客户端的结束请求。
  3. 第三次挥手:服务器发送一个带有FIN标志的数据包,表示自己也没有数据要发送了,请求关闭连接。
  4. 第四次挥手:客户端接收到服务器的结束请求后,会发送一个带有ACK标志的数据包作为确认,表示已收到服务器的结束请求。

通过四次挥手,双方确认彼此的结束请求,并最终关闭连接。为什么是四次挥手而不是三次?

在关闭连接时,需要确保双方都完成了数据的传输和接收,以防止数据丢失或错误。如果只有三次挥手,可能会导致一些问题。

假设只有三次挥手,当客户端发送结束请求后,服务器收到后会发送确认,表示已收到客户端的结束请求。但是在此过程中,服务器可能还有未发送完的数据,如果直接关闭连接,那么这些数据就会丢失。因此,引入第三次挥手,服务器在发送结束请求前,先发送所有未发送完的数据,并等待客户端的确认。客户端接收到服务器的结束请求后,会确认并处理完未接收的数据,然后发送确认,表示自己已准备好关闭连接。

通过四次挥手,可以确保双方都能正确地结束连接,并处理未发送和未接收的数据,保证数据的完整性和可靠性。因此,关闭连接需要四次挥手。

总结

分层结构具有多个优点。首先,每个层次都是相对独立的,这意味着可以在不影响其他层次的情况下进行修改和更新。其次,分层结构具有更好的灵活性,可以根据需要添加、删除或调整层次。第三,由于各层次之间的明确接口,易于测试和维护。最后,分层结构有助于促进标准化,因为每个层次的功能和接口都可以被规范化和标准化。

TCP协议中的三次握手用于建立可靠的连接。通过三次握手,客户端和服务器可以确认对方的可靠性和可用性,并同意建立连接。而四次挥手的设计则旨在确保连接可以正确关闭。在四次挥手过程中,双方通信结束前,首先向对方发送关闭连接的请求,然后等待对方确认关闭请求,最后确认对方关闭请求并关闭连接。这两个过程是TCP协议中非常重要的部分。

以上只是一篇关于TCP协议的面试文章的一小部分内容。后续将会提供更多有针对性的面试题,以深入探讨TCP协议的相关细节。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
821 1
|
2月前
|
人工智能 自然语言处理 数据可视化
阿里云一键部署OpenClaw(原Clawdbot/Moltbot)图文版详细教程
OpenClaw(原Clawdbot/Moltbot)是开源可自托管的AI执行助理,支持自然语言理解与自动化任务执行,如写代码、整理文件、网页爬取、对接飞书/钉钉等。阿里云提供一键部署方案,三步即可快速启用,赋能7×24小时智能办公。
1734 3
|
2月前
|
人工智能 自然语言处理 机器人
零基础入门:阿里云OpenClaw保姆级部署教程(附图文步骤)
OpenClaw是集自然语言理解、任务自动化与多工具集成于一体的AI代理,支持邮件处理、文件备份、日程管理等智能操作。本文提供阿里云一键部署图文教程,零基础用户10分钟即可搭建24小时在线AI助理,稳定省心、跨端可用。
2322 10
|
7月前
|
关系型数据库 Apache 微服务
《聊聊分布式》分布式系统基石:深入理解CAP理论及其工程实践
CAP理论指出分布式系统中一致性、可用性、分区容错性三者不可兼得,必须根据业务需求进行权衡。实际应用中,不同场景选择不同策略:金融系统重一致(CP),社交应用重可用(AP),内网系统可选CA。现代架构更趋向动态调整与混合策略,灵活应对复杂需求。
|
机器学习/深度学习 数据可视化 算法
Ray Flow Insight:让分布式系统调试不再"黑盒"
作为Ray社区的积极贡献者,我们希望将这些实践中沉淀的技术能力回馈给社区,推动Ray生态在实际场景中的应用深度和广度。因此,2024年底我们做了激活AntRay开源社区的决策,AntRay会始终保持与官方Ray版本强同步(即AntRay会紧随Ray官方社区版本而发布),内部Feature亦会加速推向AntRay以开源研发模式及时反哺内部业务,同时会将社区关注的Feature提交至Ray官方社区,实现内外部引擎双向价值流动。后续我们会以系列文章形式同步蚂蚁推向开源的新特性,本文将重点介绍:Ray Flow Insight —— 让分布式系统调试不再"黑盒"。
|
10月前
|
Rust 安全 前端开发
Github 轻松斩获30k+ Star,桌面应用开发太丝滑啦,Tauri框架能重塑桌面App开发?别错过,抓紧上车
Tauri 是一个基于 Rust 的开源框架,用于构建轻量级、高性能、安全的跨平台桌面及移动应用。它利用系统 WebView 渲染前端界面,后端由 Rust 编写,具备出色的性能和安全性。相比 Electron,Tauri 应用体积更小、启动更快,且默认权限更安全。它支持 React、Vue、Svelte 等主流前端框架,并提供自动更新、CLI 工具链、资源注入优化等功能,适用于生产力工具、开发者工具、数据分析、AI 应用等多种场景。目前 Tauri 在 GitHub 上已获得超过 30,000 Star,社区活跃,是现代桌面应用开发的理想选择。
1299 0
|
10月前
|
存储 缓存 人工智能
揭秘 GitHub ★11.1k 让你的存储秒变“万能盘”?JuiceFS:最好用的分布式文件系统存储系统能为你带来怎样革命性的提升?
JuiceFS 是一款高性能分布式文件系统,兼容 POSIX、HDFS 和 S3 接口,支持多云与混合云架构,提供多级缓存、强一致性、镜像同步及可视化监控等功能,适用于 AI 训练、大数据分析、日志统一存储等场景,助力企业提升存储效率并降低成本。
350 1
|
人工智能 语音技术 iOS开发
MiniCPM-o 2.6:面壁智能开源多模态大模型,仅8B参数量就能媲美GPT-4o,支持实时交互,在ipad等终端设备上运行
MiniCPM-o 2.6 是面壁智能开源的多模态大模型,支持视觉、语音和多模态直播,性能媲美GPT-4o,能够在端侧设备上高效运行。
1222 10
MiniCPM-o 2.6:面壁智能开源多模态大模型,仅8B参数量就能媲美GPT-4o,支持实时交互,在ipad等终端设备上运行
|
人工智能 运维 负载均衡
智能运维新时代:AI在云资源管理中的应用与实践
智能运维新时代:AI在云资源管理中的应用与实践
1348 23
|
网络协议 Shell 网络安全
docker容器网络问题
【10月更文挑战第4天】
1950 2

热门文章

最新文章