禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!
网络层
网络层服务
网络层需要解决的问题是:如何将分组从源沿着网络路径送往目的端?网络层为我们提供了 2 种服务:虚电路服务和数据报服务。
虚电路服务
这是一种面向连接的服务,当两台主机进行通信时,通信双方先建立连接,在分组交换中建立一条虚电路,以此预留双方通信所需的网络资源。当进行通信时,就沿着虚电路发送分组,虚电路是一个逻辑上的连接,因为逻辑上直达,所以报文分组无需填写目的主机的地址,同时所有分组按顺序到达。
数据报服务
所谓数据报服务是无连接的,即每个分组独立发送,与其前后分组无关,这就说明了网络层不提供可靠传输。无论分组是否正确,处理不过来就直接丢包。传输的路径有路由器自己决定,根据实际情况临时决定,所以不同分组传输的路径会不同。
可靠传输由谁负责?
在之前网络层应该提供什么样的服务,引起了长期的讨论,讨论的焦点在于计算机通信中,可靠数据传输是由网络还是端系统负责?要讲这个问题,我们先看一下 2 种传输的特点。
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按照发送顺序到达终点 | 到达终点的时间不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
看完之后我想答案就很明显了,时代选择了数据报服务,这种服务更加的灵活。关键在于 2 个方面,首先是虚电路网络需要提前预备一些网络资源,当电路一多造成的负担很大。最致命的就是出现故障,只要电路中出现一个故障,整条链路都会崩溃,所有分组全部丢包,这太恐怖了。数据报服务的造价低,运行灵活,虽然不保证可靠传输,但是可以配合运输层的相关协议来实现。实践证明,这种选择是正确的。
尽力而为的传输
所谓尽力而为,就是既不保证分组按顺序到达,也不保证分组被准确交付,也不保证端到端时延,也不保证最小带宽。换言之,就是什么服务都没有。
路由器
网络层完成操作
发送主机需要将数据报封装到分组中,接收主机要向传输层交付分组,而路由器检验所有穿越它的 IP 数据报头部,决策要如何处理。每个主机和路由器,都会运行着网络层协议。网络层有以下 2 个重要功能:
- 转发:当一个分组到达某路由器的一条输出链路是,路由器必须将分组移动到适当地输出链路。这个是数据平面实现的唯一功能,也是最为重要而常见的;
- 路由选择:分组从发送方送往接收方时,网络层必须觉定分组采用的路由或路径,可以通过路由选择算法实现。
需要注意的是,前者注重于链路接口的选择,后者注重端到端路径的选择。
路由器体系结构
如图所示,其中负责路由选择的部分属于控制平面,其他属于数据平面,这里简单解释一下各个组件。
- 输入端口:输入端口需要个各个层都产生联系,需要完成终止物理链路并接受比特的物理层功能、与入链路端的数据链路层交互的链路层功能。还有查找功能,根据转发表觉定路由器的输出端口,并控制分组扎发到路由选择处理器中。
- 交换结构:连接输入端口和输出端口,可以理解为路由器中的网络。
- 输出端口:存储交换结构传过来的分组,并且在物理层和数据链路层在功能上传输出去。
其中路由器的输入端口和输出端口,一般存在于路由器的线路接口卡上。
输入端口处理
匹配加动作
当确定了分组的输出端口,就可以被送进交换结构中,这种操作是一个“匹配加动作”。在路由器快速转发分组时,我们希望的效率是输入端口的处理速率,能够跟上线路把分组传送到路由器的速率。不过当有多个分组都需要进入交换结构时,就可能会引发拥塞。此时拥塞的分组就需要在输入端口排队,等待调度之后再进入交换结构。此时输入端口还需要执行 3 个操作:
- 链路层和物理层相关处理;
- 检查分组的版本号、校验和、寿命字段,并且重写后 2 个字段;
- 更新用于网络管理的计数器,如收到的分组数。
基于目的地转发
进入交换结构之后,通过转发表来查找输出端口,转发表是由路由选择处理器进行确定的。使用转发表的好处在于,无需对于每个分组进行集中式路由选择处理。下面思考一个问题,转发表的存储形式是是什么?如果要保存下一跳的准确地址,那就可能要为 40 亿规模的地址进行存储,这样对于路由器有限的存储空间来说存放不下。
解决的方式是将地址分为 2 个部分,即路由器会去找分组目的地址的前缀,若与当前前缀有存在一个匹配项,就直接送到与匹配项对应的链路即可。此时路由器对于匹配项使用最长匹配规则,即向最长前匹配相关的链路转发,这是很自然地,匹配的位数越多,地址描述的范围更小也更具体。
举个例子吧,对于以下两个地址,可以选取共有的前缀来表示,就可以缩小存储的规模了。
交换结构
交换结构位于路由器的核心部位,它解决的问题是将分组从一个输入端口交换到输出端口中。交换操作可以用很多方式实现,下面给出 3 种典型的方式。
经内存交换
输入端口和输出端口之间的交换,是在 CPU(路由选择处理器)的直接控制下完成。分组从输入端口中先复制到内存中,然后等找到合适的输出端口后,再把分组复制到输出端口的缓存中。
经总线交换
输入端口经一根共享总线将分组直接传送到输出端口,此时没有路由选择处理器的干预。由于每个分组需要跨过单一总线,所以路由器的交换带宽收到总线速录的限制。
经互联网络交换
互联网络会有 2N 条总线,是 N 个输入接口和 N 个输出接口相连。通过纵线式网络可以并行转发多个分组,这就可以克服总线带宽的限制。纵线式交换机是非阻塞的,只要没有其他分组被转发到当前的输出端口,则当前的分组不会发生拥塞。更为复杂的互联网络也会使用多级交换,使得不同输入端口的分组可以并行、同时转发到输出端口。
输出端口处理
输出端口取出已经存放在输出端口内存中的分组,将分组发送到输出链路上。
由于在输出端口需要把分组打开,然后修改一些信息,所以再送出路由器前,需要根据协议对分组进行封装操作,这样才可以往链路送。此时和输入端口对应,也要和链路建立连接。
排队问题
无论是在输入端口还是输出端口,都会形成分组队列,也就是排队现象。排队的位置和程度将取决于流量负载、交换结构的相对速率、线路速率。此处考虑的问题是,如果排队队列过长,以至于路由器存储空间消耗殆尽,这时将会出现丢包。
输入排队
到达的分组需要加入到输入端口队列中,以等待通过交换结构传输到输出端口。如果位于 2 个输入队列前端的 2 个分组时发往相同输出队列的,则其中一个将发生阻塞,就要在输入队列中等待。这种现象称之为输入排队交换机中的*线路前部阻塞**,也就是再一个输入队列中排队的分组必须等待交换结构空闲才能发送。当这个队列中,分组数持续增加到上限时,将会出现大量丢包。
输出排队
当多个分组的目的地是相同的输出端口,则分组就会在输出端口造成堆积,此时也会出现排队现象。由于存储空间是有限的,所以就会造成丢包,此时可以采用弃尾策略,丢弃新到达的分组,或者删除一个或多个已经在队列中的分组来腾出空间。比较好的做法是在存储空间耗尽前对其一个分组,或添加标记,表示即将出现拥塞详细,这就是主动队列管理算法。
分组调度
当输出端口出现排队时,我们就要为分组队列进行分组调度,此时将选择一个分组进行传输。选择的方式有很多,下面着重讨论 3 种。
先进先出
FIFO,也就是先来先服务,该调度规则就是按照分组到达输出链路队列的相同次序,来选择分组来链路上传输。
优先权排队
该规则将分组分类放入输出队列中的优先权类,每个优先权类通常有自己的队列。当选择一个分组传输时,将从队列非空的最高优先权类中选择传输一个分组。
循环加权公平排队
首先分组也先分类放入输出队列中的优先权类,然而类与类之间不存在严格的优先服务权,而是循环调度器在这些类之间轮流提供服务。此时将遵循保持工作排队规则,即在有分组等待传输时,不允许链路保持空闲,在发现一个空的类时,就马上去服务下一个类。运用在路由器中的是加权公平排队(WFQ) 规则,就是按照这个原理实现的。
参考资料
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社