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

news2024/11/23 23:40:41

前文回顾:第三章:传输层

  • 运输层依赖于网络层的主机到主机的通信服务,提供各种形式的进程到进程的通信。
  • 网络层与传输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。正因如此,网络层协议是协议栈中最具挑战性的部分。
  • 网络层分为数据平面和控制平面,本章节先学习数据平面,即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一。

目录

📚网络层概述

🐇转发和路由选择

🐇网络服务模型

📚路由器工作原理

🐇输入端口处理和基于目的地转发

🐇交换

🐇输出端口处理

🐇何处出现排队

🥕输入排队

🥕输出排队

🐇分组调度

🥕先进先出

🥕优先权排队

🥕循环和加权公平排队

📚网际协议:IPv4、寻址、IPv6及其他

🐇IPv4数据报格式

🐇IPv4数据报分片

🐇IPv4编址

🐇网络地址转换

🐇IPv6

📚通用转发和SDN

🐇匹配

🐇动作

📚小结


📚网络层概述

🐇转发和路由选择

网络层的作用:将分组从一台发送主机移动到一台接收主机。

转发路由选择
当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路 。当分组从发送方流向接收方时,网络层必须决定这些分组采用的路由或路径。计算这些路径的算法被称为路由选择算法 。

将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作

指确定分组从源到目的地所采取的端到端路径的网络范围处理过程
转发发生的时间尺度很短(通常为几纳秒),因此通常用硬件来实现。路由选择发生的时间尺度长得多(通常为几秒),因此通常用软件来实现。
  • 我们可以认为转发就像通过单个立交桥的过程:一辆汽车从其道路上进入立交桥的一个入口,并且决定应当走那条路来离开该立交桥。
  • 我们可以把路由选择看作是规划从北京到上海行程的过程:在着手行程之前,驾驶员已经查阅了地图并在许多可能的路径中选择了一条,其中每条路径都有一系列经立交桥连接的路段组成。

每台网络路由器中有一个关键元素就是它的转发表。路由器检查分组首部字段值来转发分组,使用该值在转发表索引查询。该值指出了该分组将被转发的路由器输出链路接口

转发是由网络层的数据平面执行的主要功能,路由选择算法决定了插入路由器转发表中的值。

🐇网络服务模型

网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性。网络层能提供的某些可能的服务,这些服务(IP并没有这些服务 )可能包括:

  • 确保交付。该服务确保分组将最终到达目的地。
  • 具有时延上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内交付。
  • 有序分组交付。该服务确保分组以它们发送的顺序到达目的地。
  • 确保最小带宽。这种网络层服务模仿在发送和接收主机之间一条特定比特率的传输链路的行为。只要发送主机以低于特定比特率的速率传输比特,则所有分组最终会交付到目的主机。
  • 安全性。网络层能够在源加密所有数据报并在目的地解密这些分组,从而对所有运输层报文段提供机密性。

因特网的网络层IP协议提供单一服务,尽力而为服务,无带宽保证,无丢包保证,无顺序保证,不定时,无拥塞指示。

📚路由器工作原理

我们将约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段的值,从输入链路接口到输出链路接口转移分组。

  • 某些分组交换机称为链路层交换机(详见后续第六章),基于链路层帧中的字段值做出转发决定,这些交换机因此被称为链路层设备。
  • 其他分组交换机称为路由器,基于网络层数据报中的首部字段值做出转发决定。

  • 输入端口
    • 在路由器中执行终结入物理链路的物理层功能
    • 与位于入链路远端的数据链路层交互的数据链路层功能
    • 在输入端口完成查找功能 。通过查询转发表决定路由器的输出端口。
    • 控制分组从输入端口转发到路由选择处理器。
  • 交换结构:将路由的输入端口与输出端口相连接。
  • 输出端口:从交换结构接收分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
  • 路由选择处理器:执行路由选择协议,维护路由选择表以及连接的链路状态信息,并为路由器计算转发表。还执行网络管理功能。

🐇输入端口处理和基于目的地转发

  • 输入端口的线路端接功能链路层处理实现了用于各种输入链路的物理层和链路层
  • 路由器使用转发表来查找输出端口,使得到达的分组能经过交换结构转发到该输出端口。
  • 转发表是由路由选择处理器计算和更新的,从路由选择处理器经过独立总线复制到(输入)线路卡(影子副本)。 有了转发表副本,转发决策能在每个输入端口本地做出,无须调动路由选择处理器,避免集中式处理 。
  • 查找确定了某分组输出端口,分组就能发送进入交换结构。一个被阻塞的分组必须在输入端口处排队

怎样处理规模问题⭐️?

在32比特IP地址的情况下,假设我们的路由器具有4条链路,编号0到3,分组以如下方式转发到链路接口:

 但显然,路由器的转发表中没有必要有40亿个表项。我们可以用以下仅包括4个表项的转发表:

即路由器用分组目的地址的前缀与该表中的表项进行匹配 。


一个目的地址可能与不止一个表项相匹配⭐️?

例如,地址11001000 00010111 000111000 10101010的前24比特与表中的第二项(即链路接口1)匹配,而该地址的前21比特与表中的第三项匹配。当有多个匹配时,该路由器使用最长前缀匹配规则。即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。

如此,假定转发表已存在,硬件逻辑只需要搜索转发表查找最长前缀匹配。但在吉比特速率下,这种查找必须在纳秒级执行。

  • 因此,不仅要用硬件执行查找,而且需要对大型转发表使用超出简单线性搜索的技术
  • 同时必须对内存访问时间给予特别关注,这导致用嵌入式片上DRAM和更快的SRAM内存来设计。实践中也警察使用三态内容可寻址存储器(TCAM)来查找。

输入端口查找目的IP地址(“匹配”),然后发送该分组进入交换结构(“动作”)的步骤是一种更为一般的“匹配加动作”抽象的特定情况,这种抽象在许多网络设备中执行,而不仅在路由器中。

🐇交换

交换结构位于一台路由器的核心部位,正是通过这种交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中。交换可以用许多方式完成:

  • 经内存交换
    • 一个分组到达输入端口时,该端口先通过中断方式向路由选择处理器发出信号。
    • 于是,该分组从输入端口被复制到处理器内存中。
    • 路由选择处理器从其首部中提取目的地址,在转发表中查找输出端口,并将该分组复制到输出端口的缓存中
    • 不能同时转发两个分组,即使它们有不同的端口号,因为经过共享系统总线一次仅能执行一个内存读/写。
  • 经总线交换
    • 输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。
    • 让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。
    • 该分组能由所有输出端口收到但只有与该标签匹配的端口才能保存该分组。
    • 然后标签在输出端口被去除
    • 一次只有一个分组能够跨越总线,其余分组必须等待。
  • 经互联网络交换:克服单一、共享式总线带宽限制的一种方法是使用一个更复杂的互联网络。
    • 如上图,每条垂直的总线和水平的总线在交叉点处交叉,交叉点通过交换结构控制器(其逻辑是交换结构自身的一部分)能够在任何时候开启和闭合。
    • 当某分组到达端口A,需要转发到端口Y时,交换机控制器闭合总线A和Y交叉部位的交叉点,然后端口A在其总线上发送该分组,该分组仅由总线Y接收。此时,来自端口B的一个分组在同一时间能够转发到端口X,因为A到Y和B到X的分组使用不同的输入输出总线
    • 因此,与前面两种交换方法不同,纵横式网络能够并行转发多个分组。纵横式交换机是非阻塞的,即只要没有其他分组当前被转发到该输出端口,转发到输出端口的分组将不会被到达输出端口的分组阻塞。
    • 若来自两个不同输入端口的两个分组其目的地为相同的输出端口则一个分组必须在输入端等待。因为在某个时刻经给定总线仅有一个分组能够发送。

🐇输出端口处理

基本执行的是和输入端口相反的操作。取出存放在输出端口缓存中的分组并将其发送到输出链路上。包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。

🐇何处出现排队

在输入和输出端口都能够形成分组队列。随着这些队列的增长,路由器的缓存空间最终将会耗尽,此时如果有新的分组到达,会导致丢包 (packet loss)

🥕输入排队

  • 如果交换结构的处理速度没有输入队列到达的速度快,在这种情况下,输入端口将会出现排队情况,到达交换结构前的分组会加入输入端口队列中,以等待通过交换结构传送到输出端口。
  • 为了描述清楚输入队列,我们假设以下情况:
    • 使用网络互联的交换方式;
    • 假定所有链路速度相同;
    • 一个分组能够以一条输入链路接收一个分组所用的相同的时间量,从任意一个输入端口传送到给定的输出端口;
    • 分组按照 FCFS 的方式,只要输出端口不同,就可以进行并行传送。

  • 在 A 队列中,输入队列中的两个分组会发送至同一个目的地 X,假设在交换结构正要发送 A 中的分组,在这个时候,C 队列中也有一个分组发送至 X,在这种情况下,C 中发送至 X 的分组将会等待,不仅如此,C 队列中发送至 Y 输出端口的分组也会等待,即使 Y 中没有出现竞争的情况。这种现象叫做线路前部阻塞(Head-Of-The-Line, HOL)

🥕输出排队

  • 假设线路速度相同,交换机以3倍于线路速度的速度运行。
  • 因为输出端口在一个单位时间内只能传输一个分组,那么N个分组将会等待。然而在等待 N 个分组被处理的过程中,同时又有 N 个分组到达,所以 ,分组队列能够在输出端口形成。这种情况下最终会因为分组数量变的足够大,从而耗尽输出端口的可用内存。
  • 如果没有足够的内存来缓存分组的话,就必须考虑其他的方式,主要有两种:一种是丢失分组,采用弃尾(drop-tail) 的方法;一种是删除一个或多个已经排队的分组,从而来为新的分组腾出空间
  • 在某些情况下,在缓冲填满之前便丢弃一个分组的做法是有利的,这可以向发送方提供一个拥塞信号。

  • 如上图所示,A B C 每个输入端口都到达了一个分组,而且这个分组都是发往 X 的。
  • 一个时间单位以后,所有三个初始分组都被传送到输出端口,并排队等待传输。在下一个时间单位中,这三个分组中的一个将通过输出链路发送出去。
  • 在这个例子中,又有两个新分组已到达交换机的入端;这些分组之一要发往最上侧的输出端口。输出端口的分组调度会在这些排队分组中选择一个分组来传输。

🐇分组调度

分组调度是确定次序的问题,即排队的分组如何经输出链路传输的问题。

🥕先进先出

  • 先进先出映射为数据结构中的队列,排队模型的抽象。
  • FIFO 调度规则按照分组到达输出链路队列的相同次序来选择分组在链路上传输,先到达队列的分组将先会被转发。在这种抽象模型中,如果队列已满,那么弃尾的分组将是队列末尾的后面一个。 

🥕优先权排队

  • 优先级排队是先进先出的改良版本,到达输出链路的分组被分类放入输出队列中的优先权类。
  • 当选择一个分组传输时,优先权规则将从队列为非空的最高优先权类中传输一个分组。在同一优先权类的分组之间的选择通常以FIFO方式完成。

  •  在非抢占式优先权排队规则下,一旦分组开始传输,就不能打断。

🥕循环和加权公平排队

  • 分组像使用优先级那样被分类。然而,在类之间却不存在严格的服务优先权。循环调度器在这些类之间循环轮流提供服务。相当于平级的小组,一组一次轮着来(如果有轮换需求的话)。

📚网际协议:IPv4、寻址、IPv6及其他

🐇IPv4数据报格式

  • 版本号(IPv4、IPv6):不同IP版本使用不同的数据报格式。
  • 首部长度:数据报可包含可变数量的选项。不过大多数数据报不包含选项,所以一般的IP数据报具有20字节的首部。
  • 服务类型:区分不同类型的IP数据报。
  • 数据报长度:首部+数据的长度。该字段16bit,然而一般数据报很少超过1500字节。
  • 标识、标志、片偏移:IP分片相关。不过IPv6不允许在路由器上对分组分片。
  • 寿命TTL:寿命字段确保数据报不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1。若TTL字段减为0,则该数据报必须丢弃。
  • 协议:到达最终目的地才有用,指示了IP数据报的数据部分应该交给哪个特定的运输层协议。如6交给TCP,如17交给UDP。协议号是将网络层与运输层绑定到一起的粘合剂;端口号是将运输层和应用层绑定的粘合剂。
  • 首部检验和:帮忙路由器检测收到IP数据报中首部的比特错误,有错一般丢弃。每台路由器上必须重新计算检验和。IP层仅对IP首部计算检验和,而TCP/UDP检验和是对整个TCP/UDP报文段进行的。
  • 源和目的IP地址:源主机通过DNS查找目的地址。
  • 选项:选项字段允许IP首部被扩展,IPv6已抛弃选项字段。
  • 数据(有效载荷):在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP或UDP),或ICMP报文段。
  • 一个IP数据报有长为20字节的首部,如果数据报承载一个TCP报文段,则每个无分片数据报承载总长40字节的首部(20字节的IP首部加上20字节的TCP首部)以及应用层报文。

🐇IPv4数据报分片

为什么要分片⭐️?

  • 并不是所有链路层协议都能承载相同长度的网络层分组。例如以太网帧能够承载不超过1500字节的数据,而某些广域网链路的帧能够承载不超过576字节的数据。
  • 一个链路层帧能够承载的最大数据量叫作最大传送单元MTU。
  • 因为每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器中,所以链路层协议的MTU严格地限制着IP数据报的长度。对IP数据报长度具有严格的限制并不是主要问题。
  • 主要问题是在发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。

分片的应用场景⭐️?

假定你从某条链路收到一个IP数据报,通过检查转发表确定出链路,并且该条出链路的MTU比IP数据报的长度小。那该怎么办?

  • 将IP数据报中的数据分片成两个或多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧。每个较小的数据报都被称为片。

怎么进行分片⭐️?

正如前面所说,要满足MTU的要求,就要把数据报分片去传输,那既然要分片,肯定就需要组装。为了不影响路由器的性能,设计者决定将这些数据报的重新组装工作放到端系统,而不是放在路由器。

  • 标识:当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。发送主机为它发送的每个数据报的标识号加1。当目的地从同一发送主机收到一系列的数据报时,能够检查数据报的标识号来确定哪些数据报实际上是同一数据段的片
  • 标志:IP是一个不可靠的服务,一个或多个片可能永远到达不了目的地。为了让目的主机绝对地相信它已经收到它收到了初始数据段的最后一个片, 最后一个片的标志比特设置为0,其他它片的标志为1。
  • 偏移字段:为了让目的主机确定是否丢失了一个片(且能够按照正确的顺序重新组装片),使用偏移字段指定该片应该放在初始IP数据报的哪个位置

🐇IPv4编址

主机与路由器连入网络的方法⭐️?

  • 一台主机通常只有一条链路连接到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。
  • 主机与物理链路的边界叫接口,一台路由器有多个接口,每个接口有其链路。
  • 因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器都有自己的IP地址
  • 因此一个IP地址实际上是与每一个接口相关联,而不是与包括该接口的主机或路由器相关联。
  • 每个IP地址长度32bit(4字节),总共2^32个可能的IP地址,约40亿个。这些地址通常按照所谓点分十进制记法书写,如193.32.216.9。

  • 一个接口的IP地址的一部分需要由其连接的子网决定。如互联3个主机接口与1个路由器接口的网络形成一个子网,IP编址为这个子网分配一个地址:223.1.1.0/24,/24记法称为子网掩码,指示了32bit中的最左侧24bit定义了子网地址。

  • 为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点,这些隔离的网络中每一个都叫做一个子网。

  • 因特网地址分配策略:无类别域间路由选择CDIR。CDIR将子网寻址的概念一般化了。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。
  • a.b.c.d/x的地址的x最高比特构成IP地址的网络部分,称为该地址的前缀,一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。BGP路由选择协议中,该组织网络外的路由器仅考虑x,减少了转发表的长度,因为形式为a.b.c.d/x单一表项足以将数据报转发到该组织内的任何目的地。
  • 地址聚合(路由聚合:使用单个网络前缀通告多个网络的能力。



如何获取地址、分配地址⭐️?

  • 获取一块地址
    • 子网获取IP地址:由ISP从它大块地址中分配 ISP获取IP地址——IP地址由因特网名字和编号分配机构ICANN管理(也管理DNS根服务器、AS标识号)。
    • ICANN向区域性因特网注册机构分配地址,处理本地域内的地址分配/管理。
  • 获取主机地址:动态主机配置协议
    • 某组织一旦获得了一块地址,它就可为组织内的主机、路由器接口逐个分配IP地址。
    • 主机地址能手动配置,但是这项任务目前更多的是使用动态主机配置协议DHCP来完成。

动态主机配置协议DHCP---UDP

  • DHCP允许主机自动获取一个IP地址。
  • 网络管理员能够配置DHCP,以使主机每次连网获得相同IP地址,也可每次分配一个临时IP地址
  • DHCP允许主机查看子网掩码、默认网关(第一跳路由器地址)、本地DNS服务器地址。
  • DHCP具有将主机连接进一个网络的网络相关方面的自动能力,常被称为即插即用协议零配置协议。
  • DHCP是一个客户-服务器协议。客户通常是新到达的主机,它要获得包括自身使用的IP地址在内的网络配置信息。
  • 在最简单场合下,每个子网都有一台DHCP服务器。若子网没有DHCP服务器,则由一个路由器做DHCP中继代理,该代理知道该网络的DHCP服务器地址。

 新主机到来时,DHCP协议的四个步骤

  • DHCP服务器发现
    • 一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。
    • 这可通过使用DHCP发现报文来完成,客户在UDP分组中向端口67发送该发现报文。该UDP分组封装在一个IP数据报中。
    • 必须用广播目的地址255.255.255.255,源地址是0.0.0.0 ​
    • DCHP客户将该IP数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点。
  • DHCP服务器提供
    • DHCP收到DHCP发现报文后,响应一个DHCP提供报文,仍然使用广播地址,因为此时新客户并没有IP地址。​
    • 可能有多台DHCP服务器,每台服务器提供的报文中,有向客户主机推荐的IP地址、网络掩码以及IP地址租用期(一般几天或几小时)。
  • DHCP请求
    • 新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数
  • DHCP ACK
    • 服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所传参数 ​

客户收到ACK后,交互完成,在租期内使用DHCP分配的IP地址。DHCP提供了机制允许客户更新对一个IP地址的租用。当一个移动结点在子网之间移动时,就不能维持与远程应用的TCP连接。

🐇网络地址转换

应用场景

  • 地址10.0.0.0/8是保留的3个IP地址空间之一,这些地址用于家庭网络等专用网络具有专用地址的地域。具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。
  • 当ISP已经为SOHO网络当前地址范围分配过一块连续地址,而SOHO内主机越来也多时,需要用到NAT(比如电信给我们家里分配一个动态IP地址,但家里头要好几台手机电脑联网需要用一个IP地址,则需要用到NAT)
  • NAT路由器对外界来看像一个具有单一IP地址的单一设备。例如,家里有一个NAT使能路由器,其IP地址138.76.29.7(如下图),且进入和离开家庭的报文都有同样的该地址。
  • NAT路由器对外隐藏了家庭网络的细节。
  • NAT路由器从ISP的DHCP服务器得到它的地址,并且路由器运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的主机提供地址。

NAT转换表中的WAN端指的是公网接口,也就是连接Internet的那一侧;而LAN端则指的是私有网络接口,也就是连接内部局域网的那一侧。在NAT转换表中,通过记录WAN端和LAN端之间的映射关系,实现了内部网络与外部网络的通信。

NAT通俗的理解就是如果我们每人一个公网IP地址的话,IPv4是不够分配的。但是通过NAT协议就可以将一个公网IP转化为多个内网IP,从而完美地解决了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

🐇IPv6

IPv4地址有耗尽的时候,开发IPv6的同时也可升级强化IPv4某些方面。

 IPv6数据报格式(改进的地方)⭐️

  • 扩大的地址容量
    • 从32bit变为了128bit,这样就用不完了。
    • 除了单播多播地址,引入任播地址,使数据报交付给一组主机中的任意一个。
  • 简化高效的40字节首部
  • 流标签与优先级。 如音频流、视频流、高优先级用户承载的流量。
  • 分片/重组。 只能在源与目的地进行。
  • 选项放到了『下一个首部』位置,使得IP首部定长40字节
  • 去除首部检验和。

  IPv6字段⭐️

  • 版本:不同的IP协议版本使用不同的数据报格式。
  • 流量类型:使得源节点和路由器能够识别IPv6信息包的优先级。与IPv4服务类型TOS字段含义类似。
  • 流标签:标记那些需要IPv6路由器特殊处理(如一种非默认服务质量或实时服务)的信息包顺序。
  • 有效负载长度:定长40字节数据报首部后面的字节数量,包括扩展报头和负载数据,
  • 下一个首部:当IPv6没有扩展报头时,该字段的作用和IPv4的上层协议字段一样。当含有扩展报头时,该字段的值即为第一个扩展报头的类型。
  • 跳限制:转发数据报的每台路由器对该字段的值减1,若减为0则丢弃该数据报。
  • 源和目的IP地址(Source/Destination Address)
  • 数据:当数据报到达目的地时,该有效载荷就从IP数据报移出,并交给下一个首部字段中指定的协议。

IPv4到IPv6的迁移

  • 双栈:同时使用IPv4和IPv6,这种结点有两种地址。DNS可解析两种地址。如果发送方和接收方中任意一个仅为IPv4使能的,则必须使用IPv4数据报。

📚通用转发和SDN

回顾基于目的地转发的特征总结为两个步骤:查找目的地址(“匹配”),然后将分组发送到有特定输出端口的交换结构(“动作”)。

现在我们考虑另外一种方式,通过通用的“匹配加动作”范式来进行:

  • 对协议栈中的多个首部字段进行“匹配”,这些首部字段是与不同层次的不同协议相关联的。
  • 然后执行“动作”,包括将分组转发到一个或多个输出端口(就像在基于目的地转发中一样),跨越多个通向服务的离开接口进行负载均衡分组,重写首部值(就像在NAT中一样),有意识地阻拦/丢弃某个分组(就像在防火墙中一样),为进一步处理和动作而向某个特定的服务器发送一个分组等等。

OpenFlow是一个得到高度认可和成功的标准,他已经称为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的先驱。匹配加动作转发表在OpenFlow中称为流表,它的每个表项包括:

  • 首部字段值的集合:入分组将与之匹配。
  • 计数器集合:计数器可以包括已经与该表项匹配的分组数量以及自从该表项上次更新以来的时间。
  • 当匹配分配流表项时所采取的动作集合:这些动作可能将分组转发到给定的输出端口、丢弃该分组、复制该分组和将它们发送到多个输出端口以及重写所选的首部字段。

🐇匹配

  • 到达一台分组交换机的一个链路层帧将包含一个网络层数据报作为其有效载荷,该载荷通常依次将包含一个运输层报文段。
  • 入端口是指分组交换机上接受分组的输入端口,流表项也可以有通配符。

🐇动作

每个流表项都有零个或多个动作列表:

  • 转发:一个入分组可以转发到一个特定的物理输出端口,广播到所有端口,或通过所选的端口集合进行多播。该分组可能被封装并发送用于该设备的远程控制器,该控制器则可能对该分组采取某些动作。
  • 丢弃:没有动作的流表项表明某个匹配的分组应当被丢弃。
  • 修改字段:在分组被转发到所选的输出端口之前,分组的首部10个字段中的值可以重写。

📚小结

在本章中,我们讨论了网络层的数据平面功能,即每台路由器的如下功能:

  • 决定到达路由器的输入链路之一的分组如何转发到该路由器的输出链路之一。
  • 我们从仔细观察路由器的内部操作开始,学习输入和输出端口功能,以及基于目的地的转发、路由器的内部交换机制、分组排队管理等等。
  • 我们涉及传统的IP转发(其中转发基于数据报的目的地址进行)和通用转发(其中转发和其他功能可以使用数据报首部中的几个不同的字段值来进行)。
  • 我们还详细地学习了IPv4和IPv6协议以及因特网编址。

参考博客

  • 路由器体系结构
  • VLSM 与CIDR的比较/什么是CIDR/什么是VLSM

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

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

相关文章

metaRTC+ZLMediaKit实现webrtc的推拉流

概述 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架,是一个支持webrtc SFU的优秀的流媒体服务器系统。 metaRTC新版本支持whip/whep协议,支持whip/whep协议的ZLMediaKit推拉流。 信令通信 ZLMediaKit新版本支持whip和whep协议,支…

065:cesium设置带有箭头的线材质(material-9)

第065个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置带有箭头的线材质,请参考源代码,了解PolylineArrowMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共82行)相关API参考…

Microsoft Office 2010安装

哈喽,大家好。今天一起学习的是office2010的安装,有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统:Windows 7 不建议win10及以上操作系统使用 系统类型:64位 演示版本:SW_DVD5_Office_Profession…

Ceres简介及示例(9)On Derivatives(Numeric derivatives)

使用analytic derivatives的另一个极端是使用numeric derivatives。关键是,对函数f(x)关于x的求导过程可以写成极限形式: Forward Differences前向差分 当然,在计算机中,我们不能执行数值求极限操作,所以我们要做的是&#xff0…

squid的基本代理

一、Squid代理服务器的概述 squid 作为一款服务器代理工具,可以缓存网页对象,减少重复请求,从而达到加快网页访问速度,隐藏客户机真实IP,更为安全。 Squid主要提供缓存加速、应用层过滤控制的功能 1、squid代理的工…

攻击者使用“Geacon”Cobalt Strike工具瞄准macOS

威胁行为者现在正在部署一种名为 Geacon 的 Cobalt Strike 的 Go 语言实现,它于四年前首次出现在 GitHub 上。 他们正在使用红队和攻击模拟工具来针对 macOS 系统,其方式与过去几年在 Windows 平台上使用 Cobalt Strike 进行后开发活动的方式大致相同。…

Rust每日一练(Leetday0007) 删除结点、有效括号、合并链表

目录 19. 删除链表的倒数第 N 个结点 Remove-nth-node-from-end-of-list 🌟🌟 20. 有效的括号 Valid Parentheses 🌟 21. 合并两个有序链表 Mmerge-two-sorted-lists 🌟 🌟 每日一练刷题专栏 🌟 Ru…

web搭建服务器端+创建web后端项目详细步骤

一、搭建服务器端 Web服务器:用于响应来自Web客户端(如浏览器、移动应用程序等)的请求并提供Web页面和其他Web资源的软件程序或计算机系统。它允许用户在Web浏览器中输入网址,通过HTTP协议向服务器发送请求,并收到Web页…

用原生JS实现虚拟列表(IT枫斗者)

用原生JS实现虚拟列表 介绍 最近在开发需求的时候,有用到 Antd 的虚拟列表组件 rc-virtual-list ,粗略地看了一下源码,于是萌生了自己写一个虚拟列表的想法。当一个列表需要渲染大量数据的时候是非常耗时的,而且在列表滚动的过程…

Golang每日一练(leetDay0073) 实现前缀树、最短子数组

目录 208. 实现 Trie (前缀树) Implement-trie-prefix-tree 🌟🌟 209. 长度最小的子数组 Minimum-size-subarray-sum 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每…

多线程的三种创建方式及各自的优缺点分析

第一种方式:继承Thread类,覆写run()方法 1、创建一个MyThread类,继承Thread类; 2、覆写run()方法,在run()方法内编写任务代码; 3、创建MyThread类,需要注意的是,如果想要给线程命名…

传染病学模型 | Matlab实现SI传染病学模型 (SI Epidemic Model)

文章目录 效果一览基本描述模型介绍程序设计参考资料效果一览 基本描述 传染病学模型 | Matlab实现SI传染病学模型 (SI Epidemic Model) 模型介绍 SI传染病模型是一种基于微分方程的流行病学模型,用于模拟传染病在人群中的传播过程。SI模型中,人群被划分为易感者(S)和感染者…

来 Azure 学习 OpenAI 四 - 用 Embedding 赋能 GPT

大家好,我是学生大使 Jambo。在我们前一篇文章中,我们介绍了 OpenAI 模型的调用。今天,我将为大家介绍 Embedding 的使用。 嵌入是什么 嵌入(Embedding )是一种将高维数据映射到低维空间的方法。嵌入可以将高维数据可…

第一章 初识Python

1.1 课前必读 课程大纲 1.2 Python介绍 Python特点: 主流语言;用途广泛,号称万能语言;上手简单; Python用途: 数据挖掘(爬虫)和数据分析自动化脚本编写(软件测试人员使用…

尚硅谷周阳老师 SpringCloud第二季学习笔记

前言:首先感谢尚硅谷周阳老师的讲解,让我对springcloud有了很好的理解,周阳老师的讲课风格真的很喜欢,内容充实也很幽默,随口一说就是一个段子,我也算是周阳老师的忠实粉丝啦。 先说说课程总体内容 以下是…

[学习笔记] [机器学习] 6. [上]决策树算法(熵Entropy、信息增益(率)、基尼值(指数)、CART剪枝、特征工程特征提取、回归决策树)

视频链接数据集下载地址:无需下载 学习目标: 掌握决策树实现过程知道信息熵的公式以及作用知道信息增益、信息增益率和基尼指数的作用知道id3、c4.5、cart算法的区别了解cart剪枝的作用知道特征提取的作用应用DecisionTreeClassifier实现决策树分类 1…

开放原子训练营(第三季)inBuilder低代码开发实验室,低代码到底该长什么样

目录 前言: 一、什么是inBuilder低代码开发实验室 二、技术特征 2.1开放性 2.2开发语言无关性 2.3云原生 2.4模型工程化 2.5全栈模型刻画 2.6运行态定制 2.7仓库介绍 三、快速入门 四、实操案例 4.1定义数据源 4.2 设计页面 4.3发布调试 五、总结 前言&#xf…

Activiti实战——Springboot整合Activiti

目录 一、Activiti数据库表名说明 二、Spring boot整合activiti 1. 创建springboot项目 2. 引入activiti依赖及项目依赖 3. 配置数据源 (1)创建数据源配置文件 (2)配置文件 4. 配置Acitviti引擎 5. 启动项目 三、Activiti…

【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句

目录 一、MySQL 应该掌握哪些知识点 ?二、数据库相关概念三、主流关系型数据库管理系统四、关系型数据库五、SQL 语句的分类六、DDL(1) 数据库操作(2) 表操作(3) 字段的数据类型(4) 创建员工表(5) 修改表结构(6) 删除某一张表 七、DML八、DQL(1) 员工表(2) distinct…

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用 1 Nin-Net的简述 1.1 Nin-Net的概述 LeNet、AlexNet和VGG都有⼀个共同的设计模式:通过⼀系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进⾏处理。AlexNet和VGG对Le…