《计算机网络——自顶向下方法》精炼——3.5.5-3.6.1

news2024/12/27 10:04:32

学习是劳动,是充满思想的劳动。——乌申斯基

文章目录

  • TCP流量控制
  • TCP连接管理
    • 建立TCP连接
    • 拆除TCP连接
    • TCP状态的转换
  • TCP拥塞控制
    • 情况1:两个发送方,一个无限缓存的路由器
    • 情况2:两台主机,一台具有有限缓存的路由器
    • 情况3:四个发送方,有限缓存的多台路由器

TCP流量控制

在主机B接收到来自主机A的报文段后,它将数据放入它的接收缓存中。但接收缓存是有限的,如果接收缓存满了之后仍有报文段到达,则会发生报文段丢失。为了解决这个问题,我们需要TCP流量控制机制来协调主机A发送数据的速率和主机B应用层进程读取数据的速率。(注意,流量控制和拥塞控制相似但完全不同,流量控制解决的是到达之后主机中的事情,而拥塞控制解决的是到达之前网络核心中的事情)
与拥塞控制机制类似,流量控制机制也维护一个称作接收窗口的变量。:请添加图片描述
其中RcvBuffer是接收缓存的字节量,rwnd是还空闲的接收缓存,即接收窗口的字节量。为了计算rwnd,我们维护两个红线所代表的字节的编号,命名为LastByteRead和LastByteRcvd:

  • LastByteRead(右边红线):主机B应用层进程从缓存读出的最后一个字节的编号。
  • LastByteRcvd(左边红线):放入主机B接收缓存的最后一个字节的编号。

因此,计算rwnd的公式为:
在这里插入图片描述
有了rwnd之后,主机B在报文中将这个信息告知主机A。对于主机A来说,它维护两个变量LastByteSent和LastByteAcked,这两个变量的差就是主机A发送到连接中但还没确认的数据量,也就是在主机A视角中,这些数据是在网络中进行传输,还没有放入缓存的。因此,主机A需要保证:
在这里插入图片描述
最后,考虑当rwnd=0的情况。此时主机A不会向主机B发送报文,但如果主机B也不向主机A发送报文,那么即使rwnd已经被开辟出来,主机A也不会知道。因此,在rwnd=0时,主机A继续向主机B发送只有一个字节的报文段以得到来自主机B的确认报文,这些确认报文中含有关于rwnd的更新,最后,当主机A发现确认报文中的rwnd值非0时,停止发送一字节报文段,继续发送在它发送缓存中的数据。
不同于TCP,UDP不提供流量控制服务。这意味着如果一个进程的套接字的接收缓存已满,有新数据再到达时这个数据将会丢失。

TCP连接管理

本节中考虑如何建立和拆除一个TCP连接。

建立TCP连接

在这里插入图片描述
TCP连接建立的过程称为“三次握手”。

  • 客户TCP向服务器TCP发送一个特殊报文段,这个报文段中没有应用层数据,它的SYN标志字段设为1,因此也被称为SYN报文段。在序号字段,它选择一个随机序号client_isn并发送给服务器作为初始序号。综合这些信息,客户在第一次握手中告诉服务器:我要建立一个TCP连接,client_isn是我的初始序号。
  • 服务器TCP收到来自客户TCP的SYN报文后,也向客户发送一个SYN报文,其中确认号字段设为client_isn+1,表示已经成功确认收到带有初始序号的报文;在序号字段,它也选择一个随机序号server_isn作为初始序号。在这份作为第二次握手的报文中,服务器告诉客户:我收到了你的第一次握手报文,server_isn是我的初始序号。 这份报文也被称作SYNACK报文段。
  • 在前两次握手中,实际上已经建立TCP连接。第三次握手实际上也可以算作正式传输数据的第一个报文,但由于它的确认号字段设为server_isn+1,因此这个报文也可以作为对第二次握手报文的确认,我们将它也纳入握手过程,构成“三次握手”。

拆除TCP连接

在这里插入图片描述
TCP连接拆除的过程被称为“四次挥手”。注意,TCP连接是全双工连接,因此也要拆除两次。

  • 客户TCP向服务器TCP发送一个特殊的报文段,其中FIN标志字段设为1。在这个报文段中,客户告诉服务器:我要进行客户->服务器方向TCP连接的拆除。
  • 服务器TCP向客户TCP发送确认报文。
  • 服务器TCP重复客户TCP的过程,发送特殊报文段并接收响应报文,拆除服务器->客户方向连接的拆除。

TCP状态的转换

在连接和拆除过程中,客户和服务器双方的TCP状态都会改变。

  1. 客户TCP
    在这里插入图片描述
    在这里要解释的就是TIME_WAIT状态。在这个状态下,客户TCP等待一段时间(一般是30秒),如果最后的确认报文发生丢包或其他问题,客户TCP进行重传。
  2. 服务器TCP
    在这里插入图片描述
    这个有限状态机很简单,不多赘述。

TCP拥塞控制

我们将从理想情况开始,逐渐构造出TCP协议中进行拥塞控制的机制。

情况1:两个发送方,一个无限缓存的路由器

为了简化问题,在这种情况下,假定我们的协议只进行发送数据,不进行任何其他功能,且每一个报文段都不会丢包;两台主机发送数据的速率也假定相等:
在这里插入图片描述
注意数据进入路由器缓存和被推出路由器缓存的速率小于主机发送数据的速率。设链路的传输速率为R,且两台主机共享一条链路,我们可以画出如下两个图:
在这里插入图片描述
第一个图是主机吞吐量和主机发送速率之间的关系。小于R/2时,吞吐量和发送速率相等,大于R/2时,吞吐量受限于链路速率;第二张图是时延与主机发送速率之间的关系。由于数据在路由器缓存中会排队造成时延,因此时延量随主机发送速率的增加而快速增长,在大于R/2时,由于路由器缓存中的数据只会不断增加,因此时延可以无限大。因此,当分组的到达速率接近链路容量时,分组经历巨大的排队时延。

情况2:两台主机,一台具有有限缓存的路由器

在这里插入图片描述
在路由器缓存有限的情况下,分组有可能会被路由器丢弃,因此协议会重传数据。那么发送方发送的数据中包括两部分:初始数据和重传数据。设λin是运输层发送数据的速率(包括初始数据和重传数据),有时它也被称作网络载荷
不难看出,在这种情况下,网络性能完全取决于重传数据的数量。下面是发送速率与主机吞吐量(即主机接收之前未接收过的数据)之间的关系:

在这里插入图片描述

  1. 当无需重传时,性能与情况1相同,用a)表示。
  2. 发送方确定一个分组丢失时才重传(比如将超时时间设置为1年)。在实践中确定吞吐量与发送速率的关系约如图b),即初始数据:重传数据=2:1
  3. 发送方在超时机制下重传。此时有可能发生分组未丢失但超时的情况,此时如果我们假定每一个分组都被发送两次,则画出的图如c)。

情况3:四个发送方,有限缓存的多台路由器

请添加图片描述
在图中,我们建立了从A到C的双工连接(分别表示为A-C,C-A)和从B到D的双工连接。

  1. 当发送速率很小时,数据都正常发送。
  2. 当发送速率很大时,我们选择一条链路来看。注意A-C连接和B-D连接共享的R2路由器所在线路,如果A-C连接和B-D连接发送速率都很大,会导致它们在同一条链路上竞争流量,导致大量分组被丢弃,分组的重传又会恶化这种情况。

在实践中,我们可以分析出下图来表示吞吐量与发送速率的关系:
请添加图片描述
注意,当发送速率接近R/2时,可以参考情况2的c),吞吐量不能到达R/2。
另外,如果A-C连接发送的分组在R2路由器被丢弃了,那么它所使用的R1路由器所在链路的资源也会被浪费,由此我们可以看到,当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组所用的传输容量都被浪费掉了。
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

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

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

相关文章

【源码解析】EasyExcel导入导出源码解析

EasyExcel介绍 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都…

XPCIE1032 — 高速高精,超快交互速率的PCIe EtherCAT实时运动控制卡

产品导读 XPCIE1032是一款基于PCI Express的EtherCAT总线运动控制卡,可选4-16轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。 XPCIE1032集成了强大的运动控制功能,结合MotionRT7运动控制实时软核…

PyQt5桌面应用开发(17):中文书评+类结构+QWebEngineView

本文目录 PyQt5桌面应用系列PyQt5学习PyQt5类结构和帮助速查实现与解释最终界面和完整源代码界面完整的代码 总结 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件循环 PyQt5桌…

【中危】Apache Ranger 2.3.0 存在远程代码执行漏洞

漏洞描述 Apache Ranger 是一款用于在 Hadoop 平台及其他平台启用、监控和管理全面的数据安全性的开源框架。Apache Ranger 表达式策略是一种动态访问控制策略,通过自定义表达式来指定更细粒度的访问控制条件。 Apache Ranger 受影响版本中具有管理员权限或策略管…

【微博-自定义Cell-创建子控件 Objective-C语言】

一、自定义Cell 1.既然我们要自定义Cell,这个自定义Cell,属于MVC哪个部分, 这个Cell类,属于MVC哪个部分, Model、Controller、还是View, View吧, 所以说,应该在这里去新建一个类, 在这里去新建一个类,右键,New File,

SpringBoot中使用枚举类、switch、常量类(声明并初始化map)实现类策略者模式,接口返回常量数据

场景 SpringBoot中策略模式工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else: SpringBoot中策略模式工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else_霸道流氓气质的博客-CSDN博客 SpringBootVa…

Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版

首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法, 1:将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表,接着用数据库匹配 2:将两种表内容,复制粘贴到一起,各自分别保存成一张表&#xf…

伦茨科技带你了解蓝牙App开发的流程

随着移动互联网的快速发展,给我们的生活带来了越来越多的便利,蓝牙App的开发也越来越普及。那么,简单来说,蓝牙App软件的开发就是在手机上为蓝牙物理设备提供具有相关功能的App软件终端,让蓝牙设备更方便的为用户提供服…

appsync unified怎么安装

一、什么是AppSync Unified? AppSync Unified是一款iOS设备上的越狱插件,它可以帮助用户安装和运行未经苹果审核的应用程序和插件。AppSync Unified可以支持iOS 11-14系统,并可以在iPhone和iPad上使用。它的功能主要是允许用户安装和运行不经…

电脑正常开机后几分钟就黑屏一直循环怎么办?

电脑正常开机后几分钟就黑屏一直循环怎么办?有用户在使用电脑的时候,正常去进行电脑的开机,但是开机之后,却发现屏幕变成了黑屏,而且重新启动电脑之后,依然是会出现这样的问题,那么这个情况怎么…

mmdetection3d框架安装与Demo模型运行--基于Ubuntu18.04+Cuda10.1

1.NVIDIA Driver和Cuda安装 在Ubuntu18.04机器上安装好NVIDIA Driver4.18和CUDA10.1,版本号分别为4.18和10.1 查看NVIDIA Driver版本号:nvidia-smi 查看CUDA版本号:nvcc -V 2.安装MiniConda,并创建和管理虚拟环境 2.1 安装Min…

八、数据仓库详细介绍(监控告警)

1. 前言 在前边的章节,我们设计完存储模型,开发了 ETL 任务,并且配置好流程依赖,然后上调度系统,至此我们的数据仓库基本搭建完成,而且所有流程任务都可以自动化运转了。 随着公司上线的数据处理任务越来越…

Linux - 第17节 - 网络基础(应用层三)

1.HTTPS协议 1.1.HTTPS简介 HTTPS也是⼀个应⽤层协议,是在HTTP协议的基础上引⼊了⼀个加密层。 HTTP协议内容都是按照文本的方式明文传输的,明文传输是不安全的,所以现在主流的解决 方式是在http所在的应用层和tcp所在的传输层之间加一层SSL…

Windows操作系统的文件组织结构和计算方法

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows操作系统的文件组织结构和计算方法。 这是一块非常实用的知识,感谢大家来看这个帖子。 Windows组织结构就是文件的组织形式,其中: 1.Windows逻辑结构…

HTTPS的加密流程

HTTPS的加密流程 🔎加密🔎HTTPS的基本工作过程使用对称加密引入非对称加密黑客的反制(中间人攻击)一山更比一山高(引入证书) 🔎结尾 🔎加密 加密 对称加密非对称加密 对称加密🍭 只需要一个密钥(Key) 明文 Key 密…

【Java系列】深入解析枚举类型

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题&a…

行为型设计模式01-策略模式

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 策略模式 问题引入:实现一个商场收银软件,简单的实现就是单价和数量的乘积。 1、商场收银软件 下面就来看…

掌握RDD分区

零、本讲学习目标 学会如何指定分区数量会定义与使用自定义分区器 一、RRD分区 (一)RDD分区概念 RDD是一个大的数据集合,该集合被划分成多个子集合分布到了不同的节点上,而每一个子集合就称为分区(Partition&#…

3.5 RDD持久化机制

一、RDD持久化 1、不采用持久化操作 查看要操作的HDFS文件 以集群模式启动Spark Shell 按照图示进行操作,得RDD4和RDD5 查看RDD4内容,会从RDD1到RDD2到RDD3到RDD4跑一趟 显示RDD5内容,也会从RDD1到RDD2到RDD3到RDD5跑一趟 2、采用持久化…

python解析html数据,获取到的链接是以/或 ./ 或 ../ 开头的相对链接,不是以http开头的,需要补全

一、实现的目标 在使用爬虫获取网页html数据时,解析到的链接是/或./ 开头的相对链接,不是以http开头的链接,如:/picture/0/cca65350643c441e80d390ded3975db0.png 。此时需要完成对该链接的补全,以得到正确的链接。此外,我们需要将解析到的html数据保存到起来,将来需要展…