ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

TCP协议栈管理、文件符表映射机制与TCP资源关闭流程介绍 文章目录一、进程与内核1.用户态的Java程序进程2.内核态的操作系统内核2.1操作系统2.1.1内核二、文件描述符与表引用1.文件描述符2.文件描述符表3.引用比例三、TCP资源管理与连接维护1.TCP协议栈1.1TCB1.1.1端点1.1.1.1TCP连接状态四、Socket引用纵深与端点分布1.Socket引用纵深2.Socket端点分布2.1监听Socket2.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收到RST3.进程Socket与TCP连接的生命周期六、操作顺梯纵深执行一、进程与内核一台主机应用层里面可以有很多用户态的Java程序进程但传输层的内核态的操作系统内核只有一个1.用户态的Java程序进程Java程序代码在JVM运行起来后,会形成用户态的进程里面有Java对象堆栈线程用户态缓冲区JVM状态2.内核态的操作系统内核2.1操作系统操作系统由内核系统库系统工具服务组成2.1.1内核内核是操作系统最核心的部分负责CPU调度内存管理-执行资源回收、关闭fd、释放页表...文件系统网络协议栈-TCP协议栈就在内核里面、管理socket与TCP状态...驱动进程管理-回收进程...二、文件描述符与表引用1.文件描述符文件描述符是在操作系统内核管理资源的编号、提供到进程指向内核资源的整数2.文件描述符表操作系统内核 存储每个进程一张的文件描述符表,维护里面文件描述符内核资源的映射进程A的文件描述符表fd0 - 标准输入fd1 - 标准输出fd2 - 标准错误fd3 - 某个文件...fd7 - 某个socket3.引用比例1、文件描述符表与进程,一对一对应2、文件描述符表里的文件描述符与进程里的对象,一对一引用3、文件描述符表里映射的内核资源被多个表里的多个文件描述符一起,一对多引用三、TCP资源管理与连接维护1.TCP协议栈操作系统内核里的TCP协议栈 存管 所有在此主机里的 TCB端点里面进行TCP协议的核心工作TCP序号ACK重传滑动窗口TCP状态机FINSYN1.1TCBTCB 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的逻辑连接两边主机的操作系统内核里的TCP协议栈里面分别存储管理着各自的TCB客户端-192.168.1.10 : 50000、服务器-1.2.3.4 : 8080双方分别用 源IP、源端口、目的IP、目的端口 四元组标识交流来回报文,调整两端TCB状态,保持在TCP协议的对向连接状态就建立了逻辑的TCP连接网络上不存在全局的TCP连接对象,它两端的引用分别放在,两边的内核TCP协议栈里面各自的一个TCB,引用同一个通道的两端进行对连区分TCP连接 是逻辑上的双端关系TCB 是每端本地保存的状态操作系统里的PCB 是进程控制块保存PID进程状态寄存器上下文调度信息内存信息文件描述符表四、Socket引用纵深与端点分布1.Socket引用纵深进程里的Socket对象是Java程序操作网络的接口存在JVM的堆里,处于用户态用文件描述符指向 操作系统内核里,该进程的文件描述符表里,映射的内核Socket内核里的Socket对象维护 关联的TCB,里面端点的TCP连接状态Socket.write(7, data, len)进程Socket对象↓包装与关联 底层的native socket资源↓(触发系统调用内核)用进程Socket对象底层持有的文件描述符fd7 映射文件描述符表到内核Socket对象↓内核Socket对象关联到TCB↓往里维护写TCP数据2.Socket端点分布2.1监听Socket进程ServerSocket映射的内核监听socket,关联的TCB处于LISTEN状态监听socket*:8080LISTEN监查,来向连接状态的TCB交流握手报文调整TCB对向状态听建,回向连接状态的TCB 在此边2.2连接socket连接socketAserver:8080 - clientA:50001ESTABLISHED连接socketBserver:8080 - clientB:50002ESTABLISHED连接socketCserver:8080 - clientC:50003ESTABLISHED五、资源关闭与连接生命从上往下顺梯传递关闭操作地 关闭 进程到内核一路的资源1.直接关闭一步地直做关闭1.1直关资源进程对象文件描述符:文件描述符在文件描述符表里存储着一步里无引用地直接关闭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↓关闭TCB2.2.2.2.2收到RST↓连接abort↓关闭TCB3.进程Socket与TCP连接的生命周期进程Socket对象生命周期TCP连接状态生命周期某个进程[进程Socket对象]关闭它的内核资源[内核Socket对象] 可能还有其它进程的文件描述符在引用、与无引用后可能还在释放中而还存在[关联的TCB,及里面维护的TCP连接状态]六、操作顺梯纵深执行操作 从进程上始 顺梯传递 纵深至内核终地 一路执行
返回列表