【底层服务/编程功底系列】「网络通信体系」深入探索和分析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搭建和管理企业级网站应用
相关文章
|
6天前
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
45 2
|
2天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
20 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
11天前
|
存储 安全 物联网
浅析Kismet:无线网络监测与分析工具
Kismet是一款开源的无线网络监测和入侵检测系统(IDS),支持Wi-Fi、Bluetooth、ZigBee等协议,具备被动监听、实时数据分析、地理定位等功能。广泛应用于安全审计、网络优化和频谱管理。本文介绍其安装配置、基本操作及高级应用技巧,帮助用户掌握这一强大的无线网络安全工具。
43 9
浅析Kismet:无线网络监测与分析工具
|
11天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
11天前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
11天前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
11天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
11天前
|
XML JSON 网络协议
【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况
拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)
|
11天前
|
网络协议 算法 Java
【JavaEE】——初始网络原理
局域网,广域网,局域网连接方式,交换机,集线器,路由器,网络通信,五元组(源IP,源端口,目的IP,目的端口,协议),协议分层,TCP/IP五层网络协议,封装和分用,交换机和路由器的封装和分用
|
20天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
59 17

热门文章

最新文章