Network
设计
路由器的工作在分组从发送方主机传送到接收方主机 的过程的中间:
- 发送方将数据段封装成分组
- 接收方将分组解封装后将数据段递交给传输层
- 网络层协议存在于每台主机和路由器上,路由器检查所有经过它的IP分组的分组头
分层
网络层(network layer)通常被划分为两层:数据平面(data plane)和控制平面(control plane);这也是网络层的功能;
- 转发(forwarding):数据平面从输入链路向输出链路转发数据报(datagrame);时间通常很短;
- 路由选择(routing):控制平面主要和网络范围相关,协调本地路由器的转发操作,通常需要设计选路算法,以确定分组从源端到目的端的路径范围处理过程;
路由器会维护一个转发表(forwarding table),检查分组首部,索引转发表,找到对应的输出链路接口;
SDN
软件定义网络(software-defined networking, SDN)将控制平面的功能作为单独的服务;
传统的路由器通过人工操作的静态配置的办法,这样不需要任何路由选择协议,但是不是自动化的,对于网络拓扑结构的改变响应更慢;
控制平面的功能往往位于一台远程的控制器中,可能由ISP管理,路由器通过交换包含转发表等信息的报文与控制器通信,这样的网络是软件定义的;
服务
网络服务模型(network service model)定义了分组在发送和接收主机间的端到端传输特性,如确保交付,确保时延上界,有序分组,最小带宽,安全加密;
这样网络层的服务称作尽力而为服务(best-effort service),网络层尽力完成这些服务特性,但是不给予任何保证;
特性 | 尽力而为服务 |
---|---|
分组交付 | 不保证所传送的分组不丢失,当网络发生拥塞时网络中的结点可根据情况将一些分组丢弃 |
分组顺序 | 不保证按源主机发送分组的先后顺序 |
交付时限 | 不保证在时限内必须将分组交付给目的主机 |
换句话说,就是没有服务!但是通过传输层的设计,网络层的尽力而为的服务模型和适量带宽的供给被认为足够的好;
网络体系结构 | 服务模型 | 传输质量-带宽保证 | 传输质量-无丢包保证 | 传输质量-排序 | 传输质量-定时 | 拥塞指示 |
---|---|---|---|---|---|---|
Internet | 尽力而为 | 无 | 无 | 任何可能顺序 | 不维持 | 无 |
ATM | 恒定比特率CBR | 恒定速率 | 是 | 有序 | 维持 | 无拥塞 |
ATM | 可用比特率ABR | 保证最小速率 | 无 | 有序 | 不维持 | 提供拥塞指示 |
Data Plane
不同类型的网络具有不同类型的设计,区别如下表所示,这两种设计哲学分别对应了数据报网络和虚电路网络:
特性 | Internet (数据报网络) | ATM (虚电路网络) |
---|---|---|
核心设计理念 | 数据在计算机中进行交换 | 由电话系统演变而来 (人类会话) |
服务类型 | 弹性服务,没有严格的时间限制 | 严格的时间和可靠性要求,需要有保障的服务 |
终端系统 | 智能终端系统,具有适应性,性能控制,错误恢复 | 哑终端系统 (电话) |
网络内部复杂性 | 网络内部简单,边缘复杂 | 网络内部复杂 |
链路类型 | 多种链路类型(卫星,以太网光纤,无线等),具有不同特性 | - |
统一服务 | 统一服务困难 | - |
网络层在数据平面上提供了两种基本的服务模型:数据报服务和虚电路服务。
虚电路
网络层为上层的主机提供的服务分类为
- 数据报服务:无连接的网络服务,网络随时接受主机发送的数据报,网络为每个分组独立地选择路由 ;
- 虚电路服务:面向连接的网络服务,源主机先向目的主机发出一个特定格式的控制信息分组,要求进行通信,同时寻找一条合适路由。若目的主机同意通信就发回响应,然后双方就建立了虚电路。
虚电路服务对通信的服务质量(Quality of Service)有较好的保证。 性能可靠,网络行为沿网络路径发生
- 数据传输前建立虚电路,传输完毕后拆除虚电路
- 每个分组携带 VC 标识(并非目的地址)
- 在源-目的路径上每个路由器要维护每个连结的状态信息
- 链路、路由器资源(带宽、缓冲区)可能分配给VC
一个虚电路VC的组成如下:
- 源和目的主机间的路径
- VC号,沿着该路径中的每段链路一个号码
- 沿着该路径的每台路由器中的转发表项
VC号的更新:每台中间路由器用一个新的VC号取代原来的VC号. 新的VC 号从转发表中获得;
与传输层服务有相似之处,但也有很大不同:
特性 | 网络层 | 传输层 |
---|---|---|
服务 | 主机到主机 | 端到端 |
服务选择 | 在同一时间仅提供数据报服务或虚电路服务中的一种 | 提供TCP和UDP |
实现 | 在端系统及网络核心实现 | 在端系统中实现 |
路由器由转发表来维护连接状态信息;
信令协议
信令协议用来建立,维护和拆除虚电路,在ATM,帧中继(frame-relay),X.25等中有应用;
数据报网络
数据报网络不同于虚电路网络,在网络层没有呼叫建立;
- 路由器端到端的连接没有状态信息维护;
- 分组使用目的主机地址转发,同一源-目的主机对间的分组可能走不同的路径;
转发表维护如下:
路由器原理
回忆路由器的基本功能:路由选择和转发;在数据平面上设计的结构如下图,主要在硬件上实现转发功能;
- 输入端口(input port):执行物理层的功能,和数据链路层的交互;
- 输出端口(output port):将输入端口连接到输出端口的内部网络;
- 交换结构(switching fabric):存储交换结构存储的分组
位于控制层面的路由选择处理器负责执行路由选择算法;
输入端口的内部执行分散式转发:根据分组中的目的地址, 在输入端口的缓存中查找转发表得出适当的输出端口;
交换结构可能具有如下类型的三种结构;
- 基于内存交换:较传统的方式为CPU控制交换完成,分布被拷贝到系统内存,速度受到内存带宽限制,因为分组需要经过两次总线;
- 基于总线交换:分组从输入端口缓存经过一根共享总线到达输出端口缓存,交换速率受总线带宽限制,但是对于接入和企业路由器来说速度足够了 ;
- 基于互联网格交换:克服总线带宽限制,一个纵横式交换机就是一个由
2n
条总线组成的互联网络,n
个输入端口与n
个输出端口连接,比较高级的设计为IP数据报分割成固定长度信元, 通过互连网络来交换信元.
输出端口在网络层执行的是缓存分组,当分组从交换结构到达的速率快于输出链路速率时,需要缓存;而调度的原则都是在等待传输的排队分组中进行选择;
queuing
输入端口排队:当交换速度比所有输入端口的综合速度慢;
输出端口排队:当分组从交换结构到达的速率快于输出链路速率时,需要缓存;
用通过入口进入匝道和从出口离开匝道类比路由器结构,堵车类比于路由器中的排队;
排队带来的直接影响就是延迟,甚至当排队队列缓冲区溢出,可能造成分组丢失;
线头阻塞(head-of-the line blocking, HOL blocking)是指,排在队列前面的分组阻止队列中其他的分组向前移动;
这里就是上面红色分组排队导致下面绿色分组等待;
当没有足够的缓存输入分组时,需要采取丢包的策略,有时需要向发送方告知拥塞(拥塞告知比特)对分组标记;这些策略统称为主动队列管理(active queue management, AQM);包括RED,PIE,CoDel等;
当我们考虑缓存大小的问题时,我们需要trade-off,因为大缓存可以缓解丢包问题,但是可能加剧时延问题,即缓存膨胀(bufferbloat);
还有一些排队规则问题,可以类比OS,比如FIFO,优先权,循环和加权公平下的保持工作排队,加权公平排队(WFQ)等等;以确保网络的中立性;
网际协议
数据报格式
IPv4数据报格式的关键字段如下:
- 版本:4比特。标识IP协议的版本,对于IPv4始终是4。用于确保不同IP版本设备间的兼容性。
- 首部长度:4比特。指示IP头部的长度,以32比特字(4字节)为单位。最小值为5(20字节),最大值为15(60字节),因为可选字段的存在导致头部长度可变。
- 区分服务:6比特。原为服务类型字段,用于指定差异化服务,例如实时数据流的优先级。
- 显式拥塞通知:2比特。允许端到端地通知网络拥塞,而无需丢弃数据包。当两端都支持且网络支持时有效。
- 总长度:16比特。定义整个IP数据包的长度(字节),包括头部和数据。最小20字节,最大65535字节。用于确定数据包的实际大小和数据负载的起始位置。
- 标识:16比特。当一个IP数据报被分片时,所有分片都带有相同的标识号,接收方用它来识别属于同一个原始数据报的分片,以便重组。
- 标志:3比特。包含三个标志:
- 保留位:1比特,必须为0。
- 不分片:1比特。如果设置为1,路由器将不会分片数据报。如果数据报太大而无法通过,则会被丢弃并向发送方发送错误信息。
- 更多分片:1比特。如果设置为1,表示后面还有更多分片。最后一个分片的MF位为0。
- 片偏移:13比特。指示当前分片在原始未分片IP数据报数据部分的相对位置。以8字节块为单位。第一个分片的偏移量为0。
- 生存时间:8比特。限制数据报在网络中传输的最大跳数(路由器数量)。每经过一个路由器,TTL值减1。当TTL达到0时,数据报被丢弃,并通常会向发送方发送ICMP超时消息,防止路由循环。
- 协议:8比特。标识IP数据报数据部分封装的上层协议类型(例如,6表示TCP,17表示UDP,1表示ICMP)。接收方根据此字段将数据递交给正确的上层协议。
- 首部校验和:16比特。用于检测IP头部在传输过程中是否损坏。只对IP头部进行校验。每经过一个路由器,TTL变化后需要重新计算校验和。
- 源IP地址:32比特。发送方的IPv4地址。
- 目的IP地址:32比特。接收方的IPv4地址。
- 选项:0-320比特,可变长度,并用0填充至32比特的倍数。不常用,包含如源路由、记录路由等信息。包含选项的数据包可能会被某些路由器视为危险并阻止。
IPv4 & IPv6
每台主机和路由器都能发送数据报,因此IP要求每台主机和路由器接口都应该有一个IP地址;
接口是主机/路由器与物理链路之间的边界;从技术上来说,一个IP地址和一个接口相关联,在全球互联网中,IP应该是唯一的;
对于IPv4地址来说,具有如下特性
- 每个IP地址长度为32比特,等价于4字节;
- 按照点分十进制记法,每个字节按照十进制书写;
- 子网由一个路由器接口和下面连接的主机接口构成;
- 子网被分配一个掩码(mask),指示IP左侧多少比特定义了子网的址;任何连到该子网的主机必须具有相同的掩码;因此子网代表这个网络的最高公共前缀;
- 一个最佳实践是一个组织内部的IP地址共享前缀,因为这可以减少路由器中转发表的长度;
两种推荐方法使得 IPv4 和 IPv6 路由器的网络工作
双栈的设计是,一些路由器具有双重栈 (v6, v4) 能够在两种格式中转换双栈节点具有三种工作模式:
- 只运行IPv6协议,表现为IPv6节点;
- 只运行IPv4协议,表现为IPv4节点;
- 双栈模式,同时打开IPv6和IPv4协议。
隧道的设计是分组在穿过IPv4路由器时,IPv6分组作为 IPv4分组的负载
CIDR
无类别域际路由选择(Classless InterDomain Routing, CIDR) 是IP地址分配和路由选择的一种方法,这是一种分类编制的技术,旨在更有效地利用IP地址并减缓IPv4地址耗尽的速度,同时降低路由表的增长速度。
- CIDR放弃了传统的A、B、C类网络划分概念,允许在IP地址的任意比特边界上进行地址分配和路由。
- IP地址被分为两部分:最高有效位组成的网络前缀(标识网络或子网)和最低有效位组成的主机标识符(指定网络中特定主机的接口)。
CIDR表示法:采用"斜线记法" (a.b.c.d/n
),其中 a.b.c.d
是IP地址,n
表示网络前缀的位数(从左到右连续的1比特数)。
子网掩码 (255.255.255.0
) 编码了与IPv4地址或网络关联的前缀长度,与CIDR记法功能相同,但在CIDR中,前缀位始终是连续的。
这样做的好处是可以实现层次寻址和路由聚合,即超网,提高了IP地址的有效利用率,也就缓解了IPv4消耗过快的问题;
DHCP
一个组织获得了地址分配后,它可以为本组织内所有主机和路由器分配IP地址;也可以采取静态分配的办法,但是主流是动态主机配置协议(dynamic host configuration protocol, DHCP);
主机每次和网络连接时,都会被分配一个临时的IP地址,每次连接该网络时可能是不同的;
网络连接时,通常是连接WIFI时,主机会获得以下信息
- 临时IP地址
- 子网掩码
- 默认网关:指第一跳路由器地址
- 本地DNS服务器地址
- IP地址租用期
这是一类即插即用的协议或者零配置协议;也是一类客户-服务器协议,网络中新到达的主机向服务器请求以上信息,每个子网都具有一台DHCP服务器或者一个DHCP代理(通常是路由器);
1 | sequenceDiagram |
用户从Discover
报文开始,到ACK
报文结束,便完成了一次交互;
报文类型 | 方向 | 作用 |
---|---|---|
DHCP Discover | 客户端→服务器 | 寻找可用DHCP服务器 |
DHCP Offer | 服务器→客户端 | 提供IP配置提案 |
DHCP Request | 客户端→服务器 | 确认接受配置 |
DHCP Ack/Nak | 服务器→客户端 | 最终确认/拒绝分配 |
NAT
网络地址转换(Network Address Translation, NAT)是一种在IP数据报头部中修改网络地址信息的技术,允许一个私有IP网络连接到互联网。
- 通过将多个内部私有IP地址映射到一个或少量公共IP地址,实现IP地址的复用,缓解IPv4地址耗尽问题;
- 此外,NAT也提供了安全功能,通过隐藏内部网络的拓扑结构和IP地址,增加了一层对外网络的匿名性。
- NAT还为网络构建带来了灵活性,当更换ISP时无需更换内部网络映射;
工作原理:
- NAT通常运行在连接内部私有网络和外部公共互联网的路由器或防火墙上。
- 当内部主机发送数据包到外部网络时,NAT设备会将数据包的源IP地址和源端口号、转换为一个公共IP地址和新的端口号。
- NAT设备维护一个转换表(NAT table),记录私有地址与公共地址之间的映射关系。
- 当外部网络的数据包返回时,NAT设备根据转换表将目的公共IP地址和端口号转换回内部私有IP地址和原始端口号,然后转发给相应的内部主机。
RFC 1918中规定了以下私有IP地址范围,这些地址在公共互联网上是不可路由的:
10.0.0.0
到10.255.255.255
(A类私有网络)172.16.0.0
到172.31.255.255
(B类私有网络)192.168.0.0
到192.168.255.255
(C类私有网络)
NAT类型:
- 静态NAT (Static NAT):将一个私有IP地址一对一地永久映射到一个公共IP地址。常用于需要从外部网络访问的内部服务器;
- 动态NAT (Dynamic NAT):从一个公共IP地址池中动态地选择一个未使用的公共IP地址,将其映射到内部私有IP地址。映射关系在会话结束后释放。
- 端口地址转换 (Port Address Translation, PAT),也称为NAT过载 (NAT Overload):允许多个内部私有IP地址共享一个公共IP地址。通过为每个连接分配不同的端口号来区分不同的内部主机。这是最常用的NAT类型,因为它极大地节省了公共IP地址。
但是这是一项有争议的技术
- 引入延迟:数据包在NAT设备进行地址转换会增加传输延迟。
- 破坏端到端连接性:NAT使得外部主机难以主动发起与内部主机的连接,这给P2P应用、VPN协议等带来挑战。
- 应用层协议问题:某些应用层协议(如FTP、SIP)在数据载荷中嵌入IP地址信息,NAT设备可能需要应用层网关(ALG)来检查和修改这些载荷,增加了复杂性。
- 跟踪和调试困难:由于地址被转换,网络管理员在故障排除和流量监控时可能会遇到困难。
ICMP
因特网控制报文协议(Internet Control Message Protocol, ICMP) 主要用于IP网络上发送控制消息和错误报告。
- 它作为IP协议的辅助协议,弥补了IP协议无连接、不可靠的特性,但并不使IP本身变得可靠。
- 当数据包在网络传输过程中遇到问题(如目标不可达、传输时间超时、参数问题等)时,路由器或目标主机通过ICMP消息向源主机报告。
工作流程如下:
- 源端发送一系列的IP分组给目的端,当第
n
个分组到达第n
个路由器时路由器丢弃该分组并给源端发送一个ICMP报文(type 11, code 0)
这个报文包含了路由器的名称和IP地址; - 当源端收到ICMP报文时,计算传输往返时间RTT,对每个TTL作三次,作为停止发送的根据;
- IP报文最终到达目的端,目的端返回回应应答的 ICMP 报文
(type 0, code 0)
,源端收到此报文,停止发送;
Control Plane
控制平面主要和路由器的选路算法有关;选路算法的任务是发现端到端的最小路径;
从算法考察网络信息来看,可分类为
- 集中式路由选择(centralized routing)算法:拥有全局完整的网络信息计算端到端的最短路径;又被称为链路状态(link state)算法;
- 分散式路由选择(decentralized routing)算法:路由器以迭代的分布式的方式计算出最短路径,每个结点仅有直连链路(邻居)的结点信息,典型的算法为距离矢量(distance vector)算法;
从算法的变化性来看
- 静态路由选择算法:路由随时间变化缓慢,通常人为调整;
- 动态路由选择算法:随着网络流量的负载或者拓扑结构发生变化而改变路由选择;通常周期性更新且直接响应链路开销;
从拥塞水平来看
- 负载敏感(load-sensitive)算法:链路开销动态变化,以反映链路的拥塞水平,分组倾向于绕开该拥塞链路,比如ARPAnet算法;
- 负载迟钝(load-insensitive)算法:链路开销不变化,大多数算法都是此类,比如RIP,OSPF,BGP;
LS算法
Dijkstra算法是一种著名的单源最短路径算法,用于在具有非负边权的图中查找从一个源节点到所有其他节点的最短路径。
核心思想:采用贪心策略。算法维护一个已确定最短路径的顶点集合 S
和一个存储从源点到未访问顶点当前最短距离的优先队列。每次从优先队列中选择距离源点最近的未访问顶点,并将其加入 S
,然后更新其邻居的距离。
Dijkstra算法不能处理含有负权边的图。因为其贪心选择的特性,一旦一个节点的距离被确定,就不会再改变,而负权边可能会导致已确定的最短路径并非真正的最短路径。
工作原理:
- 初始化:将源节点的距离设为0,其他所有节点的距离设为无穷大。创建一个优先队列,包含所有顶点及其当前距离。
- 迭代:在每一步中,从优先队列中取出当前距离最小的未访问顶点
u
。 - 标记:将
u
标记为已访问。一旦一个顶点被标记为已访问,其最短路径距离就被确定。 - 松弛:对于
u
的每个邻居v
,如果通过u
到v
的路径(即dist[u] + weight(u, v)
)比当前v
的距离dist[v]
更短,则更新dist[v]
,并在优先队列中更新v
的优先级。 - 重复:重复步骤2-4,直到所有顶点都被访问或优先队列为空。
时间复杂度:
使用邻接表和二叉堆实现时,时间复杂度为 或,对于稀疏图效率更高;对于稠密图,的实现可能更优。
Internet中的OSPF协议,采用链路状态广播(link state broadcast)的方式,使得所有结点都就有网络的视图;
在真实的网络环境中,假设链路开销是链路上的流量之类非对称量,每次LS算法运行,可能产生震荡;这是一种自同步现象,可以通过每台路由器引入随机链路通告时间解决;
DV算法
距离矢量算法(Distance Vector Algorithm, DV) 是一种迭代的、异步的、分布式的路由选择算法。每个路由器维护一张距离矢量表,其中包含它到网络中所有其他目的地的"距离"估计值。这些估计值会周期性地与邻居路由器交换。
- 迭代性:算法通过重复计算和信息交换逐步收敛到最终的最短路径。
- 异步性:路由器之间不需要同步计算或消息交换,它们可以独立地执行计算并发送更新。
- 分布式:每个路由器仅与直接相连的邻居交换信息,并基于这些信息以及自身的链路开销进行计算,不需要拥有整个网络的全局拓扑信息。
Bellman-Ford方程:DV算法的核心是Bellman-Ford方程(也称为Bellman-Ford原理),用于计算从节点 x
到节点 y
的最低开销路径的开销值:
这个方程决定了路由表的表项,选择能够提供最小开销的邻居 v*
作为下一跳:
工作原理:
- 初始化:每个路由器知道到达其直接相连邻居的链路开销。对于所有其他目的地址,距离被初始化为无穷大。
- 信息交换:每个路由器周期性地将其完整的距离矢量发送给所有直接相连的邻居。
- 更新:当路由器
x
收到来自邻居v
的距离矢量时,它使用Bellman-Ford方程更新自己到每个目的地的距离估计。如果通过邻居v
到某个目的地的路径开销更小,则更新该目的地的距离和下一跳。 - 收敛:这个过程持续进行,直到网络中的所有路由表都收敛,即所有路由器都找到了到所有目的地的最短路径,并且不再有距离矢量更新发生。
当链路的开销变化,结点探测到后,将更新路由信息,重新计算距离向量,若其DV发生变化,则通知邻居;
- 好消息传得快,但是坏消息传得慢,存在计数无穷大问题:当某个目的地变得不可达时,路由器之间可能互相"学习"到错误的、逐渐增大的距离,直到达到最大跳数(无穷大),这个过程非常缓慢,且期间会形成路由环路。
- 收敛速度慢:特别是在网络拓扑发生变化(如链路故障)时,DV算法可能需要较长时间才能收敛到新的最短路径。
- 路由环路:在收敛过程中,可能会出现临时的路由环路,导致数据包在环路中无限循环或直到TTL耗尽才被丢弃。
为解决上述问题,引入了一些优化措施:
- 水平分割:路由器不会将从某个邻居学习到的路由信息再通告回那个邻居。这有助于防止两跳路由环路。
- 毒性反转:如果路由器
A
知道通过邻居B
可以到达目的地X
,那么当A
向B
发送路由更新时,它会将自己到X
的距离设置为无穷大。这比水平分割更强,能更快地消除一些环路。 - 最大跳数限制:设定一个最大跳数,任何超过此跳数的路径都被视为不可达;
比较LS算法和DV算法
特性 | LS算法 | DV算法 |
---|---|---|
报文复杂性 | 具有n个节点,E个链路情况,每次发送个报文 | 只是在邻居间交换信息 |
收敛速度 | 算法,要求发送个消息,可能导致振荡 | 收敛时间变化,可能产生循环路由,存在计数到无穷大问题 |
健壮性 | 节点会广播错误的链路开销;每个节点只计算自己的转发表(提供了一定程度的健壮性) | DV节点会通告错误的路径开销;每个节点的转发表可被其他节点使用,错误会扩散到整个网络 |
层次选路
在实践中,路由表不可能存储所有结点,否则路由表的信息交换过于巨大;
区域的路由器组成的自治系统AS
- 同一个AS下运行相同的路由协议
- 不同的AS下可以运行不同的路由选择协议
- 每个AS应该选出一个网关路由器,运行域间路由协议,和其他网关路由器交互;
OSPF协议
开放最短路优先(Open Shortest Path First, OSPF)是在AS内部实现的LS协议
- 采用洪泛链路状态信息和Dijkstra算法,每个路由器都广播OSPF通告,OSPF通告里为每个邻居路由器设一个表项;
- 每台路由器有自治系统完整的拓扑图,分发LS 分组
注意OSPF信息通过IP直接传输;
优点包括
- 安全:所有的OSPF间的消息交换需要鉴别;
- 允许多条相同开销的路径;
- 综合支持单播和广播;
- 支持单个AS的层次结构;
BGP
我们还需要设计一个域间自治系统选择协议,所有的AS运行相同的AS间路由选择协议,即边界网关协议(Border Gateway Protocol, BGP);
这是一个基于路径矢量(Path Vector)路由协议,不使用传统的距离或开销度量,而是基于路径属性和策略进行路由决策。
基本特征:
- 域间路由:BGP的主要作用是在不同的AS之间提供通信,实现全球互联网的互联互通。
- 策略驱动:BGP支持丰富的路由策略,允许管理员根据业务需求、成本、安全等因素控制流量的进出。
- 基于TCP:BGP使用TCP作为其传输协议(端口179),提供可靠的连接和消息交换。
- 路径信息:BGP通告中不仅包含可达的目的地和下一跳,还包含完整的AS路径信息,用于防止路由环路和支持策略决策。
- 增量更新:BGP建立邻居关系后,初始会交换完整的路由表,之后只发送增量更新,以节省带宽。
BGP的功能:
- 初始对等体建立和认证:BGP对等体(路由器)之间建立TCP连接,并交换消息以确认连接参数和进行认证。
- 交换可达性信息:发送网络可达性信息,包括目的网络和到达这些网络的路径属性。
- 连接验证:持续验证对等体和它们之间的网络连接是否正常运行(通过Keepalive消息)。
BGP的类型:
- 外部BGP (eBGP):用于不同AS内的路由器之间交换路由信息。eBGP对等体通常直接相连。
- 内部BGP (iBGP):用于同一个AS内的路由器之间交换路由信息。iBGP对等体之间不需要直接相连,但通常需要全互联(Full Mesh)或使用路由反射器/联盟来简化配置。
BGP的关键元素(路径属性): BGP路由决策过程是基于一系列路径属性的,这些属性帮助路由器选择到达目的地的"最佳"路径。当存在多条路径时,BGP会按照一个预定义的顺序比较这些属性:
- Weight (权重):Cisco私有属性,本地有效,不传递给BGP邻居。值越高越优先,用于影响出站流量。
- Local Preference (本地优先级):在AS内部有效,传递给iBGP对等体。值越高越优先,用于影响AS的出站流量。
- Locally Originated (本地发起):如果路由是由本地路由器发起(例如通过
network
命令),则优先。 - AS-Path (AS路径):表示数据包到达目的网络需要经过的AS序列。路径越短越优先。用于防止路由环路,也可通过"AS Path Prepend"影响入站流量。
- Origin Code (起源代码):表示路由信息的来源。优先级顺序:IGP (
i
) > EGP (e
) > Incomplete (?
)。 - Multi-Exit Discriminator (MED):也称为度量,用于影响流量进入AS的决策。值越低越优先,通常用于在多个入口点时指导外部AS选择最佳入口。
- BGP Route Type (BGP路由类型):eBGP路由通常优先于iBGP路由。
- Age (路由年龄):在某些情况下,更老的路由(更稳定)可能被优先选择。
- Router ID (路由器ID):当其他属性都相同时,选择BGP路由器ID最低的路由。
- Peer IP Address (对等体IP地址):最后,如果所有属性都相同,选择BGP对等体IP地址最低的路由。
BGP路由信息管理功能:
- 路由存储:每个BGP路由器存储到达其他网络的信息。
- 路由更新:使用特殊技术确定何时以及如何使用从对等体收到的信息来正确更新路由。
- 路由选择:每个BGP路由器使用其路由数据库中的信息来选择到达互联网上每个网络的最佳路由。
- 路由通告:每个BGP发言者定期告知其对等体有关各种网络及其可达性的信息。
RIP
**RIP **(Routing Information Protocol)作为互联网中最早也是最广泛使用的距离矢量路由协议之一,使用跳数作为度量标准,最大跳数为15。
在RIP协议中,每30s,RIP通告就会通过响应报文在邻居间交换;每个报文包含了多达25个AS内的目的子网列表,以及发送方到每个子网的距离;
若180秒后没有收到通告,则认为邻居死机或链路中断。以下是恢复机制
- 通过故障邻居的路由失败,新的公告发送给其他邻居;
- 邻居然后再发送新的公告 (如果转发表发生变化);
- 链路故障信息快速传播到整个网络;
毒性逆转用于防止乒乓循环 ;
注意,RIP协议中有一个应用route-d
管理RIP转发表,通告是通过UDP报文周期性重复发送的;