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

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

前言

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


文章目录

前言

一、概览 

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

智能推荐

海康威视网络摄像头开发流程(五)------- 直播页面测试_ezuikit 测试的url-程序员宅基地

文章浏览阅读3.8k次。1、将下载好的萤石js插件,添加到SoringBoot项目中。位置可参考下图所示。(容易出错的地方,在将js插件在html页面引入时,发生路径错误的问题)所以如果对页面中引入js的路径不清楚,可参考下图所示存放路径。2、将ezuikit.js引入到demo-live.html中。(可直接将如下代码复制到你创建的html页面中)<!DOCTYPE html><html lan..._ezuikit 测试的url

如何确定组态王与多动能RTU的通信方式_组态王ua-程序员宅基地

文章浏览阅读322次。第二步,在弹出的对话框选择,设备驱动—>PLC—>莫迪康—>ModbusRTU—>COM,根据配置软件选择的协议选期期,这里以此为例,然后点击“下一步”。第四步,把使用虚拟串口打勾(GPRS设备),根据需要选择要生成虚拟口,这里以选择KVCOM1为例,然后点击“下一步”设备ID即Modbus地址(1-255) 使用DTU时,为下485接口上的设备地址。第六步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“第五步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“_组态王ua

npm超详细安装(包括配置环境变量)!!!npm安装教程(node.js安装教程)_npm安装配置-程序员宅基地

文章浏览阅读9.4k次,点赞22次,收藏19次。安装npm相当于安装node.js,Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西_npm安装配置

火车头采集器AI伪原创【php源码】-程序员宅基地

文章浏览阅读748次,点赞21次,收藏26次。大家好,小编来为大家解答以下问题,python基础训练100题,python入门100例题,现在让我们一起来看看吧!宝子们还在新手村练级的时候,不单要吸入基础知识,夯实自己的理论基础,还要去实际操作练练手啊!由于文章篇幅限制,不可能将100道题全部呈现在此除了这些,下面还有我整理好的基础入门学习资料,视频和讲解文案都很齐全,用来入门绝对靠谱,需要的自提。保证100%免费这不,贴心的我爆肝给大家整理了这份今天给大家分享100道Python练习题。大家一定要给我三连啊~

Linux Ubuntu 安装 Sublime Text (无法使用 wget 命令,使用安装包下载)_ubuntu 安装sumlime text打不开-程序员宅基地

文章浏览阅读1k次。 为了在 Linux ( Ubuntu) 上安装sublime,一般大家都会选择常见的教程或是 sublime 官网教程,然而在国内这种方法可能失效。为此,需要用安装包安装。以下就是使用官网安装包安装的教程。打开 sublime 官网后,点击右上角 download, 或是直接访问点击打开链接,即可看到各个平台上的安装包。选择 Linux 64 位版并下载。下载后,打开终端,进入安装..._ubuntu 安装sumlime text打不开

CrossOver for Mac 2024无需安装 Windows 即可以在 Mac 上运行游戏 Mac运行exe程序和游戏 CrossOver虚拟机 crossover运行免安装游戏包-程序员宅基地

文章浏览阅读563次,点赞13次,收藏6次。CrossOver24是一款类虚拟机软件,专为macOS和Linux用户设计。它的核心技术是Wine,这是一种在Linux和macOS等非Windows操作系统上运行Windows应用程序的开源软件。通过CrossOver24,用户可以在不购买Windows授权或使用传统虚拟机的情况下,直接在Mac或Linux系统上运行Windows软件和游戏。该软件还提供了丰富的功能,如自动配置、无缝集成和实时传输等,以实现高效的跨平台操作体验。

随便推点

一个用聊天的方式让ChatGPT写的线程安全的环形List_为什么gpt一写list就卡-程序员宅基地

文章浏览阅读1.7k次。一个用聊天的方式让ChatGPT帮我写的线程安全的环形List_为什么gpt一写list就卡

Tomcat自带的设置编码Filter-程序员宅基地

文章浏览阅读336次。我们在前面的文章里曾写过Web应用中乱码产生的原因和处理方式,旧文回顾:深度揭秘乱码问题背后的原因及解决方式其中我们提到可以通过Filter的方式来设置请求和响应的encoding,来解..._filterconfig selectencoding

javascript中encodeURI和decodeURI方法使用介绍_js encodeur decodeurl-程序员宅基地

文章浏览阅读651次。转自:http://www.jb51.net/article/36480.htmencodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来_js encodeur decodeurl

Android开发——打包apk遇到The destination folder does not exist or is not writeable-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏3次。前言在日常的Android开发当中,我们肯定要打包apk。但是今天我打包的时候遇到一个很奇怪的问题Android The destination folder does not exist or is not writeable,大意是目标文件夹不存在或不可写。出现问题的原因以及解决办法上面有说报错的中文大意是:目标文件夹不存在或不可写。其实问题就在我们的打包界面当中图中标红的Desti..._the destination folder does not exist or is not writeable

Eclipse配置高大上环境-程序员宅基地

文章浏览阅读94次。一、配置代码编辑区的样式 <1>打开Eclipse,Help —> Install NewSoftware,界面如下: <2>点击add...,按下图所示操作: name:随意填写,Location:http://eclipse-color-th..._ecplise高大上设置

Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle.tar_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_6-程序员宅基地

文章浏览阅读2.8k次。一,下载mysql:http://dev.mysql.com/downloads/mysql/; 打开页面之后,在Select Platform:下选择linux Generic,如果没有出现Linux的选项,请换一个浏览器试试。我用的谷歌版本不可以,换一个别的浏览器就行了,如果还是不行,需要换一个翻墙的浏览器。 二,下载完后解压缩并放到安装文件夹下: 1、MySQL-client-5.6.2_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle