type
slug
status
summary
icon
category
date
tags
password
4.0 网络层:数据平面


4.1 导论
4.1.1 网络层服务
- 在发送主机和接收主机对之间传送段(segment)(TCP的段、UDP的数据报)
- 发送端:将数据报封装到段中
- 接收端:将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP数据报的头部
4.1.2 网络层的关键功能
- 网络层功能:
- 转发:将分组从路由器的输入接口转发到合适的输出接口(局部功能)
- 路由:使用路由算法来决定分组从发送主机到目标接收主机的路径
- 路由选择算法
- 路由选择协议
- 旅行的类比:
- 转发:通过单个路口的过程
- 路由:从源到目的的路由路径规划过程
4.1.3 数据平面、控制平面
- 数据平面
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口
- 转发:数据平面的功能
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
- 控制平面
- 路由:控制平面的功能
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径
- 2个控制平面方法:
- 传统的路由算法:在路由器中被实现
- 仅仅根据源IP和目标IP匹配路由表表项对端到端分组做动作:转发
- 软件定义网络 (SDN:software-defined networking): 在远程的服务器中实现
- 多字段流表匹配,有很多动作:转发、block、泛洪、修改字段……
- 流表:网络操作系统算出,通过南向接口下发,分组设备将流表装载。
4.1.3.1 传统方式:每-路由器控制平面
- 路由器上有路由实体,和其他路由实体交互路由信息。分布式计算路由表,将算出的路由表交给IP实体。IP实体根据路由表对到来的分组做匹配,然后转发。
- 传统方式:数据平面和控制平面紧耦合,即集中在一台设备上完成。
- 改路由器的行为逻辑很麻烦。(紧耦合和分布式导致。)
- 数据平面:IP实体根据路由表对分组进行匹配转发
- 控制平面:路由实体相互交换路由信息,计算路由表
- 控制平面的功能是分布式去做的

- 路由表是控制平面和数据平面的粘合剂
- 控制平面:路由算法决定端到端的路径
- 数据平面:IP实体根据路由表决定IP数据报在此路由器的局部转发(端口到端口)

4.1.3.2 SDN方式:逻辑集中的控制平面
- 控制平面的功能集中在服务器(远程控制器),通过南向接口与每个设备控制代理(CA)打交道
- 控制代理上报设备状态,远程服务器计算出流表,通过南向接口交给每一个分组交换设备(packet switch即路由)。
- 分组交换设备将流表装载,根据每一个到来的分组做多字段的匹配做多种动作:转发,block,泛洪,修改字段……
- 改变网络设备的逻辑:改变流表→网络可编程
- 控制平面是集中式的→便于修改

4.1.4 网络服务模型
Q: 从发送方主机到接收方主机传输数据报的“通道”,网络提供什么样的服务模型?
- 对于单个数据报的服务:
- 可靠传送
- 延迟保证,如:少于40ms的延迟
- 对于数据报流的服务:
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
- 当这些指标为具体值的时候,网络向上层提供的服务可以叫做服务模型

所有指标都没有保证的模型,叫做尽力而为的服务模型(best effort)
4.1.5 连接建立
- 在某些网络架构中是第三个重要的功能:提供有连接的服务
- ATM, frame relay, X.25
- 在分组传输之前,在两个主机之间,在通过一些路由器所构成的路径上建立一个网络层连接
- 涉及到路由器
- 网络层和传输层连接服务区别:
- 网络层:在2个主机之间,涉及到路径上的一些路由器(涉及网络交换节点,有连接)
- 传输层:在2个进程之间,很可能只体现在端系统上(主机和主机,与网络交换设备路由无关)(TCP连接:面向连接的连接)
4.2 路由器组成
输入端口,输出端口,fabric(将输入输出端口连接,完成局部的转发)
根据什么转发
路由处理器上面运行着路由实体(运行着的一个软件/进程),路由实体运算出路由表到达输入端口,输入端口的网络层根据路由表将到来分组做局部转发。
4.2.1 路由器结构概况
- 高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法 / 协议(RIP, OSPF, BGP)- 生成路由表
- 转发:从输入到输出链路交换数据报-根据路由表进行分组的转发
- 这里看出来还是两个路由器之间做转发,这个端口是指一个路由器的端口,另一个路由器的端口,通过链路层中链路的定义:连接个相邻节点通信信道的是链路:links也可以看出

红色:网络层;蓝色:代表链路层;绿色:代表物理层
每个路由器独立计算路由表(分布式)。算出来的路由表,将给路由器的网络层(IP实体做表项匹配)。
(SDN模式在集中服务器的应用上去算流表,再把流表交给分组交换设备,网络可编程)
4.2.2 输入端口
4.2.2.1 输入端口功能

- 分布式交换(匹配和转发):
- 根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口
- 基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法,网络不可编程)
- 通用转发:基于头部字段的任意集合进行转发
4.2.2.2 输入端口缓存
网络层含有一个队列来匹配链路层到网络层的速度,fabric速度的不一致(输入端口的速度可能瞬间比输出的端口的速率大)
- 当交换机构的速率小于输入端口的汇聚速率时,在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失!
- Head-of-the-Line(HOL)blocking:排在队头的数据报阻止了队列中其他数据报向前移动

4.2.3 交换结构(fabric)
- 作用:将分组从输入缓冲区传输到合适的输出端口
- 交换速率ppm:分组可以按照该速率从输入传输到输出
- 运行速度:经常是输入/输出链路速率的若干倍
- N个输入端口。交换机构的交换速度是输入或输出速度的N倍比较理想,才不会成为瓶颈
- 3种典型的交换机构

4.2.3.1 通过内存交换
- 第一代路由器:
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制(CPU处理速度限制)(数据报通过BUS两端)
- 一次只能转发一个分组

4.2.3.2 通过总线交换
- 数据报通过共享总线,从输入端口转发到输出端口
- 只用经过一次bus,所有速率优于通过内存交换的路由器
- 总线竞争:交换速度受限于总线带宽
- 一次转发一个分组
- 1 Gbps bus, Cisco 1900: 32 Gbps bus, Cisco 5600: 对于接入或企业级路由器,速度足够(但不适合区域或骨干网络)

4.2.3.3 通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(梯树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器
- 当分组从端口A到达,转给端口Y;控制器短接相应的两个总线(短接路径节点:打通这一条路径)
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换
- Cisco12000: 以60Gbps的交换速率通过互联网络

4.2.4 输出端口

- 物理层:根据编码将数字信号变为物理信号,链路层:成帧(帧头帧位),网络层:fabric来的分组排队在队列中,转发。
- 可以看出这里的输出端口,是指接收方路由器。那么前面的输入端口也可以知道是发送方路由器,
- 怎么转发?交给链路层网卡,网卡将其封装成帧。
- 排队:因为可能多个端口同时向这个口打,导致输入速率大于输出速率
- 数据报(分组)可能会被丢弃,由于拥塞,缓冲区没有空间
- 当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存
- 由调度规则选择排队的数据报进行传输
- 优先权调度--谁会获得最优性能,网络中立?
4.2.4.1 输出端口排队

- 假设交换速率R_switch是R_line(输出端口的传输速率)的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率超过输出速率则缓存)
- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
需要多少缓存?
- RFC 3439 拥指规则(经验性规则):
- 平均缓存大小=典型的RTT(例如:250ms)倍于链路容量C
- e.g., C = 10 Gbps link
- 250ms*10Gbps=2.5 Gbit buffer
- 最近的一些推荐:有N(非常大)个流,缓存大小等于

4.2.4.2 调度机制
- 调度:选择下一个要通过链路传输的分组
- FIFO (First in first out) scheduling:按照分组到来的次序发送
- 现实例子?
- 丢弃策略:如果分组到达一个满的队列,哪个分组将会被抛弃?
- tail drop:丢弃刚到达的分组
- priority:根据优先权丢弃/移除分组
- random:随机地丢弃/移除
调度策略:优先权
- 优先权调度:发送最高优先权的分组
- 多类,不同类别有不同的优先权
- 类别可能依赖于标记或者其他的头部字段,e.g., IP source/dest, port numbers, ds, etc.
- 分类到达的流量,按类别排队
- 从最高优先级队列发送分组(已经缓冲的分组),同一优先级FCFS
- 先传高优先级的队列中的分组,除非没有
- 高(低)优先权内(即同一优先级)的分组传输次序:FIFO

调度策略:其他的
- Round Robin (RR) scheduling:
- 多类
- 循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的下一个分组,循环所有类

- Weighted Fair Queuing (WFQ):

4.2.5 转发表

注意:是目标地址和链路接口的关系,如图可以看到是选择链路

4.2.5.1 最长前缀匹配

- 我们将会在学习IP地址时,简单讲解为什么要采用最长前缀匹配
- 最长前缀匹配:在路由器中经常采用TCAMs(ternary content addressable memories)硬件来完成
- 内容可寻址(内容地址表):将地址交给TCAM,它可以在一个时钟周期内检索出地址,不管表空间有多大
- Cisco Catalyst系列路由器:在TCAM中可以存储多达约为1百万条路由表项



4.3 IP协议:Inter Protocol

IP协议所在的位置
网络层除了IP协议以外还有一些路由协议(实现控制平面的路由功能)
IP协议的体现:对到来的分组头部的目标地址查路由表,进行分组转发
地址约定、数据报格式、分组处理的约定
4.3.1 IP数据报格式(IPv4)

IP数据报总长-20字节的固定头部(IP头部)-20字节(TCP头部)=数据部分


4.3.1.1 协议号
在发送端封装数据报为段时的时候会用到
在接收端解封装的时候会用到:所以说协议号是网络层和传输层的桥梁

4.3.1.2 差错检验

这个检验号在首部,所以又叫做首部检验和。只检查首部,不检查数据部分。
注意这里与传输层做对比:传输层中TCP/UDP中的差错检验,是对于整个报文段进行检验。IP报文段检验是只检查首部。
为什么传输层和网络层都要进行差错检验?
内容不同:第一两者检验的部分不同(方式同,校验和检验)。
标准不同:两者校验所遵循的协议不同。TCP/UDP可以运行在其他协议上,而IP所带的数据也不一定传给TCP和UDP
4.3.2 IP分片和重组

- 分片原因:链路层数据帧有限制(因为链路层需要对网络层传输的数据报进行帧封装)
- IP分片:
- 位置:网络层面上
- 特点:相同IP,不同偏移量,最后一个分片标记位为0
- 重组位置:目标主机的网络层

(******)MTU:链路层的数据部分:即网络层的数据单元(IP头部+数据部)
每个切片都需要头(IP头目标地址)
相同的ID和不同的偏移量,最后一片的标志位为0(标志位为1说明后面还有,便于目标主机重组)
在目标主机处重组(不然路由负载过大)


- MTU
- 对于链路层来说:链路层帧的数据部分
- 对于网络层来说:IP头部+数据部分
- 偏移量=IP片的数据部分/8(以8字节为单位)
4.3.3 IP 编址:引论
- IP 地址:32位标示,对主机或者路由器的接口编址
- 接口:主机/路由器和物理链路的连接处
- 标识相连的那个点,而不是直接标识主机和路由器
- 路由器通常拥有多个接口
- 通过网卡(物理链路)和多个网络相连,做网络和网络间的分组转发
- 主机也有可能有多个接口
- 虚拟IP地址
- 一个IP地址和一个接口相关联


接口(也就是端口)连接:通过交换机的方式连接
4.3.3.1 子网 (Subnets)
- IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
- 什么是子网(subnet)?
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- 在网路层面,子网内部节点分组收发一跳可达(目标路由到目标主机),无需路由器介入。(也就是后面所说的主机对交换机透明)
- 子网内各主机可以在物理上相互直接到达(可以借助交换机)

子网
- 方法:
- 要判断一个子网,将每一个接口从主机或者路由器上分开,构成了一个个网络的孤岛
- 每一个孤岛(网络)都是一个都可以被称之为subnet.
- 子网掩码:11111111 11111111 11111111 00000000
- Subnet mask: /24
4.3.3.2 IP地址分类

本质是
网络号8的倍数倍增:A类网络号为8位,B类网络号为16位,C类网络号为24位,DE类网络号位数不确定
前端固定编码位(也可以算作区分位):依次递增:0,10,110,1110,11110

- 网络ID→网络数量→与网络比特数有关→有效位数为网络号位数-前端固定编码位→也就是子网数量
- 每个网络IP(对应主机)地址数=子网内主机数=主机号位数有关
- 主机号位数=32-网络号位数
- 主机号全0和全1不使用(最后需要-2)
- IP地址:对应主机。
- 路由匹配分组转发:匹配网络ID,一个子网内部再进行转发,而不是精确到单个地址(以网络/子网为单位转发) ,最终路由器再完成对目标IP地址的最后一条的发送(由交换机完成)
特殊IP地址
- 一些约定:
- 子网部分:全为0---本网络
- 主机部分:全为0---本主机
- 主机部分:全为1--广播地址,这个网络的所有主机
- 回路地址127.x.x.x
- 无论是TCP还是UDP,目标地址为回路地址,到达IP后返回TCP/UDP(反转向上)
- 也可以叫做测试地址
- 127.0.0.1-127.255.255.254(每一个x有8位)
- 主要是用来识别主机本身的地址。也叫做“localhost’
- 内网(专用)IP地址
- 专用地址:地址空间的一部份供专用地址使用
- 永远不会被当做公用地址来分配,不会与公用地址重复
- 只在局部网络中有意义,区分不同的设备
- 路由器不对目标地址是专用地址的分组进行转发
- 专用地址范围
- Class A 10.0.0.0-10.255.255.255 MASK 255.0.0.0
- Class B 172.16.0.0-172.31.255.255 MASK 255.255.0.0
- Class C 192.168.0.0-192.168.255.255 MASK 255.255.255.0
- 受限的广播地址255.255.255.255
- 主要指一个网段内的所有主机
4.3.3.3 子网掩码 (subnet mask)

- 对主机号再次划分!!!!不改变网络号
- 原网络号+子网号=新网络号
- 子网掩码:选中新网络号,即新网络号的所有位为1.主机号部分为全0

- 32bits,0 or 1 in each bit
- 1: bit位置表示子网部分
- 0: bit位置表示主机部分
- 原始的A、B、C类网络的子网掩码分别是(网络号为全1)
- 每一个.分开的数代表8位二进制
- A: 255.0.0.0: 11111111 00000000 00000000 00000000
- B: 255.255.0.0: 11111111 11111111 00000000 00000000
- C: 255.255.255.0: 11111111 11111111 11111111 00000000

默认子网掩码,就是传统的二级IP结构,也就是网络号8,16,24位
- CIDR下的子网掩码例子:
- 11111111 11111111 11111111 00000000
- 另外的一种表示子网掩码的表达方式
- /# :例:/22: 表示前面22个bit为子网部分
4.3.3.4 使用子网掩码的转发表和转发算法
转发表:目标地址和吓一跳地址

下一条地址是下一个节点的输出地址?

- 获得IP数据报的目标地址
- 对于转发表中的每一个表项
- 如果(IP地址)&(子网掩码mask)== 目标地址, 则按照表项对应的接口转发该数据报
- 如果都没有找到, 则使用默认表项转发数据报
4.3.4 IP 编址:CIDR
CIDR: Classless InterDomain Routing(无分类编址)
- CIDR 消除了传统的 A 类、B 类和 C类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的“网络前缀"(network-prefix)来代替分类地址中的网络号和子网号
- IP地址从三级编址(使用子网掩码)又回到了两级编址。

这个10是指网络号位数(也可以叫做子网位数)
- 子网部分可以在任意的位置,占有任意长度(按需分配)
- 地址格式:a.b.c.d/x,其中x是地址中子网号的长度


- CIDR地址块
- 地址块数=主机数=2^主机号数

4.3.4.1 层次编址:路由聚集(route aggregation)
- 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
- 路由聚合也称为构成超网(supernetting)。
- CIDR 虽然不使用子网了,但仍然使用“掩码“这一名词(但不叫子网掩码)
- 假设有16个C类网络(24位网络号,8位主机号),从 201.66.32.0 到 201.66.47.0,它们可以用掩码 255.255.240.0 统一表示为网络 201.66.32.0.
构成超网
- 前缀长度不超过 23 位的 CIDR 地址块都包含了多个C类地址,这些 C类地址合起来就构成了超网,CIDR 地址块中的地址数一定是 2 的整数次幂。网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
4.3.5 IP地址获取
- 主机获取IP地址的方式:
- 手工指定(保存在系统配置中)
- Windows: 控制面板->网络
- UNIX/LINUX: 在/etc/rc.config中,可使用ifconfig命令配置。
- DHCP: Dynamic Host Configuration Protocol 动态主机配置信息
- 自动从一个DHCP服务器得到IP地址。
- 方便灵活。
4.3.5.1 动态主机配置协议(DHCP)
目标:允许主机在加入网络的时候,动态地从服务器那里获得IP地址:
- 可以更新对主机在用IP地址的租用期-租期快到了
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
DHCP工作概况:
- 主机广播“DHCP discover”报文[可选]:我上线了
- DHCP服务器用“DHCP offer”提供报文响应[可选]:OK
- 主机请求IP地址:发送“DHCP request”报文:请求IP
- DHCP服务器发送地址:“DHCP ack”报文:OK,分配IP

DHCP: 不仅仅是IP addresses
DHCP返回:
- IP地址
- 第一跳路由器的IP地址(默认网关)
- DNS服务器的域名和IP地址
- 子网掩码(指示地址部分的网络号和主机号)
DHCP: 实例
- 联网笔记本需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用DHCP协议
- DHCP请求(应用请求)被封装在UDP段中,封装在IP数据报中,封装在以太网的帧中
- DHCP是应用层协议
- 以太网帧在局域网范围内广播(dest:FFFFFFFFFFFFFF),被运行DHCP服务的路由器收到
- 以太网帧解封装成IP,IP解封装成UDP,解封装成DHCP
DHCP: 实例
- DHCP服务器生成DHCP ACK,包含客户端的IP地址,第一跳路由器的IP地址和DNS域名服务器的IP地址
- DHCP服务器封装的报文所在的帧转发到客户端,在客户端解封装成DHCP报文
- 客户端知道它自己的IP地址,DNS服务器的名字和IP地址,第一跳路由器的IP地址
如何获得一个IP地址
Q:如何获得一个网络的子网部分?
A:从ISP获得地址块中分配一个小地址块
4.3.6 NAT网络地址转换(network address translation)

就外部世界而言,本地网络中的所有设备仅共享一个IPv4地址
本地网络中的所有设备在“专用”IP地址空间(10/8、172.16/12、192.168/16)中具有32位地址,这些地址只能在本地网络中使用.
- 动机:本地网络只有一个有效IP地址:
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备--省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的--安全
- 实现: NAT 路由器必须:
- 外出数据包:替换源地址和端口号为NAT IP地址和新的端口号,目标IP和端口不变
- 远端的C/S将会用NAP IP地址,新端口号作为目标地址
- 记住每个转换替换对(在NAT转换表中)
- 源IP,端口 VS NAP IP,新端口
- 进入数据包:替换目标IP地址和端口号,采用存储在NAT表中的mapping表项,用(源IP,端口)

- 16-bit 端口号: 一个局域网地址可以同时支持60,000个并发连接!
- NAT 存在争议
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了end-to-end 原则
- 端到端原则:复杂性放到网络边缘
- 无需借助中转和变换,就可以直接传送到目标主机
- NAT可能要被一些应用设计者考虑,e9,P2P applications。
- 外网的机器无法主动连接到内网的机器
- 地址短缺问题可以被IPv6 解决
- NAT穿越:如果客户端需要连接在NAT后面的服务器,如何操作
4.3.7 IPv6
- 初始动机:32-bit地址空间将会被很快用完
- 另外的动机:
- 头部格式改变帮助加速处理和转发(下面是IPv4需要做的,增加了CPU的负担)
- TTL-1
- 头部checksum
- 分片
- 头部格式改变帮助QoS
4.3.7.1 IPv6 数据报格式:
- 固定的40字节头部
- 数据报传输过程中,不允许分片
- 由IPv4的源目标地址32位变为源目标地址128位

- 流量类型(8-bit):区分IPv6数据报的类别或优先级;对应IPv4中的TOS字段
- 流标签(20-bit):表示数据报在同一个”流”中 。”流”是互联网络上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。
- 下一个首部: 表示数据的上层协议(TCP或UDP)。使用与IPv4首部中的协议字段相同的值。

首部长度固定,无校验和,首部拓展实现选项,无分片
4.3.7.2 扩展首部和地址表示

128/4=32位十六进制数表示一个IPv6地址,4个十六进制数为一组,冒号隔开
一个十六进制为四位二进制
(IPv4地址:8位二进制为一组,用冒号隔开)
4.3.8 ICMP 因特网控制报文协议(Internet control Message Protocol)
- 用于主机路由器之间彼此交流网络层信息
- 差错报告:不可到达的主机,网络、端口、协议
- 请求/应答(用于ping, traceroute)
- 位于IP之上
- 因为ICMP消息是装载在IP分组里的


4.4 通用转发和SDN
- “匹配加动作“抽象:在任何层中匹配到达的数据包报头中的位,并采取措施
- 可匹配许多头部字段领域(链路层,网络层,传输层)
- 本地多动作:丢弃,转发,修改或将匹配的数据包发送到控制器
- 是整个网络范围内“编程“行为(网络可编程)
- 网络可编程性的简单形式
- 可编程,按数据包的“处理”
- 历史根源:主动网络
- 今天:更通用的开源网络编程语言:P4(https://p4.org/)
下面看看就行




4.5 路由算法

传统方式:路由表
SDN:流表
4.5.1 选路算法
- 选路算法:根据给定的网络抽象图,找出从源节点到目的节点间的最低费用路径。
- 转发:将数据报从路由器的输入端口移动到适当的路由器输出端口(data plane)
- 路由:决定数据报从源主机到目标主机所采用的路径(control plane)
- 构造网络控制平面的两种方法:
- 每个路由器控制(传统方法)
- 逻辑集中控制(软件定义网络,software defined networking)
4.5.2 路由的基本概念
路由(route)的概念
- 路由:按照某种指标(传输延迟,所经过的站点数目等)找到一条从源节点到目标节点的较好路径
- 较好路径:按照某种指标较小的路径
- 指标:站数,延迟,费用,队列长度等,或者是一些单纯指标的加权平均
- 采用什么样的指标,表示网络使用者希望网络在什么方面表现突出,什么指标网络使用者比较重视
- 以网络为单位进行路由(路由信息通告+路由计算)
- 网络为单位进行路由,路由信息传输、计算和匹配的代价低
- 前提条件是:一个网络所有节点地址前缀相同,且物理上聚集(子网到子网的路由)
- 路由就是:计算网络到其他网络如何走的问题
- 网络到网络的路由=路由器-路由器之间路由
- 主机到主机计算量太大,子网到子网间的路由(前n-1跳)
- 网络对应的路由器到其他网络对应的路由器的路由(第n跳)
- 在一个网络中:路由器-主机之间的通信,链路层解决
- 到了这个路由器就是到了这个网络
- 路由选择算法(routing algorithm):网络层软件的一部分,完成路由功能

4.5.3 网络抽象图模型



- 路由的输入:拓扑、边的代价、源节点
- 路由的输出:源节点的汇集树

4.5.4 路由算法

路由算法分类
- 全局或者局部路由信息?
- 全局:(可以看到整个网络的拓扑和代价→路由信息传递的事情)
- 所有的路由器拥有完整的拓扑和边的代价的信息
- “link state” 算法
- 分布式:
- 路由器只知道与它有物理连接关系的邻居路由器,和到相应邻居路由器的代价值
- 单代地与邻居交换路由信息,计算路由信息
- “distance vector” 算法
- 静态或者动态的?
- 静态:
- 路由随时间变化缓慢
- 路由确定后基本不再变化。只有人工干预调整时,可能有一些变化。
- 动态:
- 路由变化很快
- 周期性更新
- 根据链路代价的变化而变化
- 非自适应算法(non-adaptive algorithm):不能适应网络拓扑和通信量的变化,路由表是事先计算好的
- 自适应路由选择(adaptive algorithm):能适应网络拓扑和通信量的变化
4.5.5 链路状态选路算法(LS)
4.5.5.1 LS路由的工作过程
- 配置LS路由选择算法的路由工作过程
- 各点通过各种渠道获得整个网络拓扑,网络中所有链路代价等信息(这部分和算法没关系,属于协议和实现)
- 使用LS路由算法,计算本站点到其它站点的最优路径(集树),得到路由表
- 按照此路由表转发分组(datagram方式)(这是数据平面的事情了)
- 严格意义上说不是路由的一个步骤
- 分发到输入端口的网络层

链路状态路由选择(link state routing)
- LS路由的基本工作过程
- 发现相邻节点,获知对方网络地址
- 测量到相邻节点的代价(延迟,开销)
- 组装一个LS分组,描述相邻节点和它到相邻节点的代价情况
- 将分组通过扩散的方法发到所有其它路由器
- 以上4步让每个路由器获得拓扑和代价信息.在全网泛洪.可以拿到整个网络拓扑和所有链路代价
- 通过Dijkstra算法找出最短路径(这才是路由算法)
- 每个节点独立算出来到其他节点(路由器-网络)的最短路径
- 迭代算法:第k步能够知道本节点到k个其他节点的最短路径
链路状态路由选择(link state routing)前四步骤的具体实现
- 发现相邻节点,获知对方网络地址
- 一个路由器上电之后,向所有线路发送HELLO分组
- 其它路由器收到HELLO分组,回送应答,在应答分组中,告知自己的名字(全局唯一)
- 在LAN中,通过广播HELLO分组,获得其它路由器的信息,可以认为列入一个人工节点
2.测量到相邻节点的代价(延迟,开销)
- 实测法,发送一个分组要求对方立即响应
- 回送一个ECHO分组
- 通过测量时间可以估算出延迟情况
3.组装一个分组,描述相邻节点的情况
- 发送者名称
- 序号,年龄
- 列表:给出它相邻节点,和它到相邻节点的延迟

4.将分组通过扩散的方法发到所有其它路由器
- 顺序号:用于控制无穷的扩散,每个路由器都记录(源路由器,序号),发现重复的或老的就不扩散
- 具体问题1:循环使用问题
- 具体问题2:路由器崩溃之后序号从0开始
- 具体问题3:序号出现错误
- 解决问题的办法:年龄字段(age)
- 生成一个分组时,年龄字段不为0
- 每个一个时间段,AGE字段减1
- AGE字段为0的分组将被抛弃

5.通过Dijkstra算法找出最短路径
- 路由器获得各站点LS分组和整个网络的拓扑
- 通过Dijkstra算法计算出到其它各路由器的最短路径(汇集树)
- 将计算结果安装到路由表中
- LS的应用情况
- OSPF协议是一种LS协议,被用于Internet上
- IS-IS(intermediate system- intermediate system):被用于Internet主干中,Network
4.5.5.2 符号标记和算法具体操作过程

- c(i,j):从节点i到j链路代价(初始状态下非相邻节点之间的链路代价为∞)
- D(v):从源节点到节点V的当前路径代价(节点的代价)
- p(V):从源到节点V的路径前序节点
- N’:当前已经知道最优路径的节点集合(永久节点的集合)
- 节点标记:每一个节点使用(D(v), p(v)) 如:(3, B)标记
- D(v):从源节点由已知最优路径到达本节点的距离
- P(v):前序节点来标注
- 2类节点
- 临时节点(tentative node):还没有找到从源节点到此节点的最优路径的节点
- 永久节点(permanent node) N':已经找到了从源节点到此节点的最优路径的节点
(********)
- 初始化
- 除了源节点外,所有节点都为临时节点
- 节点代价
- 与源节点相邻,链路上值=代价
- 与源节点不相邻,代价都为∞
- 从所有临时节点中找到一个节点代价最小的临时节点,将之变成永久节点(当前节点)W
- 对此节点W的所有在临时节点集合中的邻节点(V)
- 如 D(v) > D(w) + c(w, v),则重新标注此点V,(D(W) + C(W, V), W)
- 回顾前面节点标记的知识点(新代价值,前序节点)
- 否则,不重新标注
- 开始一个新的循环(3)~(5)


step1:初始化

不相邻节点,代价无穷,前序节点不知道
step2:
- 从所有临时节点中找到一个节点代价最小的临时节点,将之变成永久节点(当前节点)W
- 选择B成为永久节点(2,A)
step3:
- 对此节点W的所有在临时节点集合中的邻节点(V)做重新标记
- E(∞,-)>E
(2,B)E(4,B) - 注意注意:所有的cost,均为到源节点的距离,而不是到上一节点的距离
- C(∞,-) >C(9,B)
重复
- 从所有临时节点中找到一个节点代价最小的临时节点,将之变成永久节点(当前节点)W
- 所有临时节点中代价最小的是E,这里的永久节点为E。
- 选择了E即选择了路径,不代表C的值需要更改
- 对E的相邻节点做重新标记
- 注意:此时的G(6,A)
- DE+C(E,G)=(4,B)+1=(5,B)<(6,A)
- 所以对G进行重新标记(5,E)
- F(6,E)
- 所以选择G加入永久节点
- tips:选择永久节点的范围,实在所有的临时节点范围内。重标记是在这个永久节点的相邻节点做重新标记
- 对G的邻节点重新标记H(9,G)
- 此时所有临时节点(没有标红)的代价最小节点是F,所以选择F作为永久节点
- 对F的邻节点做重新标记,
- C(9,B)=C(9,F),不用更改
- H(9,G)>H(8,F),H改为(8,F)
- 此时所有的临时节点中代价最小的是H(8,F),所以选择H作为永久节点
- 对H的邻节点做重新标记
- D(10,H)
- 此时所有的临时节点中代价最小的是C(9,B),所以选择C作为永久节点
- 对C的邻节点做重新标记
- (9,B)+3>D(10,H)
- 所以D不做更改


注意:cost为到源节点的花销!!!!!不是到前一节点的花销!!
4.5.5.3 Dijkstra算法的讨论
- 算法复杂度:n节点
- 每一次迭代:需要检查所有不在永久集合N中节点
- n(n+1)/2 次比较:O(n2)
- 有很有效的实现:O(nlogn)
- 可能的震荡: e.g.,链路代价=链路承载的流量

4.5.6 距离向量路由算法(DV)
距离矢量路由选择(distance vector routing)
- 动态路由算法之一
- 距离矢量路由选择的基本思想
- 各路由器(节点)维护一张路由表,结构如图(其它代价)
- 各路由器与相邻路由器交换路由表(待续)(相邻两个节点定期交换距离矢量(代价值 ))
- 根据获得的路由信息,更新路由表



4.5.6.1 DV算法工作流程
- 代价及相邻节点间代价的获得
- 跳数(hops), 延迟(delay), 队列长度
- 相邻节点间代价的获得:通过实测
- 路由信息的更新
- 根据实测 得到本节点A到相邻站点的代价(如:延迟)
- 根据各相邻站点声称它们到目标站点B的代价
- 计算出本站点A经过各相邻站点到目标站点B的代价
- 找到一个最小的代价,和相应的下一个节点Z,到达节点B经过此节点Z,并且代价为A-Z-B的代价
- 其它所有的目标节点一个计算法
4.5.6.2 实例
距离矢量路由:例子1
- 以当前节点J为例,相邻节点A, I, H, K
- J测得到A, I, H, K的延迟为8ms, 10ms, 12ms, 6ms
- 通过交换DV,从A, I, H, K获得到它们到G的延迟为18ms, 31ms, 6ms, 31ms
- DV算法:即AIHK告诉J到目标G的延时
- 因此从J经过A, I, H, K到G的延迟为26ms, 41ms, 18ms, 37ms
- 总代价值=到邻居节点的代价值+邻居节点告诉我的到目标节点的代价值
- 将到G的路由表项更新为18ms,下一跳为:H
- 选择总代价值最小的节点为下一跳
- 其它目标一样,除了本节点J

距离矢量算法
- Bellman-Ford 方程(动态规划)

- Bellman-Ford例子

递归。但也可以直接看出(容易做错)
下面的看看就行,主要是要理解!
距离矢量路由选择(distance vector routing)
- 定期测量它到相邻节点的代价
- 更新路由表
- 定期与相邻节点交换路由表(DV)
- D_x(y):节点x到y代价最小值的估计
- x 节点维护距离矢量D_x(y)= [D_x(y): y ∈ N]
- 节点x:
- 知道到所有邻居v的代价:c(x, v)
- 收到并维护一个它邻居的距离矢量集
- 对于每个邻居,x 维护 D_x = [D_x(y): y ∈ N]
距离矢量算法
- 核心思路:
- 每个节点都将自己的距离矢量估计值传送给邻居,定时或者DV有变化时,让对方去算
- 当x从邻居收到DV时,自己运算,更新自己的距离矢量
- 采用B-F equation:
- D_x(y)估计值最终收敛于实际的最小代价值d_x(y)
- 分布式、迭代算法

距离矢量算法

- 异步式、迭代:每次本地迭代
- 被以下事件触发:
- 本地链路代价变化了
- 从邻居来了DV的更新消息
- 分布式:
- 每个节点只是在自己的DV改变之后向邻居通告
- 然后邻居们在有必要的时候通知他们的邻居
- 每个节点:

距离矢量路由选择(distance vector routing)
- DV的无穷计算问题
- DV的特点
- 好消息传的快 坏消息传的慢
- 好消息的传播以每一个交换周期前进一步路由器的速度进行
- 好消息:某个路由器接入或有更短的路径
- 举例

- 解决计数到无穷的解决:毒性逆转


- 距离矢量路由选择(distance vector routing)
- DV的无穷计算问题
- 坏消息的传播速度非常慢(无穷计算问题)
- 例子:
- 第一次交换之后,B从C处获得信息,C可以到达A(C-A),要经过B本身),但是路径是2,因此B变成3,从C处走
- 第二次交换,C从B处获得消息,B可以到达A,路径为3,因此,C到A从B走,代价为3
- 无限此之后,到A的距离变成INF,不可达

- 水平分裂(split horizon)算法
- 一种对无穷计算问题的解决办法
- C知道要经过B才能到达A,所以C向B报告它到A的距离为INF,它告诉C它到A的真实距离
- D告诉C,它到A的距离,但D告诉C它到A的距离为INF
- 第一次交换:B通过测试发现到A的路径为INF,而C也告诉B到A的距离为INF,因此,B到A的距离为INF
- 第二次交换:C从B和D那里获知,到A的距离为INF,因此将它到A的距离为INF
- ……坏消息以一次交换周期速度传播
4.5.6.3 节点的距离向量表




这里的无穷是指在这一时刻,yz的距离矢量都没有传过来(都还没有告诉x到目标z的cost)
但是x可以测量到x,y,z的cost
整个图是时空图,从左往右看横轴是时间。纵轴是节点
下一个时刻,y,z将距离矢量传给x。除了xx外=0外,需要根据这个来更迭我x的距离矢量
这样每个节点都得到了一个图
4.5.7 LS和DV算法的比较
- 消息复杂度(DV胜出)
- LS: 有n节点,E条链路,发送报文O(nE)个
- 局部的路由信息:全局传播,全局信息
- DV: 只和邻居交换信息
- 全局的路由信息,局部传播
- 健壮性:路由器故障会发生什么(LS胜出)
- LS:
- 节点会通告不正确的链路代价
- 每个节点只计算自己的路由表
- 错误信息影响较小,局部,路由较健壮
- DV:
- DV节点可能通告对全网所有节点的不正确路径代价
- 距离矢量
- 每一个节点的路由表可能被其它节点使用
- 错误可以扩散到全网
- 收敛时间(LS胜出)
- LS: O(n²)算法
- 有可能震荡
- 时空图一次算完
- DV: 收敛较慢
- 可能存在路由环路(无穷迭代)
- count-to-infinity 问题
- 很多次迭代
- 2种路由选择算法都有其优缺点,而且在互联网上都有应用
4.6 因特网中自治系统内部(AS内部)的路由选择协议
内部网关协议,外部网关协议
4.6.1 RIP(基于DV算法)
- RIP( Routing Information Protocol)
- Distance vector 算法
- 距离矢量:每条链路cost=1,# of hops(max=15 hops)跳数
- 超过15跳认为不可达
- DV每隔30秒和邻居交换DV,通告
- 每个通告包括:最多25个目标子网
- RIP 通告(advertisements)
- DV: 在邻居之间每30秒交换通告报文
- 定期,而且在改变路由的时候发送通告报文
- 在对方的请求下可以发送通告报文
- 每一个通告:至多AS内部的25个目标网络的DV
- 目标网络+跳数
- 一次公告最多25个子网
- 最大跳数为16
我是D节点

D到达z代价是7,这个时候A告诉D,A到达z代价是4,D到达A代价是1



网络层的协议RIP,以应用进程的方式来实现还接住了传输层的服务
内部网关协议RIP基于DV算法
4.6.2 OSPF(基于LS算法)
内部网关协议OSPF基于LS算法
OSPF (Open Shortest Path First)
- “open”:标准可公开获得
- 使用LS算法
- LS 分组(邻居和代价)在网络中(一个AS内部)分发
- 全局网络拓扑,代价在每一个节点中都保持
- 路由计算采用Dijkstra算法
- OSPF通告信息中携带:每一个邻居路由器一个表项
- 通告信息会传遍AS全部(通过泛洪)
- 在IP数据报上直接传送OSPF报文(而不是通过UDP和TCP)
- IS-IS路由协议:几乎和OSPF一样
OSPF “高级” 特性(在RIP中没有的)
- 安全:所有的OSPF报文都是经过认证的(防止恶意的攻击,不能伪造)
- 允许有多个代价相同的路径存在(在RIP协议中只有一个)
- 这条路径到目标代价是5,另一条也是5,两条路径都可以保留
- 对于每一个链路,对于不同的TOS有多重代价矩阵(多重消费尺度衡量)
- 例如:卫星链路代价对于尽力而为的服务代价设置比较低,对实时服务代价设置的比较高
- 按照支持不同的代价标准计算最优路径,如:按照时间和延迟、按照跳数分别计算最优路径
- 对单播和多播的集成支持:
- Multicast OSPF (MOSPF) 使用相同的拓扑数据库,就像在OSPF中一样
- 在大型网络中支持层次性OSPF
层次性的OSPF路由

- 2个级别的层次性:本地,骨干
- 链路状态通告仅仅在本地区域Area范围内进行
- 每一个节点拥有本地区域的拓扑信息;
- 关于其他区域,知道去它的方向,通过区域边界路由器(最短路径)
- 区域边界路由器:“汇总(聚集)”到自己区域内网络的距离,向其它区域边界路由器通告。
- 骨干路由器:仅仅在骨干区域内,运行OSPF路由
- 边界路由器:连接其它的AS's.
4.7 ISP(AS间)之间的路由选择:BGP
BGP协议的特点BGP是一种AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构。
4.7.1 层次路由
- 一个平面的路由
- 一个网络中的所有路由器的地位一样
- 通过LS, DV, 或者其他路由算法,所有路由器都要知道其他所有路由器(子网)如何走
- 所有路由器在一个平面
- 平面路由的问题
- 规模巨大的网络中,路由信息的存储、传输和计算代价巨大
- DV: 距离矢量集很大,且不能够收敛(巨大网络范围内收敛到同一个真实值无法实现,迭代次数多)
- LS: 几万个节点的LS分组的泛洪传输,存储以及最短路径算法的计算
- 管理问题:
- 不同的网络所有者希望按照自己的方式管理网络
- 希望对外隐藏自己网络的细节
- 当然,还希望和其他网络互联
层次路由
- 层次路由:将互联网分成一个个AS(路由器区域)
- 某个区域内的路由器集合,自治系统(autonomous systems)(AS)
- 一个AS用AS Number(ASN)唯一标示
- 一个ISP可能包括1个或者多个AS
- 路由变成了:2个层次路由
- AS内部路由:在同一AS内路由器运行相同的路由协议
- “intra-AS” routing protocol:内部网关协议(RIP,OSFP)
- 不同的AS可能运行着不同的内部网关协议
- 能够解决规模和管理问题
- 如:RIP, OSPF, IGRP
- 网关路由器:AS边缘路由器,可以连接其他AS
- AS间运行AS间路由协议
- “inter-AS” routing protocol:外部网关协议
- 解决AS之间的路由问题,完成AS之间的互联互通
层次路由的优点
- 解决了规模问题
- 内部网关协议解决:AS内部数量有限的路由器相互到达的问题,AS内部规模可控
- 如AS节点太多,可分割AS,使得AS内部的节点数量有限
- AS之间的路由的规模问题
- 虽然一个AS,对于AS之间的路由从总体上来说,只是增加了一个节点子网(每个AS可以用一个节点来表示)
- 对于其他AS来说只是增加了一个表项,就是这个新增的AS如何走的问题
- 扩展性强:规模增大,性能不会减弱太多,负担也不会增加太多
- 解决了管理问题
- 各个AS可以运行不同的内部网关协议
- 可以使自己网络的细节不向外透露
4.7.2 互联网AS间路由协议:BGP(基于DV算法)
- BGP(Border Gateway Protocol): 自治区域间路由协议“事实上的”标准
- “将互联网各个AS粘在一起的胶水”
- 边界网关协议
- BGP提供给每个AS以下方法:(BSP协议的内容)
- eBGP:从相邻的ASes那里获得子网可达信息(也就是向外部AS通告信息)
- iBGP:将获得的子网可达信息传递到AS内部的所有路由器
- 根据子网可达信息和策略来决定到达子网的“好”路径
- 允许子网向互联网其他网络通告“我在这里”
- 基于距离矢量算法(路径矢量)
- 不仅仅是距离矢量,还包括到达各个目标网络的详细路径(AS序号的列表)能够避免简单DV算法的路由环路问题(去过的AS不再去)

4.7.2.1 BGP基础
- BGP会话: 2个BGP路由器(“peers”)在一个半永久的TCP连接上交换BGP报文:
- 通告向不同目标子网前缀的“路径”(BGP是一个“路径矢量”协议)
- 当AS3网关路由器3a向AS2的网关路由器2c通告路径:AS3, X
- 3a参与AS内路由运算,知道本AS所有子网X的信息
- 语义上:AS3向AS2承诺,它可以向子网X转发数据报
- 3a是2c关于X的下一跳(next hop)


- 路由器AS2.2c从AS3.3a接收到的AS3.X路由通告(通过eBGP)
- 基于AS2的输入策略,AS2.2c决定接收AS3.X的通告,而且通过iBGP向AS2的所有路由器进行通告
- 基于AS2的策略,AS2路由器2a通过eBGP向AS1.1c路由器通告AS2.AS3.X 路由信息
- 路径上加上了AS2自己作为AS序列的一跳

网关路由器可能获取有关一个子网X的多条路径,从多个eBGP会话上:
- AS1网关路由器1c从2a学习到路径:AS2,AS3,X
- AS1网关路由器1c从3a处学习到路径AS3,X
- 基于策略,AS1路由器1c选择了路径:AS3, X,而且通过iBGP告诉所有AS1内部的路由器

4.7.2.2 路径的属性 & BGP 路由
- 当通告一个子网前缀时,通告包括BGP属性
- prefix + attributes = route
- 前缀 属性 = ”路由”
- 2个重要的属性:
- AS-PATH: 前缀的通告所经过的AS列表 AS 67 AS 17
- 检测环路:多路径选择
- 在向其它AS转发时,需要将自己的AS号加在路径上
- NEXT-HOP: 从当前AS到下一跳AS有多少个链路,在NEXT-HOP属性中,告诉对方通过哪个I 转发。
- 其它属性:路由选择时标,如何被插入的属性
- 基于策略的路由:
- 当一个网关路由器接收到了一个路由通告,使用输入策略来接受或过滤通告(accept/decline)。
- 过滤原因1:不想经过某个AS,转发或前缀的分组
- 过滤原因2:已经有了一条去往某前缀的偏好路径
- 策略也决定了是否向它别的邻居通告收到的这个路由信息
- 输入策略:eBGP
- 策略:iBGP,尽可能快就好,也叫做内部AS无需策略
4.7.2.3 BGP报文
- 使用TCP协议交换BGP报文。
- BGP报文:
- OPEN:打开TCP连接,认证发送方
- UPDATE:通告新路径(或者撤销原路径)
- KEEPALIVE:在没有更新时保持连接,也用于对OPEN请求确认
- NOTIFICATION:报告以前消息的错误,也用来关闭连接
4.7.2.4 BGP, OSPF, 转发表表项
- Q: 路由器是如何设置到达这些子网前缀的转发表表项的?
- 回顾:1a, 1b, 1c从1c那里通过iBGP学习到了子网X,“到往子网X的要通过1c”
- 1d:通过OSPF内部网关协议,为了到达1c,必须通过本地接口1
- OSPF;基于LR,知道子网中所有网关信息(接口代价最优路径…)
- 因此有了表项X 1
- 路由表项是由AS内部和AS间的路由共同决定的
- 外部网关协议(BGP):告诉可以通过哪个网关路由器到达哪个外部子网
- 内部网关协议(OSPF):告诉内部路由器连接接口

4.7.2.5 BGP 路径选择策略
- 路由器可能获得一个网络前缀的多个路径,路由器必须进行路径的选择,路由选择可以基于:(打分)
- 本地偏好值属性:偏好策略决定
- 最短AS-PATH:AS的跳数
- 最近的NEXT-HOP路由器:热土豆路由
- 附加的判据:使用BGP标示
- 一个前缀对应着多种路径,采用消除规则直到留下一条路径
热土豆路由

- 2d通过iBGP获知,它可以通过2a或者2c到达X
- 热土豆策略:选择具备最小内部区域代价的网关作为往X的出口(如:201<263,迅速甩出去这个热土豆,2d选择2c。即使往X可能有比较多的AS跳数,不要操心域间的代价!
4.7.2.6 BGP: 通过路径通告执行策略


假设一个ISP只想路由流量到/去往它的客户网络(不想承载其他ISPs之间的流量,即不通告:不是去往我的客户,也不是来自我的客户)
- A 向B和C通告路径AW
- B选择不向C通告BAw:
- 因为CBAw的路由上无法获得收益,因为C, A, w都不是B的客户
- C从而无法获知 CBAw路径的存在:每个ISP感知到的网络和真实不一致
- C可能会通过 CAW(而不是使用B)最终路由到W

4.7.3 内部网关协议 VS 外部网关协议
为什么内部网关协议和外部网关协议如此不同?
策略(管理):
- Inter-AS(AS间): 管理员需要控制通信路径,谁在使用它的网络进行数据传输;使用策略是也因为关注经济流量效率……
- Intra-AS(AS内): 一个管理者,所以无需策略;
- AS内部的各子网的主机尽可能地利用资源进行快速路由
规模:
- AS间路由必须考虑规模问题,以便支持全网的数据转发
- AS内部路由规模不是一个大的问题
- 如果AS太大,可将此AS分成小的AS;规模可控
- AS之间只不过多了一个点而已
- 或者AS内部路由支持层次性,层次性路由节约了表空间,降低了更新的数据流量
性能:
- Intra-AS(AS内): 关注性能
- Inter-AS(AS间): 策略可能比性能更重要
4.8 SDN




1.基于流表的匹配+行动模式
2.控制平面和数据平面的分离
3.控制平面功能在数据交换设备之外实现
4、可编程控制应用在控制器之上以网络应用形式实现各种网络功能
4.8.1 数据平面交换机(分组交换机)

流表的安装,分组匹配
4.8.2 SDN控制器(网络OS)

逻辑上集中,物理上分布实现.南北向接口。计算流表

4.8.3 控制应用

4.8.4 OpenFlow协议:控制器和交换机交互协议
采用TCP来交换报文




设备上报设备信息,控制器(APP和SDN控制器共同)使用算法更新流表。
采用OpenFlow协议下发流表

4.9 ICMP




- 作者:🐟🐟
- 链接:https://www.imyuyu.top//article/CN/Chapter4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。