本文主要是介绍翔鹰计划第一、二周笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、IPV6
- 1. IPv6的基本概念
- 1.1 IPv6地址
- 1.2 IPv6基本报头
- 1.3 IPv6扩展报头
- 2. IPv6地址格式和地址类型
- 2.1 IPv6地址格式
- 2. 2 IPv6地址压缩格式
- 2.3 IPv6地址分类
- 2.4 IPv6单播地址
- 2.5 IPv6组播地址
- 2.6 IPv6任播地址
- 3. IPv6无状态地址配置的过程
- 3.1 IPv6无状态地址自动配置
- 3.2 EUI-64规范
- 3.3 IPv6无状态地址DAD检查
- 4. IPv6过渡技术
- 4.1 双协议栈技术
- 4.2 隧道技术
- 4.2.1 GRE隧道技术
- 4.2.2 IPv6 in IPv4隧道技术
- 4.2.3 ISATAP隧道技术
- 4.3 网络地址转换
- 4.3.1 静态NAT-PT转换过程
- 4.3.2 动态NAT-PT转换过程
- 4.3.3 NAT-PT DNS ALG转换过程
- 5. 常见问题
- 二、 二层交换
- 1. 二层交换基础
- 1.1 园区网三层结构
- 1.2 二层交换机主要功能
- 1.3 交换机转发原理
- 1.3.1 单播转发
- 1.3.2 广播转发
- 1.3.3 组播转发
- 1.4 PC与交换机收到单播与广播帧
- 1.4.1 PC 收到
- 1.4.2 交换机收到
- 2. VLAN
- 2.1 VLAN作用
- 2.2 802.1Q帧格式
- 2.3 链路类型
- 2.4 PVID
- 2.5 端口类型☆☆☆
- 2.5.1 Access 端口
- 2.5.2 Trunk 端口
- 2.6 VLAN 的类型(划分方法)
- 2.6.1 基于端口的VLAN(Port-based VLAN)
- 2.6.2 基于Mac地址的VLAN(MAC-based vlan )
- 2.6.3 基于协议的VLAN(Protoclo-based VLAN)
- 2.7 VLAN 的范围
- 2.8 VLAN成员模式
- 2.8.1 静态 VLAN
- 2.8.2 动态 VLAN
- 3. VTP(VLAN Trunking Protocol)
- 3.1 VTP 模式
- 3.2 VTP的运作
- 4. VLAN间路由☆☆☆
- 4.1 双臂路由(每个VLAN一个物理连接)
- 4.2 单臂路由
- 4.3 三层交换(VLANIF接口)☆☆☆
- 4.3.1 二层口与三层口的区别☆☆☆
- 4.3.2 交换机与路由器的区别☆☆
- 三、STP 生成树协议
- 1. 环路问题
- 1.1 广播风暴
- 1.2 MAC地址表翻转
- 1.3 多帧复制
- 2. STP 作用
- 2.1 作用
- 2.2 基本术语
- 2.2.1 桥(Bridge)
- 2.2.2 桥MAC地址
- 2.2.3 桥 ID(BID)
- 2.2.4 端口 ID(PID)
- 3. STP 树的生成
- 3.1 选举根桥
- 3.2 确定根端口
- 3.2.1思科选取根端口优先顺序
- 3.2.2 华为选取根端口优先顺序
- 3.3 确定指定端口
- 3.3.1 思科设备指定端口比较
- 3.3.2 华为设备指定端口比较
- 3.4 阻塞备用端口
- 4. STP 报文格式
- 4.1 Configuration BPDU
- 4.1.1 BPDU报文格式:
- 4.1.2 STP 计时器
- 4.2 TCN BPDU
- 5. STP 端口状态
- 5.1 端口状态
- 5.2端口状态迁移
- 5.3 端口状态转换举例
- 6. STP 故障问题
- 6.1 根桥故障
- 6.2直连链路故障
- 6.3 非直连链路故障
- 6.4 拓扑改变导致MAC地址表错误
- 6.5 拓扑改变导致MAC地址表变化
- 7. RSTP(STP 优化)
- 7.1 STP缺陷
- 7.2 RSTP
- 7.2.1 RSTP端口角色
- 7.2.2 三种端口状态
- 7.2.3 P/A机制
- 7.2.4 边缘端口
- 7.2.5 RSTP收敛过程
- 7.2.6 链路故障/根桥失效
- 四、RSTP(STP 优化)
- 1. STP缺陷
- 2. RSTP
- 2.1 RSTP端口角色
- 2.2 三种端口状态
- 2.3 P/A机制
- 2.4 边缘端口
- 2.5 RSTP收敛过程
- 2.6 链路故障/根桥失效
- 五、MSTP (多实例生成树协议)
- 1. 单生成树实例弊端
- 1.1 部分VLAN路径不通
- 1.2 无法实现流量分担
- 1.3 次优二层路径
- 2. MSTP 原理
- 六、路由
- 1. 路由的概念
- 1.1 路由的基本概念
- 1.2 路由表匹配
- 1.3 路由信息的来源
- 1.3.1 直连路由
- 1.3.2 静态路由
- 1.3.3 动态路由
- 2. 路由的优先级
- 2.1 华为路由的优先级
- 2.2 思科路由的优先级
- 3. 路由的开销
- 4. 计算机上的路由表和路由器上的路由表
- 5. Loopback接口
- 七、RIP
- 1. 路由协议基础
- 1.1 自治系统(AS)
- 1.2 路由协议分类
- 2. RIP协议基本原理
- 3. RIP路由表形成
- 4. RIP消息格式
- 5. RIP-1与RIP-2
- 5 .1RIP-1的报文格式
- 5.2 RIP-2的报文格式
- 5.3 运行RIP-1和RIP-2版本的不同
- 5.3.1 运行RIP-1的时候
- 5.3.2 运行RIP-2的时候
- 5.3.3 RIP-1与RIP-2的不同
- 6. RIP定时器
- 6.1 更新定时器
- 6.2 无效定时器
- 6.3 垃圾收集定时器
- 7. RIP环路问题
- 8. 环路解决
- 8.1 触发更新
- 8.2 水平分割
- 8.3 毒性逆转
- 八、OSPF
- 1. ospf基本原理
- 1.1 OSPF原理
- 1.2 OSPF metric
- 1.3 Router-ID
- 1.4 OSPF三张表
- 2. RIP与OSPF
- 2.1 RIP 的缺陷和OSPF改进
- 2.2 RIP与OSPF比较
- 2.2.1 相同点
- 2.2.2 不同点☆☆☆
- 3. OSPF区域化结构
- 4. OSPF支持的网络类型
- 4.1 P2P网络
- 4.2 广播型网络
- 4.3 NBMA网络
- 4.4 P2MP网络
- 5. 链路状态与LSA
- 5.1 路由器接口状态
- 5.2 LSA (链路状态通告)
- 5.2.1 Type-1 LSA
- 5.2.2 Type-2 LSA
- 5.2.3 Type-3 LSA
- 5.2.4 Type-4 LSA
- 5.2.5 Type-5 LSA
- 6. OSPF报文类型
- 6.1**OSPF协议报文头部**
- 6.2 路由器接口hello报文信息
- 7.邻居关系与邻接关系
- 7.1 邻居关系
- 7.1.1 邻居发现
- 7.1.2 邻居关系建立
- 7.2 邻接关系
- 7.2.1 邻接关系的建立(LSDB同步)
- 7.2.2 P2P网络和P2MP网络
- 7.2.3 Broadcast网络和NBMA网络
- 7.3 OSPF邻居关系状态机
- 8. DR与BDR
- 8.1 DR与BDR的作用
- 8.2 DR与BDR的选举
- 九、NAT 网络地址转换技术
- 1. 静态NAT
- 2. 动态NAT
- 3. NAPT(端口复用)
- 4. NAT服务器
- 5. NAT过程实验操作解释
一、IPV6
1. IPv6的基本概念
1.1 IPv6地址

1.2 IPv6基本报头
IPv6的基本报头在IPv4报头的基础上,增加了流标签域,去除了一些冗余字段,使报文头的处理更为简单、高效。
IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。
基本报头中的各字段解释如下:
- Version:版本号,长度为4bit。对于IPv6,该值为6。
- Traffic Class:流类别,长度为8bit,它等同于IPv4报头中的TOS字段,表示IPv6数据报文的类或优先级,主要应用于QoS。
- Flow Label:流标签,长度为20bit,它用于区分实时流量。流可以理解为特定应用或进程的来自某一源地址发往一个或多个目的地址的连续单播、组播或任播报文。IPv6中的流标签字段、源地址字段和目的地址字段一起为特定数据流指定了网络中的转发路径。这样,报文在IP网络中传输时会保持原有的顺序,提高了处理效率。随着三网合一的发展趋势,IP网络不仅要求能够传输传统的数据报文,还需要能够传输语音、视频等报文。这种情况下,流标签字段的作用就显得更加重要。
- Payload Length:有效载荷长度,长度为16bit,它是指紧跟IPv6报头的数据报文的其它部分。
- Next Header:下一个报头,长度为8bit。该字段定义了紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型。
- 跳数限制(Hop Limit),长度为8bit,该字段类似于IPv4报头中的Time to Live字段,它定义了IP数据报文所能经过的最大跳数。每经过一个路由器,该数值减去1;当该字段的值为0时,数据报文将被丢弃。
- Source Address:源地址,长度为128bit,表示发送方的地址。
- Destination Address:目的地址,长度为128bit,表示接收方的地址。
与IPv4相比,IPv6报头去除了IHL、Identifier、Flags、Fragment Offset、Header Checksum、 - Options、Padding域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念。
1.3 IPv6扩展报头
IPv6扩展报头是跟在IPv6基本报头后面的可选报头,可以有一个或多个。
IPv6增加了扩展报头,使得IPv6报头更加简化。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。IPv6支持多个扩展报头,各扩展报头中都含有一个下一个报头字段,用于指明下一个扩展报头的类型。这些报头必须按照以下顺序出现:
- IPv6基本报头
- 逐跳选项扩展报头
- 目的选项扩展报头
- 路由扩展报头
- 分片扩展报头
- 认证扩展报头
- 封装安全有效载荷扩展报头
- 目的选项扩展报头(指那些将被分组报文的最终目的地处理的选项)
- 上层协议数据报文
除了目的选项扩展报头外,每个扩展报头在一个报文中最多只能出现一次。目的选项扩展报头在一个报文中最多也只能出现两次,一次是在路由扩展报头之前,另一次是在上层协议扩展报头之前。
2. IPv6地址格式和地址类型
2.1 IPv6地址格式
IPv6地址长度为128比特,每16比特划分为一段,每段由4个十六进制数表示,并用冒号隔开。
IPv6地址包括网络前缀和接口标识两部分。
2. 2 IPv6地址压缩格式
每一组中的前导“0”都可以省略。
地址中包含的连续全为0的组,可以用双冒号“::”来代替。
注意:如果一个IPV6地址中只能出现一个‘::’,否则会出现歧义
2.3 IPv6地址分类
IPv6地址分为单播地址、任播地址、组播地址三种类型。
单播地址的格式是2000::/3
,代表公共IP网络上任意可及的地址。IANA负责将该段地址范围内的地址分配给多个区域互联网注册管理机构(RIR)。RIR负责全球5个区域的地址分配。以下几个地址范围已经分配:2400::/12 (APNIC)、2600::/12 (ARIN)、2800::/12 (LACNIC)、2A00::/12 (RIPE NCC)和2C00::/12 (AfriNIC),它们使用单一地址前缀标识特定区域中的所有地址。2000::/3地址范围中还为文档示例预留了地址空间,例如2001:0DB8::/32。
链路本地地址只能在连接到同一本地链路的节点之间使用。可以在自动地址分配
、邻居发现和链路上没有路由器的情况下使用链路本地地址。以链路本地地址为源地址或目的地址的IPv6报文不会被路由器转发到其他链路。链路本地地址的前缀是FE80::/10
。
组播地址的前缀是FF00::/8
。组播地址范围内的大部分地址都是为特定组播组保留的。跟IPv4一样,IPv6组播地址还支持路由协议。IPv6中没有广播地址。组播地址替代广播地址可以确保报文只发送给特定的组播组而不是IPv6网络中的任意终端。
IPv6还包括一些特殊地址,比如未指定地址::/128。如果没有给一个接口分配IP地址,该接口的地址则为::/128
。需要注意的是,不能将未指定地址跟默认IP地址::/0
相混淆。默认IP地址::/0跟IPv4中的默认地址0.0.0.0/0类似。环回地址127.0.0.1在IPv6中被定义为保留地址::1/128
。
2.4 IPv6单播地址
全球单播地址带有固定前缀,类似于IPv4中的公网地址
链路本地单播地址前缀为FE80::/10。
单播地址主要包含全球单播地址和链路本地地址。全球单播地址(例如2000::/3)带有固定的地址前缀,即前三位为固定值001。其地址结构是一个三层结构,依次为全球
路由前缀、子网标识和接口标识
。全球路由前缀由RIR和互联网服务供应商(ISP)组成,RIR为ISP分配IP地址前缀。子网标识定义了网络的管理子网。
2.5 IPv6组播地址
所有IPv6组播地址都以FF开始。
IPv6为需要使用组播发送数据的协议预留了一些组播组。
1. IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。
2. 目的地址为组播地址的报文会被该组播地址标识的所有接口接收。
3. 一个IPv6组播地址是由前缀、标志(Flag)字段、范围(Scope)字段以及组播组ID(Group ID)4个部分组成:
- 前缀:IPv6组播地址的
前缀是FF00::/8(1111 1111)
。 - 标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个
永久分配地址
;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)
。 - 范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围。
- 组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0,这样,每个组播组ID都可以映射到一个唯一的以太网组播MAC地址(RFC2464)。
2.6 IPv6任播地址

企业网络中运用任播地址有很多优势。其中一个优势是业务冗余。比如,用户可以通过多台使用相同地址的服务器获取同一个服务(例如,HTTP)。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余。
使用多服务器接入还能够提高工作效率。例如,用户(即任播地址的发起方)浏览公司网页时,与相同的单播地址建立一条连接,连接的对端是具有相同任播地址的多个服务器。用户可以从不同的镜像服务器分别下载html文件和图片。用户利用多个服务器的带宽同时下载网页文件,其效率远远高于使用单播地址进行下载。(分布式
)
3. IPv6无状态地址配置的过程
3.1 IPv6无状态地址自动配置
网络节点向相连的路由器发送RS,请求地址前缀信息。
路由器通过发送路由器通告RA,回复地址前缀信息。
IPv6支持无状态地址自动配置,无需使用诸如DHCP之类的辅助协议,主机即可获取IPv6前缀并自动生成接口ID。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
RA报文:每台路由器为了让二层网络上的主机和其它路由器知道自己的存在,定期以组播方式(FF02::1 所有主机)发送携带网络配置参数的RA报文。RA报文的Type字段值为134
。
RS报文:主机接入网络后可以主动发送RS报文。RA报文是由路由器定期发送的,但是如果主机希望能够尽快收到RA报文,它可以立刻主动发送RS报文给路由器。网络上的路由器收到该RS报文后会立即向相应的主机单播回应
RA报文,告知主机该网段的默认路由器和相关配置参数。RS报文的Type字段值为133
。
3.2 EUI-64规范
将FFFE插入MAC地址的前24位与后24位之间,并将第7位的值取反(比如0改为1)即可生成接口ID。
为了通过IPv6网络进行通信,各接口必须获取有效的IPv6地址,以下三种方式可以用来配置IPv6地址的接口ID:
- 网络管理员手动配置;
- 通过系统软件生成;
- 采用扩展唯一标识符(EUI-64)格式生成。
就实用性而言,EUI-64格式是IPv6生成接口ID的最常用方式。
IEEE EUI-64标准采用接口的MAC地址生成IPv6接口ID。MAC地址只有48位,而接口ID却要求64位。MAC地址的前24位代表厂商ID,后24位代表制造商分配的唯一扩展标识。
MAC地址的第七高位是一个U/L位,值为0时表示MAC地址全局唯一,值为1时表示MAC地址本地唯一。
在MAC地址向EUI-64格式的转换过程中,在MAC地址的前24位和后24位之间插入了16比特的FFFE
,并将U/L位的值从0变成了1
,这样就生成了一个64比特的接口ID,且接口ID的值全局唯一。接口ID和接口前缀一起组成接口地址。
3.3 IPv6无状态地址DAD检查
当为接口配置IPv6地址时,DAD用来在本地链路范围内检测将要使用的IPv6地址是否唯一
。
设备在给接口分配IPv6单播地址之前会进行重复地址检测(DAD),确认是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址,
此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-nodes组播组和Solicited-node组播组。Solicited-node组播组
由单播或任播地址的后24位加上地址前缀FF02:0:0:0:0:1:FF00::/104组成。
例如,本示例中配置的试验地址为2000::1,该地址被加入Solicited-node组播组FF02::1:FF00:1。
IPv6重复地址检测技术和IPv4中的免费ARP类似
:用于地址分配或主机连接网络时检测重复的IPv4主机地址。
节点向一个自己将使用的试验地址所在的Solicited-node组播组发送一个以该试验地址为请求的目标地址的邻居请求**(NS)报文
,如果收到某个其它站点回应的邻居通告(NA)报文
,就证明该地址已被网络上使用,节点将不能使用该试验地址进行通信。这种情况下,网络管理员需要手动为该节点分配另外一个地址。(回复NA报文是告诉发送NS报文的主机,该节点已经被使用)**
4. IPv6过渡技术
4.1 双协议栈技术
同时启用v4与v6协议栈
双栈技术
- 同时支持IPv6和IPv4协议
- 应用程序根据DNS解析地址类型选择使用IPv6或IPv4协议
优点
互通性好,实现简单,允许应用逐渐从IPv4过渡到IPv6
缺点
- 只适用双栈节点本身
- 对每个IPv4节点都要升级,成本较大,没有解决IPv4地址紧缺问题
4.2 隧道技术
v6报文封装在v4中(主流技术)
4.2.1 GRE隧道技术

IPv6报文被包含在GRE报文中作为GRE的载荷
优点
- 通用性好
- 技术成熟,易于理解
缺点
维护复杂
GRE隧道流程
- 发送方与接收方
都是双栈设备
- 隧道已预先建立好
- 发送方封装报文,接收方解封装
4.2.2 IPv6 in IPv4隧道技术
IPv6报文被包含在IPv4报文中作为IPv4的载荷(没有GRE的封装)
同GRE隧道有类似的优缺点
6to4隧道流程
- 同自动隧道技术类似6to4中继
- 通往纯IPv6网络的网关
4.2.3 ISATAP隧道技术
连接IPv4网点内部的IPv6主机和路由器
将IPv4网点作为一个NBMA链路,在IPv4报文中封装IPv6报文
优点
IPv4网点内部的IPv6主机可自动获得IPv6前缀
缺点
IPv6地址为固定格式
4.3 网络地址转换
NAT-PT
NAT-PT原理
- 通过中间的
NAT-PT协议转换服务器
,实现纯IPv6节点和纯IPv4节点间的互通- NAT-PT服务器分配动态IPv4地址来标识IPv6主机(与DNS配合)
- NAT-PT服务器向相邻IPv6网络宣告96位地址前缀信息,用于标识IPv4主机
- NAT-PT服务器负责IPv4-to-IPv6,或IPv6-to-IPv4的报文转换
优点
只需设置NAT-PT服务器
缺点
资源消耗较大,服务器负载重
NAT-PT种类
静态NAT-PT
- NAT-PT服务器提供
一对一的IPv6地址和IPv4地址的映射
。- 配置复杂,使用大量的IPv4地址。
动态NAT-PT
- NAT-PT服务器提供
多对一的IPv6地址和IPv4地址的映射
。- 采用上层协议复用的方法。
NAT-PT DNS ALG
- 动态NAT-PT与DNS ALG联合使用,转换DNS请求。
- 可利用原有的DNS服务器。
4.3.1 静态NAT-PT转换过程

4.3.2 动态NAT-PT转换过程

4.3.3 NAT-PT DNS ALG转换过程

5. 常见问题
IPv6主机无状态地址自动配置的过程是什么?
IPv6主机首先通过路由器发现功能来获取地址前缀信息,之后通过向接口已有的48比特MAC地址中插入16比特的FFEE生成接口ID,在生成了IPv6地址后会通过重复地址检测来确认地址是否唯一。(DAD检查)
二、 二层交换
分享今日:

引入博客:
VLAN基础
VLAN间路由
二层交换技术
二层交换特点
二层交换(二层通信):交换帧,源和目的MAC地址不会变,但是涉及到路由器(或者具有三层转发功能的交换机)源MAC地址会改变。
**广播域:**接收同样广播消息的节点的集合;
**冲突域:**连接在同一条线上所有工作站的集合;
区别:
- 广播域可以划分网段,冲突域一般在同一个网段;
- 广播域基于二层,冲突域基于一层;
- 一个局域网就是一个广播域;
- 集线器(hub)所有端口位于同一个广播域,冲突域;
- 二层交换机(switch)所有端口在一个广播域,每一个端口是一个冲突域;
1. 二层交换基础
1.1 园区网三层结构
-
核心层(CO):高速转发、服务器接入、
路由选择
-
汇聚层(GS):流量汇聚、链路冗余、设备冗余、路由选择
-
接入层(AS):用户接入、接入安全、访问控制
1.2 二层交换机主要功能
- 泛洪:把一个帧从除了进入端口外的所有端口转发出去;
- 转发:从某一端口转发到另一端口;
- 丢弃:不进行转发,直接丢弃;
1.3 交换机转发原理
1.3.1 单播转发
- 收到一个单播帧,交换机
会在Mac地址表中查找这个帧的目的Mac地址
,找不到直接泛洪; - 若找到,先与入接口进行比较;如果与入接口相同,丢弃,如果不同,转发。
1.3.2 广播转发
不会查找Mac地址,直接转发。
1.3.3 组播转发
1.4 PC与交换机收到单播与广播帧
1.4.1 PC 收到
- **单播帧:**将单播帧的目的MAC地址
与自己网卡MAC地址进行比较
,如果与本地网卡MAC地址一致,则根据单播帧的类型字段的值将数据载荷上传到网络层的相应处理模块,如果不一致直接丢弃。(先与本地MAC比较再上送) - 广播帧:直接根据该广播帧的类型字段类型直接上送至网络层的相应模块处理。(直接上送)
1.4.2 交换机收到
- 单播帧:不会与本地比较MAC地址,而是直接去查Mac地址表
- 广播帧:直接泛洪。
2. VLAN

2.1 VLAN作用
- 将交换机的端口划分进特定的VLAN(不同的广播域);
- 通常把划分前的,规模较大的广播域称为LAN,吧划分后,规模较小的广播域称为VLAN。
2.2 802.1Q帧格式
-
IEEE 802.1D定义了不支持VLAN特性交换机的标准规范,IEEE 802.1Q定义了关于支持VLAN特性的交换机标准;
-
通过tag区分不同VLAN;

标签 | 含义 |
---|---|
TPID | Tag Protocol ID,表示这个帧是否有tag,0x8100表示带有Tag(固定值) |
PRI | Priority,帧优先级,越大越优先 |
CFI | Canoncial Format Indicator |
VID | VLAN Identification,表示该帧所属VLAN |
2.3 链路类型
VLAN链路分为两种类型:Access链路
和Trunk链路
。
接入链路(Access Link):连接用户主机和交换机的链路称为接入链路;在一条Access链路上运动的帧**只能是Untagged 帧
。
干道链路(Trunk Link):连接交换机和交换机、交换机与路由器的链路称为干道链路,在一条trunk链路上运动的帧只能是tagged 帧
**。
2.4 PVID

PVID即Port VLAN ID,代表端口的缺省VLAN
。交换机从对端设备收到的帧有可能是Untagged的数据帧,但所有以太网帧在交换机中都是以Tagged的形式来被处理和转发的,因此交换机必须给端口收到的Untagged数据帧添加上Tag。为了实现此目的,必须为交换机配置端口的缺省VLAN。当该端口收到Untagged数据帧时,交换机将给它加上该缺省VLAN的VLAN Tag。
2.5 端口类型☆☆☆
2.5.1 Access 端口
收到帧:Access端口在收到数据后会添加VLAN Tag,VLAN ID和端口的PVID相同
。
发出帧:Access端口在转发数据前会移除VLAN Tag
。

Access端口收发数据帧的规则如下:
- 如果该端口收到对端设备发送的帧是untagged(不带VLAN标签),交换机将强制加上该端口的PVID。(因为因特网上交换机中所有帧都带有Tag,所以加上默认tag)
- 如果该端口收到对端设备发送的帧是tagged(带VLAN标签),交换机会检查该标签内的VLAN ID。
当VLAN ID与该端口的PVID相同时,接收该报文
。当VLAN ID与该端口的PVID不同时,丢弃该报文
。 - Access端口发送数据帧时,总是先剥离帧的Tag,然后再发送。Access端口发往对端设备的以太网帧永远是不带标签的帧。(Access接口与PC相连接,PC不会接受有Tag标记的帧,直接丢弃)
2.5.2 Trunk 端口
- 当一条链路,需要承载多VLAN信息的时候,需使用trunk来实现;
- Trunk两端的交换机需采用相同的干道协议;
- 一般见于交换机之间或交换机与路由器之间;

在本示例中,SWA和SWB连接主机的端口为Access端口,PVID如图所示。SWA和SWB互连的端口为Trunk端口,PVID都为1,此Trunk链路允许所有VLAN的流量通过。当SWA转发VLAN1的数据帧时会剥离VLAN标签,然后发送到Trunk链路上。而在转发VLAN20的数据帧时,不剥离VLAN标签直接转发到Trunk链路上。
每一个Trunk 除了需要配置PVID之外还需要配置,允许通过VLAN ID的列表。
Trunk端口收发数据帧的规则如下:
- 当接收到对端设备发送的不带Tag的数据帧时,会添加该端口的PVID,如果PVID在允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
- 当接收到对端设备发送的带Tag的数据帧时,检查VLAN ID是否在允许通过的VLAN ID列表中。如果VLAN ID在接口允许通过的VLAN ID列表中,则接收该报文。否则丢弃该报文。
- 端口发送数据帧时,当VLAN ID与端口的PVID相同,且是该端口允许通过的VLAN ID时,去掉Tag,发送该报文。当VLAN ID与端口的PVID不同,且是该端口允许通过的VLAN ID时,保持原有Tag,发送该报文。(
PVID 与 VLAN ID相同去掉Tag,不同保持原有Tag
)
2.6 VLAN 的类型(划分方法)
2.6.1 基于端口的VLAN(Port-based VLAN)
基于端口的VLAN通常也被称为物理层VLAN或一层VLAN
。
划分原则: 将VLAN编号(VLAN ID)映射到物理端口上,从某一个端口进入交换机的、由终端计算机发送的Untagged 帧都被划分到该端口的VLAN ID 所表明的那个VLAN。(物理端口与VLAN ID的映射
)
2.6.2 基于Mac地址的VLAN(MAC-based vlan )
基于Mac地址的VLAN也被称为二层VLAN
。
**划分原则:**交换机内部维护了一个MAC地址与VLAN ID的对应表,当交换机接收到计算机的Unragged帧时,交换机分析帧中的源Mac地址,然后查询对应表,并根据对应关系把这个帧划分到相应的VLAN中。(MAC地址与VLAN ID的映射
)
2.6.3 基于协议的VLAN(Protoclo-based VLAN)
基于协议的VLAN也被称为三层VLAN
。
划分原则:交换机根据发送的 Untagged 帧的类型字段来决定帧的VLAN归属。(协议类型与VLAN ID映射
)
例如:ipv4划分一个VLAN,ipv6划分一个VLAN。
2.7 VLAN 的范围
VLAN ID | 范围 | 用途 | 是否通过VTP传播 |
---|---|---|---|
0和4095 | 保留 | 用户不能使用 | 不适用 |
1 | 常规范围 | 默认VLAN,不可删除 | 是 |
2-1000 | 常规范围 | 用户能够创建、使用和删除 | 是 |
1001 | 常规范围 | 用户不能创建、使用和删除 | 是 |
1002-1005 | 保留 | FDDI和令牌环 | 不适用 |
1006-1009 | 保留 | 不适用 | |
1010-1024 | 保留 | 不适用 | |
1025-4094 | 保留 | 有限使用 | 否 |
2.8 VLAN成员模式
2.8.1 静态 VLAN
- 交换机上的端口以
手动方式
分配给VLAN;
2.8.2 动态 VLAN
- 使用
VMPS
可以根据连接到交换机端口的设备的源 MAC 地址,动态地将端口分配给 VLAN; - 华为使用
GVRP
3. VTP(VLAN Trunking Protocol)
- 一个能够宣告VLAN配置信息的信息系统;
- 通过一个共有的管理域,维持VLAN配置信息的一致性;
- VTP只能在trunk端口发送要宣告的信息;
- 支持混合的介质主干连接(快速以太网, FDDI, ATM).
3.1 VTP 模式
Server 模式 | Client | Transparent |
---|---|---|
创建vlan | 发送/转发信息宣告 | 创建VLAN |
修改vlan删除vlan | 同步 | 删除VLAN |
发送/转发信息宣告 | VLAN信息不会存贮于NVRAM | 删除VLAN |
同步 | 转发信息宣告 | |
VLAN信息存储于NVRAM | 不同步 不始发 | |
Catalyst交换机默认是 | VLAN信息存贮于NVRAM | |
server模式 |
3.2 VTP的运作
- VTP协议通过组播地址01-00-0C-CC-CC-CC在Trunk链路上发送VTP通告;
- VTP Server和clients通过最高的修订号来同步数据库;
- VTP协议每隔5分钟发送一次VTP通告或者有变化时发生;
4. VLAN间路由☆☆☆
VLAN的局限:VLAN在分割广播域的同时也限制了不同VLAN间的主机进行二层通信的能力。
4.1 双臂路由(每个VLAN一个物理连接)
在二层交换机上配置VLAN,每一个VLAN使用一条独占的物理链路连接到路由器的一个接口上。(一个VLAN一个接口
)

缺陷: 随着每个交换机上VLAN数量的增加,这样做必然需要大量的路由器接口,而路由器的接口数量是极其有限的。并且,某些VLAN之间的主机可能不需要频繁进行通信,如果这样配置的话,会导致路由器的接口利用率很低
。因此,实际应用中一般不会采用这种方案来解决VLAN间的通信问题。
4.2 单臂路由
在交换机和路由器之间仅使用一条物理链路连接。在交换机上,把连接到路由器的端口配置成Trunk类型
的端口,并允许相关VLAN的帧通过。在路由器上需要创建子接口
,逻辑上把连接路由器的物理链路分成了多条。一个子接口代表了一条归属于某个VLAN的逻辑链路。(创建子接口
)

配置子接口时,需要注意以下几点:
- 必须为
每个子接口分配一个IP地址
。该IP地址与子接口所属VLAN位于同一网段; - 需要在子接口上配置
802.1Q封装
,来剥掉和添加VLAN Tag,从而实现VLAN间互通; - 在子接口上使能子接口的
ARP广播功能
; - 子接口G0/0/1.1 与 G0/0/1.2 的
MAC地址是一样的都是G0/0/1的MAC地址
;
缺点: 如果VLAN数量众多,VLAN间的通信流量很大时,单臂路由提供的带宽就无法支撑这些流量。
4.3 三层交换(VLANIF接口)☆☆☆
三层交换机:是二层交换机与路由器的一种集成形式,它除了可以拥有一些二层口之外,还可以拥有一些“混合端口”(简称:混合口)
。混合口同时存在二层口和三层口的特征,所以在VLAN Interface(VLAN IF)接口下,既要考虑二层口的情况又要考虑三层口的情况。
-
在三层交换机上配置
VLANIF接口
来实现VLAN间路由; -
如果网络上有多个VLAN,则需要给
每个VLAN配置一个VLAN IF接口
,并给每个VLAN IF接口配置一个IP地址
; -
用户设置的
缺省网关就是三层交换机中VLAN IF接口的IP地址
;此时的VLANIF接口是三层口,但是平时交换机的是二层口。
4.3.1 二层口与三层口的区别☆☆☆
- 二层口只有Mac地址没有ip地址;三层口既有IP地址又有MAC地址;
- 二层口收到广播帧后,会将该广播帧从其他所有接口泛洪出去;
- 三层口收到广播帧后,会根据这个广播帧的类型字段的值将这个广播帧的数据载荷上送至设备的第三层模块处理;
- 二层口接收到单播帧后,先在自己的Mac地址表中查找这个帧的目的MAC地址,如果查不到,该设备会从其他二层接口泛洪出去;如果查到,会比较这个MAC地址所指示的那个二层接口是不是进入该设备的二层接口,如果是,直接丢弃;如果不是,则会从这个MAC地址对应的二层接口转发出去;
- 三层口接收到单播帧后,会比较这个帧的目的MAC地址是不是本地MAC地址,如果不是,直接丢弃;如果是,会根据这个单播帧的类型字段的值将这个单播帧的数据载荷上送至设备的第三层模块处理;
4.3.2 交换机与路由器的区别☆☆
- 交换机的端口都是二层口,一台交换机的不同二层口之间只存在二层转发通道,不存在三层转发通道。交换机内存在MAC地址表,用以二层转发,交换机不存在IP路由表;
- 路由器的端口都是三层口,一台路由器的不同二层口之间只存在三层转发通道,不存在二层转发通道。路由器内存在IP路由表表,用以三层转发,路由器不存在MAC地址表;
三、STP 生成树协议
分享今日:
参考博客链接:
STP 协议
思维导图:
1. 环路问题
1.1 广播风暴
**产生原因:**根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧
,或者是一个目的MAC地址未知的单播帧
,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。

本例中,主机A向外发送了一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
1.2 MAC地址表翻转
产生原因:交换机是根据所接收到的数据帧的源地址和接收端口
生成MAC地址表项的。

- 主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-05-06-07-08-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。
此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
- SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。
- SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
- SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,,00-05-06-07-08-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。
1.3 多帧复制

PC2向PC1发送一个单播帧Y,假设S2的MAC地址表中不存在关于PC1的MAC地址表项,所以S2会对Y帧进行泛洪。假设S1的MAC地址表项中存在“PC1的MAC地址<——>port 3
” ,S3的MAC地址表项中存在“PC1的MAC地址<——>port 1
” ,显然,S1,S3都会对Y帧进行点对点转发操作。最后的结果是PC1 会收到两份Y帧的拷贝。
2. STP 作用
STP通过阻塞端口来消除环路,并能够实现链路备份的目的。
2.1 作用
**消除环路:**通过阻断冗余链路来消除网络中可能存在的环路。
**链路备份:**当活动路径发生故障时,激活备份链路,及时恢复网络连通性。
2.2 基本术语
2.2.1 桥(Bridge)
桥和交换机这两个术语是互用的。
2.2.2 桥MAC地址
一个桥有多个转发端口,一个端口有一个MAC地址。通常把编号最小的那个端口MAC地址作为桥的MAC地址。
2.2.3 桥 ID(BID)
-
一个桥的桥ID由两部分组成,2字节的桥优先级和6字节的桥MAC地址。
-
桥优先级可以人为指定,缺省值为0x8000(相当于32768)。
2.2.4 端口 ID(PID)
端口ID有两种定义方式,不同厂家采用的 PID 定义方式不同,同样端口优先级也是可以人为指定的,缺省情况下,端口优先级是128
。
- PID 由两字节组成,第一个字节表示端口优先级,后一个字节是端口编号;
- PID 由16 bits组成,前4 bit表示端口优先级,后12bit表示端口编号;
3. STP 树的生成
STP通过构造一棵树来消除交换网络中的环路。
- 每个STP网络中,都会存在一个根桥,其他交换机为非根桥。根桥或者根交换机位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥产生故障时,非根桥之间会交互信息并重新选举根桥,交互的这种信息被称为BPDU。BPDU中包含交换机在参加生成树计算时的各种参数信息;
- STP中定义了三种端口角色:指定端口,根端口和预备端口。
- 指定端口是交换机向所连网段转发配置BPDU的端口,
每个网段有且只能有一个指定端口
。一般情况下,根桥的每个端口总是指定端口。 - 根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但
根桥上没有根端口
。 - 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。
预备端口将被阻塞
。
STP树生成过程:
- 选举一个根桥。
- 每个非根交换机选举一个根端口。
- 每个网段选举一个指定端口。
- 阻塞非根、非指定端口。
3.1 选举根桥
**选取原则:**桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)
会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先
。(先比优先级——>MAC地址)

交换机启动后就自动开始进行生成树收敛计算。**默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。**对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会
修改自己的BPDU报文的根桥ID字段,宣告新的根桥
。
3.2 确定根端口
-
根桥确定后,其他没有称为根桥的交换机都被称为非根桥。
-
非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID(Bridge ID)、对端PID(Port ID)和本端PID。
-
每个非根桥都要选举一个根端口。根端口是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即路径开销最小的端口就是根端口。
-
根端口是根桥与非根桥之间进行报文交互的端口。一台非根桥设备上只有一个根端口。

根路径开销: 交换机的某个端口到根桥的累计路径开销(即从该端口到根桥所经过的所有链路的路径开销的和
)称为这个端口的根路径开销(Root Path Cost,RPC)
思科路径开销:
Link Speed | Cost (New IEEE Specification) | Cost (Old IEEE Specification) |
---|---|---|
10 Gb/s | 2 | 1 |
1 Gb/s | 4 | 1 |
100 Mb/s | 19 | 10 |
10 Mb/s | 100 | 100 |
华为路径开销:
端口速率 | 路径开销(IEEE 802.1t标准) |
---|---|
10 Gbit/s | 2 000 |
1 Gbit/s | 20 000 |
100 Mbit/s | 200 000 |
10 Mbit/s | 2 000 000 |
3.2.1思科选取根端口优先顺序
- 选择最低的BID;
- 选择最低的路径开销(一定是到跟桥的路径);
- 选择最低发送者的BID;
- 选择最低端口优先级;
- 选择最低端口的PID;
3.2.2 华为选取根端口优先顺序
- 端口收到一个BPDU报文后,抽取该BPDU报文中根路径开销字段的值,加上该端口本身的端口开销即为本端口路径开销。如果有两个或两个以上的端口计算得到的
累计路径开销
相同,那么选择收到发送者BID最小的那个端口
作为根端口。

- 如果两个或两个以上的端口连接到同一台交换机上,则选择
发送者PID最小的那个端口
作为根端口。如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID最小
的作为根端口。
3.3 确定指定端口

每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
3.3.1 思科设备指定端口比较
- 最低的根桥ID
- 最低的根路径代价
- 最低发送者桥ID
- 最低端口ID
3.3.2 华为设备指定端口比较
- 根路径开销
- 端口所在交换机桥ID(BID)
- 端口ID(PID)

指定端口的选举也是首先比较累计路径开销,累计路径开销最小的端口就是指定端口。如果累计路径开销相同,则比较端口所在交换机的桥ID,所在桥ID最小的端口被选举为指定端口。如果通过累计路径开销和所在桥ID选举不出来,则比较端口ID,端口ID最小的被选举为指定端口。
3.4 阻塞备用端口
未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
网络收敛后,只有指定端口和根端口可以转发数据
。其他端口为预备端口,被阻塞,不能转发由终端计算机产生并发送的数据帧,但是可以接受并处理STP协议帧。只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态。

4. STP 报文格式
-
STP通过交换STP协议帧来建立和维护STP树,在网络拓扑发生变化的时候重建新的STP树。
-
STP协议帧是组播帧,组播地址为01-80-c2-00-00-00☆☆☆
-
STP协议帧有采用IEEE802.3封装,有两种格式:
Configuration BPDU
和TCN BPDU
4.1 Configuration BPDU
初始STP树的过程中,各STP交换机都会周期性(2s)
主动发送Configuration BPDU。
在STP 稳定后只有根桥周期性发送Configuration BPDU;非根桥会在根端口收
到根桥发来的Configuration BPDU,并触发产生自己的Configuration BPDU,且从指定端口发
出。(根端口接收,指定端口发出)
4.1.1 BPDU报文格式:
BPDU携带的参数可以分为三类:
- 第一类BPDU自身标识,包括协议标识、版本号、、BPDU类型和flags;
- 第二类是用于STP计算的参数,包括交换机BID,点前根桥BID,发送BPDU的PID和RPC;
- 第三类是时间参数;
字段 | 字节数 | 说明 |
---|---|---|
protocol identifier | 2 | 总是 0x0000 |
protocol version identifier | 1 | 总是 0x00 |
BPDU type | 1 | 0x00:Configuration BPDU 0x80:TCN BPDU |
Flags | 1 | 网络拓扑变化标志:仅使用了最高(TCA)最低(TC) |
根桥ID | 8 | 由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根桥 |
根路径开销 | 4 | 到根桥的最短路径开销 |
指定桥ID | 8 | 由指定桥的优先级和MAC地址组成 |
指定端口ID | 2 | 由指定端口的优先级和端口号组成 |
Message Age | 2 | 配置BPDU在网络中传播的生存期(每经过一个桥,-1) |
Max Age | 2 | 配置BPDU在设备中能够保存的最大生存期(缺省20s ) |
Hello Time | 2 | 配置BPDU发送的周期(2s) |
Forward Delay | 2 | 端口状态迁移的延时(缺省15s )。控制端口Listening和Learning状态持续时间,缺省15s |
4.1.2 STP 计时器
- Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔,用于检测链路是否存在故障。交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。
当网络拓扑稳定后,该值只有在根桥上修改才有效
。 - Message Age是从根桥发送到当前交换机接收到BPDU的总时间,包括传输延时等。如果配置BPDU是根桥发出的,则Message Age为0。实际实现中,配置BPDU报文
每经过一个交换机,Message Age增加1
。 - Forward Delay是指端口状态迁移时间。STP生成树需要一定的时间,如果选出来的根端口或者指定端口马上进入转发状态的话,可能就会总成临时工作环路。forward delay机制:
新选出来的根端口和指定端口需要经过两倍的forward delay时间延时后才可以进入用户数据帧的转发状态
,保证此时工作拓扑已无环路。 - Max Age是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。
4.2 TCN BPDU
TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
TCN BPDU 只有三个字段:协议标识
,协议版本号
和类型
。
TCN BPDU工作流程:
如果网络中某条链路发生故障,导致拓扑发上变化,位于故障点的交换机可以感知到变化,但是其他交换机无法感知。
- 位于故障点的交换机会以Hello Time为周期通过
根端口
不断向上游交换机发送TCN BPDU,直到从上游交换机收到TCA 标志置1的configuration BPDU; - 上游交换机收到TCN BPDU后,一方面通过指定端口回复下游交换机
TCA置1的configuration BPDU
,一方面以hello time为周期向上游交换机发送TCN BPDU; - 根桥收到TCN BPDU后,发送
TC 置1 的configuration BPDU
通告所有交换机网络拓扑发生变化; - 交换机收到TC标志置1的configuration BPDU,便意识到网络拓扑已经发生变化,说明自己MAC地址表项可能已经不正确。此时交换机会将MAC地址表的
老化周期(缺省300s)置缩短为Forward relay
时间长度(缺省15s)。
5. STP 端口状态
5.1 端口状态
STP定义了五种端口状态:去能状态、阻塞状态、侦听状态、学习状态和转发状态。
端口状态 | 说明 |
---|---|
去能(Disabled) | 无法接受发送任何帧,端口处于关闭状态(Down) |
阻塞(Blocking) | 可以接受并分析STP协议帧,但是不能发送STP协议帧,也不能转发用户数据帧 |
侦听(Listening) | 可以接受并发送STP协议帧,但是不能学习MAC地址,也不能转发用户数据帧 |
学习(Learning) | 可以接受并发送STP协议帧,可以学习MAC地址,也不能转发用户数据帧 |
转发(Forwarding) | 可以接受并发送STP协议帧,可以学习MAC地址,同时也能转发用户数据帧 |
5.2端口状态迁移

- 端口初始化或使能;
- 端口被选为根端口或指定端口。
- 端口不再是根端口或指定端口。
- forward delay计时器超时(Listening和Learning之间转换)。
- 端口禁用或链路失效。
-
STP在启动的时候,端口状态由
Disabled转为Blocking
,此时端口指定接收分析BPDU,不能发送; -
如果Blocking状态端口被选为根端口或者指定端口,会
进入Listening
状态,此时端口接收并发送BPDU,这种状态会持续一个Forward Delay时间(缺省15s)
; -
没有意外情况回到Blocking,端口会
进入Learning
状态,并持续一个Forward Delay时间(缺省15s)
,此时端口可以收发BPDU,同时构建MAC地址表,为转发用户数据帧做准备; -
没有意外,端口
进入Forwarding
状态,开始用户数据帧转发工作; -
状态迁移过程中,一旦端口被关闭或者出现链路故障,进入去能状态;
-
状态迁移过程中,一旦端口不再是根端口或者指定端口,进入阻塞状态;
5.3 端口状态转换举例

- 假设交换机S1,S2,S3同一时间启动。各个交换机从Disabled进入Blocking状态。由于处于Blocking状态只能接受分析BPDU,不能发送,所以任何端口都收不到BPDU。
等待MAX Age(缺省20s)
时间后,每台交换机都会认为自己是根桥,每个端口都是指定端口,端口状态迁移为Listening;- 交换机进入learning状态后就会开始发送自己的Configuration BPDU,同时也会受到其他交换机发送的Configuration BPDU。
- 假设S2先发送Configuration BPDU,S3从自己的G 0/0/2端口收到后,发现S2 的BID比自己的小,于是认为S2是根桥,将G0/0/2设置为根端口,然后将自己重新产生的根桥设置为S2的Configuration BPDU从G0/0/1端口发给S1;
- S1收到S3发来的BPDU后,发现自己的BID是最小的,认为自己就是根桥。于是向S3发送Configuration BPDU,同样的也会在G0/0/2 端口受到S2 的Configuration BPDU,也会从G0/0/2端口发送自己的BPDU给S2;
- 端口在listening状态下
持续15s
,进入learning。此时S3的G0/0/2接口已经被阻塞。- 各个端口相继进入Learning,持续
Forward time(15s)
后进入。在这段时间内构建MAC地址转发表,为用户数据帧转发做准备;- 各端口进入Forwarding状态,开始转发用户数据帧。
6. STP 故障问题
6.1 根桥故障

- 在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。
- 如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。
- 如果下游交换机一直收不到BPDU报文,
Max Age定时器就会超时(Max Age的默认值为20秒)
,从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送配置BPDU报文,重新选举新的根桥。根桥故障会导致50秒左右
☆☆☆的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。(max age + 2*Forwarding relay)
6.2直连链路故障

- SWB检测到直连链路物理故障后,会将预备端口转换为根端口;
- SWB新的根端口会在
30 秒后
恢复到转发状态。
此例中,SWA和SWB使用了两条链路互连,其中一条是主用链路,另外一条是备份链路。生成树正常收敛之后,如果SWB检测到根端口的链路发生物理故障,则其Alternate端口会迁移到Listening、Learning、Forwarding状态,经过两倍的Forward Delay后恢复到转发状态。
6.3 非直连链路故障

非直连链路故障后,由于需要等待Max Age加上两倍的Forward Delay时间,端口需要大约50秒才能恢复到转发状态。
本例中,SWB与SWA之间的链路发生了某种故障(非物理层故障),SWB因此一直收不到来自SWA的BPDU报文。
- 等待
Max Age定时器超时后
,SWB会认为根桥SWA不再有效,并认为自己是根桥,于是开始发送自己的BPDU报文给SWC,通知SWC自己作为新的根桥。- 在此期间,由于SWC的Alternate端口再也不能收到包含原根桥ID的BPDU报文。其
Max Age定时器超时
后,SWC会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给SWB。- 所以,Max Age定时器超时后,SWB、SWC几乎同时会收到对方发来的BPDU。经过STP重新计算后,SWB放弃宣称自己是根桥并重新确定端口角色。
- 非直连链路故障后,SWC的预备端口恢复到转发状态大约
需要50秒
。
6.4 拓扑改变导致MAC地址表错误

在交换网络中,交换机依赖MAC地址表转发数据帧。缺省情况下,MAC地址表项的老化时间是300秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新MAC地址表项。
本例中,SWB中的MAC地址表项定义了通过端口GigabitEthernet 0/0/3可以到达主机A,通过端口GigabitEthernet 0/0/1可以到达主机B。由于SWC的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达SWB后,SWB会继续通过端口GigabitEthernet 0/0/1转发该数据帧。
6.5 拓扑改变导致MAC地址表变化

拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。
拓扑变更以及MAC地址表项更新的具体过程如下:
- SWC感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。
- SWB收到SWC发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的
TCA位设置1
,然后发送给SWC,告知SWC停止发送TCN BPDU报文。 - SWB向根桥转发TCN BPDU报文。
- SWA把配置BPDU报文中的Flags的
TC位设置为1
后发送,**通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay的时间(默认为15秒)。**☆
最多等待15秒之后,SWB中的错误MAC地址表项会被自动清除。此后,SWB就能重新开始MAC表项的学习及转发操作。
7. RSTP(STP 优化)
7.1 STP缺陷
STP生成树收敛需要依赖定时器计时,端口状态从Blocking到Forwarding至少需要两个forward relay的时间长度,收敛时间太长,一般都需要几十秒。IEEE 802.1w定义了RSTP(Rapid Spanning Tree Protocol)弥补了STP收敛时间慢的缺陷。
7.2 RSTP
7.2.1 RSTP端口角色
角色 | 描述 |
---|---|
Backup | Backup端口作为指定端口的备份,提供了另外一条从根桥到非根桥的备份链路。 |
Alternate | Alternate端口作为根端口的备份端口,提供了从指定桥到根桥的另一条备份路径。 |
7.2.2 三种端口状态
RSTP中定义了三种端口状态:Discarding、Learning、Forwarding。
RSTP 端口状态 | 对应STP端口状态 | 说明 |
---|---|---|
Forwarding | Forwarding | 可以转发用户数据帧,可以学习MAC地址 |
Learning | Learning | 不可以转发用户数据帧,但是可以学习MAC地址 |
Discarding | Listening、Blocking、Disabled | 不可以转发用户数据帧,不可以学习MAC地址 |
7.2.3 P/A机制
在RSTP中,一个端口被指定成为指定端口后,此端口会先进入discarding,然后通过**P/A(Proposal/Agreement)**机制主动与对端端口协商,通过协商后,就可以立即进入Forwarding状态。
7.2.4 边缘端口

- RSTP里,位于网络边缘的指定端口被称为边缘端口。
- 边缘端口一般与用户终端设备直接连接,不与任何交换设备连接。边缘端口不接收配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用了一样。但是,一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
7.2.5 RSTP收敛过程
RSTP BPDU:RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备都会仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。

- 每一台交换机启动RSTP后,都认为自己是“根桥”,并且发送RST BPDU。所有端口都为指定端口,
处于Discarding状态
。 - 交换机互相发送Proposal置位的
RST BPDU
。每个认为自己是“根桥”的交换机生成一个RST BPDU报文来协商指定网段的端口状态,此RST BPDU报文的Flags字段里面的Proposal位需要置位。当一个端口收到RST BPDU报文时,此端口会比较收到的RST BPDU报文和本地的RST BPDU报文。如果本地的RST BPDU报文优于接收的RST BPDU报文,则端口会丢弃接收的RST BPDU报文,并发送Proposal置位的本地RST BPDU报文来回复对端设备。 - **交换机使用
同步机制
来实现端口角色协商管理。**当收到Proposal置位并且优先级高的BPDU报文时,接收交换机必须设置所有下游指定端口为Discarding状态。如果下游端口是Alternate端口或者边缘端口,则端口状态保持不变
。 - 当确认下游指定端口迁移到Discarding状态后,设备发送RST BPDU报文回复上游交换机发送的Proposal消息。在此过程中,端口已经确认为根端口,因此RST BPDU报文Flags字段里面设置了Agreement标记位和根端口角色。
- 在P/A进程的最后阶段,上游交换机收到Agreement置位的RST BPDU报文后,指定端口立即从Discarding状态迁移为Forwarding状态。然后,下游网段开始使用同样的P/A进程协商端口角色。
7.2.6 链路故障/根桥失效

- 在STP中,当出现链路故障或根桥失效导致交换机收不到BPDU时,交换机需要等待Max Age时间后才能确认出现了故障。
- 而在RSTP中,如果交换机的端口在连续3次Hello Timer规定的时间间隔内没有收到上游交换机发送的RST BPDU,便会确认本端口和对端端口的通信失败,从而需要重新进行RSTP的计算来确定交换机及端口角色。
四、RSTP(STP 优化)
思维导图:

1. STP缺陷
STP生成树收敛需要依赖定时器计时,端口状态从Blocking到Forwarding至少需要两个forward relay的时间长度,收敛时间太长,一般都需要几十秒。IEEE 802.1w定义了RSTP(Rapid Spanning Tree Protocol)弥补了STP收敛时间慢的缺陷。
2. RSTP
2.1 RSTP端口角色
角色 | 描述 |
---|---|
Backup | Backup端口作为指定端口的备份,提供了另外一条从根桥到非根桥的备份链路。 |
Alternate | Alternate端口作为根端口的备份端口,提供了从指定桥到根桥的另一条备份路径。 |
2.2 三种端口状态
RSTP中定义了三种端口状态:Discarding、Learning、Forwarding
。
RSTP 端口状态 | 对应STP端口状态 | 说明 |
---|---|---|
Forwarding | Forwarding | 可以转发用户数据帧,可以学习MAC地址 |
Learning | Learning | 不可以转发用户数据帧,但是可以学习MAC地址 |
Discarding | Listening、Blocking、Disabled | 不可以转发用户数据帧,不可以学习MAC地址 |
2.3 P/A机制
在RSTP中,一个端口被指定成为指定端口后,此端口会先进入discarding,然后通过**P/A(Proposal/Agreement)**机制主动与对端端口协商,通过协商后,就可以立即进入Forwarding状态。
2.4 边缘端口

- RSTP里,位于网络边缘的指定端口被称为边缘端口。
- 边缘端口一般与用户终端设备直接连接,不与任何交换设备连接。边缘端口不接收配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用了一样。但是,一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
2.5 RSTP收敛过程
RSTP BPDU:RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备都会仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。

- 每一台交换机启动RSTP后,都认为自己是“根桥”,并且发送RST BPDU。所有端口都为指定端口,
处于Discarding状态
。 - 交换机互相发送Proposal置位的RST BPDU。每个认为自己是“根桥”的交换机生成一个RST BPDU报文来协商指定网段的端口状态,此RST BPDU报文的Flags字段里面的Proposal位需要置位。当一个端口收到RST BPDU报文时,此端口会比较收到的RST BPDU报文和本地的RST BPDU报文。如果本地的RST BPDU报文优于接收的RST BPDU报文,则端口会丢弃接收的RST BPDU报文,并发送Proposal置位的本地RST BPDU报文来回复对端设备。
- **交换机使用同步机制来实现端口角色协商管理。**当收到Proposal置位并且优先级高的BPDU报文时,接收交换机必须设置所有下游指定端口为Discarding状态。
如果下游端口是Alternate端口或者边缘端口,则端口状态保持不变
。 - 当确认下游指定端口迁移到Discarding状态后,设备发送RST BPDU报文回复上游交换机发送的Proposal消息。在此过程中,端口已经确认为根端口,因此RST BPDU报文Flags字段里面设置了Agreement标记位和根端口角色。
- 在P/A进程的最后阶段,上游交换机收到Agreement置位的RST BPDU报文后,指定端口立即从Discarding状态迁移为Forwarding状态。然后,下游网段开始使用同样的P/A进程协商端口角色。
2.6 链路故障/根桥失效

- 在STP中,当出现链路故障或根桥失效导致交换机收不到BPDU时,交换机需要等待Max Age时间后才能确认出现了故障。
- 而在RSTP中,如果交换机的端口在连续3次Hello Timer规定的时间间隔内没有收到上游交换机发送的RST BPDU,便会确认本端口和对端端口的通信失败,从而需要重新进行RSTP的计算来确定交换机及端口角色。
思维导图:

五、MSTP (多实例生成树协议)
RSTP的缺陷:
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但由于局域网内所有的VLAN共享一棵生成树,因此被阻塞后链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,从而造成带宽浪费。
关于MSTP的解释:
- IEEE 802.1s发布了MSTP(Multiple STP,多实例生成树协议);
- MSTP 能够兼容RSTP 和 STP
- 生成树
不是基于VLAN运行的,是基于Instance(实例)
运行的。Instance是一个或多个VLAN的集合;
1. 单生成树实例弊端
1.1 部分VLAN路径不通

如图所示,网络中有SWA、SWB、SWC三台交换机。配置VLAN2通过两条上行链路,配置VLAN3只通过一条上行链路。
为了解决VLAN2的环路问题,需要运行生成树。在运行单个生成树的情况下,假设SWC与SWB相连的端口成为预备端口(Discarding状态),那么VLAN3的路径就会被断开,无法上行到SWB。
1.2 无法实现流量分担

- 为了实现流量分担,需要配置两条上行链路为Trunk链路,允许通过所有VLAN;
- SWA和SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。将VLAN2的三层接口配置在SWA上,将VLAN3的三层接口配置在SWB上。
- 我们希望VLAN2和VLAN3分别使用不同的链路上行到相应的三层接口,但是如果连接到
SWB的端口成为预备端口(Alternate Port)
并处于Discarding状态,则VLAN2和VLAN3的数据都只能通过一条上行链路上行到SWA,这样就不能实现流量分担。
1.3 次优二层路径

- 如图所示,SWC与SWA和SWB相连的链路配置为Trunk链路,允许通过所有VLAN;SWA与SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。
- 运行单个生成树之后,环路被断开,VLAN2和VLAN3都直接上行到SWA。
- 在SWA上配置VLAN2的三层接口,在SWB上配置VLAN3的三层接口,那么,VLAN3到达三层接口的路径就是次优的。
2. MSTP 原理

- 多生成树协议即MSTP(Multiple Spanning Tree Protocol)。
- MST域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。
- 同一个MST域的设备具有下列特点:
-
都启动了MSTP。
-
具有相同的域名。
-
具有相同的VLAN到生成树实例映射配置。
-
具有相同的MSTP修订级别配置。
- 一个MST域内可以生成多棵生成树,每棵生成树都称为一个
MSTI(Mulitiple Instance Spanning Tree Protocol)
,每个MSTI都使用单独的RSTP算法,计算单独的生成树。 - 每个MSTI(MST Instance)都有一个
标识(MSTID)
,MSTID是一个两字节的整数。一个Instance可以包含多个VLAN,但是一个VLAN只能属于一个Instance。 - VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系,MSTI可以与一个或多个VLAN对应,但一个VLAN只能与一个MSTI对应。
- MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的各个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
六、路由
1. 路由的概念
1.1 路由的基本概念
-
路由(route):是一个网络层的术语,指从某一网络设备出发去往某个目的地的路径。
-
路由表(routing table):是若干条路由信息的集合,一条路由信息也被称为一个路由项或者一个路由条目。
-
被动路由协议(Routed protocols ):用来在路由器之间传递用户的信息
-
主动路由协议(Routing protocols ):用于维护路由器的路由表
-
路由只存在终端计算机和路由器(以及三层交换机)中,二层交换机没有。
-
如果一个路由项的下 一跳IP地址与出接口的IP地址相同,说明该出接口已经连接到了目的网络,并且处于同一个二层网络(二层广播域)中。
1.2 路由表匹配
假设一个IP报文的目的IP地址是X
,路由器的某个路由表项的目的地/掩码是z/y
,那么如果x与y逐位相与
,与的结果为等于Z,那么这个IP报文就匹配上z/y这个路由表项;如果结果不等于Z那么说明不匹配。
最长匹配原则:
当一个IP报文匹配上了多个路由项时,路由器根据“最长匹配原则”来确定一条最优路由,匹配的掩码越多越优;
例如,目的地址为2.1.0.1 的IP报文既能匹配上2.0.0.0/8 又能匹配上2.0.0.0/16,后者掩码长度长优先匹配。
1.3 路由信息的来源
路由信息的生成方式有三种:直连路由(Direct Route),手工配置(Static Route),动态路由(Dynamic Route)。
1.3.1 直连路由

-
网络设备启动后,接口状态变为UP,设备就会自己去发现与自己接口直接相连的网络的路由;
-
直连指的是这台设备的接口已经位于这个网络中;
-
对于直连路由,Cost值为0;
R1 的路由表:
1.3.2 静态路由

PC1 ping 12.0.0.1 和 12.0.0.2:只能Ping到R1路由器的接口,R2的接口不能ping通;
![]()
R1 R2配置静态路由:
[R1]ip route-static 192.168.20.0 255.255.255.0 12.0.0.2
[R2]ip route-static 192.168.10.0 24 12.0.0.1
默认路由:
-
目的地/掩码为0.0.0.0
的路由称为默认路由或者缺省路由(Default Route),任何一个待发送或者待转发的IP报文都可以和默认路由匹配上; -
如果默认路由是由路由协议产生的称为动态默认路由;
-
如果默认路由是由手工配置产生的称为静态默认路由;
1.3.3 动态路由
- 网络设备可以通过动态路由协议发现路由;
- 一台路由器可以运行多种路由协议;
- 计算机不运行任何路由协议,计算机上只有一个IP路由表;
2. 路由的优先级
如果同时获取去往同一个目的地/掩码的三条不同路由,该怎样转发呢?
不同来源的路由规定了不同的优先级(Preference),并且优先级越小,则路由的优先级越高。(越小越优先
)
2.1 华为路由的优先级
路由来源 | 优先级的缺省值 |
---|---|
直连路由 | 0 |
OSPF | 10 |
静态路由 | 60 |
RIP | 100 |
BGP | 255 |
2.2 思科路由的优先级
Routing Protocols | AD | 备注 |
---|---|---|
直连接口 | 0 | |
关联出接口的静态路由 | 1 | Metric =0 |
关联下一跳的静态路由 | 1 | Metric =0 |
EIGRP 汇总路由 | 5 | |
外部 BGP | 20 | |
内部EIGRP | 90 | |
IGRP | 100 | |
OSPF | 110 | |
RIPv1、v2 | 120 | |
外部EIGRP | 170 | |
内部BGP | 200 |
3. 路由的开销
-
一条路由的开销指的是到达这条路由
目的地/掩码
需要付出的代价值; -
同一种路由协议发现有多条路由可以到达同一个目的地/掩码,选择开销最小的;
-
不同路由协议的开销值不同,RIP是以“跳数”(经过路由器的个数)为开销,OSPF是以度量值(OSPF有多种度量方式)作为开销;
-
如果去往同一个目的地的路由协议不相同,那么会先比较路由优先级,并将优先级最小的加入到路由表;
-
如果运行着相同的协议,去往同一个目的地/掩码具有相同的跳数,也就是说代价(开销)是相同的,称为等价路由;在这种情况下,两条路有都会被添加进入路由表,并进行负载分担。
![]()
R1,R2,R3都运行着RIP协议,R1去往PC有两条路由。
一条需要3跳(中途经过R123三台路由器);一条需要两跳(中途经过R12两台路由)
4. 计算机上的路由表和路由器上的路由表
- 计算机上的IP路由表规
模一般比较小
,通常只包含10,20条路由;- 计算机不运行任何路由协议,所以计算机的IP路由表中的路由要么是
直连路由
,要么是手工配置的静态路由
,或者是操作系统代替我们手工配置
的各种路由;
- 计算机不运行任何路由协议,所以计算机的IP路由表中的路由要么是
- 路由器上的IP路由表可能又几条,几十条,几百,几千,几万,甚至上百万级别条路由;
5. Loopback接口
- Loopback接口,也叫回环口,是一个
逻辑的、虚拟的接口
- 创建完成后即可为接口配置IP地址
- Loopback接口在手工创建后,除非人为shutdown,否则不会DOWN掉
- Loopback接口常用于
- 模拟路由器的直连网段,可用于测试
- 可用于设备管理(Loopback接口比较稳定)
- 供其他协议使用,例如OSPF、BGP、MPLS等
- 其他用途(Loopback接口的用途十分广泛)
七、RIP
思维导图:

1. 路由协议基础
1.1 自治系统(AS)
自治系统(Autonomous System,AS):在网络中一个自治系统指的是若干个二层网络及若干路由器组成的集合
,集合中的这些网络和这些路由器属于同一个管理机构。规模大小不同,一个 internet 可以包含一个或多个AS。
1.2 路由协议分类
- 路由协议分为两大类,一类是
IGP(Interior Gateway Protocol,内部网关协议)
,一类是EGP(Exterior Gateway Protocol ,外部网关协议 )
。 - IGP成员有
RIP(Routing Information Protocol)
,OSPF(Open Shortest Path First)
,IS-IS(Intermediate System to Intermediate System)
等; - EGP成员虽然也有若干个协议,但是目前使用的就只有一个
BGP(Border Gateway Protocol)
。
2. RIP协议基本原理
-
RIP是一种基于
距离矢量(Distance Vector,简称DV)
算法的IGP协议,其协议的优先级为100(华为),120(思科); -
以“跳数”作为开销,所谓“跳数”就是到达目的地需要经过的路由器个数,跳数>=16时视为不可达路由,使得RIP只能应用于小规模的网络;
-
周期性更新路由表,即使在稳定状态下,路由交换过程仍然会继续进行;
3. RIP路由表形成
一台路由器在创建RIP路由表初期,RIP路由表中只包含直连路由。随后路由器会不断接收从邻居发来的路由信息,并根据这些路由信息来完善自己的路由表。同时路由器会每隔30s
向邻居路由器发起更新请求。

4. RIP消息格式
-
RIP的消息格式有两种:一种是RIP请求消息(Request),另一种是RIP响应消息(Response);
-
RIP路由器发送请求消息给邻居路由器,邻居路由器收到后就会立即发送响应消息给邻居路由器;
-
RIP路由器可以随时向邻居发出请求消息;
-
RIP路由器总是会
每隔30s周期性
向邻居路由器发送响应消息;RIP请求消息有两种:
- 请求消息用来请求关于某一些指定的路由信息;
- 请求关于整个RIP网络的路由信息,
RIP刚刚启动的时候应该是采用第二种RIP请求消息
;
5. RIP-1与RIP-2
RIP协议有两个版本,RIP-1和RIP-2,基于UDP协议,使用的端口号为520
。
5 .1RIP-1的报文格式
RIP-1报文由头部(Header)和多个路由表项(Route Entries)部分组成。在一个RIP报文中,最多可以有25个路由表项
。RIP是一个基于UDP协议
的,并且RIP-1的数据包不能超过512字节。
字段名 | 长度 | 含义 |
---|---|---|
Command(命令) | 8比特 | 标识报文的类型: 1:Request报文,向邻居请求全部或部分路由信息; 2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。 |
Version(版本) | 8比特 | RIP的版本号: 1:RIP-1 2:RIP-2 |
Must be zero | 16 比特 | 必须为零字段。 |
AFI(Address Family Identifier)协 议簇 | 16比特 | 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。 |
Route Tag | 16比特 | 外部路由标记。 |
IP Address | 32比特 | 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。 |
Metric | 32比特 | 路由的开销值。对于Request报文,此字段为16。 |
5.2 RIP-2的报文格式
字段名 | 长度 | 含义 |
---|---|---|
Command(命令) | 8比特 | 标识报文的类型: 1:Request报文 ,向邻居请求全部或部分路由信息; 2:Reponse报文 ,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。 |
Version(版本) | 8比特 | RIP的版本号: 1:RIP-1 2:RIP-2 |
Must be zero | 16比特 | 必须为零字段。 |
AFI(Address Family Identifier)协议簇 | 16比特 | 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。 |
Route Tag | 16比特 | 外部路由标记。 |
IP Address | 32比特 | 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。 |
Subnet Mask | 32比特 | 目的地址的掩码。 |
Next Hop | 32比特 | 提供一个更好的下一跳地址。如果为0.0.0.0,则表示发布此路由的路由器地址就是最优下一跳地址。 |
Metric | 32比特 | 路由的开销值。对于Request报文,此字段为16。 |
5.3 运行RIP-1和RIP-2版本的不同
5.3.1 运行RIP-1的时候
-
对于请求消息或周期性的响应消息(情况1),IP报文的
目的地址为广播地址255.255.255.255
,源地址为发送该请求消息或响应消息的接口的IP地址,协议字段的值为0x11
。 -
为了回应请求消息而发送的响应消息(情况2),IP报文的目的地址为发送请求消息
接口的IP地址
,源地址为发送响应消息的接口的IP地址,协议字段0x11
。- 接下来,IP报文又是封装在以太网帧中(假设路由器的接口都是以太网接口):
-
对于情况1,以太网帧的
目的MAC地址是ff-ff-ff-ff-ff-ff
,源地址是发送请求消息或响应消息的接口的MAC地址,类型字段为0x0800。 -
对于情况2,以太网帧的目的MAC地址是发送请求消息的接口的MAC地址,源地址为发送该响应消息的接口的MAC地址,类型字段为0x0800。
5.3.2 运行RIP-2的时候
-
对于请求消息或周期性的相应消息(情况1),IP报文的
目的地址为组播地址224.0.0.9
,也可以为广播地址255.255.255.255
,源地址为发送该请求消息或响应消息的接口的IP地址,协议字段的值为0x11。 -
为了回应请求消息而发送的响应消息(情况2),IP报文的目的地址为发送请求消息接口的IP地址,源地址为发送响应消息的接口的IP地址,协议字段0x11。
-
接下来,IP报文又是封装在以太网帧中(假设路由器的接口都是以太网接口):
-
对于情况1,以太网帧的
目的MAC地址是ff-ff-ff-ff-ff-ff
,源地址是发送请求消息或响应消息的接口的MAC地址,类型字段为0x0800。 -
对于情况2,以太网帧的目的MAC地址是发送请求消息的接口的MAC地址,源地址为发送该响应消息的接口的MAC地址,类型字段为0x0800。
-
-
5.3.3 RIP-1与RIP-2的不同
- RIP-1只支持有类路由;RIP-2支持无类路由,支持VLSM,CIDP等特性;
- RIP-1不支持认证功能;RIP-2可以支持认证功能,因此安全性得到提高;
- RIP-1不能采用组播方式发布消息;RIP-2可以采用组播方式发布消息,因此RIP-2比RIP-1占用更少的设备处理资源;
6. RIP定时器
RIP协议有三种定时器:分别是更新定时器(Update Timer)
,无效定时器(Invalid Timer)
,垃圾收集定时器(Carbage Collection Timer)
。
6.1 更新定时器
更新定时器也可以称为周期定时器(Periodic Timer),每台RIP路由器都有一个属于自己的RIP更新定时器。缺省情况下,周期值为30s
。每当更新定时器倒计时值为0时,路由器就会向所有邻居发送RIP响应消息,当路由器收到RIP请求消息时候,会立即发送RIP响应消息,但是不影响基于更新定时器的周期性RIP响应消息的发送
。
6.2 无效定时器
每个路由器都建立并维护一个无效定时器。缺省情况下,无效定时器值为180s(更新定时器周期的6倍)
。当一个路由项的无效定时器的值倒计时为0时,就说明该路由表项已经有180s的时间没有别更新,此时路由表会认为该路由项已经变为一个无效的路由项,也就是认为该路由项所指的所指的目的地已经变为不可达,于是路由器会将该路由的cost值设置为16
.
6.3 垃圾收集定时器
-
当无效定时器值倒计时为0时,该路由项是一个无效路由项,其cost值就会被设置为16。此时路由器不会立即将这个无效的路由项删除掉,而是会为该路由项启用一个被称为垃圾收集定时器的倒数计时器。垃圾收集定时器的缺省值为120s。
-
在垃圾收集定时器倒计时为0之前,该路由器仍然会周期性在RIP响应消息中携带这条无效的路由信息,其目的是为了告诉他的所有邻居这条路由项对于自己来说已经无效,以便路由器能够及时对各自的RIP路由表中的相应的路由项进行更新。
-
一旦垃圾收集定时器的值倒计时为0时,路由器就会将这条无效路由项删除。(注意:在垃圾收集定时器为0前的某一时刻,该无效路由被更新,即Cost的值更新为小于16,则该路由项的的无效定时器会被复位成初始值,然后重新计时,相应的垃圾收集定时器则会被删除掉)
7. RIP环路问题

假设路由器C发生故障(E0接口down掉),RC监测到该故障后会立即向RB发送故障信息(跳数设置为16)表示10.4.0.0为无效路由。然而,在RC准备将这条无效路由周期性响应消息发给RB的时候,收到RB周期性的相应消息,其中包含10.4.0.0 网段的路由信息,那么这个时候RC就会认为通过RB可以到达10.4.0.0网段,所以RC就在10.4.0.0路由项的跳数上+1,RB又会从RC学习到这条路由并且会通告给自己的邻居,那么不断往复,就产生了环路。
8. 环路解决
华为的环路解决方案提供了触发更新
,水平分割
,毒性逆转
三种
8.1 触发更新
-
所谓触发更新,就是指RIP路由表中的某些路由项的内容发生改变时,路由器应立即向它的所有邻居发布响应消息,而不用等待更新定时器所规定的下一个响应消息的发送时刻。(立即更新)
-
另外,触发更新响应消息中只需要包含路由信息发生了改变的路由项,减少带宽及路由器处理资源的消耗
注意如果对方未收到触发更新的消息,本端就收到一个周期性响应消息,这种情况下仍然会产生路由。但是触发更新在一定程度上降低了环路产生的概率。
8.2 水平分割
水平分割的原理是:如果一台路由器的RIP路由表中目的地/掩码为z/y的路由信息是通过该路由器的Interface-x接口学习来的,那么该路由器在通过Interface-x接口向外发送响应消息时,响应消息一定不要包含关于z/y这个路由项的信息。(从哪里学到就不发回哪里
)
8.3 毒性逆转
毒性逆转的原理是:如果一台路由器的RIP路由表中目的地/掩码为z/y的路由信息是通过该路由器的Interface-x接口学习来的,那么该路由通过Interface-x接口向外发送消息时,响应消息中仍然需要包含z/y这个路由项,但是这个路由项的Cost值总是16。
八、OSPF
思维导图:

1. ospf基本原理
1.1 OSPF原理
原理:OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)
泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database)
,并在LSDB的基础上使用SPF算法
进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。
什么叫链路(LINK) =路由器接口
什么叫状态(State) =描述接口以及其与邻居路由器之间的关系
- OSPF是一种
基于链路状态的路由协议
,它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。 - OSPF支持
触发更新
,能够快速检测并通告自治系统内的拓扑变化。 - OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。
1.2 OSPF metric
- OSPF使用开销cost作为路由的
度量值
- 在每一个运行OSPF的接口上,都维护着一个接口COST,
接口COST=100M/接口带宽
,其中100M为OSPF的参考带宽。 - 一条路由的COST由该路由从来路由的起源一路过来的所有入接口cost值的总和
1.3 Router-ID
- 用于在一个OSPF域中唯一地标识一台路由器
- OSPF Router-ID的设定可以通过手工配置的方式,或者通过自动选取的方式。 自动选取的机制是:若有loopback口,则选最大的loopback口IP地址,若无则选活跃的物理接口中IP地址最大的作为RouterID(
Router-ID不具有抢占性
)
1.4 OSPF三张表
- 邻居表(neighbor table):
OSPF用邻居机制来发现和维持路由的存在,邻居表存储了双向通信的邻居关系OSPF路由器列表的信息。 - 拓扑数据库(link-state database):
OSPF用LSA(link state Advertisement 链路状态通告)来描述网络拓扑信息,然后OSPF路由器用拓扑数据库来存储网络的这些LSA。 - OSPF路由表(routing table):
对链路状态数据库进行SPF(Dijkstra)计算,而得出的OSPF路由表。
2. RIP与OSPF
2.1 RIP 的缺陷和OSPF改进
RIP特性 | 带来的问题 | 优化或解决的方式 |
---|---|---|
逐跳收敛 | 收敛慢,故障恢复时间长 | “收到更新->计算路由->发送更新” 改为“收到更新->发送更新->计算路由” |
传闻路由更新机制 | 缺少对全局网络拓扑的了解 | 路由器基于拓扑信息,独立计算路由 |
最多有效跳数为15 | 环形组网中,使远端路由不可达 | 不限定跳数 |
以“跳数”为度量 | 存在选择次优路径的风险 | 将链路带宽作为选路参考值 |
2.2 RIP与OSPF比较
2.2.1 相同点
- OSPF有两个版本ospf-1(还未正式发布就夭折)和ospf-2,RIP也是有两个版本RIP-1和RIP-2;
- OSPF-2与RIP-2一样是一种无类路由协议,支持VLSM、CIDR等特性;
- OSPF-2与RIP-2一样都支持认证功能;
- RIP封装在UDP报文中,OSPF封装在IP报文中,UDP和IP都是一种无连接、不可靠的通信方式;
- RIP和OSPF协议报文的安全传输都是靠协议本身;
2.2.2 不同点☆☆☆
-
OSPF是基于链路状态(Link-State)的路由协议,而RIP是基于距离矢量路与协议(二者的根本性差别);
-
RIP是一种“
传话
”的方式来传递路由有关的路由信息,OSPF是以一种“宣告
”的方式,OSPF的收敛时间明显小于RIP; -
RIP是一种“
嘈杂
”的路由协议,路由收敛后仍然周期性地持续地存在大量的RIP协议报文流量;OSPF是一种“安静
”的路由协议,路由收敛后,OSPF网络中只存在一小部分OSPF报文; -
RIP协议是以UDP作为其传输层协议的,RIP是封装在UDP报文中,端口号是520;
OSPF没有传输层协议
,OSPF是直接封装在IP报文中的; -
RIP报文有
两种
:请求报文和响应报文;OSPF有五种
:hello报文、数据库描述报文(DD)、链路状态请求报文(LSR)、链路状态更新报文(LSU)和链路状态确认报文(LSAck); -
RIP以“
跳数
”来作为路由开销的定义,OSPF理论上可以采取任何参量作文开销定义,最常见的就是采用链路带宽来定义路由开销; -
OSPF具有区域化结构,RIP没有;
-
OSPF网路中路由器有角色之分,不同路由器有着不同的功能和作用,RIP没有角色之分;
-
OSPF每台路由器都有独一无二的路由器身份号(Router-ID),在RIP网络中是没有Router-ID的;
3. OSPF区域化结构

OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域。一个OSPF网络可以划分成多个区域(Area)。如果一个OSPF网络只包含一个区域就称为单区域OSPF网络;如果一个OSPF网络包含了多个区域称为多区域OSPF网络。
- OSPF网络中,如果一台路由器所有接口都属于同一个区域,则这样的路由器被称为
内部路由器(Internal Router)
;- OSPF网络中如果一台路由器包含属于Area 0 的接口,则这样的路由器被称为
骨干路由器(Backbone Router)
;- OSPF网络中如果一台路由器的某些接口属于Area 0 ,其他接口属于别的区域,则这样的路由器被称为
区域边界路由器(ABR)
;- 非骨干区域之间通信必须要要通过骨干区域中转才能进行;
- 单区域只包含一个区域,这个区域必须是area 0;
-
划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量;
-
区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。**每个区域都有自己的LSDB,不同区域的LSDB是不同的。**路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了;
-
在OSPF网络中,每一个区域都有一个编号,称为Area-ID。Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域;
-
运行在区域之间的路由器叫做区域边界路由器
ABR(Area Boundary Router)
,它包含所有相连区域的LSDB。自治系统边界路由器ASBR(Autonomous System Boundary Router)
是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息;
4. OSPF支持的网络类型
OSPF能够支持的网络类型,指的是OSPF能够支持的二层网络的类型,OSPF能够支持广播网络、NBMA(Non-Boadcat Multi-Access)、点到点网络(P2P)和点到多点网络(P2MP)。
在广播网络和NBMA网络中
注意:OSPF路由器的某个接口的类型是与该接口直接相连的二层网络的类型是一致的。
比如,如果OSPF路由器某个接口连接的是一个广播网络,那么该接口就是一个广播接口;如果OSPF路由器某个接口连接的是一个P2P网络,那么该接口就是一个P2P网络接口;
4.1 P2P网络
- 仅两台路由互连。
- 支持广播、组播。
4.2 广播型网络
广播型网络支持两台及两台以上的设备接入同一共享链路且可以支持广播、组播报文的转发,是OSPF最常见的网络类型。
- 两台或两台以上的路由器通过共享介质互连。
- 支持广播、组播。
广播型网络的例子:通过以太网链路相连的路由器网络。
4.3 NBMA网络

- 两台或两台以上路由器通过
VC互连
。 - 不支持广播、组播☆☆☆。
与广播型网络不同的是NBMA网络默认不支持广播与组播报文的转发。
NBMA方式要求网络中的路由器组成全连接
在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要
手动配置
。NBMA(non-broadcast multiple access)型网络的例子:通过全互连的
帧中继链路
相连的路由器网络.
4.4 P2MP网络

- 多个点到点网络的集合。
- 支持广播、组播☆☆☆。
- 将一个非广播网络看成是一组P2P网络,这样的非广播网络便成为了一个点到多点(P2MP)网络。在P2MP网络上,每个路由器的OSPF邻居可以使用
反向地址解析协议(Inverse ARP)
来发现。- P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的转发。
- 没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。
5. 链路状态与LSA
OSPF是一种链路状态协议,所谓的链路状态,其实就是路由器的接口状态。OSPF核心思想就是,每台路由器都将自己的各个接口的接口状态(即链路状态)共享给其他路由器。
5.1 路由器接口状态
- 该接口的IP地址及掩码
- 该接口所属区域的Area-ID
- 该接口所属路由器的Router-ID
- 该接口的接口类型(也就是该接口的网络类型,如P2P,广播型)
- 该接口的接口开销(通常以接口带宽来定义接口开销,带宽越大,开销越小)
- 该接口所属的路由器的Router Priority(这个参数是用来选举DR与BDR的)
- 该接口所在二层网络中的DR
- 该接口所在二层网络中的BDR
- 该接口的HelloDeadInterval(接口发送Hello报文的间隔时间)
- 该接口的RouterDeadInterval(实效时间)
- 该接口所有邻居路由器
- 该接口认证类型
- 该接口秘钥等等
5.2 LSA (链路状态通告)
LSA(Link State Advertisement)
是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。LSA有十几种类型
;

所有的LSA都拥有相同的头部,关键字段的含义如下:
- LS age:此字段表示LSA已经
生存的时间
,单位是秒。 - LS type:此字段标识了LSA的格式和功能。常用的LSA类型有五种。
- Link State ID:此字段是该LSA所描述的那部分链路的标识,例如Router ID等。
- Advertising Router:此字段是产生此LSA的路由器的Router ID。
- LS sequence number:此字段用于检测旧的和重复的LSA。
Type-1 LSA(Router LSA);
Type-2 LSA(Network LSA);
Type-3 LSA(Network Summary LSA);
Type-4 LSA(ASBR Summary LSA);
Type-5 LSA(ASExternal LSA);
…
- 不同类型的LSA中所包含的链路状态的内容是不相同的;
- 不同类型的LSA的功能和作用也是不相同的;
- 不同类型的LSA通告范围也是不相同的;
- 不同角色的路由器能够产生的LSA的类型也是不同的;
5.2.1 Type-1 LSA
-
每台路由器都会产生。Type-1LSA用来描述路由器各个接口的接口类型、IP地址、开销值等信息。
-
一个Type-1LSA只能在产生它的Area 内泛洪,不能泛洪到其他Area。
5.2.2 Type-2 LSA
- 由DR产生。主要用来描述该DR所在的二层网络的网络掩码以及该二层网络中总共包含哪些路由器你。
- 一个Type-2LSA只能在产生他的Area内泛洪,不能泛洪到其他区域。
5.2.3 Type-3 LSA
- 由ABR产生。ABR路由器将自己所在的多个Area中的Type-1和Type-2 LSA转换成为Type-3 LSA,这些Type-3 LSA描述了Area之间的路由信息。
- Type-3可以泛洪到这个自治系统(整个OSPF网络)内部,但是不能泛洪到Totally Stub Area和Totally Not-So-Stubby Area。
5.2.4 Type-4 LSA
- 由ASBR产生所在的Area的ABR产生。用来描述去往ASBR的路由信息。
- Type-4可以泛洪到整个自治系统(整个OSPF网络)内部,但是不能泛洪到Stub Area、Totally Stub Area、NOt-So-Stubby Area和Totally NOt-So-Stubby Area
5.2.5 Type-5 LSA
- 由ASBR产生。用来描述去往自治系统外部的路由。
- Type-5 LSA可以泛洪到整个自治系统(整个OSPF网络)内部,但是不能泛洪到Stub Area、Totally Stub Area、NOt-So-Stubby Area和Totally NOt-So-Stubby Area
6. OSPF报文类型
OSPF的协议报文是直接封装在IP报文中
的,IP报文头部中的协议字段必须为89
。
OSPF 本身5种类型,分别是Hello报文、DD报文、LSR报文、LSU报文、LSAck报文,各种不同类型的LSA其实只是包含在LSU报文中
。
其他类型的OSPF报文中虽然没有携带LSA,但是仍然会携带一些链路状态信息,当然也会携带一些其他的信息。
Type | 报文名称 | 报文功能 |
---|---|---|
1 | Hello | 发现和维护邻居关系 |
2 | Database Description | 交互链路状态数据库摘要 |
3 | Link State Request | 请求特定的链路状态信息 |
4 | Link State Update | 发送详细的链路状态信息 |
5 | Link State Ack | 发送确认报文 |
6.1OSPF协议报文头部

- Version :对于当前所使用的OSPFv2,该字段的值为2。
- Type:OSPF报文类型。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- Auth Type:为
0时表示不认证
;为1时表示简单的明文密码认证
;为2时表示加密(MD5)认证
。- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
6.2 路由器接口hello报文信息
Hello报文的作用:
- 邻居发现:自动发现邻居路由器,并建立相邻关系,通过
组播地址:224.0.0.5
发送给ALLSPFRouters,通告两台路由器建立相邻关系所必需统一的参数 - 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过
Keepalive机制
,检测邻居运行状态。
- OSPF的版本号
- 该接口所属的路由器的Router-ID
- 该接口所属的区域ID
- 该接口的认证类型
- 该接口的秘钥
- 该接口的IP地址和掩码
- 该接口所属的路由器的Router Priority(这个参数是用来选举DR与BDR的)
- 该接口所在二层网络中的DR
- 该接口所在二层网络中的BDR
- 该接口的HelloDeadInterval(接口发送Hello报文的间隔时间)
- 该接口的RouterDeadInterval(实效时间)
- 该接口所有邻居路由器
7.邻居关系与邻接关系
在RIP网络中,如果路由器A与路由器B位于同一个二层网络,那么就说路由器A与路由器B是“邻居关系”;
在OSPF网络中,如果路由器A与路由器B位于同一个二层网络,只能说路由器A与路由器B“相邻”,不能说是“邻居关系”。相邻不等于邻居关系更不等于“邻接关系”
运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系
。
7.1 邻居关系
OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文
用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系,状态到达2-way 即可称为建立了邻居关系。如果参数不一致,不能形成邻居关系。
7.1.1 邻居发现
Hello报文用来发现和维持OSPF邻居关系
Hello报文的作用:
- 邻居发现:自动发现邻居路由器。
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过
Keepalive机制
,检测邻居运行状态。

- Network Mask:发送Hello报文的接口的网络掩码。
- Hello Interval:发送Hello报文的
时间间隔
,单位为秒。 - Options:标识发送此报文的OSPF路由器所支持的可选功能。
- Router Priority:发送Hello报文的
接口的Router Priority
,用于选举DR和BDR。 - Router Dead Interval:
失效时间
。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍Hello Interval。 - Designated Router:发送Hello报文的路由器所选举出的
DR的IP地址
。如果设置为0.0.0.0,表示未选举DR路由器。 - Backup Designated Router:发送Hello报文的路由器所选举出的
BDR的IP地址
。如果设置为0.0.0.0,表示未选举BDR。 - Neighbor:
邻居的Router ID列表
,表示本路由器已经从这些邻居收到了合法的Hello报文。
7.1.2 邻居关系建立

状态含义:
状态 | 含义 |
---|---|
Down | 这是邻居的初始状态,表示没有从邻居收到任何信息 |
Init | 在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系 。 |
2- Way | 在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信 。 |
邻居建立过程如下:
- RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中
邻居列表为空
,此时状态为Down
,RTB收到RTA的这个Hello报文,状态置为Init。 - RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为
Init
。 - RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为
2-way
。 - RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为
2-way
。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5
)。
对于不支持组播的网络可以通过手动配置实现邻居的发现与维护。
7.2 邻接关系
形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并同步LSDB后,才形成真正意义上的邻接关系。
7.2.1 邻接关系的建立(LSDB同步)


状态含义:
状态 | 含义 |
---|---|
ExStart | 邻居状态变成此状态以后,路由器开始向邻居发送DD报文 。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。 |
Exchange | 在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。 |
Loading | 在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。 |
Full | LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。 |
LSDB同步过程如下:
- RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为
ExStart
后,RTA会发送第一个DD报文
。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。 - 当RTB的邻居状态变为
ExStart
后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件
,并将邻居状态从ExStart变为Exchange。 - 当RTA的邻居状态变为
Exchange
后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件
,并将邻居状态从ExStart变为Exchange
。 - 当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。
- 虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个
Exchange-Done事件
,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。 - RTA开始向RTB发送
LSR报文
,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。 - RTB向RTA发送
LSU报文
,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。 - RTA向RTB发送
LSAck报文
,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系
。
7.2.2 P2P网络和P2MP网络
- 如果两台邻居路由器之间的二层网络是P2P网络或P2MP网络,则这两台邻居路由器之间一定会进入LSDB同步的过程;
- 当这两台路由器之间完成了LSDB同步的过程说明他们之间建立了邻接关系,彼此之间成为了对方的
邻接路由器
; - LSDB同步的过程是为了保证参与LSDB同步的路由器最终能够拥有
完全一样的LSDB
。 - LSDB同步是交互
DD报文,LSR报文和LSU报文
来实现的;
7.2.3 Broadcast网络和NBMA网络
-
如果两台邻居路由器之间的二层网络是P2P网络或P2MP网络,并且其中一台路由器是这个而层网络的DR或BDR,那么这两台邻居路由器一定会进入彼此之间的LSDB同步的过程;
-
当这两台路由器之间完成了LSDB同步之后,他们之间建立了邻接关系;
-
如果这两台路由器都不是这个二层网络的DR或BDR,那么这两台路由器就不会进入彼此之间的LSDB的同步过程,也就是说,彼此之间是不可能建立起邻居关系;
-
一个OSPF网络中的邻接关系一定是小于等于邻居关系的;
7.3 OSPF邻居关系状态机

- Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。
- Attempt:此状态
只在NBMA网络上存在
,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。 - Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
- 2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
- 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
- 1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
- ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
- Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
- Loading:相互发送LS Request报文请求LSA,发送LS Update通告LSA。
- Full:两台路由器的LSDB已经同步。
8. DR与BDR
在P2P或P2MP网络中完全不存在DR与BDR的概念,DR与BDR只适用于Broadcast网络或NBMA网络。
网络类型 | 是否和邻居建立邻接关系 |
---|---|
P2P / P2MP | 是 |
Broadcast / NBMA | DR与BDR 、DRother建立邻接关系——BDR与DR 、DRother建立邻接关系 ——DRother之间只建立邻居关系 |
8.1 DR与BDR的作用
- 每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR。
- DR和BDR可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以
节省带宽
,降低对路由器处理能力的压力。在没有DR的广播网络上,邻接关系的数量可以根据公式n(n-1)/2计算出,n代表参与OSPF的路由器接口的数量。 - BDR作用:当DR发生故障的时候,BDR能够迅速代替DR的角色;
8.2 DR与BDR的选举
- 在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。
- 优先级取值范围为
0-255
,值越高越优先。缺省情况下,接口优先级为1
。**如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。**如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。(越大越优先) - BDR与DR的选举规则是一样的,同一个网络中同一台路由器 不会即作为DR又作为BDR;
- DR与BDR具有非抢占性。为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR;
- 实质上,DR与BDR只是路由器的某个接口的属性,而不是路由器本身的属性;
思维导图:

九、NAT 网络地址转换技术
网络地址转换技术也称为NAT(Network Address Translation)
技术,他的基本作用就是实现私网IP与公网IP地址之间的转换。
公网:就是公有的IP地址的网络,公网中是绝对不能使用私有IP地址的。
私网:就是使用私有IP地址的网络。在私网中,各个网络接口的 IP地址必须是私有IP地址,但是在有些情况下,私网出现的IP报文,其目的IP地址或源IP地址可以是公有IP地址。
NAT优缺点:
优点 | 缺点 |
---|---|
节省IP地址空间 | 增加转发延迟 |
解决IP地址重叠问题 | 丧失端到端的寻址能力 |
增加网络的连入Internet的弹性 | 某些应用不支持NAT |
当网络变更的时候减少更改ip重编址的麻烦 | 需要一定的内存空间支持动态存储NAT表项 |
对外隐藏内部地址,增加网络安全性 | 需要耗费一定CPU资源进行NAT操作 |
NAT术语:
术语 | 解释 |
---|---|
内部本地 | 转换之前内部源地址的名字 |
外部本地 | 转换之前目标主机的名字 |
内部全局 | 转换之后内部主机的名字 |
外部全局 | 转换之后外部目标主机的名字 |

1. 静态NAT
- 静态NAT实现了私有地址和公有地址的一对一映射。
- 一个公网IP只会分配给唯一且固定的内网主机。

在本示例中,源地址为192.168.1.1的报文需要发往公网地址100.1.1.1。在网关RTA上配置了一个私网地址192.168.1.1到公网地址200.10.10.1的映射。当网关收到主机A发送的数据包后,会先将报文中的源地址192.168.1.1转换为200.10.10.1,然后转发报文到目的设备。目的设备回复的报文目的地址是200.10.10.1。当网关收到回复报文后,也会执行静态地址转换,将200.10.10.1转换成192.168.1.1,然后转发报文到主机A。和主机A在同一个网络中其他主机,如主机B,访问公网的过程也需要网关RTA做静态NAT转换。
2. 动态NAT
- 动态NAT基于
地址池
来实现私有地址和公有地址的转换。 - 动态NAT地址池中的地址用尽以后,只能等待被占用的公用IP被释放后,其他主机才能使用它来访问公网。

本示例中,当内部主机A和主机B需要与公网中的目的主机通信时,网关RTA会从配置的公网地址池中选择一个未使用的公网地址与之做
映射
。每台主机都会分配到地址池中的一个唯一地址。当不需要此连接时,对应的地址映射将会被删除,公网地址也会被恢复到地址池中待用。当网关收到回复报文后,会根据之前的映射再次进行转换之后转发给对应主机。
3. NAPT(端口复用)
- 网络地址端口转换NAPT允许多个内部地址映射到同一个公有地址的不同端口。
- 理想状况下,一个单一的IP地址可以使用的端口数为4000个

本例中,RTA收到一个私网主机发送的报文,源IP地址是192.168.1.1,源端口号是1025,目的IP地址是100.1.1.1,目的端口是80。RTA会从配置的公网地址池中选择一个空闲的公网IP地址和端口号,并建立相应的NAPT表项。这些NAPT表项指定了报文的私网IP地址和端口号与公网IP地址和端口号的映射关系。之后,RTA将报文的源IP地址和端口号转换成公网地址200.10.10.1和端口号2843,并转发报文到公网。当网关RTA收到回复报文后,会根据之前的映射表再次进行转换之后转发给主机A。主机B同理。
4. NAT服务器
- 通过配置NAT服务器,可以使外网用户访问内网服务器
- NAT在使内网用户访问公网的同时,也屏蔽了公网用户访问私网主机的需求。当一个私网需要向公网用户提供Web和SFTP服务时,私网中的服务器必须随时可供公网用户访问。
- NAT服务器可以实现这个需求,但是需要配置服务器私网IP地址和端口号转换为公网IP地址和端口号并发布出去。路由器在收到一个公网主机的请求报文后,根据报文的目的IP地址和端口号查询地址转换表项。路由器根据匹配的地址转换表项,将报文的目的IP地址和端口号转换成私网IP地址和端口号,并转发报文到私网中的服务器。

本例中,主机C需要访问私网服务器,发送报文的目的IP地址是200.10.10.1,目的端口号是80。RTA收到此报文后会查找地址转换表项,并将目的IP地址转换成192.168.1.1,
目的端口号保持不变
。服务器收到报文后会进行响应,RTA收到私网服务器发来的响应报文后,根据报文的源IP地址192.168.1.1和端口号80查询地址转换表项。然后,路由器根据匹配的地址转换表项,将报文的源IP地址和端口号转换成公网IP地址200.10.10.1和端口号80,并转发报文到目的公网主机。
5. NAT过程实验操作解释

公有地址资源池 |
---|
200.24.5.1 |
200.24.5.2 |
200.24.5.3 |
200.24.5.4 |
200.24.5.5 |
200.24.5.6 |
动态地址及端口号映射:
私有地址:端口号 | 公有地址:端口号 |
---|---|
192.168.1.1:1031 | 200.24.5.1:5531 |
192.168.1.2:1540 | 200.24.5.1:5532 |
报文X1 | 报文X2 |
---|---|
源IP地址:192.168.1.1 | 源IP地址:200.24.5.1 |
源端口号:1031 | 源端口号:5531 |
目的IP地址:211.100.7.34 | 目的IP地址:211.100.7.34 |
目的端口号:Z1 | 目的端口号:Z1 |
报文Y1 | 报文Y2 |
---|---|
源IP地址:211.100.7.34 | 源IP地址:211.100.7.34 |
源端口号:Z2 | 源端口号:5531 |
目的IP地址:200.24.5.1 | 目的IP地址:192.168.1.1 |
目的端口号:5531 | 目的端口号:1031 |
报文U1 | 报文U2 |
---|---|
源IP地址:192.168.1.2 | 源IP地址:200.24.5.1 |
源端口号:1540 | 源端口号:5532 |
目的IP地址:211.100.7.34 | 目的IP地址:211.100.7.34 |
目的端口号:Z3 | 目的端口号:Z3 |
报文V1 | 报文V2 |
---|---|
源IP地址:211.100.7.34 | 源IP地址:211.100.7.34 |
源端口号:Z4 | 源端口号:Z4 |
目的IP地址:200.24.5.1 | 目的IP地址:192.168.1.2 |
目的端口号:5532 | 目的端口号:1540 |
过程:
-
PC1 向Internet发起访问请求,发送报文为X。源IP地址:192.168.1.1,源端口号:1031,目的IP地址211.100.7.34,目的端口号Z1。
-
当X1达到R1的时候,NAPT会在公有地址资源池选中了IP地址200.24.5.1,并根据某种规则确定出一个端口5531,然后在动态地址及端口映射表中创建192.168.1.1:1031与200.24.5.1:5531 映射表项;
-
根据这个表项NAPT将源IP地址:192.168.1.1,源端口号:1031,替换成200.24.5.1:5531,从而得到一个新的IP报文X2,并发送到Internet;
-
服务器向PC1 返回一个IP报文Y1,源IP地址:211.100.7.34,源端口号:Z2,目的IP地址:200.24.5.1,目的端口号:5531;
-
Y1进入R2后,NAPT会在动态地址映射表中找到200.24.5.1:5531对应的表项192.168.1.1:1031,进行替换得到一个新的报文Y2,R1将Y2发到私网。
PC2访问服务器与服务器访问PC2同理
。
这篇关于翔鹰计划第一、二周笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!