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

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

前言

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


文章目录

前言

一、概览 

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

智能推荐

光场深度估计(Light Field Depth Estimation)-程序员宅基地

文章浏览阅读1.8w次,点赞23次,收藏94次。本文将介绍光场领域进行深度估计的相关研究。In this post, I’ll introduce some depth estimation algorithms using Light field information. Here is some of the code.研究生阶段的研究方向是光场深度信息的恢复。再此做一些总结,以便于让大家了解光场数据处理的一般步骤以及深度估计的相关..._光场深度估计

CSS3 column 分栏-程序员宅基地

文章浏览阅读68次。column的布局形式还没有使用过,后续的bug和解决方案有待检验。columncolumn-count:number; 设置内容分为多少栏显示column-width:长度单位;设置每一栏的宽度而不设定元素的宽度column-gap:长度单位;设置多栏之间的间隔距离column-rule:宽度,颜色;在栏与栏之间增加一条间隔线。类似border.column-spa..._h5 column-span

在ArcGIS+Server里把屏幕像素点数所代表的距离转换为实际地理距离-程序员宅基地

文章浏览阅读495次。/*** @description 把屏幕像素点数所代表的距离转换为实际地理距离 * @author brian* @param mapScale地图比例尺 * @param pixelUnits屏幕像素个数 * @return double 实际地理距离 */public double ConvertPixelsToMapUnits(WebMa..._像素距离和实际距离转换

STM32开发系列之寄存器(二)GPIO口位带操作实现_gpiob->odr |=1<<6-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏8次。位带操作顾名思义就是可以单独对CPU寄存器某个位进行读写操作,采取这种方式,将会大大减少我们写代码的难度,不用像上篇博客那样进行与或运算和移位,降低了出错的可能性。如果之前有使用过8051单片机的话,应该体会过这种操作的好处。例如,在51单片机中,P1.0上挂了一个灯,我们想要他点亮,可以直接P1.0=0或者P1.0=1这样写,直接对P1端的某个IO口进行操作。但在STM32中并不允许这样操作,..._gpiob->odr |=1<<6

【C++】字符串(string)的使用_c++ string 子串-程序员宅基地

文章浏览阅读2.4k次,点赞5次,收藏22次。C++ 中,`std::string` 是用于处理字符串的标准库类。它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活。_c++ string 子串

MySQL 慢查询-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏41次。一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。1️⃣show variables like 'slow_query_log';查询是否开启慢查询日志【开启慢查询sql:set global slow_query_log = 1/on;】【关闭慢查询sq_慢查询

随便推点

python学习笔记之tkinter中的label_python tkinter labels[i].config(image=none) 无法去除图片-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏14次。from tkinter import *longtext='''多行 文本'''master = Tk()master.title("label学习")w0=Label(master,text=longtext)w0.pack()photo=PhotoImage(file="b.png")w=Label(master,image=photo)w.pack(_python tkinter labels[i].config(image=none) 无法去除图片

一阶电路中的时间常数_学电路原理,你得这么做-程序员宅基地

文章浏览阅读720次。如果你是学电气专业的话,电路原理是最基础最重要的一门课。学不好它,后面的模电、电机、电力系统分析、高压简直没办法学。对于这门课,你要想真正的领悟和掌握,奥秘就在于不能停止思考。而且我觉得这是最重要的一点。我以江辑光的《电路原理》为例(这本书编的相当不错)解释为何不能停止思考。电路几乎是第一本开始培养你工程师思维的书,它不同于数学物理,很多可以理论推导。而电路更多的是你的思考和不断累积的经验。在江的..._1/jwc 正弦

C语言学生成绩管理系统设计 《C语言程序设计》实训报告_c语言学生成绩管理系统设计报告-程序员宅基地

文章浏览阅读10w+次,点赞399次,收藏3.2k次。C语言学生成绩管理系统设计 《C语言程序设计》实训报告_c语言学生成绩管理系统设计报告

2016年8月6日 星期六 --出埃及记 Exodus 16:6-程序员宅基地

文章浏览阅读96次。2016年8月6日 星期六 --出埃及记 Exodus 16:6So Moses and Aaron said to all the Israelites, "In the evening you will know that it was the LORD who brought you out of Egypt,摩西,亚伦对以色列众人说,到了晚上,你们要知道是耶和华将你们从埃及地领出..._出埃及记16

软件架构, 软件框架,设计模式的区别_比较架构模式,设计模式,惯用法的区别和联系-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏7次。已剪辑自: https://www.cnblogs.com/lsm-boke/p/12657791.html一、架构**架构即软件架构,**是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础,简单来说,软件架构是一个系统的草图,是一种设计方案,将客户的不同需求抽象成为抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。_比较架构模式,设计模式,惯用法的区别和联系

文本挖掘入门-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏23次。总之,词嵌入是一种有助于RNN模型理解文本语义的技术,而RNN则用于在文本生成任务中考虑文本的顺序和上下文信息,从而生成连贯的文本。文本挖掘是从文本数据中提取有用信息的过程,通常包括文本预处理、特征提取和建模等步骤。:选择合适的机器学习或深度学习算法,根据任务类型进行建模,例如文本分类、情感分析、主题建模等。:使用标注好的数据集训练模型,并使用评估指标(如准确度、F1分数、均方误差等)来评估模型性能。函数将使用RNN模型生成文本,它会根据先前生成的文本以及上下文信息来预测下一个单词。_文本挖掘

推荐文章

热门文章

相关标签