三次握手,四次挥手

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【10月更文挑战第25天】三次握手和四次挥手是 TCP 协议中确保可靠网络通信的重要机制,它们通过一系列的交互过程,保证了连接的正确建立和有序关闭,以及数据的可靠传输和资源的合理释放,从而为网络应用提供了稳定、可靠的通信基础。

在网络通信中,TCP(传输控制协议)使用三次握手来建立连接,使用四次挥手来终止连接,这些机制对于确保可靠的网络通信至关重要

三次握手建立连接的原因

确保双方准备就绪

  • 在网络通信中,客户端和服务器需要确保彼此都已经准备好进行数据传输,才能建立有效的连接。第一次握手,客户端向服务器发送一个 SYN 包,表示客户端希望建立连接并请求同步序列号。服务器接收到 SYN 包后,知道有客户端请求连接,此时服务器会为该连接分配资源并准备相应的数据结构等。第二次握手,服务器向客户端发送 SYN/ACK 包,既表示对客户端 SYN 包的确认,也表示服务器自身也准备好建立连接并请求与客户端同步序列号。通过这两次握手,客户端和服务器都明确了对方有建立连接的意愿并且自身也准备好了相应的资源,为后续的数据传输奠定了基础。

确定初始序列号

  • TCP 协议通过序列号来确保数据的顺序和完整性。在三次握手中,客户端和服务器会互相交换初始序列号,以便在后续的数据传输中对每个数据包进行编号和确认。客户端在第一次握手中发送的 SYN 包中包含了一个初始序列号,服务器在第二次握手中对该序列号进行确认,并在 SYN/ACK 包中发送自己的初始序列号。客户端收到 SYN/ACK 包后,会对服务器的序列号进行确认,从而双方都确定了初始序列号,使得数据传输能够按照正确的顺序进行组装和校验,保证了数据的可靠性。

防止过期连接请求导致的错误

  • 网络中可能存在延迟的数据包或过期的连接请求。如果没有三次握手机制,服务器可能会收到一个过期的连接请求并误以为是新的连接请求而建立连接,从而导致资源的浪费和错误的连接建立。通过三次握手,服务器能够确认客户端的连接请求是最新的,因为客户端会对服务器的 SYN/ACK 包进行确认,如果是过期的连接请求,客户端不会对其进行响应,从而避免了因过期请求导致的错误连接。

四次挥手终止连接的原因

确保数据传输完成

  • 在关闭连接时,需要确保双方都已经完成了数据的发送和接收,以避免数据丢失。当客户端想要关闭连接时,会向服务器发送一个 FIN 包,表示客户端不再发送数据,但此时客户端仍可能接收服务器发送的数据。服务器收到 FIN 包后,知道客户端不再发送数据,但服务器可能还有未发送完的数据,所以它会先发送一个 ACK 包给客户端,告知客户端其 FIN 包已收到,同时继续发送剩余的数据。当服务器完成所有数据的发送后,会向客户端发送一个 FIN 包,表示服务器也不再发送数据。通过这种方式,双方都能够确保在关闭连接之前所有的数据都已经被正确地传输和接收,保证了数据的完整性。

资源释放的有序性

  • 连接的关闭需要双方有序地释放相关资源。四次挥手的过程使得客户端和服务器能够按照一定的顺序释放各自为该连接分配的资源,如内存、文件描述符等。客户端在发送 FIN 包后,会等待服务器的确认,收到服务器的 ACK 包后,客户端知道服务器已经收到了自己的关闭请求,但还需要等待服务器发送 FIN 包来确认服务器也完成了数据传输和资源释放。服务器在发送 FIN 包后,同样会等待客户端的 ACK 包,收到 ACK 包后,服务器才会彻底释放与该连接相关的资源。这种有序的资源释放过程避免了资源的过早释放或未完全释放导致的问题,确保了系统资源的有效利用和管理。

半关闭状态的支持

  • 四次挥手机制支持半关闭状态,即一方已经完成数据发送,但仍可以接收数据的状态。这在一些特定的应用场景中非常有用,例如在文件下载过程中,客户端可能已经接收完所有数据,但服务器还需要一些时间来完成一些后续处理,此时客户端可以发送 FIN 包进入半关闭状态,告知服务器自己不再接收数据,但服务器仍可以继续发送一些与该连接相关的控制信息或完成其他必要的操作。半关闭状态提供了更灵活的连接管理方式,使得网络通信能够更好地适应不同的应用需求。

三次握手和四次挥手是 TCP 协议中确保可靠网络通信的重要机制,它们通过一系列的交互过程,保证了连接的正确建立和有序关闭,以及数据的可靠传输和资源的合理释放,从而为网络应用提供了稳定、可靠的通信基础。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
前端开发 网络协议 JavaScript
|
5月前
|
网络协议 网络架构
|
6月前
|
网络协议
TCP三次握手和四次挥手
TCP三次握手和四次挥手
|
6月前
|
网络协议
|
6月前
|
网络协议
说说TCP为什么需要三次握手和四次挥手? _
TCP连接的建立需要三次握手,确保双方的接收和发送能力正常,而关闭连接则涉及四次挥手以确保数据传输完成。这个过程包括客户端发送SYN开始连接,服务器响应SYN并ACK,然后客户端再次ACK确认连接建立。终止连接时,客户端发送FIN,服务器回ACK,服务器发送FIN,最后客户端再发送ACK确认关闭。四次挥手的目的是防止已失效的连接请求报文突然传到服务器,导致不必要的资源消耗。
|
6月前
|
网络协议 网络架构
三次握手与四次挥手
三次握手与四次挥手
|
6月前
|
缓存 网络协议 数据处理
TCP中的三次握手和四次挥手
我们知道TCP是运输层的面向连接的可靠的传输协议。**面向连接的**,指的就是在两个进程发送数据之前,必须先相互“握手”,确保两进程可以进行连接。并且这个传输是点对点的,即一个TCP连接中只有一个发送方和接收方;**可靠的**,指的是在任何网络情况下,在TCP传输中数据都将完整的发送到接收方。
70 0
TCP中的三次握手和四次挥手
|
6月前
|
移动开发 网络协议 API
三次握手与四次挥手在具体函数上的体现
三次握手与四次挥手在具体函数上的体现
52 0
|
6月前
|
网络协议
理解三次握手与四次挥手
理解三次握手与四次挥手
46 0
|
网络协议
TCP——三次握手和四次挥手
TCP——三次握手和四次挥手
134 0
TCP——三次握手和四次挥手