TCP关闭连接时的一些思考

TCP协议是TCP/IP栈中最复杂的协议,它最大的优点是传输的可靠性,这通过面向连接、按序传输、超时重传、流量控制等机制保证其传输的可靠性。但这并不是我们今天要讨论的重点!

TCP通信的过程分别是三个阶段:建立连接、传输数据、关闭连接。建立连接是通过三次握手完成,而关闭连接是通过四次挥手实现。这也不是我们要讨论的重点!

四次挥手的流程如下:

TCP四次挥手

当其中一方在发送完自己的数据后,再没有数据需要通过TCP发送,可以发起关闭连接的请求,对方收到该请求后,首先回复ACK确认,待自己的数据发送完毕后,也会发起自己的关闭连接请求,进而完全断开TCP连接。

TCP建立和关闭连接的请求通常由客户端发起,服务器属于被动方,这是常见的TCP四次挥手的过程。但这不是我们今天要讨论的重点!

我们刚刚说了,这是常见的流程,但不是固定的流程。所有的协议在设计时有三种触发方式:调用接口主动触发、接收报文被动触发、定时器触发。这些触发方式合在为的是能保证协议在工作时的逻辑自洽。简单了说,就是要考虑到任何的可能,在任何一种可能的情况下都不能让协议崩溃。

而上面的TCP四次挥手的过程没有考虑到,如果TCP通信双方同时发起断开连接的请求怎么办?

很明显,作为设计最复杂的协议,TCP不可能不考虑到这一点:

TCP同时发起断开连接的请求

但这还不是我们今天要讨论的重点!虽然TCP考虑到了这种情况,但我们从实际使用中思考,这种情况真的只是为了防止TCP通信双方同时发起断开连接的请求而设计的吗?

有没有可能是A应用层由于某些未知的错误,它需要把这个错误告诉对方B,同时发起断开连接的请求。对方B首先收到的是这个错误通知,这个错误通知触发了B发起断开连接的请求,然后才收到A的关闭连接的请求。

这种情况符合CLOSING的情况,但你能说是双方同时发起的吗?很明显是A发起,在请求没有到达B之前,触发B发起关闭连接的请求。这才是我们今天要讨论的重点!

那么大家在车载以太网中有遇到过这种情况吗?欢迎留言讨论!


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

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

相关文章

图论基础知识 深度优先(Depth First Search, 简称DFS),广度优先(Breathe First Search, 简称DFS)

图论基础知识 学习记录自代码随想录 dfs 与 bfs 区别 dfs是沿着一个方向去搜,不到黄河不回头,直到搜不下去了,再换方向(换方向的过程就涉及到了回溯)。 bfs是先把本节点所连接的所有节点遍历一遍,走到下…

从单按键状态机思维扫描引申到4*4矩阵按键全键无冲扫描,一步一步教,超好理解,超好复现(STM32程序例子HAL库)

目前大部分代码存在的问题 ​ 单次只能对单个按键产生反应;多个按键按下就难以修改;并且代码耦合度较高,逻辑难以修改,对于添加长按,短按,双击的需求修改困难。 解决 16个按键按下无冲,并且代…

如何在CentOS本地搭建DataEase数据分析服务并实现远程查看数据分析

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的,我们班主任想委托我做一个程序,能显示还有几天考试。我立即理解了这个意思,接下了这个项目。 话不多说,来看看这个项目吧—— 项目简介 仓库地址:https://gitee.com/yaoqx/desktop-countdown-day 这是 …

幻兽帕鲁中文怎么设置 游戏中文修改方法 《幻兽帕鲁》宠物指定配种显示英文解决方法 幻兽帕鲁Steam游戏解说合集 Mac玩Windows游戏

在广阔的世界中收集神奇的生物“帕鲁”,派他们进行战斗、建造、做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏。幻兽帕鲁支持多人在线捕捉“帕鲁”,展开丰富的冒险玩法;不同的关卡具有不同的…

Bellman Ford算法:解决负权边图的最短路径问题

Bellman Ford算法的介绍 在计算机科学的世界中,Bellman Ford算法是一种解决单源最短路径问题的算法,它可以处理有负权边的图。这个算法的名字来源于两位科学家Richard Bellman和Lester Randolph Ford,他们是这个算法的发明者。 这个算法的主…

AI图书推荐:2024年ChatGPT副业搞钱指南

本书《2024年ChatGPT副业搞钱指南》(ChatGPT Side Hustles 2024)由Alec Rowe撰写,旨在指导读者如何利用ChatGPT技术来提升被动收入、创造新的现金流,并在数字化时代保持领先。 本书是深入了解被动收入未来的综合指南。本书揭示了超…

【算法基础实验】图论-基于DFS的连通性检测

基于DFS的连通性检测 理论基础 在图论中,连通分量是无向图的一个重要概念,特别是在处理图的结构和解析图的组成时。连通分组件表示图中的一个子图,在这个子图中任意两个顶点都是连通的,即存在一条路径可以从一个顶点到达另一个顶…

Flutter应用下拉菜单设计DropdownButtonFormField控件介绍

文章目录 DropdownButtonFormField介绍使用方法重点代码说明属性解释 注意事项 DropdownButtonFormField介绍 Flutter 中的 DropdownButtonFormField 是一个用于在表单中选择下拉菜单的控件。它是 DropdownButton 和 TextFormField 的组合,允许用户从一组选项中选择…

井字棋游戏

1. 游戏创建 1.1导包 from tkinter import * import numpy as np import math import tkinter.messagebox 1.2 窗口内容 1.2.1创建一个窗口 root Tk() # 窗口名称 root.title("井字棋 from Sun") 1.2.2 创建一个框架,将其放置在窗口中 Frame1 F…

汽车底盘域的学习笔记

前言:底盘域分为传统车型底盘域和新能源车型底盘域(新能源系统又可以分为纯电和混动车型,有时间可以再研究一下) 1:传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网(公司或组织的内部网络)和外网(如互联网)之间安全地传输文件的过程。这个过程需要特别注意安全性,因为内网往往包含敏感数据,直接连接内网和外网可能会带来安全风险。因此会…

设计模式——终止模式之两阶段终止模式

文章目录 1. 错误思路2. 两阶段终止模式2.1 利用 isInterrupted2.2 利用停止标记interrupt-打断park Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。 1. 错误思路 使用线程对象的 stop() 方法停…

GEM TSU Interface Details and IEEE 1588 Support

摘要:Xilinx ZNYQ ULTRASCALE MPSOC的GEM和1588的使用 对于FPGA来说,只需要勾选一些znyq的配置就行了,其余的都是软件的工作; 所有配置都勾选之后,最终会露出来的接口如下: GEM需要勾选的配置如下&#xf…

15.Blender Eevee和Cycles渲染引擎对比

初步介绍 Eevee是实时渲染的引擎,会省略一些解算方式,尤其对光线和阴影 Cycles会考虑这些因素,所以会对光线和阴影的表达更加真实,有一个实时光线追踪的功能 Cycles渲染完之后,每移动一次画面,都会重新渲染…

政安晨:【Keras机器学习示例演绎】(十九)—— 可视化网络学习内容

目录 简介 设置 建立特征提取模型 设置梯度上升过程 设置端到端滤波器可视化回路 可视化目标层中的前 64 个滤波器 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&…

基于Rust的多线程 Web 服务器

构建多线程 Web 服务器 在 socket 上监听 TCP 连接解析少量的 HTTP 请求创建一个合适的 HTTP 响应使用线程池改进服务器的吞吐量优雅的停机和清理注意:并不是最佳实践 创建项目 ~/rust ➜ cargo new helloCreated binary (application) hello package~/rust ➜ma…

kaggle之皮肤癌数据的深度学习测试

kaggle之皮肤癌数据的深度学习测试 近期一直在肝深度学习 很久之前,曾经上手搞过一段时间的深度学习,似乎是做轮胎花纹的识别,当初用的是TensorFlow,CPU版本的,但已经很长时间都没弄过了 现在因为各种原因&#xff…

全面解析平台工程与 DevOps 的区别与联系

平台工程的概念非常流行,但很多开发人员仍然不清楚它是如何实际运作的,这是非常正常的。 平台工程是与 DevOps 并行吗?还是可以相互替代?或者 DevOps 和平台工程是两个完全不同的概念? 一种比较容易将两者区分开来的方…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么? 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法,真正的所见即所得,非常直接。 为什么要使用框架库? 对于常用的前端框架而言,无论是Vue Rea…