TCP/IP五层协议栈(2)

news2024/11/27 20:30:22

1.传输层协议(TCP传输的机制补充)

1.1.滑动窗口

滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率.

由于TCP是得保证可靠传输的,所以每一次数据发送时都需要等待对方的ACK.大部分时间都用在等ACK上,而确认应答是可靠传输的主要机制又不能不等.所以有了新的机制就是滑动窗口.


  • 滑动窗口就是首次发送多组数据,发送过程不进行等待.
    • 窗口大小:一次批量发送N份数据.N 就是窗口大小
  • 发送完成后统一等待多组数据的ACK(将多份ACK的等待时间压缩成一份等待时间)
  • 等待到第一份数据的ACK后,滑动窗口开始向后移动,发送N+1的数据(ACK等待范围变为 2–N+1),以此类推.

在这里插入图片描述

1.1.1.滑动窗口的丢包问题

  1. ACK丢包:
    • 要了解ACK丢包后的机制就要先了解滑动窗口中确认序号的含义
      • 确认序号中的内容表示当前序号之前的数据全都确认收到了.比如收到了N的ACK 说明 [0,N) 的数据都已经收到了,就是N之前的数据已经收到了)
    • 由于确认序号的特殊原理,所以当ACK丢包时,只要后面数据的ACK能到达.前面数据的ACK也就无关轻重了
  2. 数据丢包:当某一段报文段丢失之后,发送端会一直收到相同的ACK(比如 N丢包了,当收到N往后的数据,就会返回一个N的ACK),就像是在提醒发送端 “我想要的是 N” 一样;
    • 如果发送端主机连续多次(一般为三次)收到了相同的应答,就会将对应的数据重新发送;
    • 在接受到 N的数据 之前,其他接收到的数据会放到了接收端操作系统内核的接收缓冲区中组织.
    • 接收端收到了 N的数据 之后,会返回新的ACK.返回的新的ACK就是已经接收到连续的数据的最末端ACK.
      • (比如:已经 97的数据丢失 ,接收到 98,99,100 的时候会不停返回 97 .然后发送端就会重新发送97的数据. 接收到97的数据之后,就会发送 101的ACK ).

1.2.流量控制

流量控制是滑动窗口的延伸,目的是为了保证可靠性.

滑动窗口中,窗口越大,传输速率越高.但是如果发送方一味的发送,不考虑接收方的话.会导致接收方处理不过来,接收方就会把很多包丢掉,之后发送方又要重新重传(效率不增反减).

  • 流量控制:TCP根据接收端的处理能力,来决定发送端的发送速度.使发送和接收达到一种动态平衡.
    • 接收缓冲区剩余空间比较大时,就认为接收端的处理能力比较强.就可以让A发快点
    • 接收缓冲区剩余空间比较小时,就认为接收端的处理能力比较弱.就可以让A发慢点
  • 窗口大小:接收方通过ACK报文中的窗口大小来告知发送方接收缓冲区的剩余空间.发送方根据这个数据灵活调整.
    • 窗口大小虽然只有16位,但是实际上的窗口大小可以更大.
      • 选项中有一项 窗口扩大因子M ,表示实际窗口大小是窗口字段的值左移M位.
    • 当窗口大小为0时,就意味着发送方不再发送实际数据.
      • 但是会时不时发送探测报文.为了触发ACK,从而得知当前的窗口大小.
    • 不止发送方会询问,同时接收方也会在窗口更新的时候,向发送方发送一个窗口更新通知.

1.3.拥塞控制

拥塞控制也是滑动窗口的延伸,目的是限制滑动窗口发送的速率.

发送方的发送速度不止取决于接收方的处理能力,也取决于中间链路的处理能力.而最终窗口大小由这两个共同决定(取其中的较小值).

  • 流量控制衡量的是接收方的处理能力, 拥塞控制衡量的是整条链路之间的处理能力.(整条线路的拥堵情况)
  • 由于很难对中间链路各个节点的处理能力衡量, 所以采用一种 “实验” 的方式,逐渐调整发送速度,找到一个比较合适的值(范围).
    • 发送方从一个比较小的窗口开始发送数据.如果数据很流畅的就到达了,就逐渐加大窗口大小.
    • 加大到一定程度之后,出现了丢包(丢包意味着通信链路出现拥堵了),再适当调整窗口大小.
    • 反复实验 ,逐渐找到一个合适的范围.
  • 拥塞窗口就在这个范围中不断变化,达到"动态平衡".

1.4.延迟应答

延时应答的目的是提升传输效率.

如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小.

  • 采取策略:不是立即回答,而是稍微晚一些回答.
  • 在这个等待的时间里,就可以处理一些数据.从而应答中返回更大的窗口.

1.5.捎带应答

捎带应答是延时应答的延伸.

由于有了延时应答, 所以可以将ACK和数据打包在一起发送. 所以捎带应答可以说是给ACK搭顺风车.

2.粘包问题

只要是面向字节流的协议就会有粘包问题.

  • 首先要明确,粘包问题中的 “包” 是指的 应用层的数据包.
  • 因为在TCP的协议头中, 没有如同UDP一样的 “报文长度” 这样的字段, 但是有一个序号这样的字段.
    • 站在传输层的角度, TCP是一个一个报文过来的. 就可以按照序号排好序放在缓冲区中.
    • 但是站在应用层的角度, 看到的就只是一串连续的字节数据.
      • 那么应用程序看到了这么一连串的字节数据, 就不知道数据是从哪个部分开始到哪个部分结束.
  • 这样就产生了粘包问题

粘包问题的解决方案: 就是在应用层协议里面添加包的边界.或者显示包的长度.

  • 如果基于一些库和框架来完成网络通信,一般粘包问题已经被处理了.
  • 但是如果是自己实现,就需要注意粘包问题.

3.TCP的异常处理

  • 进程终止
    • 进程终止会释放文件描述符, 仍然可以发送FIN. 和正常关闭没有什么区别.
  • 机器重启
    • 机器重启和进程终止的情况相同.
  • 机器掉电/网线断开
    • 如果是接收方断开.就会不再发送ACK,接收方进入超时重传逻辑,多次重传后重新建立连接,依然失败,主动放弃连接.
    • 如果发送方断开.接收方只能被动的等,但接收方也不会傻傻的等,会周期性的触发探测报文(心跳包:为了触发ACK).通过探测报文发现A不再返回ACK了,就放弃连接.

4.TCP vs UDP

  1. 对于可靠性有一定要求一般使用TCP(日常开发中的大多数情况都是基于TCP)
  2. 对于可靠性要求不高,对于效率要求更高的一般使用UDP(机房内部的主机之间的通信,分布式系统中)

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

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

相关文章

JavaScript -- 多种类型转换方法总结

文章目录类型转换1 转换为字符串2 转换为数值3 转换为布尔值4 总结类型转换 类型转换指将一种数据类型转换为其他类型 类型转换是根据当前值去创建另一个值,而不是将当前值直接进行转换 这里说到的转换都是显示类型转换,除此之外还有隐式类型转换 1 转…

MnTTS: 开源蒙古语语音合成数据集及其基线模型

本次分享内蒙古大学蒙古文信息处理重点实验室、蒙古文智能信息处理技术国家地方联合工程研究中心及语音理解与生成实验室 (S2LAB) (https://ttslr.github.io/index_S2Group.html)共同发布的开源蒙古语语音合成数据集及其基线模型。相关论文《MnTTS: An O…

BI业务用户商业分析新时代,如何把数据用透?

数字化转型进入实质性阶段,企业对于数据的需求也随之加深。然而,一些企业积累了大量数据,却难以深度释放数据价值。 近几年,作为数据应用的有力工具,BI商业智能分析平台同样进入了转折期,其发展趋势明显呈…

Nacos后台系统未授权添加管理员

一:什么是nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中…

爱奇艺:基于龙蜥与 Koordinator 在离线混部的实践解析 | 龙蜥技术

在 2022 云栖大会龙蜥峰会云原生专场上,来自爱奇艺的基础架构研究员赵慰分享了《基于龙蜥与 Koordinator 的在离线混部实践》技术演讲,以下为本次演讲内容: 一、爱奇艺离线业务混部背景 与众多互联网公司一样,爱奇艺常见的负载…

Go语言学习笔记-A Tour of Go 练习笔记-Images

Exercise: Images 练习题目: Remember the picture generator you wrote earlier? Lets write another one, but this time it will return an implementation of image.Image instead of a slice of data. Define your own Image type, implement the necessary methods, …

您的推特营销选对群控了吗

作为跨境电商从业者,我们都知道,如果平台检测到违规,最多的是多账号关联。平台怎么判定我们的账号是否关联呢?一个重要的依据是浏览器的指纹信息。 一、进行站外引流的困难有哪些: 国内用户在推广海外社交媒体时&…

【OpenCV-Python】教程:3-10 直方图(4)直方图反向投影

OpenCV Python 直方图 反向投影 【目标】 直方图反向投影calcBackProject 【原理】 用于图像分割和查找感兴趣目标。简单的说,会创建一个与输入图像同样大小的图像(单通道),每个像素对应像素属于目标的概率。更简单的说就是&am…

pdf文件丢失怎么办?别慌,详细介绍4种恢复方法

pdf文件丢失怎么找到?别慌,停止往电脑上写入新的内容,重要的事情说三遍!下面,我们将会向您详细介绍在pdf文件丢失后的多种方法,请继续阅读以获得更多帮助! 方法1.运用Windows搜索功能 很多时候…

运放参数-共模输入范围-运算放大器

运放共模输入范围 根据实际的应用我们会选择一个运算放大器(op amp),选型过程中工程师会考虑一些参数可例如:电源电压、增益带宽积、输入共模范围、转换速率和输入噪声电压等等。 在本篇文章中重点介绍了运放的输入共模范围的定…

Codeforces Round #724 (Div. 2) C. Diluc and Kaeya

翻译: 蒙德施塔特一个酒庄帝国的大亨,在任何方面都无可匹敌。法佛尼乌斯骑士团中具有异域外表的思想家。 这一次,兄弟俩要处理的是一块刻着他们名字的奇怪木头。这块木板可以表示为一串𝑛字符。每个字符不是“D”就是“K”。您希…

Activiti7工作流(一)

工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 案例: 出差费…

视频编解码 — 码控算法

目录 码控算法 码控算法的类型 具体操作过程如下 复杂度求解 帧组级 帧级 GOM级 码控算法 用算法来控制编码器输出码流的大小,码控就是为一帧图像选择一个合适的QP值的过程。 一帧图像的画面确定了之后,画面的复杂度和QP值几乎决定了编码之后的…

float32转float16

背景 当下做AI基本都用float16进行推理,目前用的比较多的还有bfloat16, 这里我们只讨论float16的这个数据类型。float16有个优点是大部分的GPU或者部分CPU支持float16的计算,速度快于float32, 此外显存或者内存也可以减少一半,基于这个特点&…

2022年12月1日最新的SqlServer安装教程

文章目录1、在线安装文件下载2、下载安装包3、下载安装SSMS1、在线安装文件下载 (1)进入官网地址,点击下载:SqlServer下载 (2)等待下载结束,大约几M (3)打开下载的.ex…

Spring Security基于jwt实现权限校验

一 引言 在基于springsecurity和jwt实现的单体项目token认证中我实现了基于jwt实现的认证,本文在此基础上继续实现权限认证 用户认证成功后携带jwt发起请求,请求被AuthenticationFilter拦截到,进行jwt的校验jwt校验成功后,调用JwtAuthenticationProvider从jwt中获得权限信息…

一个分布在多次Softmax后,会趋于相同

本文其实是我在知乎上无意中翻到的一条提问:softmax到底有哪些作用?,其中苏剑林大佬关于第四个问题的回复,给我产生了一些思考。为什么一个分布在多次Softmax之后,每个值会趋于相同?例如[1,100]在大约10次S…

[附源码]JAVA毕业设计高校心理咨询预约系统(系统+LW)

[附源码]JAVA毕业设计高校心理咨询预约系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

新建esp32的vscode工程的三种方式

普通的idf工程在vscode下直接打开的时候,会发现很多头文件都是报错的,一些函数/类型等的定义也无法找到,比较影响阅读: 因此在vscode上开发esp32的时候,最好为这个工程提供vscode的支持,以下是三种实现的…

商务部研究院信用所、启信宝联合发布《中国商务信用发展指数报告(2022)》

近期,商务部国际贸易经济合作研究院信用研究所与合合信息全资子公司上海生腾数据科技有限公司(简称“生腾数据”)联合发布了《中国商务信用发展指数报告(2022)》(简称《报告》)。为准确反映中国…