计算机网络第四章 网络层数据平面

news2024/12/24 0:38:47

4.0 目录

[TOC]

4.1 概述

  • 作用:主机到主机之间传输TCP segment或UDP datagram

  • 将段封装成IP datagram以及解封装IP datagram【在网络边缘和路由器上都要进行】

A.两大功能:转发+路由
  • 转发:从不同的端口接收数据,再通过合适的端口发送出去

  • 路由:怎么样从源主机一步步选择路径发送到目的主机

  • 转发是一个局部的功能,而路由是一个全局的功能

  • 路由决定了路径,而转发则决定在一个路口走哪个方向

A. 数据平面介绍
  • 负责转发功能

  • 传统方式:直接根据目标地址,查路由表决定从哪个端口发送出去

  • SDN软件定义网络方式:基于多个字段+流表(传统方式只基于IP字段)

B. 控制平面介绍
  • 负责路由的功能

  • 需要通过路由选择协议(RIP,OSPF,BGP)计算出路由表,并交给数据平面进行转发

  • 网络操作系统计算,通过南向接口Southbound Interface交给设备

  • SDN方式下可以有多种操作:转发,阻止Block,泛洪

C. 路由器介绍
C1. 传统模式下
  • 在传统方式下,路由器集成了数据平面与控制平面的实现

  • 在路由器上路由与转发功能是紧耦合的,路由选择协议计算出路由表,并且通过转发功能发送出去。

  • 总体上,数据平面与控制平面都是分布式地完成的

  • 不足:由于数据平面与控制平面是紧耦合的,行为逻辑是非常难改。因为路由器分布在全球,不可能全改,十分僵化

C2. SDN模式
  • 由于流表的计算集成在服务器上,由网络操作系统进行计算,并且通过南向接口传递给每个路由器

  • 因此当需要修改行为逻辑时,只需要修改服务器即可(服务器是集中式分布的,很好修改).而且每种行为都是可编程的

  • SDN模式下的'路由器'叫做:分组交换机

D.常用指标
  • 服务模型 = 所有常用指标对应特定值时,提供服务的描述

  • 如:IP协议啥都不保证,因此其服务模型叫:Best Effort

D1. 对单个数据报
  • 是否可靠:如ATM网络是有连接的网络

  • 有连接和面向连接是不同的,面向连接指的是只有两个端知道连接,而有连接是指中间每一个段节点都得维护连接关系

  • 例如第一章中讲过的的虚电路网络,就通过虚电路表在每个节点都保障连接

  • 延时是多少

D2.对一系列数据报
  • 数据报保序性

  • 保证的带宽

  • 分组延迟差

4.2 路由器组成

  • 传统路由器的结构示意图如下:

A. 输入端口缓存
  • 输入端口缓存的作用:为了匹配进入输入端可能存在的速率不匹配问题

  • 你可能会问:输入端口缓存是为了应对输入的速度比输出的速度大的情况,但是对于输入端口而言,他的输出是给告诉交换机的,怎么可能高速交换机的速度比输入数据的速度还慢?

  • 的确,交换机的速度比输入数据的速度来的快,但是有可能出现头部阻塞的问题,也就是当下有非常多用户都要朝着一个网卡(输出端口)的方向去发送数据报【双十一的时候,都朝着淘宝服务器方向发请求】,那么数据报多了必然会造成排队,因而有必要设置输入端口的缓存

  • 输入端口缓存的示意图如下:

  • 在上图中,B和C端口来的报文都需要转发到紫色的出口,因此就会有报文需要等待,此时输入端口缓存就有用武之地了。

  • 如果缓存区满了,那么数据包就会被直接抛弃掉

B. 交换结构
  • 交换结构主要是在交换机中怎么从输入端口转到输出端口,有三种常见的结构

  • fabric交换机的交换速率一定要是输入端口的N倍(对于有N个输入端口的情况)。例如输入端口的交换速率为1000ppm:Packet Per Minute,且总共有3个输入端口,那么交换机的交换速率v ≥ 3000ppm

B1. Memory
  • 第一代的路由器,相当于直接使用电脑作为交换设备,并且利用系统总线作为交换线路System Bus

  • Memory结构示意图如下:

  • 根据上图可以知道,一个分组传递需要两次经过系统总线,因此系统总线会大大限制交换的速率

B2. Bus总线
  • Bus总线结构改善了Memory问题,分组只需要经过一次总线,且总线也不采用电脑的系统总线,使得分组传输速率大大提升

  • 该结构示意图如下:

B3. CrossBar互联网络
  • CrossBar互联网络结构进一步优化结构,设计了一个类似多路并行的结构,即不同端口之间的数据传输并不需要共用整条总线,再次提升了传输速率,适合用作核心交换设备

  • 结构示意图如下:

C. 输出端口缓存
  • 同样是用来匹配输入和输出的速度的。输出端口缓存比较好理解,因为输入来自高速交换机,输入速度快,而输出速度慢,设置缓存区很有必要。

  • 先来的一定先传吗?

  • 不一定,依照一定的调度规则【见下面的C1】确定其优先级(例如优先传实时多媒体的应用)

C1. 调度方案
  1. FIFO:First in first out按照分组到达的优先次序来发送

  1. RR:Round Robin风水轮流转发送,依照头部等信息把分组分成不同的组别,例如分成红色,蓝色,绿色分组,那么就按照红绿蓝,红绿蓝的顺序依次发送

  1. WFQ: Weight Fair Queuing按照每个类别分组数量的比例,分配服务时间,其实就是RR分配方式的普遍形式

  • 丢弃策略:

  1. tail drop:按照顺序,最晚来的分组被丢弃

  1. priority:根据分组的优先级丢弃分组【可以根据头部等信息分类】

  1. random:随机丢弃分组

4.3 IP协议

A. IP数据报的形式(头部+Body)
  • IP数据报的格式如下图所示:

  • 其中第一个ver是版本号:IPv4或IPv6

  • 第二个时head len代表头部的长度,以四个字节为单位,最小为5【即当头部可选项为空的时候,总共20个字节,因此head len为5】

  • Internet checksum是对头部的校验和

B. IP分片与重组
  • 为什么需要分片?

  • 一个路由器不同接口所连接的网络很可能是不同的,有可能一个网卡连接的是FDDI:Fiber Distributed Data Interface光纤分布式数据接口网络而另外一个网课连接的是EtherNet以太网。而不同的数据链路网络可能会具有不同大小的MTU:Max Transfer Unit最大传输单元

  • 因此,从帧较大的网络转发进入帧较小的网络就需要进行分片,否则无法进行传输。那么分片的时候需要保证IP地址的一致,并通过上面所说的16-bit identifier,flgs,fragment offset字段进行标记

  • 需要进行IP Segmentation的情景如下图所示:

  • IP分片得到的结果,以及对应分片的报文头部字段如下图所示:

  • 需要特别说明的是,报文头部的fragment offset分片偏移量字段是以8个字节为单位的,而不是一个字节,因此上述分片中的偏移量分别是185,370而不是1480,2960

C. IP地址
  • IP地址其实不是用来表示一台设备,而是一台设备中一个网络接口的标识,是标志一个点的

C1. 子网(Subnet)
  • 纯子网

  • 具有相同的前缀(就是IP地址与子网掩码相与得到相同的结果)

  • 且一个子网内部所有主机在通信的时候不需要经过路由器,可以通过交换机等交换结构进行通信(在IP的层面是一跳可达的)

  • 非纯子网

  • 一个比较宏观抽象的概念,在外部的角度看,一定区域内的主机可以构成一个子网,但是里面含有路由器设备

  • 子网内部更高的IP号相同,但每台主机的IP地址与对应的子网掩码号相与等到的结果可能不同

C2. IP地址的分类
  • IP地址约定全0和全1的地址不用来标识主机(全0是本网络,全1是广播地址)

  • 互联网的转发是以整个网络为单位进行计算和转发的

  • 因此对于一个路由器而言,只关心发往哪个网络,而不关心具体哪个主机

  • A类的网络号有7位,主机号共有24位,126个网络,每个网络1600万台主机

  • B类的网络号有14位,主机号共有16位,共有16382个网络,每个网络65534台主机

  • C类的网络号共有21位,主机号共有8位,因此共有200万个网络,每个网络只有254台主机

  • 在上述的分类之下,其实并不需要子网掩码的存在,只需要按照网络的分类取出网络号即可

D. IP编址:CIDR
  • CIDR:Classless InterDomain Routing无类域间路由

  • 由于前面对网络的分类会导致A类网络和B类网络数量很少,很快被分配完了,而数量很多的C类网络主机数量不够。且A类网络和B类网络中存在很严重的资源浪费问题,因此,而CIDR则可以更精准地划分网络规模

  • 但是对于无类的网络,需要标记网络号的位置,因而需要子网掩码(子网掩码中,网络号的对应位全部是1,主机位对应的位全部是0)

E. 转发表与转发的过程
  • 由上图可以知道,转发表需要包括四个字段:网络号,子网掩码,下一跳以及接口(对应的网卡)

  • 首先将源IP地址与转发表中的子网掩码依次相与,看得到的网络号是否有与表中的网络号相匹配的,如果有,则根据表中的下一跳地址交给对应的接口(网卡)

  • 如果所有表象都没能匹配上,那么就匹配default默认网关选项,默认网关一般是子网的出口路由器的方向

  • 注:可能一个网络号可以匹配几个表项,选择最长前缀匹配的原则,进行最精确的匹配

F. IP地址怎么获取?
  • 方法1:由网络管理员直接进行分配,需要分配四个信息:IP地址,子网掩码,默认网关以及Local Name Server本地的名字服务器,用于域名解析(DNS)

  • 方法2(plug-and-play即插即用):利用DHCP:Dynamic Host Configuration Protocol动态主机配置协议,直接获取四个信息IP地址,子网掩码,默认网关以及Local Name Server本地的名字服务器

  • 一台设备利用DHCP获取IP地址的过程如下:

  • 首先当主机上先的时候需要用广播通知整个网路,包括DHCP服务器,但是当时主机还没有IP地址,也没有目的的IP地址,怎么发送报文呢?

  • 直接以全0位源IP地址(代表本主机),并且以全1位目标IP地址,代表广播

  • DHCP通过UDP(事务性的用UDP)给主机发出分配的信息:IP地址,子网掩码,默认网关以及Local Name Server本地的名字服务器以及过期时间,时间到了之后需要更新一下信息

  • 一个机构怎么获得和分配IP地址?

  • 一个机构先从ISP出获取一个IP的网络号

  • 例如,ISP给一个机构分配了20位的网络号,因此有12位可以用来分配给主机,那么该机构又有8个子机构,因此机构可以在12位中分出最高的3位用作子机构的标识,层层分配下去。

G.层次编址:路由聚集(Routing Aggression)
  • 隶属于一个大网络的小子网可以通过路由通告告诉大网络的路由器

  • 例如一个大机构下面有若干子机构,每个子机构的IP都由大机构进行分配,并连接到大机构的路由器,因此整个机构对外其实就可以看成只有大机构一个出口,而不用暴露出每个子机构的IP号,只有当报文到达大机构的路由器时,大机构才根据自己的路由表将数据报文转发给子机构的路由器

  • 当然,机构对外的路由器也可以不只有一个,如下图所示(在匹配的时候依然使用最大前缀匹配的原则):

H. NAT:Network Address Translation
  • 如果一个单位还没有拿到自己独享的IP地址(或者为了节省成本)而且有希望在自己的网络内部部署业务,就可以采用内网的IP,例如最常见的192.168.xxx.xxx就是内网地址

  • 但是内网地址是物联网不承认的地址,因此,内网地址需要经过翻译才能得到互联网所承认的地址,因此需要NAT进行翻译

  • 在数据报出去的时候,我们要替换IP地址和端口号,相当于建立一个内网IP地址,实际端口号与对外的IP地址和对外的端口号之间的映射,当数据报回来的时候就可以通过映射关系发给相应的主机进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPS表格:函数公式

文章目录1. ROW()、ROWS(array)1)ROW()2)ROWS(array)2. COUNT(参数)、COUNTA(参数)、COUNTIF(参数)1)COUNT()2)COUNTA()3)COUNTIF()3. VLOOKUP(参数)、LOOKUP(参数)1)VLOOKUP(参数)2)LOOKUP(向量…

数据分析有发展前景吗?,零基础能学得会吗?

数据分析这门专业是近几年因大数据的出现而产生的新兴职业,分为大数据分析和数据分析师,区别在于大数据分析师要求更高,不仅需要数据分析的基本能力,还要具备编程能力、机器学习技能,以及本身所接触到处理的都是海量数…

webpack打包构建工具的使用和相关的配置

目录 一、 webpack的基础使用步骤 二、webpack的配置 1、入口和出口 2、 webpack打包后自动生成html文件并自动引入打包后的js 3、加载器loader 3.1、处理css文件 3.2、处理less文件 3.3、处理图片文件 3.4、处理字体文字 3.5、处理高版本js语法(降级&#xff…

Linux locate命令

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。一般情况我们只需要输入 locate your_file_name 即可查找指定文件。语法locate [-d ][--help][--version][范本样式...]参数&#xff1a…

Notepad++ 代码格式化插件工具

因为notepad的NppAStyle插件只支持格式化C、C、C#、Java这四种编程语言的代码,所以推荐使用这个CoolFormat的插件,相比于NPPAStyle,CoolFormat支持C\C\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。还可以作为V…

后端java模拟前端RSA.js加密登录爬虫

项目开发过程中,经常会遇到数据爬取需求,但是对于某些网站,由于前端加密,导致数据爬取不容易。比如某网站,前端使用RSA.js加密,并且后端返回对应的公钥的指数和模数,通过后端返回的指数和模数对…

电商如何打开数字化的破局之路

电商网购已经成为我们的日常生活,在如此高节奏的工作下,打开手机或者电脑从网上挑选自己需要的物品,方便快捷,伴随着移动互联网和月的高速发展,电子商务作为现今的产业在我国快速增长和兴起。 如今的电商模式多种多样&…

Elasticsearch7.8.0版本入门——JavaAPI操作(批量操作文档)

目录一、pom文件依赖二、批量操作文档 代码示例2.1、批量创建文档 代码示例2.2、批量删除文档 代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch…

网络分层:OSI模型与TCP/IP模型

前言 这部分个人还是觉得有点难&#xff0c;之前也看过类似的文章&#xff0c;还是没有理解&#xff0c;更多的是概念掌握 OSI模型&#xff1a;Open System Interconnection 这是一个概念模型&#xff0c;存在于理论上&#xff0c;而没有真正实现。需要参考这样的模型&#x…

可以绕过 Windows UAC 吗

目录 一、引言 二、使用 COM 提升名称方法绕过 UAC 2.1 什么样的 COM 组件支持自动提权 2.2 如何以提升名称方法创建 COM 组件对象 2.3 有了权限提升的 COM 组件对象后&#xff0c;怎么为我们所用呢 2.4 使用 rundll32.exe 执行 COM 提升名称代码 2.4.1 rundll32.exe 简…

Qt使用QTextEdit来批量添加数据到数据库中

1.首先要了解QTextEdit的遍历方式 在下面的文章中已经介绍&#xff0c;这里就不在介绍了&#xff1a; 富文本处理&#xff08;QTextEdit&#xff09;_旷工锁的博客-CSDN博客_qtextedit 富文本 基本步骤为&#xff1a; 创建一个QTextEdit使用QTextDocument来获取QTextEdit中的…

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…

【MySQL】MySQL高手是如何练成的?

MySQL什么是MySQL呢&#xff1f;怎样练成MySQL高手&#xff1f;在Linux安装MySQL问题处理Mysql 的用户管理什么是MySQL呢&#xff1f; Mysql 是开源的&#xff0c;可以定制的&#xff0c;采用了 GPL 协议&#xff0c;可以根据业务需要修改源码来开发自己的 Mysql 系统。 MySQL…

彻底弄懂图片懒加载及底层实现原理

我们都知道图片懒加载是前端性能优化比较常见的一个手段&#xff0c;那么&#xff0c;你真的了解图片懒加载吗&#xff0c;本文将带你从简单到复杂一步一步彻底弄懂其底层实现原理。试想一下&#xff0c;假设用户在访问我们的某个页面时&#xff0c;一开始就加载页面的全部图片…