OSPF、BGP与ICMP协议
铺垫知识
将路由器组织到一系列自治系统(Autonomous Systems,AS)中,称为域( domains )
自治系统(AS):
- 由同一个管理域下的网络和路由器组成的集合
- ICANN为每个AS分配一个AS编号
域内(intra-AS)选路:
- 在AS内部进行的选路
- 同一个AS内的路由器必须运行相同的选路协议(Intra-AS选路协议)
- 不同AS中的路由器可以运行不同的选路协议
网关路由器(gateway router)
- 在一个AS内部、直接连接到其它AS的路由器
域间(inter-AS)选路:
- 在AS之间进行的选路
- 网关路由器之间运行Inter-AS选路协议
- 所有AS必须运行相同的Inter-AS选路协议
选路算法和选路协议:
- 选路算法是选路协议的一部分
- 选路协议还包括路径代价的定义、报文格式、报文传输、报文处理、异常事件处理等具体实施方面的问题
因特网中的选路协议包括:
- Intra-AS选路协议:也称内部网关协议IGP(Interior Gateway Protocols)
- Inter-AS选路协议:也称外部网关协议EGP(Exterior Gateway Protocols)
常见的Intra-AS选路协议:
- RIP(Routing Information Protocol):一般由较低层ISP和企业网使用
- OSPF(Open Shortest Path First):较顶层ISP使用
- EIGRP(Enhanced Interior Gateway Routing Protocol ):Cisco私有协议,2013年公有化
Inter-AS选路协议:
- 目前只有BGP(Border Gateway Protocol)一种
OSPF
OSPF (Open Shortest Path First) 是一种内部网关协议(IGP),用于在单一自治系统(AS)内的路由器之间交换路由信息。它是基于链路状态(link-state)算法的,并且使用最短路径优先(SPF)算法来计算路由路径。
OSPF分组:
- OSPF协议定义了5种分组类型,分别用于探测邻居、通告链路状态等
- OSPF分组被封装在IP包中传输,协议号为89
- 路由器周期性地、或在链路状态改变时发送OSPF链路通告
OSPF协议负责链路通告分组在网络中的广播 及可靠传输
路由器根据收到的链路通告分组构造链路状态数据库
路由器利用链路状态数据库及Dijkstra算法,计算以本路由器为根的最短路径树
OSPF 的先进特性
安全:所有的OSPF报文都要经过鉴别(防止恶意攻击)
允许有多条相同代价的路由(RIP只允许一条)
- 可以按一定比例将流量分配到多条路由上
支持单播和多播选路:
- Multicast OSPF(MOSPF)和OSPF使用相同的拓扑数据库
在较大的AS中可以使用分层OSPF
AS内部的分层选路
OSPF最重要的优点是支持AS内部的分层选路
一个OSPF自治系统可以配置成多个区域(area):
- 每个区域运行自己的OSPF协议
- 区域内部的链路状态仅在本区域内广播
- 区域边界路由器负责区域间的选路
OSPF区域(area)
一个OSPF自治系统配置为若干区域:
- 一个特殊区域称为主干,所有区域必须连接到主干上
- 每一个区域都有区域标识,主干的区域标识为0
路由器:
- 区域边界路由器:连接本地区域和主干的路由器
- 主干路由器:主干上的路由器,可以同时是区域边界路由器
- 内部路由器:AS内部的非区域边界路由器
分层的OSPF
两个选路层次:本地区域,主干
每个区域(包括主干)运行自己的OSPF协议
每个区域边界路由器:
- 将本区域的选路信息汇总(子网及路径代价),通告给其它区域
- 将收到的其它区域的选路信息(子网及路径代价)通告给本区域的内部路由器
跨区域分组转发:
- 去往其它区域的分组,首先被发送给本地区域边界路由器,在主干上转发到目的区域边界路由器,然后再转发到目的子网
BGP
BGP (Border Gateway Protocol) 是互联网的核心路由协议,用于不同自治系统(AS,Autonomous System)之间交换路由信息。BGP是一个路径向量协议,负责选择最佳路径并且管理自治系统之间的路由。
边界网关协议:
- BGP是一个外部网关协议(EGP),不同于内部网关协议(如OSPF、RIP),BGP用于自治系统(AS)之间的路由选择与信息交换。自治系统是指一个或多个网络的集合,它们通常由一个组织或一个互联网服务提供商(ISP)控制。
路径向量协议:
- BBG是一个路径向量协议,它在路由更新中包含路径信息,这些路径信息通常以一系列AS号码的形式存在,称为AS路径(AS Path)。BGP通过AS路径来帮助确定路由的最佳路径。
路径选择:
- BGP基于多个标准选择最佳路径,例如AS路径长度、路由器的策略、前缀的长度等。BGP还支持基于政策的路由选择(如通过路由策略控制出口和入口路由)。
BGP是无连接的:
- BGP是一种基于TCP的协议,使用 TCP 179端口 来进行路由信息的交换。它使用TCP保证数据的可靠传输。
BGP会话的建立
- BGP Speaker:每个运行BGP协议的路由器或主机被称为BGP Speaker。每个BGP Speaker都可以通过与其他BGP Speaker建立连接来交换路由信息。
- BGP Peers(对等方):当两个BGP Speaker建立连接时,它们成为BGP对等方(Peers),并通过建立的连接交换BGP报文。
- TCP连接:BGP使用半永久的TCP连接(端口179)在BGP Speaker之间进行通信,这保证了数据传输的可靠性。
BGP的两种类型
- EBGP(External BGP) :
- EBGP用于不同自治系统(AS)之间的路由交换。EBGP路由器连接的是不同的自治系统,EBGP会遵循全局的BGP路由选择规则。
- IBGP(Internal BGP) :
- IBGP用于同一自治系统内部的路由交换。在IBGP中,路由器之间通过IBGP协议传递路由信息,但它们不会通过IBGP传递AS路径信息,而是将BGP路由视为内部路径,避免不必要的路由环路。
BGP路径广告(Path Advertisement)
- 路径广告 :BGP路由器向其邻居广告路由信息,通常以AS路径的形式通告到达目标网络的路径。AS路径是一个有序的AS号码序列,表明数据包从哪个AS进入并经过了哪些AS,这样可以帮助BGP检测环路并避免路由回路的形成。
例如:
- 当AS3的网关路由器 3a 向AS2的网关路由器 2c 发布路径 AS3, X 时,表明: AS3承诺它将为AS2 转发去往X的数据报
- 若AS2同意为AS1转发去往X的数据报,2a向1c发布路径AS2, AS3, X
基于策略的路由
入境过滤:
- 根据输入策略,对每条新的路由进行入境过滤
- 结果可能是:丢弃,按原样接受,接受但修改某些属性(如偏好度)
路径选择:
- 对于每一个目的前缀,从所有可达的路径中按照BGP指定的决策顺序确定一条最佳路由
出境过滤:
- 根据输出策略,决定是否向其邻居AS发布某条路径
ICMP
ICMP(Internet Control Message Protocol,互联网控制消息协议)是一个网络层协议,用于在IP协议栈中传输控制消息。它的主要作用是向网络中的主机或路由器报告错误或提供网络状态信息。
ICMP报文有询问 和错误报告两类:
- 询问:用来请求一些信息,通常采用请求-响应模式
- 错误报告:发现错误的节点向源节点报告错误信息,不需响应
ICMP报文封装在IP包中传输:
- ICMP报文可能需要经过多个网络才能到达源节点,跨网络传输必须借助IP包
ICMP错误报告的例子:
- 源抑制:路由器缓存满,无法容纳新到来的数据报
- 超时:数据报的TTL减为0,或主机的重组定时器超时
- 目的不可达:路由器判断一个数据报不可能到达它的最终目的地
- 重定向:路由器发现主机使用的路由有错或不是最佳路由
- 参数错误:数据报中某个参数有错
ICMP信息查询的例子:
- 回声请求/响应:用于发现对方是否在线
- 地址掩码请求/响应:用于获得本网的地址掩码
- 路由器请求:请求本网路由器的信息
- 路由器发现:路由器定期发送该消息通告自己的信息
ICMP报文格式
- type:报文类型,共定义了15种
- code:对某类报文作进一步的区分
- Checksum:ICMP报文的检查和
- 内容:与报文类型有关。报告错误的ICMP报文包含触发该错误的数据报的头部和前8个数据字节
ICMP报文例子
Type | Code | 描述 |
---|---|---|
0 | 0 | Echo Reply(回应ping) |
3 | 0 | Destination Network Unreachable(目标网络不可达) |
3 | 1 | Destination Host Unreachable(目标主机不可达) |
3 | 2 | Destination Protocol Unreachable(目标协议不可达) |
3 | 3 | Destination Port Unreachable(目标端口不可达) |
3 | 6 | Destination Network Unknown(目标网络未知) |
3 | 7 | Destination Host Unknown(目标主机未知) |
4 | 0 | Source Quench(源抑制,已废弃) |
8 | 0 | Echo Request(请求ping) |
9 | 0 | Router Advertisement(路由器通告) |
10 | 0 | Router Discovery(路由器发现) |
11 | 0 | Time Exceeded(TTL超时) |
12 | 0 | Bad IP Header(坏的IP头) |
Ping 与 ICMP
Ping利用ICMP报文测试目的主机是否活跃,以及去往目的主机的路径是否正常:
- 源主机发送 Type=8,Code=0 的 Echo Request 报文
- 若目的主机收到,发送 Type=0,Code=0 的 Echo Response报文
- 源主机计算RTT,并报告
- 若源主机连续几次超时(收不到Echo Response),向调用者报告目的不可达
Traceroute 与 ICMP
- Traceroute测试到达目的主机的路由(经过的路由器):
- 源主机的Traceroute程序向目的主机发送一个Echo Request报文,IP报头的TTL设为1
- 第一跳路由器对TTL减1,发现TTL变为0,向源主机发送一个TTL expired报文(源主机从IP报头中发现路由器IP地址)
- Traceroute记录第一跳路由器的IP地址,然后向目的主机发送第二个Echo Request报文,IP报头的TTL设为2
- 若收到第二跳路由器的TTL expired报文,记录第二跳路由器的IP地址;接着发送一个TTL为3的Echo Request报文
- 该过程不断重复,直至收到目的主机的Echo Response报文
ICMPv6
ICMPv6是ICMP协议的扩展版本,专门为IPv6设计。与IPv4中的ICMP类似,ICMPv6仍然使用差错报告和查询两类报文
差错报告:
- 去掉了源抑制报文:优先级和流标签允许路由器控制拥塞,丢弃不太重要的数据包
- 增加了Packet Too Big报文:路由器丢弃长度超过MTU的包,并报告错误
信息查询:
- 去掉了一些不必要的查询报文
TTL为3的Echo Request报文 - 该过程不断重复,直至收到目的主机的Echo Response报文
ICMPv6
ICMPv6是ICMP协议的扩展版本,专门为IPv6设计。与IPv4中的ICMP类似,ICMPv6仍然使用差错报告和查询两类报文
差错报告:
- 去掉了源抑制报文:优先级和流标签允许路由器控制拥塞,丢弃不太重要的数据包
- 增加了Packet Too Big报文:路由器丢弃长度超过MTU的包,并报告错误
信息查询:
- 去掉了一些不必要的查询报文
- 增加了一些查询报文,用于实现ARP(地址解析)和IGMP(多播组管理)的功能