【计算机网络】TCP协议特点3


心跳机制   


什么是心跳机制

心跳机制是在计算机系统、网络通信和许多其他技术领域广泛应用的一种机制,用于检测两个实体之间的连接是否仍然活跃,或者设备是否还在正常运行。就是每隔一段时间发送一个固定的消息给服务端,服务端回复一个固定消息,如果服务端一段时间没有收到固定消息就自动断开连接


心跳机制有什么用

在长连接下 可能很长时间都没有数据往来,理论上说 这个连接是一直保持连接得 但实际情况 会因为什么故障什么的 难以维持连接,在这个时候 我们要知道 需要心跳包的 用于保持长时间连接 和保活


心跳机制怎么实现

1 应用层自己的心跳包

2 使用SO_KEEPALIVE 套接字选项

3 在一些硬件设备中,例如网络路由器,会有专门的芯片和电路来实现心跳机制


拥塞控制

算机网络领域中用于管理和防止网络拥塞的一系列机制


为什么要拥塞控制

1 网络中的链路容量和交换结点的缓存机制和处理机制都有工作极限 当网络需求超过它的工作极限时候 就会出现拥塞

2 在网络拥塞时候 如果继续发送大量数据包 肯会导致数据包时延 丢失等 

3 这是TCP就会重传数据 但是这一重传会导致网络负担更重 于是导致更大时延以及更多丢包 这个情况会导致恶性循环不断放大


控制方法和触发机制

  1. 慢开始(Slow - Start)
    • 原理:在连接建立初期,发送方会以一个较小的拥塞窗口开始发送数据,这个窗口大小通常初始化为 1 个或几个最大报文段长度(MSS)。然后,每次收到接收方的确认(ACK),拥塞窗口就会成倍增加。
    • 目的:通过这种方式,发送方可以快速探测网络的可用带宽,同时避免一开始就向网络中注入过多的数据包而导致拥塞。
  2. 拥塞避免(Congestion Avoidance)
    • 原理:当拥塞窗口增长到一定程度后,发送方进入拥塞避免阶段。在这个阶段,拥塞窗口不再成倍增长,而是每次收到一个 ACK 后,cwnd 增加 1MSS。这类似于在发现事情进展比较顺利后,开始放慢扩张的速度,更加谨慎地前进,以防止过度扩张导致问题。
    • 目的:这种线性增长方式可以使发送方更加平稳地利用网络带宽,避免过快地占用网络资源而引发拥塞。
  3. 快速重传(Fast Retransmit)
    • 原理:当接收方收到乱序的数据包时,会立即发送重复的 ACK,告知发送方期望收到的数据包序列号。如果发送方收到三个或更多连续的重复 ACK,就会认为相应的数据包丢失了,然后立即重传该数据包,而不需要等待超时定时器(RTO)到期。
    • 目的:这种机制可以快速恢复丢失的数据包,减少数据传输的延迟,因为等待 RTO 到期的时间通常比收到三个重复 ACK 的时间长。
  4. 快速恢复(Fast Recovery)
    • 原理:在快速重传之后,发送方会进入快速恢复阶段。此时,发送方会将拥塞窗口减半(cwnd = cwnd/2),同时将慢启动阈值设置为当前拥塞窗口的值。
    • 目的:快速恢复机制使得发送方可以在数据包丢失后,尽快地调整发送策略,恢复数据传输,同时避免过度降低发送速率,以保持网络的利用率。

  实现方式

端到端(End - to - End)拥塞控制

  • 这是一种在传输层(如 TCP 协议)实现的拥塞控制方式。发送端根据从接收端反馈的信息(如 ACK)来调整发送策略。

网络辅助(Network - Assisted)拥塞控制

  • 这种方式是由网络中的路由器等设备参与拥塞控制。路由器可以监测经过它的数据包流量,当发现拥塞迹象时,向发送端发送拥塞反馈信息。

Nagle算法

为了发送大数据块 避免网络拥塞许多小数据块


什么是Nagle算法

Nagle 算法是一种用于网络拥塞控制的算法,主要应用在 TCP 协议中。它的目的是减少网络中因频繁发送小数据包而导致的带宽浪费和网络拥塞

运输相同数量的人 利用出租车 和大客车 大客车数量少更不容易造成拥堵

所以再传输数据时候 利用路由器 再每个包里存放数量越大 包个数越少 传递速度越快

Nalge算法也是TCP发送端产生粘包问题主要原因


算法规则

1 如果包长度达到mss(最大报文长度)则允许发送

2 如果该包含FIN则允许发送

3 设置TCP_NODELAY选项允许发送

4 未设置TCP_CORK选项(网络比较通畅)时 则所有发送出去的最小数据包小于mss长度

5 上述条件都未满足时候 但发生超时(一般200ms)则立即发送


Nagle算法是默认打开的

Nagle算法是默认打开的 如果对应一些需要小数据包交互场景程序 比如talent ssh这样交互性比较强的程序 则需要关闭Nagle算法 


TCP特有功能


1 RTT  往返时延


往返时延(RTT)是指从发送端发送数据开始,到发送端收到来自接收端的确认(ACK)所经历的时间。它是计算机网络性能评估中的一个重要指标

RTT决定三部分
    1  链路传播时间
    2  末端系统处理时间
    3  路由器缓存和排队时间和处理时间


2 RTO  超时重传


RTO即超时重传时间,是指在 TCP(协议中,发送端在发送数据后等待接收端确认(ACK)的最长时间。如果在这个时间内没有收到 ACK,发送端就会认为数据包丢失,从而进行重传。这是一种保障数据可靠传输的机制


TCP发送一个报文段 就对此报文段设置一个超时重传计时器 这个计时器设置超时重传时间应当略大于TCP报文段平均往返时延PTO=2RTT


影响因素

网络拥塞程度:当网络拥塞严重时,数据包的传输延迟会增加,往返时延(RTT)也会随之增大。

链路质量和稳定性:链路的质量差(如信号干扰大、带宽不足等)或者稳定性差(如频繁断连)会影响 RTT 的测量,从而影响 RTO 的计算。

接收端和发送端的处理能力:如果接收端或发送端的处理速度慢,例如接收端处理数据包的速度跟不上接收速度,可能会导致 ACK 返回延迟,使得发送端误认为数据包丢失而触发 RTO。


可以根据实时 情况调整RTO


3 累计应答


1 累计几个data包一起回复ack效率高
2 累计几个和滑动窗口TCP有关
3 ack=4001代表seq=4000之前数据都接收成功

优点

减少网络开销:通过累计应答,可以减少确认消息的数量。如果对每个数据包都单独发送确认,在网络中会产生大量的确认消息,占用网络带宽和设备资源。而累计应答机制使得确认消息的数量与按序接收的数据包组数量相对应,有效降低了网络中的信令开销。

提高确认效率:这种机制与发送方的发送策略(如滑动窗口机制)配合良好。发送方可以根据累计确认来判断接收方的接收情况,快速了解哪些数据包已经被成功接收,哪些可能丢失或延迟。


4 滑动窗口


  • 滑动窗口(Sliding Window)是一种流量控制和可靠传输的机制,主要应用于传输协议(如 TCP 协议)中。它允许发送方在未收到接收方确认的情况下,连续发送多个数据包,这些数据包的数量由窗口大小决定。
  • 可以将滑动窗口想象成一个有固定容量的管道。发送方在这个管道中填充数据包发送给接收方,接收方从管道的另一端接收数据包并进行处理。窗口大小就代表了这个管道的容量,它决定了发送方一次最多能发送多少个数据包。

优点

  • 流量控制:通过接收方窗口大小的反馈,滑动窗口机制能够有效地控制发送方的发送速率,使其与接收方的接收能力相匹配。这样可以避免接收方因为来不及处理过多的数据包而导致数据丢失或性能下降。
  • 提高传输效率:与逐个发送数据包并等待确认的方式相比,滑动窗口允许发送方在等待确认的同时发送多个数据包,大大提高了数据传输的效率。特别是在网络延迟较高的情况下,滑动窗口机制可以充分利用等待确认的时间来发送更多的数据包,减少了传输时间。
  • 可靠传输:结合累计应答机制,滑动窗口能够确保数据的可靠传输。发送方可以根据接收方的确认消息准确地判断哪些数据包已经被成功接收,哪些需要重传。

有了窗口 可以指定窗口大小 。
窗口大小每到达最大限度等待应答,可以继续发送到数据最大值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOs DevEco Studio小技巧31--画布组件Canvas

那天我们用画布实现了文字颜色的渐变,实际上画布还有很多好玩的功能,接下来让我们一起试一下画布怎么玩 Canvas 提供画布组件,用于自定义绘制图形。 接口 Canvas Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext…

蓝桥杯每日真题 - 第10天

题目:(班级活动) 题目描述(14届 C&C B组C题) 解题思路: 题目要求我们找到最小的修改次数,使得任意一名同学的 ID 都与另一名同学的 ID 不相同。可以总结出这是一个寻找“重复数字最少修改…

HTML5实现俄罗斯方块小游戏

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143788449 HTML5实现俄罗斯方块小游戏&#x…

外网访问 WebDav 服务

从外部网络环境(比如异地和家中网络)来访问公司内网的 WebDav 服务(基于 IIS )并映射成本地虚拟磁盘。 步骤如下 第一步 在公司内网的电脑上设置 webDav。 1,找到【控制面板】,双击进入。 2&#xff0c…

深度学习每周学习总结J5(DenseNet-121 +SE 算法实战与解析 - 猴痘识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 0. 总结 数据导入及处理部分:本次数据导入没有使用torchvision自带的数据集,需要将原始数据进行处理包括数据导入…

【玩具蛇——DFS】

题目 代码 #include <bits/stdc.h> using namespace std; int g[5][5]; int dx[] {0, 0, -1, 1}, dy[] {-1, 1, 0, 0}; int ans; void dfs(int x, int y, int t) {g[x][y] t;if (t > 16){ans;g[x][y] 0;return;}for (int i 0; i < 4; i){int nx x dx[i], n…

STM32 串口输出调试信息

软硬件信息 CubeMX version 6.12.1Keil uVision V5.41.0.0 注意 串口有多种&#xff1a; TTL232485 串口的相关知识&#xff1a; 01-【HAL库】STM32实现串口打印&#xff08;printf方式) &#xff0c; 内含 TTL 和 232 区别。 我把 232 串口连进 STM32 串口助手收到的信息…

spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索

一、背景 es索引有一个文档CourseIndex&#xff0c;下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…

内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理

内容占位符 前言 随着我们对HTML和CSS3的学习逐渐深入&#xff0c;相信大家都已经掌握了网页制作的基础知识&#xff0c;包括如何使用HTML标记构建网页结构&#xff0c;以及如何运用CSS样式美化页面。为了进一步巩固和熟练这些技能&#xff0c;今天我们一起来完成一个有趣且实…

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别&#xff0c;可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网&#xff1a; ​安装 WSL 前提 以下基于windows 111专业版进行配置&#xff0c;windows 10应该也是可以…

深入理解 source 和 sh、bash 的区别

1 引言 在日常使用 Linux 的过程中&#xff0c;脚本的执行是不可避免的需求之一&#xff0c;而 source、sh、bash 等命令则是执行脚本的常用方式。尽管这些命令都能运行脚本&#xff0c;但它们之间的执行方式和效果却有着显著的区别。这些区别可能会影响到脚本的环境变量、工作…

LogViewer NLog, Log4Net, Log4j 文本日志可视化

LogViewer 下载 示例&#xff1a;NLog文本日志可视化软件&#xff0c;并且能够实时监听输出最新的日志 nlog.config 通过udp方式传输给LogViewer (udp://ip:port) <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-…

探索 HTML 和 CSS 实现的蜡烛火焰

效果演示 这段代码是一个模拟蜡烛火焰的HTML和CSS代码。它创建了一个具有动态效果的蜡烛火焰动画&#xff0c;包括火焰的摆动、伸缩和光晕的闪烁。 HTML <div class"holder"><div class"candle"><div class"blinking-glow"&g…

vue3【实战】切换全屏【组件封装】FullScreen.vue

效果预览 原理解析 使用 vueUse 里的 useFullscreen() 实现 代码实现 技术方案 vue3 vite UnoCSS vueUse 组件封装 src/components/FullScreen.vue <template><component:is"tag"click"toggle":class"[!isFullscreen ? i-ep:full-sc…

GPT-5 要来了:抢先了解其创新突破

Microsoft 的工程师计划于 2024 年 11 月在 Azure 上部署 Orion (GPT-5)。虽然这一版本不会向公众开放&#xff0c;但其上线被视为人工智能领域的一个重要里程碑&#xff0c;并将产生深远的影响。 文章目录 GPT-5 真的要来了GPT-4 的局限性GPT-5 的创新突破与遗留挑战GPT-5 预期…

C++【深入项目-检测键盘】

神马是检测键盘&#xff0c;就是让编辑器可以检测键盘按下了什么按键&#xff0c;我们先科普复习检测键盘 。 检测键盘需要用到一些函数&#xff0c;请见下&#xff1a; ! KEY_DOWN( 80 ) 这个代码是检测按下键盘上P按键。那80是什么&#xff1f;原来是对应按键的&#xff0…

springboot的依赖实现原理:spring-boot-starter-parent解析

01 dependencyManagement的作用 在使用springboot时我们会在项目pom引入以下配置和依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version> &l…

Thinkphp6视图介绍

一.MVC MVC 软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09; ThinkPHP6 是一个典型的 MVC 架构 控制器—控制器&#xff0c;用于将用户请求转发给相应的Model进行处理&a…

【idea】更换快捷键

因为个人习惯问题需要把快捷键替换一下。我喜欢用CTRLD删除一下&#xff0c;用CTRLY复制一样。恰好这两个快捷键需要互换一下。 打开file——>setting——>Keymap——>Edit Actions 找到CTRLY并且把它删除 找到CTRLD 并且把它删除 鼠标右键添加CTRLY 同样操作在Delet…

Tiktok对接和内容发布申请流程

这段时间在搞AI生成视频&#xff0c;希望用户能一键发布到Tiktok&#xff0c;因此研究了一下Tiktok的开发者申请流程&#xff0c;发现好复杂&#xff0c;同时也发现Tiktok的开发也跟我一样&#xff0c;挺草台班子的 0、流程简述 废话不多说&#xff0c;Tiktok的开发者申请和…