TCP协议为什么是3次握手,4次挥手

简介: TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。TCP/IP五层模型应用层传输层网络层数据链路层物理层TCP是在传输层的协议,主要实现主机到主机通信,前提是需要知道主机们的网络地址(IP地址),但是TCP不负责实际地址到地址的传输,因此TCP协议把IP地址给底层的网络层处理。

TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。

TCP/IP五层模型

应用层

传输层

网络层

数据链路层

物理层

TCP是在传输层的协议,主要实现主机到主机通信,前提是需要知道主机们的网络地址(IP地址),但是TCP不负责实际地址到地址的传输,因此TCP协议把IP地址给底层的网络层处理。

网络层,提供地址到地址的通信,IP协议就是在这一层工作。互联网层解决地址到地址的通信,但是不负责信号在具体两个设备间传递,因此,网络层会调用下方的链路层,在两个相邻设备间传递信息。当信号在两个设备间传递的时候,物理层封装最底层的物理设备,传输介质,由最下方的物理层提供最底层的传输能力。

会话是应用层的概念,连接是传输层的概念。

TCP是一个双工协议,数据任何时候都可以双向传输。这就意味客户端和服务端可以平等地发送接收信息。

TCP是一个连接向导的协议,设计有建立连接(握手)和断开连接(挥手)的过程。TCP没有设计会话(Session),因为会话是应用层的行为。

TCP协议基本操作如下:

1、一个Host主动向另一个Host发起连接,成为SYN(Synchroniation),请求同步;

2、一个Host主动断开请求,称为FIN(Finsh),请求完成

3、一个Host给另一个Host发送数据,称为PSH(Push),数据推送

以上3种情况,接收方接到数据后,需要给发送方一个响应ACK(Acknowledgement)。如果一个请求没有响应,发送方会重新发送这个请求。

建立连接的过程(三次握手)

因为要保证连接和可靠性约束,TCP协议要保证每一条发出的数据必须给返回,返回的数据叫ACK(也就是响应)

1、客户端发消息给服务端(SYN)

2、服务端准备好进行连接。

3、服务端针对客户端的SYN给一个ACK

如果到这结束了,服务端还没有确定客户端是否准备好,这个时候如果服务端马上会再给客户端发送数据,客户端可能还没准备好接受数据。所以还要增加一个过程。

4、服务端发送一个SYN给客户端

5、客户端准备就绪

6、客户端给服务端发送一个ACK。

步骤1是一次握手

步骤3和步骤4,是同时发生的,合并为一个SYN-ACK响应,作为一条数据传递给客户端,所以属于第二次握手。

步骤6是第三次握手。
image.png

TCP协议为什么是3次握手,4次挥手
断开连接的过程(4次挥手)

可以类比建立连接的过程

1、客户端要求断开连接,会发送一个断开的请求,FIN。

2、服务端收到这个请求后,会给客户端回一个ACK,作为FIN的响应。

3、然后这块就是与建立连接的时候有区别了。

断快连接这,服务端不会马上又发一个FIN,给客户端。因为断开连接的处理问题比较多,比如说服务端可能还有发送出去的消息没有得到ACK;也有可能服务端自己有资源需要释放。因此断开连接不能像建立连接那样,将两条信息合并。所以服务端需要等待一段时间,确定可以关闭连接了,再发一条FIN给客户端。

4、客户端收到服务端的FIN后,会给服务端一个响应ACK。

所以这个断开连接过程就是4次挥手。

image.png

TCP协议为什么是3次握手,4次挥手
总结,来说为什建立连接的时候是3次握手,断开连接的时候是4次挥手,说白了就是在握手的时候双方没有过多的事情,所以在服务端接收到客户端的请求后,立马又发送了一个建立连接的请求,也就是SYN和ACK合到了一起,发送给的客户端。而断开连接的时候,由于客服务端在给客户端回复确认的ACK后,还需要等待一会,等待客户端的所有响应都收到了。然后再发送一条断开的请求FIN,然后客户端在回信给服务端ACK,这样就出现了四次挥手。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
网络协议 算法 网络性能优化
tcp拥塞控制整理
tcp拥塞控制整理
384 1
|
Java 数据库连接 Nacos
nacos常见问题之Nacos2.0.3集群模式启动报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
Java Nacos Docker
在集成nacos时,端口9848报错但服务器的这个端口是开放的
在集成nacos时,端口9848报错但服务器的这个端口是开放的【1月更文挑战第14天】【1月更文挑战第67篇】
2072 1
|
6月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是微服务的统一解决方案,具备约定大于配置、组件丰富、开箱即用等特点。通过整合Netflix与Alibaba生态,形成完整技术栈,其中Spring Cloud Alibaba因Nacos、Sentinel等优秀组件成为主流选择。
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
1136 21
|
人工智能 自然语言处理 搜索推荐
马斯克AI Grok 3 国内如何使用?请收下这篇新手指南!
Grok AI,由埃隆·马斯克(Elon Musk)旗下的人工智能初创公司 xAI 于 2023 年 11 月推出,迅速成为 AI 领域的一颗耀眼新星
8818 80
|
网络协议 算法 安全
TCP协议(三次握手、流量控制、拥塞控制)
TCP协议是一种可靠的传输层通信协议,通过三次握手建立连接,确保数据安全传输。流量控制通过接收窗口避免接收方缓冲区溢出,拥塞控制则利用拥塞窗口调节网络传输速度,防止网络拥堵。三者协同工作,保障TCP在复杂网络环境中实现高效、可靠的数据传输。
3632 11
|
Java 测试技术 索引
ThreadLocal详解
文章详细讨论了Java中的`ThreadLocal`,包括它的基本使用、定义、内部数据结构`ThreadLocalMap`、主要方法(set、get、remove)的源码解析,以及内存泄漏问题和避免策略。`ThreadLocal`提供了线程局部变量,确保多线程环境下各线程变量的独立性,但不当使用可能导致内存泄漏,因此建议在不再需要`ThreadLocal`变量时调用其`remove`方法。
536 2
ThreadLocal详解
|
机器学习/深度学习 关系型数据库
【YOLOv8改进 - 注意力机制】NAM:基于归一化的注意力模块,将权重稀疏惩罚应用于注意力机制中,提高效率性能
**NAM: 提升模型效率的新颖归一化注意力模块,抑制非显著权重,结合通道和空间注意力,通过批量归一化衡量重要性。在Resnet和Mobilenet上的实验显示优于其他三种机制。源码见[GitHub](https://github.com/Christian-lyc/NAM)。**
|
Web App开发 Linux 微服务
了解应用中的微内核架构
【6月更文挑战第25天】**微内核架构**是将系统服务从内核移出,形成可选插件,增强扩展性和适应性。常见于第三方应用和嵌入式系统,如Linux、L4、WinCE。优点包括清晰结构、移植性和扩展性,但缺点是通信开销大、性能较低,不利于整体优化。适合需要灵活功能组合的场景。
699 5
了解应用中的微内核架构