【计算机网络】网络层:数据平面
一.网络层概述
每台路由器的数据平面的主要功能时从其输入链路向其输出链路转发数据报,控制平面的主要功能是协调这些本地的每路由转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。
网络层不运行运输层和应用层协议。
转发是数据平面实现的唯一功能。
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地操作,路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。
- 转发表:
路由器通过检查到达报文的首部,与转发表中的表项进行匹配,决定将该报文转发到路由器哪一个输出接口上。
二.路由器工作原理
1.输入端口处理和基于目的地转发
最简单的情况,对于全球的将所有IP地址,转发表中都有对应的表项,但是全球有40亿个可能的地址,这种方法在整体上是不可行的。
第二种是路由器使用分组目的地址前缀进行匹配,并且使用最长前缀匹配原则。
2.交换
- 经内存交换:
当输入端口接收到报文时,先将该报文存储到内存中,在内存中取出目的地址,然后发送到目的端口。这种方法,如果内存带宽为每秒可写进内存或从内存中读出对多B个分组,则总的转发吞吐量必然小于B/2,也要注意到不能同时转发两个分组,即使它们有不同的目的端口,因为经过共享系统总线一次仅能执行一个内存读/写。 - 经总线交换
在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预,如果多个分组同时到达路由器,每个位于不同的输出端口,出了一个分组之外,其他的分组都要进行等待,因为一根总线只能通过一个分组。 - 经互联网交换
纵横是网络能够并行转发多个分组(位于不同输入端口,不同输出端口)。
3. 何处出现排队
- 输入排队
简单来说,位于同一个输入链路上的分组,必须等待前一个分组被交换后,后面的分组才能进行交换。
线路前缀阻塞:假定有输入端口1,2,输出端口1,2,在输入端口1中,有一个报文要交换到输出端口1,在输入端口2中,第一个分组要到输出端口1中,第二个分组要到输出端口2中去,那么输入端口2中的第一个报文就要进行等待,而且输入端口2中的第二个分组(去往输出端口2)也要等待,这就是线路前缀等待。 - 输出排队
假定有输入端口1,2,3,都要从输出端口1中出去,而在交换机中的交换速率大于输出端口的发送速率,在第一个单位时间,输入端口三个报文到达输出端口1,在第二个单位时间内,一个分组被输出端口1发送出去了,那就还有两个分组在输出端口等待,而同时,输出端口1,2,3接收到的新的分组,又到了输出端口1中,并且进行等待,这样经过了n个单位时间后,输出端口的内存被耗尽,当没有足够的内存来缓存一个分组时,就必须做出决定:要么丢弃到达的新分组(弃尾),要么删除一个或多个已排队的分组来为新来的分组腾出空间。已经提出和分析出了许多分组丢弃与标记策略,这些策略统称为主动排队管理。这样的后果是:输出端口的分组调度在这些排队分组中选择一个分组来传输
4.分组调度
分组调度研究的问题是:在输出端口上,排队的分组如何经输出链路输出的问题。
- 先进先出(FIFO,FCFO)
不考虑由于丢弃策略丢弃的分组,按照到达输出端口的顺序进行传输(先到的先接受服务)。 - 优先权排队
在优先权排队规则下,到达输出端口的分组被分类放到输出队列中的优先权类,按照高优先权队列优先的方式进行传输(在同一优先权类中按照FIFO方式传输)。
也就是说,假定有四个分组,1,2,3,4,其中1和3属于高优先权,而2和4属于低优先权,1分组先到达输出端口,发现输出端口为空,则立即进行传输,其后,2和3到达,3进入高优先权分类,而2进入低优先权分类,在1完成传输之后,3优先于2进行传输,在2传输的同时,4分组到达,它属于低优先权,进入低优先权分类中,排到2之后,在3分组传输完成后,依次传输2和4分组。在非抢占式优先权排队规则下,一旦分组开始传输,就不能被打断,也就是说,低优先权分组正在进行传输,这时候就算高优先权分组到达,也要等待这个分组传输完成后才能进行传输。 - 循环加权公平排队
在循环加权排队规则下,依旧进行优先权分类,比如说:分组1,2,3属于一个优先级,而4,5,6属于另一个优先级,分组1先到达,然后立即开始传输,之后,2,3,4,5,6分别到达,并且进行了分类:一个分类中是2和3,另一个分组是4,5和6,在1分组传输完成后,传输4,然后传输2,5,3,6。
另一种加权公平排队是:每一个优先权根据分组排队数量进行加权,为了使每一个分类加权相同,则优先传输加权比较高的分类中的一个或者多个分组,等加权相同后,再根据优先级,进行循环加权排队传输。
三.网际协议:IPV4,寻址,IPV6及其他
1.PV4数据报格式

- 版本号:这里的版本号标识了是IPV4还是IPV6,版本的不同,如何解释后面的内容也不同
- 首部长度:数据报文首部长度
- 服务类型:区别除了不同类型的数据报,如:要求尽快到达,要求没有差错到达等
- 总长度:IP数据报文的总长度
- 标识,标志位,片偏移:与IP数据报文的分片有关,我们马上讨论
- 生存时间:每经过一个路由器,该值就要减一,当为0的时候,必须停止转发
- 协议:标记了该数据报文应该交给运输层哪个协议
- 首部校验和:只对首部提供了校验
- 源IP地址,目的IP地址
2.IPV4数据报分片:
现在我们来考虑这样一个问题:如果你是一个路由器,当你收到一个数据报,要发送出去的时候,发现输出链路上MTU比这个报文要小,那么你该怎么办?
解决方法就是将这个较大的数据报分片,每片都包含IP数据报头部,并且将分片标识设置为1(最后一片除外),然后为了让目的主机知道分片的次序,还要设置片偏移。
3.IPV4编址:
IPV4地址由32位比特组成,使用点分十进制法即地址中每个字节都是用十进制形式书写,各字节之间使用句号分开。IPV4地址由两部分组成:网络段和主机段,并且根据这些对IPV4地址进行了分类:
A类(0):网络号占8位:2427个网络,每个里面含有224个IP
B类(10):网络号占16位:16214个网络,每个里面含有216个IP
C类(110):网络号占24位:8
D类:多播
E类:保留
那么我们来继续考虑一个问题,如果说我只是一个小公司,给我分配了一段地址,比如说分配到了A类,A类中有很多IP,我肯定用不完,那么就会造成地址的浪费,那么怎么办?这时候就提出来了子网掩码:比如像220.23.100/23,就是说,在这个IP地址中,前23位是我的网络地址,后面的才是我的主机地址,这就很好的利用了IP地址。
地址聚合,路由聚合,路由摘要:比如说,一台路由器下连接了一些子网,如:220.23.16.0/23,220.23.18.18/23,那么该路由器就向外界通告:向我发送以220.23.160./20开始的任何东西,那么当数据报到达一个路由器上的时候,开始前缀匹配网络地址,并且使用最长前缀匹配原则。
225.225.225.225广播地址。
4.获取一块地址:
全球权威的因特网名字和编号分配机构:ICANN
- 向ISP获取地址:
这时候,ISP从自己的网段中,分配一小块地址给其使用 - 动态主机配置协议:
某组织一旦获取了一块地址,那么就要给员工每人一个地址,那么这个工作由谁来完成?动态主机配置协议(DHCP)常被称为即插即用协议或零配置协议,DHCP服务器将会给每一个员工分配一个临时的IP地址,也可以配置DHCP,使某台主机每次与网络连接时都使用同一个IP地址。
那么当一个主机链接到网络,它如何获取地址?- DHCP服务器发现:使用DHCP发现报文,目的地址为255.255.255.255
- DHCP服务器提供:DHCP服务器接收到DHCP发现报文后,分配一个地址,包含租用期等信息,使用DHCP提供报文响应,也是使用广播地址255.255.255.255发送
- DHCP请求:当主机从一个或多个服务器中选择一个,并且向选中的服务器提供用DHCP请求报文进行响应
- DHCP ACK:服务器使用DHCP ACK报文对DHCP请求报文进行响应
5.网络地址转换
网络地址转换器NAT(Network Address Translator)位于使用专用地址的Intranet和使用公用地址的Internet之间。从Intranet传出的数据包由NAT将它们的专用地址转换为公用地址。从Internet传入的数据包由NAT将它们的公用地址转换为专用地址。这样在内网中计算机使用未注册的专用IP地址,而在与外部网络通信时使用注册的公用IP地址,大大降低了连接成本。同时NAT也起到将内部网络隐藏起来,保护内部网络的作用,因为对外部用户来说只有使用公用IP地址的NAT是可见的。
6.IPV6
IPV6数据报格式:

-
版本号:毫无疑问,是6
-
流量等级(流量类型):与IPv4中的TOS字段类似
-
流标签:可以为一条流中的某些数据包给出优先权
-
有效载荷长度:跟在定长4.字节后的字节数量
-
下一个首部:指示该数据报应该交给哪个运输层协议处理
-
跳先知:TTL
-
源和目的地址
-
IPv4和IPv6的不同:
- 扩大的地址容量:
IPv6将地址长度从32字节扩大到了128字节 - 简化高效的40字节首部
- 流标签
- IPv6不允许在中间路由器上进行分片与重新组装
- 首部校验和:IPv6去除了首部校验和
- 选项:选线字段不再是IP首部的一部分了
通用转发
- 扩大的地址容量:
通用转发意味着,除了其最终目的地外,当路由器确定数据报的输出接口时,还会考虑与数据报相关的其他因素。通用转发延续了基于目的转发的"匹配+动作"模式, 但不受限于通过源分组的IP地址匹配目的IP地址进行转发, 而是通过富足首部字段值集合和计数器集合对动作集合进行匹配.例如:软件定义网络SDN采用的是通用转发,例如,除了目标IP地址外,转发决策还可以基于数据报的TCP/UDP源或目标端口号。
相关文章:
【计算机网络】网络层:数据平面
一.网络层概述 每台路由器的数据平面的主要功能时从其输入链路向其输出链路转发数据报,控制平面的主要功能是协调这些本地的每路由转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。 网络层不运行运输层和应用层协议。 转发是…...
Path with “WEB-INF“ or “META-INF“: [webapp/WEB-INF/NewFile.html]
2023-11-04 01:03:14.523 WARN 10896 --- [nio-8072-exec-6] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [webapp/WEB-INFNewFile.html] spring.mvc.view.prefix:/webapp/WEB-INF/...
百度OCR 接口调用 提示 216101:param image not exist 问题解决
百度提供的文档并没有描述如何解决,例子也是,用工具请求可以通 axios 请求 需要用FormData 传参 let token await getAccessToken() //官网案例那个 请求token// console.log(token, "token");var formData new FormData();// imageBase64 :Base64 图片数据formD…...
1-10 HTML中input属性
HTML中input属性 text:用于接受单行文本输入password:用于密码输入,输入字符会被掩盖radio:用于单选按钮,用户可以在一组选项中选择一个checkbox:用于复选框,用户可以选择多个选项number&#…...
共焦显微镜使用
x.1 细胞培养 x.2 样品制备 以细菌为例,我们使用荧光染色细菌,静置15分钟。 15分钟后我们使用实验室的专用培养皿,选择吸收100uL的溶液滴在在培养皿中心。 x.3 显微镜使用 我们按照1, 2, 3, 4的顺序打开显微镜, 打开电脑&…...
windows + Mingw32-make 编译 PoDoFo库,openssl, libjpeg, Msys2工具的使用
参考: https://blog.csdn.net/sspdfn/article/details/104244306 https://blog.csdn.net/yaoyuanyylyy/article/details/17436303 https://blog.csdn.net/wxlfreewind/article/details/106492253 前期进行了各种摸索,由于Podofo依赖库比较多,…...
C++中图的存储
文章目录 0. 实例图1. 邻接矩阵2. 邻接矩阵2.1 链表数组2.2 链式前向星 3. 参考 0. 实例图 考虑下面这样一个图 1. 邻接矩阵 vis[i][j] 表示从i 到j有一条边。直接用二维数组就可以了。 using namespace std; int vertex_num 5; vector<vector<int>> graph(v…...
西瓜书读书笔记整理(七)—— 第七章 贝叶斯分类器
第七章 贝叶斯分类器 7.1 贝叶斯决策论(Bayesian Decision Theory)7.1.1 先验概率(Prior Probability)7.1.2 后验概率(Posterior Probability)7.1.3 似然度(Likelihood)7.1.4 决策规…...
C#WPF嵌套布局实例
本文演示C#WPF嵌套布局实例。演示了不同布局的简单用法,便于快速应用和掌握。 <Windowx:Class="LayoutDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/x…...
Spring和SpringMVC总结
一、Spring IoC(Inversion of Control)中文名称:控制反转(对象的创建交给Spring管理)。DI(dependency injection )依赖注入。容器(Container):放置所有被管理的对象。beans:容器中所有被管理的对…...
C++标准模板(STL)- 类型支持 (类型属性,is_abstract,is_signed,is_unsigned)
类型特性 类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…...
前端复制带上版权信息
前端复制带上版权信息 当用户复制内容时,自动添加版权信息。 HTML内容 <body><h1 inputmode"text">复制我</h1> </body>Js内容 document.addEventListener("copy", (event) > {event.preventDefault(); // 阻止…...
【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)
使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…...
读程序员的制胜技笔记04_有用的反模式(下)
1. 重新发明轮子 1.1. 发明家的特质就是要用质疑的心态对待所有事物,你从未停下质疑,那你将不可避免地成为一个发明家 1.2. 并非所有的事情都有现成的轮子可以拿来用 1.3. 自己重新写一个新的API,最终调用你使用的库 1.3.1. 你的API应该是…...
linux驱动开发环境搭建
使用的是parallel 创建的ubuntu 16.04 ubuntu20.04虚拟机 源码准备 # 先查看本机版本 $ uname -r 5.15.0-86-generic# 搜索相关源码 $ sudo apt-cache search linux-source [sudo] password for showme: linux-source - Linux kernel source with Ubuntu patches linux-sourc…...
Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR
文章目录 1. 开发平台2. 下载文件2.1 下载安装 OpenCV 库2.2 下载安装 Tesseract-OCR库2.3 下载训练好的语言包 3. CMakeLists.txt 内容4. Main.cpp4.1 中英文混合OCR 5. 在Qt Creator 中设置 CMake vcpkg5.1 在初始化配置文件里修改5.2 在构建配置里修改 说明:在Q…...
Day20力扣打卡
打卡记录 数组中两个数的最大异或值(位运算) 链接 二进制位上从高位向低位进行模拟,看数组中是否有满足此情况的数字。具体题解 class Solution { public:int findMaximumXOR(vector<int>& nums) {int mx *max_element(nums.be…...
设计模式之两阶段终止模式
文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式(Two-Phase Termination Pattern)是一种软件设计模式,用于管理线程或进程的生命周期。它包括两个阶段:第一阶段是准备阶段,该阶段用于准备线程或进程…...
Dubbo捕获自定义异常
一.问题描述 Dubbo远程服务提供者抛出的自定义异常无法被消费方正常捕获,消费方捕获的自定义异常全部变成RuntimeException,使用起来很不方便。 二.原因分析 相关源码 /** Licensed to the Apache Software Foundation (ASF) under one or more* con…...
Leetcode刷题详解——求根节点到叶节点数字之和
1. 题目链接:129. 求根节点到叶节点数字之和 2. 题目描述: 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
