【底层服务/编程功底系列】「网络通信体系」深入探索和分析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搭建和管理企业级网站应用
相关文章
|
4天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
30 11
|
1天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
16 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
16天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
25 6
|
15天前
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
14天前
|
监控 安全 网络安全
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
|
17天前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
18天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
48 3
|
1天前
|
安全 网络协议 网络安全
网络不稳定导致HTTP代理频繁掉线的分析
随着数字化时代的加速发展,网络安全、隐私保护及内容访问自由成为用户核心需求。HTTP代理服务器因其独特技术优势受到青睐,但其掉线问题频发。本文分析了HTTP代理服务器不稳定导致掉线的主要原因,包括网络问题、服务器质量、用户配置错误及IP资源问题等方面。
11 0
|
14天前
|
存储 安全 网络安全
云计算与网络安全:技术融合下的挑战与机遇
随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,以及如何通过技术创新来应对这些挑战。我们将分析云服务的安全特性,讨论信息安全的最佳实践,并展望未来云计算与网络安全的发展趋势。
|
3天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
40 17