当前位置: 首页 > news >正文

【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法

ACK机制

  1. ACK机制是发送方与接收方的一个相互确认
  2. 客户端向服务端发送连接请求,此时服务端要回馈给客户端ACK,以表示服务端接到了客户端请求,这是第一和的第二次握手
  3. 客户端接收到服务端响应后,同样也要回馈服务端的响应,告知服务端我收到了你的回馈,我们可以进行传输数据了,此时客户端就会带着数据发送给服务端。、
  4. 以上就是ACK机制,只有当双方都确认了,才会进行数据发送

流量控制

  1. 流量控制是接收方发起的,即服务器端
  2. 服务器端通过win来告知客户端自己还剩多少流量来接受数据
  3. 比如服务端告知客户端我只有200个字段的流量了,则此时服务端会携带一个rwnd = 200的报文给客户端,这是客户端就知道了服务端能接收的流量,那么客户端发送的数据包就不会超过200字节

拥塞控制

  1. 拥塞控制是发送方发起的,即客户端,是一种自适应算法,利用多种机制,根据网络状况自动调整发送频率,以避免网络拥堵
  2. 慢启动:发送端会以一个较小的窗口值开始发送,每收到一个ACK后,下一次窗口值就会翻倍增加,知道窗口值达到最大值位置。如果过程中没有丢包,那就会加快发送的速度频率,如果丢包,就会降低发送速度
  3. 快速重传:当发送端发送的数据报文没有在规定时间内收到ACK回复,发送端会认为该数据报文丢失了,那客户端就会立刻重传
  4. 拥塞避免:当收到3个重复ACK,注意,这里是收到。发送端会认为网络拥塞,他会减少发送速率。并降低发送端发送的数据量,从而减少网络拥塞现象

重传机制

  1. 触发重传也有很多种方式
  2. 超时重传:超过等待时间依然没有收到ACK响应,则会重传, 一般来说超时时间(RTO) > 往返时间(RTT), 往返时间就是发送到服务端,再由服务端返回的两段时间相加
  3. 快速重传(数据驱动): TCP会给每个包编号seq, 第一个包编号就是随机数,接收方收到多个包后,方便组装还原,如果发生丢包,可以知道是哪一个包丢了。
  4. 比如服务端收到6号包,但没有收到14号包,ACK就会记录,期待收到14号包。过了一段时间,14号包还是没收到,但是收到了24号包,ACK里面编号不会变化,会一直期待收到14号包。所以就会不断的重试。当客户端收到了3个连续的ACK回复 或 超时了还没收到ACK,会认为14号包丢失,会重新发14号包,因为14号包已经记录在ACK编号里面了,所以客户端收到的ACK就会有期待14号包的信息,重传成功后,双方才会进行正常通信。
  5. 缺点:快速重传解决了时间超时问题,但存在重传的时候,究竟是重传丢失的那一个包,还是重传丢失包之后的所有包。因为丢失的包会导致后面的包不会记录在ACK中,所以此时客户端时不知道后面的包是否已经收到

TCP传输优化-Nagle算法,即流量控制算法

  1. TCP协议中,无论发送多少大小的数据,每次都会带上协议头
  2. 如果数据量太小,甚至小于协议头的数据量,并且请求频率极高,那么就会浪费资源,协议头的内容就会占很大资源,并且频率高,数据小,也会造成拥塞,并占用资源
  3. TCP默认开启了Nagle算法
  4. Nagle算法会将多个小包囤积 并 合并,然后一起发送,类似于kafka的buffer机制。
  5. Nagle算法只有当收到服务器响应的时候,才会发送第二个包,否则不会发送。当然也不会一直等,当长时间没收到服务器响应,超过了超时时间,则会立即发送,即使每收到服务器响应也会发送。或者数据长度达到了MSS大小时,即使没收到服务端响应,也会立即发送第二个数据包
  6. 缺点:实时性差,延迟很大,因为正常情况下只有收到服务器响应,才会发送第二个数据包,所以当实时性是强需求时,需要关闭Nagle算法
http://www.lryc.cn/news/153452.html

相关文章:

  • 智能电销机器人,主要体现的价值是什么
  • Win7系统电脑开机总出现硬盘自检的简单解决方法
  • 计网第四章(网络层)(五)
  • ios 手机浏览器,点击输入框页面会放大
  • 全局异常处理
  • 更健康舒适更科技的照明体验!SUKER书客护眼台灯 L1上手体验
  • Locked勒索病毒:最新变种.locked袭击了您的计算机?
  • 随机森林算法
  • 如何将国标规范用EndNote插入到英文期刊中,自定义文献插入指南
  • 重写 UGUI
  • 合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)
  • 代码随想录训练营第41天|343.整数拆分,96.不同的二叉搜索树
  • 高防服务器与云防产品都适用哪些情况
  • 【广州华锐互动】AR远程连接专家进行协同管理,解放双手让协同更便捷
  • PNG图片压缩原理
  • [ Linux Audio 篇 ] Linux Audio 子系统资料集锦
  • VR全景对行业发展有什么帮助?VR全景制作需要注意什么?
  • Unity网络请求队列
  • 【Spring Boot】使用XML配置文件实现数据库操作(一)
  • PMP中常用英文术语
  • 【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDERSPEED_BOUNDS_FINAL_DECIDER
  • score_inverse_problems运行环境,pycharm重新安装,jax,jaxlib的GPU版本安装-230831
  • VSC++: 奇怪的风吹
  • 被动操作系统指纹识别的强大功能可实现准确的物联网设备识别
  • QT/C++获取电脑系统,主板型号,CPU型号,硬盘型号,内存大小等相关信息(二)通过Windows Server (WMI)查询
  • 自建音乐服务器Navidrome之一
  • ACL 访问控制 过滤数据 维护网络安全(第七课)
  • 3D视觉测量:面对面的对称度 点对(附源码)
  • 无涯教程-JavaScript - RANK函数
  • 蓝牙发展现状