1. 控制平面的架构

  1. 每路由器控制:每台路由器都有一个路由选择组件,用于与其他路由器通信,并计算转发表的值

  1. 逻辑集中制控制:外部控制器与路由器上的控制代理(Control Agent)进行交互,以配置和管理路由器的转发表

2. 路由选择算法

2.1 基本概念

路由选择(routing):确定一条从发送方到接收方的通过路由器网络的路径

网络的图表示
  • 节点:路由器
  • 边:路由器之间的链路
  • 权值:传输开销
  • 邻居:相连的两个路由器
  • 路径:节点序列(x1,x2,...,xn)(x_1,x_2,...,x_n)

拓扑(Topology):指的是网络中各个设备之间的连接方式和布局,是设备间的几何关系

路由选择算法类型
  • 集中式(centralized):算法知道全局节点信息
  • 分散式(decentralized):每个节点仅有与其直接相连链路的开销信息,以迭代、分布式的方式计算
  • 静态(static):路由随时间的变化非常缓慢,通常由人工进行手动调整
  • 动态(dynamic):随着网络流量的负载或拓扑的变化而变化
  • 负载敏感(load-sensitive):链路开销会动态地变化以反映出拥塞水平
  • 负载迟钝(load-insensitive):链路开销不明确地反映拥塞水平

2.2 LS算法

链路状态算法(Link State,LS):是集中式路由选择算法,具有全局状态信息,知道每条链路的开销

Dijkstra算法:确定当前节点到所有其他节点的最短路径(长度和下一跳),时间复杂度为O(n2)O(n^2)

假设u为源

迭代已经拓展当前拓展u->vu->wu->xu->yu->z
0u251\infin\infin
1ux24(变)12(变)\infin
2u,xv2412\infin
3u,v,xy23(变)124(变)
4u,v,x,yw23124
5u,v,w,x,yz23124

路由振荡(oscillation):网络结构和路径开销的动态变化,导致频繁更换路由

考虑y到w的路由,a时刻决定b时刻顺时针走,b时刻c时刻逆时针走,c时刻决定d时刻顺时针走,d时刻决定下次逆时针走

2.3 DV算法

2.3.1 原理

距离向量算法(Distance Vector,DV):是分布式路由选择算法,每个节点从相邻节点接收信息来执行计算

  • 每个节点都会维护一个自己的距离向量,包含从该节点到网络中所有其他节点的当前已知的最短路径
  • 每个节点还会维护一个距离向量表/路由选择表,包含自己的距离向量和邻居节点的距离向量

注意“当前已知”,这是和LS算法最显著的区别,因为这个最短路径是局部的,即只考虑直接邻居的情况,而不是整个网络的全局视图
因此称DV算法是迭代的、分布式的、异步的

Bellman-Ford方程d[v]=min(d[v],d[u]+w(u,v))d[v]=min(d[v],d[u]+w(u,v))

  • d[v]d[v]表示从源s到节点v的最短路径
  • d[u]d[u]表示从源s到节点u的最短路径
  • w(u,v)w(u,v)表示从节点u到节点v的开销

实际上,DV算法追求的不是最短路径长度,他只需要知道沿着最短路径到目的节点的下一跳邻居节点

DV算法过程:每个节点使用来自邻居节点的距离向量来更新自己的距离向量,如果节点的距离向量改变,会发送更新报文给邻居节点,持续上述过程直到无更新报文,算法进入静止状态

2.3.2 路由选择环路

路由选择环路(loop):数据包在网络中长时间或无限循环于一组节点之间,无法到达目标节点的情况

原因:当网络拓扑发生变化时,节点的路由选择表更新可能需要时间,在这段更新延迟内,某些节点可能基于过时的信息做出决策,从而引发环路

如果链路开销过大,路由选择环路会导致无穷计数(Count-to-Infinity)

图片(ipad画图)

2.3.3 毒性逆转

毒性逆转(poisoned reverse):是一种用来解决路由环路问题的技术,当路由器不选择某条路径时,会将该路径的开销设置为无穷大(毒性)

路由器撒了一个善意的谎言

图片(ipad画图)

2.4 算法比较

属性LS算法DV算法
发送对象需要给全部节点发送更新报文只发送更新报文到邻居节点
收敛速度在已知全局信息的情况下,收敛速度固定为为O(n2)O(n^2)收敛速度慢,容易遇到路由选择环路问题导致无穷计数
健壮性路由计算在某种程度上是独立的,具有一定的健壮性一台路由器出现延迟更新或故障很有可能导致整个网络瘫痪

3. OSPF

自治系统(Autonomous System,AS):是一个网络管理的基本单位,每个AS由一组通常处在相同管理控制下的路由器组成

自治系统内部路由选择协议(intra-autonomous system routing protocol):在一个自治系统内运行的路由选择算法

为什么需要AS?
  • 规模太大:在一个网络中的路由器数量和路由条目可能非常庞大,管理路由信息和更新开销信息几乎不可能,且使用DV算法可能永远无法收敛
  • 自定义管理:ISP通常希望按自己的意愿运行路由器,或者对外部隐藏组织内部的网络拓扑

开放最短路优先(Open Shortest Path First,OPSF):用于在AS内部确定最短路径路由的协议

  • 路由器会构建关于整个AS的完整拓扑图
  • 路由器在本地运行Dijkstra算法计算最短路径
  • 每当遇到链路更新或者周期到期时,路由器会广播路由选择信息到AS内的每个路由器
OSPF的优点
  • 安全:支持认证机制,确保只有授权的路由器才能参与路由交换
  • 多条相同路径的开销:允许在相同开销的多条路径之间进行负载均衡
  • 对单播和多播路由选择的综合支持:能处理单播和多播路由选择,适用于不同的网络通信需求
  • 支持在单个AS中的层次结构:可以将一个AS划分为多个区域,每个区域内允许自己的OSPF,提升了网络的可扩展性和管理性

设置OSPF链路权值的反因果:在实践中,操作员首先分析网络需求和流量模式,确定期望的网络路径或流量分布策略,然后再通过调整链路权值来影响OSPF算法选择这个路径。(不是先确定权重,然后再通过算法确定路径)

4. BGP

4.1 BGP简介

自治系统间路由选择协议(inter-autonomous system routing protocol):在多个自治系统间运行的路由选择算法

边界网关协议(Broder Gateway Protocol,BGP):交换不同自治系统间的路由信息,从而实现互联网的全局路由

AS内部使用OSPF协议路由,AS外部使用BGP协议路由
BGP是互联网的骨干协议,重要性仅次于IP协议,它将因特网中数以千计ISP黏合起来

4.2 BGP原理

BGP信息
  • 路由通告(Router Advertisement):当一个网络使用BGP时,它会通告它所能直接到达的网络的信息,又称为前缀可达性信息
  • 前缀:BGP不是路由到一个具体的IP地址,而是路由到具有CIDR前缀的子网,因此路由器的转发表具有(prefix,port)形式的表项
  • 可达:每个AS通过与邻居AS交换前缀可达性信息来获取网络拓扑,从而实现将AS/子网连接起来

BGP设备
  • 网关路由器:位于AS边缘,直接连接到在其他AS中的路由器
  • 内部路由器:仅连接在它自己AS中的主机和路由器
  • 外部BGP(eBGP):跨越两个AS的BGP连接
  • 内部BGP(iBGP):在相同AS内的BGP连接

BGP属性
  • AS-PATH:记录了路由到目的AS所经过的AS序列
  • NEXT-HOP:指定了到达目的AS的下一跳IP地址
  • LOCAL-PREF:本地偏好,指定当前最优先选择的路由

4.3 路由选择算法

4.3.1 热土豆路由选择

流程
  1. 从BGP协议得知多个网关可达的子网
  2. 使用AS内部协议的路由选择信息,确定到达每个网关的最短路径开销
  3. 选择具有最小最短路径开销的网关,即到NEXT-HOP具有最小的开销的网关
  4. 从转发表确定接口,并加入表项

最短:当前节点到所有其他节点的所有路径中最短的路径
最小:当前节点到所有网关节点的最短路径中最小的路径

自私:没有考虑在AS之外的端到端开销,只为了减小在AS内部的开销,尽快将分组传送到其他AS

热土豆就是“烫手的山芋”,希望赶紧扔掉!

4.3.2 消除规则

按顺序地调用下列消除规则直到余下一条路由供选择

  1. 具有最高本地偏好值的路由将被选择(LOCAL-PREF完全取决于AS内的网络管理员)
  2. 选择具有最短AS-PATH长度的路由
  3. 使用最靠近NEXT-HOP的路由,即热土豆
  4. 使用BGP标识符来选择

4.4 IP任播

IP任播(anycast):在多个不同的物理位置部署相同的IP地址,使得路由器能够根据网络拓扑,自动将分组路由到距离发送者最近的节点

IP任播的优势
  • 优化性能:用户请求可以快速被路由到最近的服务器,减少延迟
  • 提高可靠性:如果一个节点出现故障,流量会自动转发到其他健康的节点
  • 负载均衡:通过共享相同的IP地址,网络可以将流量均匀地分配到多个节点上
  • 简化路由选择:路由器不需要知道每个节点的具体地址,只需要知道这个共享的逻辑IP地址

IP任播技术广泛用于CDN和DNS,不难理解,这是要尽可能提升域名解析速度和内容分发速度,减少用户体验到的延迟

4.5 网络运营

多宿接入的客户网络(multi-homed stub client network):经由多个不同的ISP接入到因特网的客户网络

BGP策略
策略目的效果
客户网络不会通告它到达除自身以外的其他目的地的路径确保客户网络只起到接入ISP的作用,而不充当中间路由器简化客户网络的管理,避免客户网络的流量被占用
任何穿越某ISP主干网的付费流量必须是其源或目的位于该ISP的客户网络中,否则这些流量将免费搭车通过该ISP网络确保网络流量的平衡和经济性促进ISP之间的互联,改善整体网络性能

免费搭车的做法虽然看起来有损ISP的利益,因为ISP免费承担转发流量的工作,但实际上别的ISP也在免费帮自己转发流量,促进了网络互联和资源利用,实现了互利共赢

5. SDN

此处将路由器称为交换机

5.1 SDN体系结构

SDN控制器:运行在服务器上的软件平台,负责网络的整体控制

SDN网络控制应用程序:构建在SDN控制器上的应用程序,提供具体的网络服务

SDN特征
特征解释
基于流的转发SDN控制的交换机使用流表规则来转发数据包,即匹配运输层、网络层、链路层的首部字段执行对应操作,实现精细化的流量管理
数据平面和控制平面分离SDN的数据平面专注于数据包的实际转发,而SDN的控制平面则集中于策略制定和网络管理
网络控制功能SDN的控制功能通过SDN控制器和网络控制应用程序实现
可编程网络SDN允许管理人员通过编程接口对网络进行动态配置和管理,赋予了控制平面灵活的“智力”

SDN控制器运行在多个服务器上,且这些服务器可以部署在不同物理位置上,但逻辑上是集中的

5.2 SDN控制器层次

层次作用功能
抽象层/北向接口负责与网络控制应用程序进行交互路由选择、接入控制、负载均衡
管理层负责管理网络监控、检测、控制、优化
通信层/南向接口负责与交换机进行通信获取设备状态,执行网络配置

5.3 OpenFlow协议

作为TCP的有效载荷,使用6653默认端口

报文方向功能
配置控制器到交换机查询并设置交换机的参数
修改状态控制器到交换机修改交换机中的流表和端口特性
读状态控制器到交换机读取交换机的流表内容、端口状态和其他统计信息
发送分组控制器到交换机指示交换机从特定端口发送特殊分组
流删除交换机到控制器通知控制器已删除一个表项
端口状态交换机到控制器通知控制器端口状态的变化
分组入交换机到控制器将无法处理的分组交给控制器处理

5.4 SDN使用实例

情况:交换机s1和s2的之间的链路断开
  1. 交换机s1通过OpenFlow协议发送“端口状态”报文到SDN控制器的通信层以通报该链路状态的更新
  2. SDN控制器通过通信接收报文后,通告管理层中的链路状态管理器
  3. 链路状态管理器更新链路状态信息库,并将更新信息通过抽象层传递给SDN网络控制应用程序
  4. 路由选择应用程序接收到链路状态更新的通告,然后基于当前信息重新计算最低的开销路径
  5. 路由选择应用程序通过抽象层与SDN控制器中的流表管理器交互
  6. 流表管理器通过通信层的OpenFlow协议,发送“修改状态”报文到所有交换机(s1,s2,s3,s4),实现更新流表

6. ICMP

6.1 报文结构

因特网控制报文协议(Internet Control Messages Protocol,ICMP):用于主机和路由器之间沟通网络层信息

ICMP报文是承载在IP报文中的,即它是作为IP报文的有效载荷,因此从内容上讲它是IP的一部分,从体系结构上讲它位于IP之上

ICMP报文类型取决于报文中的类型字段和编码字段
类型编码描述
00回显应答
30目的网络不可达
31目的主机不可达
32目的协议不可达
33目的端口不可达
36目的网络未知
37目的主机未知
40源抑制:用于拥塞控制
80回显请求
90路由器通告:通告当前路由器的存在和配置信息
100路由器发现:请求别的路由器发送通告
110TTL过期
120IP首部受损

6.2 ping

原理:源主机发送一个类型8编码0的ICMP报文到指定ip地址或域名的主机,请求回显;目的主机收到回显请求报文后,会发送一个类型0编码0的ICMP报文到源主机,响应回显

  • ping命令会自动通过DNS将域名解析为IP地址
  • 一共发送了4个回显请求报文,均收到了回显应答,因此0%丢包率
  • 往返时间最小为72ms,最大为84ms,平均79ms

6.3 tracert

原理:源主机不断发送TTL递增且端口不可达的IP数据报到目的主机,从而实现对路径的追踪

  • 当到达中间路由器且TTL过期时,中间路由器会返回一个类型11编码0的ICMP报文
  • 当到达目的主机时,目的主机会返回一个类型3编码3的ICMP报文

  • tracert限制了最大跳数为30次
  • 每个TTL会发送三个分组,并得到三个分组的往返时延,如果中途出错会显示*
  • 超时或端口不可达的ICMP报文都会指示IP地址,从而确定每一跳和目的主机的IP地址

7. SNMP

7.1 网络管理

定义:网络管理包括了硬件、软件和人类元素的设置、综合和协调,以监视、测试、轮询、配置、分析、评价和控制网络及网元资源,用合理的成本满足实时性、运营性能和服务质量的要求

网络管理架构
组件作用
管理服务器(server)执行网络管理活动的主体
被管设备(device)主机、路由器、交换机、中间盒等其他联网设备及其软件,它们是提供网络服务的基础设施
数据(data)设备的配置数据、设备使用过程中的运行数据和统计数据
网络管理代理(agent)运行在被管设备上的软件进程,与管理服务器通信,在管理服务器的命令和控制下在被管设备执行本地操作
网络管理协议(protocol)用于管理服务器与代理之间的通信,定义了如何格式化和传输管理信息

7.2 简单网络管理协议

简单网络管理协议(Simple Network Management Protocol,SNMP):是一个应用层协议,用于服务器和代理之间传递管理控制和信息报文

管理信息库(Management Information Base,MIB):用于存储网络设备管理信息的数据库,使用**管理信息结构(Structure of Management Information,SMI)**的数据描述语言来定义网络设备的各种对象及其属性,便于SNMP进行访问和管理

“请求-响应”模式:管理服务器向代理发送一个SNMP请求报文,代理接收到请求后检索MIB,然后对被管设备执行对应操作,最后向管理服务器发送SNMP响应报文

SMTP报文的协议数据单元(Protocol Data Unit,PDU)
PDU类型方向描述
GetRequest管理者->代理请求取得指定MIB对象实例值
GetNextRequest管理者->代理请求取得下一个MIB对象实例值
GetBulkRequest管理者->代理请求批量取得多个MIB对象实例值
InformRequest管理者->管理通知另一个管理相关信息
SetRequest管理者->代理请求设置MIB对象的实例值
Response代理->管理者or管理者->管理者对请求的响应
Trap代理->管理者向管理者通知一个异常事件

作为UDP的有效载荷,使用161默认端口进行请求报文和响应报文的传输,使用162端口进行陷阱报文的传输

陷阱报文是异步产生的/单向的,即只从代理到管理者,不要求Response,且结构和其他报文不一样