计算机网络:自顶向下方法——第四、五章 网络层

发布于:2025-03-06 ⋅ 阅读:(13) ⋅ 点赞:(0)

本博客是通过学习中国科大郑烇老师的计算机网络课程所写的笔记

网络层的两个主要功能是:转发(数据平面)和路由(控制平面),其中转发有传统SDN两种模式

  • 转发:当一个分组通过某条输入链路到达路由器时,该路由器必须将该分组移动到何时的输出链路
  • 路由:使用路由算法来决定分组从发送主机到目标接收主机的路径(路由选择算法、路由选择协议),即按照某种指标(传输延迟,所经过的站点数目等)找到一条从源节点到目标节点的较好路径

网络层提供的”尽力而为“的服务,即不保证最终的交付、不保证按照发送顺序被接收、不保证端到端的时延、不保证最小带宽。一句话,就是啥都不保证,不可靠!

一、网络层:数据平面

1.1、路由器工作原理

1.1.1、路由器体系结构

1.1.2、交换

  • 经内存交换

交换是在CPU(路由选择处理器)的直接控制下完成的。

将分组从输入端口赋值到处理器内存中,处理器依据首部目的地址,在转发表中查找适当的输出端口,并将该分组复制到输出端口的缓存中

现代的内存交换,目的地址的查询和分组交换到适当的内存存储位置,是由输出线路卡处理

  • 经总线交换

输入宽口为分组预先贴上路由器内部标签(用来指示输出端口),分组通过总线传输,每个接收端均可收到该分组,但是只有与标签相匹配的输出端口才保存该分组

一次只能有一个分组跨越总线,故当多个分组到达路由器时,除一个分组外,其它分组均需等待。因此,路由器的交换带宽受到总线速率的限制

  • 经互联网络交换

由2*N条总线组成互联网络,连接N个输入端口和N个输出端口

每条垂直的总线在交叉点与每条水平的总线交叉,交叉点通过交换结构控制器能开启/闭合交叉点

此时,可以并行转发多个分组,但是,当输出端口一样的多个分组,则一次只能转发一个分组

1.1.3、分组缓存

当缓存已满时,新来的分组将被丢弃

  • 输入排队

当通过数据链路层进入输入端口的速率大于分组转发到输出端口的速率,那么分组将被暂时存放在输入端口的缓存队列中

  • 输出排队

当通过交换结构进入输出端口的速率大于分组转发到数据链路层的速率,那么分组将被暂时存放在输出端口的缓存队列中

  • 需要多少缓存

B=RTT*C/N^{1/2}

其中,B为缓存数量,RTT为链路平均往返时延,C为链路容量,N为同时流过一条链路的流的数量

1.1.4、分组调度

排队的分组如何经输出链路传输?

  • 先进先出

先到来的分组,先转发

  • 优先权排队

到达输出链路的分组被分类放入输出队列的优先权类中,每个优先权都由自己的队列

当有高优先权队列不为空时,先传输高优先权

当低优先权分组在传输时,高优先权分组到来,非抢占式优先权排队规则下,分组传输不能被打断

  • 循环和加权公平排队

循环排队的分组也像优先权排队那样被分类,然而类之间并不存在严格的服务优先权,循环调度器在类之间轮流提供服务

加权公平排队(WFQ),每个类在任何时间间隔内可能收到不同数量的服务,每个类i被分配w_{i}。在类i有分组发送的时候,类i确保接收到服务部分等于w_{i}/\left ( \sum w_{j} \right )。那么对于传输速率等于R的链路,类i总能获得至少R*w_{i}/\left ( \sum w_{j} \right )的吞吐量

1.2、网际协议:IPv4、寻址、IPv6

1.2.1、IPv4报文格式

IPv4报文格式:

  • 版本:该4比特规定了数据报的IP协议版本,如IPv4、IPv6
  • 首部长度:IP数据报的头部包含可变数量选项,故需要此部分来确定IP数据报中载荷的开始
  • 服务类型:以便将不同IP数据报区分开
  • 数据报长度:IP数据报总长度,以字节为单位,一般最大长度为1500B
  • 16比特标识、标志、13比特片偏移:与数据包分片有关

        发送方与目的地路径上的每段链路可能使用不同的链路层协议、且每种协议可能具有不同的 MTU(最大传送单元)。当出链路的MTU比该IP数据报的长度要小,需要对该IP数据报进行分片。

        发送主机通常将它发送的每个数据报的标识号加 1,由同一个数据报经过分片得到的数据报具有相同的标识。由于传输并不保证有序性,故而使用标识来标识数据报的最后一个分片,最后一个分片标志为0,其它分片标志为1。为了能在接收方进行合理拼接,提供了片偏移,以供接收方判断分片的拼接顺序。

  • 寿命:确保数据报不会永远在网络中循环,每经过一个路由器,寿命值减1,当减为0时,该报文将被丢弃
  • 上层协议:该字段仅当数据报到达目的地时才有用,用来指示交给哪个特定的运输层协议
  • 首部校验和:只检查数据报首部是否出现比特错误
  • 源IP地址、目标IP地址:IP地址
  • 选项:IPv4的首部允许被扩充
  • 数据:包含交付给目的地运输层的报文段(一般为TCP/UDP),也有可能是其它报文段,如ICMP报文段

1.2.2、IPv4编址

主机与路由器接入网络的方法?

  • 通过接口,一个接口对应一个IP地址。一台主机一般只有一条链路连接到网络,故而一般而言,主机只有一个IP地址(当然有可能有多个接口)。路由器的任务是从链路上接收数据报并从某些其它链路转发出去,所以路由器必须拥有两条或更多的链路与之连接(即两个或更多接口),故而,一个路由器有两个或更多的IP地址
  • IP地址与接口相关联,并不是与包括该接口的主机或路由器相关联

IP地址一般使用点分十进制来表示,例如,193.32.216.9

对于193.32.216.9/24,说明该地址的网络前缀有24位,主机号只占8位,该地址的子网掩码为24位

什么是子网?

  • 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同 ,这些节点构成的网络 的一部分叫做子网
  • 无需路由器介入,子网内各主机可以在物理上相互直接到达

该网络中有6个子网。分别是:223.1.1.0/24、223.1.2.0/24、223.1.3.0/24、223.1.9.0/24、223.1.8.0/24、223.1.7.0/24

现在采用的编址方式为,无类别域间路由选择(CIDR),CIDR将子网寻址的概念一般化了,在进行子网寻址时,32位的IP地址将被划分为两部分:网络前缀主机号

  • 路由聚合

使用单个网络前缀通告多个网络(当然,该网络前缀所标识的子网内部,依然可以划分成多个子网)

  • 如何获取一块地址?

组织向与之关联的ISP申请一块地址,ISP向ICASNN申请一块地址

  • 获取主机地址?

可以由网管手动配置,也可以由动态主机配置协议(DHCP)来自动配置

对于一台新到来的主机,如何获得IP地址?

  • DHCP服务器发现:新到达的主机通过将目的地址和源地址设置为225.225.225.225、0.0.0.0,向所在子网中广播DHAP发现报文(传输层使用UDP协议)
  • DHCP服务器提供:DHCP服务器通过将目的地址设置为255.255.255.255,向所在子网的所有结点广播DHCP提供报文
  • DHCP请求:新客户从一个或多个服务器提供中选择一个,并向选中的服务器发送DHCP请求报文
  • DHCP ACK:服务器用DHCP ACK报文对DHCP请求报文进行相应

1.2.3、网络地址转换(NAT)

网络地址转换有哪些优点?

  • NAT路由器对外界的行为就如同一个具有单一IP地址的单一设备
  • 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备--省钱
  • 可以在局域网改变设备的地址情况下而无须通知外界
  • 可以改变ISP(地址变化)而不需要改变内部的设备地址
  • 局域网内部的设备没有明确的地址,对外是不可见的--安全

地址空间10.0.0.0/8是保留的IP地址空间,用于专用网络,仅仅在专用网络内部才有意义,因为这些地址可以在不同的网络中重复使用,不能在公共互联网上直接使用。

NAT的工作原理:

  • 所有离开专用网络(如家庭网路)路由器流向公共互联网的报文都拥有同一个源IP地址,且进入专用网络的报文都拥有同一个目的地址
  • NAT路由器维护一张NAT转换表,公共互联网端,记录NAT路由器的地址与端口号,专用网络端,记录公共网络内主机地址与端口
  • 例如,专用网内部主机10.0.0.1/24,请求IP地址为128.119.40.186的某台Web服务器(端口80)上的一个Web页面,主机任意指派一个源端口号3345并将该数据报发到专用网内。NAT收到该数据报后,将10.0.0.1/24替代为NAT的地址,并将源端口3345更新为5001。然后NAT在转换表中新增一个转换表项。Web服务器响应报文的目的IP和目的端口为NATIP和5001,到达NAT之后,通过NAT通过转换表重写目的IP地址和目的端口,并将报文转发给专用网内的10.0.0.0/24主机

当然,NAT机制也存在一些问题。路由器原本只应该对第3层做信息处理,而这里对端口号(4层)作了处理。端口号原本用来给进程寻址,但是在NAT机制中用于主机寻址

1.2.4、IPv6

IPv6报文格式:

版本:标识IP版本号

流量类型:

流标签:

有效载荷长度:数据部分的字节数量(长度)

下一个首部:标识数据报的内容交付给哪个传输层协议(TCP/UDP)

跳限制:转发数据报的每台路由器对该字段减1,直到0时,将该数据报丢弃

源地址、目标地址:IPv6地址,位宽128

数据:传输层封装好的报文段

在IPv6中,不允许在中间路由器进行分片和组装。当数据报过大时,直接丢弃并发送”分组过大“的ICMP报文,发送方会使用较小长度的IP数据报重发数据

IPv6不需要进行首部校验,也不包含可选选项。

IPv4到IPv6的迁移?

我们将两台IPv6路由器之间的中间IPv4路由器的集合称为隧道。借助隧道,在隧道发送方的IPv6节点将整个IPv6数据报放到IPv4数据报的有效载荷中,该IPv4的地址指向接收端IPv6节点,在IPv4路由器之间传输该数据包。隧道接收端IPv6节点收到该IPv4数据报,通过观察首部的协议号是41,即可直到IPv4数据报的载荷部分是IPv6数据报,取出IPv6数据报后,再由该IPv6数据报提供路由

1.3、泛化转发和SDN

SDN通过将控制平面数据平面分离,并引入集中化的控制器,实现了网络的灵活性和可编程性

网络控制器通过北向接口与网络控制应用交互,通过南向接口与分组交换机交互

网络控制器将流表计算出来后,传递给分组交换机,分组交换机依据流表进行匹配操作

 OpenFlow1.0的流表结构:

  • 首部字段值的集合
  • 计数器集合,这些计数器包扣已经与该表项匹配的分组数量,以及自从该表项上次更新以来的时间
  • 分组匹配时采取的操作集合,可能的操作有:转发、丢弃、复制、重写、传递给控制器

流表的匹配字段:

OpenFlow的匹配抽象允许对来自三个层次的协议首部所选择的字段进行匹配

流表项的匹配可以有通配符,例如,IP地址为128.19.*.*表示,匹配其它地址的前16比特为128.19的任何数据报所对应的地址字段

SDN有什么优势呢?

  • 可以实现负载均衡,可以充当防火墙。可以支持动态流量工程
  • 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
  • 集中式控制器了解网络状况,编程简单

二、网络层:控制平面

2.1、路由选择算法

2.1.1、链路状态路由选择算法(LS)

全局算法

  • 得到网络拓扑结构

1.发现相邻节点,获知对方网络地址

2.测量到相邻节点的代价(延迟,开销)

3.组装一个LS分组,描述它到相邻节点的代价情况

4.将分组通过扩散的方法发到所有其它路由器

以上4步让每个路由器获得拓扑和边代价

tips:为了不让分组在网络中无限扩散,为分组添加年龄字段(AGE),每经过一个路由器,该字段值减1,直到减为0,将该分组丢弃

  • 路由算法(Dijkstra算法)

上图,展示了由Dijkstra算法求解以A为起点的汇集树的过程。汇集树的求解过程实际上就是求解A到其它节点的最小路径的过程。

每个节点独立算出来到其他节点的最短路径,将该信息放入路由表中

当链路代价为链路拥塞程度时,使用Dijkstra算法可能会出现震荡现象。

2.1.2、距离向量路由选择算法(DV)

异步、迭代、分布式算法

基本思想:

  • 各路由器维护一张路由表(记录当前路由器去往的目标路由器,以及去往该目标路由器的下一跳和总代价)
  • 各路由器与相邻路由器交换路由表
  • 根据获得的路由信息,更新路由表

路由表中的代价的求解规则:

DV的特点:好消息传得快,坏消息传得慢(无穷计算,最后靠耗尽TTL来检测出不可达)

如何减缓坏消息传的慢得影响呢?

        水平分裂法:假设原本B可到达A,但是由于网络结构的变化,B到A变为不可达。那么如果某个节点C,知道自己是经过B才能到达A,但现在B到A是不可达的,那么C会通知B,A为不可达,但是会告诉另一侧的相邻节点,到A的真实距离。每个节点重复此过程。此时,坏消息以一次交换一个节点的速度传播

什么情况下,水平分裂法将失效?

2.2、ISP内部路由选择:OSPF

OSPF,即为开放最短路优先,基于链路状态路由选择算法(LS)

OSPF的优点:

  • 安全,所有的OSPF报文都是经过认证的(防止恶意的攻击)
  • 多条相同开销的路径,有利于负载均衡
  • 对单播与多播路由选择的综合支持
  • 支持在单个AS内的分层,在每个区域内,一台或多台区域边界路由器负责为流向该区域外的分组提供路由选择,在AS中只有一个主干区域(为该AS中的其它区域之间的流量提供路由选择)

2.3、ISP之间的路由选择:BGP

BGP,即自治系统间路由选择协议。BGP路由器之间建立 TCP 连接,称为BGP对等体

BGP两个重要的属性:

  • AS-PATH: 前缀的通告所经过的AS列表
  • NEXT-HOP: 从当前AS到下一跳AS有多个链路,在NETX-HOP属性中,告诉对方通过那个I 转发

BGP给每个AS提供的方法:

  • eBGP:从相邻的ASes获得子网可达信息
  • iBGP:将子网可达信息传遍AS内部的所有路由器

BGP是基于距离矢量算法的,但是不仅仅包含距离矢量,也包含了到达各个目标网络的详细路径(AS序列列表),由此,便可避免环路问题

  • 路由选择

1.本地偏好值属性: 偏好策略决定

2.最短AS-PATH :AS的跳数

3.最近的NEXT-HOP路由器:热土豆路由(不考虑域间代价)

4.附加的判据:使用BGP标示

2.4、SDN控制平面

SDN体系结构的关键特征:

  • 基于流的转发
  • 数据平面与控制平面分离
  • 网络控制功能
  • 可编程的网路
  • OpenFlow协议

OpenFlow协议运行在TCP之上,使用6653默认端口

从控制器流向受控交换机的重要报文如下:

  • 配置。 该报文允许控制器查询并设置交换机的配置参数
  • 修改状态。 该报文由控制器所使用,以增加/删除或修改交换机流表中的表项,并且设置交换机端口特性
  • 读状态。 该报文被控制器用于从交换机的流表和端口收集统计数据和计数器值
  • 发送分组。 该报文被控制器用于在受控交换机从特定的端口发送出一个特定的 报文。

从受控交换机到控制器流动的重要报文如下:

  • 流删除。 该报文通知控制器已删除一个流表项,例如由于超时,或作为收到“修改状态"报文的结果
  • 端口状态。 交换机用该报文向控制器通知端口状态的变化
  • 分组入。 一个分组到达交换机端口,并且不能与任何流表项匹配,那么这个分组将被发送给控制器进行额外处理。 匹配的分组也被发送给控制器,作为匹配时所采取的一个动作
  • 数据平面与控制平面交互的例子

①S1, 经历了链路失效,采用OpenFlow报文通告控制器: 端口状态报文

②SDN 控制器接收OpenFlow报文,更新链路状态信息

③Dijkstra路由算法应用被调用(前面注册过这个状态变化消息)

④Dijkstra路由算法访问控制器中的网络拓扑信息,链路状态信息计算新路由

⑤链路状态路由app和SDN 控制器中流表计算元件交互,计算出新的所需流表

⑥控制器采用OpenFlow在交换机上安装新的需要更新的流表


网站公告

今日签到

点亮在社区的每一天
去签到