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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【底层服务/编程功底系列】「网络通信体系」深入探索和分析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应用的响应速度和用户体验非常重要

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战与未来展望
【8月更文挑战第30天】随着云服务在企业和个人用户中的普及,网络安全问题日益突出。本文将探讨云计算环境下的网络安全挑战,包括数据隐私保护、访问控制、以及合规性问题,并提出相应的解决方案。文章还将展望未来云计算和网络安全技术的发展趋势,为读者提供深入理解和应对策略。
|
1天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战与未来展望
【8月更文挑战第30天】在数字化时代的浪潮中,云计算已成为推动企业创新和效率提升的关键力量。然而,随之而来的网络安全问题也日益凸显,成为制约云服务发展的瓶颈。本文将从云服务的分类、网络安全的基本概念出发,深入探讨云计算环境下的安全挑战,并提出相应的解决策略。同时,文章还将预测未来的技术趋势,为读者提供对云计算与网络安全领域的全面理解。
|
1天前
|
监控 安全 网络安全
云计算与网络安全:技术、挑战与解决方案
【8月更文挑战第30天】随着云计算技术的飞速发展,越来越多的企业和个人开始将数据和应用迁移到云端。然而,云计算的普及也带来了一系列网络安全问题。本文将探讨云计算中的网络安全挑战,包括数据泄露、恶意软件攻击和服务中断等,并介绍一些常见的网络安全技术和最佳实践,如加密、访问控制和安全监控等。最后,我们将讨论如何制定有效的网络安全策略,以保护云服务免受威胁。
|
1天前
|
存储 安全 网络安全
云计算与网络安全:技术演进与挑战
【8月更文挑战第30天】本文深入探讨了云计算与网络安全的紧密关系,并分析了云服务、网络安全、信息安全等技术领域的发展。文章通过实例和理论分析,阐述了如何利用云计算技术来提高网络安全性,同时指出了在云计算环境中面临的安全挑战和应对策略。
|
1天前
|
Kubernetes Cloud Native 网络安全
云原生入门指南:Kubernetes和容器化技术云计算与网络安全:技术融合的新篇章
【8月更文挑战第30天】在云计算的浪潮中,云原生技术如Kubernetes已成为现代软件部署的核心。本文将引导读者理解云原生的基本概念,探索Kubernetes如何管理容器化应用,并展示如何通过实践加深理解。
|
1天前
|
安全 物联网 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享未来技术浪潮中的领航者:区块链、物联网与虚拟现实
【8月更文挑战第30天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和数据安全。
|
1天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的新篇章
【8月更文挑战第30天】云计算作为现代信息技术的重要组成部分,以其高效、便捷的特性被广泛应用于各个领域。然而,随着云服务的快速发展,网络安全问题也日益凸显。本文将从云服务的基本原理出发,探讨其在网络安全领域的应用及挑战,并结合具体案例分析如何加强信息安全管理,提升云服务的安全性能。旨在为读者提供对云计算与网络安全融合发展趋势的全面认识,以及对信息安全管理的深入理解。
|
1天前
|
安全 网络安全 开发者
探索Python中的装饰器:简化代码,增强功能网络安全与信息安全:从漏洞到防护
【8月更文挑战第30天】本文通过深入浅出的方式介绍了Python中装饰器的概念、用法和高级应用。我们将从基础的装饰器定义开始,逐步深入到如何利用装饰器来改进代码结构,最后探讨其在Web框架中的应用。适合有一定Python基础的开发者阅读,旨在帮助读者更好地理解并运用装饰器来优化他们的代码。
|
1天前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
1天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今数字化时代,网络安全和信息安全已成为全球关注的焦点。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的重要性,并提供实用的知识分享。我们将通过代码示例来展示如何保护个人和企业的信息资产,并强调提高安全意识的必要性。无论你是网络管理员还是普通用户,这篇文章都将为你提供有价值的见解和建议。
下一篇
云函数