【javaEE】网络原理(传输层Part2)

news2024/9/26 1:20:23

努力经营当下,直至未来明朗!

文章目录

  • 前言
  • TCP相关机制
    • 4. 【滑动窗口】
    • 5.【流量控制】
    • 6.【拥塞控制】
  • 总结


前言

一个人最大的痛苦来源于对自己无能的愤怒!

Hi,这里是不想秃头的宝贝儿!
秃头
本文主要内容是 传输层中TCP相关机制的补充:滑动窗口、流量控制、拥塞控制。
也很重要!(重点内容会重点标出)


TCP相关机制

4. 【滑动窗口】

  1. TCP能够保证可靠传输,但是失去了效率,那么如何尽可能提高传输效率呢?(但是注意:再怎么提高都是无法超过UDP效率的)
    滑动窗口:提高TCP传输效率的有效机制

  2. 没有引入滑动窗口,只是一个朴素的确认应答
    朴素
    主机A大量的时间都消耗在了等待ACK上,则提升效率的方法就是不等ACK了,直接往下继续发送(但其实不是完全不等,而是每次发送一波消息,然后等一波ACK,然后再发送一波消息)

  3. 把不需要等待就可以直接发送的数据的量,称为“窗口大小

  4. 滑动窗口下:如图批量发送3条数据,批量接收3条ACK,此处的窗口大小是300(以字节为单位)
    滑动窗口

注意:主机A是收到了一个ACK就继续发一条数据,而不是等所有的ACK都到了才统一发下一组。

  1. 滑动窗口示例(具体详细可参考:滑动窗口)
    滑动

  2. TCP传输效率与窗口大小有关:窗口越大,效率越高。(窗口无限大则TCP效率就与UDP一样,但是这样的话TCP的可靠性就无法保证了)

  3. 如果出现丢包/乱序怎么办?
    ① 传输的数据报丢了:应答ACK会一直索要未接收到的部分,几次之后主机A就会对丢失的数据报进行重传,没丢失的包不进行重传(没有任何重复的工作),而此时B补齐了空缺,接收到了所有已经传输过来的数据。–》快速重传(搭配滑动窗口机制的超时重传)
    ② 应答ACK丢了:没有任何影响,因为后面ACK到达就说明前面的所有都已经到达了。

但是不是说有了快速重传,超时重传就没有意义了:
① 当传输的数据很多的时候进行批量传输,此时就遵守快速重传方式;
② 但是如果传输的数据很少(如只有一条),那么此时仍然是按照超时重传的方式来进行的。

丢包

  1. 窗口越大发送速度其实就会越快,但是窗口能够无限大吗?
    发送速度如果过快,而接收方的处理速度跟不上了,就会导致接收方丢弃一部分数据,TCP是要保证可靠性的,所以TCP还得重传这些数据,这就会让本就不富裕的接收方雪上加霜。
    此时就需要其他机制来对发送方的发送速度作出限制
    【流量控制机制】

5.【流量控制】

  1. 在滑动窗口基础上对发送速率作出限制的机制,其实就是在限制发送方的窗口不要太大,尽量保持在一个合适的大小。
  2. 那么发送方的窗口大小多大才是合适的呢?
    接收方对发送方进行反制,接收方根据自己的接收能力来反向影响发送方接下来的发送速率。
  3. 那么接收方的接收速率如何进行量化呢?
    接收方使用内核的接收缓冲区的剩余空间大小来作为发送方发送速率(窗口大小)的参考数值!
    (此处补充:UDP是只有接收缓冲区,没有发送缓冲区的)
  4. 接收方B在收到发送方A的数据之后就会在ACK应答报文中把当前缓冲区剩余空间大小的值反馈给发送方,存储在TCP的16位窗口大小中。这个字段只在ACK为1的时候有效,否则该字段无效。

16位能表示的最大数就是64Kb,那么是否意味着滑动窗口最大就是64kb呢?
其实不是,在TCP报头的“选项”中会有一个特殊的值叫“窗口大小的扩展因子”,是可以通过扩展因子来表示更大的滑动窗口大小值的。

  1. 流量控制过程
    ① 窗口大小是动态变化的,每次ACK之后都会调整窗口大小
    ② 如果此时窗口大小变为0,也就是告诉发送方先别发送,但是如果主机A不进行数据发送,则B没法应答ACK,如果B不应答ACK,则后续缓冲区里有空闲空间时如何告知主机A呢?
    主机A会发送一个探测报文,该报文长度只有1,不携带任何业务数据(不带载荷),只是探测一下窗口大小应该为多少,也就是为了B能够返回ACK来告知A其窗口大小。(探测报文是周期性发送,不是立即发送)

  2. 流量控制:是通过接收方的处理能力来衡量发送方的速率的。

  3. 以上所述只是考虑了接收方的处理速率,但是我们还是需要考虑中间这些转发节点的情况(类似于木桶原理)。接收方的速率容易量化,但是中间节点的情况难以量化。所以,如何考虑衡量中间节点的情况呢?

思路:把中间的这些设备视为一个“整体”,通过“做实验”的方式来验证发送速度多少合适,即从小的开始发送,进行“提速丢包则降速,降速畅通则提速”的循环,以达到“动态平衡”。(网络环境不是一成不变的)
也就是【拥塞控制】来衡量中间转发结点的处理速率。

  1. 拥塞控制和流量控制都是在控制发送方的窗口大小,实际最后决定窗口大小是【谁小听谁的】!(也就是速度慢的决定)

6.【拥塞控制】

  1. TCP实现拥塞控制的具体方式是啥?
    ① TCP引入慢启动机制,先发少量的数据(因为发送之初,网络情况未知)
    ② 如果不丢包,就需要放大拥塞窗口(拥塞控制下的那个窗口的大小),开始的时候先指数增长(翻倍)达到阈值之后线性增长
    【指数增长可以在短时间内摸清楚网络承载的底线,而为了防止翻倍太快一下超过上限就设置一个阈值,达到阈值之后就不再指数增长,转为线性增长】
    (初始阈值一般是系统配置的。)
    拥塞控制

当速率达到上限就会出现网络拥堵,从而出现丢包;此时窗口大小一下子会回到最初的值,重复刚才的指数增长+线性增长,并且要动态调整阈值,阈值调整为刚才丢包的窗口的一半

  1. TCP后来也对拥塞控制做了一些改进,不是直接回归到初始值,而是回归到一个比较折中的值,具体该值的决定策略不再研究。

注:TCP相关的机制还没有介绍完,详见下篇博客


总结

  1. 滑动窗口:尽量提高传输效率
  2. 流量控制:通过接收方来进行反制
  3. 拥塞控制:中间的转发结点【注意图】

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

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

相关文章

什么是SRM,SRM有什么作用,SRM主要用途是什么?

简道云SRM管理应用一、什么是SRM? SRM是 Supplier Relationship Management 的英文缩写,即供应商关系管理。 SRM的最基本内容包括供应商分类选择、战略关系发展、供应商谈判和供应商绩效评价四个方面。 SRM是用来改善企业与供应商的关系,它是一种致力…

了解一下OAuth2.0到底是什么,有图解有案例

理论 OAuth是一个关于授权(authorization)的开放网络标准,用来授权第三方应用获取用户数据,是目前最流行的授权机制,它当前的版本是2.0。 应用场景 假如你正在“网站A”上冲浪,看到一篇帖子表示非常喜欢…

Python交互Mysql数据库基本操作

安装pymysql第三方包 1. 安装pymysql 2. 查看安装情况 ​ 3. 卸载pymysq ​ Pymysql的使用 1. 导包 ​ 2. 创建和mysql服务端的连接对象 ​ 3. 获取游标对象 ​ 4. 执行sql语句 ​ 5. 获取查询结果集 ​ 6. 将增加和修改操作提交到数据库 7. 回滚数据 8. 关闭游标对象 …

【网页设计】期末大作业html+css(体育网站--足球 6页 )

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML:结构 CSS&…

mTD-SCDMA与TD-LTE双网络垂直切换matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 TD-SCDMA与TD-LTE共覆盖的范围内覆盖半径1000m; TD-SCDMA中心坐标(0,0),覆盖半径1000m; 两个TD-LTE基站的中心坐标为(150,0…

刚毕业被骗去了小公司,天天“取数做表”,后悔没早点用上这工具

经常看到年轻人提问“究竟是去大公司打杂好,还是去小公司磨练好?”这个问题我年轻的时候也想过,当时觉得去大公司只能当螺丝钉,做按部就班的工作,于是毅然决然放弃了大厂offer去了一家IT部门只有3个人的公司。当时我在…

通过电子文档管理改善患者体验和办公效率

通过电子文档管理改善患者体验和办公效率 在不远的过去,手动输入医疗信息和物理归档系统是所有医疗办公室的标准操作程序。医生和工作人员别无选择,只能写下信息,然后手动将数据输入办公系统。 当要求所有从业者使用电子病历的授权作为“患…

亚马逊买家号造成被封的原因有哪些?

现在很多人反馈说亚马逊买家号太容易被封了,去下单时都不知道什么情况都就砍单,账号登录不上了,而关于亚马逊买家号被封这个问题,不是一两个因素就能决定的,那么亚马逊买家号造成被封的原因有哪些? 1、账号…

虚拟机三种网络模式

基本知识 ipconfig查看信息。 网关(Gateway)又称网间连接器、协议转换器。是你连接到的上层节点的地址。 ip地址是你本身的地址(如果是路由器分配的 那么是路由器所构建的内网地址) 网卡:需要网卡才能连接其他设备 是设备端的 交换机&#x…

[附源码]SSM计算机毕业设计教师业绩考核系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mybatis-Plus条件构造器学习and方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Mybatis-Plus条件构造器学习and方法一、代码1.Controller2、Service3、效果一、代码 1.Controller GetMapping("/queryProductList1")public List<ProductDTO&…

panads基础入门

目录 一、查看数据 二、选择数据 1、选择单列 2、 用 [ ] 切片行&#xff1a; 3、标签选择 1、选择某列的某一行&#xff0c;如下是 A 列 第 51 行的值 2、B列与A列的数据相互替换 3、用标签选取多列 4、用标签切片&#xff0c;包含行与列结束点&#xff1a; 5、提取标…

传奇列表格式怎么上传以及公告小窗口皮肤如何设置

相信各位新手小白GM在架设传奇配置登录器的时候都会遇到列表格式的问题&#xff0c;接下来我来教各位登录器的这个列表格式该怎么上传&#xff0c;列表上传地址&#xff1a;传奇常用引擎免费单机列表格式-传奇入门GOM-GEE引擎教学 我们版本是什么引擎我们就用什么引擎的列表格式…

基于Zookeeper实现高可用架构

Zookeeper高可用相关特性 Zookeeper介绍 ZooKeeper is a distributed, open-source coordination service for distributed applications It exposes a simple set of primitives that distributed applications can build upon to implement higher level services for sync…

分布式协调系统ZooKeeper实践与原理剖析

基础的一些知识&#xff0c;高阶知识后续看看补充 第一章 ZooKeeper概述 1.1 介绍 What is ZooKeeper&#xff1f; Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination ZooKeeper is…

EasyX图形库的下载安装与Dev-C++配置

1.下载Dev-Cpp 6.3版本&#xff08;红色logo&#xff09; 下载地址&#xff1a;Download Dev-C for Windows 10/8/7 from SourceForge.netA fast, portable, simple, and free C/C IDEhttps://sourceforge.net/projects/embarcadero-devcpp/files/v6.3/Embarcadero_Dev-Cpp_6.3…

详细介绍百度ERNIE 2.0:A Continual Pre-Training Framework for Language Understanding

阅读更多&#xff1a;详细介绍百度ERNIE&#xff1a;Enhanced Representation through Knowledge Integration 文章目录ERNIE 2.0简介相关工作语言表征的无监督学习持续学习ERNIE2.0 框架持续的预训练预训练任务的构建持续的多任务学习针对应用任务的微调ERNIE 2.0模型模型结构…

【Java八股文总结】之消息队列

文章目录消息队列一、消息队列常见面试题1、什么是消息队列&#xff1f;2、为什么要用消息队列&#xff1f;3、使用消息队列存在的问题4、JMS vs AMQP&#xff08;一&#xff09;JMSQ&#xff1a;什么是JMS&#xff1f;Q&#xff1a;JMS两种消息模型Q&#xff1a;JMS五种不同消…

Lucid EDI需求分析及项目注意事项

Lucid Motors路西德汽车&#xff0c;是一家美国电动汽车制造商&#xff0c;总部位于美国加利福尼亚州纽瓦克。除了电动汽车&#xff0c;Lucid还有储能技术和代工生产等业务。公司成立于2007年。 截至2021年9月&#xff0c;其第一辆汽车Lucid Air已投入生产&#xff0c;于2021年…

使用arduino编写mqtt客户端连接emqx服务器

摘要&#xff1a;mqtt客户端可以有很多种&#xff0c;本文介绍一种使用arduino d1&#xff08;esp8266&#xff09;制作的客户端&#xff0c;连接emqx服务器的方法。 首先需要配置开发环境&#xff0c;配置方法可以参考文章 (1条消息) 使用arduino开发esp8266和esp32时首选项设…