【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点

简介: 【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点

TCP的运输连接管理

TCP是一种面向连接的协议,包含连接建立、数据传送和连接释放三个阶段。运输连接的管理确保连接的建立和释放能够正常进行。

在TCP连接建立过程中,需要解决以下三个问题:

  1. 确认对方的存在:通过三次握手确保双方能够确认对方的存在。
  2. 参数协商:在连接建立过程中,双方协商一些参数,如最大窗口值、窗口扩大选项、时间戳选项和服务质量等。
  3. 资源分配:建立传输控制块(TCB)来分配运输实体资源,如缓存大小和连接表中的项目。

TCP连接采用客户-服务器模式,客户端主动发起连接建立,服务器被动等待连接。

TCP三次握手

建立TCP连接时,首先服务器处于被动打开的listen状态,等待客户端的连接请求。客户端启动后向服务器发送一个SYN报文,该报文中的SYN标志表示请求建立连接。服务器收到SYN报文后,会发送一个SYN+ACK报文作为响应,表示接受连接请求,并确认客户端的SYN报文。然后,客户端再向服务器发送一个ACK报文,确认服务器的SYN+ACK报文。

三次握手流程分析

  1. 建立TCP需要三次握手才能建立,在TCP连接的建立过程中,SYN用于建立连接的握手过程。当客户端想要与服务器建立TCP连接时,它会发送一个带有SYN标志的TCP报文段,这个报文段被称为SYN包或SYN段。这个SYN包中的序列号(Sequence Number)用于初始化连接的序列号。
  2. 服务器收到客户端发送的SYN包后,会发送一个带有SYN和ACK(Acknowledgment)标志的TCP报文段作为响应,这个报文段被称为SYN-ACK包。服务器的SYN-ACK包中的序列号是服务器随机生成的,而确认号(Acknowledgment Number)是客户端发送的SYN包的序列号加1。
  3. 客户端收到服务器发送的SYN-ACK包后,会发送一个带有ACK标志的TCP报文段作为确认,这个报文段被称为ACK包。客户端的ACK包中的确认号是服务器发送的SYN-ACK包的序列号加1。
  4. 最后,通过这个三次握手的过程,客户端和服务器成功建立了TCP连接,并可以开始进行数据传输。在连接建立后,双方可以相互发送数据。

注意要点

注意,这个过程中的报文交换是为了确保双方都能够确认对方的存在,并同步初始序列号。通过这种方式,TCP连接的建立可以保证可靠性和数据的完整性。但在实际应用中,还需要考虑网络延迟、超时处理和其他异常情况的处理,以确保连接的稳定性和可靠性。

TCP四次挥手

通信的双方都可以释放连接,主动释放连接的一方等待2MSL,所以为了减轻服务器般是客户端主动释放。断开连接则需要四次握手。整个过程如下图所示:

  • 当客户端不再发送数据给服务器时,它可以发送一个FIN报文给服务器,表示关闭连接。
  • 服务器收到FIN报文后,会发送一个ACK报文作为确认,表示已经收到了客户端的FIN报文。此时,客户端不能再向服务器发送数据,但服务器仍然可以向客户端发送数据。
  • 当服务器发送完数据后,会发送一个FIN报文给客户端,告知客户端已经发送完数据。
  • 客户端收到FIN报文后,会发送一个ACK报文作为确认。接下来,客户端会等待一段时间,即2倍的最长报文段寿命(2MSL),这是为了确保服务器收到了ACK报文。

注意,2MSL时间的等待是为了处理可能丢失的确认报文,以确保连接的可靠关闭。这个时间段的长度是根据TCP协议的规定来确定的

MSL(Maximum Segment Lifetime)即最长报文段寿命,RFC建议为2分钟,具体实现时可以使用更小的值。

TCP之保活计时器(keepalive timer)

当客户端发生故障时,服务器采取相应的措施来关闭连接,以避免无限期地等待。这样可以提高服务器的资源利用率,并确保连接的正常关闭,这个时候就要用到保活计时器(keepalive timer)。

保活计时器(keepalive timer)的执行流程

服务器在每次收到客户端的数据时,重新设置保活计时器。通常,保活计时器的时间设置为两小时。如果在两小时内没有收到客户端的数据,服务器会采取进一步的措施。

  • 探测报文段:如果保活计时器超时,服务器会发送一个探测报文段给客户端。之后,服务器会每隔75秒发送一次探测报文段。这些探测报文段用于检测客户端是否仍然可用。
  • 连续探测:如果服务器连续发送了10个探测报文段后仍然没有收到客户端的响应,服务器会认为客户端发生故障,并关闭连接。
  • 客户端复位:如果客户端重新启动并收到了服务器发送的探测报文段,客户端可以发送一个复位信息给服务器,以通知服务器关闭连接。

常见问题沟通分析

服务器端能不能主动断开连接?

服务器端可以主动断开连接,在主动断开连接之后,服务器端需要等待一段时间,即2倍的最长报文段寿命(2MSL)。这是为了确保连接的正常关闭,并防止可能丢失的报文段导致的连接问题。在这段等待时间内,服务器端的内核会保持连接的资源,这可能对服务器的资源利用率造成一定的影响。因此,在主动断开连接时,需要权衡服务器资源的利用和连接的正常关闭。

断开连接后需要做哪些处理工作?

在断开连接后,需要进行以下处理工作来回收资源:

  • 关闭Socket:断开连接后,需要关闭相关的Socket连接,释放与该连接相关的网络资源。这包括关闭输入输出流、释放套接字等。
  • 释放内存:如果在连接过程中分配了内存资源,例如缓冲区或临时变量,需要及时释放这些内存资源,以避免内存泄漏和资源浪费。
  • 释放端口号:如果连接使用了特定的端口号,断开连接后需要释放该端口号,以便其他连接可以使用该端口。

TCP中的长连接和短连接是什么?

短连接

短连接是指在通信双方有数据交互时,建立一个TCP连接进行数据传输,数据发送完成后立即断开此TCP连接。一般银行、HTTP服务器等应用场景使用短连接。短连接通常是一对多的关系,即每次通信都需要建立新的连接。

短连接的操作步骤通常是:建立连接、数据传输、关闭连接。

长连接

长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,双方会发送检测包以维持此连接。长连接常见于P2P通信、数据库连接等场景。

长连接的操作步骤通常是:建立连接、数据传输、保持连接(发送心跳包)、数据传输、保持连接(发送心跳包)......直到不再需要连接时关闭连接。

KeepAlive在http中的含义(不同于TCP)

在TCP连接中,已经在上面的【TCP之保活计时器(keepalive timer)】的内容中,全面介绍过了,主要的目的是为了帮助检测连接,释放一些宕机或者出现问题的客户端服务。

Http中的KeepAlive

HTTP中的Keep-Alive(持久连接)的意义在于优化网络通信的效率。在过去,每个HTTP请求都需要建立一次连接,这意味着每个连接只能传输一个HTTP请求和响应。为了提高效率,可以在HTTP头域中增加Connection选项。

通过设置Connection选项为"keep-alive",表示开启持久连接。这样,在建立连接后,可以在同一连接上传输多个HTTP请求和响应。这避免了每次请求都需要重新建立连接的开销,提高了网络通信的效率。

总之通过使用持久连接(Keep-Alive),可以减少连接建立的开销,提高网络通信的效率和性能。这对于提升Web应用的响应速度和用户体验非常重要

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
SQL 安全 算法
网络安全与信息安全:防御前线的关键技术透视
【4月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维系信息社会正常运作的重要支柱。本文针对当前网络安全领域面临的漏洞问题、加密技术的应用以及提升安全意识的必要性进行深入探讨。通过分析网络攻击者的常见手段和动机,文章揭示了安全漏洞的形成原因及其对个人及企业造成的潜在威胁。进一步地,文中介绍了现代加密技术的种类和作用机制,包括对称加密、非对称加密和哈希算法等,并讨论了这些技术如何在不同场景中保障数据安全。此外,文章还强调了培养全民网络安全意识的重要性,并提出了一系列实用的策略和方法。通过对这些关键技术的综合分析,旨在为读者提供一套全面的网络安全与信息安全防护指南。
|
2天前
|
监控 负载均衡 网络协议
|
2天前
|
安全 网络协议 物联网
城域以太网:连接城市的高速网络
【4月更文挑战第22天】
7 0
|
3天前
|
负载均衡 测试技术 网络虚拟化
快速 PVST+:提升网络性能的关键技术
【4月更文挑战第22天】
17 6
|
3天前
|
设计模式 数据中心 网络架构
|
3天前
|
安全 算法 网络安全
网络安全与信息安全:防御前线的关键技术
【4月更文挑战第27天】 在数字化时代,数据成为了新的货币,而网络安全则是保护这些数据的金库。本文深入探讨了网络安全漏洞的概念、加密技术的进展以及提升安全意识的重要性。通过对常见网络威胁的分析,我们展现了如何利用多层次防御策略来增强信息系统的抵抗力。文章不仅涉及技术层面的解决方案,还强调了人为因素在维持网络安全中的核心作用。
|
4天前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:防护之道在技术与意识的双重保障
【4月更文挑战第25天】随着信息技术的飞速发展,网络已经成为我们生活和工作中不可或缺的一部分。然而,伴随着网络技术的普及,网络安全问题也日益凸显。本文将从网络安全漏洞、加密技术、安全意识等方面进行探讨,旨在分享如何通过技术和意识的双重保障来维护网络的安全。
|
5天前
|
SQL 监控 安全
网络安全与信息安全:防御前线的关键技术与策略
【4月更文挑战第24天】在数字化时代,数据成为了新的货币,而网络安全则是保护这些宝贵资产不受威胁的保险箱。本文深入探讨了网络安全漏洞的本质、加密技术的进展以及提升个人和企业安全意识的重要性。通过分析当前网络环境中的安全挑战,我们提出了一系列创新的防御机制和实践方法,以期为读者提供一套全面的信息保护方案。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
44 0