【计算机网络】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 协议)中。它允许发送方在未收到接收方确认的情况下,连续发送多个数据包,这些数据包的数量由窗口大小决定。
  • 可以将滑动窗口想象成一个有固定容量的管道。发送方在这个管道中填充数据包发送给接收方,接收方从管道的另一端接收数据包并进行处理。窗口大小就代表了这个管道的容量,它决定了发送方一次最多能发送多少个数据包。

优点

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

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

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

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

相关文章

STM32单片机CAN总线汽车线路通断检测

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着汽车电子技术的不断发展,车辆通信接口在汽车电子控…

Easyui ComboBox 数据加载完成之后过滤数据

Easyui ComboBox 数据加载完成之后过滤数据 需求 在ComboBox 下拉框中过滤包含"物联网"三个字的选项 现状 期望 实现方式 使用 combobox 的方法在加载时过滤 loadFilter 方式一&#xff1a;HTML中编写 <input id"enterpriseDepartmentCode" name&…

Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)

Oracle19C AWR报告分析之Instance Efficiency Percentages 一、分析数据二、详细分析2.1 Instance Efficiency Percentages (Target 100%)各项指标及其解释2.2 分析和总结 一、分析数据 二、详细分析 在 Oracle AWR (Automatic Workload Repository) 报告中&#xff0c;每个性能…

【因果分析方法】MATLAB计算Liang-Kleeman信息流

【因果分析方法】MATLAB计算Liang-Kleeman信息流 1 Liang-Kleeman信息流2 MATLAB代码2.1 函数代码2.2 案例参考Liang-Kleeman 信息流(Liang-Kleeman Information Flow)是由 Liang 和 Kleeman 提出的基于信息论的因果分析方法。该方法用于量化变量之间的因果关系,通过计算信息…

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后&#xff0c;再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法&#xff0c; 来和DB-GPT进行对话。 但是值得注意的是&#xff0c;DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…

帽子矩阵--记录

帽子矩阵&#xff08;Hat Matrix&#xff09;并不是由某一位具体的科学家单独发明的&#xff0c;而是逐渐在统计学和线性代数的发展过程中形成的。帽子矩阵的概念最早出现在20世纪初的统计学文献中&#xff0c;尤其是在回归分析的研究中得到了广泛应用。然而&#xff0c;具体是…

opencv kdtree pcl kdtree 效率对比

由于项目中以一个环节需要使用kdtree ,对性能要求比较严苛&#xff0c;所以看看那个kdtree效率高一些。对比了opencv和pcl。 #include <array> #include <deque> #include <fstream> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp…

NodeJS 百度智能云文本转语音(实测)

现在文本转语音的技术已经非常完善了&#xff0c;尽管网络上有许多免费的工具&#xff0c;还是测试了专业的服务&#xff0c;选择了百度的TTS服务。 于是&#xff0c;在百度智能云注册和开通了文本转语音的服务&#xff0c;尝试使用NodeJS 实现文本转语音服务。但是百度的文档实…

关于在Reverse函数中不能使用L=s而是*L=*s的原因分析

完整代码地址&#xff1a; https://blog.csdn.net/2301_76819732/article/details/143807340?spm1001.2014.3001.5502 如果使用Ls; 的话&#xff0c;当输出结果时&#xff0c;会发现内容为空。 我感到很奇怪&#xff0c;按照我的设想&#xff0c;Ls;会把s指向的地址赋给L。 但…

麒麟系统下docker搭建jenkins

首先我们需要创建宿主机挂载路径&#xff0c;我这里放在本地的/data/henkins/home,然后赋予权限&#xff0c;命令如下&#xff1a; mkdir -p /data/jenkins/home chown -R 1000:1000 /data/jenkins/home chmod -R 777 /data/jenkins/homedocker run -d --restart …

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot

1&#xff0c;创建证书和密钥 需要openssl环境&#xff0c;如果是Window下&#xff0c;下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境&#xff0c;此环境是在jdk环境下 本案例所使用的账号密码均为&#xff1a; ka…

CSS基础知识04

文本溢出通常是指在限定的空间内不能容纳所输入的文字&#xff0c;导致文字超出了容器的边界 一、文本溢出 1.1.css属性处理 所用到的属性 属性属性值overflowvisible&#xff1a;默认值&#xff0c;内容不会被修剪&#xff0c;会呈现在元素框之外。hidden&#xff1a;内容会…

【从零开始的LeetCode-算法】3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#xff0c;也就是将格子里的值从 0 变成 1 &#xff0c;或者从 1 变成 0 。 请你返回 …

浅层神经网络

浅层神经网络 浅层神经网络通常指包含一个隐藏层的神经网络。这个网络由输入层、隐藏层和输出层构成&#xff1a; 输入层&#xff1a;输入层负责接收网络的输入特征&#xff0c;通常表示为列向量 x T [ x 1 , x 2 , x 3 ] x^T [x_1, x_2, x_3] xT[x1​,x2​,x3​]&#xff…

web与网络编程

使用HTTP协议访问Web 通过发送请求获取服务器资源的Web浏览器等&#xff0c;被成为客户端(client)。 Web使用一种名为HTTP(超文本传输协议)的协议作为规范&#xff0c;完成从客户端到服务器端等一系列运作流程。 可以说&#xff0c;Web时建立在HTTP协议上通信的。 网络基础T…

HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析

机电液一体化与先进机器人控制技术国际会议&#xff08;HARCT 2025&#xff09;将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果&#xff0c;邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…

Vue3中一级导航栏的吸顶导航交互以及Pinia优化重复请求

一、前言 在日常的网站中&#xff0c;当鼠标滚轮往页面的底部滑动时&#xff0c;会出现顶部导航栏的隐藏&#xff0c;而出现新的导航栏显示&#xff0c;这就是一级导航栏的吸顶导航交互。本文当实现改模块功能的实现。 二、示例图 参考黑马程序员小兔仙儿PC端项目&#xff1a;…