手撕计算机网络——网络层(一):概览与路由转发_网络层中如何实现路由分组和数据转发的?-程序员宅基地

技术标签: 网络  网络协议  计算机网络  

前言

从这篇文章开始,我们就进入了计算机网络的核心——网络层,好激动这一篇文章我们还是先来了解网络层的基本概念,了解路由器转发和工作原理。


文章目录

前言

一、概览 

1.1 转发

1.2 路由选择

1.3 软件定义网络——SDN 

二、路由器工作原理

2.1 体系结构

2.2 输入端口处理和基于目的地转发

2.3 交换方式

2.4 输出端口处理

2.5 排队

2.6 分组调度

总结


一、概览 

        不管是应用层还是运输层,其实都属于网络边缘,只有网络层才是我们计算机网络的核心。我们在前面的学习中可以了解到,端主机应用层上的用户数据是通过套接字在运输层中封装为报文段并下发到网络层封装为数据报实现主机之间的报文通信的。网络层其实可以分解为两个相互作用的部分:数据平面控制平面。数据平面的功能决定路由器输入链路的数据报(网络层分组)如何转发到该路由器的输出链路上,其实就是路由器的功能,这种转发的方式主要有两种:IP转发和通用转发;控制平面功能主要是网络范围的逻辑,该功能控制着沿着端到端的路径中路由器之间的路由方式。在通信链路中一个重要的存在就是路由器,每台路由器在数据平面中将数据报从输入链路转发到输出链路上;而在控制平面上主要是协调本地路由器的路由转发工作,保证数据报沿端到端传输。

1.1 转发

        转发是在数据平面上实现的唯一功能,简单来说,转发其实就是路由器将分组从它的一条输入链路接口转移到树党的输出链路接口上,转发发生的时间尺度很短,一般为几个纳秒。其实理解转发时我们可以将其看做是跨越一次路由的数据传输,路由会根据经过它的分组的首部值(一般为一个或者是多个字段)在转发表中索引并找到合适的输出链路,根据这种方法我们就实现分组的转发,这里的关键元素就是路由转发表。 

1.2 路由选择

        当分组从发送方往接收方传输时,网络层必须决定这些分组所采用的路由(路径)。计算这些路径的方法叫做路由选择算法,在本专栏的第一篇文章中我们也有提过。简单来说,路由选择和转发都是传输的选择过程,但路由选择的时间尺度更大,它指的是分组从源到目的端所采取的端到端路径的网络范围处理过程。我们这里考虑到了路由选择和转发的关系,其实路由选择算法决定着插入该路由器转发表的内容,这就意味着路由选择是全局控制,它决定着整条传输路径。

1.3 软件定义网络——SDN 

        在SDN方法中,我们选择将数据平面和控制平面在路由器中分离出来,通过一个远程控制器计算和分发转发表以供每台路由器的使用,控制平面的路由选择功能和物理路由器是分开的,路由器只负责转发的工作。路由器和远程控制器之间交换转发表和路由选择信息的报文。 


二、路由器工作原理

2.1 体系结构

        前面介绍了网络层的数据平面和控制平面,我们首先来看一下数据平面的唯一功能——路由器中的转发,即实际将分组从一台路由器的入链路传送到适当的初链路。我们首先来看一下下图中的路由器体系结构图,图中包含四个结构:路由选择器、输入端口、输出端口和交换结构。

路由结构
路由器体系结构图

  •  输入端口:主要功能包括终结链路的物理层功能,即线路端接,同时在数据链路处理中与位于入链路远端的数据链路层交互来执行数据链路层的功能。当然了,还必须能够进行路由查找、控制分组转发到路由选择处理器以查找输出端口。
  • 交换结构:将路由器的输入端口连接到输出端口上,是一个网络路由器中的网络。
  • 输出端口:存储从交换结构中获得的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组
  • 路由选择处理器:执行控制平面的功能,在传统的路由器中,执行路由选择协议,维护路由选择表和关联链路的状态,并为路由器计算转发表;而在SDN路由器中,路由选择器主要负责与远程控制器进行通信,接收转发表并为输入端口安装这些转发表,路由选择器还能够实现网络管理的功能。

2.2 输入端口处理和基于目的地转发

        我们刚刚已经初步认识了在一个路由器的体系结构下输入端口的功能,输入端口的线路端接和链路层处理的功能实现了用于各个输入链路的物理层和链路层功能。在SDN路由器中,转发表其实是由路由选择器从远程控制器中获取后经过一条总线复制给线路卡,实现转发决策能够在每隔输入端口本地中做出,而无需每个分组都调用路由选择器。在基于目的地转发的前提下我们来考虑一个问题:转发表和首部时如何匹配的?其实路由器是通过分组目的地址的前缀在转发表项中进行查询和匹配。但一个目的地址可能不止与一个表项匹配,因此路由器使用了一种叫最长前缀匹配规则,顾名思义就是找最长前缀匹配的表项就是我们的输出端口。

 

2.3 交换方式

交换结构是一台路由器的核心部位,是分组能够在路由器中实现转发的基础,实现交换可以使用许多种方式,这里我们介绍如下三种:经内存交换、经总线交换、经互联网交换。

经内存交换

        在前面的学习中,我们知道路由选择处理器会经过独立的总线将转发表复制到线路卡中,在输入线路卡中路由器实现了目的地址查找和将分组存储进适当的内存存储位置的功能。当一个分组到达输入端口时,该端口会以中断方式向路由选择处理器发出信号,同时该分组被复制到内存中,再根据转发表将分组复制到输出端口的缓存中。需要注意的是:不能同时转发两个分组即使目的端口不同!

经总线交换

        输入端口预先为分组计划一个交换机内部标签(首部)指示本地输出端口,使得分组能在总线上传输到输出端口。给分组能沟北所有的输出端口收到,但只有与该标签匹配的端口才能保存该分组数据,完成输出后该分组会在输出端口去除。需要注意的是:即使有多个分组同时到达路由器,总线也只能一次传输一个分组,其余的分组需要进行排队等待。

经互联网交换

        克服单一、共享式总线带宽限制的一种方法是使用一个更为复杂的互联网络。纵横交换机就是这么一种2N条总线组成的互联网络,通过网格和交叉点的形式来控制分组的转发路径。在交叉点处使用了交换结构控制器来控制交叉部位在任意时候的开闭。纵横式网络能够并行转发不同的分组。需要注意的是,纵横式网络是非阻塞的,如果两个分组有相同的输出端口,其中一个必须在输入端等待。

2.4 输出端口处理

输出端口取出存放在端口内存中的分组并将其发送到输出链路上,功能包括选择和取出排队的分组,执行所需的链路层和物理层的传输功能。

2.5 排队

        排队我们其实并不陌生,在讲运输层的时候就已经清楚。出现排队的原因其实就是出速率小于入速率,排队会不断消耗我们的缓存队列,一旦缓存溢出就会出现丢包的问题。在路由器中也存在着排队的问题,主要分为两种:输入排队和输出排队。先来讲讲输入排队:我们知道交换结构并不能无时延地使分组通过,那就意味着在网络高并发情况下输入端口的缓存队列中一般不为空,那么在队列尾部地分组其实就需要等待。同时我们用之前的纵横式交换结构为例,此时如果在一个输出端口同时有两个输入端口的队列等待交换结构转发分组,其中肯定会有一个队列在等待,这种现象就叫做输入排队交换机的线路前部阻塞(HOL);我们再来看看输出排队:输出排队出现的援引就是交换结构发送到输出队列的报文速率大于它发送到链路层的速率。当输出排队导致输出端口内存溢出时,路由器要么执行弃尾策略(丢弃到达的新分组)、要么执行主动队列管理算法(AQM)策略(在缓存填满前丢弃分组或者是在其首部加上标记)并向发送方发送一个拥塞信号。

2.6 分组调度

        分组调度其实就是考虑分组在输出端口的缓存中的输出次序的问题,在这一部分我们主要介绍三种分组调度的方法:先进先出(FCFS/FIFO) 、优先权排队、循环和加权公平排队首先是先进先出规则:其实理解FIFO很简单,其本质就是一个队列,那个分组先到达缓存哪个分组就会先被输出到链路中。该队列中的分组丢弃规则会决定当缓存溢出时是丢弃给分组还是在队列中取出并丢弃其它分组;其次是优先权排队规则:在该规则下到达输出链路的分组会被分类放入权重不等的输出队列中,每一个对列同样满足FIFO规则,当选择一个分组传输时会优先从非空的权重更大的队列中选择分组;最后是循环和加权公平排队规则:该循环排队规则下到达输出链路的分组会进行排队但不分权重,存在一个循环调度器以一个固定的次序轮流传输不同飞空队列中的分组。而对于加权公平排队规则(WFQ),它相较于循环排队规则为每一个对列加上权重,并根据权重给出每一个队列最低的吞吐量保证。

需要注意的是:在优先权排队规则中,存在着一种非抢占式优先权排队的规则,在该规则下,当一个权重较低的分组正在传输的过程中即使优先权更高的队列中有分组突然到达,也不能打断该传输过程! 


总结

        在这篇文章中,荔枝主要讲述了网络层的一些大体的概念,之后讲述了路由器的工作原理,包括了如何转发和分组调度策略。下一篇文章中荔枝将会讲述数据平面的最后一个大的知识点——IPV4和IPV6协议,继续加油!!!

今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,喜欢的小伙伴麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心~~~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_62706049/article/details/128527131

智能推荐

【新手科研指南5】深度学习代码怎么读-小白阶段性思路(以手写数字识别应用为例)_深度学习程序怎么读-程序员宅基地

文章浏览阅读6.2k次,点赞6次,收藏26次。我是一个深度学习代码小白,请你用中文写上注释,能让我能轻松理解下面这段代码。注意包含所有函数、调用和参数的注释。以同样的python代码块样式返回你写的代码给我。代码看累了,就看《动手学深度学习》文档:基于PyTorch框架,从底层函数实现基础功能,再到框架的高级功能。努力上路的小白一枚,麻烦路过的大佬指导一二,同时希望能和大家交流学习~争取更新学习这个文档的专栏,记录学习过程。量身定做了一套话术hhh,亲身测试还不错。这个感觉更浅一点儿,之后复习看吧。20天吃掉那只Pytorch。_深度学习程序怎么读

Java学习路线图,看这一篇就够了!-程序员宅基地

文章浏览阅读2.7w次,点赞126次,收藏1.2k次。耗废1024根秀发,Java学习路线图来了,整合了自己所学的所有技术整理出来的2022最新版Java学习路线图,适合于初、中级别的Java程序员。_java学习路线

PCL_Tutorial2-1.7-点云保存PNG_pcl::io:savepng-程序员宅基地

文章浏览阅读4.4k次。1.7-savingPNG介绍代码详情函数详解savePNGFile()源码savePNGFile()源码提示savePNGFile()推荐用法处理结果代码链接介绍PCL提供了将点云的值保存到PNG图像文件的可能性。这只能用有有序的云来完成,因为结果图像的行和列将与云中的行和列完全对应。例如,如果您从类似Kinect或Xtion的传感器中获取了点云,则可以使用它来检索与该云匹配的640x480 RGB图像。代码详情#include <pcl / io / pcd_io.h>#incl_pcl::io:savepng

知乎问答:程序员在咖啡店编程,喝什么咖啡容易吸引妹纸?-程序员宅基地

文章浏览阅读936次。吸引妹子的关键点不在于喝什么咖啡,主要在于竖立哪种男性人设。能把人设在几分钟内快速固定下来,也就不愁吸引对口的妹子了。我有几个备选方案,仅供参考。1. 运动型男生左手单手俯卧撑,右手在键盘上敲代码。你雄壮的腰腹肌肉群活灵活现,简直就是移动的春药。2.幽默男生花 20 块找一个托(最好是老同学 or 同事)坐你对面。每当你侃侃而谈,他便满面涨红、放声大笑、不能自已。他笑的越弱_咖啡厅写代码

【笔试面试】腾讯WXG 面委会面复盘总结 --一次深刻的教训_腾讯面委会面试是什么-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏5次。今天 (应该是昨天了,昨晚太晚了没发出去)下午参加了腾讯WXG的面委会面试。前面在牛客上搜索了面委会相关的面经普遍反映面委会较难,因为都是微信的核心大佬,问的问题也会比较深。昨晚还蛮紧张的,晚上都没睡好。面试使用的是腾讯会议,时间到了面试官准时进入会议。照例是简单的自我介绍,然后是几个常见的基础问题:例如数据库索引,什么时候索引会失效、设计模式等。这部分比较普通,问的也不是很多,不再赘述。现在回想下,大部分还是简历上写的技能点。接下来面试官让打开项目的代码,对着代码讲解思路。我笔记本上没有这部分代码,所_腾讯面委会面试是什么

AI绘画自动生成器:艺术创作的新浪潮-程序员宅基地

文章浏览阅读382次,点赞3次,收藏4次。AI绘画自动生成器是一种利用人工智能技术,特别是深度学习算法,来自动创建视觉艺术作品的软件工具。这些工具通常基于神经网络模型,如生成对抗网络(GANs),通过学习大量的图像数据来生成新的图像。AI绘画自动生成器作为艺术与科技结合的产物,正在开启艺术创作的新篇章。它们不仅为艺术家和设计师提供了新的工具,也为普通用户提供了探索艺术的机会。随着技术的不断进步,我们可以预见,AI绘画自动生成器将在未来的创意产业中发挥越来越重要的作用。

随便推点

Flutter ListView ListView.build ListView.separated_flutter listview.separated和listview.builder-程序员宅基地

文章浏览阅读1.7k次。理解为ListView 的三种形式吧ListView 默认构造但是这种方式创建的列表存在一个问题:对于那些长列表或者需要较昂贵渲染开销的子组件,即使还没有出现在屏幕中但仍然会被ListView所创建,这将是一项较大的开销,使用不当可能引起性能问题甚至卡顿直接返回的是每一行的Widget,相当于ios的row。行高按Widget(cell)高设置ListView.build 就和io..._flutter listview.separated和listview.builder

2021 最新前端面试题及答案-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏14次。废话不多说直接上干货1.js运行机制JavaScript单线程,任务需要排队执行同步任务进入主线程排队,异步任务进入事件队列排队等待被推入主线程执行定时器的延迟时间为0并不是立刻执行,只是代表相比于其他定时器更早的被执行以宏任务和微任务进一步理解js执行机制整段代码作为宏任务开始执行,执行过程中宏任务和微任务进入相应的队列中整段代码执行结束,看微任务队列中是否有任务等待执行,如果有则执行所有的微任务,直到微任务队列中的任务执行完毕,如果没有则继续执行新的宏任务执行新的宏任务,凡是在..._前端面试

linux基本概述-程序员宅基地

文章浏览阅读1k次。(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。_linux

JavaScript学习手册十三:HTML DOM——文档元素的操作(一)_javascript学习手册十三:html dom——文档元素的操作(一)-程序员宅基地

文章浏览阅读7.9k次,点赞26次,收藏66次。HTML DOM——文档元素的操作1、通过id获取文档元素任务描述相关知识什么是DOM文档元素节点树通过id获取文档元素代码文件2、通过类名获取文档元素任务描述相关知识通过类名获取文档元素代码文件3、通过标签名获取文档元素任务描述相关知识通过标签名获取文档元素获取标签内部的子元素代码文件4、html5中获取元素的方法一任务描述相关知识css选择器querySelector的用法代码文件5、html5中获取元素的方法二任务描述相关知识querySelectorAll的用法代码文件6、节点树上的操作任务描述相关_javascript学习手册十三:html dom——文档元素的操作(一)

《LeetCode刷题》172. 阶乘后的零(java篇)_java 给定一个整数n,返回n!结果尾数中零的数量-程序员宅基地

文章浏览阅读132次。《LeetCode学习》172. 阶乘后的零(java篇)_java 给定一个整数n,返回n!结果尾数中零的数量

php 公众号消息提醒,如何开启公众号消息提醒功能-程序员宅基地

文章浏览阅读426次。请注意,本文将要给大家分享的并不是开启公众号的安全操作风险提醒,而是当公众号粉丝给公众号发消息的时候,公众号的管理员和运营者如何能在手机上立即收到消息通知,以及在手机上回复粉丝消息。第一步:授权1、在微信中点击右上角+,然后选择“添加朋友”,然后选择“公众号”,然后输入“微小助”并关注该公众号。2、进入微小助公众号,然后点击底部菜单【新增授权】,如下图所示:3、然后会打开一个温馨提示页面。请一定要..._php微信公众号服务提示

推荐文章

热门文章

相关标签