【计算机网络】TCP原理 | 可靠性机制分析(四)

news2024/10/7 8:26:57

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【网络编程】
本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌

这里写目录标题

  • 🐬一、延时应答
  • 🐬二、捎带应答
  • 🐬三、面向字节流
    • 🏀粘包问题
  • 🐬四、TCP异常情况的处理

🐬一、延时应答

接收方在接收到数据后并不立即发送ACK报文,而是等待一定的延迟时间,以查看是否有更多的数据到达。如果在延迟时间内收到了更多的数据,接收方可以将多个ACK合并为一个ACK,从而减少ACK报文的发送次数。另外,这种延迟的时间可以给应用程序更多的空间来消费数据,从而避免数据积压和溢出的问题。

举个例子:比如说现在接收方接收数据后,接受区缓存(一共10kb)使用了6kb,所以剩余空间大小就是4kb,此时如果立即返回ACK的话,窗口大小就是4kb;但是如果延时返回ACK的话,假设延时500ms的话,那么应用程序就可以利用这延时的500ms来进行数据的消费,假设又消费了2kb数据的话,返回ACK后窗口大小就是6kb。接收方通过延时应答机制能为数据传输提高多少效率还是要取决于接收方处理数据的能力。

简单来说TCP延时应答可以让ACK的反馈时机变迟。

🐬二、捎带应答

捎带应答则是基于延时应答的基础上让数据进行合并。

下面捎带应答的控制图,请看

在这里插入图片描述

很多情况下,客户端服务器在应用层也是 “一发一收” 的。

在这里插入图片描述如上图:四次挥手也有可能是三次挥手,其实就是延时应答和捎带应答起到的作用。中间的两个数据包合并成一个数据包之后,数据传输的效率就会提高,因为每次数据的传输都是需要封装分用的。
为什么中间的两次挥手能够进行合并:一方面是延时应答中的延时时间允许ACK和响应合并在一起发送出去;另一方面就是ACK数据本身不需要携带载荷,同时不和其它数据发送冲突。所以我们可以让一个数据包既携带载荷数据,又能带有ACK的信息(有ACK标志位、窗口大小、确认序号其实就够了)。

🐬三、面向字节流

TCP使用了多种机制来保证数据的可靠性,其中之一就是面向字节流。通过将数据拆分成字节流,TCP可以跟踪和管理每个字节的传输状态。TCP会对每个字节进行编号,以便在传输过程中检测和纠正任何丢失、重复、失序或损坏的字节。
面向字节流的特性使得TCP能够提供可靠的数据传输,确保数据按照发送的顺序和准确的内容被接收方接收到。

🏀粘包问题

面向字节流的情况下可能出现粘包问题:粘包粘的是应用层数据包

通过TCP的read/write的数据,都是TCP报文的载荷(也就是应用层数据),发送方一次性是可以发送多个应用层数据的。但是在接收的时候,是要对这些应用层数据进行区分,区分从哪里到哪里是一个数据报。如果我们没有设计到的就就有可能出现发送了2个包,但是只读取了1.5个包的bug。

在这里插入图片描述
针对上述的问题在传输层中并没有很好的解决办法;我们只能通过合理地设计应用层协议来解决上述问题。

应用层的解决方式:

  • 引用分隔符来区分包和包之间的边界。
  • 引用包长度来区分包和包之间的边界。

方式一:使用分隔符来区分在这里插入图片描述
接收方的应用程序就可以通过\n来对数据包进行区分。
关于之前写的EchoServer回显服务器就是这样来进行设定的:
发送数据报的时候使用println来进行发送。接收数据报的时候使用scanner.next进行解析,遇到\n就返回。如下图所示:
在这里插入图片描述
在这里插入图片描述

方式二:使用包长度来进行区分
在这里插入图片描述

补充一点:粘包问题不仅仅是在TCP协议中存在,只要是面向字节流的机制(比如说文件)都存在粘包这样的问题。解决方式可以是使用分隔符的方式,也可以是使用长度的方式,无论是哪种方式,本质上都是为了区分包和包之间的边界。我们在自定义应用层协议的时候可以使用这样的思想来解决问题。

🐬四、TCP异常情况的处理

网络有时候不稳定,会有很多种情况导致网络出现故障,这很有可能会导致TCP连接不能正常工作。

  • 情况一:进程崩溃

如果进程崩溃或异常终止,操作系统会检测到该进程的退出,并释放该进程相关的资源,包括进程控制块(PCB)和文件描述符(这相当于调用了socket.close(),注意socket在系统内核中也是一个文件,也会被放到文件描述符表中),崩溃这一方就会发送FIN,然后进一步三次握手四次挥手,之后连接就正常释放了。此时TCP的处理和进程正常退出没有什么太大区别。

  • 情况二:主机关机(正常步骤的关机)

主机正常关机的话就会尝试终止所有进程(这是一个强制终止进程的过程),这和情况一的进程崩溃处理方式是一样的。当然主机关机的时候,会有一定的关机时间,在这个时间内,四次挥手有没有完成我们是不确定的,可能挥完也可能没有挥完,如果四次挥手没有完成的话也没关系。(如下图:)
在这里插入图片描述

  • 情况三:主机掉电(突发的,比如说拔电源,根本没有反应时间)

在这里插入图片描述

TCP协议中虽然已经有了心跳包的支持,但是我们作为开发者往往需要在应用程中重新实现心跳包。因为TCP协议中的心跳包周期太长了,在高并发的场景下我们甚至是需要毫秒级别的心跳包,以便我们能够在更短的时间内发现某个服务器的问题。

  • 情况四:网线断开

这里发生的情况和情况三(即主机掉电)是类似的。网线断开之后,这里假设A是发送方的话,A发生的情况和上述主机掉电的第一种情况(即没有ACK->超时重传->复位报文以重置连接->释放连接);而B发生的情况是主机掉电的第二种情况(B这边会通过发送心跳包发现A已经没法建立通信了,进一步的就会释放连接)。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!

在这里插入图片描述

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

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

相关文章

软信天成:数据安全管理解决方案分享

近年来,随着数据环境日趋复杂多变和潜在的数据隐私泄露风险潜伏,如何确保企业数据安全已成为众多企业亟待面对与妥善处理的重要问题。 为了应对这一严峻的现实挑战,软信天成凭借专业的知识体系和丰富的实战经验积累,总结出了一套…

【web服务搭建实验】之nginx基础学习

目录 一、nginx的简介二、nginx安装实验虚拟主机的配置web服务器的主流实现方式-LAMP和LNMP 一、nginx的简介 Nginx是一款轻量级HTTP服务器,同时也是代理邮箱服务器,具备反向代理,通用代理的功能。支持多个系统,和不同操作系统。…

如何注释 PDF?注释PDF文件方法详情介绍

大多数使用 PDF 文档的用户都熟悉处理这种格式的文件时出现的困难。有些人仍然认为注释 PDF 的唯一方法是打印文档,使用笔或荧光笔然后扫描回来。 您可能需要向 PDF 添加注释、添加注释、覆盖一些文本或几何对象。经理、部门负责人在编辑公司内的合同、订单、发票或…

lvgl简介

LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统,可以在不同的操作系统、微控制器和图形加速器上运行。LVGL的核心…

power shell 有哪些常用命令?

PowerShell是一种命令行外壳和脚本语言,它基于.NET Framework并专为系统管理员设计。下面是一些常用的PowerShell命令: Get-Process:获取运行的进程列表。Get-Service:获取运行的服务列表。Get-EventLog:获取事件日志…

基于uniapp的在线课程教学系统

介绍 项目背景: 随着互联网的快速发展,在线教育已经成为一种流行的学习方式。针对这一趋势,我们决定开发一个基于UniApp的在线课程教学系统。该系统旨在为学生提供方便快捷的在线学习体验,同时也为教师提供一个高效管理课程的平台…

【java八股文】之计算机网络系列篇

1、TCP/IP和UDP模型 TCP/IP分层(4层):应用层,传输层,网络层,数据链路层 网络的七层架构 (7层):应用层,表示层,会话层,传输层&#xff…

M-A352AD10高精度三轴加速度计

一般描述 M-A352是一种三轴数字输出加速度计,具有超低噪声、高稳定性、低功耗等特点,采用了夸特的精细处理技术。. 多功能M-A352具有高精度和耐久性,非常适合广泛的具有挑战性的应用,如SHM、地震观测、工业设备的状态监测和工业…

面试题:说一下API网关的作用?企业如何应用API网关?

文章目录 一、API网关的用处1、Open API2、微服务网关3、API服务管理平台 二、API网关在企业架构中的地位三、企业中如何应用API网关四、API网关有哪些竞争方案五、API网关解决方案六、企业怎么选择API网关1、性能与可用性2、可扩展性、可维护性3、需求匹配度4、是否开源&#…

良心推荐!几款收藏的神级IDEA插件分享

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 文章目录 CodeGlanceGsonFormatPOJO to JsonRainbow BracketsTranslationLombokMaven HelperAlibaba Java Code GuidelinesGenerateAllSetterMybatisXChinese (Simplified…

有哪些品牌的超声波清洗机是值得入手的?超声波清洗机推荐

作为一个既对生活品质有追求,又只想躺平的懒人,一直在努力尝试让轻松的生活少一点绊脚石,而其中最重要的一个,就是清洗眼镜清洗日常生活的一些小物件,讲真,洗这些东西有时候就跟下班回家的KPI一样。白天不累…

Linux 内核大转变:是否将迈入现代 C++ 的时代?

Linux开发者 H. Peter Anvin 在邮件列表中重启了关于 Linux内核C代码转换为C的讨论,并陈述了自己的观点。说之前先看一下这个话题的历史背景。 早在2018年4月1日,Andrew Pinski提议将 Linux 内核源码转为 C,在文中写道之所以引入是由于以下优…

安全生产管理平台——革新传统安全生产管理方式,重塑企业安全文化

安全生产管理在现代企业中占据着至关重要的地位。传统的安全生产管理方式虽然在一定程度上能够保障企业的生产安全,但随着企业规模的不断扩大和生产环境的日益复杂,其局限性也愈发凸显。而安全生产管理平台的出现,正是为了解决这一问题。 平台…

相信我,努力真的有用!

2023年对很多人来说都是异常艰辛的一年,大环境下的每个人都面对着或多或少的挑战,在这一年的时间里,身边的朋友陆陆续续的跳槽、创业、再就业,结婚,生娃,回老家,每个人渐渐的在时代面前或妥协或…

基于物联网设计的智能储物柜(4G+华为云IOT+微信小程序)

一、项目介绍 在游乐场、商场、景区等人流量较大的地方,往往存在用户需要临时存放物品的情况,例如行李箱、外套、购物袋等。为了满足用户的储物需求,并提供更加便捷的服务体验,当前设计了一款物联网智能储物柜。 该智能储物柜通…

Embedding Watermarks into Deep Neural Networks

将水印嵌入深度神经网络 ABSTRACT 最近在深度神经网络领域取得了显著的进展。分享深度神经网络的训练模型对于这些系统的快速研究课并发进展至关重要。与此同时,保护共享训练模型的权利也变得十分必要。为此我们提议使用数字水印技术来保护知识产权,并…

手把手教你学会接口自动化系列十三-将所有的crm用例由json改为excel

本篇汇总我写接口自动化用到的所有excel数据如下: 登录模块 添加线索模块 添加场景模块

docker部署私人云盘nextcloud

首先查看效果 1.拉取镜像 docker pull nextcloud 2.创建目录 mkdir -p /data/nextcloud/{config,data,apps} 3.创建实例 docker run -itd --name yznextcloud -v /data/nextcloud/config:/var/www/html/config -v /data/nextcloud/data:/var/www/html/data -v /data/nextc…

交流插座电器漏电断路器的低功耗控制芯片D4140,内置桥式整流器漏电灵敏度可调,采用SOP8和DIP8 的封装形式

D4140 是一种用于交流插座电器漏电断路器的低功耗控制器。这些设备可以检测到接地的危险电流路径,例如设备掉进水中。在发生有害或致命的电击之前,断路器会断开线路。内置有整流桥,齐纳管稳压器,运算放大器,电流基准&a…

基于python的深度神经网络原理与实践

理论基础 什么是神经网络 我们知道深度学习是机器学习的一个分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支,它在 wikipedia 上的解释如下: 深度神经网络(Deep N…