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

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

前言

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


文章目录

前言

一、概览 

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

智能推荐

对象存储调研四华为云OBS_华为obs对象存储调研文档-程序员宅基地

文章浏览阅读905次。华为云对象存储OBS架构华为云对象存储服务(Object Storage Service ,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。OBS的基本组成是桶和对象,其中对象是OBS中数据存储的基本单位,一个对象实际是一个文件的数据与其相关属性信 息的集合体,包括Key 、 Metadata 、Data三部分。华为云针对OBS提供的REST API进行了二次开发,为您提供了控制台、SDK和各类工 具,方便在不同的场景下轻松访问OBS桶以及桶中的对象。当然您也_华为obs对象存储调研文档

mapbox-gl开发教程(一):搭建前端开发环境_mapbox-gl教程-程序员宅基地

文章浏览阅读2.6k次。–mapbox-gl是一个开源、基于webgl技术的前端地图类库–开发教程篇一:搭建前端开发环境1、mapbox官网注册一个账号,生成一个开发token,在mapbox-gl2.0以前,使用自搭建的后台地图服务时,可以不使用此token,参见公众号文章:mapbox-gl升级到2.0后,使用自搭建的后端服务,也需要token,敬请注意!,或者修改mapbox-gl2.0以后的源码,也能避免token,参见公众号文章:mapbox-gl避免设置token源码修改,修改时,看一下官网的许可声明。2、生成t_mapbox-gl教程

GRPC-Protobuf报错Could not find artifact com.google.protobuf:protoc:exe:${os.detected.classifier}-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏3次。GRPC-Protobuf报错Could not find artifact com.google.protobuf:protoc:exe:${os.detected.classifier}:3.12.0 in central解决方案_com.google.protobuf:protoc

SQL on Hadoop TPCDS性能测试_开源hadoop测试tpc-ds指标-程序员宅基地

文章浏览阅读4.5k次。本测试,重点性能测试4个维度,测试对象为主流SQL on Hadoop性能表现,为技术选型做一些参考,由于硬件资源有限,本测试数据集比较小,前提是所有数据保证都能装载到内存.内容还涉及到了SQL on RDBMS 和 SQL on NOSQL性能测试。对一些特殊场景的应用参考。企业级数据仓库解决方案,特别是分析性场景慢慢会被SQL on Hadoop逐渐替代,而且SQL on Hadoop逐渐_开源hadoop测试tpc-ds指标

kafka小白教程从入门到精通_kafka 教程-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏23次。kafka小白教程kafka介绍kafka的概念Kafka(底层源码使用scala语言实现): kafka分布式集群的搭建 kafka分布式集群的实操: 1)命令行客户端(测试)主题的CRUD操作发布消息 订阅消息 2)使用Java API来操作kafka分布式集群: 发布消息 订阅消息 kafka内部原理 自定义分区 消息拦截器 理论: ..._kafka 教程

解决ewomail域不允许_ewomail域不允许怎么解决-程序员宅基地

文章浏览阅读4.8k次。打开 /ewomail/www/ewomail-admin/core/config.php//配置文件return [ 'dbhost' => 'localhost',//数据库连接地址 'dbuser' => 'ewomail',//数据库账号 'dbpw' => 'xxx', 'dbname' => 'ewomail',//数据库名称 'dbcharset' => 'utf8',//数据库编码 'dbprefix'=&_ewomail域不允许怎么解决

随便推点

docker 部署cassandra_docker run cassandra-程序员宅基地

文章浏览阅读7.8k次。摘要本文主要介绍在redhat7 平台,利用docker 部署cassandra 集群,除了介绍基本的部署步骤,另外主要 讨论类似于cassandra 这种分布式集群系统部署 docker如何进行网络配置的问题文章只发布在CSDN与个人站点,其余站点均属盗版侵权 更多cassandra知识请访问 web 个人开发者安装docker最简单的方法,利用已有的脚本curl -fsSL https://_docker run cassandra

Ubuntu设置开机默认内核及删除多余内核_ubuntu设置默认内核,刪除多余内核-程序员宅基地

文章浏览阅读8.5k次,点赞15次,收藏79次。Ubuntu设置开机默认内核及删除多余内核Ubuntu一更新就会启动新的内核,进入系统后总会发现驱动不好用了。所以可以对内核进行下设置,使得主机进入我们想要的内核版本,也可以删除掉多余的内核。Ubuntu设置开机默认内核#不删除内核情况下,更改要进入的内核sudo gedit /etc/default/grub (1)找到GRUB_DEFAULT = "0" grub菜单如下:- Ubuntu- Advanced options for Ubuntu * Ubuntu, with Li_ubuntu设置默认内核,刪除多余内核

IDEA中文字体格式-程序员宅基地

文章浏览阅读1.1w次,点赞9次,收藏9次。背景:刚刚换了新版的IDEA,然后发现项目中中文巨丑,而且字体大小不一致如下图:原因分析:这两张图就是工具编辑面板的字体设置,只设置了主字体,备用字体没有设置,非常怀疑主字体不支持中文所以想到两种解决方式方式一:设置备用字体,切记一定要选可以支持中文的字体,举个例子“fangsong”,"Microsoft XXX"等等两图中得备用字体都设置成“fangsong”字体格式,然..._idea中文字体

23种设计模式详解与示例代码(详解附DEMO)_23种设计模式代码-程序员宅基地

文章浏览阅读1.3w次,点赞34次,收藏81次。本文将探讨设计模式在Java中的应用与实现。设计模式是一套被广泛接受的解决常见软件设计问题的经典方法。在Java编程中,设计模式是提高代码可读性、可维护性和可扩展性的关键。本文将详细介绍Java中常用的几种设计模式,包括工厂模式、单例模式、观察者模式和装饰器模式,并提供具体的代码示例和解释,帮助读者深入理解和学习这些模式的实现方式。_23种设计模式代码

vue-print设置页眉和页脚_掌握这5个Word页码设置技巧,写论文足够用了-程序员宅基地

文章浏览阅读3.6k次。1、每页添加一个文档双击页眉处,进入相应的编辑状态,将鼠标移到页脚处,点击设计——页眉和页脚——页码,插入合适的样式即可。PS:页码插入的方式还可以通过插入——页眉和页脚——页码方式来实现。2、第几页共几页如何将文档设置成第几页共几页的格式?点击插入——页码——选择第几页共几页的页码格式(即X/Y格式),之后选中页码按Shift+F9切换域代码,输入内容【第{PAGE}页/共{NUMPAGES}页..._v-print 设置页眉

云计算介绍-1.1,IaaS\PaaS\SaaS辨析_paas msb-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏6次。云计算是个很神奇的词汇,神奇在一切基于WEB的应用似乎都可以套到云计算范围内。一个原因是:云计算几乎没有标准,因为大家都不清楚什么是云计算,大家觉得各种概念都像云计算,所以可以任意用,随意扩展云计算范围。作为一个研发人员,我希望从底层实现来了解云计算的实质。所以在介绍云计算时,我希望能够找到一种直观、容易理解、直接从底层实现而非商业模式入手 的介绍方法,这个突破口就是:1,计费模式,从中可以理解什么是按需购买,2,与旧技术对比(没有一种技术是凭空产生,大多数技术都是旧技术演进而来)。_paas msb