news 2026/9/24 17:52:37

TCP协议栈管理、文件符表映射机制与TCP资源关闭流程介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP协议栈管理、文件符表映射机制与TCP资源关闭流程介绍

文章目录

一、进程与内核

1.用户态的Java程序进程

2.内核态的操作系统内核

2.1操作系统

2.1.1内核

二、文件描述符与表引用

1.文件描述符

2.文件描述符表

3.引用比例

三、TCP资源管理与连接维护

1.TCP协议栈

1.1TCB

1.1.1端点

1.1.1.1TCP连接状态

四、Socket引用纵深与端点分布

1.Socket引用纵深

2.Socket端点分布

2.1监听Socket

2.2连接socket

五、资源关闭与连接生命

1.直接关闭

1.1直关资源

2.执行关闭

2.1执关资源

2.2执关流程

2.2.1无引用

2.2.2释放

2.2.2.1正常释放

2.2.2.2异常释放

2.2.2.2.1重传多次失败

2.2.2.2.2收到RST

3.进程Socket与TCP连接的生命周期

六、操作顺梯纵深执行


一、进程与内核

一台主机
应用层里面可以有很多用户态的Java程序进程
传输层内核态的操作系统内核只有一个

1.用户态的Java程序进程

Java程序代码在JVM运行起来后,会形成用户态的进程,里面有:

  • Java对象
  • 线程
  • 用户态缓冲区
  • JVM状态

2.内核态的操作系统内核

2.1操作系统

操作系统由:

  1. 内核
  2. 系统库
  3. 系统工具
  4. 服务

组成

2.1.1内核

内核是操作系统最核心的部分,负责:

  1. CPU调度
  2. 内存管理->执行资源回收、关闭fd、释放页表...
  3. 文件系统
  4. 网络协议栈->TCP协议栈就在内核里面、管理socket与TCP状态...
  5. 驱动
  6. 进程管理->回收进程...

二、文件描述符与表引用

1.文件描述符

文件描述符是在操作系统内核管理资源的编号提供到进程指向内核资源的整数


2.文件描述符表

操作系统内核 存储每个进程一张的文件描述符表,维护里面文件描述符-内核资源的映射

进程A的文件描述符表
fd0 -> 标准输入
fd1 -> 标准输出
fd2 -> 标准错误
fd3 -> 某个文件
...
fd7 -> 某个socket


3.引用比例

1、文件描述符表与进程,一对一对应
2、文件描述符表里的文件描述符与进程里的对象,一对一引用
3、文件描述符表里映射的内核资源被多个表里的多个文件描述符一起,一对多引用


三、TCP资源管理与连接维护

1.TCP协议栈


操作系统内核里的TCP协议栈 存管 所有在此主机里的 TCB端点,里面进行TCP协议的核心工作:

  • TCP序号
  • ACK
  • 重传
  • 滑动窗口
  • TCP状态机
  • FIN
  • SYN

1.1TCB

TCB = TCP Control Block,结构体包着端点,保存 维护端点的TCP协议对向连接状态 的数据:

  • 本地IP
  • 本地端口
  • 对方IP
  • 对方端口
  • 当前TCP状态:ESTABLISHED、FIN_WAIT_1、TIME_WAIT...
  • 发送序号:SND.NXT
  • 最早未确认序号:SND.UNA
  • 接收下一个期望序号:RCV.NXT
  • 发送窗口
  • 接收窗口
  • 拥塞窗口
  • 重传计时器
  • TCP选项:MSS、窗口扩大、SACK...
1.1.1端点

端点能收发数据

1.1.1.1TCP连接状态

双端处于TCP协议约定的对向连接状态时,就认为建立了TCP的逻辑连接:

  1. 两边主机的操作系统内核里的TCP协议栈里面分别存储管理着各自的TCB:
  2. 客户端->192.168.1.10 : 50000、服务器->1.2.3.4 : 8080
  3. 双方分别用 源IP、源端口、目的IP、目的端口 四元组标识,交流来回报文,调整两端TCB状态,保持在TCP协议的对向连接状态,就建立了逻辑的TCP连接

(网络上不存在全局的TCP连接对象,它两端的引用分别放在,两边的内核TCP协议栈里面各自的一个TCB,引用同一个通道的两端进行对连)

区分:

  1. TCP连接 是逻辑上的双端关系
  2. TCB 是每端本地保存的状态
  3. 操作系统里的PCB 是进程控制块,保存:
    PID

    进程状态
    寄存器上下文
    调度信息
    内存信息
    文件描述符表

四、Socket引用纵深与端点分布

1.Socket引用纵深

  1. 进程里的Socket对象,是Java程序操作网络的接口,存在JVM的堆里,处于用户态,用文件描述符指向 操作系统内核里,该进程的文件描述符表里,映射的内核Socket
  2. 内核里的Socket对象,维护 关联的TCB,里面端点的TCP连接状态

Socket.write(7, data, len):
进程Socket对象

包装与关联 底层的native socket资源

(触发系统调用内核)用进程Socket对象底层持有的文件描述符fd=7 映射文件描述符表到内核Socket对象

内核Socket对象关联到TCB

往里维护写TCP数据


2.Socket端点分布

2.1监听Socket

进程ServerSocket映射的内核监听socket,关联的TCB处于LISTEN状态:

监听socket
*:8080
LISTEN

监查,来向连接状态的TCB{交流握手报文,调整TCB对向状态}听建,回向连接状态的TCB 在此边:


2.2连接socket

连接socketA
server:8080 <-> clientA:50001
ESTABLISHED

连接socketB
server:8080 <-> clientB:50002
ESTABLISHED

连接socketC
server:8080 <-> clientC:50003
ESTABLISHED


五、资源关闭与连接生命

从上往下顺梯传递关闭操作地 关闭 进程到内核一路的资源

1.直接关闭

一步地直做关闭

1.1直关资源

  1. 进程对象
  2. 文件描述符:文件描述符在文件描述符表里存储着,一步里无引用地直接关闭

2.执行关闭

多步地执完关闭

2.1执关资源

内核资源:内核资源在文件描述符表里被映射,但不在表里存储的,多步里先无引用地执行关闭


2.2执关流程

2.2.1无引用

进程关闭

在里面的进程对象是先关闭的

紧接它们引用在内核里的,该进程的文件描述符表里的文件描述符,就无引用地直接关闭了

内核资源等到所有引用它的文件描述符都关闭完,无引用指向后,才开始释放


2.2.2释放
2.2.2.1正常释放

ESTABLISHED

FIN_WAIT...

CLOSED

Socket关闭后,关联的TCB一起关闭,里面维护的TCP连接状态才消失了,连接的此端单断


2.2.2.2异常释放
2.2.2.2.1重传多次失败


连接超时

CLOSED

关闭TCB


2.2.2.2.2收到RST


连接abort

关闭TCB


3.进程Socket与TCP连接的生命周期

进程Socket对象生命周期<TCP连接状态生命周期:

  1. 某个进程[进程Socket对象]关闭
  2. 它的内核资源[内核Socket对象] 可能还有其它进程的文件描述符在引用、与无引用后可能还在释放中
  3. 而还存在[关联的TCB,及里面维护的TCP连接状态]

六、操作顺梯纵深执行

操作 从进程上始 顺梯传递 纵深至内核终地 一路执行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 17:51:44

【n8n】AI驱动的短视频全自动生成应用

短视频内容的生产速度和创意质量已成为社交平台竞争的核心。借助AI与自动化技术,短视频的生成方式正从依赖人工转向全流程自动化生产模式。 该工作流以AI模型与自动化节点协作实现从创意到成品的短视频生成,涵盖文案构思、画面渲染、视频合成及语音配音等环节,适合批量化、…

作者头像 李华
网站建设 2026/9/24 17:50:39

【C#桌面客户端系列学习-1】打包exe,并根据版本号实现自动更新

目录 一、前言 二、主要用到的技术 1、AutoUpdater.NET 2、Fody.Costura 三、安装相关程序包 1、安装Autoupdater.NET.Official 2、安装Fody.Costura 四、配置版本号 五、准备更新用的XML文件 六、代码中调用 七、制作并上传更新包 八、测试是否成功 九、注意事项 …

作者头像 李华
网站建设 2026/9/24 17:50:04

浚县装修主材下单时点怎么反推?一张倒排表把采购和工序对齐

装修拖期比较隐蔽的一类原因&#xff0c;不是工人磨洋工&#xff0c;是材料没到。工序在前、材料在后&#xff0c;谁都救不回来——瓦工进场了砖还在路上&#xff0c;师傅只能先撤&#xff0c;下一个活儿排期一乱&#xff0c;整条链往后倒。这篇把主材下单时点的推导过程写下来…

作者头像 李华
网站建设 2026/9/24 17:49:23

Python 项目应用:Python 构建“e 起去旅行”网站从入门到实战指南

** 摘要**:本文手把手带你从零搭建一个基于 Flask 的旅行助手全栈项目,涵盖虚拟环境搭建、数据库模型设计、RESTful 接口开发、前端模板渲染、用户注册登录与行程收藏,以及生产环境部署与安全加固。文章提供可直接复制的完整代码,并给出推荐算法、社交分享、离线缓存三个可…

作者头像 李华
网站建设 2026/9/24 17:48:54

【Dify】自动化合同审查与生成应用

智能化合规需求在合同管理领域日益突出。高效、自动的合同审查与生成工具正在成为法律和商务操作的重要基础设施。 本文介绍一套AI赋能的智能合同审查与生成解决方案,覆盖文档上传、内容抽取、法律风险识别、条款优化、结果导出等完整流程。通过模型驱动与自动化处理,大幅提…

作者头像 李华
网站建设 2026/9/24 17:47:55

Agent 消息与事件工程笔记

摘要:LLM 无状态,状态要在端点攒起来、过程要流出去——攒起来的是 Message,流出去的是 Event,这是 agent loop 上两个最基本的数据面。本文把它们拆开讲:各是什么、一轮 loop 里怎么流动、四家框架怎么实现、跨边界怎么靠 MCP / A2A / AG-UI 统一,最后落到工程上怎么用、…

作者头像 李华