【底层服务/编程功底系列】「网络通信体系」深入探索和分析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应用的响应速度和用户体验非常重要

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
17天前
|
机器学习/深度学习 算法 PyTorch
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
深度学习近年来在多个领域取得了显著进展,但其核心组件——人工神经元和反向传播算法自提出以来鲜有根本性突破。穿孔反向传播(Perforated Backpropagation)技术通过引入“树突”机制,模仿生物神经元的计算能力,实现了对传统神经元的增强。该技术利用基于协方差的损失函数训练树突节点,使其能够识别神经元分类中的异常模式,从而提升整体网络性能。实验表明,该方法不仅可提高模型精度(如BERT模型准确率提升3%-17%),还能实现高效模型压缩(参数减少44%而无性能损失)。这一革新为深度学习的基础构建模块带来了新的可能性,尤其适用于边缘设备和大规模模型优化场景。
48 16
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
|
20天前
|
运维 监控 安全
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
在数字化时代,网络质量分析与流量回溯对保障业务运行至关重要。网络拥塞、丢包等问题可能导致业务中断、安全隐患及成本上升。传统工具常缺乏细粒度数据,难以溯源问题。流量回溯分析可还原现场,助力精准排障。AnaTraf网络流量分析仪作为专业工具,能高效定位问题,提升团队响应力,降低运营风险。
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
|
18天前
|
大数据
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
60 16
|
26天前
|
存储 双11 数据中心
数据中心网络关键技术,技术发明一等奖!
近日,阿里云联合清华大学与中国移动申报的“性能可预期的大规模数据中心网络关键技术与应用”项目荣获中国电子学会技术发明一等奖。该项目通过端网融合架构,实现数据中心网络性能的可预期性,在带宽保障、时延控制和故障恢复速度上取得重大突破,显著提升服务质量。成果已应用于阿里云多项产品及重大社会活动中,如巴黎奥运会直播、“双十一”购物节等,展现出国际领先水平。
|
1月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
79 22
|
1月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
73 7
|
1月前
|
网络协议 数据安全/隐私保护 网络架构
|
5月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
133 17
|
5月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
103 10
|
5月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章