深入理解网络传输协议——差错控制

2024-06-20 04:04

本文主要是介绍深入理解网络传输协议——差错控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 差错控制

差错控制(error control)包括对损坏、丢失以及重复的数据报进行检测的机制。差错控制还包括在检测到错误之后的纠错机制。因特网的网络层不提供真正意义上的差错控制机制。

从表面上看网络层好像是不需要差错控制的,因为每个数据报在到达终点之前都要穿过多个网络,而控制这些网络(局域网或广域网)行为的数据链路层已经使用了差错控制机制。换言之,既然在数据链路层已经实施了逐跳的差错控制,为什么网络层还需要差错控制呢?

虽然逐跳的差错控制在一定程度上能够起到保护数据报的作用,但是它的保护还不够彻底。下图描绘了在数据报途经的某些地方出现的一些差错没有能够检测出来。在路由器处理数据报时出现的差错,数据链路层是无法检测出来的。
在这里插入图片描述

网络层的设计者们希望让这一层的操作既简单又迅速。他们认为如果确实需要更为严格的差错检测,也可以交给调用了网络层服务的上层协议来完成。网络层之所以忽略差错检测的另一个理由与分片有关。由于数据很可能在某些路由器上被分片,因而使部分网络层的数据可能会被改变。如果我们要使用差错控制,就必须在每个路由器上检测是否有分片。这会使得网络层上的差错检测变得非常低效。

不过,网络层的设计者还是在数据报上增加了一个检验和字段,它可以控制在首部中出现的任何损坏,而不是针对整个数据报的。这个检验和可以在两跳之间或从一端到另一端之间防止出现在数据报首部中的任何变动或损坏。

例如,它可以防止因目的地址被损坏而将数据报交付到了一个错误的终点。但是,因为在每个路由器上这个首部都可能会有一些变化,所以在源点时需要计算这个检验和,而到了每个路由器上还需要重新计算一遍。我们还要提到的是,虽然因特网的网络层没有直接提供差错控制,但是因特网使用了另一个协议,ICMP。如果数据报被丢弃或者是首部中含有一些不可知的信息,那么ICMP就会提供某种程度的差错控制。

2. 流量控制

流量控制(flow control)用于调整源点发送的数据量以免接收方超载。如果源计算机的上层应用产生数据的速度比目的计算机上层应用吸收数据的速度快,则接收方就会被这些数据淹没。为了控制数据的流量,接收方需要向发送方发送某些反馈,以通知发送方自己被数据淹没了。

但是因特网的网络层并不直接提供任何流量控制。只要数据报准备好了,发送方就会将它们发送出去,而不会去管接收方是否准备好。

注意:在目前版本的因特网中,网络层不提供任何流量控制。

有以下几个理由可以被用来解释为什么在设计网络层时会缺少流量控制。首先,因为在这一层没有差错控制,接收方网络层的工作非常简单,以致很少会出现超载现象。其次,使用网络层服务的上层协议也可以部署一些缓存,只要网络层的数据准备好了就把它们接收下来,这样处理数据的速度就不一定要和接收数据的速度一样快了。第三,绝大多数使用网络层服务的上层协议都会提供流量控制,因此,如果再加一层流量控制会使网络层变得太复杂,并且会降低整个系统的效率。

3. 拥塞控制

网络层协议的另一个话题是拥塞控制(congestion control)。网络层的拥塞指的是这样一种状态,有过多的数据报出现在了因特网的某一个区域内。如果网络中的源计算机发送数据报的数量超过了网络或者路由器的容量,则有可能发生拥塞现象。在这种情况下,某些路由器可能会丢弃一些数据报。但是,数据报丢弃得越多,情况就可能变得越糟糕,原因在于上层的差错控制机制,发送方可能会重新发送这些被丢弃的分组的副本。如果拥塞持续下去,在某一时刻这种状况将会达到极点,此时系统崩溃,没有任何数据报能被交付。

3.1 无连接网络中的拥塞控制

在无连接网络中有多种方法可以控制拥塞的形成。其中一种方案称为信令。反向信令就是在运动方向与拥塞方向相反的数据报中设置一个比特,以通知发送方拥塞正在形成,发送方应当放慢发送分组的速度。在这种情况下,这个比特可以被设置在对一个分组的响应或者确认分组中。如果网络层没有使用反馈(确认),但是上层使用了反馈,那么就可以使用前向信令方式。它是在运动方向与拥塞方向一致的分组中设置一个比特,用于向该分组的接收方发出拥塞警告。然后,接收方就可以通知上层协议,再由上层协议来想办法通知源点。在因特网的网络层中既没有使用前向信令,也没有使用反向信令。

无连接网络的拥塞控制还可以通过一个扼流分组(choke packet)来实现,它是在遇到拥塞时由路由器向发送方发送的一个特殊的分组。事实上这正是因特网的网络层所实施的拥塞控制机制。因特网的网络层使用了一个辅助协议,称为ICMP。当一个路由器拥塞了,它就会向源点发送一个ICMP分组使其放慢速度。

另一种改善拥塞的方法是将分组按其在整个报文中的重要程度划分等级。例如,可以利用分组首部中的一个字段来定义这个数据报的地位是比较重要的,还是不重要的。当一个路由器拥塞并且需要丢弃一些分组时,标记为不重要的分组将被丢弃。例如,如果有一个报文的内容是一张图片,它可能会被分割为多个分组,那么表示图片边边角角的那些分组的重要性就比不过图片中心位置的分组。如果路由器拥塞了,就会丢弃不重要的分组,同时也不会严重影响整个图片的质量。

3.2 面向连接网络中的拥塞控制

有时候面向连接网络中的拥塞控制要比无连接网络中的拥塞控制更简单。一个最简单的方法就是当某区域发生拥塞后就建立一条额外的虚电路。然而,这样做可能会给某些路由器带来更多的问题。一种更好的解决方法是在建链阶段就进行提前协商。发送方和接收方可以在建立虚电路之时对通信量的级别达成一致意见。这个通信量级别可以由允许建立该虚电路的路由器来指定。换言之,路由器先要检查现有的通信量,并与自己的最大通信相比较,然后才允许建立新的虚电路。

3.3 服务质量

随着因特网允许像多媒体通信(特别是音频和视频的实时通信)这样的新应用程序加入进来,通信的服务质量(quality of service,QoS)也变得越来越重要。因特网正全力以赴地提供更好的服务质量以支持此类应用。但是,为了使网络层保持原封不动,对此类应用的支持大多是在上层实现的。由于在使用多媒体通信时会更显得QoS很重要。

网络层的一个非常重要的话题就是路由选择(routing),也就是路由器如何建立自己的路由表,以便在无连接网络中帮助数据报的转发,或者在面向连接网络的建链阶段,帮助建立一条虚电路。这个任务是由路由选择协议完成的,它帮助主机和路由器建立自己的路由表,并维护和更新这些路由表。这是一些独立的协议,它们有时会使用网络层的服务,而有时则使用某些运输层协议的服务,以助网络层一臂之力。路由选择协议可以划分为两大类:单播的和多播的。

3.4 安全性

另一个与网络层的通信有关的话题是安全性。在最初设计因特网时并没有考虑到安全性问题,因为它只是被高等院校中的少数用户用来进行研究活动的,其他人根本无法访问因特网。网络层在设计时不提供对安全性的支持。但是时至今日,安全性已经成了人们重点关注的问题。为了在无连接的网络层提供安全性,需要用另外一些虚拟层来把无连接的服务转变为面向连接的服务。

这篇关于深入理解网络传输协议——差错控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077042

相关文章

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法