计网第五章(运输层)(八)(TCP的连接释放)

news2024/11/25 10:34:10

目录

一、基本概述

二、具体实现

三、经典问题之为什么客户进程不直接进入关闭状态?

四、保活计时器


一、基本概述

上篇博客(  计网第五章(运输层)(七)(TCP的连接建立))总结了TCP连接建立。

既然有连接建立就肯定有连接释放。

TCP连接释放采用“四次挥手”的方式,即客户和服务器之间需要交换四个报文段。

二、具体实现

(1)初始状态(连接已建立状态):如图,客户端和服务器端处于连接已建立状态。双方可以进行数据传输。

 (2)客户端发送TCP连接释放报文段:如图,使用TCP客户进程的用户进程通知其主动关闭TCP连接。TCP客户进程会发送TCP连接释放报文段。并进入终止等待1状态(FIN-WAIT-1)。很明显,这是主动关闭。

该报文段首部中的终止位FIN和确认位ACK的值都被设置为1,表示这是一个TCP连接释放报文段。同时也对之前收到的报文段进行确认。序号字段seq的值为u,该值为TCP客户进程之前已传送过的数据的最后一个字节的序号加1。确认号字段ack的值为v,该值为TCP客户进程之前已收到的数据的最后一个字节的序号加1。

注意:终止位FIN为1的报文段即使不携带数据,也要消耗掉一个序号。

(3)服务器端发送TCP确认并进入半关闭状态:服务器端收到TCP连接释放报文段后,会发送一个普通的确认报文段,并进入关闭等待状态(CLOSE-WAIT)。

报文段的序号字段seq的值为v,表示TCP服务进程之前已经发送过的数据的最后一个字节的序号加1。(该值也就是之前TCP客户进程收到的数据的最后一个字节的值,即TCP连接释放报文段里面的确认号的字段的值v)确认号字段ack的值为u+1,这是对TCP连接释放报文段的确认。

TCP服务进程这时候会通知高层应用进程:TCP客户进程要与自己断开连接了。此时,TCP客户进程到TCP服务进程这个方向的连接就释放了。这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了。

但是TCP服务进程到TCP客户进程这个方向的连接还没有断开,所以这时候如果TCP服务进程有数据要发送,TCP客户进程仍需要接收。

注意: 半关闭状态下,TCP客户进程只是不能再主动地发送报文段,但是如果TCP服务进程向其发送报文段,它接收后仍然会向TCP服务进程返回一个针对该报文段的确认报文段。

如果是关闭状态,那么既不会发送也不会接收。

(4)服务端发送TCP连接释放报文段:TCP客户客户进程收到确认报文段后,进入终止等待2状态(FIN-WAIT-2)。

如果TCP服务器进程的应用进程没有数据要发送了,就会通知TCP服务进程释放连接。由于TCP连接释放是由TCP客户进程主动发起的,所以TCP服务进程对TCP连接释放属于被动关闭。

TCP服务进程发送TCP连接释放报文段并进入最终确认阶段(LAST-ACK)。

报文段中序号字段seq的值为w,这是因为前面说过TCP服务进程还能向客户进程发送数据,所以TCP服务进程发送的最后一个报文段不一定就是上面对TCP客户进程发送的TCP连接释放报文段的确认报文。  但是因为TCP客户进程向TCP服务进程的连接已经关闭了,所以TCP服务进程收到的最后一个报文段一定就是TCP客户进程发送的TCP连接释放报文段,所以确认号字段ack的值仍然为u+1,也就是对TCP释放连接报文段的重复确认。

 (5)客户端发送确认报文段:TCP客户进程收到来自TCP服务进程的TCP连接释放报文段之后,必须针对该报文段返回一个普通确认报文段。

报文段的序号字段seq的值为u+1,因为TCP连接释放报文段虽然不消耗数据,但要消耗掉一个序号,所以该报文段的起始序号应该为u+1。确认号字段ack的值为w+1,表示这是对TCP连接释放报文段的确认报文段。

 (6)进入关闭状态:TCP服务进程收到确认报文段之后进入关闭状态,但是TCP客户进程要等待2MSL才能进入关闭状态。MSL指的是最长报文段的寿命。TCP允许不同实现可根据具体情况使用更小的MSL值。

三、经典问题之为什么客户进程不直接进入关闭状态?

 假设TCP客户进程发送完最后一个确认段后直接进入关闭状态。那么应该就是下图:

现在设想一种情况,如果该确认报文段丢失了呢?

 那么TCP服务进程肯定会进行超时重传,而TCP客户进程已经关闭了,所以不会理睬该报文段,而TCP服务进程则一直重复进行超时重传的操作。

所以设置一个时间等待状态可以保证TCP服务进程可以收到最后一个TCP确认并进入关闭状态。并且2ML的时间可以保证TCP客户进程本次TCP连接所发送的报文段在网络中全部消失,这样下次进行TCP连接,网络中就不会有旧连接的报文段。

四、保活计时器

如果TCP双方已经建立了连接,过程中TCP客户进程所在的主机出现了故障,所以通过保活计时器防止这种情况出现后TCP服务进程一直等待客户进程传输数据。

每次TCP服务进程收到TCP客户进程的数据之后,就重新设置并启动保活计时器。如果一直到超时都没收到来自客户进程的数据,那么TCP服务进程就会向TCP客户进程发送一个探测报文段,以后每隔75秒发送一次,若连发10个探测报文段都没有TP客户进程的响应,TCP服务进程就认为TCP客户进程出现了问题,随之关闭该连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 面试题 05.01. 插入

文章目录 一、题目二、Java 题解 一、题目 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。 编写一种方法&#xff0c;使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域&#x…

ID保持的人像生成

AIGC真实人像写真&#xff0c;也即输入一些图片&#xff0c;生成图片里对应人物在不同场景和风格下的图片。妙鸭相机作为AIGC领域一款成功的收费产品为大家展示了如何使用AIGC技术只需要少量的人脸图片建模&#xff0c;即可快速提供真/像/美的个人写真&#xff0c;在极短的时间…

MySQL报错:this is incompatible with sql_mode=only_full_group_by 解决方法

文章目录 项目场景&#xff1a;原因分析及解决方案&#xff1a;总结&#xff1a; 项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_f…

一般做家庭用电的考什么样式的电工证?应急管理厅低压电工

一般做家庭用电的考什么样式的电工证&#xff1f;应急管理厅低压电工 就是普通家庭&#xff0c;企事业单位的用电安装维修的那种&#xff0c;是考什么电工证&#xff0c;很多人从事这个行业&#xff0c;不知道该考哪一种类型的电工证书&#xff0c;跑去问机构考哪一种证书。其…

大数据 Hive 数据仓库介绍

目录 一、​​数据仓库概念 二、场景案例&#xff1a;数据仓库为何而来&#xff1f; 2.1 操作型记录的保存 2.2 分析型决策的制定 2.3 OLTP 环境开展分析可行吗&#xff1f; 2.4 数据仓库的构建 三、数据仓库主要特征 3.1 面向主题性&#xff08;Subject-Orient…

nokov设置教程 2023.09

1软件安装 设置 屏幕分辨力 缩放问题 软件设置 以管理员身份运行 高DPI缩放行为 系统 软件界面 1 设置路径 全部数据存放于该文件夹下 右下角文件按钮 右键 选择目录 设置完后程序上面显示路径 2 电脑设置ip地址 以太网属性 版本4 查看以太网状态 是否千兆网 网速 …

Untiy UDP局域网 异步发送图片

同步画面有问题&#xff0c;传图片吧 using System.Text; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using System.Net; using System; using System.Threading.Tasks; using Sy…

搭建ELK+Filebead+zookeeper+kafka实验(详细版)

一、ELKFilebeadzookeeperkafka架构 第一层&#xff1a;数据采集层&#xff08;Filebeat&#xff09; 数据采集层位于最左边的业务服务集群上&#xff0c;在每个业务服务器上面安装了filebead做日志收集&#xff0c;然后把采集到的原始日志发送到kafkazookeeper集群上。 第二…

【常用代码15】文字单词超出强制分割换行,word-break: break-all;和word-wrap: break-word;的区别

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 文件上传后显示文件名&#xff0c;名称过长&#xff0c;超出div 有些文件名如下图 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 一般图片上传&#xff0c;要展示文件名&#x…

精品Python数字藏品购物商城爬虫-可视化大屏

《[含文档PPT源码等]精品基于Python实现的数字藏品爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、VUE.js&a…

pytest简明教程

1. 简介 pytest是一款基于Python的测试框架。与Python自带的unittest相比&#xff0c;pytes语法更加简洁&#xff0c;断言更加强大&#xff0c;并且在自动测试以及插件生态上比unittest都要更加强大。 1.1. 安装pytest pip install pytest1.2. pytest命名规则 pytest默认会…

基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

selenium-webdriver 阿里云ARMS 自动化巡检

很久没更新了&#xff0c;今天分享一篇关于做项目巡检的内容&#xff0c;这部分&#xff0c;前两天刚在公司做了部门分享&#xff0c;趁着劲还没过&#xff0c;发出来跟大家分享下。 一、本地巡检实现 1. Selenium Webdriver(SW) 简介 Selenium Webdriver&#xff08;以下简称…

使用接口包装器模块简化在FPGA上实现PCIe的过程

许多最终应用程序都将基于FPGA的设计用作其解决方案的固有组件。他们通常需要PCI Express&#xff08;PCIe&#xff09;作为必不可少的功能&#xff0c;以提供与系统中其他组件的标准化接口。 从历史上看&#xff0c;PCI Express一直难以在FPGA中实现&#xff0c;因为它需要具…

一、博弈论概述

知人者智&#xff0c;自知者明&#xff1b;胜人者力&#xff0c;自胜者强&#xff1b;小胜者术&#xff0c;大胜者德。 一、什么是“博弈” &#xff08;一&#xff09;博弈的定义 博&#xff1a;博览全局&#xff1b;弈&#xff1a;对弈棋局&#xff0c;最后做到谋定而动。…

文件包含漏洞的 00截断

isset&#xff08;&#xff09;函数若变量不存在则返回 FALSE&#xff1b;若变量存在且其值为NULL&#xff0c;也返回 FALSE。若变量存在且值不为NULL&#xff0c;则返回 TURE %00是被服务器解码为0x00发挥了截断作用。核心是chr(0)字符 00截断上传原理 - 知乎 协议参考地址&…

科研之路(2023.9.21)

惰轮 麦轮 https://mp.weixin.qq.com/s/sjb3O91auADKN7iDsut0jA 理解底盘代码

FL Studio 21内置鼓机FPC怎么用 常用编曲鼓点怎么排列

FL Studio 21内置鼓机FPC怎么用&#xff1f;FPC是一款模拟硬件打击垫建模的鼓机&#xff0c;使用方法和硬件打击垫很像&#xff0c;但是多出了修改采样等更加细节的功能。常用鼓点怎么排列&#xff1f;电子音乐中常见的鼓点有4/4拍鼓组和Trap类型鼓组。 FL Studio Win-安装包&a…

【ODPS 新品发布第 2 期】实时数仓 Hologres:推出计算组实例/支持 JSON 数据/向量计算+大模型等新能力

云布道师 阿里云 ODPS 系列产品以 MaxCompute、DataWorks、Hologres 为核心&#xff0c;致力于解决用户多元化数据的计算需求问题&#xff0c;实现存储、调度、元数据管理上的一体化架构融合&#xff0c;支撑交通、金融、科研、等多场景数据的高效处理&#xff0c;是目前国内最…

S7通信协议的挑高点

目录 1. S7协议之布尔操作 2. S7协议之PDU读取 3 S7协议之多组读取 在电气学习的路上&#xff0c;西门子PLC应该是每个人的启蒙PLC&#xff0c;从早期的S7-300/400PLC搭建Profibus-DP网络开始接触&#xff0c;到后来的S7-200Smart PLC&#xff0c;再到现在的S7-1200/1500 PLC…