git new content to the book
158
IPv6地址空间.md
Normal file
@ -0,0 +1,158 @@
|
||||
在IPv6地址空间中,当前所用到的主要有4段(分别是全球单播地址、本地唯一单播地址、链路范围单播地址及多播地址),其它各段为IETF保留。
|
||||
|
||||
+ 用到的4个地址段
|
||||
|
||||
- `2000::/3`
|
||||
|
||||
`2000::` - `3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**全球单播地址空间,Global Unicast Address Space**
|
||||
|
||||
- `fc00::/7`
|
||||
|
||||
`fc00::` - `fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**本地唯一单播地址, Unique Local Unicast Address Space**
|
||||
|
||||
- `fe80::/10`
|
||||
|
||||
`fe80::` - `febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**链路上的单播地址空间, Link Scoped Unicast Address Space**
|
||||
|
||||
- `fec0::/10`
|
||||
|
||||
`fec0::` - `feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**。 [RFC38979](http://www.iana.org/go/rfc3879)中弃用,先前的站点本地范围地址前缀。
|
||||
|
||||
|
||||
- `ff00::/8`
|
||||
|
||||
`ff00::` - `ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**多播地址空间, Multicast**, 该段中由IANA分配的地址在这里进行了登记:[http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml](http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml)
|
||||
|
||||
+ 全部IPv6地址空间
|
||||
|
||||
- `::/8`
|
||||
|
||||
`::` - `00ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `0100::/8`
|
||||
|
||||
`0100::` - `01ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `0200::/7`
|
||||
|
||||
`0200::` - `03ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `0400::/6`
|
||||
|
||||
`0400::` - `07ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `0800::/5`
|
||||
|
||||
`0800::` - `0fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `1000::/4`
|
||||
|
||||
`1000::` - `1fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `2000::/3`
|
||||
|
||||
`2000::` - `3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**全球单播地址空间,Global Unicast Address Space**
|
||||
|
||||
- `4000::/3`
|
||||
|
||||
`4000::` - `5fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `6000::/3`
|
||||
|
||||
`6000::` - `7fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `8000::/3`
|
||||
|
||||
`8000::` - `9fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `a000::/3`
|
||||
|
||||
`a000::` - `bfff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `c000::/3`
|
||||
|
||||
`c000::` - `dfff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `e000::/4`
|
||||
|
||||
`e000::` - `efff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `f000::/5`
|
||||
|
||||
`f000::` - `f7ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `f800::/6`
|
||||
|
||||
`f800::` - `fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `fc00::/7`
|
||||
|
||||
`fc00::` - `fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**本地唯一单播地址, Unique Local Unicast Address Space**
|
||||
|
||||
- `fe00::/9`
|
||||
|
||||
`fe00::` - `fe7f:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**
|
||||
|
||||
- `fe80::/10`
|
||||
|
||||
`fe80::` - `febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**链路上的单播地址空间, Link Scoped Unicast Address Space**
|
||||
|
||||
- `fec0::/10`
|
||||
|
||||
`fec0::` - `feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**为IETF所保留, Reserved by IETF**。 [RFC38979](http://www.iana.org/go/rfc3879)中弃用,先前的站点本地范围地址前缀。
|
||||
|
||||
- `ff00::/8`
|
||||
|
||||
`ff00::` - `ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`
|
||||
|
||||
**多播地址空间, Multicast**
|
||||
|
||||
来源: [http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml](http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml)
|
@ -1,39 +1,41 @@
|
||||
# CSMA/CD, 交换和虚拟局域网
|
||||
# 第二天
|
||||
|
||||
__ CSMA/CD, Switching, and VLANs __
|
||||
**CSMA/CD, 交换和虚拟局域网**
|
||||
|
||||
**CSMA/CD, Switching, and VLANs**
|
||||
|
||||
## 第二天的任务
|
||||
|
||||
* 阅读今天的课文
|
||||
* 复习昨天的课文
|
||||
* 阅读 ICND1 记诵指南
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 阅读 ICND1 记诵指南
|
||||
|
||||
|
||||
思科工程师混饭吃的手艺就是安装、配置和调试(troubleshooting)交换机。而这又恰恰是这些工程师们不那么擅长的事情,这么说有些不思议吧。可能有些人靠的是交换机本身的即插即用能力,或是在问题出现后直面解决。这样的“凭感觉试试看”的风格,在出现交换相关的问题时,就会心态事与愿违了。(This "fly by the seat of your pants" mentality backfires for many enigeers when there is a switching-related issue.)
|
||||
|
||||
__我建议你在学习本书时,先粗略地过一遍,然后在回头读几次,每次都将那些重点做一下笔记或是划一下重点。__
|
||||
**我建议你在学习本书时,先粗略地过一遍,然后在回头读几次,每次都将那些重点做一下笔记或是划一下重点。**
|
||||
|
||||
今天你将学到以下内容:
|
||||
|
||||
* CSMA/CD
|
||||
* 虚拟局域网,VLANs
|
||||
* 配置 VLANs
|
||||
* VLANs 故障排除
|
||||
+ CSMA/CD
|
||||
+ 虚拟局域网,VLANs
|
||||
+ 配置 VLANs
|
||||
+ VLANs 故障排除
|
||||
|
||||
此模块涵盖 CCNA 大纲要求的以下方面:
|
||||
|
||||
* 掌握以太网络中用到的技术及介质访问控制方法
|
||||
* 理解基本的交换概念及思科交换机操作:
|
||||
* 冲突域
|
||||
* 广播域
|
||||
* 交换的不同类型
|
||||
* CAM 表
|
||||
* 配置并验证初始交换机配置,含远程访问管理
|
||||
* 执行基本交换机设置的那些思科 IOS 命令
|
||||
* 使用如 ping、Telnet 以及 SSH 等基本工具程序来验证网络状态以及交换机的运作
|
||||
* 描述 VLANs 是如何创建出逻辑独立网络,以及这些网络之间的路由需求
|
||||
* 解释网络分段及基本的流量管理概念
|
||||
* 配置和验证 VLANs
|
||||
+ 掌握以太网络中用到的技术及介质访问控制方法
|
||||
+ 理解基本的交换概念及思科交换机操作:
|
||||
- 冲突域
|
||||
- 广播域
|
||||
- 交换的不同类型
|
||||
- CAM 表
|
||||
+ 配置并验证初始交换机配置,含远程访问管理
|
||||
- 执行基本交换机设置的那些思科 IOS 命令
|
||||
+ 使用如 ping、Telnet 以及 SSH 等基本工具程序来验证网络状态以及交换机的运作
|
||||
+ 描述 VLANs 是如何创建出逻辑独立网络,以及这些网络之间的路由需求
|
||||
- 解释网络分段及基本的流量管理概念
|
||||
+ 配置和验证 VLANs
|
||||
|
||||
## 交换机基础知识
|
||||
|
||||
@ -42,12 +44,14 @@ __我建议你在学习本书时,先粗略地过一遍,然后在回头读几
|
||||
带有冲突检测载波侦听,多路复用(Carrier Sense, Multiple Access with Collision Detection, CSMA/CD) 一词可以分解为以下几个部分,“载波侦听” 的意思是线路为设备所侦听,以确定是否有信号在其上传输。如果线路正在使用中,那么以太网帧是不能发送出去的。“多路复用” 的意思是网段上有多余一台的设备在使用线缆。最后的“冲突检测” 是指协议运行着一套确定线路上的太网帧是否因为遇到另一个帧而已经损坏的算法。从下图 2.1 你可以看到交换机端口在监听着线路。
|
||||
|
||||

|
||||
图 2.1 -- 端口监听着线路
|
||||
|
||||
*图 2.1 -- 端口监听着线路*
|
||||
|
||||
如果线路上出现了冲突,则监听设备会发出一个拥塞信号,以通知其它设备发生了冲突,它们就不会尝试往线路上发送数据了。此时,协议算法运行起来,产生一个随机数时间间隔,在以此间隔后重传。在线路清空前,设备不会发送以太网帧。Wikipedia 上是这样解释该过程的:
|
||||
|
||||

|
||||
图 2.2 -- CSMA/CD 过程
|
||||
|
||||
*图 2.2 -- CSMA/CD 过程*
|
||||
|
||||
> Farai 指出 -- “需要注意,现代交换机使用的是全双工连接交换机,因此而不会用到 CSMA/CD。但它仍然支持该技术,而这完全是为了向后兼容性。”
|
||||
|
||||
@ -56,17 +60,20 @@ __我建议你在学习本书时,先粗略地过一遍,然后在回头读几
|
||||
网络集线器的一个缺点是在线路上发生冲突时,损坏的帧会发送到所有连接的设备。现代交换机的优势之一就是交换机的每个端口都是作为一个冲突域。在冲突发生时(全双工下是不可能出现的),损坏的帧不会通过接口。图 2.3 展示了一台交换机增加到使用两台集线器的小型网络上的情形。交换机将该网络分解成两个冲突域。
|
||||
|
||||

|
||||
图 2.3 -- 一台交换机创建出两个冲突域
|
||||
|
||||
思科通常会在考试中以提问交换机是否减少冲突域数量的方式引诱你犯错。匆忙之下,你可能受导向说交换机会减少冲突域数量,但实际情况是相反的,交换机会增加冲突域的数量,而这是好事。交换机确实增加了冲突域的数量。因为集线器受限于其所采用的技术,而只能工作于半双工下,它就显得相当无用了。图 2.4 中,__4 台 PC 连接到交换机上,产生 4 个冲突域__。每台 PC 都工作在全双工下,能够完全用上 100Mbps 的带宽。
|
||||
*图 2.3 -- 一台交换机创建出两个冲突域*
|
||||
|
||||
思科通常会在考试中以提问交换机是否减少冲突域数量的方式引诱你犯错。匆忙之下,你可能受导向说交换机会减少冲突域数量,但实际情况是相反的,交换机会增加冲突域的数量,而这是好事。交换机确实增加了冲突域的数量。因为集线器受限于其所采用的技术,而只能工作于半双工下,它就显得相当无用了。图 2.4 中,**4 台 PC 连接到交换机上,产生 4 个冲突域**。每台 PC 都工作在全双工下,能够完全用上 100Mbps 的带宽。
|
||||
|
||||

|
||||
图 2.4 -- 四个冲突域
|
||||
|
||||
__交换机(这里说的是二层交换机)不会隔离广播域,路由器会__。如果交换机收到带有广播目的地址的以太网帧,就就转发给所有端口,不管该帧是从哪个端口收到的。需要一台路由器来隔离广播域。图 2.5 展示了使用交换机/网桥以及一台路由器的小型网络,用以说明冲突域是如何隔离的。
|
||||
*图 2.4 -- 四个冲突域*
|
||||
|
||||
**交换机(这里说的是二层交换机)不会隔离广播域,路由器会**。如果交换机收到带有广播目的地址的以太网帧,就就转发给所有端口,不管该帧是从哪个端口收到的。需要一台路由器来隔离广播域。图 2.5 展示了使用交换机/网桥以及一台路由器的小型网络,用以说明冲突域是如何隔离的。
|
||||
|
||||

|
||||
图 2.5 -- 广播域和冲突域
|
||||
|
||||
*图 2.5 -- 广播域和冲突域*
|
||||
|
||||
### 自动协商,Auto-negotiation
|
||||
|
||||
@ -74,17 +81,17 @@ __交换机(这里说的是二层交换机)不会隔离广播域,路由器
|
||||
|
||||
IEEE 将自动协商作为解决此问题的方案,该技术让设备在传输流量前,就双工和速率上达成一致。速率设置为低速设备的速率。在下面的输出中,速率可被手动设定为 10Mbps 或 100Mbps, 或者设定为 auto-negotiation。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch(config)#int f1/0/1
|
||||
Switch(config-if)#speed ?
|
||||
10 Force 10 Mbps operation
|
||||
100 Force 100 Mbps operation
|
||||
auto Enable AUTO speed configuration
|
||||
```
|
||||
</pre>
|
||||
|
||||
该设置可用命令 `show interface x` 进行查看。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#show int f1/0/1
|
||||
FastEthernet1/0/1 is down, line protocol is down (notconnect)
|
||||
Hardware is FastEthernet, address is 001e.13da.c003 (bia 001e.13da.c003)
|
||||
@ -93,44 +100,46 @@ FastEthernet1/0/1 is down, line protocol is down (notconnect)
|
||||
Encapsulation ARPA, Loopback not set
|
||||
Keepalive set (10 sec)
|
||||
Auto-duplex, Auto-speed, media type is 10/100BaseTX
|
||||
```
|
||||
</pre>
|
||||
|
||||
请务必牢记,尽管有如此设置,__auto-negotiation 仍可能会引起问题__。这就是为何许多生产性网络仍然坚持将端口直接配置成 100/full 或者千兆以太网的 1000/full。思科这样解释的:
|
||||
请务必牢记,尽管有如此设置,**auto-negotiation 仍可能会引起问题**。这就是为何许多生产性网络仍然坚持将端口直接配置成 100/full 或者千兆以太网的 1000/full。思科这样解释的:
|
||||
|
||||
> 不合格的应用(nonconforming implementation)、硬件不兼容或者软件缺陷(software defects)三种原因,可能会导致各种自动协商问题。在网卡或厂商交换机与 IEEE 802.3u 规范不完全一致时,问题就会发生。厂商特定的一些高级特性,比如自动正负极性或线缆完整性(auto-polarity or cable integrity)等在 IEEE 802.3u 的 10/100Mbps 自动协商标准中没有描述的那些特性,同样会导致硬件的不兼容或其它问题。([Cisco.com](http://www.Cisco.com))
|
||||
|
||||
### 帧交换,Switching Frames
|
||||
|
||||
__交换机是为交换帧而生(也就是说,将来自某进入接口的帧传输到正确的出口接口)__。广播帧被交换出所有接口(除了接收到广播帧的那个接口),带有不明目的地(目的地址不在 MAC 表中)的那些帧也一样,交换机执行下面三个动作:
|
||||
**交换机是为交换帧而生(也就是说,将来自某进入接口的帧传输到正确的出口接口)**。广播帧被交换出所有接口(除了接收到广播帧的那个接口),带有不明目的地(目的地址不在 MAC 表中)的那些帧也一样,交换机执行下面三个动作:
|
||||
|
||||
* 根据目的 MAC 地址,进行帧转发或过滤(forwarding or filtering<dropping>)
|
||||
* 从进来的帧学习 MAC 地址
|
||||
* 使用 STP 协议来阻止二层环回的发生(STP 在 ICND2 第 31 天学习)
|
||||
+ 根据目的 MAC 地址,进行帧转发或过滤(forwarding or filtering<dropping>)
|
||||
+ 从进来的帧学习 MAC 地址
|
||||
+ 使用 STP 协议来阻止二层环回的发生(STP 在 ICND2 第 31 天学习)
|
||||
|
||||
图 2.6 中,交换机将来自主机 A (F0/1)以主机 C 为目的地的帧正确转发出 F0/3, 而阻止其离开接口 F0/2。
|
||||
|
||||

|
||||
图 2.6 -- 帧过滤
|
||||
|
||||
如目的地址不在 MAC 地址表中,交换机将该帧泛洪(flooding)至除它收到该帧的那个接口外的所有接口上。__交换机也会存储那些连接在另一台交换机上的设备的 MAC 地址;不过在地址表中它们对应的接口名称会是同一个,这样下来多个 MAC 地址与一个同样的出口接口对应,列出在 MAC 地址表中。这是一种找出网络上你不熟悉设备的方法__。图 2.7 用以说明这个概念。
|
||||
*图 2.6 -- 帧过滤*
|
||||
|
||||
如目的地址不在 MAC 地址表中,交换机将该帧泛洪(flooding)至除它收到该帧的那个接口外的所有接口上。**交换机也会存储那些连接在另一台交换机上的设备的 MAC 地址;不过在地址表中它们对应的接口名称会是同一个,这样下来多个 MAC 地址与一个同样的出口接口对应,列出在 MAC 地址表中。这是一种找出网络上你不熟悉设备的方法**。图 2.7 用以说明这个概念。
|
||||
|
||||

|
||||
图 2.7 -- 同一接口上的多 MAC 地址
|
||||
|
||||
流量传输中的任何延时(delay),都被称为传输延迟(latency)。__依据你所希望的在流量传输前对帧的检查程度,思科交换机提供了三种流量交换的方式__。对帧的检查越多,引入到交换机的延迟就越多。三种可供选择的交换模式(switching modes)为:
|
||||
*图 2.7 -- 同一接口上的多 MAC 地址*
|
||||
|
||||
* 直通模式,Cut-through
|
||||
* 存储转发模式(交换机默认),Store-and-forward
|
||||
* Fragment-free(改进的直通模式)
|
||||
流量传输中的任何延时(delay),都被称为传输延迟(latency)。**依据你所希望的在流量传输前对帧的检查程度,思科交换机提供了三种流量交换的方式**。对帧的检查越多,引入到交换机的延迟就越多。三种可供选择的交换模式(switching modes)为:
|
||||
|
||||
__直通模式__
|
||||
+ 直通模式,Cut-through
|
||||
+ 存储转发模式(交换机默认),Store-and-forward
|
||||
+ Fragment-free(改进的直通模式)
|
||||
|
||||
**直通模式**
|
||||
|
||||
直通模式交换是最快交换方式,它有最低的延迟。进入交换机的帧仅读至目的地址,便做出转发决定。在获知目的地址后,交换机马上检查 CAM 表,以找到正确的端口来转发出该帧并马上发出。因为没有错误检查,此方式才能提供最低的延迟。代价是交换机会转发任何带有错误的帧。
|
||||
|
||||
使用一个比方来说明交换机模式是最好不过了。你作为某夜店的保安,被要求每个进入夜店的人都要有一个带照片的出入卡 -- 却并没要求你去查看照片是否与那个人一致,只是出入卡要有就行。这种方式下,人们必定能快速进入夜店了。这就是直通模式的工作原理。
|
||||
|
||||
|
||||
__存储转发模式__
|
||||
**存储转发模式**
|
||||
|
||||
交换机读取整个帧,并将其复制到它的缓冲区。对该帧执行一次循环冗余校验(cyclic redundancy check, CRC)以检查其存在的任何错误。如有发现错误,该帧就被丢弃。相反,就检查交换表,并转发该帧。存储转发模式确保帧至少有 64 字节大,且不大于 1518 字节。若小于 64 字节或大于 1518 字节,交换机就会丢弃帧。
|
||||
|
||||
@ -139,7 +148,7 @@ __存储转发模式__
|
||||
|
||||
三种交换方式中有着最高延迟的就是存储转发交换,也是 2900 系列交换机默认的交换方式。
|
||||
|
||||
__Fragment-free(修订的直通模/Runt-free 模式)__
|
||||
**Fragment-free(修订的直通模/Runt-free 模式)**
|
||||
|
||||
因为直通交换不检查错误,而存储转发模式又耗时太长,我们需要一种又快又可靠的方式。使用夜店保安的例子,设想你被要求确保每个人都有出入卡同时照片又要吻合。此方式下,你确保每个人都是其宣称的那个人,但你不必记下他们的所有信息。在交换中,这是通过采用 fragment-free 交换方式实现的,低端的(lower-level)思科交换机默认配置为此种模式。
|
||||
|
||||
@ -154,34 +163,37 @@ Fragment-free 交换是直通交换的一个修改变种。检查帧的前 64
|
||||
在交换机发明前,网络上的所有设备都会接收到来自其它设备的数据。一旦探测到线路上有一个数据帧,PC 就不得不停下来查看其头部,看看自己是不是数据帧的接收者。设想一下网络上每分钟都有上千个帧吧。所有设备很快就被折腾到挂起。图 2.8 展示了网络上的所有设备;注意因为是通过仅转发的集线器连接在一起,它们都不得不共享同一带宽。
|
||||
|
||||

|
||||
图 2.8 -- 每台设备都听着其它设备
|
||||
|
||||
__集线器的问题__
|
||||
*图 2.8 -- 每台设备都听着其它设备*
|
||||
|
||||
之前我曾提到__集线器仅是简单的多端口中继器__(见 2.9)。它们接收传入的信号,进行清理,然后在插线了的端口上发出。它们同时创建出一个巨大的冲突域。
|
||||
**集线器的问题**
|
||||
|
||||
之前我曾提到**集线器仅是简单的多端口中继器**(见 2.9)。它们接收传入的信号,进行清理,然后在插线了的端口上发出。它们同时创建出一个巨大的冲突域。
|
||||
|
||||

|
||||
图 2.9 -- 集线器在每个端口上都发送帧
|
||||
|
||||
*图 2.9 -- 集线器在每个端口上都发送帧*
|
||||
|
||||
集线器是愚蠢(dumb)设备。它们没有 MAC 地址存储机制,所以在设备 A 每次往设备 B 发送一个帧时,它都会往每个端口发送。交换机就不一样,有一块叫做专用集成电路(application-specific integrated circuit, AISC)的存储芯片,该芯片会建立一个设备端口表(图 2.10)。这个表保存在内容可寻址存储器(Content Addressable Memory, CAM)中。
|
||||
|
||||

|
||||
图 2.10 -- 交换机建立起一张 MAC 地址表
|
||||
|
||||
__在首次启动时,交换机并未在其 CAM 表(思科考试又此表称为 MAC 地址表)中存储任何地址__。一有帧开始传输,该表就建立起来。如果在指定时间过后没有帧从某个端口传送,这条记录就会过期。下面的输出表明,至今仍没有帧在交换机上通过。
|
||||
*图 2.10 -- 交换机建立起一张 MAC 地址表*
|
||||
|
||||
```
|
||||
**在首次启动时,交换机并未在其 CAM 表(思科考试又此表称为 MAC 地址表)中存储任何地址**。一有帧开始传输,该表就建立起来。如果在指定时间过后没有帧从某个端口传送,这条记录就会过期。下面的输出表明,至今仍没有帧在交换机上通过。
|
||||
|
||||
<pre>
|
||||
Switch#show mac-address-table
|
||||
Mac Address Table
|
||||
-------------------------------------------
|
||||
Vlan Mac Address Type Ports
|
||||
---- ----------- -------- -----
|
||||
Switch#
|
||||
```
|
||||
</pre>
|
||||
|
||||
交换机中没有记录,不过当你从一台路由器 ping 另一台时(两台都连接上交换机),表格条目建立起来。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Router#ping 192.168.1.2
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
@ -194,11 +206,11 @@ Vlan Mac Address Type Ports
|
||||
---- ----------- -------- -----
|
||||
1 0001.c74a.0a01 DYNAMIC Fa0/1
|
||||
1 0060.5c55.da01 DYNAMIC Fa0/2
|
||||
```
|
||||
</pre>
|
||||
|
||||
该条目的意思是,任何目的地址为连接到交换机上 FastEthernet 端口 0/1 或 0/2 的 MAC 地址的帧,都会直接发送到对应的端口。对于任何其它帧,交换机都将执行一次广播查询,看看目的设备是否插入了交换机。从上面的五次 ping 中的第一个句点可以看出。在等待交换机广播查询及收到目的路由器回应时,第一次 ping 发生了超时(80% 的成功率)。
|
||||
|
||||
__`show mac-address-table` 命令是一个非常重要的命令__,务必要记住这个命令,考试和现实工作中都是需要的。
|
||||
**`show mac-address-table` 命令是一个非常重要的命令**,务必要记住这个命令,考试和现实工作中都是需要的。
|
||||
你已经注意到 MAC 地址是个什么东西了。MAC 地址指派给所有设备,以实现数据链路层的通信。在以太网卡、路由器的以太网接口及无线设备上,你都能看到各厂商分配的 MAC 地址。下面是我的笔记本的以太网卡的 MAC 地址。
|
||||
|
||||

|
||||
@ -215,31 +227,33 @@ __`show mac-address-table` 命令是一个非常重要的命令__,务必要记
|
||||
如交换机在某个接口上收到一个帧,它就将帧的源地址加入到表中。如它知道帧的目的地址,就将该转发出相应接口。如它不知道目的地址,它将把该帧广播到除了收到该的所有接口。如果交换机收到一个广播帧(也就是目的地址全 F 的帧),它也会将该帧广播到除接收到该帧的所有接口。后面我们会涉及十六进制编址。广播过程如图 2.11 所示。
|
||||
|
||||

|
||||
图 2.11 -- 广播帧在所有接口上发出
|
||||
|
||||
*图 2.11 -- 广播帧在所有接口上发出*
|
||||
|
||||
### 以太网帧
|
||||
|
||||
有四种不同类型的以太网帧:
|
||||
|
||||
* 以太网 802.3 帧
|
||||
* 以太网 II 帧
|
||||
* 以太网 802.2 SAP 帧
|
||||
* 以太网 802.2 SNAP 帧
|
||||
+ 以太网 802.3 帧
|
||||
+ 以太网 II 帧
|
||||
+ 以太网 802.2 SAP 帧
|
||||
+ 以太网 802.2 SNAP 帧
|
||||
|
||||
前两种以太网标准用于在网卡之间通信时的组帧方式。__它们不能识别上层协议,802.2 类型帧才具备此能力__。你__只需要注意 802.3 类帧__,此类型的帧构成如下。
|
||||
前两种以太网标准用于在网卡之间通信时的组帧方式。**它们不能识别上层协议,802.2 类型帧才具备此能力**。你**只需要注意 802.3 类帧**,此类型的帧构成如下。
|
||||
|
||||

|
||||
图 2.12 -- 以太网 802.3 帧结构
|
||||
|
||||
*图 2.12 -- 以太网 802.3 帧结构*
|
||||
|
||||
IEEE 委员确定的 IEEE 802.3 以太网帧有以下特定字段。
|
||||
|
||||
* 前同步信号,preamble -- 为传入的数据对网卡进行信号同步及告知
|
||||
* 帧开始界定符,start-of-frame delimiter, SFD -- 标志着帧的开始
|
||||
* 目的地址 -- 目的 MAC 地址,可以是单播(Unicast)、广播或多播(Multicast)
|
||||
* 源地址 -- 发送主机的 MAC 地址
|
||||
* 长度 -- 定义帧中数据字段的长度
|
||||
* 数据 -- 帧中的载荷(就是传输中的数据)
|
||||
* 帧校验序列,frame-check sequence, FCS -- 给出了帧中所有数据的循环冗余校验(cyclic redundancy check, CRC)
|
||||
+ 前同步信号,preamble -- 为传入的数据对网卡进行信号同步及告知
|
||||
+ 帧开始界定符,start-of-frame delimiter, SFD -- 标志着帧的开始
|
||||
+ 目的地址 -- 目的 MAC 地址,可以是单播(Unicast)、广播或多播(Multicast)
|
||||
+ 源地址 -- 发送主机的 MAC 地址
|
||||
+ 长度 -- 定义帧中数据字段的长度
|
||||
+ 数据 -- 帧中的载荷(就是传输中的数据)
|
||||
+ 帧校验序列,frame-check sequence, FCS -- 给出了帧中所有数据的循环冗余校验(cyclic redundancy check, CRC)
|
||||
|
||||
|
||||
### 交换机初始配置,Initial Switch Configuration
|
||||
@ -250,13 +264,13 @@ IEEE 委员确定的 IEEE 802.3 以太网帧有以下特定字段。
|
||||
|
||||
`show version` 命令提供了很多有用信息,包括这些。
|
||||
|
||||
* 交换机运行时间,switch uptime
|
||||
* 型号
|
||||
* IOS 版本, IOS release
|
||||
* 上次重启的原因
|
||||
* 所有接口及其类型
|
||||
* 所有安装的存储器
|
||||
* 背板 MAC 地址,base MAC address
|
||||
+ 交换机运行时间,switch uptime
|
||||
+ 型号
|
||||
+ IOS 版本, IOS release
|
||||
+ 上次重启的原因
|
||||
+ 所有接口及其类型
|
||||
+ 所有安装的存储器
|
||||
+ 背板 MAC 地址,base MAC address
|
||||
|
||||
```
|
||||
Switch>en
|
||||
@ -293,7 +307,7 @@ Configuration register is 0xF
|
||||
|
||||
我们还没有涉及 VLANs 的知识,但现在,你可以把 VLAN 看着是一个逻辑上的局域网,在 VLAN 上的设备物理上可以在不同地方,但在能它们所能关注到的细节下(as far as they are concerned),他们都是直接连接在一台交换机下的。在下列配置中,交换机所有端口都是默认在 VLAN 1 中。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#show vlan
|
||||
VLAN Name Status Ports
|
||||
---- ------- ------ ------------------------------
|
||||
@ -303,11 +317,11 @@ VLAN Name Status Ports
|
||||
Fa0/13, Fa0/14, Fa0/15, Fa0/16,
|
||||
Fa0/17, Fa0/18, Fa0/19, Fa0/20,
|
||||
Fa0/21, Fa0/22, Fa0/23, Fa0/24,
|
||||
```
|
||||
</pre>
|
||||
|
||||
如你打算给交换机添加一个 IP 地址(就是__管理地址__),以便通过网络连上该交换机,只需给某个 VLAN 配置 IP 地址即可;本例中就是 VLAN1。
|
||||
如你打算给交换机添加一个 IP 地址(就是**管理地址**),以便通过网络连上该交换机,只需给某个 VLAN 配置 IP 地址即可;本例中就是 VLAN1。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch(config)#interface vlan1
|
||||
@ -317,38 +331,38 @@ Switch#show interface vlan1
|
||||
Vlan1 is administratively down, line protocol is down
|
||||
Hardware is CPU Interface, address is 0010.1127.2388 (bia 0010.1127.2388)
|
||||
Internet address is 192.168.1.3/24
|
||||
```
|
||||
</pre>
|
||||
|
||||
而 __VLAN1 默认是关闭的__,你需要执行一个 `no shutdown` 命令来开启它。你__还需告诉交换机往哪里发送所有 IP 流量,因为 2 层交换机没有建立路由表的能力__;该操作如下面的输出所示。
|
||||
而 **VLAN1 默认是关闭的**,你需要执行一个 `no shutdown` 命令来开启它。**还需告诉交换机往哪里发送所有 IP 流量,因为 2 层交换机没有建立路由表的能力**;该操作如下面的输出所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch(config)#ip default-gateway 192.168.1.1
|
||||
Switch(config)#
|
||||
```
|
||||
</pre>
|
||||
|
||||
在网络上有多台交换机时,你会想着去修改交换机默的主机名,这样在远程连接它们时才更容易区分(见下面的配置命令行)。设想一下通过远程 Telnet 对五台同样叫做 “Switch” 的交换机进行故障排除时的情形吧。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch(config)#hostname Switch1
|
||||
```
|
||||
</pre>
|
||||
|
||||
如你要经由网络 Telnet (或 SSH) 到某台交换机,你还需开启该协议。交换机远程访问默认是关闭的。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#conf t
|
||||
Enter configuration commands, one per line.
|
||||
Switch1(config)#line vty 0 15
|
||||
Switch1(config-line)#password cisco
|
||||
Switch1(config-line)#login
|
||||
```
|
||||
</pre>
|
||||
|
||||
__请完成上述操作,然后从另一设备(同一子网)连上交换机来测试你的配置__。这是一道 CCNA 基础题目。
|
||||
**请完成上述操作,然后从另一设备(同一子网)连上交换机来测试你的配置**。这是一道 CCNA 基础题目。
|
||||
|
||||
__VTYs(Virtual TeletYpe terminal) 是路由器或交换机用于对其进行 Telnet 或安全 Telnet ( SSH ) 访问的虚拟端口__。在你为其配置上一种认证方式之前,它们都是关闭的(最简单的方法是给它们加上一个口令,然后执行 `login` 命令)。你可以见到 0 到 4 端口、inclusive (包含)或 0 到 15 端口。要得知你有多少个可用的端口的一种方法是在编号 0 后面输入一个问号, 或者使用 `show line` 命令,如下面的输出所示。
|
||||
**VTYs(Virtual TeletYpe terminal) 是路由器或交换机用于对其进行 Telnet 或安全 Telnet ( SSH ) 访问的虚拟端口**。在你为其配置上一种认证方式之前,它们都是关闭的(最简单的方法是给它们加上一个口令,然后执行 `login` 命令)。你可以见到 0 到 4 端口、inclusive (包含)或 0 到 15 端口。要得知你有多少个可用的端口的一种方法是在编号 0 后面输入一个问号, 或者使用 `show line` 命令,如下面的输出所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Router(config)#line vty 0 ?
|
||||
<1-15> Last Line number
|
||||
Router#show line
|
||||
@ -360,14 +374,14 @@ Router#show line
|
||||
4 VTY - - - - - 0 0 0/0
|
||||
5 VTY - - - - - 0 0 0/0
|
||||
6 VTY - - - - - 0 0 0/0
|
||||
```
|
||||
</pre>
|
||||
CTY 就是控制台线路,同时 VTY 线路用于 Telnet 连接,AUX 是指辅助端口。
|
||||
|
||||
为了获得更为安全的访问方式,你可以仅允许 SSH 连接进入交换机,这就是说流量会被加密。而要让 SSH 工作,你需要在交换机上允许安全性 IOS 镜像,如下面的输出那样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config-line)#transport input ssh
|
||||
```
|
||||
</pre>
|
||||
现在,Telnet 流量就不再被允许传入到 VTY 端口了。
|
||||
|
||||
请在交换机上配置一下这所有的命令。仅仅阅读它们无助于你在考试当天记起它们。
|
||||
@ -377,12 +391,14 @@ Switch1(config-line)#transport input ssh
|
||||
就如同你已经看到的那样,交换机打破冲突域。更进一步,路由器打破广播域,这就是说现在的网络看起来像下面这样。
|
||||
|
||||

|
||||
图 2.13 -- 路由器隔离广播域
|
||||
|
||||
在继续之前,让我们讨论一下局域网到底是什么。一个局域网本质上是一个广播域。图 2.13 中的网络上,如果 PC-A 发出一个广播包,PC-B 会接收到这个包,PC-C 和 PC-D 却不能。这是因为那台路由器打破了该广播域。现在你可以__使用虚拟局域网将交换机的那些端口放入不的广播域__,如下图所示。
|
||||
*图 2.13 -- 路由器隔离广播域*
|
||||
|
||||
在继续之前,让我们讨论一下局域网到底是什么。一个局域网本质上是一个广播域。图 2.13 中的网络上,如果 PC-A 发出一个广播包,PC-B 会接收到这个包,PC-C 和 PC-D 却不能。这是因为那台路由器打破了该广播域。现在你可以**使用虚拟局域网将交换机的那些端口放入不的广播域**,如下图所示。
|
||||
|
||||

|
||||
图 2.14 -- VLAN 下的广播域
|
||||
|
||||
*图 2.14 -- VLAN 下的广播域*
|
||||
|
||||
图 2.14 中,该 2 层网络经由 VLANs 被划分为两个广播域。PC-A 发出的广播包为 PC-B 接收到,PC-C 和 PC-D 接收不到。如没有 VLANs,PC-C 和 PC-D 仍会收到 PC-A 发出的广播包。VLANs 的一些优点如下。
|
||||
|
||||
@ -392,21 +408,24 @@ Switch1(config-line)#transport input ssh
|
||||
* 带来在跨越任何尺度的地理位置上网络扩展的灵活性。比如,同一 VLAN 中某台 PC 在楼宇中的什么位置并不重要。它会以为自己与其它配置在同一 VLAN 中的机器在同样的网段上。图 2.15 中,VLAN 1 中的所有主机都能与其它主机通信,尽管它们不在同一楼层。对它们来说,VLAN 是透明的或不可见的。
|
||||
|
||||

|
||||
图 2.15 -- VLANs 消除局域网的物理边界
|
||||
|
||||
*图 2.15 -- VLANs 消除局域网的物理边界*
|
||||
|
||||
### VLAN 标记,VLAN Marking
|
||||
|
||||
虽然厂商在创建 VLANs 中采用其各自的方法,我们务必要小心处理一个涉及多厂商的 VLAN,以解决互操作性问题。比如思科开发的 __ISL 标准,是通过增加一个 26 字节的头部,以及一个新的 4 字节尾部(trailer), 的方式来封装原始帧__。为解决兼容性问题,IEEE 开发了 802.1Q 标准,这是一个独立于厂商的方式,用以创建可互操作 VLANs。
|
||||
虽然厂商在创建 VLANs 中采用其各自的方法,我们务必要小心处理一个涉及多厂商的 VLAN,以解决互操作性问题。比如思科开发的 **ISL 标准,是通过增加一个 26 字节的头部,以及一个新的 4 字节尾部(trailer), 的方式来封装原始帧**。为解决兼容性问题,IEEE 开发了 802.1Q 标准,这是一个独立于厂商的方式,用以创建可互操作 VLANs。
|
||||
|
||||

|
||||
图 2.16 -- ISL 的标记方式
|
||||
|
||||
*图 2.16 -- ISL 的标记方式*
|
||||
|
||||
802.1Q 通常被称为“帧标记(frame tagging)”, 因为它将一个叫做标签的 32 位头部(a 32-bit header, called a "tag"),插入到原始帧源地址后面,而不会对其它字段进行修改。紧邻源地址后两个字节,占据着一个注册以太网类型值 -- 0x8100, 它表明该帧包含了一个 802.1Q 头部。接着的 3 位表示 802.1P 用户优先级(User Priority, UP)字段, 在服务质量(Quality of Service, QoS)技术中,用作服务类别(Class of Service, CoS)位。下一个字段是 1 位规范格式标识(Canonical Format Indicator, CFI),最后 12 位是 VLAN ID。所以在采行 802.1Q 标准时,我们总共能有 4096 个 VLANs。
|
||||
|
||||

|
||||
图 2.17 -- 802.1Q 的标记方式
|
||||
|
||||
传送来自多个 VLANs 数据的那个端口叫做干线(trunk)端口。trunk 端口可以使用 ISL 协议,也可以使用 802.1Q 协议。802.1Q 中的一个特别概念是"原生 VLAN(native VLAN)"。这是一种特别的 VLAN 类型,它上面的帧是没有打标签的。原生 VLAN 的目的是让交换机在某个接口上运行 802.1Q 中继(单一链上的多 VLANs),即便另一设备无法支持中继的情况下,原生 VLAN 上的流量仍能通过该链路。如交换机在一条中继链路上收到未打标签的流量,就会假定这些流量是属于原生 VLAN 上的。__思科将 VLAN 1 作为_默认_的原生 VLAN__。
|
||||
*图 2.17 -- 802.1Q 的标记方式*
|
||||
|
||||
传送来自多个 VLANs 数据的那个端口叫做干线(trunk)端口。trunk 端口可以使用 ISL 协议,也可以使用 802.1Q 协议。802.1Q 中的一个特别概念是"原生 VLAN(native VLAN)"。这是一种特别的 VLAN 类型,它上面的帧是没有打标签的。原生 VLAN 的目的是让交换机在某个接口上运行 802.1Q 中继(单一链上的多 VLANs),即便另一设备无法支持中继的情况下,原生 VLAN 上的流量仍能通过该链路。如交换机在一条中继链路上收到未打标签的流量,就会假定这些流量是属于原生 VLAN 上的。**思科将 VLAN 1 作为_默认_的原生 VLAN**。
|
||||
|
||||
### 加入虚拟局域网, VLAN Membership
|
||||
|
||||
@ -414,7 +433,7 @@ Switch1(config-line)#transport input ssh
|
||||
|
||||
通过静态 VLAN 指派或配置,交换机上的那些端口为管理员所配置在不同 VLANs 中,有关设备再连接到端口上。在某用需要搬往楼宇的其它部位时,就要求管理员改变交换机上的配置。默认情形下,所有交换机端口属于 VLAN 1。
|
||||
|
||||
动态指派方式令到设备可根据其 MAC 地址而加入到特定的 VLAN。该特性给予管理员在无需改变交换机配置的情况下,允许用户接入任何交换机或是在楼栋内搬动的灵活性。__通过运用一台虚拟局域网管理策略服务器(a VlAN Management Policy Server, VMPS)实现动态特性__。
|
||||
动态指派方式令到设备可根据其 MAC 地址而加入到特定的 VLAN。该特性给予管理员在无需改变交换机配置的情况下,允许用户接入任何交换机或是在楼栋内搬动的灵活性。**通过运用一台虚拟局域网管理策略服务器(a VlAN Management Policy Server, VMPS)实现动态特性**。
|
||||
|
||||
> Farai 指出 “先是端口指派到 VLANs 中,随后设备插入到端口上”。
|
||||
|
||||
@ -429,13 +448,13 @@ Switch1(config-line)#transport input ssh
|
||||
|
||||
我们知道在一台交换机上可以有连接到多个 VLANs 的主机。那么在流量从一台主机前往另一主机时,发生了些什么呢?比如说,在图 2.15 中,当 VLAN 1 位于一楼的主机尝试与 VLAN 1 位于二楼的主机通信时,二层的那台主机是怎样知道该流量是属于哪个 VLAN 的呢?
|
||||
|
||||
我们知道交换机采用了一种叫做“帧标记(frame tagging)” 的方式,来将流量在不同 VLANs 上保持隔离。交换机把包含了 VLAN ID 的一个头部添加进帧中。在图 2.15 中,一楼交换机将会给来自 VLAN 2 的流量打上标记后,传给交换机 2, 交换机 2 将会看到这个标记,从而得知该流量需要呆在 VLAN 2 中。__这样的流量只能在叫做_中继链路_的链路上通过。VLAN 1 通常被指定为原生 VLAN,而_原生 VLAN 上的流量不被标记___。关于原生 VLAN 的内容,后面会提到。
|
||||
我们知道交换机采用了一种叫做“帧标记(frame tagging)” 的方式,来将流量在不同 VLANs 上保持隔离。交换机把包含了 VLAN ID 的一个头部添加进帧中。在图 2.15 中,一楼交换机将会给来自 VLAN 2 的流量打上标记后,传给交换机 2, 交换机 2 将会看到这个标记,从而得知该流量需要呆在 VLAN 2 中。**这样的流量只能在叫做*中继链路*的链路上通过。VLAN 1 通常被指定为原生 VLAN,而_原生 VLAN 上的流量不被标记_**。关于原生 VLAN 的内容,后面会提到。
|
||||
|
||||
交换机端(在 CCNA 考试范围内)可一分为以下三种。
|
||||
|
||||
* 接入端口,或接入链路,access links or ports
|
||||
* 中继端口,或中链路,trunk links or ports
|
||||
* 动态端口(很快就会学到这个)
|
||||
+ 接入端口,或接入链路,access links or ports
|
||||
+ 中继端口,或中链路,trunk links or ports
|
||||
+ 动态端口(很快就会学到这个)
|
||||
|
||||
### 接入链路,Access Links
|
||||
|
||||
@ -446,7 +465,8 @@ Switch1(config-line)#transport input ssh
|
||||
某个交换机端口通常既会连接网络上的某台主机,也会连接其它网络交换机、路由器或服务器。那么该链路就有可能需要传输多个 VLANs 上的流量。为实现这个目的,就需要区分每个帧都是来自于哪个 VLAN。这种区分方式就叫做 “帧标记(frame tagging)”, 在经中继链路传输前,出原生 VLAN 的帧外,所有帧都已打过标签。帧中的标记包含了 VLAN ID 信息。在帧到达目的主机所在的那台交换机后,该标记被移除。
|
||||
|
||||

|
||||
图 2.18 -- VLAN 标记法
|
||||
|
||||
*图 2.18 -- VLAN 标记法*
|
||||
|
||||
VLAN 中继用于传输多个 VLAN 的数据。为将属于某个 VLAN 的帧与其它 VLANs 的帧有所区别,在中继链路上传输的所有帧都经特别标记过,这样目的交换机就知道该帧属于那个 VLAN。ISL 和 802.1Q 是用于确保这些 VLANs 在穿过交换机中继链路后,仍能完全分辨出来的两种主要方式。
|
||||
|
||||
@ -456,54 +476,55 @@ VLAN 中继用于传输多个 VLAN 的数据。为将属于某个 VLAN 的帧与
|
||||
|
||||
802.1Q 与 ISL 有很多的不同,最大区别是,802.1Q 可以支持最多 4096 个 VLANs, ISL 只能支持最多 1000 个。另一个大的区别是 802.1Q 中的原生 VLAN 概念。默认情形下,802.1Q 中来自所有 VLANs 的帧都被打上标签。此规则的唯一例外就是属于原生 VLAN 的帧,这些帧未被标记。
|
||||
|
||||
尽管如此,你要记住,__在某个特定中继链路上,可以通过将某 VLAN 设为原生 VLAN,来指定其上面的帧不打标签__。比如,在采用 802.1Q 时,为阻止对 VLAN 400 上的帧打标签,你需要将 VLAN 400 配置为某特定中继上的原生 VLAN。IEEE 802.1Q 原生 VLAN 配置在后面会详细介绍。
|
||||
尽管如此,你要记住,**在某个特定中继链路上,可以通过将某 VLAN 设为原生 VLAN,来指定其上面的帧不打标签**。比如,在采用 802.1Q 时,为阻止对 VLAN 400 上的帧打标签,你需要将 VLAN 400 配置为某特定中继上的原生 VLAN。IEEE 802.1Q 原生 VLAN 配置在后面会详细介绍。
|
||||
|
||||
以下是有关 802.1Q 特性的小结。
|
||||
|
||||
* 支持最多 4096 个 VLANs
|
||||
* 采用帧内标记机制,修改原始帧
|
||||
* 是由 IEEE 开发的开发标准协议
|
||||
* 不对原生 VLAN 上的帧打标签;除此之外的所有帧都被标记
|
||||
+ 支持最多 4096 个 VLANs
|
||||
+ 采用帧内标记机制,修改原始帧
|
||||
+ 是由 IEEE 开发的开发标准协议
|
||||
+ 不对原生 VLAN 上的帧打标签;除此之外的所有帧都被标记
|
||||
|
||||
下面是一台交换机上的简短示例配置。我将 `switchport` 命令包括了进去,该命令告诉交换机将其某个端口作为二层端口,而不是三层。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Sw(config)#interface FastEthernet 0/1
|
||||
Sw(config-if)#switchport
|
||||
Sw(config-if)#switchport mode trunk
|
||||
Sw(config-if)#switchport trunk encapsulation dot1q
|
||||
Sw(config-if)#exit
|
||||
```
|
||||
</pre>
|
||||
|
||||
当然,在 2960 系列交换机上,`encapsulation` 不被识别,因为它只有一种类型。__在将一台交换机与其它交换机连接时,你需要将其接口设置为中继接口,以令到 VLANs 都被标记上__。`switchport` 命令的作用同样如此。再次说明,我在这里提到这个,是因为在现实中,你可能要配置一台三层交换机,如我们死盯 2960 型号,你可能会感到迷惑,我们不要这个!
|
||||
当然,在 2960 系列交换机上,`encapsulation` 不被识别,因为它只有一种类型。**在将一台交换机与其它交换机连接时,你需要将其接口设置为中继接口,以令到 VLANs 都被标记上**。`switchport` 命令的作用同样如此。再次说明,我在这里提到这个,是因为在现实中,你可能要配置一台三层交换机,如我们死盯 2960 型号,你可能会感到迷惑,我们不要这个!
|
||||
|
||||
交换机上的某中继链路可以是下列五种模式之一。
|
||||
|
||||
* 开启(On)模式 -- 强制该端口进入永久中继模式。不管插入设备是否同意将它们之间的链路转换成中继链路,该端口都会成为一个中继端口。
|
||||
* 关闭(Off)模式 -- 该链路不被作为中继链路使用,就算插入设备被设置成“中继”模式。
|
||||
* 自动(Auto)模式 -- 该端口不情愿成为一条中继链路。在插入设备被设置为“开启”或“我要(desirable)”模式时,链路就成为中继链路。当两端都被设置为“自动”模式时,链路就绝不会变成中继链路了,因为没有一方有转换成中继的意愿。
|
||||
* 我要(Desirable)模式 -- 该端口积极尝试转换成中继链路。如另一设备被设置为 “开启”、“自动” 或 “我要” 模式,链路就会成为中继链路
|
||||
* 没商量(No-negotiate)模式 -- 阻止端口经由协商成为中继连接。配置上此模式后,端口会强制进入接入模式或中继模式。
|
||||
+ 开启(On)模式 -- 强制该端口进入永久中继模式。不管插入设备是否同意将它们之间的链路转换成中继链路,该端口都会成为一个中继端口。
|
||||
+ 关闭(Off)模式 -- 该链路不被作为中继链路使用,就算插入设备被设置成“中继”模式。
|
||||
+ 自动(Auto)模式 -- 该端口不情愿成为一条中继链路。在插入设备被设置为“开启”或“我要(desirable)”模式时,链路就成为中继链路。当两端都被设置为“自动”模式时,链路就绝不会变成中继链路了,因为没有一方有转换成中继的意愿。
|
||||
+ 我要(Desirable)模式 -- 该端口积极尝试转换成中继链路。如另一设备被设置为 “开启”、“自动” 或 “我要” 模式,链路就会成为中继链路
|
||||
+ 没商量(No-negotiate)模式 -- 阻止端口经由协商成为中继连接。配置上此模式后,端口会强制进入接入模式或中继模式。
|
||||
|
||||
### 配置 VLANs, Configuring VLANs
|
||||
|
||||
现在你已对 VLANs 和中继链路有了了解,就让我们来配置一下图 2.19 中的网络吧。你需要将交换机配置为两个分别在 fa0/1 端口上的主机位于 VLAN 5 中,以及端口 fa0/15 之间的链路为中继链路。
|
||||
|
||||

|
||||
图 2.19 -- 测试网络
|
||||
|
||||
*图 2.19 -- 测试网络*
|
||||
|
||||
在将端口指派到 VLANs 之前,务必先要全局配置命令 `vlan <vlan#>` 创建出那个 VLAN。而此命令又会将你带入 VLAN 配置模式,在那里又可以为 VLANs 赋予一个描述性的名称。这里有一个示例。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config)#vlan 5
|
||||
Switch1(config-vlan)#name RnD
|
||||
Switch2(config)vlan 5
|
||||
Switch2(config-vlan)#name RnD
|
||||
```
|
||||
</pre>
|
||||
|
||||
使用命令 `show vlan` 命令来查看交换上存在着哪些 VLANs。其输出与下面的相似。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#show vlan
|
||||
VLAN Name Status Ports
|
||||
---- -------- ------- --------------------------------------------
|
||||
@ -515,20 +536,20 @@ VLAN Name Status Ports
|
||||
5 RnD active
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
</pre>
|
||||
|
||||
我们在通过使用接口配置命令 `switchport access vlan [vlan#]`, 将端口 fa0/1 加入到 VLAN 5 中去。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config)#int fa0/1
|
||||
Switch1(config-if)#switchport access vlan 5
|
||||
Switch2(config)#int fa0/1
|
||||
Switch2(config-if)#switchport access vlan 5
|
||||
```
|
||||
</pre>
|
||||
|
||||
在形如 3560 这样的三层交换机上,在将某个端口加入到一个 VLAN 前,你务必要使用命令 `switchport mode access` 将端口手动设置为接入模式。现在我们来看看 `show vlan` 命令的输出。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#show vlan
|
||||
VLAN Name Status Ports
|
||||
---- ---- ----- --------------------------------------------
|
||||
@ -541,63 +562,63 @@ VLAN Name Status Ports
|
||||
5 RnD active Fa0/1
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
</pre>
|
||||
|
||||
注意 fa0/1 现在被指派给了 VLAN 5。让我们来将两台交换机的 fa0/15 接口配置为中继链路。这里要注意的是 3550 型号交换机端口的默认模式是我要模式(desirable, 3560 型号的是自动模式)。 动态中继协议(Dynamic Trunk Protocol, DTP)会导致两台交换机上的 fa0/15 接口成为 ISL 中继链路。下一节课会学 DTP 的内容,但这里会简要提到 DTP 的一些东西。这种情况可用 `show interface trunk` 命令看到。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#show interface trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/15 desirable n-isl trunking 1
|
||||
```
|
||||
</pre>
|
||||
|
||||
请注意,其模式为我要(desirable), 封装方式是 ISL (“n” 代表 negotiated, 协商出的)。以下输出演示了配置中继为 ISL 方式的做法。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config)#interface fa0/15
|
||||
Switch1(config-if)#switchport trunk encapsulation isl
|
||||
Switch1(config-if)#switchport mode trunk
|
||||
Switch2(config)#interface fa0/15
|
||||
Switch2(config-if)#switchport trunk encapsulation isl
|
||||
Switch2(config-if)#switchport mode trunk
|
||||
```
|
||||
</pre>
|
||||
|
||||
`switchport trunk encapsulation` 命令设置端口的中继协议,而命令 `switchport mode trunk` 命令则是将端口设置为中继工作方式。现在的 `show interface trunk` 命令输出会是下面这样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch2#show interface trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/15 on isl trunking 1
|
||||
```
|
||||
</pre>
|
||||
|
||||
取代 N-ISL 的是 ISL。这是因为此次的协议是在接口上配置的,而不是协商出的。
|
||||
|
||||
> __重要提示:__ 在将交换机某端口设置为中继模式前,要先设置其中继封装方式。而这个规则又不适用于 2960 交换机(当前 CCNA 大纲中用到的型号),2960 交换机只使用 dot1q (802.1Q 的另一种叫法)封装。因此,2960 交换机上的 `switchport trunk encapsulation` 命令不工作。
|
||||
> **重要提示:** 在将交换机某端口设置为中继模式前,要先设置其中继封装方式。而这个规则又不适用于 2960 交换机(当前 CCNA 大纲中用到的型号),2960 交换机只使用 dot1q (802.1Q 的另一种叫法)封装。因此,2960 交换机上的 `switchport trunk encapsulation` 命令不工作。
|
||||
|
||||
与此类似,你可将交换机端口配置为 802.1Q 而不是 ISL,如下面的输出那样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config)#interface fa0/15
|
||||
Switch1(config-if)#switchport trunk encapsulation dot1q
|
||||
Switch1(config-if)#switchport mode trunk
|
||||
Switch2(config)#interface fa0/15
|
||||
Switch2(config-if)#switchport trunk encapsulation dot1q
|
||||
Switch2(config-if)#switchport mode trunk
|
||||
```
|
||||
</pre>
|
||||
|
||||
命令 `show interface trunk` 命令的输出又成了这样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch2#show interface trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/15 on 802.1q trunking 1
|
||||
```
|
||||
</pre>
|
||||
|
||||
请注意,原生 VLAN 是 1。这正是一个 802.1Q 中继上的默认原生 VLAN,同时可使用 `switchport trunk native vlan <vlan#>` 命令进行修改。__中继链路上的两个接口原生 VLAN 必须匹配__。这条命令是 CCNA 大纲的一部分,__也被作为一中安全手段__。
|
||||
请注意,原生 VLAN 是 1。这正是一个 802.1Q 中继上的默认原生 VLAN,同时可使用 `switchport trunk native vlan <vlan#>` 命令进行修改。**中继链路上的两个接口原生 VLAN 必须匹配**。这条命令是 CCNA 大纲的一部分,**也被作为一中安全手段**。
|
||||
|
||||
> __重要提示:__ 交换机能存储所有 VLAN 的信息,在重启后也还在。如你打算交换机以空白配置启动,就需要在交换机上运行 `delete vlan.dat` 命令,如下面的输出所示。这只适用于真实交换机,在诸如 Packet Tracer 等交换机模拟器是做不到的。
|
||||
> **重要提示:** 交换机能存储所有 VLAN 的信息,在重启后也还在。如你打算交换机以空白配置启动,就需要在交换机上运行 `delete vlan.dat` 命令,如下面的输出所示。这只适用于真实交换机,在诸如 Packet Tracer 等交换机模拟器是做不到的。
|
||||
|
||||
```
|
||||
<pre>
|
||||
SwitchA#dir flash:
|
||||
Directory of flash:/
|
||||
1 -rw- 3058048 <no date> c2960-i6q4l2-mz.121-22.EA4.bin
|
||||
@ -612,7 +633,7 @@ Directory of flash:/
|
||||
1 -rw- 3058048 <no date> c2960-i6q4l2-mz.121-22.EA4.bin
|
||||
64016384 bytes total (60958336 bytes free)
|
||||
SwitchA#
|
||||
```
|
||||
</pre>
|
||||
|
||||
## 交换故障排除基础,Basic Switching Troubleshooting
|
||||
|
||||
@ -620,32 +641,32 @@ SwitchA#
|
||||
|
||||
### 常见的交换机问题,Common Switch Issues
|
||||
|
||||
__无法远程登录到交换机,Can't Telnet to Switch__
|
||||
**无法远程登录到交换机,Can't Telnet to Switch**
|
||||
|
||||
首先要问的是 Telnet 曾正常运行过吗?如曾正常运行过,现在却不行了,那就是有人对交换机进行了改动、重启过交换机,从而导致配置丢失,或者是网络上的某台设备阻止了 Telnet 流量。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#telnet 192.168.1.1
|
||||
Trying 192.168.1.1 ...Open
|
||||
[Connection to 192.168.1.1 closed by foreign host]
|
||||
```
|
||||
</pre>
|
||||
|
||||
要检查的头一件事就是交换机上的 Telnet 是否已被确实开启(见下面的输出)。网络的 80% 错误都是由于唐突或疏忽造成的,所以请不要信誓旦旦,要亲历亲为,别去相信其他人的言词。
|
||||
|
||||
一个简单的 `show running-config` 命令就可以将交换机的配置列出。在 `vty` 线路下,你将看到 Telnet 是否有被打开。注意你需要在 vty 线路下有 `login` 或者 `login local` (或者配置了 AAA, 而 AAA 配置超出了 CCNA 考试范围) 命令,以及 `password` 命令。如下面所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
line vty 0 4
|
||||
password cisco
|
||||
login
|
||||
line vty 5 15
|
||||
password cisco
|
||||
login
|
||||
```
|
||||
</pre>
|
||||
|
||||
`login local` 命令告诉交换机或路由器去查找配置在其上的用户名和口令,如下面输出的那样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#sh run
|
||||
Building configuration...
|
||||
Current configuration : 1091 bytes!
|
||||
@ -660,39 +681,39 @@ password cisco
|
||||
login local
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
</pre>
|
||||
|
||||
__Ping 不通交换机, Can't Ping the Switch__
|
||||
**Ping 不通交换机, Can't Ping the Switch**
|
||||
|
||||
首先要弄清楚那人要 ping 交换机的原因。如你真要 ping 交换机,那么得要给交换机配置上一个 IP 地址;此外,交换机也要知道如何将流量送出(要有默认网关)。
|
||||
|
||||
__不能经由交换机 ping 通其它设备, Can't Ping through the Switch__
|
||||
**不能经由交换机 ping 通其它设备, Can't Ping through the Switch**
|
||||
|
||||
如出现经由交换机 ping 不通的情况,那就要确保那两台终端设备位于同一 VLAN 中。每个 VLAN 被看成一个网络,因此各个 VLAN 都要有与其它 VLAN 所不同的地址范围。必须要有一台路由器,以实现一个 VLAN 与其它 VLAN 之间连通。
|
||||
|
||||
__接口故障,Interface Issues__
|
||||
**接口故障,Interface Issues**
|
||||
|
||||
默认情况下,所有路由器接口都是对流量关闭的,而交换机接口是开启的。如你发现交换机接口处于管理性关闭状态,可以通过执行接口级命令 `no shutdown` 来开启它。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1(config)#int FastEthernet0/3
|
||||
Switch1(config-if)#no shut
|
||||
```
|
||||
</pre>
|
||||
|
||||
__二层接口可被设置成三种模式:中继、接入,或动态模式__。__中继模式下,交换机可与其它交换机或服务器连接__。而接入模式用于连接终端设备,比如一台 PC 或笔记本计算机。动态模式令到交换机去探测采用何种设置。
|
||||
**二层接口可被设置成三种模式:中继、接入,或动态模式**。**中继模式下,交换机可与其它交换机或服务器连接**。而接入模式用于连接终端设备,比如一台 PC 或笔记本计算机。动态模式令到交换机去探测采用何种设置。
|
||||
|
||||
在形如 3550 型号交换机平台上,默认设置通是动态我要模式(dynamic desirable),你需要在 [Cisco.com](http://cisco.com) 上去查看你的交换机型号的设置以及发行注记。__CCNA 考试中,你将被要求配置一台 2960 型号交换机__。此型号的交换机在除非你硬性设置接口为中继或接入模式的情况下,会动态选择工作模式。
|
||||
在形如 3550 型号交换机平台上,默认设置通是动态我要模式(dynamic desirable),你需要在 [Cisco.com](http://cisco.com) 上去查看你的交换机型号的设置以及发行注记。**CCNA 考试中,你将被要求配置一台 2960 型号交换机**。此型号的交换机在除非你硬性设置接口为中继或接入模式的情况下,会动态选择工作模式。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#show interfaces switchport
|
||||
Name: Fa0/1
|
||||
Switchport: Enabled
|
||||
Administrative Mode: dynamic auto
|
||||
```
|
||||
</pre>
|
||||
|
||||
默认设置可以方便地进行更改,如下面的输出这样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch1(config)#int FastEthernet0/1
|
||||
@ -712,13 +733,13 @@ Name: Fa0/1
|
||||
Switchport: Enabled
|
||||
Administrative Mode: trunk
|
||||
Operational Mode: trunk
|
||||
```
|
||||
</pre>
|
||||
|
||||
__更多有关接口的故障, More Interface Issues__
|
||||
**更多有关接口的故障, More Interface Issues**
|
||||
|
||||
交换机端口的默认设置是双工自动侦测(auto-detect duplex)以及速率自动侦测(auto-detect speed)。如你将一台 10Mbps 的设备插入到以半双工方式运行的交换机(现在已经很难找到这样的交换机了)上,该端口就会探测到插入的设备并运作起来。然而并不是任何时候都这样的,所以一般建议将交换机端口的双工方式及速率硬性设置,如下面的输出那样。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch1#show interfaces switchport
|
||||
Name: Fa0/1
|
||||
Switchport: Enabled
|
||||
@ -742,11 +763,11 @@ Switch1(config-if)#speed ?
|
||||
10 Force 10Mbps operation
|
||||
100 Force 100Mbps operation
|
||||
auto Enable AUTO speed configuration
|
||||
```
|
||||
</pre>
|
||||
|
||||
双工模式不匹配的一些迹象(除开错误消息外)有接口上的输入错误以及 CRC 错误,如下面的输出所示。请同时看看 ICND1 章节的第 15 天的一层和二层故障排除部分。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#show interface f0/1
|
||||
FastEthernet0/1 is down, line protocol is down (disabled)
|
||||
Hardware is Lance, address is 0030.a388.8401 (bia 0030.a388.8401)
|
||||
@ -774,24 +795,25 @@ BW 100000 Kbit, DLY 1000 usec,
|
||||
0 babbles, 0 late collision, 0 deferred
|
||||
0 lost carrier, 0 no carrier
|
||||
0 output buffer failures, 0 output buffers swapped out
|
||||
```
|
||||
</pre>
|
||||
|
||||
__硬件故障,Hardware Issues__
|
||||
**硬件故障,Hardware Issues**
|
||||
|
||||
和其它电子设备一样,交换机端口也会出现失效或不能全时正常运行现象,而时而正常时而故障的情况是更难于处理的。工程师经常通过将一台已知正常的设备插入到交换机的另一端口,来测试故障的接口。你也可以跳转(bounce)某端口,就是在该端口是先用 `shutdown` 命令关闭,接着用 `no shutdown` 命令开启。更换网线也是一个常见的处理步骤。图 2.20 给出了一些其它的交换机故障和处理方法。
|
||||
|
||||
请查阅你的交换机的文档,因为根据系统和端口 LEDs 的不同,每个端口会有闪烁的或是常亮的红色、琥珀色或者绿色的指示灯,表示功能正常或是端口、系统故障。
|
||||
|
||||

|
||||
图 2.20 -- 常见交换机故障及解决方法
|
||||
|
||||
### VLAN 分配故障,VLAN Assignment Issues__
|
||||
*图 2.20 -- 常见交换机故障及解决方法*
|
||||
|
||||
### VLAN 分配故障,VLAN Assignment Issues
|
||||
|
||||
小环境下的网络管理起来相对容易,因为只需部署少数特性,就能满足业务需求。但在企业环境中,你不会去使小型工作组交换机或是家庭办公设备的(small workgroup switches and SOHO device)。相反,你会用到高端设备,它们提供提供了诸多高级/复杂功能,具有流量优化能力。
|
||||
|
||||
此种环境下一种可能会配置到的特别特性,就是采用 VLANs 技术将不同网络区域进行逻辑隔离。在你遇到与某个 VLAN 有关的配置问题时,故障就会出现,这种故障可能会是难于处理的。一种处理方法就是去分析交换机的整个配置,并尝试找到问题所在。
|
||||
|
||||
VLAN 相关故障,通常是经由观察网络主机之间连通性(比如某用户不能 ping 通服务器)缺失发现的,就算一层运行无问题。__有关 VLAN 故障的一个重要特征就是不会对网络的性能造成影响__。如你配错了一个 VLAN,连接就直接不通,尤其是在考虑 VLANs 通常是用作隔离 IP 子网的情况下,只有处于同一 VLAN 的设备才能各自通信。
|
||||
VLAN 相关故障,通常是经由观察网络主机之间连通性(比如某用户不能 ping 通服务器)缺失发现的,就算一层运行无问题。**有关 VLAN 故障的一个重要特征就是不会对网络的性能造成影响**。如你配错了一个 VLAN,连接就直接不通,尤其是在考虑 VLANs 通常是用作隔离 IP 子网的情况下,只有处于同一 VLAN 的设备才能各自通信。
|
||||
|
||||
在排除 VLAN 故障时,首先要做的是查看设计阶段完成的网络文档和逻辑图表(网络拓扑图),如此你才能得知各个 VLAN 跨越的区域,以及相应设备和各交换机的端口情况。接着就要去检查每台交换机的配置,并通过将其与存档方案进行比较,以尝试找出问题。
|
||||
|
||||
@ -806,7 +828,7 @@ VLAN 相关故障,通常是经由观察网络主机之间连通性(比如某
|
||||
## 第二天的问题
|
||||
|
||||
1. Switches contain a memory chip known as an `_______`, which builds a table listing which device is plugged into which port.
|
||||
2. The `_______ _______`-`_______`-`_______` command displays a list of which MAC addresses are connected to which ports.
|
||||
2. The `_______` `_______`-`_______`-`_______` command displays a list of which MAC addresses are connected to which ports.
|
||||
3. Which two commands add an IP address to the VLAN?
|
||||
4. Which commands will enable Telnet and add a password to the switch Telnet lines?
|
||||
5. How do you permit only SSH traffic into your Telnet lines?
|
||||
@ -822,12 +844,12 @@ VLAN 相关故障,通常是经由观察网络主机之间连通性(比如某
|
||||
1. ASIC.
|
||||
2. `show mac-address-table`
|
||||
3. The `interface vlan x` command and the `ip address x.x.x.x`command.
|
||||
4.
|
||||
```
|
||||
4.
|
||||
<pre>
|
||||
Switch1(config)#line vty 0 15
|
||||
Switch1(config-line)#password cisco
|
||||
Switch1(config-line)#login
|
||||
```
|
||||
</pre>
|
||||
5. Use the `Switch1(config-line)#transport input ssh` command.
|
||||
6. The authentication method is not defined on another switch.
|
||||
7. True.
|
||||
@ -842,14 +864,14 @@ Switch1(config-line)#login
|
||||
|
||||
请登入到一台思科交换机,并输入那些本单元课程中解释到的命令。包括:
|
||||
|
||||
* 在不同交换机端口上配置不同的端口速率/自动协商速率
|
||||
* 使用 `show running-config` 和 `show interface` 命令,验证这些端口参数
|
||||
* 执行一下 `show version` 命令,来查看硬件信息以及 IOS 版本
|
||||
* 查看交换机 MAC 地址表
|
||||
* 给 VTY 线路配置一个口令
|
||||
* 定义出一些 VLANs 并为其指派名称
|
||||
* 将一个 VLAN 指派到一个配置为接入模式的端口上
|
||||
* 将某个端口配置为中继端口(ISL 以及 802.1Q),并将一些 VLANs 指派到该中继链路
|
||||
* 使用 `show vlan` 命令验证 VLAN 配置
|
||||
* 使用 `show interface switchport` 命令和 `show interface trunk` 命令,验证接口中继工作状态及 VLAN 配置
|
||||
* 删除 `vlan.dat` 文件
|
||||
+ 在不同交换机端口上配置不同的端口速率/自动协商速率
|
||||
+ 使用 `show running-config` 和 `show interface` 命令,验证这些端口参数
|
||||
+ 执行一下 `show version` 命令,来查看硬件信息以及 IOS 版本
|
||||
+ 查看交换机 MAC 地址表
|
||||
+ 给 VTY 线路配置一个口令
|
||||
+ 定义出一些 VLANs 并为其指派名称
|
||||
+ 将一个 VLAN 指派到一个配置为接入模式的端口上
|
||||
+ 将某个端口配置为中继端口(ISL 以及 802.1Q),并将一些 VLANs 指派到该中继链路
|
||||
+ 使用 `show vlan` 命令验证 VLAN 配置
|
||||
+ 使用 `show interface switchport` 命令和 `show interface trunk` 命令,验证接口中继工作状态及 VLAN 配置
|
||||
+ 删除 `vlan.dat` 文件
|
@ -1,12 +1,16 @@
|
||||
# 中继、DTP 及 VLAN 间路由
|
||||
# 第三天
|
||||
|
||||
**中继、DTP 及 VLAN 间路由**
|
||||
|
||||
**Trunking, DTP, and Inter-VLAN Routing**
|
||||
|
||||
|
||||
## 第三天的任务
|
||||
|
||||
* 阅读今天的课文
|
||||
* 回顾昨天的课程
|
||||
* 完成今天的实验
|
||||
* 阅读 ICND1 记诵指南
|
||||
+ 阅读今天的课文
|
||||
+ 回顾昨天的课程
|
||||
+ 完成今天的实验
|
||||
+ 阅读 ICND1 记诵指南
|
||||
|
||||
|
||||
在最小规模的那些办公室里,你才会遇到仅使用一台交换机的情况,但是网络基础设施通常是由多台交换机构成的。多台交换机带来了其配置上的挑战,要求你对中继及其有关的问题有深入理解。思科将多台交换机的安装和故障排除,视为一个 CCNA 级别的基础主题。
|
||||
@ -14,20 +18,20 @@
|
||||
|
||||
今天你将学到。
|
||||
|
||||
* 中继工作方式,trunking
|
||||
* 动态中继协议(Dynamic Trunking Protocol, DTP)
|
||||
* VLAN 间路由
|
||||
+ 中继工作方式,trunking
|
||||
+ 动态中继协议(Dynamic Trunking Protocol, DTP)
|
||||
+ VLAN 间路由
|
||||
|
||||
本单元覆盖 ICND1 考试大纲的以下要求。
|
||||
|
||||
* 在思科交换机上配置并验证中继
|
||||
* DTP
|
||||
* 自动协商
|
||||
* VLAN 间路由的配置和验证(单臂路由,router-on-a-stick)
|
||||
* 子接口,subinterfaces
|
||||
* 上行路由,upstream routing
|
||||
* 封装,encapsulation
|
||||
* 配置交换机虚拟接口,configure SVI(Switch Virtual Interface) Interfaces
|
||||
+ 在思科交换机上配置并验证中继
|
||||
+ DTP
|
||||
+ 自动协商
|
||||
+ VLAN 间路由的配置和验证(单臂路由,router-on-a-stick)
|
||||
- 子接口,subinterfaces
|
||||
- 上行路由,upstream routing
|
||||
- 封装,encapsulation
|
||||
+ 配置交换机虚拟接口,configure SVI(Switch Virtual Interface) Interfaces
|
||||
|
||||
|
||||
## 配置并验中继链路
|
||||
@ -40,13 +44,13 @@
|
||||
|
||||
接着就是要中继链路所要使用的封装协议。这是通过执行 `switchport trunk encapsulation [option]` 命令完成的。此命令可用的选项有下面这些。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch(config)#interface FastEthernet1/1
|
||||
Switch (config-if)#switchport trunk encapsulation ?
|
||||
dot1q - Interface uses only 802.1q trunking encapsulation when trunking
|
||||
isl - Interface uses only ISL trunking encapsulation when trunking
|
||||
negotiate - Device will negotiate trunking encapsulation with peer on interface
|
||||
```
|
||||
</pre>
|
||||
|
||||
关键字 `[dot1q]` 强制该交换机端口使用 IEEE 802.1Q 封装方式。关键字 `[isl]` 强制该交换机端口使用思科 ISL 封装方式。
|
||||
而 `[negotiate]` 关键字则指明说在动态交换机间链路协议(Dynamic Inter-Switch Link Protocol, DISL)及动态中继协议(Dynamic Trunking Protocol, DTP)无法就封装格式达成一致时,ISL 作为备选格式。DISL 简化了两台互联的快速以太网设备间 ISL 中继链路的建立。在 DISL 协议下,只需链路的一端需要配置为中继端口,因此而将 VLAN 中继配置过程大大简化。
|
||||
@ -54,11 +58,11 @@ negotiate - Device will negotiate trunking encapsulation with peer on interface
|
||||
|
||||
DTP 是一个***思科专有的***点对点协议(point-to-protocol), 它在两台交换机间协商建立起某种常见中继模式。DTP 会在稍后专门讲到。下面的输出演示了如何将某交换机端口配置为在建立起一条中继链路是采用 IEEE 802.1Q 封装方式。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch (config)#interface FastEthernet1/1
|
||||
Switch (config-if)#switchport
|
||||
Switch (config-if)#switchport trunk encapsulation dot1q
|
||||
```
|
||||
</pre>
|
||||
|
||||
此配置可通过命令 `show interfaces [name] switchport` 进行验证,如下列输出所示。
|
||||
|
||||
@ -79,26 +83,26 @@ Trunking Native Mode VLAN: 1 (default)
|
||||
|
||||
中继端口配置的第三步,就是部署配置,以确保该端口已被指定为中继端口。可以通过两种方式完成。
|
||||
|
||||
* 手动(静态)地完成中继配置
|
||||
* 使用动态中继协议(Dynamic Trunking Protocol, DTP)
|
||||
+ 手动(静态)地完成中继配置
|
||||
+ 使用动态中继协议(Dynamic Trunking Protocol, DTP)
|
||||
|
||||
|
||||
### 手动(静态)中继配置
|
||||
|
||||
手动配置一个中继,是通过在所需要的交换机上,执行接口配置命令 `switchport mode trunk` 完成的。此命令将该端口强制变成永久(静态)中继模式。下面的配置输出演示了如何将一个端口静态地配为中继端口。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server(config)#interface FastEthernet0/1
|
||||
VTP-Server(config-if)#switchport
|
||||
VTP-Server(config-if)#switchport trunk encapsulation dot1q
|
||||
VTP-Server(config-if)#switchport mode trunk
|
||||
VTP-Server(config-if)#exit
|
||||
VTP-Server(config)#
|
||||
```
|
||||
</pre>
|
||||
|
||||
如你使用的是一台低端交换机,就大可以忽略 `switchport` 命令,上面的输出是来自一台 Catalyst 6000 系列交换机。此配置可通过 `show interfaces [name] switchport` 命令予以验,如下面的输出所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server#show interfaces FastEthernet0/1 switchport
|
||||
Name: Fa0/1
|
||||
Switchport: Enabled
|
||||
@ -111,7 +115,7 @@ Access Mode VLAN: 1 (default)
|
||||
Trunking Native Mode VLAN: 1 (default)
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
</pre>
|
||||
|
||||
尽管中继链路的静态配置强制交换机建立一条中继,动态 ISL 和动态中继协议(DTP)数据包仍能从该接口发出。这样做了后,一条静态配置的中继链路就可以与相邻的使用了 DTP 的交换机,建立起中继关系,接着的小节将会讲到。经由 `show interfaces [name] switchport` 命令的输出,便可验证这点。如下面的输出所示。
|
||||
|
||||
@ -132,7 +136,7 @@ Trunking Native Mode VLAN: 1 (default)
|
||||
|
||||
在上面的输出中,粗体文字表明尽管中继链路是静态配置的,端口仍然在发出 DTP 和 DISL 数据包。在一些场合,此特性被看成是不受欢迎的。因此,通过执行接口配置命令 `switchport nonegotiate`,在静态配置作为中继链路的端口上关闭 DISL 及 DTP 数据包发送,被认为是一种良好实践,具体操作如以下的输出。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server(config)#interface FastEthernet0/1
|
||||
VTP-Server(config-if)#switchport
|
||||
VTP-Server(config-if)#switchport trunk encapsulation dot1q
|
||||
@ -140,7 +144,7 @@ VTP-Server(config-if)#switchport mode trunk
|
||||
VTP-Server(config-if)#switchport nonegotiate
|
||||
VTP-Server(config-if)#exit
|
||||
VTP-Server(config)#
|
||||
```
|
||||
</pre>
|
||||
|
||||
再一次,`show interfaces [name] switchport` 命令可被用作验证配置,像下面这样。
|
||||
|
||||
@ -163,37 +167,39 @@ Trunking Native Mode VLAN: 1 (default)
|
||||
|
||||
DTP 是一个在两台交换机之间协商出一种常见中继模式的,思科专有的点对点协议(a Cisco proprietary point-to-protocol)。这种动态协商不止于何种中继模式,还包括中继的封装方式。根据其平台的不同,两种交换机端口所能使用的 DTP 模式如下。
|
||||
|
||||
* 动态我要模式,dynamic desirable
|
||||
* 动态自动模式,dynamic auto
|
||||
+ 动态我要模式,dynamic desirable
|
||||
+ 动态自动模式,dynamic auto
|
||||
|
||||
在两台相交换机上使用 DTP 时,如交换机端口默认为动态我要状态,端口就会积极尝试变为中继端口。而如果交换机端口默认为动态自动状态,端口仅会在相邻交换机被设置为动态我要模式时,才反转为中继端口。
|
||||
|
||||
图 3.1 演示所有 DTP 模式组合,在两台思科 Catalyst 交换机间,这些组合有的能建立起中继链路,也有的不能建立(在这里的组合都能建立中继链路;请查看图 3.2 之后的说明)。
|
||||
|
||||

|
||||
图 3.1 -- DTP 模式组合
|
||||
|
||||
*图 3.1 -- DTP 模式组合*
|
||||
|
||||
图 3.2 示出了将会在两台相邻交换机间成功建立中继链路的有效组合 -- 一端是 DTP 另一端静态配置为中继端口。
|
||||
|
||||

|
||||
图 3.2 -- DTP 模式组合,第二部分
|
||||
|
||||
*图 3.2 -- DTP 模式组合,第二部分*
|
||||
|
||||
|
||||
> __注意:__ 如果两台交换机都设置为动态自动模式,它们是无法建立起中继链路的,知道这一点很重要。这因为,不同于动态我要模式,动态自动模式是一种消极模式,它等待另一端发起中继建立。因此,在两个消极端口连接时,既不会发起中继建立,同时中继链路也绝不会形成。与此类,一个静态配置的交换机端口同时配置了 `switchport nonegotiate` 命令的话,它绝不会与相邻的使用 DTP 的交换机形成中继,因为这会阻止 DISL 及 DTP 数据包从那个端口发出。
|
||||
> **注意:** 如果两台交换机都设置为动态自动模式,它们是无法建立起中继链路的,知道这一点很重要。这因为,不同于动态我要模式,动态自动模式是一种消极模式,它等待另一端发起中继建立。因此,在两个消极端口连接时,既不会发起中继建立,同时中继链路也绝不会形成。与此类,一个静态配置的交换机端口同时配置了 `switchport nonegotiate` 命令的话,它绝不会与相邻的使用 DTP 的交换机形成中继,因为这会阻止 DISL 及 DTP 数据包从那个端口发出。
|
||||
|
||||
在交换的局域网中应用 DTP 时,`show dtp [interface <name>]` 命令就可用来显示交换机的全局 DTP 信息以及特定接口的 DTP 信息。下面的输出给出了 `show dtp` 命令打印出的信息。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server#show dtp
|
||||
Global DTP information
|
||||
Sending DTP Hello packets every 30 seconds
|
||||
Dynamic Trunk timeout is 300 seconds
|
||||
4 interfaces using DTP
|
||||
```
|
||||
</pre>
|
||||
|
||||
从上面的输出可以看出,交换机每 30 秒就发出一个 DTP 数据包。而 DTP 超时被设置为 300 秒(5 分钟),当前有 4 个接口正使用着 DTP。命令 `show dtp intferface [name]` 会打印出特定接口的 DTP 信息,这些信息中包括了接口的类型(中继或接入)、端口当前的 DTP 配置情况、中继的封装方式,以及 DTP 数据包统计信息,如下面的输出所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server#show dtp interface FastEthernet0/1
|
||||
DTP information for FastEthernet0/1:
|
||||
TOS/TAS/TNS: TRUNK/ON/TRUNK
|
||||
@ -219,7 +225,7 @@ DTP information for FastEthernet0/1:
|
||||
0 trunk timeouts
|
||||
2 link ups, last link up on Mon Mar 01 1993, 00:00:22
|
||||
1 link downs, last link down on Mon Mar 01 1993, 00:00:20
|
||||
```
|
||||
</pre>
|
||||
|
||||
### IEEE 802.1Q 原生 VLAN
|
||||
|
||||
@ -242,32 +248,33 @@ Voice VLAN: none
|
||||
[Truncated Output]
|
||||
</pre>
|
||||
|
||||
交换机使用 VLAN 1 来承载一些特定的协议流量,比如思科发现协议(Cisco Discovery Protocol, CDP)、VLAN 中继协议(VLAN Trunking Protocol, VTP)、端口聚合协议(Port Aggregation Protocol, PAgP), 以及动态中继协议(Dynamic Trunking Protocol, DTP) 等的协议信息。CDP 和 PAgP 将在今天的课程后面部分详细讨论。尽管默认原生 VLAN 总是 VLAN 1, 它是可以手动修改为任何不在__保留 VLANs__ 中的任何有效 VLAN 编号的。
|
||||
交换机使用 VLAN 1 来承载一些特定的协议流量,比如思科发现协议(Cisco Discovery Protocol, CDP)、VLAN 中继协议(VLAN Trunking Protocol, VTP)、端口聚合协议(Port Aggregation Protocol, PAgP), 以及动态中继协议(Dynamic Trunking Protocol, DTP) 等的协议信息。CDP 和 PAgP 将在今天的课程后面部分详细讨论。尽管默认原生 VLAN 总是 VLAN 1, 它是可以手动修改为任何不在**保留 VLANs** 中的任何有效 VLAN 编号的。
|
||||
|
||||
但是,__中继链路两端上的原生 VLAN 必须一致__,记住这点是很重要。如出现了原生 VLAN 不匹配,生成树协议(Spanning Tree Protocol, STP)就把该端口置为端口 VLAN ID (port VLAN ID, PVID) 不一致状态,且不会转发该链路。此外,CDPv2 也会在交换机间传送原生 VLAN 信息,而在出现原生 VLAN 不匹配后,将会在交换机控制台上打印错误消息。通过对所需的 802.1Q 中继链路,执行接口配置命令 `switchport trunk native vlan [number]` 可以修改其默认原生 VLAN。如下面的输出所示。
|
||||
但是,**中继链路两端上的原生 VLAN 必须一致**,记住这点是很重要。如出现了原生 VLAN 不匹配,生成树协议(Spanning Tree Protocol, STP)就把该端口置为端口 VLAN ID (port VLAN ID, PVID) 不一致状态,且不会转发该链路。此外,CDPv2 也会在交换机间传送原生 VLAN 信息,而在出现原生 VLAN 不匹配后,将会在交换机控制台上打印错误消息。通过对所需的 802.1Q 中继链路,执行接口配置命令 `switchport trunk native vlan [number]` 可以修改其默认原生 VLAN。如下面的输出所示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server(config)#interface FastEthernet0/1
|
||||
VTP-Server(config-if)#switchport trunk native vlan ?
|
||||
<1-4094> VLAN ID of the native VLAN when this port is in trunking mode
|
||||
```
|
||||
</pre>
|
||||
|
||||
|
||||
### VLAN 间路由,Inter-VLAN Routing
|
||||
|
||||
默认情况下,尽管 VLANs 能够跨越整个的二层交换网络,一个 VLAN 中的主机却是不能直接和其它 VLAN 中的主机直接通信的。为实现这个目的,必须对不同 VLANs 间的流量进行路由。这就叫做 VLAN 间路由。交换局域网(switched LANs) 中的 VLAN 间路由有三种实现方式,下面有分别列出,这三种方式及其各自的优势和劣势,接下来的部分会详细介绍。
|
||||
|
||||
* 采用物理的路由器接口的 VLAN 间路由, Inter-VLAN routing using physical router interfaces
|
||||
* 采用路由器子接口的 VLAN 间路由, Inter-VLAN routing using router subinterfaces
|
||||
* 采用交换机虚拟接口的 VLAN 间路由, Inter-VLAN routing using switched virtual interfaces
|
||||
+ 采用物理的路由器接口的 VLAN 间路由, Inter-VLAN routing using physical router interfaces
|
||||
+ 采用路由器子接口的 VLAN 间路由, Inter-VLAN routing using router subinterfaces
|
||||
+ 采用交换机虚拟接口的 VLAN 间路由, Inter-VLAN routing using switched virtual interfaces
|
||||
|
||||
|
||||
__采用物理的路由器接口的 VLAN 间路由__
|
||||
**采用物理的路由器接口的 VLAN 间路由**
|
||||
|
||||
为实现 VLAN 间路由通信的第一种方式,需要用到带有多个接口的路由器,来作为每个单独配置 VLAN 的网关。此时路由器就能够使用这些物理的 LAN 接口,将接收自一个 VLAN 的数据包,路由到其它 VLAN 上。此种方式如图 3.3 所示。
|
||||
|
||||

|
||||
图 3.3 -- 采用多个物理路由器接口的 VLAN 间路由
|
||||
|
||||
*图 3.3 -- 采用多个物理路由器接口的 VLAN 间路由*
|
||||
|
||||
图 3.3 演示了用到两个不同 VLANs 的单一 LAN,这两个 VLANs 都有分配给各自的 IP 子网。尽管图中画出的网络主机都是连接在同一物理交换机上,但因为它们处于不同的 VLANs 中, VLAN 10 中的主机与 VLAN 20 中的主机之间的数据包必须要经过路由才行,而在同样 VLAN 中的数据包只需要简单的交换即可。
|
||||
|
||||
@ -275,7 +282,7 @@ __采用物理的路由器接口的 VLAN 间路由__
|
||||
|
||||
在采用多物理路由器接口时,各需要的 VLAN 中到路由器的交换机链路,被配置为接入链路。然后路由器上的物理接口都配置上相应的 IP 地址,而 VLAN 上的网络主机,要么以静态方式配置上相应 VLAN 的 IP 地址,将该路由器物理接口作为默认网关,要么通过 DHCP 完成配置。图 3.3 中交换机的配置,在下面的输出中有演示。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server-1(config)#vlan 10
|
||||
VTP-Server-1(config-vlan)#name Example-VLAN-10
|
||||
VTP-Server-1(config-vlan)#exit
|
||||
@ -292,33 +299,34 @@ VTP-Server-1(config-if-range)#switchport
|
||||
VTP-Server-1(config-if-range)#switchport access vlan 20
|
||||
VTP-Server-1(config-if-range)#switchport mode access
|
||||
VTP-Server-1(config-if-range)#exit
|
||||
```
|
||||
</pre>
|
||||
|
||||
2960 交换机上无需 `switchport` 命令,因为其接口已经运行于二层模式。
|
||||
|
||||
下面的输出又演示了图 3.3 中的路由器的配置。
|
||||
|
||||
```
|
||||
<pre>
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ip add 10.10.10.1 255.255.255.0
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface FastEthernet0/1
|
||||
R1(config-if)#ip add 10.20.20.1 255.255.255.0
|
||||
R1(config-if)#exit
|
||||
```
|
||||
</pre>
|
||||
|
||||
__使用路由器子接口的 VLAN 间路由__
|
||||
**使用路由器子接口的 VLAN 间路由**
|
||||
|
||||
采用路由器子接口实现 VLAN 间路由的方法,解决了使用多路由器物理接口方法所可能存在的伸缩性问题。有了路由器子接口,就只需要路由器有一个物理接口就行,接下来的子接口是经由在那个物理接口上的配置获得。图 3.4 演示了这种方法。
|
||||
|
||||

|
||||
图 3.4 -- 采用路由器子接口的 VLAN 间路由
|
||||
|
||||
*图 3.4 -- 采用路由器子接口的 VLAN 间路由*
|
||||
|
||||
图 3.4 描绘了图 3.3 中同样的 LAN。但在图 3.4 中,仅使用了一个物理路由器接口。而为了实现一种 VLAN 间路由解决方案,使用 `interface [name].[subinterface number]` 全局配置命令,在该主要路由器接口上配置出了子接口。而通过命令 `encapsulation [isl|dot1q] [vlan]` 子接口配置命令,又将各子接口与某个特定 VLAN 关联了起来。最后一步就是给子接口配置上需要的 IP 地址。
|
||||
|
||||
在交换机上,那条连接路由器的单一链路,必须要配置为中继链路,这是因为__路由器不支持 DTP__。假如中继配置成 802.1Q 中继,那么在原生 VLAN 不是默认原生 VLAN 时,此中继的原生 VLAN 一定要定义。而该__原生 VLAN 也要在相应的路由器子接口上予以配置,配置命令为 `encapsulation dot1q [vlan] native` 子接口配置命令__。下面的输出演示了使用单一物理接口的 VLAN 间路由配置(又称作 “单臂路由,router-on-a-stick”)。图 3.4 中绘出的两个 VLANs 在下面的输出中也有显示,同时还有一个额外的 VLAN 用于管理用;该管理 VLAN 将被配置为原生 VLAN。
|
||||
在交换机上,那条连接路由器的单一链路,必须要配置为中继链路,这是因为**路由器不支持 DTP**。假如中继配置成 802.1Q 中继,那么在原生 VLAN 不是默认原生 VLAN 时,此中继的原生 VLAN 一定要定义。而该**原生 VLAN 也要在相应的路由器子接口上予以配置,配置命令为 `encapsulation dot1q [vlan] native` 子接口配置命令**。下面的输出演示了使用单一物理接口的 VLAN 间路由配置(又称作 “单臂路由,router-on-a-stick”)。图 3.4 中绘出的两个 VLANs 在下面的输出中也有显示,同时还有一个额外的 VLAN 用于管理用;该管理 VLAN 将被配置为原生 VLAN。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server-1(config)#vlan 10
|
||||
VTP-Server-1(config-vlan)#name Example-VLAN-10
|
||||
VTP-Server-1(config-vlan)#exit
|
||||
@ -350,14 +358,15 @@ VTP-Server-1(config-if)#ip address 10.30.30.2 255.255.255.0
|
||||
VTP-Server-1(config-if)#no shutdown
|
||||
VTP-Server-1(config-if)#exit
|
||||
VTP-Server-1(config)#ip default-gateway 10.30.30.1
|
||||
```
|
||||
</pre>
|
||||
|
||||
图 3.4 中的路由器之配置如下面的输出所示。
|
||||
|
||||
|
||||
```
|
||||
<pre>
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#no ip address
|
||||
<b>R1(config-if)#no shut </b> <- 这一步相当重要,否则子接口也会处于 down down 状态
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface FastEthernet0/0.10
|
||||
R1(config-subitf)#description ‘Subinterface For VLAN 10’
|
||||
@ -374,20 +383,20 @@ R1(config-subitf)#description ‘Subinterface For Management’
|
||||
R1(config-subif)#encapsulation dot1Q 30 native
|
||||
R1(config-subif)#ip add 10.30.30.1 255.255.255.0
|
||||
R1(config-subif)#exit
|
||||
```
|
||||
</pre>
|
||||
|
||||
此方案的主要优在于,路由器上仅需一个物理接口。主要的劣势在于,该物理端口的带宽,是为所配置的多个子接口所公用的。因此,如果存在很多 VLAN 间流量时,路由器就很快会成为网络的性能瓶颈。
|
||||
|
||||
__采用交换机虚拟接口的 VLAN 间路由__
|
||||
**采用交换机虚拟接口的 VLAN 间路由**
|
||||
|
||||
__多层交换机支持在物理接口上配置 IP 地址__。但要先用__接口配置命令 `no switchport`__ 对这些接口进行配置,以允许管理员在其上配置 IP 地址。除开使用物理接口外,多层交换机还支持交换机虚拟接口(Switch Virtual Interfaces, SVIs
|
||||
**多层交换机支持在物理接口上配置 IP 地址**。但要先用**接口配置命令 `no switchport`** 对这些接口进行配置,以允许管理员在其上配置 IP 地址。除开使用物理接口外,多层交换机还支持交换机虚拟接口(Switch Virtual Interfaces, SVIs
|
||||
)技术。
|
||||
|
||||
SVIs 是一系列代表了 VLAN 的逻辑接口。尽管某个交换机虚拟接口代表了一个 VLAN,它也不是在某个 VLAN 在交换机上配置出来时,就自动配置出来的;它必须要管理员通过执行 __`interface vlan [number]` 全局配置命令__,手动加以配置。而那些诸如 IP 分址等的三层配置参数,也要与在物理接口上一样,在交换机虚拟接口予以配置。
|
||||
SVIs 是一系列代表了 VLAN 的逻辑接口。尽管某个交换机虚拟接口代表了一个 VLAN,它也不是在某个 VLAN 在交换机上配置出来时,就自动配置出来的;它必须要管理员通过执行 **`interface vlan [number]` 全局配置命令**,手动加以配置。而那些诸如 IP 分址等的三层配置参数,也要与在物理接口上一样,在交换机虚拟接口予以配置。
|
||||
|
||||
以下输出演示了在单一交换机上实现 VLAN 间路由,做出的交换机虚拟接口配置。此输出引用了本小节前面的配置输出所用到的 VLANs。
|
||||
|
||||
```
|
||||
<pre>
|
||||
VTP-Server-1(config)#vlan 10
|
||||
VTP-Server-1(config-vlan)#name Example-VLAN-10
|
||||
VTP-Server-1(config-vlan)#exit
|
||||
@ -414,13 +423,13 @@ VTP-Server-1(config-if)#description ‘SVI for VLAN 10’
|
||||
VTP-Server-1(config-if)#ip address 10.20.20.1 255.255.255.0
|
||||
VTP-Server-1(config-if)#no shutdown
|
||||
VTP-Server-1(config-if)#exit
|
||||
```
|
||||
</pre>
|
||||
|
||||
__在用到多层交换机时,交换机虚拟端口是推荐的配置方法,和实现 VLAN 间路由的首选方案__。
|
||||
**在用到多层交换机时,交换机虚拟端口是推荐的配置方法,和实现 VLAN 间路由的首选方案**。
|
||||
|
||||
你可通过使用 `show interface vlan x` 命令,来验证某个交换机虚拟接口是配置恰当的(IP 分址等)。下面的输出与 `show interface x` 命令等同。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#show interfaces vlan 100
|
||||
Vlan100 is up, line protocol is down
|
||||
Hardware is EtherSVI, address is c200.06c8.0000 (bia c200.06c8.0000)
|
||||
@ -429,18 +438,18 @@ Vlan100 is up, line protocol is down
|
||||
reliability 255/255, txload 1/255, rxload 1/255
|
||||
Encapsulation ARPA, loopback not set
|
||||
ARP type: ARPA, ARP Timeout 04:00:00
|
||||
```
|
||||
</pre>
|
||||
|
||||
如你希望使用一台 2960 交换机来路由 IP 数据包,那么就需要对配置进行修改,然后进行重启。这是因为 2960 和更新型号的一些交换机进行了性能调优,实现一种明确的交换机资源分配方式。该资源管理方式叫做交换机数据库管理(Switch Database Managent, SDM)模板。你可以在以下几种 SDM 模板中进行选择。
|
||||
|
||||
* 默认(default) -- 各项功能的平衡
|
||||
* IPv4/IPv4 双协议支持(dual IPv4/IPv6) -- 用于双栈环境(dual-stack environments)
|
||||
* Lanbase-routing -- 支持各种单播路由(Unicast routes)
|
||||
* 服务质量(Quality of Service, QoS) -- 提供对各种服务质量特性的支持
|
||||
+ 默认(default) -- 各项功能的平衡
|
||||
+ IPv4/IPv4 双协议支持(dual IPv4/IPv6) -- 用于双栈环境(dual-stack environments)
|
||||
+ Lanbase-routing -- 支持各种单播路由(Unicast routes)
|
||||
+ 服务质量(Quality of Service, QoS) -- 提供对各种服务质量特性的支持
|
||||
|
||||
下面是在我的 3750 交换机上的输出。这些输出与 2960 上的选项不完全一致,但你明白了这个意思。同时,请记住,__交换机型号及 IOS 对 SDM 配置选项有影响,因此,你要查看你的型号的配置手册__。
|
||||
下面是在我的 3750 交换机上的输出。这些输出与 2960 上的选项不完全一致,但你明白了这个意思。同时,请记住,**交换机型号及 IOS 对 SDM 配置选项有影响,因此,你要查看你的型号的配置手册**。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch(config)#sdm prefer ?
|
||||
access Access bias
|
||||
default Default bias
|
||||
@ -448,11 +457,11 @@ Switch(config)#sdm prefer ?
|
||||
ipe IPe bias
|
||||
lanbase-routing Unicast bias
|
||||
vlan VLAN bias
|
||||
```
|
||||
</pre>
|
||||
|
||||
在你期望在 2960 交换机上配置 VLAN 间路由时,就需要开启 Lanbase-routing SDM 选项。同时在此变更生效前,需要重启交换机。下面是 `show sdm prefer` 命令的输出,该输出告诉你当前的 SDM 配置以及资源分配情况。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch#show sdm prefer
|
||||
The current template is “desktop default” template.
|
||||
The selected template optimizes the resources in
|
||||
@ -467,20 +476,21 @@ the switch to support this level of features for
|
||||
number of IPv4/MAC qos aces: 0.5K
|
||||
number of IPv4/MAC security aces: 1K
|
||||
Switch#
|
||||
```
|
||||
</pre>
|
||||
|
||||
## 虚拟局域网中继协议,VTP
|
||||
|
||||
虚拟局域网中继协议(VLAN Trunking Protocol, VTP)是一个思科专有的二层消息协议(a Cisco proprietary Layer 2 messaging protocol), 用于管理同一个 VTP 域中交换机上 VLANs 增加、删除及重命名。VTP 允许 VLAN 信息在交换网络(the switched network)上宣告/扩散(propagate),这将减轻交换网络中的管理开销, 同时使得众多的交换机能够交换(exchange)并维护一致的 VLAN 信息。此概念在图 3.5 中进行了演示。
|
||||
|
||||

|
||||
图 3.5 -- VTP 更新
|
||||
|
||||
*图 3.5 -- VTP 更新*
|
||||
|
||||
采用 VTP 能够得到以下好处。
|
||||
|
||||
* VLANs 信息的精确监控和汇报
|
||||
* 整个网络上 VLANs 的一致性
|
||||
* 易于添加和移除 VLANs
|
||||
+ VLANs 信息的精确监控和汇报
|
||||
+ 整个网络上 VLANs 的一致性
|
||||
+ 易于添加和移除 VLANs
|
||||
|
||||
|
||||
### 配置 VTP, configuring VTP
|
||||
@ -502,32 +512,32 @@ VTP Domain Name : <b>in60days</b>
|
||||
|
||||
如要安全的传输 VTP 更新数据,可以为其加上一个口令,但要求 VTP 域中的每台交换机的口令都要匹配。
|
||||
|
||||
```
|
||||
<pre>
|
||||
Switch(config)#vtp password Cisco321
|
||||
Setting device VLAN database password to Cisco321
|
||||
```
|
||||
</pre>
|
||||
|
||||
### VTP 模式, VTP Modes
|
||||
|
||||
VTP 以下列三种模式允许。
|
||||
|
||||
* 服务器模式(默认模式), server(default)
|
||||
* 客户端模式, client
|
||||
* 透明模式, transparent
|
||||
+ 服务器模式(默认模式), server(default)
|
||||
+ 客户端模式, client
|
||||
+ 透明模式, transparent
|
||||
|
||||
上面的输出中,你可以看到配置中有个服务器模式。
|
||||
|
||||
__服务器模式, Server Mode__
|
||||
**服务器模式, Server Mode**
|
||||
|
||||
在服务器模式时,该交换机被授权去__建立、修改及删除整个 VTP 域上的 VLAN 信息__。你对服务器所做的任何修改,都会扩散到整个域中。而 __VLAN 配置是保存在位于闪存中的 VLAN 数据库文件 “vlan.dat” 中的__。
|
||||
在服务器模式时,该交换机被授权去**建立、修改及删除整个 VTP 域上的 VLAN 信息**。你对服务器所做的任何修改,都会扩散到整个域中。而 **VLAN 配置是保存在位于闪存中的 VLAN 数据库文件 “vlan.dat” 中的**。
|
||||
|
||||
__客户端模式,Client Mode__
|
||||
**客户端模式,Client Mode**
|
||||
|
||||
处于客户端模式下的交换机,将会接收 VTP 信息,并根据收到的通告信息做出配置上的改变,而不能增加、移除或是改变它们的 VLAN 信息了。客户端交换机也会在它们的中继端口上,发出接收到的 VTP 数据包。记住,你是不能将客户端交换机的某个端口,添加到 VTP 服务器上不存在的 VLAN 中去的。__VLAN 配置也是保存在位于闪存中的 VLAN 数据库文件 “vlan.dat” 中的__。
|
||||
处于客户端模式下的交换机,将会接收 VTP 信息,并根据收到的通告信息做出配置上的改变,而不能增加、移除或是改变它们的 VLAN 信息了。客户端交换机也会在它们的中继端口上,发出接收到的 VTP 数据包。记住,你是不能将客户端交换机的某个端口,添加到 VTP 服务器上不存在的 VLAN 中去的。**VLAN 配置也是保存在位于闪存中的 VLAN 数据库文件 “vlan.dat” 中的**。
|
||||
|
||||
__透明模式,Transparent Mode__
|
||||
**透明模式,Transparent Mode**
|
||||
|
||||
透明模式下的交换机,将在它们的中继端口上转发接收到的 VTP 信息,却不会应用通告的更新。一台 VTP 透明模式交换机(a VTP Transparent-mode switch) 是可以创建、修改并移除 VLANs 的, 但其 VLAN 配置变动不会通告给其它交换机。__VTP 透明模式仍然需要域信息配置项__。当处于 VTP 服务器与客户端之间的某台交换机,需要有不同的 VLAN 数据库时,它就需要是一台 VTP 透明交换机。__而要配置上扩展的 VLAN 编号范围(the extended VLAN range)时,也要用到透明模式__。
|
||||
透明模式下的交换机,将在它们的中继端口上转发接收到的 VTP 信息,却不会应用通告的更新。一台 VTP 透明模式交换机(a VTP Transparent-mode switch) 是可以创建、修改并移除 VLANs 的, 但其 VLAN 配置变动不会通告给其它交换机。**VTP 透明模式仍然需要域信息配置项**。当处于 VTP 服务器与客户端之间的某台交换机,需要有不同的 VLAN 数据库时,它就需要是一台 VTP 透明交换机。**而要配置上扩展的 VLAN 编号范围(the extended VLAN range)时,也要用到透明模式**。
|
||||
|
||||
|
||||
### VTP 修剪, VTP Pruning
|
||||
@ -535,7 +545,8 @@ __透明模式,Transparent Mode__
|
||||
时常会出现这样的情形,比如说,在网络的一边有 VLANs 20 到 50, 另一边有 VLANs 60 到 80。而一边的那些交换机上的 VLAN 信息却又无需传送到另一边的那些交换机上。为此,交换机能够将它们的 VLAN 信息进行修剪,因此而减少广播流量,如图 3.6 所示。
|
||||
|
||||

|
||||
图 3.6 -- 运行中的 VTP 修剪
|
||||
|
||||
*图 3.6 -- 运行中的 VTP 修剪*
|
||||
|
||||
下面这行配置将 VTP 修剪功能加入到你的交换机。
|
||||
|
||||
@ -545,9 +556,9 @@ __透明模式,Transparent Mode__
|
||||
|
||||
### 配置修订号,Configuration Revision Number
|
||||
|
||||
配置修订号(the configuration revision number)是一个 32 位整数,用以表明一个 VTP 数据包的修订级别(在上面的 `show vtp status` 输出中可以看到)。此信息用于判断收到的信息是否与当前版本要新。你每次此处于 VTP 服务器模式的交换机上做出 VLAN 变动时,配置修订号就会加 1, 同时变动会通告给 VTP 客户端(处于 VTP 透明模式的交换机,其修订号会是 0, 且不会随 VLAN 数据库的变动而增大)。__修改 VTP 域名称,然后又改回早前的名称,可以实现交换机配置修订号重置__。
|
||||
配置修订号(the configuration revision number)是一个 32 位整数,用以表明一个 VTP 数据包的修订级别(在上面的 `show vtp status` 输出中可以看到)。此信息用于判断收到的信息是否与当前版本要新。你每次此处于 VTP 服务器模式的交换机上做出 VLAN 变动时,配置修订号就会加 1, 同时变动会通告给 VTP 客户端(处于 VTP 透明模式的交换机,其修订号会是 0, 且不会随 VLAN 数据库的变动而增大)。**修改 VTP 域名称,然后又改回早前的名称,可以实现交换机配置修订号重置**。
|
||||
|
||||
> __重要提示:__ 当以匹配的 VTP 域名,同时有着较高修订号的一台交换机被配置为 VTP 服务器,或者 VTP 客户端而接入到网络中时,它的数据库将会被通告给其它交换机,进而潜在地将它们各自现有的 VTP 数据库进行替换。这有可能会将整个局域网拖垮,所以在将一台新交换机连入到局域网时,一定要小心谨慎(总是要检查检查当前的 VTP 状态)。
|
||||
> **重要提示:** 当以匹配的 VTP 域名,同时有着较高修订号的一台交换机被配置为 VTP 服务器,或者 VTP 客户端而接入到网络中时,它的数据库将会被通告给其它交换机,进而潜在地将它们各自现有的 VTP 数据库进行替换。这有可能会将整个局域网拖垮,所以在将一台新交换机连入到局域网时,一定要小心谨慎(总是要检查检查当前的 VTP 状态)。
|
||||
|
||||
|
||||
## VLAN 故障排除基础, Basic VLAN Troubleshooting
|
||||
@ -563,9 +574,9 @@ VLANs 是一种相当直观的交换机特性,它很少需要进行故障排
|
||||
|
||||
下面是一些问题实例机器可能的解决方法。
|
||||
|
||||
* 中继宕掉?
|
||||
* 接口务必要是 up/up
|
||||
* 中继链路两端的封装方式要匹配
|
||||
+ 中继宕掉?
|
||||
- 接口务必要是 up/up
|
||||
- 中继链路两端的封装方式要匹配
|
||||
|
||||
<pre>
|
||||
SwitchA#show interface fa1/1 switchport
|
||||
@ -579,22 +590,22 @@ Negotiation of Trunking: Disabled
|
||||
Access Mode VLAN: 0 ((Inactive))
|
||||
</pre>
|
||||
|
||||
* VLAN 信息未有传输
|
||||
* 该 VLAN 在中继链路上阻塞了吗
|
||||
+ VLAN 信息未有传输
|
||||
- 该 VLAN 在中继链路上阻塞了吗
|
||||
`Switch#show interface trunk`
|
||||
|
||||
* VTP 信息无法到达 VTP 客户端
|
||||
* VTP 域名称密码正确吗?
|
||||
+ VTP 信息无法到达 VTP 客户端
|
||||
- VTP 域名称密码正确吗?
|
||||
|
||||
`show vtp status / show vtp password`
|
||||
|
||||
* 在增加一台新的交换机后,所有 VTP 信息都变动了
|
||||
* 总是客户端模式加入新的交换机(但请查看上面的有关“配置修订号(the configuration revision number)”的提示)
|
||||
* 服务器模式将通告新信息
|
||||
+ 在增加一台新的交换机后,所有 VTP 信息都变动了
|
||||
- 总是客户端模式加入新的交换机(但请查看上面的有关“配置修订号(the configuration revision number)”的提示)
|
||||
- 服务器模式将通告新信息
|
||||
|
||||
* VTP 修剪无效
|
||||
* 中间是否有一台透明交换机?
|
||||
* 该 VLAN 允许通过该中继链路?
|
||||
+ VTP 修剪无效
|
||||
- 中间是否有一台透明交换机?
|
||||
- 该 VLAN 允许通过该中继链路?
|
||||
|
||||
## VLAN 间路由故障排除, Troubleshooting Inter-VLAN Routing
|
||||
|
||||
@ -602,18 +613,18 @@ VLAN 间路由故障可以多种形式出现,尤其是考虑在该过程中涉
|
||||
|
||||
从连通性立足点上看,下面这些情事都应该检查一下。
|
||||
|
||||
* 检查一下终端主机连接了正确的交换机端口
|
||||
* 检查一下正确的交换机端口连接了正确的路由器端口(如使用了一台路由器做 VLAN 间路由)
|
||||
* 检查一下在此过程中所涉及到的每个端口承载的是正确的 VLANs
|
||||
* 连接终端站的那些端口,通常是被分配到一个特定 VLAN 的接入端口
|
||||
* 而将交换机连接至路由器的那些端口,则通常是中继端口
|
||||
+ 检查一下终端主机连接了正确的交换机端口
|
||||
+ 检查一下正确的交换机端口连接了正确的路由器端口(如使用了一台路由器做 VLAN 间路由)
|
||||
+ 检查一下在此过程中所涉及到的每个端口承载的是正确的 VLANs
|
||||
- 连接终端站的那些端口,通常是被分配到一个特定 VLAN 的接入端口
|
||||
- 而将交换机连接至路由器的那些端口,则通常是中继端口
|
||||
|
||||
在确认设备之间的连通性无误后,逻辑上下一步就是检查二层配置了,__以所配置的中继端口上的封装方式开始__, 这通常是作为首选的 802.1Q 封装方式。接着就要确保中继链路两端都是配置了同样的封装方式。
|
||||
在确认设备之间的连通性无误后,逻辑上下一步就是检查二层配置了,**以所配置的中继端口上的封装方式开始**, 这通常是作为首选的 802.1Q 封装方式。接着就要确保中继链路两端都是配置了同样的封装方式。
|
||||
|
||||
可用于查看封类型的一些命令有以下这些。
|
||||
|
||||
* `show interface trunk`
|
||||
* `show interface <number> switchport`
|
||||
+ `show interface trunk`
|
||||
+ `show interface <number> switchport`
|
||||
|
||||
这里有个输出示例。
|
||||
|
||||
@ -633,9 +644,9 @@ Fa0/2 1-99,201-4094
|
||||
|
||||
假如在完成二层检查任务后,VLAN 间路由问题仍然存在,你就可以继续进行三层配置检查了。依据用于实现 VLAN 间路由的三层设备,可能会在下列设备上进行配置及配置检查。
|
||||
|
||||
* 多层交换机,multilayer switch
|
||||
* 路由器 -- 物理接口, router -- physical interfaces
|
||||
* 路由器 -- 子接口,router -- subinterfaces
|
||||
+ 多层交换机,multilayer switch
|
||||
+ 路由器 -- 物理接口, router -- physical interfaces
|
||||
+ 路由器 -- 子接口,router -- subinterfaces
|
||||
|
||||
|
||||
三层设备上应该检查一下其各接口(或者交换机虚拟接口,SVI)都有分配的正确的子网,同时如有必要,你还应检查一下路由协议。通常情况下,各个 VLAN 都有分配不同的子网,所以你应确保你未曾错误配置了接口。而为检查此项,你可以对特定物理接口、子接口或是 SVI,使用 `show interface` 命令。
|
||||
@ -675,15 +686,15 @@ Fa0/2 1-99,201-4094
|
||||
|
||||
### VLAN 和中继实验
|
||||
|
||||
__拓扑图,Topology__
|
||||
**拓扑图,Topology**
|
||||
|
||||

|
||||
|
||||
__实验目的,Purpose__
|
||||
**实验目的,Purpose**
|
||||
|
||||
学习如何配置 VLANs 以及中继链路。
|
||||
|
||||
__实验步骤,Walkthrough__
|
||||
**实验步骤,Walkthrough**
|
||||
|
||||
1. 你需要在每台 PC 上添加 IP 地址。可自由选择,只要求它们在同一子网上。
|
||||
2. 在交换机 A 上设置主机名(hostname), 创建 VLAN 2, 并将连接 PC 的那个接口放到 VLAN 2 中。如你愿意,你也可以赋予 VLAN 2 一个名称。
|
||||
@ -748,18 +759,18 @@ Port Vlans allowed on trunk
|
||||
|
||||
5. 此时,如你自其中一台 PC ping 往另一台,将会失败。这是因为一边是在 VLAN 1 中,另一边在 VLAN 2 中。
|
||||
|
||||
```
|
||||
<pre>
|
||||
PC>ping 192.168.1.1
|
||||
Pinging 192.168.1.1 with 32 bytes of data:
|
||||
Request timed out.
|
||||
Ping statistics for 192.168.1.1:
|
||||
Packets: Sent = 2, Received = 0, Lost = 2 (100% loss)
|
||||
```
|
||||
</pre>
|
||||
|
||||
6. 此时在交换机 B 上配置同样的那些命令。创建 VLAN、将交换机 PC 端口放入 VLAN 2,并将该接口设置为接入模式,还要将中继链路设置为 “中继”。
|
||||
7. 现在你就可以从一台 PC 实现跨越中继链路 ping 通另一 PC 了。
|
||||
|
||||
```
|
||||
<pre>
|
||||
PC>ping 192.168.1.1
|
||||
Pinging 192.168.1.1 with 32 bytes of data:
|
||||
Reply from 192.168.1.1: bytes=32 time=188ms TTL=128
|
||||
@ -770,21 +781,18 @@ Ping statistics for 192.168.1.1:
|
||||
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
|
||||
Approximate round trip times in milli-seconds:
|
||||
Minimum = 78ms, Maximum = 188ms, Average = 109ms
|
||||
```
|
||||
</pre>
|
||||
|
||||
|
||||
### VTP 实验
|
||||
|
||||
在一个又两台交换机组成的拓扑中,实验今天所提到的那些 VTP 配置命令。
|
||||
|
||||
* 将其中一台交换机配置为 VTP 服务器
|
||||
* 将另一台交换机配置为 VTP 客户端
|
||||
* 在两台交换机上配置同样的 VTP 域及口令(the same VTP domain and password)
|
||||
* 在服务器交换机上创建一系列的 VLANs,然后观察它们是如何彼此之间是如何通告的
|
||||
* 在两台交换机上都配置 VTP 修剪(VTP pruning)
|
||||
* 在两台交换机上检查(展示) VTP 配置
|
||||
* 在两台交换机上配置不同的 VTP 域及口令,并重复上述过程;观察结果的不同
|
||||
|
||||
|
||||
|
||||
+ 将其中一台交换机配置为 VTP 服务器
|
||||
+ 将另一台交换机配置为 VTP 客户端
|
||||
+ 在两台交换机上配置同样的 VTP 域及口令(the same VTP domain and password)
|
||||
+ 在服务器交换机上创建一系列的 VLANs,然后观察它们是如何彼此之间是如何通告的
|
||||
+ 在两台交换机上都配置 VTP 修剪(VTP pruning)
|
||||
+ 在两台交换机上检查(展示) VTP 配置
|
||||
+ 在两台交换机上配置不同的 VTP 域及口令,并重复上述过程;观察结果的不同
|
||||
|
867
d05-IP-Addressing.md
Normal file
@ -0,0 +1,867 @@
|
||||
# 第五天
|
||||
|
||||
**IP 地址分配**
|
||||
**IP Addressing**
|
||||
|
||||
## 第五天的任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读 ICND1 记诵指南
|
||||
+ 花 15 分钟浏览 [subnetting.org](http://subnetting.org/) 网站
|
||||
|
||||
欢迎来到今天的学习,许多人都发现今天的内容是 CCNA 大纲中最难掌握的部分之一。为理解 CCNA 考试的 IP 分址, 我们必须涵盖**二进制运算及十六进制计数系统**(binary mathematics and the hexadecimal numbering system)、**地址类别**(classes of adresses)、**2 的指数**(powers of two)和**诸如零号子网(subnet zero)等规则**, 以及**广播地址与网络地址**,还有**用于计算子网地址和主机地址的公式**。
|
||||
|
||||
尽管有这些难点,但请无需担心;这都是有个过程的,而不是一蹴而就的,所以请跟上课文,就一定会发现我们会在本书中屡次回顾到这些概念。
|
||||
|
||||
今天会学到这些内容。
|
||||
|
||||
+ IP 分址(采用二进制和十六进制),IP addressing (using binary and hexadecimal)
|
||||
+ IP 地址的使用,Using IP addresses
|
||||
+ 子网划分,Subnetting
|
||||
+ 简易子网划分,Easy subnetting
|
||||
+ 网络规划设计,Network design
|
||||
+ 采用 VLSM, Using VLSM
|
||||
+ 切分网络,Slicing down networks
|
||||
|
||||
本模块对应的是 CCNA 大纲要求的以下部分。
|
||||
|
||||
+ 描述 IPv4 分址中使用私有和公共 IP 地址的做法和必要性,Describe the operationg and necessity of using private and public IP addresses for IPv4 addressing
|
||||
+ 找出采行 VLSM 和汇总技术,用以满足某个 LAN/WAN 环境中分址要求的恰当 IPv4 分址方案,Identify the appropriate IPv4 addressing scheme using VLSM and summarisation to satisfy addressing requirements in a LAN/WAN environment
|
||||
+ 对有关 IP 分址和主机配置有关的故障进行排除和修正, Troubleshoot and correct common problems associated with IP addressing and host configurations
|
||||
|
||||
思科已经将一些 VLSM 要求加入到 ICND1 和 ICND2 考试中了。而在 ICND2 考试中看起来考得更多一些,不过两个考试都需要你做好解答问题的准备。**在掌握 VLSM 前,你需要先理解 IP 分址和子网划分**。
|
||||
|
||||
## IP 分址,IP addressing
|
||||
|
||||
网络上的所有设备,都需要某种方法来将其识别为某台特定主机。早期网络简单地采用某种命名格式,同时服务器上维护着一张 MAC 地址与主机名称的映射图。服务器上的表格迅速增长,伴随其产生诸如一致性及准确性(consistency and accuracy)问题(如图 5.1)。IP 分址有效地解决了此问题。
|
||||
|
||||

|
||||
|
||||
### IP 版本 4, IP Version 4
|
||||
|
||||
IP 版本 4(IPv4)设计用于解决设备命名问题。IPv4 使用二进制在网络设备上应用一个地址。它使用 32 位二进制数,分成每 8 位的 4 组。下面是二进制的 IPv4 地址的一个实例。
|
||||
|
||||
`11000000.10100011.11110000.10101011`
|
||||
|
||||
以十进制来看,就是。
|
||||
|
||||
`192.168.240.171`
|
||||
|
||||
每一个二进制位表示一个十进制数,你可以在相应的列中,依据该列是 1 还是 0, 而使用或不用其对应的十进制数。下面是 8 个列。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
|
||||
</table>
|
||||
|
||||
从上表中可以看到,仅有前两个十进制数被用到(下方有 1 的两个),这就产生出数值 128+64=192。
|
||||
|
||||
### 二进制,Binary
|
||||
|
||||
为理解 IP 寻址(IP addressing)的工作原理, 你需要理解二进制计数法(binary mathematics)。计算机及网络设备是不理解十进制的。我们使用 10 进制,是由于它是一种使用了 10 个数字的计数系统,由很久很久以前的穴居人类在意识到他有 10 个手指头,可以在有恐龙经过洞口时用来数恐龙时发明的。
|
||||
|
||||
计算机和网络设备只明白电信号。而电信号不是开就是关,唯一可用的计数系统就是二进制。二进制只用到两个数字,0 和 1。0 表示线路上没有电脉冲,而 1 就表示线路上有一个脉冲。
|
||||
|
||||
使用二进制值,可以生成任何数字。加的二进制数值越多,得到的数量就越大。所加入的每个二进制值,其下一个数字都要是它的两倍(也就是,1 到2到4到8到16,以致无穷),从右往左。如有两位,最多可计到3。只需将0或1放入到表格的列中,以确定是否要使用该列的值。
|
||||
|
||||
我们从仅有两位的二进制数开始。
|
||||
|
||||
<table>
|
||||
<tr><td>2</td><td>1</td></tr>
|
||||
<tr><td>0</td><td>0</td></tr>
|
||||
</table>
|
||||
|
||||
0+0=0
|
||||
|
||||
<table>
|
||||
<tr><td>2</td><td>1</td></tr>
|
||||
<tr><td>0</td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
0+1=1
|
||||
|
||||
<table>
|
||||
<tr><td>2</td><td>1</td></tr>
|
||||
<tr><td>1</td><td>0</td></tr>
|
||||
</table>
|
||||
|
||||
2+0=2
|
||||
|
||||
<table>
|
||||
<tr><td>2</td><td>1</td></tr>
|
||||
<tr><td>1</td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
2+1=3
|
||||
|
||||
如你使用8位二进制数(也就是一个八位字节),你能取得如何从0到255之间的数值。而你可以看到,这些位数自右往左移动。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td> </td></tr>
|
||||
</table>
|
||||
|
||||
在往各列中填入0时,就有了十进制的0。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
|
||||
</table>
|
||||
|
||||
而将1填入各列,就得到了十进制的255.
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
不信吗?
|
||||
|
||||
128+64+32+16+8+4+2+1=255
|
||||
|
||||
如此,逻辑使然,你实际上可以通过将0或1放入不同的列,而生成0到255之间的任何数值。比如。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>1</td><td>0</td><td>0</td></tr>
|
||||
</table>
|
||||
|
||||
32+8+4=44
|
||||
|
||||
**上面的基础知识,是IP寻址和子网划分的基础。**下面的表5.1对你现在所掌握的进行了总结。这些值可用作任意子网掩码,所以请留心一下。
|
||||
|
||||
**表 5.1 -- 二进制值,Binary Values**
|
||||
|
||||
<table>
|
||||
<tr><th>二进制,Binary</th><th>十进制,Decimal</th></tr>
|
||||
<tr><td>1000 0000</td><td>128</td></tr>
|
||||
<tr><td>1100 0000</td><td>192</td></tr>
|
||||
<tr><td>1110 0000</td><td>224</td></tr>
|
||||
<tr><td>1111 0000</td><td>240</td></tr>
|
||||
<tr><td>1111 1000</td><td>248</td></tr>
|
||||
<tr><td>1111 1100</td><td>252</td></tr>
|
||||
<tr><td>1111 1110</td><td>254</td></tr>
|
||||
<tr><td>1111 1111</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
构造一些你自己的二进制数,确保你完全地掌握了这个概念。
|
||||
|
||||
### 十六进制,Hexadecimal
|
||||
|
||||
十六进制(hex)是另一个替代的计数系统。比起以2或10来计数,它用到16个数字或字母。十六进制从0开始知道F,如下面所示。
|
||||
`0 1 2 3 4 5 6 7 8 9 A B C D E F`
|
||||
|
||||
每位十六进制数实际上代表的是4位二进制数,如表5.2所示。
|
||||
|
||||
**表5.2 -- 十进制、十六进制和二进制位数,Decimal, Hex, and Binary Digits**
|
||||
|
||||
<table>
|
||||
<tr><th>十进制,Decimal</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>
|
||||
<tr><th>十六进制,Hex</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>
|
||||
<tr><th>二进制,Binary</th><td>0000</td><td>0001</td><td>0010</td><td>0011</td><td>0100</td><td>0101</td><td>0110</td><td>0111</td></tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr><th>十进制,Decimal</th><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td></tr>
|
||||
<tr><th>十六进制,Hex</th><td>8</td><td>9</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td></tr>
|
||||
<tr><th>二进制,Binary</th><td>1000</td><td>1001</td><td>1010</td><td>1011</td><td>1100</td><td>1101</td><td>1110</td><td>1111</td></tr>
|
||||
</table>
|
||||
|
||||
将二进制转换成十六进制及十进制,是相当简单的,如表5.3所示。
|
||||
|
||||
**表5.3 -- 二进制到十六进制、十进制的转换**
|
||||
<table>
|
||||
<tr><th>十进制,Decimal</th><td>13</td><td>6</td><td>2</td><td>12</td></tr>
|
||||
<tr><th>十六进制, Hex</th><td>D</td><td>6</td><td>2</td><td>C</td></tr>
|
||||
<tr><th>二进制,Binary</th><td>1101</td><td>0110</td><td>0010</td><td>1100</td></tr>
|
||||
</table>
|
||||
|
||||
相对于二进制,十六进制对人类来讲更易于掌握,其又能够近似于二进制那样为计算机和网络设备所使用。任何的数都可由十六进制构造出来,这点跟二进制和十进制一样;如下面的例子一样,只需计算16的乘积。
|
||||
|
||||
<pre>
|
||||
1 x 16 = 16
|
||||
16 x 16 = 256
|
||||
16 x 16 x 16 =4096
|
||||
</pre>
|
||||
|
||||
如此等等。
|
||||
|
||||
<table>
|
||||
<tr><th rowspan="2">十六进制,Hex</th><td>4096</td><td>256</td><td>16</td><td>1</td></tr>
|
||||
<tr><td></td><td></td><td>1</td><td>A</td></tr>
|
||||
</table>
|
||||
|
||||
在以十六进制数数时,就要像这样,0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1F 1E 1F 20 21 22, 等等, 一直到无穷。比如上面的 1A, 就是在 1 的列上有个 A,在 16 的列上有个 1, 那么: 1A = 10 + 16 = 26。
|
||||
|
||||
在将二进制转换成十六进制时,如你将8位的二进制数分为4位一组的两组,就变得相当容易了。如此一来,二进制数 11110011 就成了 1111 0011。1111 就是 8 + 4 + 2 + 1 = 15, 而 0011 就是 2 + 1 = 3。15 就是十六进制的 F,3 就是 3, 所以答案就是 F3。你可以通过表 5.2 来验证这点。
|
||||
|
||||
|
||||
而十六进制到二进制的转换,其过程与此一致。比如,7C 可分解为 7, 也就是二进制的 0111, 及 C (十进制的 12), 它是二进制的 1100。答案就是 01111100。
|
||||
|
||||
|
||||
### 转换练习,Converting Exercise
|
||||
|
||||
这里有些你可以试做的例题。在进行计算前,先写出上面的表格(也就是现实 1 这列,接着是 16 这列,再是 256 列,等等)。
|
||||
|
||||
1. 将1111转换成十六进制和十进制。
|
||||
2. 将11010转换成十六进制和十进制。
|
||||
3. 将10000转换成十六进制和十进制。
|
||||
4. 将20转换成二进制和十六进制。
|
||||
5. 将32转换成二进制和十六进制。
|
||||
6. 将101转换成二进制和十六进制。
|
||||
7. 将A6从十六进制转换成十进制和二进制。
|
||||
8. 将15从十六进制转换成十进制和二进制。
|
||||
9. 将B5从十六进制转换成十进制和二进制。
|
||||
|
||||
在考试中,写出表5.2,有助于你完成三种进制之间的转换。
|
||||
|
||||
IP 地址分配的规则有:**网络上的每个地址,都要是其主机所唯一的(也就是说 IP 地址不能共用)**。**一些地址不能用作主机地址**。这将在后面的章节涉及,但在这里,**要知道为整个网络保留的那个地址,也就是广播地址,以及保留用于测试目的的那些地址,此外,有三组保留的用于内部网络的地址(此举正是为节省 IP 地址),是不能使用的**。
|
||||
|
||||
由于网络规模的迅速增长,每个IP地址就必须与一个子网掩码配合使用。子网掩码是要告诉网络设备,怎样来使用IP地址中的数字。而此举的用意,就是可以借用地址中的主机位,将网络切割为更小的子网。
|
||||
|
||||
这里有个带子网掩码的IP地址实例,`192.168.1.1 255.255.255.0`。
|
||||
|
||||
## 地址类别,Address Classes
|
||||
|
||||
你是要掌握这个的,却没有掌握吧。我知道我是不能帮你太多的,但地址类别实际上是明显过时的了,所以作为一名思科工程师,当你在见到这种老规矩时,总是会感到迷惑,却还要把这些规则用到网络设计中去。
|
||||
|
||||
现在我们仍然将IP地址组别叫做类(classes),但随着子网掩码和变长子网掩码(Variable-Length Subnet Masking,VLSM)概念的引入,地址类实际上已不再适用于网络设计了。掌握地址类别仍然是有用的,因为类别的不同可以让我们清楚,在小型网络(子网)中,可以使用哪些IP地址,而不能使用另一些。
|
||||
|
||||
在IPv4刚推出时,其地址就分成了不同类别。不同地址类别依其需求而分配给各家机构。机构越大,地址类别就越大。不同地址类别又指定了相应字母,从A到E。A 类地址保留给最大的一些网络。而A类地址的前8个二进制位可以是从1到126的数。此举的原因在于其前8位的首位必须是0。而当前8位中有了第一位的0时,那么剩下的值就只能是1到126了。也就是下面这样。
|
||||
|
||||
<b>0</b> 000 0001 = 1
|
||||
|
||||
<b>0</b> 111 1111 = 126
|
||||
|
||||
**在网络中,是不可以有全0地址的**。在加入其它三个8位二进制数后,就可以看到A类地址的全貌了。就像下面的那样。
|
||||
|
||||
`10.1.1.1`
|
||||
|
||||
`120.2.3.4`
|
||||
|
||||
`126.200.133.1`
|
||||
|
||||
这些都是A类地址,因为它们都是在1到126的范围内。127不是IP地址所允许的数字;**127.0.0.1实际上用于在设备上测试TCP/IP是否正常**。
|
||||
|
||||
B类地址前8位二进制数的头两位则必须是10。这就意味着前8位二进制数值处于128到191之间,也就是下面这样。
|
||||
|
||||
<b>10</b> 00 0000 = 128
|
||||
|
||||
<b>10</b> 11 1111 = 191
|
||||
|
||||
对于C类地址来说,前8位二进制数的头三位必需为110, 那么地址就在192到223之间,也就是下面这样。
|
||||
|
||||
<b>110</b> 0 0000 = 192
|
||||
<b>110</b> 1 1111 = 223
|
||||
|
||||
D类地址用于多播(multicasting, directed broadcasting, 受导向的广播),而E类地址则仅用于实验用途。
|
||||
|
||||
###子网掩码初步,Subnet Mask Primer
|
||||
|
||||
先前提到过IP地址用于区分网络的部分以及用于区分网络上主机地址的部分。子网掩码的作用就是确立此两部分。难点就在于并不总是能仅仅看一眼子网掩码,就能知道IP地址的网络部分和主机部分。这需要实践,且对于那些更难的地址,你就必须要动手计算出来(或是使用某个子网计算程序来作弊)。
|
||||
|
||||
就算未曾将网络划分成更小的部分,你仍需采用为用到的每个地址应用一个子网掩码。而上面提到的地址类,它们都有一个默认的子网掩码,如同下面这样。
|
||||
|
||||
```
|
||||
A类地址 = 255.0.0.0
|
||||
B类地址 = 255.255.0.0
|
||||
C类地址 = 255.255.255.0
|
||||
```
|
||||
|
||||
在二进制位开启时,网络就知道该位是用作网络地址,而不是网络上的主机地址,如下表所示。
|
||||
|
||||
<table>
|
||||
<tr><td>192</td><td>168</td><td>12</td><td>2</td></tr>
|
||||
<tr><td>255</td><td>255</td><td>255</td><td>0</td></tr>
|
||||
<tr><td>网络位</td><td>网络位</td><td>网络位</td><td>主机位</td></tr>
|
||||
</table>
|
||||
|
||||
上面的地址表明 `192.168.12` 是网络地址,`2` 是该网络上的一台主机。再者,任何以`192.168.12`开头的IP地址,都是在同一网络上的。而在看看前8位的数字,以及该默认的子网掩码,就知道这是一个C类网络。
|
||||
|
||||
请记住早前提到的规则:主机所不能使用的那些网络号,那么下面的这些网络号就不能为设备所使用了。
|
||||
|
||||
10.<b>0.0.0</b>
|
||||
|
||||
174.12.<b>0.0</b>
|
||||
|
||||
192.168.2.<b>0</b>
|
||||
|
||||
另一规则是你不能使用各个网络或子网上的广播地址。某广播地址是前往网络上所有设备,那么,逻辑上就不能为设备所使用了。广播地址就是将所有主机位开启的地址,像下面这样。
|
||||
|
||||
10.<b>255.255.255</b>
|
||||
|
||||
192.168.1.<b>255</b>
|
||||
|
||||
在上面的例子中,主机部分的所有二进制位都是打开的。
|
||||
|
||||
##IP地址的使用,Using IP Addresses
|
||||
|
||||
接下来就是IP地址使用实务了,在这里我们要探讨一下哪些可以使用,哪些又不能使用。
|
||||
|
||||
你知道在过去二十年中计算机的使用曾有一个大暴发。个人计算机曾是十分昂贵的物品,以致只有少数人才买得起;因此只有那些有钱的机构才会保有使用。今天,几乎每个家庭都有那么一台或几台计算机了。
|
||||
|
||||
问题就在于IPv4实在仅有少数设备投入使用时发明的,且那时未曾预期到会有如此大的变化。在地址分配时,就意识到了如今的增长率,我们将很快用完可用的地址。
|
||||
|
||||
###私有IP地址,Private IP Addresses
|
||||
|
||||
几种解决方案之一就是保留一些类别的地址给那些要用的人,同时这些地址不再国际互联网上使用。这些地址就是私有IP地址,而此方案是由 1918 和 4193 两个RFC所构建的。
|
||||
|
||||
下面就是私有地址的几个范围。
|
||||
|
||||
10.x.x.x -- 以10开头的地址
|
||||
|
||||
172.16.x.x 到172.31.x.x -- 172.16到172.31中的那些地址
|
||||
|
||||
192.168.x.x -- 以192.168开头的那些地址
|
||||
|
||||
##子网划分,Subnetting
|
||||
|
||||
子网划分让我们可以从一般用于网络上的主机位的那些IP地址位中,进行借用。此时就可以自较大的网络空间,划出一些更小的网络了,这些较小的网络,就被成为子网(subnetworks, 简写为subnets)。
|
||||
|
||||
在对三类可用地址应用默认子网掩码时,你会发现不能用于划分子网的地址部分,如下面的表格所示。
|
||||
|
||||
<table>
|
||||
<tr><td>A类 -- 255</td><td>0</td><td>0</td><td>0</td></tr>
|
||||
<tr><td background="grey">不能使用</td><td>可以使用</td><td>可以使用</td><td>可以使用</td></tr>
|
||||
<tr><td>B类 -- 255</td><td>255</td><td>0</td><td>0</td></tr>
|
||||
<tr><td>不能使用</td><td>不能使用</td><td>可以使用</td><td>可以使用</td></tr>
|
||||
<tr><td>C类 -- 255</td><td>255</td><td>255</td><td>255</td></tr>
|
||||
<tr><td>不能使用</td><td>不能使用</td><td>不能使用</td><td>可以使用</td></tr>
|
||||
</table>
|
||||
|
||||
比如,如你将某个C类网络以默认子网掩码方式使用,那么就是这样的。
|
||||
|
||||
<table>
|
||||
<tr><th>IP地址</th><td>192</td><td>168</td><td>1</td><td>0</td></tr>
|
||||
<tr><th>子网掩码</th><td>255</td><td>255</td><td>255</td><td>0</td></tr>
|
||||
<tr><th>二进制形式</th><td>1111 1111</td><td>1111 1111</td><td>1111 1111</td><td>0000 0000</td></tr>
|
||||
<table>
|
||||
|
||||
在从后8位二进制数借用2位后,就会得到下面的子网,每个子网有62台主机。
|
||||
|
||||
<table>
|
||||
<tr><th>网络号</th><th>网络号</th><th>网络号</th><th>子网号</th><th>主机</th><th>广播地址</th></tr>
|
||||
<tr><td>192</td><td>168</td><td>1</td><td>0</td><td>1-62</td><td>63</td></tr>
|
||||
<tr><td>192</td><td>168</td><td>1</td><td>64</td><td>65-126</td><td>127</td></tr>
|
||||
<tr><td>192</td><td>168</td><td>1</td><td>128</td><td>129-190</td><td>191</td></tr>
|
||||
<tr><td>192</td><td>168</td><td>1</td><td>192</td><td>193-254</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
在较大的网络中,你原来可以使用到1至254的主机号,这样看来,在进行了子网划分后,可用的主机号减少了,但得到的是更多的网络数。下面的表说明了4个子网是怎么得来的。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td><td>子网号</td></tr>
|
||||
<tr><th>0</th><th>0</th><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
|
||||
<tr><th>0</th><th>1</th><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>64</td></tr>
|
||||
<tr><th>1</th><th>0</th><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>128</td></tr>
|
||||
<tr><th>1</th><th>1</th><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>192</td></tr>
|
||||
</table>
|
||||
|
||||
考虑二进制数学,你能发现对主机位的头两位使用,就可以使用00、01、10和11四种组合,在将其写出后,在子网列就得到子网0、64、128以及192四个子网号。为更明了的表示,头两列的子网号标记为灰色,而剩下的6位,就用作每个子网的主机号。
|
||||
|
||||
如你现在觉得很绕,这是正常的。我恐怕你会有点时间来适应的。
|
||||
|
||||
###简易子网划分,Easy Subnetting
|
||||
|
||||
在考试时,或是在现场网络上进行故障排除时,你会希望快速精确地得到结果。那么我就给出一直简易子网划分方法,是我的 Kindle 电子书“子网划分秘密/Subnetting Secrets”的内容。你无需通读该书,这里就要相关内容。
|
||||
|
||||
我所创建的网站 [www.subnetting.org](http://www.subnetting.org)是一个非常有用的资源,有着一些有个子网划分和网络设计的习题。
|
||||
|
||||
###无类域间路由,Classless Inter-Domain Routing, CIDR
|
||||
|
||||
无类域间路由是由互联网工程任务组(Internet Engineering Task Force, IETF)创建的,作为一种分配IP地址块及路由IP数据包的方法。这里要考察的CIDR主要特性,就是以斜杠(/)地址表示法(slash address notation), 来表示子网掩码。因为这可以节省时间,所以该方法是较为重要的,在现实中也要用到,而除此之外,还会考到有关CIDR地址的问题。
|
||||
|
||||
有了CIDR,你要将所用到的二进制位的树木写下来,以取代之前用到完整子网掩码。比如对于255.255.0.0, 它用到了两个8位二进制数,那么就会用/16来表示。又比如255.255.240.0, 使用到 8 + 8 + 4 个二进制位,就是/20了。
|
||||
|
||||
在网际互联是对子网掩码或是网络掩码的叫法,应该读作”斜杠16“或”斜杠20“, 如此来与同事配合工作,而他们就能明白你说的是一个CIDR掩码了。
|
||||
|
||||
###子网划分秘笈,The Subnetting Secrects Chart
|
||||
|
||||
此秘笈将从几个星期的子网划分纠葛中将你拯救。我(原作者)的这本秘笈,已为全世界上万的CCNA及CCNP学员所采用,他们用其通过考试,或是在工作面试中获得成功。
|
||||
|
||||
多年前,在我在为CCNA考试学习时偶然发现这个简易方法前,学员们都不得不将网络地址的二进制形式写下来,或是要进行痛苦地计算,来得到正确答案。
|
||||
|
||||
要写出秘笈所要用到的图表,你需要一只铅笔和一张纸。在考试中,因为只会给你一块白板用于计算,你需要凭记忆将该图表画出来。而在工作面试中,你是可以使用铅笔和白纸的。
|
||||
|
||||
在白纸的顶部右边,写下1, 再往左依次写下乘以2的结果,分别是2、4、8,并一直乘以2, 直到数字128。那么就有了一组8位二进制数了。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
在128这个数往下,写下第一个格子里的数的和(128的那个格子)。接着再写下到第二个格子里的数的和(64),接着到第三个(32), 直到将所有8个格子的数加完为止。
|
||||
|
||||
<table>
|
||||
<tr><td>128</td></tr>
|
||||
<tr><td>192</td></tr>
|
||||
<tr><td>224</td></tr>
|
||||
<tr><td>240</td></tr>
|
||||
<tr><td>248</td></tr>
|
||||
<tr><td>252</td></tr>
|
||||
<tr><td>254</td></tr>
|
||||
<tr><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
在将两部分放在一起后,就得到了秘笈图表的上半部分了。
|
||||
|
||||
<table>
|
||||
<tr><td>二进制位数</td><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>子网号</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>128</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>192</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>224</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>240</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>248</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>252</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>254</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>255</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
顶上的行表示子网掩增量,而左侧的列则表示子网掩码。使用这个图表后,你就可以在数秒内回答任何子网划分的问题了。而那个可指明任何网络设计问题,诸如在以某子网掩码”X“划分网络时,可得到多少个子网和主机这样的问题,的答案的图表部分,只需加入”2的幂“就行了。
|
||||
|
||||
其中一列会是”2的幂“, 另一列就是”2的幂减去2。“ 减去的2的意思是要除去不能使用的两个地址,一个是网络号,另一个是广播地址。以数字2开始,乘以2, 一直到回答问题所需要的大小为止。
|
||||
|
||||
<table>
|
||||
<tr><td>二进制位数</td><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>子网号</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>128</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>192</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>224</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>240</td><td></td><td></td><td style="width:100px">为计算出主机所在的子网是哪一个</td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>248</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>252</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>254</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>255</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr style="background-color: grey"><td></td><td>子网数</td><td>主机数-2</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>2</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>4</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>8</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>16</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>32</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>64</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
通过直接切入一个考试问题,可以更好的学习到子网划分。
|
||||
|
||||
192.168.100.100/26 是在那个子网中?
|
||||
|
||||
那么,你知道这是一个C类地址,而C类地址的默认掩码是24个二进制位,或写着255.255.255.0。而这里是26位,所以有两位被借用来产生子网了。我们只需简单地在上面的秘笈图表中的顶上一行,从左往右勾上两个位置。这样就揭示出子网个数了。接着在子网号那列往下勾上两个位置,来揭示出所存在的子网掩码。
|
||||
|
||||
<table>
|
||||
<tr><td>二进制位数</td><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>子网号</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>128</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>192</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>224</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>240</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>248</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>252</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>254</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>255</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td></td><td>子网数</td><td>主机数-2</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>2</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>8</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>16</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>32</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>64</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
现在所知道的有两件事,子网号以64递增(可将0用作首个子网号),同时子网掩码/26以192结束,那么,该结束子网掩码的完整形式为255.255.255.192。
|
||||
|
||||
192.168.100.0 是第一个子网
|
||||
192.168.100.64是第二个子网
|
||||
192.168.100.128是第三个子网
|
||||
192.168.100.192是第四个子网
|
||||
|
||||
是不可以比实际的子网号有更多的了,也就是这里的192。不过记住问题是要你找出主机100。我们轻易地就看出子网64就是主机100所在的子网,因为下一子网是128, 那太高了。
|
||||
|
||||
下面为了知识的完整性,我加入了主机地址及广播地址。去下一子网号再减去1, 就可以很快算出广播地址来。
|
||||
|
||||
<table>
|
||||
<tr><th>子网</th><th>首台主机</th><th>最后的主机</th><th>广播地址</th></tr>
|
||||
<tr><td>192.168.100.0</td><td>192.168.100.1</td><td>192.168.100.62</td><td>192.168.100.63</td></tr>
|
||||
<tr><td>192.168.100.64</td><td>192.168.100.65</td><td>192.168.100.126</td><td>192.168.100.127</td></tr>
|
||||
<tr><td>192.168.100.128</td><td>192.168.100.129</td><td>192.168.100.190</td><td>192.168.100.191</td></tr>
|
||||
<tr><td>192.168.100.192</td><td>192.168.100.193</td><td>192.168.100.254</td><td>192.168.100.255</td></tr>
|
||||
</table>
|
||||
|
||||
考虑到IP地址是0到255之间的任何值。(不翻译了,太简单!)
|
||||
|
||||
##路由汇总,Route Summarisation
|
||||
|
||||
国际互联网上有数百万条路由。如果这些路由都不得不单独存储,因特网在好多年前就会停摆了。路由汇总,也就是常说的超网(supernetging), 是在 RFC 1338 中提出的,点击 RFC -- [www.faqs.org/rfcs/rfc1338.html](http://www.faqs.org/rfcs/rfc1338.html) 可以读到这个 RFC。
|
||||
|
||||
如你要阅读一份更详尽的路由汇总文档,那么去找一本 Jeff Doyle 的卓越的思科书*Routing TCP/IP Volume 1*, 现在该书出了第二版。
|
||||
|
||||
###邮编,ZIP Codes
|
||||
|
||||
美国邮政局用邮编来提升美国国内信件到地址的路由效率(见图 5.2)。邮编的第一位表示一组的美国州份,第二和三位表示那组中的一个区域。这个想法在于可以将信件或包裹经由机器或人工快速地路由到正确的州份,并转发到相应州份。在邮件到达该州时,又可以正确地路由到相应区域。从该区域有可以正确地路由到相应城市等等,直到邮件装入当地邮政投递人员的正确邮报为止。
|
||||
|
||||

|
||||
|
||||
*图5.2 -- 美国邮政编码*
|
||||
|
||||
###路由汇总的前提,Route Summarisation Prerequistes
|
||||
|
||||
为在网络上应用路由汇总,需要**使用某种无类协议**(a classless protocol, 这将在后面涉及),**比如RIPv2、EIGRP、或者OSPF**。同时**还需以层次化顺序方式设计网络(design your network in a hierarchical order), 这就需要仔细规划和设计**。这就意味着你—**不能随机地任意地在网络中给路由器或局域网分配网络**。
|
||||
|
||||
###应用路由汇总,Applying Route Summarisation
|
||||
|
||||
我们来看看一个实例网络,如不采用路由汇总,会有什么问题。在此实例中,说的就是在某网络上的IP地址范围下,汇总是如何工作的。图5.3中的路由器连着一些网络。头一种解决办法是将这些网络都通告给下一跳的路由器(the next-hop router)。而替代的做法是汇总这8个网络到一条路由,并将汇总结果发送给下一跳路由器,这样做可降低带宽、CPU和内存的需求。
|
||||
|
||||

|
||||
|
||||
*图5.3 -- 路由汇总的一个实例*
|
||||
|
||||
抱歉的是,计算出汇总路由(a summary route)的唯一方法是将IP地址转换成二进制形式。如你不这样做,就无法知道是否通告了正确的汇总路由,而这将导致网络故障。
|
||||
|
||||
首先,写出完整的所有网络地址,接着在右边写出其二进制形式,如下面所示。
|
||||
|
||||
<table>
|
||||
<tr><td>172.16.8.0</td><td><b>10101100.00010000.00001</b>000.00000000</td></tr>
|
||||
<tr><td>172.16.9.0</td><td><b>10101100.00010000.00001</b>001.00000000</td></tr>
|
||||
<tr><td>172.16.10.0</td><td><b>10101100.00010000.00001</b>010.00000000</td></tr>
|
||||
<tr><td>172.16.11.0</td><td><b>10101100.00010000.00001</b>011.00000000</td></tr>
|
||||
<tr><td>172.16.12.0</td><td><b>10101100.00010000.00001</b>100.00000000</td></tr>
|
||||
<tr><td>172.16.13.0</td><td><b>10101100.00010000.00001</b>101.00000000</td></tr>
|
||||
<tr><td>172.16.14.0</td><td><b>10101100.00010000.00001</b>110.00000000</td></tr>
|
||||
<tr><td>172.16.15.0</td><td><b>10101100.00010000.00001</b>111.00000000</td></tr>
|
||||
<tr><td>匹配的位</td><td>10101100.0010000.00001 = 21位</td></tr>
|
||||
</table>
|
||||
|
||||
我将每个网络地址中匹配的位进行了加粗。你可以看到各个网络地址的前21位是匹配的,所有汇总路由可由下面的21位反应出来。
|
||||
|
||||
`172.16.8.0 255.255.255.248.0`
|
||||
|
||||
运用路由汇总的另一个显著优势在于,如某个本地网络宕掉,汇总网络仍然可以通告出去。这就是说网络的其它部分无需更新其各自路由表(routing table), 甚至在更糟的情况下,无需去处理一条抖动路由(那种迅速起来又宕掉的路由)。下面有两个路由汇总的练习。
|
||||
|
||||
**练习一**: 写出下面的地址的二进制形式,并找出匹配的位。我已写出了它们的前两个8位,以节省你的时间。
|
||||
|
||||
<table>
|
||||
<tr><td>172.16.50.0</td><td><b>10101100.00010000.0</b>0110010.00000000</td></tr>
|
||||
<tr><td>172.16.60.0</td><td><b>10101100.00010000.0</b>0111100.00000000</td></tr>
|
||||
<tr><td>172.16.70.0</td><td><b>10101100.00010000.0</b>1000110.00000000</td></tr>
|
||||
<tr><td>172.16.80.0</td><td><b>10101100.00010000.0</b>1010000.00000000</td></tr>
|
||||
<tr><td>172.16.90.0</td><td><b>10101100.00010000.0</b>1011010.00000000</td></tr>
|
||||
<tr><td>172.16.100.0</td><td><b>10101100.00010000.0</b>1100100.00000000</td></tr>
|
||||
<tr><td>172.16.110.0</td><td><b>10101100.00010000.0</b>1101110.00000000</td></tr>
|
||||
<tr><td>172.16.120.0</td><td><b>10101100.00010000.0</b>1111000.00000000</td></tr>
|
||||
</table>
|
||||
|
||||
通告的汇总地址会是什么呢?
|
||||
|
||||
那就是 172.16.50.0 255.255.128.0, 或者/17。
|
||||
|
||||
**练习二**: 下面述及的机构有3台连接到公司总部的路由器。他们需要将通告自伦敦1、2、3号路由器的路由进行汇总。
|
||||
|
||||

|
||||
|
||||
*图5.4 -- 通告自伦敦1、2、3号路由器的汇总路由*
|
||||
|
||||
我们先从伦敦1号路由器开始。
|
||||
|
||||
<table>
|
||||
<tr><td>10.1.0.0</td><td>00001010.00000001.00000000.00000000</td></tr>
|
||||
<tr><td>10.1.1.0</td><td>00001010.00000001.00000001.00000000</td></tr>
|
||||
<tr><td>10.1.2.0</td><td>00001010.00000001.00000010.00000000</td></tr>
|
||||
<tr><td>10.1.3.0</td><td>00001010.00000001.00000011.00000000</td></tr>
|
||||
<tr><td>10.1.4.0</td><td>00001010.00000001.00000100.00000000</td></tr>
|
||||
<tr><td>10.1.5.0</td><td>00001010.00000001.00000101.00000000</td></tr>
|
||||
<tr><td>10.1.6.0</td><td>00001010.00000001.00000110.00000000</td></tr>
|
||||
<tr><td>10.1.7.0</td><td>00001010.00000001.00000111.00000000</td></tr>
|
||||
</table>
|
||||
|
||||
有21位匹配,所以伦敦1号路由器可向总部路由器通告10.1.0.0/21, 这个汇总路由。
|
||||
|
||||
再看伦敦2号路由器。
|
||||
|
||||
<table>
|
||||
<tr><td>10.1.8.0</td><td>00001010.00000001.00001000.00000000</td></tr>
|
||||
<tr><td>10.1.9.0</td><td>00001010.00000001.00001001.00000000</td></tr>
|
||||
<tr><td>10.1.10.0</td><td>00001010.00000001.00001010.00000000</td></tr>
|
||||
<tr><td>10.1.11.0</td><td>00001010.00000001.00001011.00000000</td></tr>
|
||||
<tr><td>10.1.12.0</td><td>00001010.00000001.00001100.00000000</td></tr>
|
||||
<tr><td>10.1.13.0</td><td>00001010.00000001.00001101.00000000</td></tr>
|
||||
<tr><td>10.1.14.0</td><td>00001010.00000001.00001110.00000000</td></tr>
|
||||
<tr><td>10.1.15.0</td><td>00001010.00000001.00001111.00000000</td></tr>
|
||||
</table>
|
||||
|
||||
伦敦2号也有21位匹配位,所以它可以往总部路由器通告10.1.8.0/21。
|
||||
|
||||
再看伦敦3号路由器。
|
||||
|
||||
<table>
|
||||
<tr><td>10.1.16.0</td><td>00001010.00000001.00010000</td></tr>
|
||||
<tr><td>10.1.17.0</td><td>00001010.00000001.00010001</td></tr>
|
||||
<tr><td>10.1.18.0</td><td>00001010.00000001.00010010</td></tr>
|
||||
<tr><td>10.1.19.0</td><td>00001010.00000001.00010011</td></tr>
|
||||
<tr><td>10.1.20.0</td><td>00001010.00000001.00010100</td></tr>
|
||||
<tr><td>10.1.21.0</td><td>00001010.00000001.00010101</td></tr>
|
||||
<tr><td>10.1.22.0</td><td>00001010.00000001.00010110</td></tr>
|
||||
<tr><td>10.1.23.0</td><td>00001010.00000001.00010111</td></tr>
|
||||
</table>
|
||||
|
||||
伦敦3号路由器同样有21位匹配位,因此它可以上游的中心路由器通告10.1.16.0/21。
|
||||
|
||||
**CCNA考试要求你掌握路由汇总**。如你能快速地算出同样的位,那么就可以快且准地回答问题了。
|
||||
|
||||
##变长子网掩码,Variable Length Subnet Masking, VLSM
|
||||
|
||||
###变长子网掩码的使用,Using VLSM
|
||||
|
||||
先看看下面这个网络。
|
||||
|
||||
+ 192.168.1.0/24 = 这是一个有254台主机的网络
|
||||
|
||||
当然这会很好地工作,那么如果你的网络需要多于一个的子网呢?或者你的那些子网无需254台这么多的主机呢?此两种情形,都需要做出一些改变。如你取而代之的是用一个/26的掩码,就可以得到这样的结果。
|
||||
|
||||
+ 192.168.1.0/26 = 4个有62台主机的子网
|
||||
|
||||
如这样不适当,那么来个/28的掩码如何?
|
||||
|
||||
+ 192.168.1.0/28 = 16个有14太主机的子网
|
||||
|
||||
对子网划分秘笈的设计部门的再度引用,可帮你计算出如何来在网络中应用变长子网掩码,或是有助于解答考试问题。在使用/26掩码是,你可以发现将会得到多少个子网及每个子网有多少台主机。
|
||||
|
||||
<table>
|
||||
<tr><td>二进制位数</td><td>128</td><td>64</td><td>32</td><td>16</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>子网号</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>128</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>192</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>224</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>240</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>248</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>252</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>254</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>255</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td></td><td>子网数</td><td>主机数-2</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>2</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>4</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>8</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>16</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>32</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>64</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
因为必须从主机位借用两位,所以得到4个子网,每个子网有62台主机。
|
||||
|
||||
###切开网络,Slicing Down Networks
|
||||
|
||||
变长子网掩码的关键在于取得网络块并令到这些网络块满足特定的网络需求(take your network block and make it work for your particular network needs)。那典型的网络地址192.168.1.0/24来说,在使用VLSM时,你可以使用掩码/26, 实现这样的划分。
|
||||
|
||||
<table>
|
||||
<tr><th>192.168.1.0/26</th><th>子网</th><th>主机数</th></tr>
|
||||
<tr><td>192.168.1.0</td><td>1</td><td>62</td></tr>
|
||||
<tr><td>192.168.1.64 -- 使用中</td><td>2</td><td>62</td></tr>
|
||||
<tr><td>192.168.1.128 -- 使用中</td><td>3</td><td>62</td></tr>
|
||||
<tr><td>192.168.1.192 -- 使用中</td><td>4</td><td>62</td></tr>
|
||||
</table>
|
||||
|
||||
在发现基础设施中有着两个仅需30台主机的较小网络之前,这么做是没有问题的。那么在已经使用了3个较小子网(标为“使用中”),而仅剩下一个(也就是192.168.1.0)时呢?变长子网掩码就可以让你用上任何已划分出的子网,对其再进行划分。**唯一的规则就是IP地址仅能使用一次,而与其掩码无关**。
|
||||
|
||||
如你使用子网划分秘笈图表,那么就可以看到哪个掩码带来30台主机的子网。
|
||||
|
||||
<table>
|
||||
<tr><td></td><td>子网数</td><td>主机数-2</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>2</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>4</td><td>〇</td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>8</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>16</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>32</td><td></td><td>〇</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
<tr><td>64</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
该图表的上面部分(这里没有显示)告诉我们在左边列勾选了3个位置,这就给出掩码224或者是/27(借用了3位)。
|
||||
|
||||
<table>
|
||||
<tr><th>192.168.1.0/27</th><th>子网</th><th>主机数</th></tr>
|
||||
<tr><td>192.168.1.0</td><td>1</td><td>30</td></tr>
|
||||
<tr><td>192.168.1.32</td><td>2</td><td>30</td></tr>
|
||||
<tr><td>192.168.1.64</td><td>不能使用</td><td>不能使用</td></tr>
|
||||
</table>
|
||||
|
||||
是不可以使用.64子网的,因为该子网已被使用了。现在就可以使用其余两个子网了。如你只需使用一个,那么就还可以将剩下的那个进行进一步划分,得到更多的子网,只是每个子网中的主机数更少而已。
|
||||
|
||||
##IP分址故障排除,Troubleshooting IP Addresses Issues
|
||||
|
||||
###子网掩码及网关故障的排除
|
||||
|
||||
在出现IP分址、子网掩码或网关问题时,你会看到多种现象。一些问题会如同下面这样。
|
||||
|
||||
+ 网络设备可在其本地子网通信,却无法与本地网络之外的设备通信。这通常表明有着与网关配置或运行相关类型的问题。
|
||||
+ 没有任何类型的IP通信,不管是内部的还是远程的。这通常表明存在大问题,可能涉及相应设备上功能的缺失。
|
||||
+ 还有这种能与某些IP地址通信,却无法与存在的全部IP地址通信的情形。这通常是最难解决的故障,因为其可能有很多原因。
|
||||
|
||||
在处理这些问题的过程中,**首先要做的就是对设备上所配置的IP地址、子网掩码及默认网关进行反复检查**。同时**还要查看设备文档,来验证相应信息**。**大量的故障都是由错误配置造成的**。
|
||||
|
||||
如你正在首次安装一些网络设备,多半要手动输入一些IP地址、子网掩码和默认网关等信息。建议在进行提交前进行检查,因为这方面人所犯的错误是难免的。**许多企业都有关于将新设备引入网络的手册, 包括网关测试及到SNMP服务器的可达能力**。
|
||||
|
||||
如需在故障排除过程中收集信息,可能需要**做一下包捕获,以此来观察设备间发送了哪些数据包**。**如果看到有来自其它网络上主机的包,就可能存在某种VLAN错误配置问题**。**如怀疑子网掩码不正确,就要检查网络上其它设备的参数**。如果其它机器工作良好,就要在该设备上使用如预期一样无法工作的同一子网掩码,并再行测试。
|
||||
|
||||
在使用了动态主机分址(DHCP)来为网络上的设备分配包括子网掩码和网关的地址信息时,就要**检查DHCP服务器配置**,因为此时问题可能发生在另一方面了。DHCP服务器错误配置或者DHCP服务已阻塞,都是可能的,所以在故障排除时包含这一步是必要的。务必还要记住从DHCP地址池中排除一些保留地址,因为这些地址通常会分配给服务器及路由器接口。
|
||||
|
||||
另一些有助于找出网络故障发生所在之处的故障排除工具有traceroute和ping。在本书及本书实验中会有涉及。
|
||||
|
||||
##第五天的问题,Day 5 Questions
|
||||
|
||||
1. Convert `192.160.210.177` into binary (without using a calculator).
|
||||
2. Convert `10010011` into decimal.
|
||||
3. What is the private range of IP addresses?
|
||||
4. Write out the subnet mask from CIDR `/20`.
|
||||
5. Write out the subnet mask from CIDR `/13`.
|
||||
6. `192.168.1.128/26` gives you how many available addresses?
|
||||
7. What is the last host of the `172.16.96.0/19` network?
|
||||
8. Starting with `192.168.1.0/24`, with VLSM, you can use a /26 mask and generate which subnets?
|
||||
9. In order to use route summarisation on your network, you need to use what?
|
||||
10. Write down the subnets `172.16.8.0` to `172.16.15.0`, and work out the common bits and what subnet mask you should use as a summary. Don’t look in the book before working this out.
|
||||
|
||||
## 第五天问题的答案
|
||||
|
||||
1. `11000000.10100000.11010010.10110001`.
|
||||
2. `147`.
|
||||
3. `10.x.x.x` – any address starting with a `10`. `172.16.x.x` to `172.31.x.x` – any address starting with `172.16` to `172.31`, inclusive. `192.168.x.x` – any address starting with `192.168`.
|
||||
4. `255.255.240.0`.
|
||||
5. `255.248.0.0`.
|
||||
6. `62`.
|
||||
7. `172.16.127.254`.
|
||||
8. `192.168.1.0.0/26`, `192.168.1.0.64/26`, `192.168.1.0.128/26`, and `192.168.1.0.192/26`.
|
||||
9. A classless protocol.
|
||||
10. `172.16.8.0/21` (mask: `255.255.248.0`).
|
||||
|
||||
## 课文中进制转换的答案
|
||||
|
||||
1. Convert 1111 to hex and decimal
|
||||
```
|
||||
Hex = F
|
||||
Decimal = 15
|
||||
```
|
||||
2. Convert 11010 to hex and decimal
|
||||
```
|
||||
Hex = 1A
|
||||
Decimal = 26
|
||||
```
|
||||
3. Convert 10000 to hex and decimal
|
||||
```
|
||||
Hex = 10
|
||||
Decimal = 16
|
||||
```
|
||||
4. Convert 20 to binary and hex
|
||||
```
|
||||
Binary = 10100
|
||||
Hex = 14
|
||||
```
|
||||
5. Convert 32 to binary and hex
|
||||
```
|
||||
Binary = 100000
|
||||
Hex = 20
|
||||
```
|
||||
6. Convert 101 to binary and hex
|
||||
```
|
||||
Binary = 1100101
|
||||
Hex = 657
|
||||
```
|
||||
7. Convert A6 from hex to binary and decimal
|
||||
```
|
||||
Binary = 10100110
|
||||
Decimal = 166
|
||||
```
|
||||
8. Convert 15 from hex to binary and decimal
|
||||
```
|
||||
Binary = 10101
|
||||
Decimal = 21
|
||||
```
|
||||
9. Convert B5 from hex to binary and decimal
|
||||
```
|
||||
Binary = 10110101
|
||||
Decimal = 181
|
||||
```
|
||||
|
||||
## 第五天的实验
|
||||
|
||||
###路由器上的IP分址实验
|
||||
|
||||
**拓扑图,Topology**
|
||||
|
||||

|
||||
|
||||
*路由器上的IP分址实验拓扑图*
|
||||
|
||||
**实验目的, Purpose**
|
||||
|
||||
学习如何熟练地在路由器上配置IP地址,并经由某个串行接口执行ping操作。
|
||||
|
||||
**实验步骤,Walkthrough**
|
||||
|
||||
1. 先是明确路由器上的串行借口编号,你的路由器与上面拓扑图中的可能有所不同。同时,还要明确串行链路的哪一端连接的是DCE线,因为在该端是需要`clock rate`命令的。
|
||||
|
||||
<pre>
|
||||
Router>en
|
||||
Router#sh ip interface brief
|
||||
Interface IP-Address OK? Method Status Protocol
|
||||
FastEthernet0/0 unassigned YES unset administratively down down
|
||||
FastEthernet0/1 unassigned YES unset administratively down down
|
||||
<b>Serial0/1/0</b> unassigned YES unset administratively down down
|
||||
Vlan1 unassigned YES unset administratively down down
|
||||
Router#
|
||||
Router#show controllers Serial0/1/0
|
||||
M1T-E3 pa: show controller:
|
||||
PAS unit 0, subunit 0, f/w version 2-55, rev ID 0x2800001, version 2
|
||||
idb = 0x6080D54C, ds = 0x6080F304, ssb=0x6080F4F4
|
||||
Clock mux=0x30, ucmd_ctrl=0x0, port_status=0x1
|
||||
line state: down
|
||||
<b>DCE cable</b>, no clock rate
|
||||
</pre>
|
||||
|
||||
2. 在一侧为路由器加上主机名及IP地址,如该侧是DCE,就为其加上时钟速率(the clock rate)。
|
||||
|
||||
```
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#hostname RouterA
|
||||
RouterA(config)#interface s0/1/0
|
||||
RouterA(config-if)#ip add 192.168.1.1 255.255.255.0
|
||||
RouterA(config-if)#clock rate 64000
|
||||
RouterA(config-if)#no shut
|
||||
%LINK-5-CHANGED: Interface Serial0/1/0, changed state to downRouterA(config-if)#
|
||||
```
|
||||
|
||||
3. 为另一侧加上主机名和IP地址。同时使用`no shut`命令将该接口开启。
|
||||
|
||||
```
|
||||
Router>en
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#hostname RouterB
|
||||
RouterB(config)#int s0/1/0
|
||||
RouterB(config-if)#ip address 192.168.1.2 255.255.255.0
|
||||
RouterB(config-if)#no shut
|
||||
%LINK-5-CHANGED: Interface Serial0/1/0, changed state to down
|
||||
RouterB(config-if)#^Z
|
||||
RouterB#
|
||||
%LINK-5-CHANGED: Interface Serial0/1/0, changed state to up
|
||||
```
|
||||
|
||||
4. 用`ping`命令测试连接。
|
||||
|
||||
```
|
||||
RouterB#ping 192.168.1.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
```
|
||||
|
||||
>**注意:**如ping不工作,就要反复检查,确保在正确的路由器上加上了`clock rate`命令。还要确保正确插入了线缆,并使用命令 `show controllers serial x/x/x`, 这里的接口编号是你的路由器上的。
|
||||
|
||||
### 二进制转换及子网划分练习, Binary Conversion and Subnetting Practice
|
||||
|
||||
请将今天所剩下的时间,用来做下面这些重要的联系。
|
||||
|
||||
+ 十进制到二进制的转换(随机数字)
|
||||
+ 二进制到十进制的转换(随机数字)
|
||||
+ IPv4 子网划分(随机网络和场景)
|
||||
|
611
d06-NAT.md
Normal file
@ -0,0 +1,611 @@
|
||||
#第六天
|
||||
|
||||
**网络地址转换**
|
||||
|
||||
**Network Address Translation**
|
||||
|
||||
##第六天的任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 回顾昨天的课文内容
|
||||
+ 完成今天的实验
|
||||
+ 阅读 ICND1 记诵指南
|
||||
+ 在网站[subnetting.org](http://www.subnetting.org) 上花15分钟
|
||||
|
||||
网络地址转换是另一个生僻内容(another strange subject),思科把网络地址转换拆分到ICND1和ICND2两个大纲中了。
|
||||
|
||||
今天你会学到下面这些知识。
|
||||
|
||||
+ NAT基础
|
||||
+ 对NAT的配置和验证
|
||||
+ NAT故障排除
|
||||
|
||||
今天的课程涵盖了ICND1大纲的以下要求。
|
||||
|
||||
+ 弄清NAT的基本操作
|
||||
- NAT的目的
|
||||
- NAT地址池
|
||||
- 静态NAT
|
||||
- 一对一的NAT
|
||||
- NAT过载,Overloading
|
||||
- 源地址NAT
|
||||
- 单向NAT
|
||||
+ 按需求配置并验证NAT
|
||||
|
||||
##NAT基础,NAT Basics
|
||||
|
||||
想象一下如果网络不是以IP地址运行,而是按颜色来运作。蓝色和黄色有无限的供应,其它颜色却是短缺的。网络分开成使用蓝色和黄色的许多用户,因为这两种颜色可以随意使用。而蓝色用户需要频繁地前往外部网络,那么就需要去买点绿色凭据,在蓝色用户需要与外部网络上的主机通信时,路由器可以用其将蓝色用户的凭据进行替换。路由器此时会像下面这样做。
|
||||
|
||||

|
||||
|
||||
*图6.1 -- 内部凭据被替换成了外部凭据*
|
||||
|
||||
<table>
|
||||
<tr><th>内部凭据</th><th>外部凭据</th></tr>
|
||||
<tr><td>蓝色1号</td><td>绿色1号</td></tr>
|
||||
<tr><td>蓝色2号</td><td>绿色2号</td></tr>
|
||||
<tr><td>蓝色3号</td><td>绿色3号</td></tr>
|
||||
</table>
|
||||
|
||||
在各台蓝色设备完成与外部的连接后,对应的绿色凭据会释放给其它蓝色设备使用。这么做的好处在于**外部设备无法看到内部凭据编号**,且**有助于留下互联网上十分有限的可用凭据**。
|
||||
|
||||
我们看到,NAT不仅保护了网络IP地址,同时也是节约地址的另一种方法。**NAT是在路由器或者防火墙上实现的**,那么,代替上面的颜色,你会看到下面这样的情况。
|
||||
|
||||

|
||||
|
||||
*图6.2 -- 内部地址被替换成外部地址*
|
||||
|
||||
<table>
|
||||
<tr><th>内部地址</th><th>外部地址</th></tr>
|
||||
<tr><td>192.168.1.1</td><td>200.100.1.5</td></tr>
|
||||
<tr><td>192.168.1.3</td><td>200.100.1.7</td></tr>
|
||||
</table>
|
||||
|
||||
根据特定的需求,**在路由器上配置NAT有三种方式**。CCNA考试要求你掌握所有三种方式。
|
||||
|
||||
为了配置NAT,要先告诉路由器,有哪些内部和外部接口。这是因为事实上可以将众多内部地址替换成某个NAT地址池中的地址(a pool of NAT addresses),或者最起码替换成单一的NAT地址, 并在路由器上的两个以太网接口之间完成NAT。
|
||||
|
||||
正如前面说的,对于考试和现实需求来说,通常都会将私有互联网地址转换成互联网上的可路由的地址(routable addresses on the Internet)。这在家庭宽带路由器上就能见到,其通常会给笔记本电脑一个192.168.1范围的IP,而在连接到ISP的接口上有着一个可路由的地址。
|
||||
|
||||
NAT令到私有网络上的主机可以访问互联网上的资源,或是可以访问到其它公共网络。NAT是一个IETF标准,其让局域网的内部流量使用一个IP地址集合,这些地址通常就是RFC 1918中所定义的私有地址空间,对于外部流量,又使用另一个地址集合,这些地址通常是公开注册的IP地址空间。
|
||||
|
||||
NAT为进入和发出的流量去改装数据包的头部,并对每个会话进行跟踪。理解NAT的关键,同时也是NAT故障排除的关键,就是对NAT的有关术语有扎实理解。你应熟悉下面这些NAT名词。
|
||||
|
||||
+ NAT内部接口
|
||||
+ 内部本地地址
|
||||
+ 内部全球地址
|
||||
+ NAT外部接口
|
||||
+ 外部本地地址
|
||||
+ 外部全球地址
|
||||
|
||||
上面NAT术语中的**内部接口,是指由该组织所控制的管理域的边界接口(the border interface of the administrative domain controlled by the organization)。而并不非得要是内部网络上的主机所使用的默认网关**。
|
||||
|
||||
而**内部本地地址则是某台内部网络上的主机的IP地址**。在**多数情况下,内部本地地址都是一个RFC 1918地址**(也就是不可路由地址,比如192.168.x.x或172.16.x.x等等)。该地址被转换成外部全局地址,那么**外部全局地址通常就是来自一个公开分配的或是经注册的地址池了**。要记住的是,尽管如此,**内部本地地址也可以是一个公网地址**。
|
||||
|
||||
**内部全局地址,则是内部主机在其呈现在外部世界时的地址**。一旦内部IP地址被转换过后,对公网或是其它任何外部网络及主机来说,它就成为了一个内部全局地址了。
|
||||
|
||||
与内部接口对应,**外部接口是指不受该组织所控制的管理域的边界**。换句话说,外部接口是连接外部网络的,连接的网络可以是互联网或其它任何的外部网络,比如友商网络等。任何处于外部接口外侧的主机,都不属于本地组织的管理之下。
|
||||
|
||||
**外部本地地址是某台外部主机呈现给内部主机的IP地址**。最后,**外部全局地址又是一个合法的、可在互联网上使用的公网地址**。外部本地地址和外部全局地址都是分配自一个全球可路由网络地址空间。
|
||||
|
||||
为搞清楚这些概念,图6.3表示了两台主机之间的一个会话中各种地址的使用。中间的网关上开启了NAT。
|
||||
|
||||

|
||||
|
||||
*图6.3 -- 理解NAT的各种内部外部地址*
|
||||
|
||||
NAT内部和外部的分址,是一个经典的考试问题,所以还需在回头看几次这里的内容。
|
||||
|
||||
##配置并验证NAT,Configuring and Verifying NAT
|
||||
|
||||
在思科IOS上对网络地址转换的配置和验证是一个简单的事情。在配置NAT时,要执行下面这些操作。
|
||||
|
||||
+ 使用接口配置命令`ip nat inside`将一个或多个的接口指定为内部接口。
|
||||
|
||||
+ 使用接口配置命令`ip nat outside`将某个接口指定为外部接口。
|
||||
|
||||
+ 配置一条访问控制清单(access control list, ACL), 其将匹配所有需要转换的流量。此访问控制清单可以是标准、扩展的命名ACL或编号ACL(a standard or an extended named or numbered ACL)。
|
||||
|
||||
+ 作为可选项,使用全局配置命令`ip nat pool <name> <start-ip> <end-ip> [netmaske <mask> | prefix-length <length>]`, 配置一个全球地址池(a pool of global addresses)。这会定义出一个内部本地地址将会转换成的内部全球地址池。
|
||||
|
||||
+ 使用全局配置命令`ip nat inside source list <ACL> [interface | pool] <name> [overload]`,全局性地配置上NAT。
|
||||
|
||||
> Farai 指出 -- “请看看命令`ip nat inside source static`, 可以在[www.howtonetwork.net/public/698.cfm](http://www.howtonetwork.net/public/698.cfm)免费查阅。”
|
||||
|
||||
下面的输出给出了一种思科IOS软件下配置NAT(动态NAT)的方式。可以看出,该配置使用了可用的`description`和`remark`两种特性,来帮助管理员更容易地对网络进行管理和故障排除。
|
||||
|
||||
```
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#description ‘Connected To The Internal LAN’
|
||||
R1(config-if)#ip address 10.5.5.1 255.255.255.248
|
||||
R1(config-if)#ip nat inside
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#description ‘Connected To The ISP’
|
||||
R1(config-if)#ip address 150.1.1.1 255.255.255.248
|
||||
R1(config-if)#ip nat outside
|
||||
R1(config-if)#exit
|
||||
R1(config)#access-list 100 remark ‘Translate Internal Addresses Only’
|
||||
R1(config)#access-list 100 permit ip 10.5.5.0 0.0.0.7 any
|
||||
R1(config)#ip nat pool INSIDE-POOL 150.1.1.3 150.1.1.6 prefix-length 24
|
||||
R1(config)#ip nat inside source list 100 pool INSIDE-POOL
|
||||
R1(config)#exit
|
||||
```
|
||||
|
||||
按照这个配置,命令`show ip nat translations`就可以用来对路由器上具体进行的转换进行查看,如下面的输出所示。
|
||||
|
||||
```
|
||||
R1#show ip nat translations
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 150.1.1.4:4 10.5.5.1:4 200.1.1.1:4 200.1.1.1:4
|
||||
icmp 150.1.1.3:1 10.5.5.2:1 200.1.1.1:1 200.1.1.1:1
|
||||
tcp 150.1.1.5:159 10.5.5.3:159 200.1.1.1:23 200.1.1.1:23
|
||||
```
|
||||
|
||||
在路由器上配置NAT时,通常有以下三个选择。
|
||||
|
||||
+ 对一个内部地址,用一个外部地址进行替换(静态NAT,static NAT)
|
||||
+ 对多个内部地址,用两个以上的外部地址进行替换(动态NAT,dynamic NAT)
|
||||
+ 将多个内部地址,用多个外部端口进行转换(这就是**端口地址转换**,或者叫**单向NAT**, Port Address Translation or one-way NAT)
|
||||
|
||||
###静态NAT
|
||||
|
||||
**Static NAT**
|
||||
|
||||
在网络内部一些有一台web服务器时,就要将某个特定内部地址,替换成另一个外部地址了。如此时仍然进行动态分址,就没有办法到达该特定目的地址,因为它总是变动的。
|
||||
|
||||
>Farai指出,“对那些需要经由互联网可达的所有服务器,比如e-mail或FTP服务器,都要使用静态NAT(如下面的图6.4所示)”
|
||||
|
||||

|
||||
|
||||
**图6.4 -- 在用的静态NAT**
|
||||
|
||||
<table>
|
||||
<tr><th>内部地址</th><th>外部NAT地址</th></tr>
|
||||
<tr><td>192.168.1.1</td><td>200.1.1.1</td></tr>
|
||||
<tr><td>192.168.2.1</td><td>200.1.1.2</td></tr>
|
||||
</table>
|
||||
|
||||
对上面的网络,配置应像下面这样。
|
||||
|
||||
```
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip address 192.168.1.1 255.255.255.0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface f0/1
|
||||
Router(config-if)#ip address 192.168.2.1 255.255.255.0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/0
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config-if)#exit
|
||||
Router(config)#ip nat inside source static 192.168.1.1 200.1.1.1
|
||||
Router(config)#ip nat inside source static 192.168.2.1 200.1.1.2
|
||||
```
|
||||
命令`ip nat inside`和`ip nat outside`,告诉路由器哪些是内侧NAT接口,哪些是外侧的NAT接口。而命令`ip nat inside source`命令,就定义了那些静态转换,想要多少条就可以有多少条的该命令,那么就算你掏钱买的那些公网IP地址有多少个,就写上多少条吧。在思科公司,笔者曾解决有关此类问题的大量主要的配置错误,就是找不到`ip nat inside`及`ip nat outside`语句!考试中可能会碰到那些要求找出配置错误的问题。
|
||||
|
||||
强烈建议将上述命令敲入到某台路由器中去。本书中有很多的NAT实验,但是在阅读理论章节的同时,你敲入得越多,那么这些信息就能越好地进入你的大脑。
|
||||
|
||||
###动态NAT或NAT地址池
|
||||
|
||||
通常会用到一组可路由地址,或是一个可路由地址池。一对一的NAT映射,有其局限性,首当其冲的就是成本高,其次路由器上有着多行的配置。动态NAT允许为内部主机配置一或多个的公网地址组。
|
||||
|
||||
路由器会维护一个内部地址到外部地址对应的清单,而最后该表格中的转换会超时(Your router will keep a list of the internal addresses to external addresses, and eventually the translation in the table will time out)。可以修改此超时值,但请找Cisco 技术支持工程师(a Cisco TAC engineer)的建议去修改。
|
||||
|
||||

|
||||
|
||||
*图6.5 -- 到一个NAT公网可路由地址池的内部似有地址*
|
||||
|
||||
当路由器上的内部主机发出到外部的连接时,如执行命令`show ip nat translations`, 就会看到下面的包含类似信息的图表。
|
||||
|
||||
<table>
|
||||
<tr><th>内侧地址</th><th>外侧NAT地址</th></tr>
|
||||
<tr><td>192.168.1.3</td><td>200.1.1.11</td></tr>
|
||||
<tr><td>192.168.1.2</td><td>200.1.1.14</td></tr>
|
||||
</table>
|
||||
|
||||
在上面的图6.5中,让内部地址使用的是一个从200.1.1.1到200.1.1.16的地址池。下面是要实现该目的的配置文件。这里就不再给出路由器接口地址了。
|
||||
|
||||
```
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/1
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.16 netmask 255.255.255.0
|
||||
Router(config)#ip nat inside source list 1 pool poolname
|
||||
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
|
||||
```
|
||||
|
||||
该ACL用于告诉路由器哪些地址要转换,哪些地址不要转换。而该子网掩码实际上是反转的,叫做反掩码,在第九天会涉及。所有NAT地址池都需要一个名字,而在本例中,它简单地叫做“poolname”。源列表引用自那个ACL(the source list refers to the ACL), **经译者在GNS3上测试,动态NAT仍然是一对一的地址转换**。
|
||||
|
||||
###NAT Overload/端口地址转换/单向NAT
|
||||
|
||||
**NAT Overload/Port Address Translation/One-Way NAT**
|
||||
|
||||
IP地址处于紧缺之中,在有着成千上万的地址需要路由时,将花一大笔钱(**静态NAT、动态NAT都无法解决此问题**)。在此情况下,可以使用**NAT overload方案**(如图6.6), 该方案又被思科叫做**端口地址转换(Port Address Translation, PAT)**或**单向NAT**。PAT巧妙地允许将某端口号加到某个IP地址,作为与另一个使用该IP地址的转换区分开来的方式。每个IP地址有多达65000个可以的端口号。
|
||||
|
||||
尽管**这是超出CCNA考试范围的,但了解PAT如何处理端口号,会是有用的**。在每个思科文档中,都将每个公网IP地址的可用端口号分为3个范围,分别是0-511、512-1023和1024-65535。PAT给每个UDP和TCP会话都分配一个独特的端口号。它会尝试给原始请求分配同样的端口值,但如果原始的源端口号已被使用,它就会开始从某个特别端口范围的开头进行扫描,找出第一个可用的端口号,分配给那个会话。
|
||||
|
||||

|
||||
|
||||
*图6.6 -- NAT Overload*
|
||||
|
||||
此时,命令`show ip nat translations`给出的表格,将会显示下面这样的IP地址及端口号。
|
||||
|
||||
<table>
|
||||
<tr><th>内侧地址</th><th>外侧NAT地址(带有端口号)</th></tr>
|
||||
<tr><td>192.168.1.1</td><td>200.1.1.1:30922</td></tr>
|
||||
<tr><td>192.168.2.1</td><td>200.1.1.2:30975</td></tr>
|
||||
</table>
|
||||
|
||||
而要配置PAT,需要进行如同动态NAT的那些同样配置,还要在地址池后面加上关键字“overload”。
|
||||
|
||||
<pre>
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/1
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.1 netmask 255.255.255.0
|
||||
Router(config)#ip nat inside source list 1 pool poolname <b>overload</b>
|
||||
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
|
||||
</pre>
|
||||
|
||||
这该很容易记住吧!
|
||||
|
||||
>Farai指出 -- “以多于一个IP方式使用PAT,就是对地址空间的浪费,因为路由器会使用第一个IP地址,并为每个随后的连接仅增大端口号。这就是为何通常将PAT配置为该接口上的超载(overload)。”
|
||||
|
||||
##NAT故障排除
|
||||
|
||||
**Troubleshooting NAT**
|
||||
|
||||
NAT故障中十次有九次,都是由于路由器管理员忘记了把`ip nat outside`或`ip nat inside`命令加到路由器接口上。事实上,几乎总是存在这个问题!接下来最频繁的错误包括不正确的ACL,以及某个拼写错误的地址池名称(地址池是区分大小写的)。
|
||||
|
||||
使用命令`debug ip nat [detailed]`,可以在路由器上对NAT转换进行调试,又可以使用命令`sh ip nat translations`,来查看NAT地址池。
|
||||
|
||||
##第六天问题
|
||||
|
||||
1. NAT converts the `_______` headers for incoming and outgoing traffic and keeps track of each session.
|
||||
2. The `_______` address is the IP address of an outside, or external, host as it appears to inside hosts.
|
||||
3. How do you designate inside and outside NAT interfaces?
|
||||
4. Which show command displays a list of your NAT table?
|
||||
5. When would you want to use static NAT?
|
||||
6. Write the configuration command for NAT `192.168.1.1` to `200.1.1.1`.
|
||||
7. Which command do you add to a NAT pool to enable PAT?
|
||||
8. NAT most often fails to work because the `_______` command is missing.
|
||||
9. Which `debug` command shows live NAT translations occurring?
|
||||
|
||||
##第六天问题的答案
|
||||
|
||||
1. Packet.
|
||||
2. Outside local.
|
||||
3. With the `ip nat inside` and `ip nat outside` commands.
|
||||
4. The `show ip nat translations` command.
|
||||
5. When you have a web server (for example) on the inside of your network.
|
||||
6. `ip nat inside source static 192.168.1.1 200.1.1.1`.
|
||||
7. The `overload` command.
|
||||
8. The `ip nat inside` or `ip nat outside` command.
|
||||
9. The `debug ip nat [detailed]` command.
|
||||
|
||||
##第六天的实验
|
||||
|
||||
###静态NAT实验
|
||||
|
||||
**Static NAT Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**静态NAT实验拓扑图**
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置静态NAT。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 将IP地址192.168.1.1 255.255.255.0加入到路由器A,并修改hostname为Router A。把IP地址192.168.1.2 255.255.255.0加入到路由器B。在正确的一侧加上时钟速度(clock rate),然后分别自A往B和自B往A进行ping测试。如需提示,请回顾先前的那些实验。
|
||||
|
||||
2. 在路由器A上需要加入一个IP地址,以模拟LAN上的一台主机。**通过一个环回接口,可以实现这个目的**。
|
||||
|
||||
```
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#interface Loopback0
|
||||
RouterA(config-if)#ip add 10.1.1.1 255.0.0.0
|
||||
RouterA(config-if)#
|
||||
```
|
||||
|
||||
3. 为进行测试,需要告诉Router B将发往任何网络的任何流量,都发往Router A。通过一条静态路由完成这个。
|
||||
|
||||
```
|
||||
RouterB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
|
||||
RouterB(config)#
|
||||
```
|
||||
|
||||
4. 要测试该条静态路由是否工作,通过从Router A上的环回接口对Router B进行ping操作。
|
||||
|
||||
```
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
```
|
||||
|
||||
5. 在Router A上配置一个静态NAT条目。使用NAT,将地址10.1.1.1, 在其离开该路由器时,转换成172.16.1.1。同样需要告诉路由器哪个是NAT的内部接口,哪个是外部接口。
|
||||
|
||||
```
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#int Loopback0
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config-if)#int Serial0/1/0
|
||||
RouterA(config-if)#ip nat outside
|
||||
RouterA(config-if)#
|
||||
RouterA(config-if)#ip nat inside source static 10.1.1.1 172.16.1.1
|
||||
RouterA(config)#
|
||||
```
|
||||
|
||||
6. 打开NAT调试,如此就可以看到转换的进行。此时再执行另一个扩展ping操作(自L0接口的),并查看NAT表。因为IOS的不同,你的输出可能与我的不一样。
|
||||
|
||||
<pre>
|
||||
RouterA#debug ip nat
|
||||
IP NAT debugging is on
|
||||
RouterA#
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: <b>10.1.1.1</b>
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [11]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [11]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [12]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [12]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [13]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [13]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [14]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [14]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [15]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/46/110 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [15]
|
||||
RouterA#show ip nat translations
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 172.16.1.1:10 10.1.1.1:10 192.168.1.2:10 192.168.1.2:10
|
||||
icmp 172.16.1.1:6 10.1.1.1:6 192.168.1.2:6 192.168.1.2:6
|
||||
icmp 172.16.1.1:7 10.1.1.1:7 192.168.1.2:7 192.168.1.2:7
|
||||
icmp 172.16.1.1:8 10.1.1.1:8 192.168.1.2:8 192.168.1.2:8
|
||||
icmp 172.16.1.1:9 10.1.1.1:9 192.168.1.2:9 192.168.1.2:9
|
||||
--- 172.16.1.1 10.1.1.1 --- ---
|
||||
RouterA#
|
||||
</pre>
|
||||
|
||||
7. 记住,路由器随后很快就会清除该NAT转换,为其它IP地址使用这个/这些NAT地址而对其进行清理。
|
||||
|
||||
```
|
||||
NAT: expiring 172.16.1.1 (10.1.1.1) icmp 6 (6)
|
||||
NAT: expiring 172.16.1.1 (10.1.1.1) icmp 7 (7)
|
||||
```
|
||||
|
||||
>译者注: 通过本实验,要注意三个问题:一是**可路由地址可以是外部接口同一网段的地址,也可以不是**;二是**NAT超时问题,该参数可以设置**;三是**环回接口的使用, 常用来模拟LAN中的计算机**。
|
||||
|
||||
###NAT地址池/动态NAT实验
|
||||
|
||||
**NAT Pool Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**NAT地址池/动态NAT实验拓扑图**
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一个NAT地址池(动态NAT)。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 将IP地址192.168.1.1 255.255.255.0加入到路由器A,并修改hostname为Router A。把IP地址192.168.1.2 255.255.255.0加入到路由器B。在正确的一侧加上时钟速度(clock rate),然后分别自A往B和自B往A进行ping测试。如需提示,请回顾先前的那些实验。
|
||||
|
||||
2. 需要给RouterA添加两个IP地址来模拟LAN上的主机。通过两个环回接口,可以达到这个目的。这两个IP地址将位处不同子网,但都一10地址开头。
|
||||
|
||||
<pre>
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#interface Loopback0
|
||||
RouterA(config-if)#ip add 10.1.1.1 255.255.255.0
|
||||
RouterA(config-if)#int l1 <b>← short for Loopback1</b>
|
||||
RouterA(config-if)#ip address 10.2.2.2 255.255.255.0
|
||||
RouterA(config-if)#
|
||||
</pre>
|
||||
|
||||
3. 为了进行测试,需要告诉RouterB将到任何网络的任何流量,都发往RouterA。用一条静态路由完成这点。
|
||||
|
||||
```
|
||||
RouterB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
|
||||
RouterB(config)#
|
||||
```
|
||||
|
||||
4. 在RouterA上,从环回接口向RouterB发出ping操作,以此来测试该静态路由是否工作。
|
||||
|
||||
```
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
```
|
||||
|
||||
5. 在RouterA上配置一个NAT地址池。在本实验中,使用地址池172.16.1.1到172.16.1.10。任何以10开头的地址,都将成为一个NAT。记住你**必须**指定NAT的内部和外部接口,否则NAT就不会工作。
|
||||
|
||||
```
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#int l0
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config)#int l1
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config-if)#int Serial0/1/0
|
||||
RouterA(config-if)#ip nat outside
|
||||
RouterA(config-if)#exit
|
||||
RouterA(config)#ip nat pool 60days 172.16.1.1 172.16.1.10 netmask 255.255.255.0
|
||||
RouterA(config)#ip nat inside source list 1 pool 60days
|
||||
RouterA(config)#access-list 1 permit 10.1.1.0 0.0.0.255
|
||||
RouterA(config)#access-list 1 permit 10.2.1.0 0.0.0.255
|
||||
RouterA(config)#
|
||||
```
|
||||
|
||||
**命令`ip nat pool`创建出地址池。需要给地址池一个自己选择的名称。而命令`netmask`告诉路由器应用到地址池上的网络掩码**。
|
||||
|
||||
**命令`source list`告诉路由器查看的ACL。该条ACL告诉路由器哪些网络将与NAT地址池进行匹配和转换**。
|
||||
|
||||
6. 打开NAT调试,如此才可以看到转换的发生。接着执行扩展ping(自L0和L1发出的),并查看NAT表。因为IOS平台的不同,你的输出可能和下面的不一样。将会看到NAT地址池中的两个地址正在用到。
|
||||
|
||||
<pre>
|
||||
RouterA#debug ip nat
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: <b>10.1.1.1</b>
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [26]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [16]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [27]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [17]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [28]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [18]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [29]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [19]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [30]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 17/28/32 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [20]
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: <b>10.2.2.2</b>
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.2.2.2
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [31]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [21]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [32]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [22]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [33]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [23]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [34]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [24]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [35]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [25]
|
||||
RouterA#show ip nat trans
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 172.16.1.1:16 10.1.1.1:16 192.168.1.2:16 192.168.1.2:16
|
||||
icmp 172.16.1.1:17 10.1.1.1:17 192.168.1.2:17 192.168.1.2:17
|
||||
icmp 172.16.1.1:18 10.1.1.1:18 192.168.1.2:18 192.168.1.2:18
|
||||
icmp 172.16.1.1:19 10.1.1.1:19 192.168.1.2:19 192.168.1.2:19
|
||||
icmp 172.16.1.1:20 10.1.1.1:20 192.168.1.2:20 192.168.1.2:20
|
||||
icmp 172.16.1.2:21 10.2.2.2:21 192.168.1.2:21 192.168.1.2:21
|
||||
icmp 172.16.1.2:22 10.2.2.2:22 192.168.1.2:22 192.168.1.2:22
|
||||
icmp 172.16.1.2:23 10.2.2.2:23 192.168.1.2:23 192.168.1.2:23
|
||||
icmp 172.16.1.2:24 10.2.2.2:24 192.168.1.2:24 192.168.1.2:24
|
||||
icmp 172.16.1.2:25 10.2.2.2:25 192.168.1.2:25 192.168.1.2:25
|
||||
RouterA#
|
||||
</pre>
|
||||
|
||||
###NAT Overload实验
|
||||
|
||||
**NAT Overload Lab**
|
||||
|
||||
重复先前的实验。这次,在引用地址池时,将`overload`命令加到该配置行的后面。这会指示路由器使用PAT。去掉`Loopback1`。**请注意,正如Farai指出的那样,在真实世界中,地址池通常只会有一个地址,否则在外部接口上会超载**(Please note that as Farai says, in the real world, your pool will usually have only one address or you will overload your outside interface)。
|
||||
|
||||
`RouterA(config)#ip nat inside source list 1 pool 60days overload`
|
||||
|
||||
我已经为方便而使用思科Packet Tracer,完成了上面的实验,所以你通常会碰到与我的输出所不一致的输出。下面是一个PAT实验的示例输出。从中可以看出,路由器给每个转换都加上了一个端口号。不幸的是,在NAT地址池实验中,会看到相似的编号,这是一个PAT的混淆之处。
|
||||
|
||||
<pre>
|
||||
RouterA#show ip nat tran
|
||||
Inside global Inside local Outside local Outside global
|
||||
10.0.0.1:<b>8759</b> 172.16.1.129:<b>8759</b> 192.168.1.2:<b>8759</b> 192.168.1.2:<b>8759</b>
|
||||
</pre>
|
973
d07-IPv6.md
Normal file
@ -0,0 +1,973 @@
|
||||
#第7天
|
||||
|
||||
**互联网协议版本6**
|
||||
|
||||
**IPv6**
|
||||
|
||||
##第七天任务
|
||||
|
||||
+ 阅读下面的课文理论部分
|
||||
+ 阅读ICND1记诵指南
|
||||
|
||||
IPv6已经开发了很多年,且已在全世界网络中投入使用(与IPv4共同运行)。许多网络工程师在面对不得不学习一种新的分址方式时,表现出了他们的恐惧,笔者也曾听他们中的许多人说希望在IPv6成为一项必备技能之前能够退休。
|
||||
|
||||
恐惧是站不住脚的,是没有有事实依据的。IPv6是一种对用户友好格式,一旦对其熟悉了,就会发现其是IPv4的改良,而你可能会优先选用IPv6。**CCNA考试中IPv6占了很大部分**; 为此,需要**掌握其工作原理**,及**如何配置IPv6地址**,**掌握其有关标准**,并**应用IPv6来满足网络的各项需求**。
|
||||
|
||||
今天将会学到下面这些知识点。
|
||||
|
||||
+ IPv6的历史
|
||||
+ IPv6分址格式
|
||||
+ 应用IPv6
|
||||
+ IPv6子网划分
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
+ 拿出恰当的IPv6分址方案,以满足某个LAN/WAN环境的分址要求
|
||||
+ 正确描述IPv6的各种地址
|
||||
- 全球单播地址, Global Unicast addresses
|
||||
- 多播地址, Multicast addresses
|
||||
- 本地链路地址, Link-Link addresses
|
||||
- 本地唯一地址,Unique-Local addresses
|
||||
- 扩展唯一识别符,Extended Unified Identifier 64, EUI-64
|
||||
- 自动配置地址(autoconfiguration)
|
||||
|
||||
##IPv6历史
|
||||
|
||||
**History of IPv6**
|
||||
|
||||
###满足目标吗?
|
||||
|
||||
**Fit for Purpose?**
|
||||
|
||||
在Tim Berners-Lee爵士于1989年发明WWW时,他无法预测到该技术对世界的巨大影响。个人计算机曾经贵得高攀不起,此外,除非能够负担得起昂贵的WAN连接费用,否则就没有方便的长距离通信方法。那时也没有大家共同遵循的通信模型。
|
||||
|
||||
那时,某些事需要一些变化,以IP这种新型分址标准的的形式,变革发生了。业界从犯下的大量失误中终有收获,并在对商业需求的回应下,IETF早在1998年就发布了众多IPv6标准中最早的一些标准。
|
||||
|
||||
并不会有一个日期,能够整个地从IPv4转变为IPv6;而是网络将会逐渐地变为同时运行IPv4和IPv6, 并最终IPv4会滚粗。当下,全部互联网流量的近1%运行在IPv6上(来源:Yves Poppe, IPv6 -- A 2012 Report Card)。
|
||||
|
||||
###为何要迁移
|
||||
|
||||
**Why Migrate?**
|
||||
|
||||
笔者已经指出,在IPv4发明时,互联网不是由普罗大众所使用的,也没有使用的必要。那时还没有网站,没有电子商务,没有移动网络,没有社交媒体。就算买得起PC,拿来也干不了什么事。现在的情况是几乎所有人都在线上了。我们使用互联网来完成日常工作,很多业务都依赖互联网而存在。很快我们又会使用移动装置来管理我们的汽车及家庭安防,来打开咖啡机,设置空调,设定电视录制爱看的电视剧等等。
|
||||
|
||||
这些事情已经在发生当中,不光在欧洲和美国,在那些有着数十亿人口的快速发展中国家,比如印度和中国,都在发生着。IPv4就是不能胜任了,就算勉强可以,也没有足够的地址来满足需求。
|
||||
|
||||
下面是迁移到IPv6所能带来的一些好处。
|
||||
|
||||
+ 简化了的IPv6数据包头部
|
||||
+ 更大的地址空间
|
||||
+ IPv6层次化的分址方法
|
||||
+ IPv6的扩展性扩充性
|
||||
+ IPv6消除了广播
|
||||
+ 无状态的自动配置
|
||||
+ 集成移动能力
|
||||
+ 集成了安全增强
|
||||
|
||||
我喜欢从其**数据包层的探究,来分析IPv6, 同时也会去探究IPv6中可用的许多种类型的包头部**,但限于篇幅,同时考试中也不会考到这两点,所以就不包含这两方面的内容了。而着重在为考试和成为一名思科工程师,所需要掌握的内容上。
|
||||
|
||||
###十六进制计数
|
||||
|
||||
**Hex Numbering**
|
||||
|
||||
这里很有必要回顾一下有关十六进制计数的内容。
|
||||
|
||||
我们知道十进制数有着从0到9的10个数字。二进制则有从0到1的2个数字。那么十六进制就有从0到F的16个数字。这些地址分别叫做基数10、基数2和基数16的地址。
|
||||
|
||||
可以发现各个计数系统都是从0开始的,就像下面这样。
|
||||
|
||||
十进制 -- 0,1,2,3,4,5,6,7,8,9
|
||||
二进制 -- 0,1
|
||||
十六进制 -- 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
|
||||
|
||||
在写下这些地址时,可能不会意识到是在使用那些从右往左的列;最右边的列是权重为1的列,接下来的列,是权重为计数基数的前一列序号次幂的列。如同下表所示。
|
||||
|
||||
<table>
|
||||
<tr><th>计数基数</th><th>N乘计数基数的3次幂</th><th>N乘计数基数的2次幂</th><th>N乘计数基数的1次幂</th><th>N乘1</th></tr>
|
||||
<tr><td>10 -- 十进制</td><td>1000</td><td>100</td><td>10</td><td>1</td></tr>
|
||||
<tr><td>2 -- 二进制</td><td>8</td><td>4</td><td>2</td><td>1</td></tr>
|
||||
<tr><td>16 -- 十六进制</td><td>4096</td><td>256</td><td>16</td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
可以看出每一位都从其右边的那位继承了数值。十进制基数是10乘1。二进制是1, 同时1乘了计数系统的2。如对三种计数系统的最后一个十六进制数位进行比较,就会发现将十六进制作为IPv6分址首选格式的原因了。
|
||||
|
||||
<table>
|
||||
<tr><th>十进制</th><th>二进制</th><th>十六进制</th></tr>
|
||||
<tr><td>0</td><td>0000</td><td>0</td></tr>
|
||||
<tr><td>1</td><td>0001</td><td>1</td></tr>
|
||||
<tr><td>2</td><td>0010</td><td>2</td></tr>
|
||||
<tr><td>3</td><td>0011</td><td>3</td></tr>
|
||||
<tr><td>4</td><td>0100</td><td>4</td></tr>
|
||||
<tr><td>5</td><td>0101</td><td>5</td></tr>
|
||||
<tr><td>6</td><td>0110</td><td>6</td></tr>
|
||||
<tr><td>7</td><td>0111</td><td>7</td></tr>
|
||||
<tr><td>8</td><td>1000</td><td>8</td></tr>
|
||||
<tr><td>9</td><td>1001</td><td>9</td></tr>
|
||||
<tr><td>10</td><td>1010</td><td>A</td></tr>
|
||||
<tr><td>11</td><td>1011</td><td>B</td></tr>
|
||||
<tr><td>12</td><td>1100</td><td>C</td></tr>
|
||||
<tr><td>13</td><td>1101</td><td>D</td></tr>
|
||||
<tr><td>14</td><td>1110</td><td>E</td></tr>
|
||||
<tr><td>15</td><td>1111</td><td>F</td></tr>
|
||||
</table>
|
||||
|
||||
为提供足够的地址来满足我们在今后许多年的需求,IPv6已被设计成可以提供数以百亿亿的地址。为做到这点,计数范围从32位二进制数,扩展到128位。每4位可用一个十六进制数位表示(这可从上面的图表看出)。逻辑上推断就是2个十六进制位给出的是8位二进制数,也就是一个字节。
|
||||
|
||||
一个IPv6地址有128位长,又被分为8组的16位,在以完整格式写出时,用冒号将每组分开。每4位十六进制数的范围是`0000`到`FFFF`,其中F是十六进制计数方法中最高的数。
|
||||
|
||||
<table>
|
||||
<tr><th>0000</th><th>0000</th><th>0000</th><th>0000</th><th>0000</th><th>0000</th><th>0000</th><th>0000</th></tr>
|
||||
<tr><td>to</td><td>to</td><td>to</td><td>to</td><td>to</td><td>to</td><td>to</td><td>to</td></tr>
|
||||
<tr><td>FFFF</td><td>FFFF</td><td>FFFF</td><td>FFFF</td><td>FFFF</td><td>FFFF</td><td>FFFF</td><td>FFFF</td></tr>
|
||||
</table>
|
||||
|
||||
##IPv6分址
|
||||
|
||||
**IPv6 Addressing**
|
||||
|
||||
我们已经知道,IPv6用到128位的地址。因为**此种地址格式不同于我们所熟悉的IPv4地址格式,在初次见到时通常会犯迷糊**。但是,一旦掌握了,那么就知道其逻辑和结构都十分简单。**这些128位的IPv6地址,使用了十六进制数值**(也就是说,0到9以及字母A到F)。**而在IPv4中,子网掩码既可以用CIDR表示法表示**(比如`/16`或`/32`), **也可以用点分十进制表示法表示**(dotted-decimal notation, 比如`255.255.0.0`或`255.255.255.255`), 但**在IPv6中,子网掩码只用CIDR表示法表示**,因为IPv6地址的长度很长。全球范围内的128位IPv6地址,由下面3部分组成。
|
||||
|
||||
+ 由服务商分配的前缀,the provider-assigned prefix
|
||||
+ 站点前缀,the site prefix
|
||||
+ 接口或主机ID,the interface or host ID
|
||||
|
||||
所谓服务商分配的前缀,也被称作**全球地址空间**(the global address space),是一个**48位**的前缀,又被分为下面的3部分。
|
||||
|
||||
+ 16位保留的IPv6全球前缀,the 16-bit reserved IPv6 global prefix
|
||||
+ 16位服务商持有的前缀,the 16-bit provider-owned prefix
|
||||
+ 16位服务商分配给其客户的前缀,the 16-bit provider-assigned prefix
|
||||
|
||||
**IPv6全球前缀,用于表示IPv6全球地址空间**(the IPv6 global address space)。**所有IPv6全球互联网地址,都位于从`2000::/16`到`3FFF::/16`的范围**。而16位**服务商持有的IPv6前缀,是IANA分配给服务商,且归其所有的**。ISP持有前缀,处于`0000::/32`到`FFFF::/32`范围。
|
||||
|
||||
**接下来的16位,表示由实际服务提供商从其分到前缀地址空间中,再分配给某个组织的IPv6前缀**。该前缀处于`0000::/48`到`FFFF::/48`范围。于是,前48位就共同构成了IPv6地址第一部分 -- 服务提供商分配的前缀,如下图7.1所示。
|
||||
|
||||

|
||||
|
||||
*图7.1 -- 48位服务提供商分配的IPv6前缀*
|
||||
|
||||
在48位服务商分配的前缀之后,紧接着的16位就是**站点前缀**。站点前缀的子网掩码长度是`/64`, 该子网掩码已经包括了之前的48位服务商分配的前缀。**此前缀长度允许在每个站点前缀中有2的64次幂个地址**。图7.2演示了该16位站点前缀。
|
||||
|
||||

|
||||
|
||||
*图7.2 -- 16位的IPv6站点前缀*
|
||||
|
||||
而在站点前缀之后,接下来的64位就用于接口或主机的分址了。**IPv6地址的接口或主机ID部分,表示了某个IPv6子网上的某台网络设备或主机**。至于确定接口或主机地址的不同方式,在今天的课程稍后会详细讲到。图7.3说明了IPv6的这些前缀是如何分配的。
|
||||
|
||||

|
||||
|
||||
*图7.3 -- IPv6前缀的分配*
|
||||
|
||||
参考图7.3, 客户一旦收到由ISP提供的/48前缀,就可以该前缀范围内,对站点前缀和主机或接口地址进行自由分配了。基于可用的地址空间全部容量,任何单一机构客户,只需一个的服务商分配前缀,机构网络上的所有设备就保证可以分配到一个唯一IPv6全球地址。因此,IPv6绝对不需要NAT这样的技术。
|
||||
|
||||
###IPv6地址表示法
|
||||
|
||||
**IPv6 Address Representation**
|
||||
|
||||
IPv6地址可像下面这三种方式进行表示。
|
||||
|
||||
+ 首选的或者说完整地址表示/形式
|
||||
+ 压缩的表示法
|
||||
+ 带有一个嵌入了IPv4地址的IPv6地址
|
||||
|
||||
尽管在以文本格式表示128位IPv6地址时,**首选形式或表示法是最常用的方式**,**熟悉其它两种IPv6地址表示法**也很重要。下面会对这三种方式进行说明。
|
||||
|
||||
###首选形式
|
||||
|
||||
**The Prefered Form**
|
||||
|
||||
**IPv6地址的首选表示法**(the prefered representation for an IPv6 address),有着最长的格式,又被称作**IPv6地址的完整形式**(the complete form of an IPv6 address)。此格式表示法使用32个十六进制字符,以构成一个IPv6地址。通过将某地址写作共八组的十六进制字段,用冒号将这8个字段分开(比如,`3FFF:1234:ABCD:5678:020C:CEFE:FEA7:F3A0`)。
|
||||
|
||||
每个16位字段,由4个十六进制字符表示,那么每个字符就表示了4位。每个16位十六进制字段,可以是`0x0000`和`0xFFFF`之间的值,但就如同今天后面讲到的那样,**第一组的一些数值已被保留,那么所有可能的数值都不被使用**(as will be described later in this module, different values have been reserved for use in the first 16 bits, so all possible values are not used)。在书写IPv6地址时,**十六进制字符不区分大小写**。也就是说,`2001:ABCD:0000`和`2001:abcd:0000`是完全一样的。IPv6地址表示法的完整形式,在下图7.4中有演示。
|
||||
|
||||

|
||||
|
||||
*图7.4 -- IPv6地址表示法的首选形式*
|
||||
|
||||
下面的这些IPv6地址,是完整形式下的有效IPv6地址实例。
|
||||
|
||||
+ `0000:0000:0000:0000:0000:0000:0000:0001`
|
||||
+ `2001:0000:0000:1234:0000:5678:af23:bcd5`
|
||||
+ `3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F`
|
||||
+ `fec0:2004:ab10:00cd:1234:0000:0000:6789`
|
||||
+ `0000:0000:0000:0000:0000:0000:0000:0000`
|
||||
|
||||
###压缩的表示法
|
||||
|
||||
**Compressed Representation**
|
||||
|
||||
压缩的表示法,允许以两种压缩方式之一,对IPv6地址进行压缩。第一种压缩方式,允许使用**一对**冒号(`::`), 对**一个有效IPv6地址中的那些由0s构成的连续16位字段的连续的0值,或者IPv6地址中前面的0s**,进行压缩。在使用这种方式时,**务必要记住,双冒号在一个IPv6地址中,只能使用一次**。
|
||||
|
||||
在用到压缩格式时,各个节点及各台路由器,负责去对双冒号两侧的位数进行计数,以判断出该双冒号究竟表示了多少个0s。表7.1显示了那些IPv6地址的首选形式及其压缩表示法。
|
||||
|
||||
*表7.1 -- 首选和压缩形式下的完整IPv6地址*
|
||||
|
||||
<table>
|
||||
<tr><th>完整IPv6地址表示法</th><th>压缩的IPv6地址表示法</th></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:0000:0000:0001</pre></td><td><pre>::0001</pre></pre></td></tr>
|
||||
<tr><td><pre>2001:0000:0000:1234:0000:5678:af23:bcd5</pre></td><td><pre>2001::1234:0:5678:af23:bcd5</pre></td></tr>
|
||||
<tr><td><pre>3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F</pre></td><td><pre>3FFF::1010:1A2B:5000:B00:DE0F</pre></td></tr>
|
||||
<tr><td><pre>FEC0:2004:AB10:00CD:1234:0000:0000:6789</pre></td><td><pre>FEC0:2004:AB10:CD:1234::6789</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:FFFF:172.16.255.1</pre></td><td><pre>::FFFF:172.16.255.1</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:0000:172.16.255.1</pre></td><td><pre>::172.16.255.1</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:0000:0000:0000</pre></td><td><pre>::</pre></td></tr>
|
||||
</table>
|
||||
|
||||
跟前面指出的那样,在单个的IPv6地址中,双冒号不能多于一次地使用。比如说,如要对这个完整IPv6地址`2001:0000:0000:1234:0000:0000:af23:bcd5`以压缩形式表示,那么你就只能使用双冒号一次,就算在该地址中有两组连续的0s字符串。那么,在尝试将该地址压缩成`2001::1234::af23:bcd5`,就被看成是非法的;但是此IPv6地址既可以压缩成`2001::1234:0:0:af23:bcd5`, 也可以压缩成`2001:0:0:1234::af23:bcd5`, 取决于自己喜好。
|
||||
|
||||
第二种IPv6压缩地址表示法,对于**单个的16位字段,及前导0s,可从该IPv6地址中省略成单个的0**。在使用该方法时,如某个16位字段都是0, 那么就必须用一个0来表示此字段。在这种情况下,并非所有的0都能省略。表7.2中展示了首选形式的IPv6地址,以及它们怎样通过第二种IPv6压缩形式表示法进行压缩。
|
||||
|
||||
*表7.2 -- 以替代的压缩形式表示的完整IPv6地址*
|
||||
|
||||
<table>
|
||||
<tr><th>完整IPv6地址表示法</th><th>压缩IPv6地址表示法</th></tr>
|
||||
<tr><td><pre>0000:0123:0abc:0000:04b0:0678:f000:0001</pre></td><td><pre>::123:abc:0:4b0:678:f000:1</pre></td></tr>
|
||||
<tr><td><pre>2001:0000:0000:1234:0000:5678:af23:bcd5</pre></td><td><pre>2001::1234:0:5678:af23:bcd5</pre></td></tr>
|
||||
<tr><td><pre>3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F</pre></td><td><pre>3FFF::1010:1A2B:5000:B00:DE0F</pre></td></tr>
|
||||
<tr><td><pre>fec0:2004:ab10:00cd:1234:0000:0000:6789</pre></td><td><pre>fec0:2004:ab10:cd:1234::6789</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:FFFF:172.16.255.1</pre></td><td><pre>::FFFF:172.16.255.1</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:0000:172.16.255.1</pre></td><td><pre>::172.16.255.1</pre></td></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:0000:0000:0000:0000</pre></td><td><pre>::</pre></td></tr>
|
||||
</table>
|
||||
|
||||
这里就有了两种以压缩形式表示完整IPv6地址的方法,要记住,**两种方法之间并不互相排斥**。也就是说,在表示一个IPv6地址时,可以同时使用这两种方法。当某个完整IPv6地址既包含了连续0s字符串,又在其它字段中有前导0s时,这经常会用到。表7.3展示了一些既包含了连续0s字符串,又有前导0s的一些IPv6地址的完整形式,以及如何将这些地址表示成压缩形式。
|
||||
|
||||
*表7.3 -- 使用了两种压缩格式方法的完整IPv6地址*
|
||||
|
||||
<table>
|
||||
<tr><th>完整IPv6地址表示法</th><th>压缩IPv6地址表示法</th></tr>
|
||||
<tr><td><pre>0000:0000:0000:0000:1a2b:000c:f123:4567</pre></td><td><pre>::1a2b:c:f123:4567</pre></td></tr>
|
||||
<tr><td><pre>FEC0:0004:AB10:00CD:1234:0000:0000:6789</pre></td><td><pre>FEC0:4:AB10:CD:1234::6789</pre></td></tr>
|
||||
<tr><td><pre>3FFF:0c00:0000:1010:1A2B:0000:0000:DE0F</pre></td><td><pre>3FFF:c00:0:1010:1A2B::DE0F</pre></td></tr>
|
||||
<tr><td><pre>2001:0000:0000:1234:0000:5678:af23:00d5</pre></td><td><pre>2001::1234:0:5678:af23:d5</pre></td></tr>
|
||||
</table>
|
||||
|
||||
###带有一个嵌入的IPv4地址的IPv6地址
|
||||
|
||||
**IPv6 Addresses with an Embedded IPv4 Address**
|
||||
|
||||
这是**第三种IPv6地址表示法,用于在IPv6地址内部使用一个IPv4地址**。尽管这也是有效的IPv6地址,但请记住这种方法是不赞成的做法,同时也在考虑废弃这种方法,因为该方法仅适用于从IPv4到IPv6的过渡。
|
||||
|
||||
##IPv6地址的不同类型
|
||||
|
||||
**The Different IPv6 Address Types**
|
||||
|
||||
**IPv4支持4中不同类别的地址,分别是任意播(Anycast)、广播(Broadcast)、多播(Multicast)及单播(Unicast)地址**。尽管在本教程之前的模块中并未用到任意播一词, 但要记住,**任意播地址并非特殊类型的地址**。相反,**一个任意播地址简单地就是一个分配给多个接口的IP地址**。常见的使用了任意播的技术包括IP多播应用(IP Multicast implementations),以及6to4中继应用(6to4 relay implementation)。
|
||||
|
||||
>**注意:** 6to4是一种IPv4迁移到IPv6的过渡机制。对于CCNA考试来说,只需知道有这么个东西就行了。
|
||||
|
||||
在任意播寻址方式下,**设备使用从路由协议度量值上看离它们最近的那个公共地址**(the common address)。假如该主要地址不可达时,就会使用下一个最近的地址(with Anycast adressing, devices use the common address that is closest to them based on routing protocol metric. The next closest address is then used in the event that the primary address is no longer reachable)。此概念在下图7.5中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图7.5 -- 理解任意播寻址方式*
|
||||
|
||||
在图7.5中,R1和R2都有一个配置了公共地址15.1.1.254/32的环回接口Loopback 254。该前缀此时会经由EIGRP进行通告。默认情况下,R1和R2都会经由它们各自的相应环回接口,优先选择15.1.1.254/32前缀,因为该前缀是一个直接连接的子网。因此,两台路由器上所使用的公共地址绝不会发生冲突。
|
||||
|
||||
假定是在一般EIGRP度量值计算下,则R3和R5都会优先选择R1通告的那个任意播地址(the Anycast address), 这是由于其有着较小的内部网关协议(Interior Gateway Protocol, IGP)度量值(due to the lower IGP metric)。同样R4和R6则会优先选择R3通告的那个任意播地址,也是由于其有着较小的IGP度量值。要是R1或R3中的某台失效,网络中的路由器就会使用由剩下的那台路由器通告的任意播地址了。某个组织在应用任意播分址时,既可以使用RFC 1918中定义的地址空间中的某个单播地址(私有地址),也可以使用其公网地址块中的某个单播地址。
|
||||
|
||||
>**注意:**当前的CCNA考试并不要求你采用任何的任意播分址或解决方案。但熟悉此概念是必要的。在完成路由章节的学习后,你将更为明白。*译者注:*关于任意播,可以参看[https://en.wikipedia.org/wiki/Anycast](https://en.wikipedia.org/wiki/Anycast),简单地说,任意播是一种冗余方法,可用来做负载均衡、加快访问速度。
|
||||
|
||||
在CCNA层次,IPv4的广播、多播及单播地址都无需更为详尽地阐述,本课程及本模块都不会对它们进行更为详细的说明。与IPv4支持这四种类型的地址相比,IPv6废除了广播地址,同时取而代之的仅支持以下类型的地址。
|
||||
|
||||
+ 本地链路地址,Link-Local addresses
|
||||
+ 站点本地地址,Site-Local addresses
|
||||
+ 可聚合全球单播地址,Aggregatable Global Unicast addresses
|
||||
+ 多播地址,Multicast addresses,已被废除,取而代之的是本地唯一地址(Unique-Local addresses, ULAs)
|
||||
+ 任意播地址,Anycast addresses
|
||||
+ 环回地址,Loopback addresses
|
||||
+ 未指明的地址,Unspecified addresses,`::/128`
|
||||
|
||||
###本地链路地址
|
||||
|
||||
**Link-Local Addresses**
|
||||
|
||||
**IPv6本地链路地址只能用在本地链路上**(也就是一个设备间所共享的网段),**是在某个接口上开启了IPv6时,自动分配给接口的**。这些地址分配自本地链路前缀(the Link-Local prefix)**`FE80::/10`**。记住`FE80::/10`等价于`FE80:0:0:0:0:0:0:0/10`, 又可以表示为`FE80:0000:0000:0000:0000:0000:0000:0000/10`。为了构成该地址,从第11到64位被设置为0, 同时接口的EUI-64(Extended Unique Identifier 64,64位扩展唯一标识)给追加到本地链路地址上去,作为下一顺位的64位(the lower-order 64 bits)。**EUI-64是由IEEE分配给接口产商的24位ID(Organization Unified Identifier, OUI),以及产商分配给其产品的40位值构成**。本模块稍后会更为详细地说明EUI-64分址。图7.6演示了本地链路地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.6 -- IPv6本地链路分址*
|
||||
|
||||
**本地链路地址是唯一的,一旦分配给了某个接口,就不再改变**。这就是说,某个接口在分配了一个公网IPv6地址后(比如,`2001:1000::1/64`),就算该公网IPv6前缀发生改变(变成`2001:2000::1/64`),本地链路地址也是不会改变的。这允许主机或路由器在IPv6全球互联网地址改变时,对其邻居始终保持可达。而**IPv6路由器是不会转发那些以本地链路地址作为源或目的地址的数据包,到其它IPv6路由器的**。
|
||||
|
||||
###站点本地地址
|
||||
|
||||
**Site-Local Addresses**
|
||||
|
||||
站点本地地址是**那些仅在某个站点内部使用的地址**。与本地链路地址不同,必须**在网络设备上手动为其配置站点本地地址**。这些地址就是在IPv6中,与RFC 1918所定义的私有IPv4地址等价的地址,对于那些没有可全球路由IPv6地址空间的组织,可以使用这些地址。在IPv6互联网上,这些地址是不可路由的。
|
||||
|
||||
尽管在IPv6上进行NAT是可能的,但绝不建议这么做。理由就是有着大得多的IPv6地址(hence, the reason for the much larger IPv6 addresses)。站点本地地址是由`FEC0::/10`前缀、该前缀之后的54位子网ID,以及同样的为本地链路地址所用到的EUI-64格式的接口ID组成。与本地链路地址中设置为0的54位相比,站点本地地址中的54位,被用于构建不同的IPv6前缀(最多2的54次幂个)。下图7.7演示了站点本地地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.7 -- IPv6站点本地分址*
|
||||
|
||||
尽管在本章节中有对IPv6站点本地地址进行说明,同时在思科IOS软件中仍有对其的支持,但要知道**这些地址已被RFC 3879(废弃站点本地地址,Deprecating Site Local Addresses)所废弃**。与此同时,**RFC 4193(唯一本地IPv6单播地址,Unique Local IPv6 Unicast Addresses)又阐述本地唯一地址(Unique-Local addresses, ULAs)**, 本地唯一地址提供了站点本地地址的功能,它们在IPv6全球互联网上也是不可路由的,仅能在某个站点内部路由。
|
||||
|
||||
本地唯一地址分配自`FC00::/7`这个IPv6地址块,该地址块又被划分成两个`/8`的地址块,分别作为分配组和随机组(the assigned and random groups)。那么这两组就分别是`FC00::/8`和`FD00::/8`了。`FC00::/8`这个地址块是由一个分配机构(an allocation authority)管理其使用到的/48s,同时`FD00::/8`地址块则是通过在其后追加上随机生成的40位字符串,得到的一个有效`/48`地址块的。
|
||||
|
||||
###可聚合全球单播地址
|
||||
|
||||
**Aggregatable Global Unicast Addresses**
|
||||
|
||||
**可聚合全球单播地址,就是那些用于一般IPv6流量传输、IPv6互联网的IPv6地址了**。这些地址与IPv4中用到的公网地址相似。而从网络分址角度看,每个IPv6全球单播地址都**是由三个主要部分构成的**:自服务商处收到的前缀(48位长)、站点前缀(16位长),以及主机部分(64位长)。这就构成了IPv6中所用到的128位地址了。
|
||||
|
||||
如同本模块前面提到的,服务商分配的前缀,是由IPv6服务提供商分配给作为其客户的某家组织的。默认情况下,这些前缀用到`/48`的前缀长度。此外,这些前缀又是从该服务提供商所拥有的IPv6地址空间中分配的(也就是/32前缀长度)。每家服务提供商都将有着其自己的IPv6地址空间,同时由一家服务提供商分配的IPv6前缀,不能在另一家的网络上使用。
|
||||
|
||||
而在某个站点内部,管理员此时就能通过用于子网划分的第49到64位,将服务提供商分配的48位前缀,划分成64位的站点前缀,从而可以得到65535个不同的,可在其网络中使用的子网。IPv6地址的主机部分表示该IPv6子网上的某台网络设备或主机。而这又是通过IPv6地址的低64位表示的(this is represented by the low-order 64 bits of the IPv6 address)。
|
||||
|
||||
IPv6的可聚合全球单播地址,是由互联网号码分配局(the Internet Assigned Numbers Authority, IANA)分配的,这些地址处于IPv6前缀`2000::/3`中。此前缀允许的可聚合全球单播地址范围是从`2000`到`3FFF`,如下表7.4所示。
|
||||
|
||||
*表7.4 -- IPv6可聚合全球单播地址*
|
||||
|
||||
<table>
|
||||
<tr><th>说明</th><th>地址</th><tr>
|
||||
<tr><td><pre>范围中的第一个地址</pre></td><td><pre>2000:0000:0000:0000:0000:0000:0000:0000</pre></td></tr>
|
||||
<tr><td><pre>范围中的最后一个地址</pre></td><td><pre>3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF</pre></td></tr>
|
||||
<tr><td><pre>二进制标记</pre></td><td><pre>高位序的三位被设置为001</pre></td></tr>
|
||||
</table>
|
||||
|
||||
在本模块编写时,`2000::/3`IPv6地址块中,仅分配使用了3个子网。这三个子网如下表7.5所示。
|
||||
|
||||
*表7.5 -- 由IANA所分配的IPv6可聚合全球单播地址*
|
||||
|
||||
<table>
|
||||
<tr><th>IPv6全球前缀</th><th>二进制表示法</th><th>说明</th></tr>
|
||||
<tr><td><pre>2001::/16</pre></td><td><pre>0010 0000 0000 0001</pre></td><td>全球IPv6互联网(单播)</td></tr>
|
||||
<tr><td><pre>2002::/16</pre></td><td><pre>0010 0000 0000 0000</pre></td><td>6to4迁移前缀</td></tr>
|
||||
<tr><td><pre>3FFE::/16</pre></td><td><pre>0010 1111 1111 1110</pre></td><td>6bone前缀</td></tr>
|
||||
</table>
|
||||
|
||||
>**注意:** 6to4迁移地址和6bone前缀将在本课程的后面说明。
|
||||
|
||||
在IPv6全球可聚合单播地址范围,保留了一个叫做**ORCHID**(RFC 4843中定义的覆盖可路由加密散列标识、Overlay Routable Cryptographic Hash Identifiers defined in RFC 4843)特别的实验范围。ORCHID是用于加密散列标识的不可路由IPv6地址。这些地址使用IPv6前缀`2001:10::/28`。关于ORCHID地址的细节,是超出当前CCNA考试要求范围的,本模块或本课程都不会包含。
|
||||
|
||||
###多播地址
|
||||
|
||||
**Multicast Addresses**
|
||||
|
||||
IPv6中用到的多播地址,是从`FF00::/8`这个IPv6前缀中得到的。IPv6中的多播和IPv4中的多播,运行的方式是不一样的。**IPv6中重度使用到IP多播**,并用IP多播替换了一些诸如地址解析协议(Address Resolution Protocol, ARP)这样的IPv4协议。此外,IPv6中还用多播来完成前缀通告及其重编号(prefix advertisements and renumbering), 以及重复地址侦测(Duplicate Address Detection, DAD)等。本模块后面会对这些概念进行说明。
|
||||
|
||||
**IPv6中的多播数据包**,不是通过使用TTL值来将其限制在本地网段上。代之以**使用多播地址内部的范围字段(the Scope filed),定义出其范围**。网段上的IPv6节点,都侦听着多播包,甚至也会发出多播包来交换信息。这样,IPv6网段上所有节点,都知道在其同一网段上所有其它邻居节点了。下图7.8中演示了IPv6网络中用到的多播地址格式。
|
||||
|
||||

|
||||
|
||||
*图7.8 -- IPv6多播分址*
|
||||
|
||||
如同图7.8中所演示的那样,IPv6多播地址格式与其它之前学到的IPv6地址略有不同。IPv6多播地址的前8位表示多播前缀FF::/8。IPv6多播地址的标志字段(the Flag field)用于指明多播地址类型 -- 是永久的还是临时的。
|
||||
|
||||
**IPv6永久多播地址是由IANA分配的,而IPv6临时地址则可用于多播预部署的测试**(Permanent IPv6 Multicast addresses are assigned by IANA, while temporary IPv6 Multicast addresses can be used in pre-deployment Multicast testing)。标志字段所包含的值可以是表7.6中所示的两个。
|
||||
|
||||
*表7.6 -- IPv6永久及临时多播地址*
|
||||
|
||||
<table>
|
||||
<tr><th><pre>多播地址类型</pre></th><th><pre>二进制表示法</pre></th><th><pre>十六进制值</pre></th></tr>
|
||||
<tr><td>永久</td><td><pre>0000</pre></td><td>0</td></tr>
|
||||
<tr><td>临时</td><td><pre>0001</pre></td><td>1</td></tr>
|
||||
</table>
|
||||
|
||||
多播地址中接下来的4位表示**多播范围**。在IPv6多播分址中,该字段是一个**用于限制多播数据包发往网络其它区域的_强制_字段**(this field is a mandatory field that restricts Multicast packets from being sent to other areas in the network)。该字段本质上提供了与IPv4中所用到的TTL字段一样的功能。但是,**在IPv6中,范围的类型有好几种**,下表7.7中列出了这些类型。
|
||||
|
||||
*表7.7 -- IPv6多播地址范围的类型*
|
||||
|
||||
<table>
|
||||
<tr><th><pre>范围类型</pre></th><th><pre>二进制表示法</pre></th><th><pre>十六进制值</pre></th></tr>
|
||||
<tr><td><pre>本地接口,Interface-Local</pre></td><td><pre>0001</pre></td><td>1</td></tr>
|
||||
<tr><td><pre>本地链路,Link-Local</pre></td><td><pre>0010</pre></td><td>2</td></tr>
|
||||
<tr><td><pre>本地子网, Subnet-Local</pre></td><td><pre>0011</pre></td><td>3</td></tr>
|
||||
<tr><td><pre>本地管理域范围,Admin-Local</pre></td><td><pre>0100</pre></td><td>4</td></tr>
|
||||
<tr><td><pre>本地站点范围,Site-Local</pre></td><td><pre>0101</pre></td><td>5</td></tr>
|
||||
<tr><td><pre>组织范围,Organization</pre></td><td><pre>1000</pre></td><td>8</td></tr>
|
||||
<tr><td><pre>全球范围,Global</pre></td><td><pre>1110</pre></td><td>E</td></tr>
|
||||
</table>
|
||||
|
||||
在这些IPv6多播前缀中,又**保留了一些地址**。这些保留地址称作多播指定地址(Multicast Assigned addresses), 如下表7.8中所示。
|
||||
|
||||
*表7.8 -- 保留的IPv6多播地址*
|
||||
|
||||
<table>
|
||||
<tr><th>地址</th><th>范围</th><th>说明</th></tr>
|
||||
<tr><td><pre>FF01::1</pre></td><td>主机</td><td>所有在本地接口范围内的主机</td></tr>
|
||||
<tr><td><pre>FF01::2</pre></td><td>主机</td><td>所有在本地接口范围内的路由器</td></tr>
|
||||
<tr><td><pre>FF02::1</pre></td><td>本地链路</td><td>所有在本地链路范围内的主机</td></tr>
|
||||
<tr><td><pre>FF02::2</pre></td><td>本地链路</td><td>所有在本地链路范围内的路由器</td></tr>
|
||||
<tr><td><pre>FF05::2</pre></td><td>站点</td><td>所有在本地站点范围内的路由器</td></tr>
|
||||
</table>
|
||||
|
||||
除了这些地址外,对路由器接口和网络主机上配置的每个单播和任意播地址,都自动启用了一个节点询问多播地址(a Solicited-Node Multicast address)。此地址有着一个本地链路范围,就是说该地址绝不会超出本地网段之外(this address has a Link-Local scope, which means that it will never traverse farther than the local network segment)。**节点询问多播地址用于以下两个目的:取代IPv4的ARP和DAD**。
|
||||
|
||||
由于IPv6不会用到ARP,那么节点询问多播地址就被网络主机和路由器用于获悉邻居设备的数据链路地址(the Data Link address)。这样就可以实现IPv6数据包向帧的转换,并将帧发往IPv6主机和路由器了。DAD是IPv6邻居发现协议(Neighbor Discovery Protocol, NDP)的一部分, 在本模块的稍后会详细说明这个协议。DAD就是在设备在采用自动配置方法时,将某个IPv6地址配置为其自己的地址之前,检查该地址是否在本地网段上已被使用的方法。本质上,DAD提供与IPv4中用到的无故ARP(Gratuitous ARP)相似的功能。这些**节点询问多播地址**, 是由IPv6前缀`FF02::1:FF00:0000/104`定义出来的。它们的构成为前缀`FF02::1:FF00:0000/104`, 与单播或任意播地址低位序的24位结合而成。图7.9演示了这些节点询问多播地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.9 -- IPv6节点询问多播地址*
|
||||
|
||||
而作为与IPv4到二层以太网的多播映射的一个类似方案,**IPv6提供了一种独特的方法,来将三层IPv6多播地址,映射到二层多播地址**。IPv6中的多播映射是通过在某多播地址的后32位加上一个16位前缀`33:33`,这个前缀就是IPv6网络中定义的多播以太网前缀(the defined Multicast Ethernet prefix for IPv6 Networks)。其在下图7.10中,演示了所有位于本地接口范围前缀`FF02::2`上的路由器的以太网映射多播地址。
|
||||
|
||||

|
||||
|
||||
*图7.10 -- IPv6多播地址*
|
||||
|
||||
###任意播地址
|
||||
|
||||
**Anycast Addresses**
|
||||
|
||||
本章节的早前引入了任意播,其可被简单地说成是一对最近的通信(one-to-nearest communication), 这是因为基于路由协议度量值的那个最近的公共地址(the nearest common address),总是会为本地设备所优先选用。**在IPv6中,并无为任意播特别分配的地址范围**,因为**任意播地址使用的是全球单播地址、站点本地地址,甚或本地链路地址**。尽管如此,仍然保留一个作为特殊用途的任意播地址。该特别地址被称为**子网路由器任意播地址**(the Subnet-Router Anycast address),是由前面的该子网64位单播前缀,及将后64位全部设置为0(比如`2001:1a2b:1111:d7e5::`)构成的。**任意播地址是绝对不能作为某个IPv6数据包的源地址的**。它们典型地用于诸如移动IPv6(Mobile IPv6)等的协议中,任意播地址的用途,超出CCNA考试范围。
|
||||
|
||||
###环回地址
|
||||
|
||||
**Loopback Address**
|
||||
|
||||
IPv6中的环回地址,用法和IPv4中的一样。与IPv4中用到的环回地址`127.0.0.1`相比,每台设备也都有一个IPv6环回地址,且该地址有设备自身使用。IPv6环回地址用的是前缀`::1`, 用首选地址格式表示为`0000:0000:0000:0000:0000:0000:0000:0001`。也就是说,在环回地址中,除了最后一位总是1外,其它所有位都设置为0。当设备开启IPv6时,总是会自动分配上这些地址,且这些地址绝不会发生变化。
|
||||
|
||||
###未指明地址
|
||||
|
||||
**Unspecified Addresses**
|
||||
|
||||
在IPv6分址里,未指明地址就是那些没有指派到任何接口上的单播地址。这些地址表明设备缺少一个IPv6地址,同时这些地址还用于某些诸如IPv6 DHCP和DAD等的用途。未指明地址是以IPv6地址中的全0值表示的,可以使用前缀`::`进行书写。在首选格式下,这些地址表示为`0000:0000:0000:0000:0000:0000:0000:0000`。
|
||||
|
||||
##一些IPv6的协议和机制
|
||||
|
||||
**IPv6 Protocols and Mechanisms**
|
||||
|
||||
尽管互联网协议版本6与版本4是相似的,但在具体运作上,前者与后者相比仍然有着显著的不同。本节对以下的一些IPv6协议和机制进行了说明。
|
||||
|
||||
+ IPv6的ICMP
|
||||
+ IPv6邻居发现协议(the IPv6 Neighbor Discovery Protocol, NDP)
|
||||
+ IPv6的有状态自动配置机制(IPv6 stateful autoconfiguration)
|
||||
+ IPv6的无状态自动配置机制(IPv6 stateless autoconfiguration)
|
||||
|
||||
###IPv6下的ICMP
|
||||
|
||||
**ICMP for IPv6**
|
||||
|
||||
ICMP用于将有关发往预期目的主机的IP数据的错误和其他信息,汇报给源主机。在RFC 2463中,作为58号协议定义的ICMPv6,支持ICMPv4的各种报文,还包含了ICMPv6的一些额外报文。**ICMPv6作为一个如同TCP一样的,属较高级别的协议,意味着在IPv6数据包中,ICMPv6是放在所有尽可能的扩展头部之后的**。下图7.11演示了ICMPv6数据包中所包含的字段。
|
||||
|
||||

|
||||
|
||||
*图7.11 -- ICMPv6数据包头部*
|
||||
|
||||
在ICMPv6数据包头部,其8位**类型字段**(the 8-bit Type field)**用于表明或区分ICMPv6报文类型**。该字段用于提供错误报文和信息性报文。表7.9列出并说明了一些可在此字段发现的常见值。
|
||||
|
||||
*表7.9 -- ICMPv6报文类型*
|
||||
|
||||
<table>
|
||||
<tr><th>ICMPv6 类型</th><th>说明</th></tr>
|
||||
<tr><td>1</td><td>目的主机不可达</td></tr>
|
||||
<tr><td>2</td><td>数据包太大</td></tr>
|
||||
<tr><td>3</td><td>发生了超时</td></tr>
|
||||
<tr><td>128</td><td>Echo请求</td></tr>
|
||||
<tr><td>129</td><td>Echo回应</td></tr>
|
||||
</table>
|
||||
|
||||
> **注意:** ICMPv4也是使用的这些报文类型。
|
||||
|
||||
紧接着类型字段的8位**代码字段**(the 8-bit Code field),**提供了有关发出的报文细节信息**。表7.10演示了该字段的常用值,也是ICMPv4所共用的。
|
||||
|
||||
*表7.10 -- ICMPv6代码*
|
||||
|
||||
<table>
|
||||
<tr><th>ICMPv6代码</th><th>说明</th></tr>
|
||||
<tr><td>0</td><td>Echo回应</td></tr>
|
||||
<tr><td>3</td><td>目的主机不可达</td></tr>
|
||||
<tr><td>8</td><td>Echo</td></tr>
|
||||
<tr><td>11</td><td>发生了超时</td></tr>
|
||||
</table>
|
||||
|
||||
在代码字段后面的16位**校验和字段**(the 16-bit Checksum field),包含一个用于检测ICMPv6中数据错误的运算值。ICMPv6数据包的最后,就是报文或数据二选一的字段(the Message or Data field is an optional), 它是一个可变长度字段,包含了由类型及代码字段指明的报文类型特定数据。在用到报文或数据字段时,该字段提供了发送给目的主机的信息。
|
||||
|
||||
**ICMPv6是IPv6的一个核心部件**。在IPv6中,ICMPv6有以下用途。
|
||||
|
||||
+ 重复地址检测,Duplicate Address Detection, DAD
|
||||
+ ARP的替代,the replacement of ARP
|
||||
+ IPv6无状态自动配置, IPv6 stateless autoconfiguration
|
||||
+ IPv6前缀重新编号, IPv6 prefix renumbering
|
||||
+ 路径MTU发现,Path MTU Discovery, PMTUD
|
||||
|
||||
> **注意:** 在上述用途中,DAD和无状态自动配置会在本章的稍后进行说明。PMTUD是超出当前CCNA考试要求范围的,在本模块及本教程中不会对其进行任何细节上的说明。
|
||||
|
||||
**IPv6邻居发现协议**
|
||||
|
||||
**The IPv6 Neighbor Discovery Protocol, NDP**
|
||||
|
||||
**IPv6邻居发现协议带来IPv6的即插即用特性**。它是在RFC 2461中定义的,是IPv6的一个必不可少的组成部分。**NDP运行在链路层**,负责**发现链路上的其它节点**、**确定其它节点的链路层地址**、**发现可用的路由器**,以及**维护有关到其它邻居节点路径的可达性信息**。**NDP实现了IPv6的类似于IPv4的ARP**(这正是其取代的功能)、**ICMP路由器发现**(ICMP Router Discovery)以及**路由器重定向协议(Router Redirect Protocols)等功能**。尽管如此,要记住NDP提供了比起IPv4中用到的诸多机制,都更为了不起的功能。在与ICMPv6配合使用时,NDP可以完成以下任务。
|
||||
|
||||
+ 动态邻居和路由器发现,dynamic neighbor and router discovery
|
||||
+ 取代ARP,the replacement of ARP
|
||||
+ IPv6无状态自动配置,IPv6 stateless autoreconfiguration
|
||||
+ 路由器重定向,router redirection
|
||||
+ 主机参数发现,host parameter discovery
|
||||
+ IPv6地址解析,IPv6 address resolution
|
||||
+ 确定下一跳路由器,next-hop router determination
|
||||
+ 邻居不可达检测,Neighbor Unreachablitiy Detection, NUD
|
||||
+ 重复地址检测,Duplicate Address Detection, DAD
|
||||
|
||||
> **注意:** 并不要求对上面列出的每个优势进行细节上的探究。
|
||||
|
||||
邻居发现协议又定义了五种ICMPv6数据包类型,在下表7.11中有列出和说明。
|
||||
|
||||
*表7.11 -- ICMPv6邻居发现报文类型*
|
||||
|
||||
<table>
|
||||
<tr><th>ICMPv6类型</th><th>说明</th></tr>
|
||||
<tr><td>133</td><td>用于路由器询问报文,used for Router Solicitation(RS) messages</td></tr>
|
||||
<tr><td>134</td><td>用于路由器通告报文,used for Router Advertisement(RA) messages</td></tr>
|
||||
<tr><td>135</td><td>用于邻居询问报文,used for Neighbor Solicitation(NS) messages</td></tr>
|
||||
<tr><td>136</td><td>用于邻居通告报文,used for Neighbor Advertisement(NA) messages</td></tr>
|
||||
<tr><td>137</td><td>用于路由器重定向报文, used for Router Redirect messages</td></tr>
|
||||
</table>
|
||||
|
||||
**路由器询问报文**(Router Solicition messages)由主机在其接口开启IPv6时所发出。这些报文用于请求本地网段上的路由器立即生成RA报文,而不要等到下一个计划的RA时间间隔才生成RA报文。下图7.2演示了一条在线路上捕获到的RS报文。
|
||||
|
||||

|
||||
|
||||
*图7.12 -- IPv6路由器询问报文*
|
||||
|
||||
路由器收到该RS报文后,便使用RA报文通告其存在,RA报文通常包含了本地链路的前缀信息,及所有诸如建议跳数限制等额外配置。RA中包含的信息在下图7.13中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图7.13 -- IPv6路由器通告报文*
|
||||
|
||||
这里重申一点,**RS和RA报文,都是路由器到主机(route-to-host)或主机到路由器(host-to-router)的信息交换**, 如下图所示。
|
||||
|
||||

|
||||
|
||||
*图7.14 -- IPv6的RS和RA报文*
|
||||
|
||||
IPv6的**邻居询问报文**(Neighbor Solicition messages),则是本地网段上的IPv6路由器所发出的多播报文,用于确定某个邻居的数据链路地址,或是用于检查某个邻居是否仍然可达(因而NS报文取代的是ARP的功能)。这些报文也用于重复地址检测(DAD)目的。尽管对NS报文的深入探究超出了CCNA考试要求的范围,下面的图7.15仍然演示了一个在线路上捕获到的IPv6邻居询问报文数据包。
|
||||
|
||||

|
||||
|
||||
*图7.15 -- IPv6邻居询问报文*
|
||||
|
||||
而**邻居通告报文**(Neighbor Advertisement messages)通常也是由本地网段上的路由器发出,用于对收到的NS报文进行回应。此外,**在一个IPv6前缀改变时,路由器也会发出一条无询问的NS报文**,以此来告知本地网络网段上的其它设备,发生了这个变化。在NA报文上,对NA报文中的格式或包含的字段的细节探究,也是超出CCNA考试要求范围之外的。图7.16和图7.17演示了一条在线路上捕获的邻居通告报文,**邻居通告报文也是通过IPv6多播发出的**。
|
||||
|
||||

|
||||
|
||||
*图7.16 -- IPv6邻居通告报文*
|
||||
|
||||

|
||||
|
||||
*图7.17 -- IPv6邻居通告报文*
|
||||
|
||||
最后,**路由器重定向**(router redirect)**使用报文类型为137的ICMPv6重定向报文**(ICMPv6 Redirect messages),路由器重定向用于告知网络主机,网络上存在一台路由器,该路由器有着前往预计目的主机的更优路径。ICMPv6的路由器重定向与ICMPv4的工作方式一样,而ICMPv4的路由器重定向就是用来对当前IPv4网络中的流量进行重定向的。
|
||||
|
||||
###IPv6的有状态自动配置
|
||||
|
||||
**IPv6 Stateful Autoconfiguration**
|
||||
|
||||
如同本模块先前指出的那样,有状态自动配置允许网络主机从某台网络服务器(比如通过DHCP)上收到其地址信息。IPv4和IPv6都支持这种方式。在IPv6网络中,使用DHCPv6来为IPv6主机提供有状态(及无状态)自动配置服务。**在IPv6的部署中,当某台IPv6主机收到来自本地网段上的路由器RA报文后,该主机就会检查这些数据包,以判定是否可以使用DHCPv6**。RA报文通过将那些M(受管理的,Managed)或O(其它方式,Other)位设置为1的方式,提供是否可以使用DHCPv6的信息。
|
||||
|
||||
在DHCP下,客户端设定为从DHCP服务器取得有关信息。而在DHCPv6下,客户端却并不知道从哪里得到这些信息,因为既可以从SLAAC,也可以从有状态的DHCPv6, 抑或从结合了SLAAC及DHCPv6两种的方式取得。
|
||||
|
||||
RA报文中的M位,指的是受管理的地址配置标志位(the Managed Address Configuration Flag bit)。在此位设置了时(也就是说该位的值为1时), 它指示IPv6主机要取得一个由DHCPv6服务器所提供有状态的地址,并忽略之后的O位。而路由器通告报文中的O位,指的是其它有状态配置标志位(the Other Stateful Configuration Flag bit)。当该位设置了(也就是说该位的值为1)后,指示IPv6主机要使用DHCPv6,来取得更多的设置项,比如DNS及WINS服务器等。
|
||||
|
||||
如某台主机未曾配置一个IPv6地址,它就可以采用下面的三种方法之一,来获得一个IPv6地址,及诸如DNS服务器地址等的其他网络设置。
|
||||
|
||||
+ SLAAC -- 无状态自动配置(StateLess Address AutoConfiguration),M和O位设置为0。也就是没有DHCPv6信息。主机从一条RA收到所有必要信息。
|
||||
+ 有状态DHCPv6 -- M标志位设置为1, 告诉主机使用DHCPv6取得所有地址和网络信息。
|
||||
+ 无状态DHCPv6 -- M标志位设置为0, O标志位设置为1, 意味着主机将采用SLAAC来得到地址(从一条RA),而同时从DNS服务器取得其它信息。
|
||||
|
||||
尽管SLAAC能力是IPv6的一项优势,有状态自动配置仍然有着许多好处,包括以下这些。
|
||||
|
||||
+ 相较SLAAC所提供的那些项目,有状态自动配置有着更大的控制权
|
||||
+ 在SLAAC网络上,同样可以使用有状态自动配置
|
||||
+ 在缺少路由器的情形下,仍然可以为网络主机提供分址
|
||||
+ 通过分配新的前缀给主机,而用来对网络重新编号
|
||||
+ 可用于将全部子网发布给用户侧设备(can be used to issue entire subnets to customer premise equipment,稍后会有说明)
|
||||
|
||||
###IPv6无状态自动配置
|
||||
|
||||
**IPv6 Stateless Address Autoconfiguration, SLAAC**
|
||||
|
||||
IPv6容许设备为自己配置一个IP地址,以便进行主机到主机的通信。有状态自动配置需要一台服务器来分配地址信息,对于IPv6来说,就要用到DHCPv6。有状态就是说,信息交换的细节在服务器(或路由器)上是有保存的,那么无状态就说的是没有服务器来保存这些细节了。DHCPv6既可以是有状态的,也可以是无状态的。
|
||||
|
||||
在IPv6中,SLAAC允许主机依据本地网络网段上的路由器发出的前缀通告,自己配置其单播IPv6地址。所需的其它信息(比如DNS服务器地址等)则可从DHCPv6服务器获取。IPv6中SLAAC用到的三种机制,如下所示。
|
||||
|
||||
+ 前缀通告,prefix advertisement
|
||||
+ 重复地址检测,DAD
|
||||
+ 前缀重编号,prefix renumbering
|
||||
|
||||
**前缀通告**
|
||||
|
||||
**prefix advertisement**
|
||||
|
||||
IPv6地址前缀通告用到了ICMPv6 RA报文,而ICMPv6 RA是发往链路上的所有主机(all-hosts-on-the-local-link)的,带有多播地址`FF02::1`的ICMPv6数据包。根据IPv6的设计,仅有路由器才被允许在本地链路上通告前缀。在采行SLAAC后,就务必要记住,所用到的前缀长度,必须是64位(比如`2001:1a2b::/64`)。
|
||||
|
||||
在前缀配置之后,SLAAC用到的RA报文还包含了以下信息。
|
||||
|
||||
+ IPv6前缀,the IPv6 prefix
|
||||
+ 生命期,the lifetime
|
||||
+ 默认路由器信息,default router information
|
||||
+ 标志和/或选项字段,Flags and/or Options fields
|
||||
|
||||
就像刚才指出的那样,**IPv6前缀必须是64位**。此外,**本地网段上还可以通告多个的IPv6前缀**。在该网络网段上的主机收到IPv6前缀后,就将它们的MAC地址以EUI-64格式,追加到前缀后面,从而自动地配置上他们的IPv6单播地址,这在本模块的先前部分已有说明。这样就为该网段上的每台主机,都提供了一个唯一的128位IPv6地址。
|
||||
|
||||
SLAAC RA报文也提供了每个通告前缀的生命期数值给这些节点,生命期字段可以是从0到无穷的值。节点在收到前缀后,就对该前缀的生命期值进行验证,从而在生命期数值到0时停用该前缀。此外,如收到生命期值为无穷的某个特定前缀,网络主机就绝不会停用那个前缀。每个通告前缀又带有两个生命期值:**有效生命期值**及**首选生命期值**(the valid and preferred lifetime value)。
|
||||
|
||||
有效生命期值用于确定出该主机地址将保持多长时间的有效期。在该值超时后(也就是说到值为0时),带有该前缀的主机地址就成为无效地址。而首选生命期值则用于确定经由SLAAC方式配置的某个地址将保持多长时间的有效期。此值必须小于或等于在有效生命期值,同时该值通常用于前缀的重编号。
|
||||
|
||||
SLAAC RA的默认路由器,提供了其本身IPv6地址的存在情况和生命期。默认情况下,用于默认路由器的那个地址是本地链路地址(`FE80::/10`)。这样做就可以在全球单播地址发生改变时,也不会像在IPv4中那样,在某个网络被重新编号时,导致网络服务中断。
|
||||
|
||||
最后,一些标志和选项字段可被用作指示网络主机采行SLAAC或有状态自动配置。这些字段在图7.13中的RA线路捕获中有包含。
|
||||
|
||||
**重复地址检测**
|
||||
|
||||
**Duplicated Address Detection, DAD**
|
||||
|
||||
重复地址检测(DAD)是一种用在SLAAC中,在某网段上主机启动时,用到的NDP机制。DAD要求某台网络主机启动期间,在永久地配置它自己的IPv6地址之前,先要确保没有别的网络主机已经使用了它打算使用的那个地址。
|
||||
|
||||
DAD通过使用邻居询问(135类型的ICMPv6)及节点询问多播地址(Solicited-Node Multicast addresses),来完成这个验证。主机使用一个未指明IPv6地址(an unspecified IPv6 address, 也就是地址`::`)作为报文数据包的源地址,并将其打算使用的那个IPv6单播地址,作为目的地址,在本地网段上发送一个邻居询问ICMPv6报文数据包。如有其它主机使用着该地址,那么主机就不会自动将此地址配置为自己的地址;而如没有其他设备使用这个地址,则该主机就自动配置并开始使用这个IPv6地址了。
|
||||
|
||||
**前缀重编号**
|
||||
|
||||
**prefix renumbering**
|
||||
|
||||
最后,前缀重编号(prefix renumbering)机制允许IPv6网络从一个前缀变为另一个时,进行前缀透明重编号。与IPv4中同样的全球IP地址可由多个服务提供商进行通告不同,IPv6地址空间的严格聚合阻止了服务提供商对不属于其组织的前缀进行通告(Unlike in IPv4, where the same global IP address can be advertised by multiple providers, the strict aggregation of the IPv6 address space prevents providers from advertising prefixes that do not belong to their organization)。
|
||||
|
||||
在网络发生从一家IPv6服务提供商迁移至另一家时,IPv6前缀重编号机制,就提供了一种自一个前缀往另一前缀平滑和透明的过渡。前缀重编号使用与在前缀通告中同样的ICMPv6报文和多播地址。而前缀重编号可经由运用RA报文中包含的时间参数完成。
|
||||
|
||||
在思科IOS软件中,路由器可配置为通告带有被减少到接近0的有效和首选生命期当前前缀,这就令到这些前缀能够更快地成为无效前缀。此时再将这些路由器配置为在本地网段上通告新前缀。这样做将允许旧前缀和新前缀在同一网段上并存。
|
||||
|
||||
迁移期间,本地网段上的主机用着两个单播地址:一个来自旧的前缀,一个来自新的前缀。那些使用旧前缀的当前连接仍被处理着;但所有自主机发出的新连接,则都使用新前缀。在旧前缀超时后,就只使用新前缀了。
|
||||
|
||||
###配置无状态DHCPv6
|
||||
|
||||
**Configuring Stateless DHCPv6**
|
||||
|
||||
为在某台路由器上配置无状态的DHCPv6, 需要完成一些简单的步骤。
|
||||
|
||||
+ 创建地址池名称和其它参数, create the pool name and other parameters
|
||||
+ 在某个借口上开启它, enable it on an interface
|
||||
+ 修改RA设置,modify Router Advertisement settings
|
||||
|
||||
一个身份关联是分配给客户端的一些地址(an Identity Association is a collection of addresses assigned to the client)。使用到DHCPv6的每个借口都必须要有至少一个的身份关联(IA)。这里不会有CCNA考试的配置示例。
|
||||
|
||||
###在思科IOS软件中开启IPv6路由
|
||||
|
||||
现在,你对IPv6基础知识有了扎实掌握,本模块剩下的部分将会专注于思科IOS软件中IPv6的配置了。默认下,思科IOS软件中的IPv6路由功能是关闭的。那么就必须通过使用__`ipv6 unicast-routing`这个全局配置命令__来开启IPv6路由功能。
|
||||
|
||||
在全局开启IPv6路由之后,接口配置命令`ipv6 address [ipv6-address/prefix-length | prefix-name sub-bits/prefix-length | anycast | autoconfig <default> | dhcp | eui-64 | link-local]`就可以用于配置接口的IPv6分址了。关键字`[ipv6-address/prefix-length]`用于指定分配给该接口的IPv6前缀和前缀长度。下面的配置演示了如何为一个路由器接口配置子网`3FFF:1234:ABCD:5678::/64`上的第一个地址。
|
||||
|
||||
```
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ipv6 address 3FFF:1234:ABCD:5678::/64
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
按照此配置,`show ipv6 interface [name]`命令就可用于验证配置的IPv6地址子网(即`3FFF:1234:ABCD:5678::/64`), 如下面的输出所示。
|
||||
|
||||
```
|
||||
R1#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::20C:CEFF:FEA7:F3A0
|
||||
Global unicast address(es):
|
||||
3FFF:1234:ABCD:5678::1, subnet is 3FFF:1234:ABCD:5678::/64
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF00:1
|
||||
FF02::1:FFA7:F3A0
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
就如在本模块早先指出的那样,IPv6允许在同一接口上配置多个前缀。而如过在同一借口上配置了多个前缀,`show ipv6 interface [name] prefix`命令,就可以用来查看所有分配的前缀,以及它们各自的有效和首选生命期数值。下面的输出显示了在一个配置了多个IPv6前缀的路由器接口上,该命令所打印出的信息。
|
||||
|
||||
<pre>
|
||||
R1#show ipv6 interface FastEthernet0/0 prefix
|
||||
<b>IPv6 Prefix Advertisements FastEthernet0/0</b>
|
||||
Codes: A - Address, P - Prefix-Advertisement, O - Pool
|
||||
U - Per-user prefix, D - Default
|
||||
N - Not advertised, C - Calendar
|
||||
default [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD <b>3FFF:1234:ABCD:3456::/64</b> [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD <b>3FFF:1234:ABCD:5678::/64</b> [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD <b>3FFF:1234:ABCD:7890::/64</b> [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD <b>3FFF:1234:ABCD:9012::/64</b> [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
</pre>
|
||||
|
||||
> **注意:** 和早前指出的一样,有效和首选生命期数值可自默认值进行修改,以实现在应用前缀重编号时的平滑过渡。但此配置是超出CCNA范围的,所以本教程不会对其进行演示。
|
||||
|
||||
跟着接口配置命令`ipv6 prefix`的使用之后,关键字`[prefix-name sub-bits/prefix-length]`用于配置一个通用前缀(a general prefix),通用前缀指定要配置到该接口上的子网的那些前导位。这个配置也是超出当前CCNA考试要求的,本模块不会对其进行演示。
|
||||
|
||||
关键字`[anycast]`用于配置一个IPv6任意播地址。和先前指出的那样,任意播分址允许将同一个**公共地址**(the same common address)分配到多个路由器接口。主机使用从路由协议度量值上看离它们最近的任意播地址。任意播配置超出CCNA考试要求范围,不会在本模块进行演示。
|
||||
|
||||
`[autoconfig <default>]`关键字开启SLAAC。如用到该关键字,路由器将动态学习链路上的前缀,之后将EUI-64地址加到所有学习到的前缀上。`[default]`关键字是一个允许安装一条默认路由的可选关键字(the `<default>` keyword is an optional keyword that allows a default route to be installed)。下面的配置样例,演示了如何在某个路由器接口上开启无状态自动配置,同时额外地允许安装上默认路由。
|
||||
|
||||
```
|
||||
R2(config)#ipv6 unicast-routing
|
||||
R2(config)#interface FastEthernet0/0
|
||||
R2(config-if)#ipv6 address autoconfig default
|
||||
R2(config-if)#exit
|
||||
```
|
||||
|
||||
按照这个配置,路由器R2将会监听FastEthernet0/0接口所在本地网段上的RA报文。该路由器将会对每个学习到的前缀,动态地配置一个EUI-64地址,并接着安装上指向该RA通告路由器本地链路地址的默认路由。使用`show ipv6 interface [name]`命令,即可对动态地址配置进行验证,如下面的输出所示。
|
||||
|
||||
<pre>
|
||||
R2#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::213:19FF:FE86:A20
|
||||
Global unicast address(es):
|
||||
<b>3FFF:1234:ABCD:3456:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:3456::/64 [PRE]</b>
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
<b>3FFF:1234:ABCD:5678:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:5678::/64 [PRE]</b>
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
<b>3FFF:1234:ABCD:7890:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:7890::/64 [PRE]</b>
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
<b>3FFF:1234:ABCD:9012:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:9012::/64 [PRE]</b>
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
<b>FEC0:1111:1111:E000:213:19FF:FE86:A20, subnet is FEC0:1111:1111:E000::/64 [PRE]</b>
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF86:A20
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
</pre>
|
||||
|
||||
在上面的输出中,注意到尽管接口上没有配置显式的IPv6地址,还是动态地为经由侦听RA报文所发现的子网,配置了一个EUI-64地址。每个这些前缀的计时器,都继承自通告RA报文的那台路由器。为了进一步验证无状态自动配置,可以使用`show ipv6 route`命令,来验证到首选通告路由器本地链路地址的默认路由,如下面所演示的那样。
|
||||
|
||||
<pre>
|
||||
R2#show ipv6 route ::/0
|
||||
IPv6 Routing Table - 13 entries
|
||||
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
|
||||
U - Per-user Static route
|
||||
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS inter area, IS - ISIS summary
|
||||
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
|
||||
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
|
||||
<b>S ::/0 [1/0]
|
||||
via FE80::20C:CEFF:FEA7:F3A0, FastEthernet0/0</b>
|
||||
</pre>
|
||||
|
||||
在命令`ipv6 address`之后,关键字`[dhcp]`用于配置该路由器接口使用有状态自动配置(也就是DHPCv6),来请求该接口的分址配置。在此配置下,有着一个额外的关键字,`[rapid-commit]`, 同样可以追加到此命令之后,以开启地址分配及其它配置信息的二报文交换快速方式(the two-message exchange method)。
|
||||
|
||||
再回到讨论主题,在`ipv6 address`命令下,关键字`[eui-64]`用于为某个接口配置一个IPv6地址,并在地址的低64位使用一个EUI-64地址而在该接口上开启IPv6处理。默认情况下,**本地链路、站点本地以及IPv6 SLAAC**都用到EUI-64格式来构造其各自的IPv6地址。EUI-64分址**将48位MAC地址扩展到一个64位地址**。通过两步实现该扩展,这两步将在下一段进行说明。**该过程就叫作SLAAC**。
|
||||
|
||||
构造EUI-64地址的**第一步,将值`FFFE`插入到MAC地址中间**,就将12个十六进制字符的48位MAC地址扩展到16个十六进制字符的64位了。下图7.18演示了48位MAC地址到64位EUI地址的转换。
|
||||
|
||||

|
||||
|
||||
*图7.18 -- 创建EUI-64地址*
|
||||
|
||||
EUI-64分址的下一步,涉及64位的第7位设置。**此第7位用于区分该MAC地址是否是唯一的**。如该位设置为1, 就表明该MAC地址是一个全球受管理MAC地址(a globally managed MAC address)-- 也就是说该MAC地址是有某厂商分配的。如该位设置为0, 就表明该MAC地址是本地分配的--就意味着该MAC地址有可能是由管理员添加的。为更进一步搞清楚此声明,MAC地址实例`02:1F:3C:59:D6:3B`就被认为是一个全球分配的MAC地址(a globally-assigned MAC address), 而MAC地址`00:1F:3C:59:D6:3B`则被看作是一个本地地址。下图7.19有演示。
|
||||
|
||||

|
||||
|
||||
*图7.19 -- 确定本地及全球MAC地址*
|
||||
|
||||
按照这样的配置,命令`show ipv6 interface`就可用于验证验证分配到接口FastEthernet0/0上的IPv6接口ID, 如下面的输出所示。
|
||||
|
||||
<pre>
|
||||
R2#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::213:19FF:FE86:A20
|
||||
<b>Global unicast address(es):
|
||||
3FFF:1A2B:3C4D:5E6F:213:19FF:FE86:A20, subnet is 3FFF:1A2B:3C4D:5E6F::/64 [EUI]</b>
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF86:A20
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
</pre>
|
||||
|
||||
要验证该EUI-64地址的构造过程,同样可以通过使用`show interface`命令,查看指定接口的MAC地址的方式,来检查该完整的IPv6地址。
|
||||
|
||||
<pre>
|
||||
R2#show interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
<b>Hardware is AmdFE, address is 0013.1986.0a20 (bia 0013.1986.0a20)</b>
|
||||
Internet address is 10.0.1.1/30
|
||||
</pre>
|
||||
|
||||
从上面的输出可以看出,该EUI-64地址实际上是有效的,且是基于该接口的MAC地址。此外,该地址是全球地址,因为那个第七位是开启的(也就是改为包含的是一个非零值)。
|
||||
|
||||
最后的`[link-local]`关键字用于分配给接口一个本地链路地址。一定要记住在默认情况下,对于动态地创建出一个本地链路地址来说,接口上并不是非得要启用一个IPv6前缀。而是当在某个接口下执行了接口配置命令`ipv6 enable`时,就会以EUI-64分址方式,自动创建出那个接口的一个本地链路地址。
|
||||
|
||||
而如果要手动配置一个本地链路地址,就必须分配一个本地链路地址块`FE80::/10`中的地址。下面的配置实例,演示了如何在某接口上配置一个本地链路地址。
|
||||
|
||||
```
|
||||
R3(config)#interface FastEthernet0/0
|
||||
R3(config-if)#ipv6 address fe80:1234:abcd:1::3 link-local
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
按照该配置,就可用`show ipv6 interface [name]`命令验证这个手动配置的本地链路地址,如下面的输出所示。
|
||||
|
||||
```
|
||||
R3#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80:1234:ABCD:1::3
|
||||
Global unicast address(es):
|
||||
2001::1, subnet is 2001::/64
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF00:1
|
||||
FF02::1:FF00:1111
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
> **注意:** 在进行手动配置本地链路地址时,如思科IOS软件侦测到另一主机正在使用一个它的IPv6地址,控制台上就会打印出一条错误消息,同时该命令将被拒绝。所以在手动配置本地链路地址时,要小心仔细。
|
||||
|
||||
###IPv6子网划分
|
||||
|
||||
**Subnetting with IPv6**
|
||||
|
||||
如你已经学到的,IPv6地址分配给机构的是一个前缀。而IPv6地址的主机部分总是64位的EUI-64, 同时**标准的**前缀通常又是48位或/48。那么剩下的16位,就可由网络管理员自主用于子网划分了。
|
||||
|
||||
在考虑网络分址时,因为同样的规则对IPv4和IPv6都是适用的,那就是**每个网段只能有一个网络**。不能分离地址而将一部分主机位用在这个网络,另一部分主机位用在其它网络。
|
||||
|
||||
如你看着下面图表中的分址,就能更清楚这个情况。
|
||||
|
||||
<table>
|
||||
<tr><th>全球路由前缀</th><th>子网ID</th><th>接口ID</th></tr>
|
||||
<tr><td>48位或/48</td><td>16位(65535个可能的子网)</td><td>64位</td></tr>
|
||||
</table>
|
||||
|
||||
绝不用担心会用完每个子网的主机位,因为每个子网有超过2的64次幂的主机。任何组织要用完这些子网都是不大可能的,而就算发生了这种情况,也可以轻易地从ISP那里要一个前缀。
|
||||
|
||||
比如我们说分得了全球路由前缀(the global routing prefix)`0:123:abc/48`。该地址占用了一个完整IPv6地址的三个区段,而每个区段或4位16进制字符(quartet)则是16位,那么到目前为止就用了48位。主机部分则需要64位,留下16位用于子网的分配。
|
||||
|
||||
可以简单的从零(子网零也是合法的)开始以十六进制数下去。对于主机来说,也可以这样做,除非比如说想要将头几个地址留给网段上的服务器。
|
||||
|
||||
用一个更简单的前缀来打比方吧 -- `2001:123:abc/48`。第一个子网就是全零,当然,每个子网上的第一台主机也可以是全零,这也是合法的(只要不保留IPv6中的全0s和全1s地址)。又会将全零主机表示为缩写形式的`::`。那么这里就有开头的几个子网及主机地址。
|
||||
|
||||
<table>
|
||||
<tr><th>全球前缀</th><th>子网</th><th>第一个地址</th></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0000</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0001</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0002</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0003</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0004</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0005</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0006</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0007</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0008</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0009</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000A</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000B</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000C</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000D</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000E</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>000F</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0010</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0011</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0012</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0013</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0014</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0015</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0016</pre></td><td><pre>::</pre></td></tr>
|
||||
<tr><td><pre>2001:123:abc</pre></td><td><pre>0017</pre></td><td><pre>::</pre></td></tr>
|
||||
</table>
|
||||
|
||||
我肯定你已经注意到这与IPv4分址规则有所不同,不同之处就在与**可以使用全零子网,同时子网的第一个地址总是全零**。请看看下面这个简单的网络拓扑,可以照这种方式进行子网分配。
|
||||
|
||||

|
||||
|
||||
*图7.20 -- IPv6子网分配*
|
||||
|
||||
就是那么容易吗?如回忆一下IPv4子网划分章节,要完成子网划分,以及算出有多少主机多少子网并记住要排除一些地址,简直就是一场噩梦。**IPv6子网划分就容易得多**。你分配到的不一定是一个48位前缀,可能是一个用于家庭网络的`/56`或更小的前缀,但原则是一样的。也可以自位界限以外进行子网划分,但这是很少见的,且如果思科要你用考试中的很段时间完成那么深的细节,也是不公平的(You can also subnet off the bit boundary, but this would be most unusual and unfair of Cisco to expect you to go into that amount of detail in the short amount of time you have in the exam)。还好的是,考试不是要你考不过,但谁又知道呢(Hopefully, the exam won't be a mean attempt to catch you out, but you never know)。为以防万一,这里给出一个有着`/56`前缀长度的地址示例。
|
||||
|
||||
`2001:123:abc:8bbc:1221:cc32:8bcc:4231/56`
|
||||
|
||||
该前缀是56位,转换一下就是14个十六进制数位(14x4=56), 那么就知道了该前缀将带到一个4位字节(quartet)的中间。**这里有个坑**。在前缀终止前,必须要将该4位字节的第3和4位置为零。
|
||||
|
||||
<pre>2001:123:abc:<b>8b00</b>:0000:0000:0000:0000/56</pre>
|
||||
|
||||
上面对位界限分离的地方进行了加粗(I've made the quartet bold where the bit boundary is broken)。在匆忙中及考试中时间上的压力下,可能会完全忘记这重要的一步。请记住也要将下面这个地址(第一个子网上的第一台主机)写作这样。
|
||||
|
||||
<pre>2001:123:abc:<b>8b00</b>::/56</pre>
|
||||
|
||||
如他们硬要在考试中把你赶出去,就可能会试着让你把那两个零从位界限分离处之前的4位字节中去掉(If they do try to catch you out in the exam, it would probably be an attempt to have you remove the trailing zeros from the quartet before the bit boundary is broken)。
|
||||
|
||||
<pre>2001:123:abc:<b>8b</b>::/56</pre>
|
||||
|
||||
那么上面这个缩写就是非法的了。
|
||||
|
||||
也可以从主机部分借用位来用于子网划分,但绝没有理由这么做,同时这么做也会破坏采行发明IPv6而带来的可资利用的那些众多特性的能力,包括SLAAC(You can steal bits from the host portion to use for subnets, but there should never be a reason to and it would break the ability to use many of the features IPv6 was invented to utilise, including stateless autoconfiguration)。
|
||||
|
||||
##IPv6和IPv4的比较
|
||||
|
||||
**IPv6 Compared to IPv4**
|
||||
|
||||
一名网络工程师应有一幅IPv6比起IPv4所带来众多优势的图景。看着IPv6的增强,可以总结出下面这些优势。
|
||||
|
||||
+ IPv6有着一个扩展的地址空间,从32位扩展到了128位, IPv6 has an expanded address space, from 32 bits to 128bits
|
||||
+ IPv6使用十六进制表示法,而不是IPv4中的点分十进制表示法, IPv6 uses hexadecimal notation instead of dotted-decimal notation(as in IPv4)
|
||||
+ 因为采用了扩充的地址空间,IPv6地址是全球唯一地址,从而消除了NAT的使用需求, IPv6 addresses are globally unique due to the extended address space, eliminating the need for NAT
|
||||
+ IPv6有着一个固定的头部长度(40字节),允许厂商在交换效率上进行提升, IPv6 has a fixed header length(40 bytes), allowing vendors to improve switching efficiency
|
||||
+ IPv6通过在IPv6头部和传输层之间放入扩展头部,而实现对一些增强选项(这可以提供新特性)的支持, IPv6 supports enhanced options(that offer new features)by placing extension headers between the IPv6 header and the Transport Layer header
|
||||
+ IPv6具备地址自动配置的能力,提供无需DHCP服务器的IP地址动态分配, IPv6 offers address autoconfiguration, providing for dynamic assignment of IP addresses even without a DHCP server
|
||||
+ IPv6具备对流量打标签的支持, IPv6 offers support for labeling traffic flows
|
||||
+ IPv6有着内建的安全功能,包括经由IPSec实现的认证和隐私保护功能等, IPv6 has security capabilities built in, including authentication and privacy via IPSec
|
||||
+ IPv6具备在往目的主机发送数据包之前的路径MTU发现功能,从而消除碎片的需求, IPv6 offers MTU path discovery before sending packets to a destination, eliminating the need for fragmentation
|
||||
+ IPv6支持站点多处分布,IPv6 supports site multi-homing
|
||||
+ IPv6使用ND(邻居发现,Neighbor Discovery)协议取代ARP,IPv6 uses the ND protocol instead of ARP
|
||||
+ IPv6使用AAAA DNS记录,取代IPv4中的A记录, IPv6 uses AAAA DNS records instead of A records (as in IPv4)
|
||||
+ IPv6使用站点本地分址,取代IPv4中的RFC 1918, IPv6 uses Site-Local addressing instead of RFC 1918(as in IPv4)
|
||||
+ IPv4和IPv6使用不同的路由协议, IPv4 and IPv6 use different routing protocols
|
||||
+ IPv6提供了任意播分址, IPv6 provides for Anycast addressing
|
||||
|
||||
##第七天的问题
|
||||
|
||||
1. IPv6 addresses must always be used with a subnet mask. True or false?
|
||||
2. Name the three types of IPv6 addresses.
|
||||
3. Which command enables IPv6 on your router?
|
||||
4. The `0002` portion of an IPv6 address can be shortened to just 2. True or false?
|
||||
5. How large is the IPv6 address space?
|
||||
6. With IPv6, every host in the world can have a unique address. True or false?
|
||||
7. IPv6 does not have natively integrated security features. True or false?
|
||||
8. IPv6 implementations allow hosts to have multiple addresses assigned. True or false?
|
||||
9. How can the broadcast functionality be simulated in an IPv6 environment?
|
||||
10. How many times can the double colon (`::`) notation appear in an IPv6 address?
|
||||
|
||||
##第七天问题答案
|
||||
|
||||
1. False.
|
||||
2. Unicast, Multicast, and Anycast.
|
||||
3. The `ipv6 unicast-routing`
|
||||
4. True.
|
||||
5. 128 bits.
|
||||
6. True.
|
||||
7. False.
|
||||
8. True.
|
||||
9. By using Anycast.
|
||||
10. One time.
|
||||
|
||||
##第七天实验
|
||||
|
||||
###IPv6概念实验
|
||||
|
||||
**IPv6 概念实验**
|
||||
|
||||
在一对直接连接的思科路由器上,对在本模块中提到的IPv6概念和命令,进行测试。
|
||||
|
||||
+ 在两台路由器上都开启IPv6全球单播路由
|
||||
+ 在每个连接的接口上手动配置一个IPv6地址,比如下面这样。
|
||||
- 在路由器R1的连接接口上配置`2001:100::1/64`
|
||||
- 在路由器R2的连接接口上配置`2001:100::2/64`
|
||||
+ 使用命令`show ipv6 interface`和`show ipv6 interface prefix`对配置进行验证
|
||||
+ 测试直接ping的连通性
|
||||
+ 使用IPv6无状态自动配置(`ipv6 address autoconfig default`)进行重新测试
|
||||
+ 使用EUI-64地址(IPv6地址`2001::/64` EUI-64)进行重新测试
|
||||
+ 硬编码一个借口本地链路地址: `ipv6 address fe80:1234:adcd:1::3 link-local`
|
||||
+ 查看IPv6路由表
|
||||
|
||||
###十六进制转换及子网划分练习
|
||||
|
||||
**Hex Conversion and Subnetting Practice**
|
||||
|
||||
请把今天剩下的时间用于练习这些重要的题目上。
|
||||
|
||||
+ 将十进制转换成十六进制(随机数字)
|
||||
+ 将十六进制转换成十进制(随机数字)
|
||||
+ IPv6子网划分(随机网络和场景)
|
||||
|
915
d09-ACL.md
Normal file
@ -0,0 +1,915 @@
|
||||
#第九天
|
||||
|
||||
**访问控制清单**
|
||||
|
||||
**Access Control Lists**
|
||||
|
||||
##第九天的任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND1记诵指南
|
||||
+ 在[subnetting.org](http://www.subnetting.org)上花15分钟
|
||||
|
||||
和子网划分及VLSM一样,访问控制清单(access control lists, ACL)对于新CCNA学员来说,也是一大难点(one of the bugbear subjects)。有关ACL的问题包括,学习相关的IOS配置命令、理解ACL规则(包括隐式的“deny all”规则),以及掌握端口号及协议类型。
|
||||
|
||||
与其它CCNA科目一样,应该在学习过程中一次完成一个小部分,在路由器上使用所见到的每个命令,并完成许多实验。
|
||||
|
||||
今天你将学到以下内容。
|
||||
|
||||
+ ACL基础
|
||||
+ 标准ACLs,扩展ACLs, 以及命名ACLs
|
||||
+ ACL 规则
|
||||
+ 反掩码(wildcard masks)
|
||||
+ ACL的配置
|
||||
+ ACLs 故障排除
|
||||
|
||||
本课程对应了以下CCNA大纲要求。
|
||||
|
||||
+ 描述ACLs的类型、特性及应用
|
||||
- 标准ACLs, standard
|
||||
- 序列号, sequence numbers
|
||||
- ACLs的编辑, editing
|
||||
- 扩展的ACLs, extended
|
||||
- 命名的ACLs, named
|
||||
- 编号的ACLs, numbered
|
||||
- 日志选项, log option
|
||||
- 在某个网络环境下配置并验证ACLs
|
||||
|
||||
##ACL基础
|
||||
|
||||
**ACL Basics**
|
||||
|
||||
**ACLs用于过滤那些通过路由器的流量**。没有那个网络是会让任何流量都进入或流出该网络的。
|
||||
|
||||
**在流量过滤的同时,ACLs 还可用于对NAT地址池的引用,及对调试命令进行过滤(filter your debugging commands), 以及对路由地图进行过滤(这是超出CCNA大纲要求的)**。
|
||||
|
||||
依据所配置的ACL类型,可实现基于源网络/IP地址的过滤、基于目的网络/IP地址的过滤、基于协议或基于端口号的过滤。可在路由器的任何接口,包括Telnet端口,上应用ACLs。
|
||||
|
||||
下面是3中主要的ACLs类型。
|
||||
|
||||
+ 标准的编号ACLs
|
||||
+ 扩展的编号ACLs
|
||||
+ 标准或扩展的命名ACLs
|
||||
|
||||
**标准的编号ACLs是可以应用到路由器上的最为基本的ACL形式**。它们是最易于配置的,因此其可用的过滤有着最大的限制。**它们仅能依据源IP地址或源网络进行过滤**。识别标准ACL的方法就是看配置行的前导数字;标准ACLs的该数字为1到99。
|
||||
|
||||
**扩展的编号ACLs可以有多得多的粒度, 但配置和故障排除起来会更难应付。**它们可以对某个目的或源IP地址或网络、某种协议类型以及某个端口号进行过滤(they can filter a destination or source IP address or network, a protocol type, and a port number)。可用于配置扩展ACLs的编号为100到199(包含100和199)。
|
||||
|
||||
**命名ACLs允许给某过滤清单一个名称,而不是编号**。这就令到在路由器配置中更易于区别这些ACLs了。命名ACLs可以是标准及扩展ACLs; 在该ACLs的初始化配置行处,可以选择其作为标准ACL还是扩展ACL。
|
||||
|
||||
为在CCNA考试中取得成功,并成为一名思科工程师,你需要理解以下内容。
|
||||
|
||||
+ 端口号,port numbers
|
||||
+ ACL规则,ACL rules
|
||||
+ ACLs的命令语法,command syntax for ACLs
|
||||
|
||||
##端口号,Port Numbers
|
||||
|
||||
如要通过CCNA考试,以及要在实际网络上工作,就必须要记住这些常见的端口号。在客户盯着你做事时,去查一下常见端口号是不可能的。这里有些你会碰到且需掌握的一些最常见的端口号。
|
||||
|
||||
<table>
|
||||
<tr><th>端口</th><th>服务</th><th>端口</th><th>服务</th></tr>
|
||||
<tr><td>20</td><td>FTP数据</td><td>80</td><td>HTTP</td></tr>
|
||||
<tr><td>21</td><td>FTP控制</td><td>110</td><td>POP3</td></tr>
|
||||
<tr><td>22</td><td>SSH</td><td>119</td><td>NNTP</td></tr>
|
||||
<tr><td>23</td><td>Telnet</td><td>123</td><td>NTP</td></tr>
|
||||
<tr><td>25</td><td>SMTP</td><td>161/162</td><td>SNMP</td></tr>
|
||||
<tr><td>53</td><td>DNS</td><td>443</td><td>HTTPS(带有SSL的HTTP)</td></tr>
|
||||
<tr><td>69</td><td>TFTP</td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
## 访问控制清单规则,Access Control List Rules
|
||||
|
||||
这是最难掌握的部分之一。我从没有在哪本思科手册中见到里面曾写过一条完整的规则清单。仅有一些手册对其简单概过或是稍加解释,另外一些则完全不讲。难点就在于这些规则一直都在用,但到目前为止你都是通过试误法发现的它们(the difficulty is that the rules always apply but unitil now, you found them only by trial and error)。下面就是你需要知道的这些规则了。
|
||||
|
||||
###ACL规则一 -- 在每个接口的每个方向,只使用一条ACL
|
||||
|
||||
**Use only one ACL per interface per direction**
|
||||
|
||||
这么做是很明智的。在同一接口上,有多条ACLs去做不同的事情,大概不是你想要的。简单地配置一条ACL,来完成需要完成的事情,而不是将过滤器分散到两条或多条的清单中。本应将“每个协议(per protocol)”加入到此规则中,因为这里是可以包含IPX的访问控制清单的,不过在现代网络中,IP已成为唯一的协议了。
|
||||
|
||||

|
||||
|
||||
*图9.1 -- 接口上的一个方向仅做一条ACL*
|
||||
|
||||
###ACL规则二 -- ACLs行自顶向下进行处理
|
||||
|
||||
**the lines are processed top-down**
|
||||
|
||||
某些工程师在他们的ACL未如预期那样运行时感到迷惑。路由器会看看ACL的顶行,在发现匹配后,就会停在那里且不再对其它行进行检查了。为此,需要将**最明确的(最小的)那些条目放在ACL的顶部**(you need to put the most specific entries at the top of the ACL)。比如在利用ACL来阻挡主机172.16.1.1时的做法。
|
||||
|
||||
<table>
|
||||
<tr><td>Permit 10.0.0.0</td><td></td><td>没有匹配的</td></tr>
|
||||
<tr><td>Permit 192.168.1.1</td><td></td><td>没有匹配的</td></tr>
|
||||
<tr><td>Permit 172.16.0.0</td><td>〇</td><td>匹配了-放行</td></tr>
|
||||
<tr><td>Permit 172.16.1.0</td><td></td><td>不会处理了</td></tr>
|
||||
<tr><td>Deny 172.16.1.1</td><td></td><td>不会处理了</td></tr>
|
||||
</table>
|
||||
|
||||
在本例中,应该将`Deny 172.16.1.1`这行,放到顶部,或至少应在语句(statement)`Permit 172.16.0.0`之前。
|
||||
|
||||
###ACL规则三 -- 在每条ACL的底部,都有一句隐式的“deny all”
|
||||
|
||||
**There is an implicit "deny all" at the bottom of every ACL**
|
||||
|
||||
这条规则另很多工程师为难。在每条ACL的底部,有着一条看不见的命令。该命令设置为拒绝尚未匹配的所有流量。而阻止此命令起作用的唯一方法,就是在底部手动配置一条`permit all`命令。在取得来自IP地址172.20.1.1的某个进入的数据包时的做法。
|
||||
|
||||
<table>
|
||||
<tr><td>Permit 10.0.0.0</td><td>无匹配项</td></tr>
|
||||
<tr><td>Permit 192.168.1.1</td><td>无匹配项</td></tr>
|
||||
<tr><td>Permit 172.16.0.0</td><td>无匹配项</td></tr>
|
||||
<tr><td>Permit 172.16.1.0</td><td>无匹配项</td></tr>
|
||||
<tr><td>[Deny all]</td><td>匹配 -- 丢弃数据包</td></tr>
|
||||
</table>
|
||||
|
||||
你实际上想要路由器放行该数据包,但却拒绝了。原因就在于那条隐式的“deny all”命令了,而该命令实际上是一种安全手段。
|
||||
|
||||
###ACL规则四 -- 路由器是不能过滤自己产生的流量的
|
||||
|
||||
**The router can't filter self-generated traffic.**
|
||||
|
||||
这在某个实际网络上于部署ACL前进行测试时,会造成混乱。路由器不会过滤其自身产生的流量。在图9.2中有演示。
|
||||
|
||||

|
||||
|
||||
*图9.2 -- 对自身流量的ACL测试*
|
||||
|
||||
###ACL规则五 -- 不能对运行中的ACL进行编辑
|
||||
|
||||
**You can't edit a live ACL.**
|
||||
|
||||
实际上,在IOS 12.4之前的版本中,只能对命名ACL进行编辑, 而不能对标准ACL或扩展ACLs两种进行编辑。这曾是ACL架构的一个局限(this was a limitation of ACL architecture)。在IOS 12.4之前,如想要编辑标准ACL或扩展ACL,就必须按照以下步骤进行(这里使用list 99作为例子)。
|
||||
|
||||
1. 使用命令`no ip access-group 99 in`,在接口上停用ACL流量(stop ACL traffic on the interface with the `no ip access-group 99 in` command)。
|
||||
2. 将该条ACL复制粘贴到文本编辑器,并在那里编辑好。
|
||||
3. 进入到ACL模式,将新的ACL粘贴上去。
|
||||
4. 再次将该ACL应用到接口。
|
||||
|
||||
在实际的路由器上,执行下面的这些命令。
|
||||
|
||||
在接口上已创建并应用的ACL。
|
||||
|
||||
```
|
||||
Router>en
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#access-list 1 permit 172.16.1.1
|
||||
Router(config)#access-list 1 permit 172.16.2.1
|
||||
Router(config)#interface FastEthernet0/0
|
||||
Router(config-if)#ip access-group 1 in
|
||||
```
|
||||
|
||||
现在其从接口上卸下。
|
||||
|
||||
```
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#no ip access-group 1 in
|
||||
Router(config-if)#^Z
|
||||
```
|
||||
|
||||
查看那些ACLs。将其复制并粘贴到文本编辑器,并进行修改。
|
||||
|
||||
```
|
||||
Router#show run ← or show ip access lists
|
||||
access-list 1 permit host 172.16.1.1
|
||||
access-list 1 permit host 172.16.2.1
|
||||
```
|
||||
|
||||
实际上还需在配置行之间加入一个叹号(如是将其粘贴到路由器上的情况下),来告诉路由器执行一次确认(you actually need to add an exclamation mark in-between each line of configuration, if you are pasting it in, to tell the router to do a carriage return)[wikipedia: 回车符](http://zh.wikipedia.org/wiki/%E5%9B%9E%E8%BD%A6%E7%AC%A6)。
|
||||
|
||||
```
|
||||
access-list 1 permit host 172.16.1.1
|
||||
!
|
||||
access-list 1 permit host 172.16.2.2
|
||||
```
|
||||
|
||||
下面是正被粘贴到路由器配置中的那些行。要先删除早先的ACL,再粘贴进新版本。
|
||||
|
||||
```
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#no access-list 1
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#!
|
||||
Router(config)#access-list 1 permit host 172.16.2.2
|
||||
Router(config)#exit
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
show ip access
|
||||
Router#show ip access-lists
|
||||
Standard IP access list 1
|
||||
permit host 172.16.1.1
|
||||
permit host 172.16.2.2
|
||||
Router#
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group 1 in ← reapply to the interface
|
||||
```
|
||||
|
||||
如使用的是Packet Tracer, 那么这些命可能不会工作。同时,请一定在某台路由器上尝试这些命令,因为它们是考试考点。**记住在编辑ACL前要先在接口上关闭它(此时它就不再是活动的了),以避免一些奇怪或是不可预期的行为发生**。而在IOS 12.4及以后的版本中,如何来编辑ACLs,会在后面演示。
|
||||
|
||||
###ACL规则六 -- 在接口上关闭ACL
|
||||
|
||||
**Disable the ACL on the interface.**
|
||||
|
||||
在打算短时间对ACL进行测试或是撤销ACL时,许多工程师都会将其完全删除掉。这是不必要的。如你要停止ACL运行,只需简单地将其从所应用到的接口上移除即可。
|
||||
|
||||
```
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#no ip access-group 1 in
|
||||
Router(config-if)#^Z
|
||||
```
|
||||
|
||||
###ACL规则七 -- 可重用同一ACL
|
||||
|
||||
**You can reuse the same ACL.**
|
||||
|
||||
这是我在实际网络中经常见到的。整个网络通常都有着同样的ACL策略。与其配置多条ACLs,只需简单地引用同一ACL,然后在所需要的那些接口上应用该ACL即可。图9.3演示了此概念。
|
||||
|
||||

|
||||
|
||||
*图9.3 -- ACL的重用*
|
||||
|
||||
###ACL规则八 -- ACL应保持简短
|
||||
|
||||
ACLs的基本规则就是保持简短且只专注于做一件事情。许多新手的思科工程师,将其ACL延伸到数行那么长,最后,经深思熟虑后,就可以紧缩到少数几行的配置。前面提到的将那些最为特定的(最小的)行放在ACL的顶部。这是好的做法,从而可以节约路由器CPU的执行周期。
|
||||
|
||||
优良的ACL配置技能,来自于知识和操练。
|
||||
|
||||
###ACL规则九 -- 尽可能将ACL放在接近源的地方
|
||||
|
||||
思科文档建议将扩展ACL尽量放在离源近的地方,而将标准ACL尽量放在离目的近的地方,因为这可以避免不必要的开销,又能放行那些合法流量。
|
||||
|
||||

|
||||
|
||||
*图9.4 -- 将ACL尽量放在离源近的地方*
|
||||
|
||||
>Farai 指出 -- “思科官方建议是扩展ACL尽量离源近,而标准ACL尽量离目的近”。
|
||||
|
||||
##反掩码
|
||||
|
||||
**Wildcard Masks**
|
||||
|
||||
**因为在ACLs及某些路由协议的配置中,反掩码是命令行的组成部分,所有有必要学习反掩码**。之所有存在反掩码,是因为需要有某种方式来告诉路由器,我们要去匹配IP地址或网络地址的哪些部分。
|
||||
|
||||
匹配实在二进制层面完成的,却可以采用与子网掩码相同的表示法,来容易地配置反掩码。一个二进制1告诉路由器忽略对应的位,0则是要匹配的位。
|
||||
|
||||
CCNA考试中反掩码计算的一种简易方法,就是把一个数与子网掩码相加,确保它们的和为255。那么如果子网掩码的某个8位值为192时,需要加上63才等于255。而如果子网掩码的某个8位值为255, 则需要加的就是0。看看下面的例子吧。
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>255</td><td>255</td><td>255</td><td>192</td></tr>
|
||||
<tr><th>反掩码</th><td>0</td><td>0</td><td>0</td><td>63</td></tr>
|
||||
<tr><th>相加之和</th><td>255</td><td>255</td><td>255</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>255</td><td>255</td><td>224</td><td>0</td></tr>
|
||||
<tr><th>反掩码</th><td>0</td><td>0</td><td>31</td><td>255</td></tr>
|
||||
<tr><th>相加之和</th><td>255</td><td>255</td><td>255</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>255</td><td>128</td><td>0</td><td>0</td></tr>
|
||||
<tr><th>反掩码</th><td>0</td><td>127</td><td>255</td><td>255</td></tr>
|
||||
<tr><th>相加之和</th><td>255</td><td>255</td><td>255</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
在想要ACL与匹配某个子网或是整个网络时,就需要输入一个反掩码。比如,要匹配172.20.1.0 255.255.224.0, 就需要输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 172.20.1.0 0.0.31.255`
|
||||
|
||||
而要匹配子网192.200.1.0 255.255.255.192, 就需要下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.200.1.0 0.0.0.63`
|
||||
|
||||
在OSPF中应用网络语句时也要当心(be careful when applying network statements with OSPF),那位那也要用到反掩码。
|
||||
|
||||
在有着一个仅有两位主机位的网络时,也要当心,因为需要输入一条ACL来匹配这些主机位。比如,要匹配子网192.168.1.0 255.255.255.252, 或/30的话,需要输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.168.1.0 0.0.0.3`
|
||||
|
||||
这里剔除了一些配置,是为展示出对应的部分。上面的命令将匹配192.168.1.0网络上的1号和2号主机。而如果要匹配192.168.1.4/30网络上的5号和6号主机,则需输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.168.1.4 0.0.0.3`
|
||||
|
||||
请阅读子网划分和VLSM部分的课文,以更好地掌握此概念。
|
||||
|
||||
##访问控制清单的配置
|
||||
|
||||
**Configuring Access Control Lists**
|
||||
|
||||
熟能生巧,对于任何技能都是适用的。如同前面提到的,你应该在路由器上输入这里给出的每个例子,完成尽可能多的实验,并构建出自己的实例。在考试和现实世界中,你都需要精准快速的设计ACL。
|
||||
|
||||
接下来的章节中出现的标准和扩展ACLs都是编号ACLs。它们是配置ACLs的经典方法。命名ACLs是配置ACLs的另一种方式,将在其后的部分出现。
|
||||
|
||||
###标准ACLs
|
||||
|
||||
**Standard ACLs**
|
||||
|
||||
标准的编号ACLs是最易于配置的,所以拿它来作为开端是最好的。**标准ACLs只能实现依据源网络或源IP地址的过滤**。
|
||||
|
||||

|
||||
|
||||
*图9.5 -- 带有源和目的地址的进入数据包*
|
||||
|
||||
在上面的图9.5中,进入的数据包有着一个源和目的地址,但标准ACL只会查看源地址。该ACL会放行会拒绝该源地址(参见图9.6)。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
```
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#access-list 1 permit host 192.168.1.1
|
||||
Router(config)#access-list 1 permit 10.1.0.0 0.0.255.255
|
||||
```
|
||||
|
||||
此ACL应在服务器侧的路由器上应用。又记得在清单的底部有一条隐式的“deny all”,所以其它流量都会给阻止掉。
|
||||
|
||||
###扩展ACLs
|
||||
|
||||
**Extended ACLs**
|
||||
|
||||
**扩展的编号ACLs中可以构建出细得多的粒度**。而正是由于有了细得多的粒度,令到扩展的编号ACLs变得诡异起来。藉由扩展的编号ACLs,可以对源或目的网络地址、端口、协议及服务进行过滤。
|
||||
|
||||
一般来说,你可以看看扩展的ACLs配置语法,就像下面这样。
|
||||
|
||||
`access list# permit/deny [service/protocol] [source network/IP] [destination network/IP] [port#]`
|
||||
|
||||
比如下面这样。
|
||||
|
||||
```
|
||||
access-list 101 deny tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq telnet
|
||||
access-list 100 permit tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq ftp
|
||||
access-list 100 permit icmp any any
|
||||
```
|
||||
|
||||

|
||||
|
||||
*图9.7 -- 阻止服务器访问实例*
|
||||
|
||||
|
||||
可为上面的网络配置一条ACL,以e-mail、web和文件服务器为例,可以像下面这样(应用在服务器侧的)。
|
||||
|
||||
```
|
||||
access-list 100 permit tcp host 172.16.1.1 host 172.20.1.1 eq smtp
|
||||
access-list 100 permit tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq ftp
|
||||
access-list 100 permit tcp host 192.168.1.1 host 172.40.1.1 eq www
|
||||
```
|
||||
|
||||
而如有不同要求,就也可以像下面这条ACL。
|
||||
|
||||
```
|
||||
access-list 101 deny icmp any 172.20.0.0 0.0.255.255
|
||||
access-list 101 deny tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq telnet
|
||||
```
|
||||
|
||||
或者也可以像下面这样。
|
||||
|
||||
`access-list 102 permit tcp any host 172.30.1.1 eq ftp established`
|
||||
|
||||
关键字`[established]`告诉路由器仅放行在网络内部的主机所发起的流量。三次握手标志(ACK或RST位)将表明这点(the three-way handshake flags, ACK or RST bit, will indicate this)。
|
||||
|
||||
###命名ACLs
|
||||
|
||||
**Named ACLs**
|
||||
|
||||
与编号ACLs不同,命名ACLs可由其描述性名称容易地区分,而这在一些大型的配置中尤其有用。引入命名ACLs就是为增加灵活性及ACLs的易于管理的。命名ACLs可以看着是配置增强的提升,因为它并未对ACLs结构进行修改(仅改变了引用ACL的方式而已)。
|
||||
|
||||
其语法跟编号ACLs是相似的,主要的不同就是使用名称而不是编号来区分ACLs。和编号ACLs一样,可以配置标准的或扩展的命名ACLs。
|
||||
|
||||
在配置命名ACLs时的另一不同之处,就是必须一直使用命令`ip access-list`,这与编号ACLs可以只使用简单的`access-list`命令,是不一样的。
|
||||
|
||||
<pre>
|
||||
Router(config)#access-list ?
|
||||
<1-99> IP standard access list
|
||||
<100-199> IP extended access list
|
||||
<1100-1199> Extended 48-bit MAC address access list
|
||||
<1300-1999> IP standard access list (expanded range)
|
||||
<200-299> Protocol type-code access list
|
||||
<2000-2699> IP extended access list (expanded range)
|
||||
<700-799> 48-bit MAC address access list
|
||||
dynamic-extended Extend the dynamic ACL absolute timer
|
||||
rate-limit Simple rate-limit specific access list
|
||||
Router(config)#ip access-list ?
|
||||
extended Extended access list
|
||||
log-update Control access list log updates
|
||||
logging Control access list logging
|
||||
resequence Resequence access list
|
||||
standard Standard access list
|
||||
R1(config)#ip access-list standard ?
|
||||
<1-99> Standard IP access-list number<1300-1999> Standard IP access-list number (expanded range)
|
||||
<b>WORD Access-list name</b>
|
||||
R1(config)#ip access-list extended ?
|
||||
<100-199> Extended IP access-list number
|
||||
<2000-2699> Extended IP access-list number (expanded range)
|
||||
<b>WORD Access-list name</b>
|
||||
</pre>
|
||||
|
||||
命名ACLs在语法上与其它类型的ACLs(也就是标准和扩展的编号ACLs)有着轻微的不同。同时也**可以编辑活动的命名ACLs**, 这是一个有用的特性。只需简单地告诉路由器要配置一条命名ACL, 而不管它是标准的还是扩展的。在较新的IOS版本上,也可以编辑编号ACLs,所以请检查所用的平台。
|
||||
|
||||
在使用`ip access-list`命令常见一条命名ACL时,思科IOS会将你带入ACL配置模式,在那里就可以输入或是移除ACL条目了(就是那些拒绝或放行的访问条件)。图9.8展示了一条命名ACL的实例,以及相应的输出。
|
||||
|
||||

|
||||
|
||||
**图9.8 -- 命名ACL**
|
||||
|
||||
```
|
||||
Router(config)#ip access-list extended BlockWEB
|
||||
Router(config-ext-nacl)#?
|
||||
Ext Access List configuration commands:
|
||||
<1-2147483647> Sequence Number
|
||||
default Set a command to its defaults
|
||||
deny Specify packets to reject
|
||||
dynamic Specify a DYNAMIC list of PERMITs or DENYs
|
||||
evaluate Evaluate an access list
|
||||
exit Exit from access-list configuration mode
|
||||
no Negate a command or set its defaults
|
||||
permit Specify packets to forward
|
||||
remark Access list entry comment
|
||||
Router(config-ext-nacl)#deny tcp any any eq 80
|
||||
Router(config-ext-nacl)#permit ip any any
|
||||
```
|
||||
|
||||
命名ACL的验证,可通过下面的命令完成。
|
||||
|
||||
+ `show ip access-list`: 显示设备上所创建的所有ACLs
|
||||
+ `show ip access-list <acl_name>`: 显示某条特定的命名ACL
|
||||
|
||||
```
|
||||
Router(config)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
```
|
||||
|
||||
要知道如何来增加或是删除某条命令ACL中的条目,请参考下面的“ACL序号(ACL Sequence Numbers)”小节。
|
||||
|
||||
###应用ACLs
|
||||
|
||||
**Applying ACLs**
|
||||
|
||||
**为让ACLs发挥效果,就必须将ACL应用到路由器的某个接口或端口上**。之所以这样讲,是因为我曾见到许多的新手思科工程师在敲入了ACL后,就想为什么它不工作!或者他们配置了ACL,却将错误的ACL编号或命名应用到相应的接口上。
|
||||
|
||||
**如要应用在某条线路上,就必须使用`access-class`命令来指定它**,而**如果是应用在某个接口上,就要用`ip access-group`命令**。思科这么做的原因,我也不知道。
|
||||
|
||||
这里有应用ACLs到端口或接口上的三个实例。
|
||||
|
||||
接口上的应用。
|
||||
|
||||
```
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group 101 in
|
||||
```
|
||||
|
||||
线路上的应用。
|
||||
|
||||
```
|
||||
Router(config)#line vty 0 15
|
||||
Router(config-line)#access-class 101 in
|
||||
```
|
||||
|
||||
接口上的应用。
|
||||
|
||||
```
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group BlockWEB in
|
||||
```
|
||||
|
||||
##ACL序号
|
||||
|
||||
**ACL Sequence Numbers**
|
||||
|
||||
自12.4往后,你会发现思科IOS给每个ACL条目添加了序号。那么现在就可以创建一条访问控制清单,并在其后从它里面一处一行了。
|
||||
|
||||
```
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#permit 172.16.1.1
|
||||
Router(config-std-nacl)#permit 192.168.1.1
|
||||
Router(config-std-nacl)#permit 10.1.1.1
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#exit
|
||||
Router(config)#exit
|
||||
Router#
|
||||
*Jun 6 07:38:14.155: %SYS-5-CONFIG_I: Configured from console by console access
|
||||
Router#show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
10 permit 172.16.1.1
|
||||
```
|
||||
|
||||
注意到**在路由器运行配置中,序号并不会显示出来**。要查看它们,必须执行一个`show [ip] access-list`命令。
|
||||
|
||||
##加入一个ACL行
|
||||
|
||||
**Add an ACL Line**
|
||||
|
||||
**要加入一个新的ACL行,只需简单地输入新的序号并接着输入该ACL语句**。下面的例子展示如何往现有的ACL中加入行15。
|
||||
|
||||
```
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#ip access
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#15 permit 172.20.1.1
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#do show ip access
|
||||
Router(config-std-nacl)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
###移除一个ACL行
|
||||
|
||||
**Remove an ACL Line**
|
||||
|
||||
要移除某个ACL行,只需简单地敲入`no <seq_number>`命令即可,就如同下面的例子中行20被删除掉了。
|
||||
|
||||
```
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#ip access
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#no 20
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#do show ip access
|
||||
Router(config-std-nacl)#do show ip access-lists
|
||||
Standard IP access list test30 permit 10.1.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
###为某条ACL重新编号
|
||||
|
||||
**Resequence an ACL**
|
||||
|
||||
要对某条ACL重新编号,使用`ip access-list resequence <acl_name> <starting_seq_number> <step_to_increment>`命令。该命令的行为可由下面的例子进行检验。
|
||||
|
||||
```
|
||||
Router(config)#ip access-list resequence test 100 20
|
||||
Router(config)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
100 permit 10.1.1.1
|
||||
120 permit 172.20.1.1
|
||||
140 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
命令`resequence`则会创建新的序号,自100开始,每个新行增加20。译者注:在更新的IOS版本中,此命令可指定开始序号及步进序号。
|
||||
|
||||
###ACL日志
|
||||
|
||||
**ACL Logging**
|
||||
|
||||
默认情况下,通过那些为某个接口的数据包所匹配上的ACL条目,会创建出一个不断增大的计数器,该计数器可使用`show ip access-list`命令进行查看,如下面的例子所示。
|
||||
|
||||
<pre>
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 <b>(10 matches)</b>
|
||||
20 permit ip any any <b>(56 matches)</b>
|
||||
</pre>
|
||||
|
||||
而如果需要更详细的有关那些为ACL条目所匹配的流量信息,可以给相关的ACL条目配置`log`或`log-input`参数。
|
||||
|
||||
```
|
||||
Router(config)#ip access-list extended test
|
||||
Router(config)#no 10
|
||||
Router(config)#10 deny tcp any any eq 80 log
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 log
|
||||
20 permit ip any any (83 matches)
|
||||
```
|
||||
|
||||
在上面的配置样例中,配置了test ACL的10号条目的ACL日志。在某个数据包与那个条目匹配时,该ACL计数器就会增加,与此同时路由器也会生成一条包含了该特定ACL匹配的详细日志记录。
|
||||
|
||||
`%SEC-6-IPACCESSLOGP: list test denied tcp 10.10.10.2(24667) -> 10.10.10.1(80), 1 packet`
|
||||
|
||||
而如果你仍需要更多有关该事件(transaction)的细节,就要用`log-input`参数替代`log`参数了,就像下面这样。
|
||||
|
||||
```
|
||||
Router(config)#ip access-list extended test
|
||||
Router(config)#no 10
|
||||
Router(config)#10 deny tcp any any eq 80 log-input
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 log-input
|
||||
20 permit ip any any (125 matches)
|
||||
```
|
||||
|
||||
这时,当有该特定ACL条目匹配时,路由器就会生成一条更为详细的日志消息,当中包含了进入的接口以及源MAC地址。
|
||||
|
||||
`%SEC-6-IPACCESSLOGP: list test denied tcp 10.10.10.2(14013) (FastEthernet0/0 00aa.aabb.ccdd) -> 10.10.10.1(80), 1 packet`
|
||||
|
||||
**ACL日志在查看到底那些数据包被丢弃或放行的故障排除中,会是非常有用的**, 但在现实世界情形中(此内容超出CCNA考试范围)不得提的是:包含`[log]`或`[log-input]`关键字的ACL条目是为路由器进行线程交换的, 与之相反,现代路由器中, 默认都是经由CEF交换的(ACL entries that contain `[log]` or `[log-input]` keyword are process-switched by the router, as opposed to being CEF-switched, which is the default in modern routers)。这需要更多的路由器CPU周期,因而导致在有大量与被记录的ACL条目匹配时,出现问题。
|
||||
|
||||
###使用ACLs来限制Telnet和SSH访问
|
||||
|
||||
**Using ACLs to Limit Telnet and SSH Access**
|
||||
|
||||
除了在接口级别过滤流量外,ACLs可与其他设备特性配合使用,包括过滤VTY线路上的流量。在前面的课程中,我们曾学过如何利用`line vty`命令,配置Telnet和SSH以实现对某台设备的访问(比如路由器或交换机)。
|
||||
|
||||
有时,我们可能不想接受到设备或自设备发出的所有Telnet/SSH连接。而为实现此操作,就必须定义一条ACL,以指定在VTY线路上所允许或拒绝的流量类型。该ACL可以是编号ACL或命名ACL。通过命令`access-class <acl> | [in|out]`, 将该ACL加入到想要的VTY线路上。
|
||||
|
||||
下面的例子定义了一条允许来自主机10.10.10.1的Telnet流量,该ACL随后被应用到VTY线路的进入方向。
|
||||
|
||||
```
|
||||
Router(config)#ip access-list extended VTY_ACCESS
|
||||
Router(config-ext-nacl)#permit tcp host 10.10.10.1 any eq telnet
|
||||
Router(config-ext-nacl)#deny tcp any any
|
||||
Router(config-ext-nacl)#exit
|
||||
Router(config)#
|
||||
Router(config)#line vty 0 4
|
||||
Router(config-line)# access-class VTY_ACCESS in
|
||||
Router(config-line)#
|
||||
```
|
||||
|
||||
使用以下命令对配置进行验证。
|
||||
|
||||
```
|
||||
Router#show run | sect line vty
|
||||
line vty 0 4
|
||||
access-class VTY_ACCESS in
|
||||
.....
|
||||
```
|
||||
|
||||
##ACLs故障排除和验证
|
||||
|
||||
**Trubleshooting and Verifying ACLs**
|
||||
|
||||
相信有了对配置命令和规则的深入理解,在访问控制清单上就不会有问题了。在ACL不工作的时候,首先要通过ping操作,检查有没有基本的IP连通性问题。接着看看有没有应用该ACL,看看在ACL中有没有什么文字错误,以及你是否需要允许任何IP流量通过(记住那个隐式的”deny all“条目)。而一些在ACL故障排除过程中最重要的检查点包括下面这些。
|
||||
|
||||
+ 查看ACL统计信息
|
||||
+ 检查所允许的网络
|
||||
+ 检查应用ACL的接口及方向
|
||||
|
||||
###查看ACL统计信息
|
||||
|
||||
在成功配置一条ACL并将其应用到某个接口上之后,某种可以验证该ACL正确行为的手段非常重要,尤其是某个ACL条目被使用到的次数。基于匹配次数,就可以对过滤策略进行调整,或者对ACLs进行增强,以实现整体安全性的提升。而根据需求的不同,可以在全局层面或者单个接口上(从IOS 12.4开始)查看ACL统计信息。
|
||||
|
||||
**ACL全局统计信息**
|
||||
|
||||
**Global ACL Statistics**
|
||||
|
||||
可使用命令`show ip access-list` 或 `show access-list`命令, 查看ACL全局统计信息,这两个命令又可以仅查看某个特定编号ACL或命名ACL的全局统计信息。
|
||||
|
||||
<pre>
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 <b>(10 matches)</b>
|
||||
20 permit ip any any <b>(56 matches)</b>
|
||||
</pre>
|
||||
|
||||
在将某同一ACL重用到不同接口上时,这种方式并不会提供到十分特定的信息,因为它给出的是整体统计信息。
|
||||
|
||||
**单个接口上的ACL统计信息**
|
||||
|
||||
**Per Interface ACL Statistics**
|
||||
|
||||
在想要查看单个接口上的ACL匹配情况,不管是进还是出方向时,可以使用命令`show ip access-list interface <interface_name> [in|out]`,如下面所示。
|
||||
|
||||
```
|
||||
Router#show ip access-list interface FastEthernet0/1 in
|
||||
Extended IP access list 100 in
|
||||
10 permit ip host 10.10.10.1 any (5 matches)
|
||||
30 permit ip host 10.10.10.2 any (31 matches)
|
||||
```
|
||||
|
||||
如未有指定方向,则应用到该特定接口上的任何进或出方向的ACL都将显示出来。此特性也叫做“ACL可管理能力(ACL Manageability)”,自IOS 12.4开始可用。
|
||||
|
||||
###检查那些放行的网络
|
||||
|
||||
**Verifying the Permitted Networks**
|
||||
|
||||
有的时候,特别实在那些必须配置很多ACLs的大型网络中,在配置ACL条目是就会犯下一些书写错误,而这就会导致不同接口上有错误的流量被阻止。为了检查那些正确的ACL条目(也就是permit及deny语句),可以照前面章节中讲到的那样,使用`show run | section access-list`或者`show ip access-list`命令。
|
||||
|
||||
###检查ACL的接口和方向
|
||||
|
||||
**Verifying the ACL Interface and Direction**
|
||||
|
||||
在将某条ACL应用到某个接口上时,一个常见的错误就是将其应用到了错误的方向,也就是本应在进方向的,却应用到了出方向,或者本应在出方向的,却应用到了进方向。这会导致功能上和安全方面的很多问题。于是在ACL故障排除上的最先几步之一,就是检查ACL应用到正确的接口及正确的方向。
|
||||
|
||||
为此,可以使用多种命令,包括`show run`及`show ip access-list interface <interface> | [in|out]`命令。
|
||||
|
||||
##第九天的问题
|
||||
|
||||
1. You can have a named, extended, and standard ACL on one incoming interface. True or false?
|
||||
2. You want to test why your ping is blocked on your Serial interface. You ping out from the router but it is permitted. What went wrong? (Hint: See ACL Rule 4.)
|
||||
3. Write a wildcard mask to match subnet mask `255.255.224.0`.
|
||||
4. What do you type to apply an IP access control list to the Telnet lines on a router?
|
||||
5. How can you verify ACL statistics per interface (name the command)?
|
||||
6. How do you apply an ACL to an interface?
|
||||
|
||||
##第九天问题的答案
|
||||
|
||||
1. False. You can only configure a single ACL on an interface per direction.
|
||||
2. A router won’t filter traffic it generated itself.
|
||||
3. `0.0.31.255`.
|
||||
4. access-class .
|
||||
5. Issue the show ip access-list interface command.
|
||||
6. Issue the `ip access-group <ACL_name> [in|out]` command.
|
||||
|
||||
##第九天的实验
|
||||
|
||||
###标准ACL实验
|
||||
|
||||
**Standard ACL Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
标准ACL实验拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条标准ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上面的网络。在两台路由器上加入一条静态路由,领导到任何网络的任何流量都从串行接口发出。这么做的原因是,尽管这不是一个路由实验,仍然需要路由的流量。把.1地址加到路由器A的串行接口,.2地址加到路由器B的串行接口。
|
||||
|
||||
```
|
||||
RouterA(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
```
|
||||
|
||||
2. 在路由器A上配置一条标准ACL,放行192.168.1.0/10网络。默认情况下,其它所有网络都将被阻止。
|
||||
|
||||
```
|
||||
RouterA(config)#access-list 1 permit 192.168.1.0 0.0.0.63
|
||||
RouterA(config)#int Serial0/1/0
|
||||
RouterA(config-if)#ip access-group 1 in
|
||||
RouterA(config-if)#exit
|
||||
RouterA(config)#exit
|
||||
RouterA#
|
||||
```
|
||||
|
||||
3. 从路由器B上测试该条ACL,默认将使用10.0.0.1地址。
|
||||
|
||||
```
|
||||
RouterB#ping 10.0.0.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
|
||||
UUUUU
|
||||
Success rate is 0 percent (0/5)
|
||||
```
|
||||
|
||||
4. 以源地址192.168.1.1来做另一个ping测试,这将没有问题。
|
||||
|
||||
```
|
||||
RouterB#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 10.0.0.1
|
||||
Repeat count [5]:Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 192.168.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
|
||||
Packet sent with a source address of 192.168.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
```
|
||||
|
||||
###扩展ACL实验
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
扩展ACl实验的拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条扩展ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上述网络。在路由器B上加入一条静态路由,令到前往所有网络的所有流量都从串行接口上发出。这么做是因为,尽管这不是一个路由实验,仍然需要路由流量。
|
||||
|
||||
`RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0`
|
||||
|
||||
2. 在路由器A上配置一条扩展ACL。仅允许往环回接口上发起Telnet流量。
|
||||
|
||||
```
|
||||
RouterA(config)#access-list 100 permit tcp any host 172.20.1.1 eq 23
|
||||
RouterA(config)#int s0/1/0
|
||||
RouterA(config-if)#ip access-group 100 in
|
||||
RouterA(config-if)#line vty 0 15
|
||||
RouterA(config-line)#password cisco
|
||||
RouterA(config-line)#login
|
||||
RouterA(config-line)#^Z
|
||||
RouterA#
|
||||
```
|
||||
|
||||
上面的那条ACL编号为100, 这就告诉路由器,它是一条扩展ACL。所要允许的是TCP。该条ACL允许来自任何网络的,目的地址为172.20.1.1的Telnet端口,端口号为23。在执行`show run`命令时,就会看到,路由器实际上会将端口号替换为其对应的名称,就像下面演示的这样。
|
||||
|
||||
`access-list 100 permit tcp any host 172.20.1.1 eq telnet`
|
||||
|
||||
3. 现在,从路由器B上做一个Telnet测试。首先往路由器A的串行接口上Telnet,将会被阻止。接着测试环回接口。
|
||||
|
||||
<pre>
|
||||
RouterB#telnet 10.0.0.1
|
||||
Trying 10.0.0.1 ...
|
||||
% Connection timed out; remote host not responding
|
||||
RouterB#telnet 172.20.1.1
|
||||
Trying 172.20.1.1 ...Open
|
||||
User Access Verification <b>←password won’t show when you type it</b>
|
||||
Password:
|
||||
RouterA> <b>←Hit Control+Shift+6 together and then let go and press the X key to quit.</b>
|
||||
</pre>
|
||||
|
||||
>**注意:**我们会在其它实验中涉及ACLs,但你真的需要完全地掌握这些内容。为此,要尝试其它的TCP端口,比如80、25等等。另外,要试试那些UDP端口,比如53。如没有将一台PC接上路由器,则是无法对这些其它端口进行测试的。
|
||||
|
||||
##命名ACL实验
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
命名ACL实验拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条命名ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上面的网络。在两台路由器上加入一条静态路由,领导到任何网络的任何流量都从串行接口发出。这么做的原因是,尽管这不是一个路由实验,仍然需要路由的流量。
|
||||
|
||||
```
|
||||
RouterA(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
```
|
||||
|
||||
2. 在路由器B上加入一条扩展的命名ACL。只放行主机172.20.1.1,阻止其它任何主机或网络。
|
||||
|
||||
```
|
||||
RouterB(config)#ip access-list extended blockping
|
||||
RouterB(config-ext-nacl)#permit icmp host 172.20.1.1 any
|
||||
RouterB(config-ext-nacl)#exit
|
||||
RouterB(config)#int s0/1/0
|
||||
RouterB(config-if)#ip access-group blockping in
|
||||
RouterB(config-if)#
|
||||
```
|
||||
|
||||
3. 现在分别从路由器A的串行接口和换回接口发出ping来测试该条ACL。
|
||||
|
||||
```
|
||||
RouterA#ping 192.168.1.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
|
||||
UUUUU
|
||||
Success rate is 0 percent (0/5)
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.1
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 172.20.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
|
||||
Packet sent with a source address of 172.20.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/34/47 ms
|
||||
```
|
||||
|
||||
>**注意:**你需要搞清楚各种服务,以及各种服务所用到的端口。否则,要配置ACL就会非常棘手。本条ACL相当简单,因此可以仅用一行完成。在有着路由协议运行时,需要放行它们。
|
||||
|
||||
要放行RIP,就要像这样指定。
|
||||
|
||||
`access-list 101 permit udp any any eq rip`
|
||||
|
||||
要放行OSPF,要像这样指定。
|
||||
|
||||
`access-list 101 permit ospf any any`
|
||||
|
||||
要放行EIGRP,要像这样指定。
|
||||
|
||||
`access-list 101 permit eigrp any any`
|
||||
|
755
d10-Routing-Concepts.md
Normal file
@ -0,0 +1,755 @@
|
||||
#第10天
|
||||
|
||||
**路由的一些概念**
|
||||
|
||||
**Routing Concepts**
|
||||
|
||||
##第10天的任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 回顾昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND1记诵指南
|
||||
+ 在网站[subnetting.org](http://subnetting.org/)上花15分钟
|
||||
|
||||
ICND1考试要求你对**基本路由**(basic routing)及**数据包流经某个网络的过程**(packet flow accross a network),有所掌握。我们也会**对各种路由协议背后的技术有所了解**(take a look at the technology behind routing protocols)。
|
||||
|
||||
今天将会学到以下知识。
|
||||
|
||||
+ 路由基础知识, basic routing
|
||||
+ 各种有类和无类协议,classful and classless protocols
|
||||
+ 路由协议的分类,routing protocol classes
|
||||
|
||||
本模块对应了CCNA大纲要求的以下方面。
|
||||
|
||||
+ 描述基本路由的一些概念
|
||||
- CEF
|
||||
- 包转发,packet forwarding
|
||||
- 寻获路由器的过程,router lookup process
|
||||
+ 区分不同路由和路由协议的方式
|
||||
- 链路状态对距离矢量,Link State vs. Distance Vector
|
||||
- 下一跳,next hop
|
||||
- IP路由表,IP routing table
|
||||
- 被动接口(它们的工作方式),passive interfaces(how they work)
|
||||
|
||||
##路由基础
|
||||
=======
|
||||
##路由基础知识
|
||||
|
||||
**Basic Routing**
|
||||
|
||||
路由协议的角色,一是**动态地学习其它网络**,二是**与其它设备交换路由信息**,三就是**连接上内部和/或外部网络**。
|
||||
|
||||
务必要清楚,路由协议**不会**跨越网络发送数据包。它们是用来确定路由的最佳路径(their role is to determaine the best path for routing)。受路由的那些协议(routed protocols)才真正发出数据,而一个最常见的受路由协议实例,就是IP。
|
||||
|
||||
不同路由协议采用不同方式来确定到某个网络或网络节点的最优路径。一些类型的路由协议,在静态环境或者说几乎没有变化的环境中运行最好,但却在这些环境发生变化后,需要很长时间进行收敛(converge)。另一些协议,则能够对网络中发生的变化迅速反应而能快速地进行收敛。
|
||||
|
||||
当网络中所有路由器有着同样的视图(view)并对那些最优路由达成一致时,就实现了网络收敛(network convergence)。在要很长时间才能实现收敛时,将会发生远端网络之间间歇性的丢包及连通性丢失。除了这些问题之外,慢速的收敛还会导致网络路由循环(network routing loops)及完全的网络中断(outright network outages)。**所用到的路由协议算法确定了收敛情况**。
|
||||
|
||||
因为这些路由协议有着不同特征,而在其各自的伸缩性(scalability)和性能上有所不同。一些路由协议适合于小型网络,而其它协议则既可用于小型、中型网络,又可在大型网络中使用。
|
||||
|
||||
###包转发
|
||||
|
||||
**Packet Forwarding**
|
||||
|
||||
包转发涉及两个过程。
|
||||
|
||||
+ 确定最优路径, determining the best path
|
||||
+ 发出数据包(交换),sending the packet(switching)
|
||||
|
||||
当路由器接收到一个发往其直接连接网络的数据包时,该路由器就检查其路由表并将该数据包转发到那个网络,如图10.1所示。
|
||||
|
||||

|
||||
|
||||
*图10.1 -- 直连网络*
|
||||
|
||||
如数据包的目的地是一个远端网络,就会检查路由表,如果有一条路由或默认路由,那么就转发数据包到下一跳路由器,如下图10.2所示。
|
||||
|
||||

|
||||
|
||||
*图10.2 -- 远端网络*
|
||||
|
||||
如数据包以一个不在路由表中的网络为目的地,且又不存在默认路由,那么该数据包就不丢弃,如下图10.3所示。
|
||||
|
||||

|
||||
|
||||
*图10.3 -- 没有路由*
|
||||
|
||||
**交换过程(the switching process)**允许路由器通过一个接口接收数据包,并从另一接口发出。同时路由器也会以外出链路的适当数据链路帧方式,对数据包进行封装。
|
||||
|
||||
可能会要求你对自一个网络接收,并以另一个网络为目的地的数据包所发生的事情进行解释。首先,路由器通过移除二层帧的头部和尾部,实现三层数据包的解封装; 接着,路由器查看该IP数据包的目的IP地址,以找出路由表中的最佳路径; 最后,路由器将该三层数据包封装为一个新的二层帧,并将该帧从离开接口转发出去,那么**封装方式就可能从以太网变为HDLC**。此过程在下图10.4中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图10.4 -- 某数据包的三层地址*
|
||||
|
||||
记住在一个较早的模块中曾提到,当数据包往其最终目的漫游时,源和目的IP地址绝不会变化。而MAC地址则会改变,以允许在那些中间设备之间进行传输。这在下图10.5中有演示。
|
||||
|
||||

|
||||
|
||||
*图10.5 -- 二层地址改变*
|
||||
|
||||
图10.6展示了一个从主机X离开,前往主机Y的数据包。注意其下一跳MAC地址属于路由器A(采用了代理ARP);但其IP地址则是属于主机Y。在帧到达路由器B时,以太网头部和尾部将换成WAN协议的头部和尾部,这里可以假定为HDLC的头部和尾部。
|
||||
|
||||

|
||||
|
||||
*图10.6 -- 离开主机X的数据包*
|
||||
|
||||
图10.7展示了离开路由器A前往路由器B的同样数据包。这里有着一次路由查找,接着数据包就被从接口E1 **交换出去**(there is a route lookup and then the packet is switched out of interface E1)。类型800(Type 800)表明该数据包是一个IPv4数据包。
|
||||
|
||||

|
||||
|
||||
*图10.7 -- 离开路由器A的数据包*
|
||||
|
||||
图10.8展示了该帧最终到达路由器C并被转发给主机Y。
|
||||
|
||||

|
||||
|
||||
*图10.8 -- 离开路由器C的数据包*
|
||||
|
||||
###互联网协议路由基础知识
|
||||
|
||||
**Internet Protocol Routing Fundamentals**
|
||||
|
||||
正是某种路由协议,才令到路由器实现如何达到其它网络的动态学习。路由协议还令到路由器实现与其它路由器或主机,就学习到的网络信息进行交换。这些路由协议可用于连接内部园区网络(connecting interior/internal campus networks),也用于连接不同企业或路由域(connecting different enterprises or **routing domains**)。因此,不光要掌握这些路由协议的复杂之处,还要牢固掌握何时在何种情况下要用这种路由协议,而不用另一种的原因。
|
||||
|
||||
###平坦及层次化路由算法
|
||||
|
||||
**Flat and Hierarchical Routing Algorithms**
|
||||
|
||||
路由协议算法要么以平坦路由系统运作,要么就以层次化路由系统运作(routing protocol algorithms operate using either a flat routing system or a hierarchical routing system)。层次化路由系统在路由器纳入到被称作域、区域或自治系统的逻辑分组中时,采用的是层次化方法(a hierarchical routing system uses a layered approach wherein routers are placed in logical groupings referred to as domains, areas, or autonomous systems)。这样做允许网络中的不同路由器完成各自特定任务,从而优化在这些层上完成的功能。层次化系统中的一些路由器可与其它域或区域的路由器通信,而其他路由器只能与同一域或区域中的路由器进行通信。这样做可以减少该域中路由器必须处理信息的数量,从而实现网络内的快速收敛。
|
||||
|
||||
平坦路由系统没有层次。在此类系统中,路由器一般都要连接到网络中的其它所有路由器,且每台路由器基本上都有着同样的功能。在甚小型网络中,此类算法可以工作得很好;但是,这些算法不是可伸缩的。此外,伴随网络增长,故障排除就变得更为棘手,因为比如原本只需努力解决确切的几个区域的问题,现在却不得不面对整个网络的问题。
|
||||
|
||||
由层次化路由系统所带来的主要优势,就是这类系统的可伸缩性。层次化路由系统还令到对网络改变十分容易,这和包含了核心、分布和接入层的传统层次化网络设计带来的优势十分相似。此外,层次化算法可用于在网络的一些区域减少路由更新流量,并减小路由表大小,同时仍然保证完整的网络连通性。
|
||||
|
||||
###IP分址和地址汇总
|
||||
|
||||
**IP Addressing and Address Summarisation**
|
||||
|
||||
一个IP地址是分作两部分的。第一部分指明了网络地址,而第二部分指明的是主机地址。在设计某个网络时,就会用到某种IP分址方案,来将网络中的主机及设备进行唯一区分。该IP分址方案应是层次化的,且应建立在传统的逻辑层次化模型上。这样做就能实现该分址方案于网络中提供出一些指定点位,在这些点位完成有效的路由汇总。
|
||||
|
||||
汇总(summarisation)减少路由器所必须处理信息的数量,以此就可以实现网络的快速收敛。汇总还通过隐藏掉网络中某些区域的详细拓扑信息,从而令到因网络发生改变而受影响区域的大小受限。此概念在下图10.9中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图10.9 -- 采用思科设计模型的路由汇总*
|
||||
|
||||
通过图10.9可以看出,那些分支局(接入层)到地区局路由器(分布层)都是双线路接入(the branch offices(Access Layer) are dual-homed to the regional office routers(Distribution Layer))。这些层都是采用思科设计模型(Cisco design models)定义出来的。采用某种层次化分址方案,就令到分布层路由器将仅一条的那些分支局子网的汇总路由,通告给核心层。这样做保护了核心层免受任何位处分布层和接入层之间路由器路由抖动的影响,因为除非某条汇总路由所继承自的那些更为具体前缀都从路由表中移除,该条汇总路由是不会抖动的(this protects the Core Layer from the effects of any route flapping between the Distribution and Access Layer routers, because a summary route will not flap until every last one of the more specific prefixes from which it is derived is removed from the routing table)。这又带来了该区域稳定性的提升。此外,核心层路由表大小得以极大地减小。
|
||||
|
||||
###管理距离
|
||||
|
||||
**Administrative Distance**
|
||||
|
||||
管理距离用于决定一个路由信息來源对另一个的可靠性(administrative distance is used to determine the reliability of one source of routing information from another)。一些路由信息来源被认为相较其它源更为可靠;那么,当自两种或更多不同路由协议得出两种或更多到同一目的的路径时,管理距离就可用于决定到某个目的网络或网络节点的最优或首选路径。
|
||||
|
||||
在思科IOS软件中,**所有路由信息来源都分配了一个默认管理距离值**。该默认值是一个0到255之间的整数,其中值0分配给最可靠的路由信息来源,值255分配给最不可靠的来源。任何分配了管理距离值255的路由,都被认为是不受信任的,且不会被放入到路由表中。
|
||||
|
||||
**管理距离是一个仅影响本地路由器的本地有意义值**。该值不会在路由域中传播(this value is not propagated throughout the routing domain)。因此,对一台路由器上某个或某些路由来源默认管理距离的修改,仅影响那台路由器对路由信息来源的选用。表10.1展示了思科IOS软件中所用到的默认管理值(考试要求掌握这些值)。
|
||||
|
||||
**表10.1 -- 路由器管理距离**
|
||||
|
||||
**Router Administrative Distances(ADs)**
|
||||
|
||||
<table>
|
||||
<tr><th>路由来源</th><th>管理距离(AD)</th></tr>
|
||||
<tr><td>连接的接口,Connected Interfaces</td><td>0</td></tr>
|
||||
<tr><td>静态路由,Static Routes</td><td>1</td></tr>
|
||||
<tr><td>增强内部网关路由协议汇总路由,Enhanced Interior Gateway Routing Protocol(EIGRP) Summary Routes</td><td>5</td></tr>
|
||||
<tr><td>外部边界网关协议路由,External Border Gateway Protocol(eBGP) Routes</td><td>20</td></tr>
|
||||
<tr><td>内部的增强内部网关路由协议路由,Internal Enhanced Interior Gateway Routing Protocol(EIGRP) Routes</td><td>90</td></tr>
|
||||
<tr><td>开放最短路径优先的内部和外部路由,Open Shortest Path First(OSPF) Internal and External Routes</td><td>110</td></tr>
|
||||
<tr><td>中间系统到中间系统的内部和外部路由,Intermediate System-to-Intermediate System(IS-IS) Internal and External Routes</td><td>115</td></tr>
|
||||
<tr><td>路由信息协议路由,Routing Information Protocol(RIP) Routes</td><td>120</td></tr>
|
||||
<tr><td>外部网关协议路由,Exterior Gateway Protocol(EGP) Routes</td><td>140</td></tr>
|
||||
<tr><td>按需路由的路由,On-Demand Routing(ODR) Routes</td><td>160</td></tr>
|
||||
<tr><td>外部的增强内部网关路由协议路由,External Enhanced Interior Gateway Routing Protocol(EIGRP) Routes</td><td>170</td></tr>
|
||||
<tr><td>内部的边界网关协议路由,Internal Border Gateway Protocol(iBGP) Routes</td><td>200</td></tr>
|
||||
<tr><td>不可达或未知路由,Unreachable or Unknown Routes</td><td>255</td></tr>
|
||||
</table>
|
||||
|
||||
默认路由来源管理距离会显示在`show ip protocols`命令的输出中。下面的输出演示了这点。
|
||||
|
||||
<pre>
|
||||
R1#show ip protocols
|
||||
Routing Protocol is “isis”
|
||||
Invalid after 0 seconds, hold down 0, flushed after 0
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
Redistributing: isis
|
||||
Address Summarization:
|
||||
None
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
Serial0/0
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
10.0.0.2 <b>115</b> 00:06:53
|
||||
Distance: (default is 115 )
|
||||
</pre>
|
||||
|
||||
###路由度量值
|
||||
|
||||
**Routing Metrics**
|
||||
|
||||
各种路由协议算法都会用到度量值,度量值是一个关联到特定路由的数值(routing protocol algorithms use metrics, which are numerical values that are associated with specific values)。使用这些数值来从路由协议学习到的路径中,从最优先到最不优先的顺序,进行优先选用(these values are used to prioritise or prefer routes learned by the routing protocol, from the most preferred to the least preferred)。本质上具有较低路由度量值的路由,就是该路由协议的较高优先顺序的路由。具有最低度量值的路由,通常就是到目的网络代价最小,或者说最优的路由。该条路由将被放入到路由表,并被用于将数据包转发到目的网络。
|
||||
|
||||
不同路由算法用到不同变量来计算路由度量值。一些路由算法仅用到一个变量,而其它先进路由算法会用到多于一个变量来决定某条特定路由的度量值。多数情况下,由一种路由协议计算出的度量值,是不兼容于那些由另一种路由协议所使用的度量值的。不同路由协议的度量值都会基于下面变量的一种或几种。
|
||||
|
||||
+ 带宽,bandwidth
|
||||
+ 成本,cost
|
||||
+ 延迟,delay
|
||||
+ 负载, Load
|
||||
+ 路径长度,path length
|
||||
+ 可靠性, reliability
|
||||
|
||||
**带宽**
|
||||
|
||||
带宽一词,指的是在给定时间内,从一点往另一点可以传输数据的数量。一些路由算法会用到带宽来决定何种链路类型较其它类型更为首选。比如,某种路由协议会首选GigabitEthernet而不是FastEthernet, 因为前者比起后者有着提升了的容量。
|
||||
|
||||
在思科IOS软件中,接口配置命令**`bandwidth`可用于修改某个接口的默认带宽值,从而有效地操纵某种路由协议选择一个接口而不是另一个**。比如,在用接口配置命令`bandwidth 1000000`将FastEthernet接口进行配置后,那么FastEthernet和GigabitEthernet二者在路由协议看起来就具有了相同的传输容量,而会分配到同样的度量值。其中一条链路仍然是FastEthernet链路,而另一条是GigabitEthernet的事实,与路由协议不相关。
|
||||
|
||||
从一名网络管理员的角度看,重要的是理解**`bandwidth`命令不会影响接口的物理容量**(因此该命令又是被成为是一个道具命令(a cosmetic command))。也就是说,在FastEthernet接口上配置了更高的带宽,并不意味着其就具备了支持GigabitEthernet速率的能力。**开放路径优先(OSPF)和增强内部网关路由协议(EIGRP)都在度量值计算中用到了带宽变量**。
|
||||
|
||||
###成本
|
||||
|
||||
**Cost**
|
||||
|
||||
在涉及路由算法时,成本指的是通信成本(the cost, as it pertains to routing algorithms, refers to communication cost)。比如,某公司选择按传输的数据、或按使用时间付费的私有链路,而不是公共链路,就会造成成本的使用。**中间系统到中间系统(IS-IS)路由协议支持一个可选的,度量链路使用成本的费用度量值**(an optional expense metric)。依据不同协议,配置成本会有所不同。
|
||||
|
||||
**延迟**
|
||||
|
||||
**Delay**
|
||||
|
||||
延迟的类型有多种,所有的延迟又影响不同类型的流量。一般意义上的延迟,是指将一个数据包通过互联网络,从其源处移到目的处所需要的时间长度。在思科IOS软件中,接口延迟值以微秒(us)计算的。
|
||||
|
||||
通过接口配置命令`delay`来配置接口的延迟值。在配置接口延迟值时,重要的是记住**这样做并不会影响到流量**(又是一个道具命令)。比如,配置了一个5000的延迟值,并不意味着从该接口发出的流量将有一个额外的5000us延迟。下表10.2展示了思科IOS软件中常见接口的默认延迟值。
|
||||
|
||||
<table>
|
||||
<tr><th>接口类型</th><th>延迟(us)</th></tr>
|
||||
<tr><td>10Mbps Ethernet</td><td>1000</td></tr>
|
||||
<tr><td>FastEthernet</td><td>100</td></tr>
|
||||
<tr><td>GigabitEthernet</td><td>10</td></tr>
|
||||
<tr><td>T1串行线路</td><td>20000</td></tr>
|
||||
</table>
|
||||
|
||||
**EIGRP将接口延迟数值用作其度量值计算的部分**。手动修改接口延迟值会造成EIGRP度量值的重新计算。
|
||||
|
||||
**负载**
|
||||
|
||||
**Load**
|
||||
|
||||
负载对不同的人来说有不同的意思。例如,在一般计算术语中,负载是指某项计算资源,譬如CPU,当前的使用量。而在此处,负载是指某个特定路由器接口使用的比例(load, as it applies in this context, refers to the degree of use for a particular router interface)。接口上的负载是一个255的分数。比如,一个255/255的负载就表明该接口已完全饱和,而一个128/255的负载则表明该接口是50%饱和的。默认情况下,负载是按5分钟平均值计算的(真实世界中常使用**接口配置命令`load-interval 30`**将其修改为一个最小的30s)。**接口负载值可用于EIGRP中的度量值计算**。
|
||||
|
||||
**路径长度**
|
||||
|
||||
**Path Length**
|
||||
|
||||
路径长度度量值是自本地路由器到目的网络所经过路径的总长度。不同路由算法在表示该值时有着不同的形式。比如路由信息协议(Routing Information Protocol, RIP)对在本地路由器和目的网络之间的**路由器**进行计数(跳数,hops), 并使用该跳数作为度量值,而边界网关协议(Border Gateway Protocol, BGP)则对在本地路由器和目的网络之间**所经过的自治系统**进行计数,并使用该自治系统数来选择最优路径。
|
||||
|
||||
**可靠性**
|
||||
|
||||
**Reliability**
|
||||
|
||||
和负载一样,可靠性一词,也是依据其所在上下文的不同,有着不同的意义。在这里,除非另有说明,总是可以假定可靠性是指网络链路或接口的可靠性、可信任性。在思科IOS软件中,某条链路或某个接口的可靠性表示为一个255的分数。比如,一个255/255的可靠性值表明接口是100%可靠的。与接口负载类似,某接口的默认可靠性是以过去5分钟平均值进行计算的。
|
||||
|
||||
###前缀匹配
|
||||
|
||||
**Prefix Matching**
|
||||
|
||||
思科路由器在决定使用位于路由表中的何条路由,来将流量转发到某个目的网络或节点时,采用的是最长前缀匹配规则(the longest prefix match rule)。在决定采用何条路由表条目来将流量路由至计划的目的网络或节点时,更长,或者说更具体的条目优先于像汇总地址那样的,不那么具体的条目。
|
||||
|
||||
最长前缀或最具体路由将用于路由流量到目的网络或节点,此时就会**忽视该最具体路由来源的管理距离**,如有多条经由同样路由协议学习到的重叠前缀,也甚至会忽视分配给该最长前缀的路由协议度量值。表10.3演示了某台将数据包发往地址1.1.1.1的路由器上路由选择的顺序。该顺序是基于最长前缀匹配查找的(this order is based on the longest prefix match lookup)。
|
||||
|
||||
**表10.3 -- 匹配最长前缀**
|
||||
|
||||
<table>
|
||||
<tr><th>路由表条目</th><th>用到的顺序</th></tr>
|
||||
<tr><td>1.1.1.1/32</td><td>第一</td><tr>
|
||||
<tr><td>1.1.1.0/24</td><td>第二</td><tr>
|
||||
<tr><td>1.1.0.0/16</td><td>第三</td><tr>
|
||||
<tr><td>1.0.0.0/8</td><td>第四</td><tr>
|
||||
<tr><td>0.0.0.0/0</td><td>第五</td><tr>
|
||||
</table>
|
||||
|
||||
> **注意:** 尽管在表10.3中默认路由是位列路由选择顺序最后的,但要记住一条默认路由并非总是出现在路由表中的。如路由表中没有默认路由,同时也没有到地址`1.1.1.1`的路由条目,那么路由器就会简单地丢弃到那个目的地的数据包。大多数情况下,路由器会发给源主机一条ICMP消息,告知其目的主机不可达。而一条默认路由就是用于将目的网络未在路由表中显式列出的数据包,导向默认路由。
|
||||
|
||||
###IP路由表的建立
|
||||
|
||||
**Building the IP Routing Table**
|
||||
|
||||
如没有生成一张包含远端网络路由条目的路由表,或称之为路由信息库,路由器就不能将数据包转发到这些远端网络(without a populated routing table, or Routing Information Base(RIB), that contains entries for remote networks, routers will not be able to forward packets to those remote networks)。路由表可能包含了一些特定网络的条目或简单的一条默认路由。转发进程(the forwarding process)使用路由表中的信息将流量转发到目的网络或主机。路由表本身不会去实际转发流量。
|
||||
|
||||
思科路由器使用管理距离、路由协议度量值及前缀长度,来决定哪些路由要实际放入到路由表中,这就允许路由器建立其路由表。通过下面的一般步骤,建立起路由表。
|
||||
|
||||
1. 如路由表中当前不存在该路由条目,就将该条目加入到路由表。
|
||||
2. 如某路由条目比起一条既有路由更为具体,就将其加入到路由表。应注意原较不具体的条目在路由表中仍有留存。
|
||||
3. 如某路由条目与一条既有条目一样,但其是从一个更为首选的路由源处收到的,就用该新条目替换旧条目。
|
||||
4. 如该路由条目与一条既有条目一样,又是从同一协议收到的,就做以下处理。
|
||||
- 如其比既有路由有着更高的度量值,就丢弃新路由;或
|
||||
- 如新路由的度量值更低,就替换既有路由;或
|
||||
- 新旧路由的度量值一样时,将两条路由用作负载均衡
|
||||
|
||||
默认情况下建立路由信息库,当路由器在决定哪些路由要放入路由表时,总会选用有着最低管理距离值的路由协议。比如,某台路由器收到经由**外部的EIGRP**、OSPF及内部BGP给出的`10.0.0.0/8`前缀时,OSPF的路由将被放入到路由表中。而在那条路由被移除,或是不再收到时,外部EIGRP路由将被放入路由表中。最后如果OSPF和外部EIGRP路由都不再出现时,内部BGP路由就被用到。
|
||||
|
||||
一旦路由已放入到路由表,默认情况下比起那些较不具体的路由,最为具体或有着最长匹配前缀的路由总是优先选用的。这在下面的实例中进行了演示,该实例展示了包含有`80.0.0.0/8`、`80.1.0.0/16`及`80.1.1.0/24`前缀路由条目的一个路由表。这三条路由前缀分别通过EIGRP、OSPF及RIP路由协议接收到。
|
||||
|
||||
```
|
||||
R1#show ip route
|
||||
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
|
||||
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
|
||||
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
|
||||
E1 - OSPF external type 1, E2 - OSPF external type 2
|
||||
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
|
||||
* - candidate default, U - per-user static route, o - ODR
|
||||
P - periodic downloaded static route
|
||||
Gateway of last resort is not set
|
||||
R 80.1.1.0/24 [120/1] via 10.1.1.2, 00:00:04, Ethernet0/0.1
|
||||
D 80.0.0.0/8 [90/281600] via 10.1.1.2, 00:02:02, Ethernet0/0.1
|
||||
O E2 80.1.0.0/16 [110/20] via 10.1.1.2, 00:00:14, Ethernet0/0.1
|
||||
```
|
||||
|
||||
从上面的输出看出,第一条路由是`80.1.1.0/24`。该路由是经由RIP学习到的,因此有着默认的管理距离值120。第二条路由是`80.0.0.0/8`。该路由是经由**内部的EIGRP**学习到的,因此有着默认管理距离值90。第三条路由是`80.1.0.0/16`。该路由是通过OSPF学习到的,且是一条有着管理距离110的**外部的OSPF**路由。
|
||||
|
||||
> **注意:** 因为这些路由协议度量值各不相同,在有着来自不同协议的路由安装到路由表时,这些**度量值是在决定要使用的最佳路由时的非要素**。下面的部分将说明思科IOS软件是如何来建立路由表的。
|
||||
|
||||
基于该路由表的内容,如路由器收到一个目的为`80.1.1.1`的数据包,就会使用那条RIP路由,因为这是最为具体的条目,尽管EIGRP和OSPF都有着更好的管理距离值而是更为优先的路由来源。`show ip route 80.1.1.1`命令可用于检验这点。
|
||||
|
||||
```
|
||||
R1#show ip route 80.1.1.1
|
||||
Routing entry for 80.1.1.0/24
|
||||
Known via “rip”, distance 120, metric 1
|
||||
Redistributing via rip
|
||||
Last update from 10.1.1.2 on Ethernet0/0.1, 00:00:15 ago
|
||||
Routing Descriptor Blocks:
|
||||
* 10.1.1.2, from 10.1.1.2, 00:00:15 ago, via Ethernet0/0.1
|
||||
Route metric is 1, traffic share count is 1
|
||||
```
|
||||
|
||||
##有类和无类协议
|
||||
|
||||
**Classful and Classless Protocols**
|
||||
|
||||
有类协议无法使用VLSM(也就是RIPv1和IGRP,它们都已不在CCNA大纲中了)。这是因为它们不会去识别除了默认网络掩码外的其它任何东西。
|
||||
|
||||
<pre>
|
||||
Router#debug ip rip
|
||||
RIP protocol debugging is on
|
||||
01:26:59: RIP: sending v1 update to 255.255.255.255 via Loopback0
|
||||
<b>192.168.1.1</b>
|
||||
</pre>
|
||||
|
||||
有类协议用到VLSM(也就是RIPv2和EIGRP)。
|
||||
|
||||
<pre>
|
||||
Router#debug ip rip
|
||||
RIP protocol debugging is on
|
||||
01:29:15: RIP: received v2 update from 172.16.1.2 on Serial0
|
||||
01:29:15:<b>192.168.2.0/24</b> via 0.0.0.0
|
||||
</pre>
|
||||
|
||||
##被动接口
|
||||
|
||||
**Passive Interfaces**
|
||||
|
||||
路由协议设计和配置的一个重要考虑,就是要限制不必要的对等传送(an important routing protocol design and configuration consideration is to limit unnecessary peerings), 如下图10.10所示。这是通过使用被动接口实现的, 被动接口可以阻止路由器在指定接口上形成路由邻接关系(routing adjacencies)。基于特定路由协议,此功能的使用会有所不同,但其做法通常有以下两类。
|
||||
|
||||
+ 路由器不在被动接口上发出路由更新
|
||||
+ 路由器不在该接口上发送Hello数据包,这样做就不会形成邻居关系
|
||||
|
||||
被动接口通常能接收到路由更新或Hello数据包,但不被允许发出任何种类的路由协议信息出去。
|
||||
|
||||

|
||||
|
||||
*图10.10 -- 限制不必要的对等数据交换*
|
||||
|
||||
被动接口的一个用例实例就是用于防止路由协议数据自分布层对等传送(peerings)到接入层,就如同上面的图10.10所示。当留有三层跨越这些性质不同的接入层交换机的对等传输时(也就是在跨越交换机区块的不同交换机上有着多台主机),就只会增加内存负载、路由协议更新开销及更多的复杂性。同样,如发生了某条链路故障,流量会经由一台邻居接入交换机传输,而到达另一个VLAN成员处(by having Layer 3 switches across the different Access Layer switches(i.e., having multiple hosts on different switches across switch blocks) you are basically adding memory load, routing protocol update overhead, and more complexity. Also, if there is a link failure, the traffic may transit through a neighbouring Access Layer switch to get to another VLAN member)。
|
||||
|
||||
也就是说,你想要消除不必要的路由对等邻接(unnecessary routing peering adjacencies),那么就要将那些面向二层交换机的端口,配置为被动接口,以此来抑制路由更新通告(suppress routing updates advertisements)。如某台分布层交换机在这些接口之一上,一条都没有接收到来自一台潜在对等设备的路由更新,其就不必去处理这些更新,也就不会通过那个设备形成邻居邻接关系。达成此配置的命令通常就是路由进程配置模式(the Routing Process Configuration mode)中的`passive-interface [interface number]`命令。要获得更多有关思科设计模型(the Cisco design model)的信息,请阅读一份CCDA手册。
|
||||
|
||||
##路由协议分类
|
||||
|
||||
**Routing Protocol Classes**
|
||||
|
||||
路由协议有两大分类 -- **距离矢量**和**链路状态**(Distance Vector and Link State)。距离矢量路由协议在决定通过网络的最优路径(一条或多条)时,传统上使用一个一维矢量(a one-dimensional vector),而链路状态路由协议在决定通过网络的最优路径(一条或多条)时,使用最短路径优先(the Shortest Path First, SPF)。在深入探究路由协议的这两种类别的具体细节之前,我们先看看不同矢量,以及难以搞懂的SPF算法。
|
||||
|
||||
###理解矢量
|
||||
|
||||
**Understanding Vectors**
|
||||
|
||||
一个一维矢量就是一个有方向的量。它就是一个在特定方向或路线上的量(数字)。下图10.11演示了矢量这个概念。
|
||||
|
||||

|
||||
|
||||
*图10.11 -- 理解矢量*
|
||||
|
||||
在图10.11中,第一条线路从0开始,到9结束,同时第二条线路从8开始,在13处结束。那么第一条线路的矢量就是8, 第二条的矢量就是5。运用基础数学,就知道8+5=13。矢量的开始点和结束点是无关的。而是与矢量长度及其经过的距离有关。
|
||||
|
||||
> **注意:** 矢量亦可朝相反的方向通过(也就是以负数表示的矢量)。
|
||||
|
||||
###最短路径优先算法
|
||||
|
||||
**The Shortest Path First Algorithms**
|
||||
|
||||
最短路径优先算法通过路由器创建出到某个区域或网络骨干中的所有主机的最短路径树,该路由器处于树的根部,并由该路由器完成树的生成计算。为让SPF算法以正确的方式工作,区域中的所有路由器都要有同样的数据库信息。在OSPF中,数据库信息同步是通过数据库交换过程实现的(the SPF algorithm creates a shortest-path tree to all hosts in an area or in the network backbone with the router that is performint the calculation at the root of that tree. In order for the SPF algorithm to work in the correct manner, all routers in the area should have the same database information. In OSPF, this is performed via the database exchange process)。
|
||||
|
||||
###距离矢量路由协议
|
||||
|
||||
**Distance Vector Routing Protocols**
|
||||
|
||||
距离矢量是一种**用距离或跳数计数作为主要度量值**,来决定最佳转发路径的路由协议。距离矢量路由协议又是主要建立在Bellman-Ford算法基础上。距离矢量路由协议发送其邻居路由器的完整路由表,以保持这些路由器有关网络状态的最新信息(Distance Vector routing protocols periodically send their neighbour routers copies of their entire routing tables to keep them up to date on the state of the network)。**在某个小型网络中这也许可以接受,而当网络增大时,通过网络发送的流量数量就会增长**。所有距离矢量路由协议都有着以下的特征。
|
||||
|
||||
+ 计数到无限大,counting to infinity
|
||||
+ 水平分割, split horizon
|
||||
+ 反向投毒,poison reverse
|
||||
+ 保持计数器,hold-down timers
|
||||
|
||||
对计数到无穷的运用,如某个目的网络远于路由协议所允许的最大跳数,该网络就认为其是不可达的。该网络的路由条目因此就不会安装到IP路由表中。
|
||||
|
||||
水平分割特征指明路由信息再不能从其接收到的接口再发送出去。这样做就可以阻止路由信息再通告给学习到它的源路由器。尽管此特征是一种了不起的防止环回机制,但也有显著的不利之处,特别是在辐射状网络中。
|
||||
|
||||
反向投毒(或路由投毒)是水平分割的拓展。在与水平分割配合使用时,反向投毒可令到自某个接口上收到的网络,再从同样接口通告出去。但反向投毒造成路由器将某网络以“不可达”度量值,通告回发出该网络的路由器,那么收到这些条目的路由器就不会将这些条目再加入到其路由表中了。
|
||||
|
||||
保持计数器用于阻止那些先前通告的网络由于宕掉而被放回到路由表中(hold-down timers are used to prevent networks that were previously advertised as down from being placed back into the routing table)。在路由器收到一个某网络宕掉的更新时,就启动它的保持计数器。该计数器告诉路由器在接受任何那个网络的状态变化之前,等待一段指定的时间。
|
||||
|
||||
在保持期间,路由器压制住该网络并阻止通告出无效信息(during the hold-down period, the router suppresses the network and prevents advertising false information)。就算路由器收到来自网络可达的其它路由器(它们可能没有收到网络宕掉的触发更新)的信息,也不会将数据包路由到该不可达网络。此机制设计用于阻止黑洞流量(the router also does not route to the unreachable network, even if it receives information from another router(that may not have recieved the triggered update)that the network is reachable. This mechanism is designed to prevent black-holing traffic)。
|
||||
|
||||
两个最常见的距离矢量协议,就是**RIP**和**IGRP**。**EIGRP是一个高级距离矢量协议**,距离矢量和链路状态两方面的特性在EIGRP中都有用到(也就是说,它是一个**混合协议(hybrid protocol)**)。
|
||||
|
||||
###链路状态路由协议
|
||||
|
||||
**Link State Routing Protocols**
|
||||
|
||||
链路状态路由协议属于层次化的路由协议,采用区域的概念(the concept of areas),在网络中对路由器进行分组。这样做令到链路状态协议比起距离矢量协议能够更好地伸缩并以一种效率更高的方式运行。运行链路状态路由协议的路由器,创建出一个包含了网络全部拓扑的数据库。这样做令到同一区域中的路由器,都有着网络的同样视图(the same view of the network)。
|
||||
|
||||
由于网络中的路由器都有着网络的同样视图,用于在网络间转发数据包的路径就是最优的,且路由环回的可能性得以消除。因此,诸如水平分割和路由投毒这样的技巧对链路状态协议就不适用了,因为它们是用于距离矢量路由协议的。
|
||||
|
||||
链路状态路由协议通过发送链路状态通告(Link State Advertisement),或者说链路状态数据包(Link State Packets)给位于同一区域内其它路由器的方式运作。这些数据包包含了有关链路所连接的接口、链路度量值及链路其它变量的信息。随着路由器对这些信息的积累,它们就运行SPF算法并计算出到各台路由器及目的网络的最短(最佳)路径。使用接收到的链路状态信息,路由器建立其链路状态数据库(the Link State Database, LSDB)。在相邻两台路由器的LSDBs同步了时,就说它们形成了邻接关系。
|
||||
|
||||
与发送给其邻居的是它们的完整路由表的距离矢量路由协议不同,链路状态路由协议在探测到网络拓扑发生改变时,发送的是增量更新,这点令到链路状态路由协议在较大型的网络中效率更高。使用增量更新也令到链路状态路由协议对网络变化的响应更为迅速,因此比起距离矢量路由协议有着更短的收敛时间。表10.4列出了不同的内部网关协议及其所属类别。
|
||||
|
||||
**表10.4 -- IGP类别**
|
||||
|
||||
<table>
|
||||
<tr><th>协议名称</th><th>有类/无类</th><th>协议类别</th></tr>
|
||||
<tr><td>RIP(版本1)</td><td>有类</td><td>距离矢量</td></tr>
|
||||
<tr><td>IGRP</td><td>有类</td><td>距离矢量</td></tr>
|
||||
<tr><td>RIP(版本2)</td><td>无类</td><td>距离矢量</td></tr>
|
||||
<tr><td>EIGRP</td><td>无类</td><td>高级距离矢量</td></tr>
|
||||
<tr><td>IS-IS</td><td>无类</td><td>链路状态</td></tr>
|
||||
<tr><td>OSPF</td><td>无类</td><td>链路状态</td></tr>
|
||||
</table>
|
||||
|
||||
##路由协议的各种目标
|
||||
|
||||
**The Objectives of Routing Protocols**
|
||||
|
||||
这些路由算法尽管生来就有所不同,但都有着同样的基本目标。虽然一些算法好于其它一些,但所有路由协议都有其优势和不足。这些路由算法的设计,都有着下面这些目标和目的。
|
||||
|
||||
+ 最优路由, optimal routing
|
||||
+ 稳定性, stability
|
||||
+ 易于使用, easy of use
|
||||
+ 灵活性, flexibility
|
||||
+ 快速收敛, rapid of convergence
|
||||
|
||||
###最优路由
|
||||
|
||||
**Optimal Routing**
|
||||
|
||||
所有路由协议的主要目标之一,就是选择通过网络从源子网或主机到目的子网或主机的最优路径。最优路由依据就是这些路由协议所使用的度量值。一种协议所认为的最优路由,并不一定也是从另一协议角度看的最优路由。比如,RIP可能认为一条仅有两跳长的路径是到某个目的网络的最优路径,尽管这些链路都是64Kbps,而诸如OSPF和EIGRP那样的先进协议则会到相同目的的最优路径是经过了4台路由器却有着10Gbps速率的链路。
|
||||
|
||||
###稳定性
|
||||
|
||||
**Stability**
|
||||
|
||||
网络的稳定与否,是这些路由算法的另一个主要目标。路由算法应足够稳定,以容许无法遇见的网络事件(to accommodate unforeseen network events), 比如硬件故障甚至错误实现等。尽管这是一个所有路由算法的典型特征,但由于它们对这些事件应对的方式和所用时间,令到一些算法相对其它算法做得更好,因此在现今网络中用到更多。
|
||||
|
||||
###易于使用
|
||||
|
||||
**Ease of Use**
|
||||
|
||||
路由算法被设计得尽可能简单。除了要提供对复杂互联网络部署的支持能力,路由协议还应考虑运行其算法所需的计算资源问题。一些路由算法比起其它算法需要更多的硬件和软件资源(比如CPU和内存)来运行;但它们却能够提供比其它替代的简单算法更多的功能。
|
||||
|
||||
###灵活性
|
||||
|
||||
**Flexibility**
|
||||
|
||||
除了提供路由功能外,路由算法还应富于特性,从而令到这些算法支持在不同网络中遇到的不同需求。但需注意此能力是以诸如下面即将说到的收敛等其它特性为代价的。
|
||||
|
||||
###快速收敛
|
||||
|
||||
**Rapid Convergence**
|
||||
|
||||
快速收敛又是所有路由算法的另一主要目标。如早前指出的那样,当网络中的所有路由器都有着同样视图且对最优路由达成一致时,就出现了收敛。在需要长时间才能收敛时,远端网络之间就会出现间歇性的包丢失及失去连通性。除了这些问题外,慢速收敛还会导致路由环回和完全的网络中断。
|
||||
|
||||
###路由故障避开机制
|
||||
|
||||
**Routing Problems Avoidance Mechanisms**
|
||||
|
||||
距离矢量路由协议因其过于简单的“依据传言的路由”方法,而容易造成大问题(it is a known fact that Distance Vector routing protocols are prone to major problems as a result of their simplistic "routing by rumor" approach)。距离矢量和链路中台协议采用不同方法来防止路由故障。有下面这些最为重要的机制。
|
||||
|
||||
+ **无效计数器**,invalidation timers: 在很长时间内都没有收到一些路由的更新时,这些计数器被用于将这些路由标记为不可达。
|
||||
+ **跳数限制**, hop count limit: 当一些路由的跳数,比预先定义的跳数限制还多时,此参数就将这些路由标记为不可达。RIP的跳数限制是15, 而大型网络通常不会使用RIP。不可达路由不会作为最佳路由安装到路由表中。跳数限制防止网络中的环回更新,就想IP头部的TTL字段一样。
|
||||
+ **触发的更新**, triggered updates:此特性允许有重要更新时对更新计数器进行旁路、忽视。比如,在有一个重要的路由更新必须要在网络中宣传是,就可以忽略RIP的30秒计数器。
|
||||
+ **保持计数器**, hold-down timers: 如某条特定路由的度量值持续变差,那条路由的更新就会在一个延迟时期内不被接受了。
|
||||
+ **异步的更新**, asynchronous updates:异步更新代表另一种防止网络上的路由器,在同一时间其全部路由信息被冲掉的安全机制。在前面提到,OSPF每30分钟执行一次异步更新。异步更新机制为每台设备生成一个小的延时,因此这些设备不会准确地在同一时间信息全被冲掉。这样做可以改进带宽的使用以及处理能力。
|
||||
+ **路由投毒**, route poisoning: 此特性防止路由器通过已为无效的路由发送数据。距离矢量协议使用这个特性表明某条路由不再可达。路由投毒是通过将该路由的度量值设置为最大值完成的。
|
||||
+ **水平分割**, split horizon:水平分割防止路由更新再从收到的接口上发送出去,因为在那个区域中的路由器应该已经知道了那条特定路由了。
|
||||
+ **反向投毒**, poison reverse: 该机制是因被投毒路由而造成的水平分割的一个例外。
|
||||
|
||||
##基于拓扑(CEF)的交换
|
||||
|
||||
**Topology-Based(CEF) Switching**
|
||||
|
||||
将某数据包预期的目的地址与IP路由表进行匹配,需要使用一些路由器的CPU运算周期。企业路由器可能有着数十万的路由条目,并能对同样数量的数据包与这些条目进行匹配。在尝试以尽可能高的效率来完成这个过程中,思科构建出了各种不同的交换方法(various switching methods)。第一种叫做进程交换(process switching), 而它用到路由查找及已分级的最佳匹配方法(uses the route lookup and best match already outlined)。此方式又在快速交换(fast switching)之上进行了改进。路由器生成的最近转发数据包IP地址清单,连同IP地址匹配下的数据链路层地址会被复制下来。作为对快速转发的改进,思科快速转发(Cisco Express Forwarding, CEF)技术得以构建。当下思科路由器的所有型号,默认运行的都是CEF。
|
||||
|
||||
##思科快速转发
|
||||
|
||||
**Cisco Express Forwarding(CEF)**
|
||||
|
||||
CEF运行于数据面(the data plane), 是一种拓扑驱动的专有交换机制(a topology-driven proprietary switching mechanism), 创建出捆绑到路由表(也就是控制面,the control plane)的转发表。开发CEF是为消除因基于数据流交换中用到的,进程交换的首个数据包查找方法出现的性能问题(CEF was developed to eliminate the performance penalty experencied due to the first-packet process-switched lookup method used by flow-based switching)。CEF通过允许为基于硬件的三层路由引擎用到的路由缓存,在接收到某个传输流的任何数据包之前,将所有三层交换所需的必要信息,包含到硬件当中。照惯例保存在路由缓存中的信息,现在是保存在CEF交换的两个数据结构中。这两个数据结构提供了高效率包转发的优化查找,它们分别成为FIB(Forwarding Information Base, 转发信息库)和邻居表。
|
||||
|
||||
> **注意:** 重要的是记住就算有了CEF,在路由表发生变化时,CEF转发表同样会更新。在新的CEF条目创建过程中,数据包会在一个较慢的交换路径中,使用比如进程交换的方式,进行交换。所有当前的思科路由器型号及当前的IOS都使用CEF。
|
||||
|
||||
###转发信息库
|
||||
|
||||
**Forwarding Information Base(FIB)**
|
||||
|
||||
CEF使用一个FIB来做出基于IP目的地址前缀的交换决定(CEF uses a FIB to make IP destination prefix-based switching decisions)。FIB在概念上与路由表或信息库是相似的。FIB维护着包含在IP路由表中的转发信息的一个镜像。也就是说,FIB包含了来自路由表中的所有IP前缀。
|
||||
|
||||
当网络中的路由或拓扑发生改变是,IP路由表就会被更新,同时这些变化在FIB中也会反映出来。FIB维护着建立在IP路由表中信息上的下一跳地址信息。因为在FIB条目和路由表条目之间有着一一对应关系,FIB就包含了所有已知路由,并消除了在诸如快速交换方式和最优交换(optimum switching)方式中于交换路径(switching paths)有关的路由缓存维护需求。
|
||||
|
||||
此外,因为FIB查找表中包含了所有存在于路由表中的已知路由,FIB就消除了路由缓存维护,以及快速交换和进程交换的转发场景。这样做令到CEF比典型的demand-caching方案要更为高效地交换流量。
|
||||
|
||||
###邻接表
|
||||
|
||||
**The Adjacency Table**
|
||||
|
||||
创建邻接关系表来包含所有直连的下一跳。邻接节点就是只有一跳的节点(也就是直接连接的)。在发现邻接关系后,就生成了该邻接关系表。一旦某个邻居成为邻接关系,将用于到达那个邻居的一个叫作MAC字串或MAC重写(a MAC string or a MAC rewrite)的数据链路层头部,就被创建出来并存入到邻接表中。在以太网段上,头部信息依次包含了目的MAC地址、源MAC地址以及以太网类型(EtherType)。
|
||||
|
||||
而一旦某条路由得到解析,就会指向到一个邻接的下一跳。如在邻接表中找到了某个邻接,那么一个指向该适当邻接的指针就在FIB条目中进行缓存(as soon as a route is resolved, it points to an adjacent next hop. If an adjacency is found in the adjacency table, a pointer to the appropriate adjacency is cached in the FIB element)。而如果存在到某个同样目的网络的多条路径,则指向每条邻接的所有指针就会被加入到load-sharing结构体中,这样做可以实现负载均衡。当多条前缀加入到FIB时,那些需要例外处理的前缀,会以特别邻接关系进行缓存。
|
||||
|
||||
###加速的及分布式CEF
|
||||
|
||||
**Accelerated and Distributed CEF**
|
||||
|
||||
默认下,所有基于CEF技术的思科Catalyst交换机都使用**一个中心化三层交换引擎**(a central Layer 3 switching engine),在那里一个单一处理器对交换机中所有端口上接收到的流量,做出全部的三层交换决定。尽管思科Catalyst交换机中用到的三层交换引擎提供了高性能,但在某些网络中,使用单一的三层交换引擎来完成所有三层交换,仍然不能提供足够的性能。为解决这个问题,思科Catalyst 6500系列交换机允许通过使用特别的转发硬件对CEF进行优化(to address this issue, Cisco Catalyst 6500 series switches allow for CEF optimisation through the use of specialised forwarding hardware)。CEF优化有两种实现方式,加速的CEF或分布式CEF。
|
||||
|
||||
加速的CEF允许让FIB的一个部分分布到Catalyst 6500交换机中的具备此功能的线路卡模块上去(Accelerated CEF allows a portion of the FIB to be distributed to capable line card modules in the Catalyst 6500 switch)。这样做令到转发决定在本地线路卡上使用本地存储的缩小的CEF表做出。假如有FIB条目在缓存中没有找到,就会向三层交换引擎发出需要更多FIB信息的请求。
|
||||
|
||||
分布式CEF指的是使用分布在安装于机架上的多块线路卡上的多个CEF表。在应用dCEF时,三层交换引擎(MSFC)维护着路由表并生成FIB,FIB将被所有线路卡动态完整下载,令到多个三层数据面(multiple Layer 3 data plane)同时运行。
|
||||
|
||||
总体上说,dCEF和aCEF都是用到多个三层交换引擎的技术,这样就实现了多个三层交换操作同时并行运作,从而提升整体系统性能。CEF技术提供以下好处。
|
||||
|
||||
+ 性能改善,improved performance -- 比起快速交换路由缓存技术,CEF是较少CPU-密集的(CEF is less CPU-intensive than fast-switching route caching)。那么就有更多的CPU处理能力用在譬如QoS和加密等的三层业务上。
|
||||
+ 伸缩性, scalability -- 当dCEF模式开启时,CEF在诸如Catalyst 6500系列交换机等的高端平台的所有线路卡上,提供了全部的交换能力。
|
||||
+ 迅速恢复的能力, resilience -- CEF提供了大型动态网络中无例可循水平的数据交换一致性和稳定性。在动态网络中,快速交换缓存条目由于路由变化而频繁地过期和作废。这些变动能够引起流量经由使用路由表的进程交换而不是使用路由缓存的快速交换(CEF offers **an unprecedented level of switching consistency and stability** in large dynamic networks. In dynamic networks, fast-switching cache entries are frequently invalidated due to routing changes. These changes can cause traffic to be process-switched using the routing table rather than fast-switched using the route cache)。
|
||||
|
||||
###CEF的配置
|
||||
|
||||
**Configuring Cisco Express Forwarding**
|
||||
|
||||
开启CEF只需简单的一条命令,那就是全局配置命令`ip cef [distributed]`。关键字`[distributed]`仅适用于像是Catalyst 6500系列、支持dCEF的高端交换机。下面的输出展示了如何在一台诸如Catalyst 3750系列交换机的低端平台上配置CEF。
|
||||
|
||||
```
|
||||
VTP-Server-1(config)#ip cef
|
||||
VTP-Server-1(config)#exit
|
||||
```
|
||||
|
||||
下面的输出演示了在Catalyst 6500系列交换机上如何开启dCEF。
|
||||
|
||||
```
|
||||
VTP-Server-1(config)#ip cef distributed
|
||||
VTP-Server-1(config)#exit
|
||||
```
|
||||
|
||||
> **注意:** 并没有用于配置或开启aCEF的显式命令。
|
||||
|
||||
##路由问题的故障排除
|
||||
|
||||
**Troubleshooting Routing Issues**
|
||||
|
||||
当在网络设备上配置路由时,必须按照设计小心仔细地配置**静态或动态路由**(static or dynamic routing)。如存有故障而无法通过网络发送/接收流量,这时多半有着某种配置问题。在初次设置某台路由器时,总会有一些类型的配置问题要你去排除。而如果某台路由器已经运行了一段时间,而突然完全没有了流量(没有通信),就要做一下情况分析,看看路由协议有没有如预期那样发挥功能。
|
||||
|
||||
有时某些路由会间歇性地从路由表中消失又出现、消失又出现,以致造成到特定目的网络的间歇性通或不通。这可能是由于某个确切网络区域存在某些通信故障,而沿着该路径上的路由器在那个区域每次变得可用时都会宣告新的路由信息造成的。该过程就叫作“路由抖动(route flapping)”, 而使用一种叫作“路由惩罚(route dampening)”的特性,可对这些特定抖动路由进行屏蔽(be blocked), 以令到整个网络不受路由抖动的影响。
|
||||
|
||||
> **注意:** 在使用静态路由时,路由表一直不会变化,所以对发生在不同网络区域内的故障,也得不到任何信息。
|
||||
|
||||
在处理路由故障时,标准方法就是依据路由表来检查沿路径的每条路由(when troubleshooting routing issues the standard approach is to follow the routing table for every route along the path)。可能会要执行一下`traceroute`,来准确找出数据包去了哪里,并看看路径上的那些路由器。采用这种方法,就可以准确知道可能是哪台设备引起的该故障,同时可以开始调查某些特定路由器上的路由表了。
|
||||
|
||||
在进行这样一个排错过程时,一个常犯的错误就是仅在一个方向上调查该故障(比如只从源到目的方向)。正确的做法是应在去和回两个方向进行排错,因为可能会偶然遇到数据包在一个方向被阻止而从目的到源没有返回流量的情形。为保证一个最优的传输流,沿路径处于两点之间的设备上的路由表中应在两个方向上都有正确指向。
|
||||
|
||||
通常情况下都会用到第三方提供的连接,所以在想要对某个确切区域进行排错时,就要与服务提供商进行沟通,以共同解决问题。这就包括了分享路由表信息。
|
||||
|
||||
动态路由协议的采行,令到排错过程更为容易,因为可以检查由路由器发出和接收到的路由更新。而对路由更新的检查,可以通过抓包或内部的设备机制完成,同时将帮助我们看到路由表是在何时、如何生成的。有着一张拓扑图及其它列出了每个前缀在网络中所处位置的文档,将更好地帮助你对路由更新的理解,进而缩短排错的过程。在这样的一个排错过程中,一般的主张就是依网络的设计,决定某个特定数据包将会采取的路径,并调查一下到底这个数据包在该路径的何处,偏离了该路径。
|
||||
|
||||
要对网络设备进行监控,有着不同工具。而这些工具都用到同样的网络管理协议,那就是简单网络管理协议(Simple Network Management Protocol, SNMP), 该协议设计从某台管理工作站对网络设备发起不同参数的查询(ICND2涵盖了SNMP)。除了检查标准的“健康度”参数(比如CPU、内存、磁盘空间等等)外,SNMP还会查询路由器的下面这些参数。
|
||||
|
||||
+ 接口上数据包计数
|
||||
+ 使用到的带宽及通过量
|
||||
+ 设备接口上的CRC及其他类型的错误
|
||||
+ 路由表信息
|
||||
|
||||
其它可以用到工具就是标准的用于验证端到端连通性的`ping`和`traceroute`了。它们亦能展示一些可能有助于确定出网络中发生故障的点位的相关输出。
|
||||
|
||||
下面是在对几乎所有路由故障进行排错时所涉及的步骤。
|
||||
|
||||
+ 检查路由是否开启
|
||||
+ 检查路由表是否有效
|
||||
+ 检查当前的路径选择
|
||||
|
||||
###检查路由是否开启
|
||||
|
||||
**Verifying that Routing is Enabled**
|
||||
|
||||
路由排错的第一步,就是检查路由协议是否开启及正确配置。这既可以通过检查当前运行配置(也就是`show run`命令),又可以使用结合了每种特定路由协议的`show`命令。这些路由协议的选项有下面这些。
|
||||
|
||||
```
|
||||
Router#show ip ospf ?
|
||||
<1-65535> Process ID number
|
||||
border-routers Border and boundary router information
|
||||
database Database summary
|
||||
flood-list Link state flood list
|
||||
interface Interface information
|
||||
max-metric Max-metric origination information
|
||||
mpls MPLS related information
|
||||
neighbor Neighbor list
|
||||
request-list Link state request list
|
||||
retransmission-list Link state retransmission list
|
||||
rib Routing information base (RIB)
|
||||
sham-links Sham link information
|
||||
statistics Various OSPF Statistics
|
||||
summary-address Summary-address redistribution information
|
||||
timers OSPF timers information
|
||||
traffic Traffic related statistics
|
||||
virtual-links Virtual link information
|
||||
| Output modifiers
|
||||
<cr>
|
||||
|
||||
Router#show ip eigrp ?
|
||||
<1-65535> Autonomous System
|
||||
accounting IP-EIGRP accounting
|
||||
interfaces IP-EIGRP interfaces
|
||||
neighbors IP-EIGRP neighbors
|
||||
topology IP-EIGRP topology table
|
||||
traffic IP-EIGRP traffic statistics
|
||||
vrf Select a VPN routing/forwarding instance
|
||||
|
||||
Router#show ip bgp ?
|
||||
A.B.C.D Network in the BGP routing table to display
|
||||
A.B.C.D/nn IP prefix <network>/<length>, e.g., 35.0.0.0/8
|
||||
all All address families
|
||||
cidr-only Display only routes with non-natural netmasks
|
||||
community Display routes matching the communities
|
||||
community-list Display routes matching the community-list
|
||||
dampening Display detailed information about dampening
|
||||
extcommunity-list Display routes matching the extcommunity-list
|
||||
filter-list Display routes conforming to the filter-listinconsistent-as Display only routes with inconsistent origin ASs
|
||||
injected-paths Display all injected paths
|
||||
ipv4 Address family
|
||||
ipv6 Address family
|
||||
labels Display labels for IPv4 NLRI specific information
|
||||
neighbors Detailed information on TCP and BGP neighbor connections
|
||||
nsap Address family
|
||||
oer-paths Display all oer controlled paths
|
||||
paths Path information
|
||||
peer-group Display information on peer-groups
|
||||
pending-prefixes Display prefixes pending deletion
|
||||
prefix-list Display routes matching the prefix-list
|
||||
quote-regexp Display routes matching the AS path “regular expression”
|
||||
regexp Display routes matching the AS path regular expression
|
||||
replication Display replication status of update-group(s)
|
||||
rib-failure Display bgp routes that failed to install in the routing table (RIB)
|
||||
route-map Display routes matching the route-map
|
||||
summary Summary of BGP neighbor status
|
||||
template Display peer-policy/peer-session templates
|
||||
update-group Display information on update-groups
|
||||
vpnv4 Address family
|
||||
| Output modifiers
|
||||
<cr>
|
||||
```
|
||||
|
||||
###检查路由表是否正确
|
||||
|
||||
**Verifying That the Routing Table Is Valid**
|
||||
|
||||
在成功确定已开启路由进程后,下一步就要对各协议的路由表进行分析,看看那里列出的信息是否正确。一些需要着重注意的地方有下面这些。
|
||||
|
||||
+ 验明经由正确的协议学习到正确的前缀
|
||||
+ 验明学到的前缀条数
|
||||
+ 验明这些路由的度量值及下一跳信息
|
||||
|
||||
依据路由协议的不同,还要对从设备向外通告的那些前缀的正确性进行检查。
|
||||
|
||||
###检查路径选择的正确性
|
||||
|
||||
在检查了有关前缀在路由表中确有出现后,就应对这些前缀的属性值(译者注:其路由跳数及各条路由的度量值、下一跳等信息)及路径选择方式进行仔细分析。这些分析包括下面这些。
|
||||
|
||||
+ 检查通告了该前缀的所有路由协议(还要包括静态路由)
|
||||
+ 对AD进行比较和修改,以令到优先选择某种指定的路由协议,而不是默认正确的
|
||||
+ 检查并调整这些协议的度量值
|
||||
|
||||
通过对网络中某台路由器的恰当配置,并在配置过程中对每一步都做好文档,以及对网络中两点自荐路径的持续监测,就能够对网络中流量是如何准确地流经那些设备,有扎实掌握。
|
||||
|
||||
##第10天问题
|
||||
|
||||
1. What is a routing protocol?
|
||||
2. `_____` is used to determine the reliability of one source of routing information from
|
||||
another.
|
||||
3. If a router learns a route from both EIGRP (internal) and OSPF, which one would it prefer?
|
||||
4. What is the RIP AD?
|
||||
5. What is the eBGP AD?
|
||||
6. Name at least four routing metrics.
|
||||
7. Once routes have been placed into the routing table, by default the most specific or
|
||||
longest match prefix will always be preferred over less specific routes. True or false?
|
||||
8. `_______` operates at the data plane and is a topology-driven proprietary switching
|
||||
mechanism that creates a forwarding table that is tied to the routing table (i.e., the
|
||||
control plane).
|
||||
9. CEF uses a `_______` to make IP destination prefix-based switching decisions.
|
||||
10. Link State routing protocols are those that use distance or hop count as its primary
|
||||
metric for determining the best forwarding path. True or false?
|
||||
|
||||
##第10天问题答案
|
||||
|
||||
1. A protocol that allows a router to learn dynamically how to reach other networks.
|
||||
2. Administrative distance.
|
||||
3. EIGRP.
|
||||
4. 120.
|
||||
5. 20.
|
||||
6. Bandwidth, cost, delay, load, reliability, and hop count.
|
||||
7. True.
|
||||
8. CEF.
|
||||
9. FIB.
|
||||
10. False.
|
||||
|
||||
##第10天的实验
|
||||
|
||||
###路由概念实验
|
||||
|
||||
采用两台直连的路由器,并测试本模块中提到的那些基本命令。RIP已不在CCNA考试中了,但其对于一个简单的实验来说,是十分简单易用的。
|
||||
|
||||
+ 给直连接口分配一个IPv4地址(10.10.10.1/24及10.10.10.2/24)
|
||||
+ 用`ping`测试直连的连通性
|
||||
+ 在两台路由器上都配置一个环回接口,并从两个不同范围为其分配上地址(11.11.11.1/32及12.12.12.2/32)
|
||||
+ 配置标准RIP并通告所有本地网络
|
||||
|
||||
<pre>
|
||||
<b>R1:</b>
|
||||
router rip
|
||||
version 2
|
||||
no auto
|
||||
network 10.10.10.0
|
||||
network 11.11.11.0
|
||||
|
||||
<b>R2:</b>
|
||||
router rip
|
||||
version 2
|
||||
no auto
|
||||
network 10.10.10.0
|
||||
network 12.12.12.0
|
||||
</pre>
|
||||
|
||||
+ 自R1向R2的环回接口进行`ping`操作,以测试连通性
|
||||
+ 执行一条`show ip route`命令,来检查经由RIP收到了那些路由
|
||||
+ 执行一条`show ip protocols`命令,来检查有配置了RIP且RIP在设备上是允许着的
|
||||
|
207
d11-Stiatic-Routing.md
Normal file
@ -0,0 +1,207 @@
|
||||
#第十一天
|
||||
|
||||
**静态路由**
|
||||
|
||||
**Static Routing**
|
||||
|
||||
##第11天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND1记诵指南
|
||||
+ 在[subnetting.org](http://subnetting.org/)上用15分钟
|
||||
|
||||
选择作一名网络管理员,就是要在网络中用到动态路由协议或坚持使用静态路由,所谓静态路由,就是手动将网络的所有路由,加入到所有路由器上去。
|
||||
|
||||
经常会有人问我(原作者)哪个路由协议是”最好的“。是没有一种方式适合于每个网络的,因为就算某家特定机构的网络需求,也会随时间变化。配置静态路由需要时间和精力,但可以省下一些网络带宽和CPU运算周期。如要加入一条新路由,就必须在所有路由器上进行手动添加。此外,如有某台路由器宕掉,静态路由就没有办法处理这个事情,所以还会往宕掉的网络发送流量(有关可靠静态路由的部分,不再CCNA大纲的范围之内)。
|
||||
|
||||
今天要学到下面这些。
|
||||
|
||||
+ 静态路由的配置
|
||||
+ 静态路由排错
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
+ 按照给出的特定路由要求,配置并验证一条静态或默认路由的路由配置
|
||||
+ 区分不同路由方式及各种路由协议
|
||||
- 静态路由对动态路由
|
||||
- 下一跳
|
||||
|
||||
如回头看一下第10天中的管理距离表,就会发现手动配置的网络比起路由协议,是首选的路由。这么做的理由就是,作为网络管理员,期望着比任何协议都要对网络有更好的了解,并比任何协议都清楚要达到什么目的。那么现在,就应该明白,在需要达到某种目的时,可以结合动态路由来使用静态路由。
|
||||
|
||||
##静态路由配置
|
||||
|
||||
**Configuring Static Routes**
|
||||
|
||||
配置一条静态路由(见下图11.1)需要以下这些命令。
|
||||
|
||||
+ `network address/prefix mask`
|
||||
+ `address` **or** `exit interface`
|
||||
+ `distance` **(optional)**
|
||||
|
||||
这里是一个这些命令使用的实例。
|
||||
|
||||
`RouterA(config)#ip route network prefix mask {address | interface} [distance]`
|
||||
|
||||

|
||||
|
||||
*图11.1 -- 静态路由示例网络*
|
||||
|
||||
要加入上面网络的一条静态路由,就要在左边的路由器上写出下面这行配置。
|
||||
|
||||
`Router(config)#ip route 192.168.1.0 255.255.255.0 172.16.1.2`
|
||||
|
||||
对静态路由,需要指定在前往目的地址的路途上,路由器需要去往的下一跳IP地址,或者也可以指定一个出去的接口。通常不需要知道下一跳地址,因为那就是ISP,或者IP地址会随时变化(见下图11.2)。如果是这样,就要使用出去的接口。
|
||||
|
||||

|
||||
|
||||
*图11.2 -- 不总是知道下一跳地址的情形*
|
||||
|
||||
`Router(config)#ip route 192.168.1.0 255.255.255.0 s0/0`
|
||||
|
||||
上面的命令行告诉路由器将目的为192.168.1.10网络的流量,从串行接口发出。而下面的命令则是告诉路由器将所有网络的所有流量,都从串行接口发出。
|
||||
|
||||
`Router(config)#ip route 0.0.0.0 0.0.0.0 s0/0`
|
||||
|
||||
上面的路由实际上就是一条默认路由(a default route)。默认路由用于引导那些未在路由表中显式列出的目的网络的数据包。
|
||||
|
||||
|
||||
###静态IPv6路由的配置
|
||||
|
||||
**Configuring Static IPv6 Routes**
|
||||
|
||||
静态IPv6路由的配置,与静态IPv4路由的配置遵循同样的逻辑。在思科IOS软件中,全局配置命令`ipv6 route [ipv6-prefix/prefix-length] [next-hop-address | interface] [distance <1-254> | multicast | tag | unicast]`用于配置静态IPv6路由。当中的一些关键字是熟悉的,因为它们也适用于IPv4静态路由,而`[multicast]`关键字则是IPv6所独有的,用于配置一条IPv6静态多播路由(an IPv6 static Multicast route)。如用到此关键字,该路由就不会进到单薄路由表(the Unicast routing table),同时也绝不会用于转发单播流量。为确保该路由绝不会安装到单播路由信息库(the Unicast RIB), 思科IOS软件将该条路由**(静态多播路由)的管理距离设置为255**。
|
||||
|
||||
相反,`[unicast]`关键字则是用于配置一条IPv6静态单播路由。如用到此关键字,该条路由就绝不会进入到多播路由表(the Multicast routing table), 并仅被用于转发单播流量。而**既没用到`[multicast]`关键字,也没用到`[unicast]`关键字时,默认情况下,该条路由机会用于单播数据包的转发,也会用于多播数据包的转发**。
|
||||
|
||||
以下的配置示例,演示了如何来配置3条静态IPv6路由。第一条路由,到子网`3FFF:1234:ABCD:0001::/64`, 会将流量从FastEthernet0/0转发出去。此路由仅用于单播流量的转发。第二条路由,到子网`3FFF:1234:ABCD:0002::/64`, 会将到那个子网的数据包从Serial0/0,使用下一跳路由器的数据链路层地址,作为IPv6的下一跳地址转发出去。本条路由仅会用于多播流量。最后,同样配置了一条指向Serial0/1作为出口接口的默认路由。此默认路由将会通过Serial0/1, 使用下一跳路由器的本地链路地址作为IPv6下一跳地址,转发那些到未知IPv6目的地址的数据包。这些路由如下面所示。
|
||||
|
||||
```
|
||||
R1(config)#ipv6 route 3FFF:1234:ABCD:0001::/64 Fa0/0 unicast
|
||||
R1(config)#ipv6 route 3FFF:1234:ABCD:0002::/64 Se0/0 FE80::2222 multicast
|
||||
R1(config)#ipv6 route ::/0 Serial0/1 FE80::3333
|
||||
```
|
||||
|
||||
依此配置,命令`show ipv6 route`可用于验证在本地路由器上应用的静态路由配置,如下所示。
|
||||
|
||||
```
|
||||
R1#show ipv6 route static
|
||||
IPv6 Routing Table - 13 entries
|
||||
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
|
||||
U - Per-user static route
|
||||
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS inter area, IS - ISIS summary
|
||||
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
|
||||
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
|
||||
S ::/0 [1/0]
|
||||
via FE80::3333, Serial0/1
|
||||
S 3FFF:1234:ABCD:1::/64 [1/0]
|
||||
via ::, FastEthernet0/0
|
||||
S 3FFF:1234:ABCD:2::/64 [1/0]
|
||||
via FE80::2222, Serial0/0
|
||||
```
|
||||
|
||||
除了使用`show ipv6 route`命令外,命令`show ipv6 static [prefix] [detail]`也可一用来对所有或仅是某条特定静态路由的细节信息进行查看。下面输出演示了如何使用这个命令。
|
||||
|
||||
```
|
||||
R1#show ipv6 static 3FFF:1234:ABCD:1::/64 detail
|
||||
IPv6 static routes
|
||||
Code: * - installed in RIB
|
||||
* 3FFF:1234:ABCD:1::/64 via interface FastEthernet0/0, distance 1
|
||||
```
|
||||
|
||||
##静态路由排错
|
||||
|
||||
**Troubleshooting Satic Routes**
|
||||
|
||||
排错总会涉及到某个配置问题(如果不是接口宕掉的话)。如流量没有到达目的地,就可以使用命令`traceroute`测试该路由。
|
||||
|
||||
> **注意** -- 今天内容很少,所以请前往第12天吧,因为那将是个非常充实的主题。
|
||||
|
||||
##第11天问题
|
||||
|
||||
1. Name the three parameters needed to configure a static route.
|
||||
2. What is the command used to configure a static route?
|
||||
3. What is the command used to configure a default static route?
|
||||
4. What is the command used to configure an IPv6 static route?
|
||||
5. What is the command used to view IPv6 static routes?
|
||||
|
||||
##第11天答案
|
||||
|
||||
1. Network address, subnet mask (prefix length), and next-hop address or exit interface.
|
||||
2. The `ip route` command.
|
||||
3. The `ip route 0.0.0.0 0.0.0.0` command.
|
||||
4. The `ipv6 route` command.
|
||||
5. The `show ipv6 route static` command.
|
||||
|
||||
##第11天实验
|
||||
|
||||
###静态路由实验
|
||||
|
||||
**Static Routes Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何以下一跳地址和出口接口方式,将静态路由指定给一台路由器。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 按照上面的拓扑图分配IP地址。Router A可以是192.168.1.1/30, Router B可以是.2。
|
||||
2. 通过串行链路进行ping操作,以确保该链路是工作的。
|
||||
3. 在Router A上指定一条静态路由,将到10.1.1.0/10网络的所有流量,从串行接口发送出去。当然要使用你自己的串行端口编号;不要只是拷贝我的配置,你的接口有不同编号!
|
||||
|
||||
<pre>
|
||||
RouterA(config)#ip route 10.0.0.0 255.192.0.0 Serial0/1/0
|
||||
RouterA(config)#exit
|
||||
RouterA#ping 10.1.1.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 18/28/32 ms
|
||||
RouterA#
|
||||
RouterA#show ip route
|
||||
Codes: C - Connected, S - Static, I - IGRP, R - RIP, M - Mobile, B - BGP
|
||||
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
|
||||
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
|
||||
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
|
||||
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
|
||||
* - Candidate default, U - Per-user static route, o - ODR
|
||||
P - Periodic downloaded static route
|
||||
Gateway of last resort is not set
|
||||
10.0.0.0/10 is subnetted, 1 subnets
|
||||
S <b>10.0.0.0</b> is directly connected, Serial0/1/0
|
||||
172.16.0.0/24 is subnetted, 1 subnets
|
||||
C 172.16.1.0 is directly connected, Loopback0
|
||||
192.168.1.0/30 is subnetted, 1 subnets
|
||||
C 192.168.1.0 is directly connected, Serial0/1/0
|
||||
RouterA#
|
||||
RouterA#show ip route 10.1.1.1
|
||||
Routing entry for 10.0.0.0/10
|
||||
Known via “static”, distance 1, metric 0 (connected)
|
||||
Routing Descriptor Blocks:
|
||||
<b>* directly connected, via Serial0/1/0</b>
|
||||
Route metric is 0, traffic share count is 1
|
||||
RouterA#
|
||||
</pre>
|
||||
|
||||
4. 在Router B上配置一条静态路由,将到172.16.1.0/24网络的所有流量,发到下一跳地址192.168.1.1。
|
||||
|
||||
<pre>
|
||||
RouterB(config)#ip route 172.16.1.0 255.255.255.0 192.168.1.1
|
||||
RouterB(config)#exit
|
||||
RouterB#ping 172.16.1.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds:
|
||||
!!!!!
|
||||
RouterB#show ip route 172.16.1.1
|
||||
Routing entry for 172.16.1.0/24
|
||||
Known via “static”, distance 1, metric 0
|
||||
Routing Descriptor Blocks:
|
||||
<b>* 192.168.1.1</b>
|
||||
Route metric is 0, traffic share count is 1
|
||||
RouterB#
|
||||
</pre>
|
506
d12-OSPF-Basics.md
Normal file
@ -0,0 +1,506 @@
|
||||
#第12天
|
||||
|
||||
**OSPF基础知识**
|
||||
|
||||
**OSPF Basics**
|
||||
|
||||
##今天的任务
|
||||
|
||||
+ 阅读今天的理论课文
|
||||
+ 复习昨天的理论课文
|
||||
|
||||
先前版本的CCNA考试只要求对OSPF有基本了解。**现今版本要求对OSPFv2、v3及多区域OSPF都要有更为深入的掌握**。OSPF考点在ICND1和ICND2中都有,ICND2中增加了难度。
|
||||
|
||||
今天将会学到下面这些内容。
|
||||
|
||||
+ 链路状态要点,Link State fundamentals
|
||||
+ OSPF组网类型,OSPF network types
|
||||
+ OSPF的配置,Configuring OSPF
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
+ OSPF(单区域)的配置和验证
|
||||
- 单区域的好处, benefit of single area
|
||||
- OSPFv2的配置, configure OSPFv2
|
||||
- 路由器ID,router ID
|
||||
- 被动接口,passive interface
|
||||
|
||||
##开放最短路径优先
|
||||
|
||||
**Open Shortest Path First**
|
||||
|
||||
开放最短路径优先,是**一个开放标准的链路状态路由协议**(an open-standard Link State routing protocol)。链路状态路由协议对链路状态进行通告。在一台链路状态路由器开始在某条网络链路上运行时,与那个逻辑网络有关的信息就被添加到路由器的**本地**链路状态数据库(Link State Database, LSDB)中。该本地路由器此时在其运作链路上,发出Hello数据包,以确定是否有其它链路状态路由器也在其各自接口上运行着链路状态路由协议。**OSPF直接运行在IP协议上,使用IP的89号协议**。
|
||||
|
||||
## OSPF概述及基础知识
|
||||
|
||||
**OSPF Overview and Fundamentals**
|
||||
|
||||
人们为OSPF撰写了多个RFCs。在本小节,将通过一些有关OSPF最常见的几个RFCs,来了解一下OSPF的历史。OSPF工作组成立于1987年,自成立以后,该工作组发布了为数众多的RFCs。下面列出了OSPF有关的一些最常见的RFCs。
|
||||
|
||||
+ RFC 1131 -- OSPF规格,OSPF Specification
|
||||
+ RFC 1584 -- OSPF的多播扩展, Multicast Extensions to OSPF
|
||||
+ RFC 1587 -- OSPF的NSSA选项,the OSPF NSSA Option
|
||||
+ RFC 1850 -- OSPF版本2的管理信息库,OSPF Version 2 Management Informaiton Base
|
||||
+ RFC 2328 -- OSPF版本2
|
||||
+ RFC 2740 -- OSPF版本3
|
||||
|
||||
RFC 1131对OSPF的第一次迭代(the first iteration of OSPF)进行了说明, 而应用在明确该协议是否工作的早期测试中。
|
||||
|
||||
RFC 1584为OSPF提供了对IP多播流量的支持扩展。这通常被称为多播OSPF(Multicast OSPF, MOSPF)。但该标准不常用到,且最重要的是思科不支持该标准。
|
||||
|
||||
RFC 1587 对一种OSPF次末梢区域(Not-So-Stubby Area, NSSA)的运作方式进行了说明。NSSA允许通过一台自治系统边界路由器(an Autonomous System Boundary Router, ASBR), 采用一条NSSA的外部LSA, 实现外部路由知识的注入(the injection of external routing knowledge)。在本模块的稍后会对不同的NSSAs进行说明。
|
||||
|
||||
RFC 1850实现了使用简单网络管理协议(Simple Network Management Protocol, SNMP)对OSPF的网络管理。在网络管理系统中,SNMP用于监测接入网络设备中需要留心的一些情况。本标准的应用超出了CCNA考试要求范围,不会在本书中进行说明。
|
||||
|
||||
RFC 2328详述了OSPF版本2的最新更新,而OSPF版本2正是现今在用的默认版本。OSPF版本2最初是在RFC 1247中进行说明的,该RFC解决了OSPF版本1初次发布中发现的一系列问题,并对该协议进行了修正,实现了未来修改不致产生出向后兼容问题。正因为如此,OSPF版本2与版本1是不兼容的。
|
||||
|
||||
最后,RFC 2740说明了为支持IPv6而对OSPF做出的修改(也就是版本3)。可以假定本模块中所有对OSPF一词的使用,都是指的OSPF版本2。
|
||||
|
||||
###链路状态基础
|
||||
|
||||
**Link State Fundamentals**
|
||||
|
||||
当对某条特定链路(也就是接口)开启链路状态路由协议时,与那个网络有关的信息就被加入到本地LSDB中。该本地路由器此时就往其运作的各链路上发送Hello数据包,以确定有否其它**链路状态路由器**也在接口上运行着。**Hello数据包用于邻居发现并在邻居路由器之间维护邻接关系**。本模块稍后部分会详细说明这些消息。
|
||||
|
||||
在找到一台邻居路由器后, 假定两台路由器在同一子网且位于同一区域,同时诸如认证方法及计时器等其它参数都是一致的(identical),那么本地路由器就尝试建立一个邻接关系(adjacency)。此邻接关系令到两台路由器将**摘要的LSDB信息**通告给对方。这种信息交换,交换的不是实在的详细数据库信息,而是数据的摘要。
|
||||
|
||||
各台路由器参照其本地LSDB,对收到的摘要信息做出评估,以确定其有着最新信息。如邻接关系的一侧认识到它需要一个更新,路由器就从邻接路由器请求新信息。而来自邻居路由器的更新包含了LSDB中的具体数据。此交换过程持续下去,直到两台路由器拥有同样的LSDB。OSPF用到不同类型的消息,来交换数据库信息,以确保所有路由器都有着网络的统一视图。这些不同的数据包类型将在本模块稍后进行详细说明。
|
||||
|
||||
跟着数据库交换,SPF算法运行起来,创建出到某区域中, 或在网络主干中所有主机的最短路径树(a shotest path tree to all hosts in an area or in the network backbone), SPF算法将执行运算的路由器,作为该树的根。在第10天中,对SPF算法进行了简要介绍。
|
||||
|
||||
###OSPF基础
|
||||
|
||||
**OSPF Fundamentals**
|
||||
|
||||
与EIGRP能够支持多个网络层协议不同,OSPF只能支持IP,也就是IPv4和IPv6。和EIGRP相同的是,OSPF支持VLSM、认证及在诸如以太网这样的多路访问(Multi-Access)网络上,于发送和接收更新时,利用IP多播技术(IP Multicast)。
|
||||
|
||||
OSPF是一种层次化的路由协议,将网络以逻辑方式,分为称作区域的众多子域。这种逻辑分段用于限制链路状态通告在某个OSPF域中扩散的范围(OSPF is a hierarchical routing protocol that logically divides the network into subdomains referred to as areas. This logical segmentation is used to limit the scope of Link State Advertisements(LSAs))。LSAs是由运行着OSPF的路由器发出的特殊类型数据包。在区域内和区域间用到不同类型的LSAs。通过限制一些类型的LSAs在区域间传播,OSPF的层次化实现有效地减少了OSPF网络中路由协议流量的数量。
|
||||
|
||||
> **注意:** OSPF的这些LSAs会在第39天详细说明。
|
||||
|
||||
在多区域OSPF网络中,必须指定一个区域作为**骨干区域, 或者叫0号区域**(the backbone area, or Area 0)。该OSPF骨干就是此OSPF网络的逻辑中心。**其它非骨干区域都必须物理连接到这个骨干区域**。但是,在非骨干区域和骨干区域之间有着一条物理连接,并非总是可能或可行的,所以OSPF标准允许使用到骨干区域的虚拟连接。这些虚拟连接也就是常说的虚拟链路,但此概念是不包括在当前的CCNA大纲中的。
|
||||
|
||||
位处区域中的路由器,都存储着其所在区域的详细拓扑信息。而在各区域中,一台或多台的路由器,又被作为**区域边界路由器**(Area Border Routers, ABRs),区域边界路由器通过在不同区域之间通告汇总路由信息,而促进区域间路由(facilitate inter-area routing)。本功能实现OSPF网络中的以下几个目标。
|
||||
|
||||
+ 在OSPF域层面减小LSAs的扩散范围
|
||||
+ 在区域之间隐藏详细拓扑信息
|
||||
+ OSPF域中端到端连通性(end-to-end connectivity)的实现
|
||||
+ 在OSPF域内部创建逻辑边界
|
||||
|
||||
> **注意:** 尽管ICND1大纲仅涉及到单区域OSPF(single-area OSPF), 但为把大部分理论纳入讨论背景,有必要说一下多区域OSPF(multi-area OSPF)。
|
||||
|
||||
OSPF骨干网络自ABRs接收到汇总路由信息。该路由信息被散布到OSPF网络中所有其它非骨干区域中去。在网络拓扑发生变化时,变化信息散布到整个的OSPF域中去,令到所有区域中的所有路由器都有着网络的统一视图。下图12.1演示的网络拓扑,就是一个多区域OSPF部署的示例。
|
||||
|
||||

|
||||
|
||||
*图12.1 -- 一个多区域OSPF网络*
|
||||
|
||||
图12.1演示了一个基本的多区域OSPF网络。1、2号区域连接到0号区域的OSPF骨干上。1号区域中,路由器R1、R2和R3交换着区域内(intra-area)路由信息,并维护着那个区域的详细拓扑。R3作为ABR,生成一条区域间汇总路由(an inter-area summary route), 并将该路由通告给OSPF骨干。
|
||||
|
||||
R4是2号区域的ABR,从0号区域接收到R3通告出的汇总信息,并将其扩散到其邻接区域。这样做就令到R5和R6知悉本地区域外、在该OSPF域内的那些路由了。同样概念也适用于2号区域内的路由信息。
|
||||
|
||||
总的来讲,众多ABRs都维护着所有其各自连接区域的LSDB信息。而各个区域中的所有路由器,都有着属于其特定区域的详细拓扑信息。这些区域内路由器交换着区域内的路由信息。由ABRs将所连接区域的汇总信息通告给其它OSPF区域,以实现域内各子域(区域)间路由。
|
||||
|
||||
> **注意:** 本书后面会详细说明OSPF ABRs及其它OSPF路由器类型。
|
||||
|
||||
###组网类型
|
||||
|
||||
**Network Types**
|
||||
|
||||
OSPF对不同传输介质,采用不同默认组网类型,有下面这些组网类型。
|
||||
|
||||
+ 非广播组网(在多点非广播多路复用传输介质上,也就是FR和ATM,默认采用此种组网类型), Non-Broadcast(default on Multipoint Non-Broadcast Multi-Access(FR and ATM))
|
||||
+ 点对点组网(在HDLC、PPP、FR及ATM的P2P子接口,以及ISDN上,默认采用此种组网类型), Point-to-Point(default on HDLC, PPP, P2P subinterface on FR and ATM, and ISDN)
|
||||
+ 广播组网(在以太网和令牌环上,默认采用此种组网类型), Broadcast(default on Ethernet and Token Ring)
|
||||
+ 点对多点组网,Point-to-Multipoint
|
||||
+ 环回组网(默认在环回接口上采用此种组网类型), Loopback(default on Loopback interfaces)
|
||||
|
||||
**非广播网络是指那些没有原生的广播或多播流量支持的网络类型**。非广播类型网络的最常见实例就是帧中继网络。非广播类型网络**需要额外配置,以实现广播和多播支持**。在这种网络上,OSPF选举出一台指定路由器(a Designate Router, DR), 及/或一台备用指定路由器(a Backup Designated Router, BDR)。在本书后面会对这两台路由器进行说明。
|
||||
|
||||
在思科IOS软件中,非广播类型网络上开启OSPF的路由器,默认每30秒发出Hello数据包。若4个Hello间隔,也就是120秒中都没有收到Hello数据包,那么该邻居路由器就被认为”死了“。下面的输出演示了在一个帧中继串行接口上`show ip ospf interface`命令的输出。
|
||||
|
||||
<pre>
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, <b>Network Type NON_BROADCAST,</b> Cost: 64
|
||||
Transmit Delay is 1 sec, <b>State DR</b>, Priority 1
|
||||
<b>Designated Router (ID) 2.2.2.2, Interface address 150.1.1.2
|
||||
Backup Designated Router (ID) 1.1.1.1, Interface address 150.1.1.1
|
||||
Timer intervals configured, Hello 30, Dead 120,</b> Wait 120, Retransmit 5
|
||||
oob-resync timeout 120
|
||||
Hello due in 00:00:00
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 2, maximum is 2
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
<b>Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1 (Backup Designated Router)</b>
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
</pre>
|
||||
|
||||
一条点对点连接(a Point-to-Point(P2P) connection), 就是一条简单的两个端结点之间的连接。P2P连接的实例包括采用HDLC及PPP封装的物理WAN接口,以及FR和ATM的点对点子接口。在OSPF点对点组网类型中,不会选举DR和BDR。在P2P类型网络上,OSPF每10秒发出Hello数据包。在这些网络上,”死亡“间隔是Hello间隔的4倍,也就是40秒。下面的输出演示了在一条P2P链路上的`show ip ospf interface`命令的输出。
|
||||
|
||||
<pre>
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, <b>Network Type POINT_TO_POINT,</b> Cost: 64
|
||||
Transmit Delay is 1 sec, <b>State POINT_TO_POINT
|
||||
Timer intervals configured, Hello 10, Dead 40, Wait 40,</b> Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:03
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 1
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
<b>Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1</b>
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
</pre>
|
||||
|
||||
广播类型网络,是指那些原生支持广播和多播流量的网络,最常见例子就是以太网了。就如同在非广播网络中一样,OSPF也会在广播网络上选举一台DR及/或BDR。默认情况下,OSPF每隔10秒发出Hello数据包,而如在4倍Hello间隔中没有收到Hello数据包,就宣告邻居”死亡“。下面的输出演示了在一个FastEthernet接口上‘show ip ospf interface’命令的输出。
|
||||
|
||||
<pre>
|
||||
R2#show ip ospf interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
Internet Address 192.168.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, <b>Network Type BROADCAST</b>, Cost: 64
|
||||
Transmit Delay is 1 sec, <b>State BDR</b>, Priority 1
|
||||
<b>Designated Router (ID) 192.168.1.3, Interface address 192.168.1.3
|
||||
Backup Designated Router (ID) 2.2.2.2, Interface address 192.168.1.2
|
||||
Timer intervals configured, Hello 10, Dead 40, Wait 40,</b> Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:04
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 1/1, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 1
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
<b>Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 192.168.1.3 (Designated Router)</b>
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
</pre>
|
||||
|
||||
点对多点是一种非默认OSPF组网(a non-default OSPF network type)。也就是说,此种组网类型必须使用接口配置命令`ip ospf network point-to-point-multicast [non-broadcast]`手动进行配置。默认情况下,该命令默认应用于一个广播型点对多点类型网络(this command defaults to a Broadcast Point-to-Point Multipoint network type)。该默认组网类型允许OSPF采用多播数据包来动态地发现其邻居路由器。此外在多播型点对多点网络类型上,不进行DR/BDR选举。
|
||||
|
||||
关键字`[non-broadcast]`将该点对多点网络配置为非广播点对多点网络。这样做就要求静态的OSPF邻居配置,因为这样做后OSPF不会使用多播来动态地发现其邻居路由器。此外,这种网络类型不需要为指定网段进行DR及/或BDR选举。此种组网的主要用途,即允许将接收自所有邻居路由器的路由的邻居路由器开销,分配到邻居路由器,而不是使用使用分配给接口的开销作为邻居开销(the primary use of this network type is to allow neighbor costs to be assigned to neighbors instead of using the interface-assigned cost for routes recieived from all neighbors)。
|
||||
|
||||
点对多点组网类型,典型地用于部分全通辐射状非广播多路访问(partial-mesh hub-and-spoke Non-Broadcast Multi-Access(NBMA))网络。尽管如此,此种组网类型也可指定给诸如广播多路访问网络(比如以太网)等的其它类型网络。默认情况下,在点对多点网络上,OSPF每30秒发出一个Hello数据包。默认死亡间隔是Hello间隔的4倍,也就是120秒。
|
||||
|
||||
下面的输出演示了在一个经手动配置为点对多点网络的帧中继串行接口上的`show ip ospf interface`命令的输出。
|
||||
|
||||
<pre>
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, <b>Network Type POINT_TO_MULTIPOINT</b>, Cost: 64
|
||||
Transmit Delay is 1 sec, <b>State POINT_TO_MULTIPOINT</b>
|
||||
<b>Timer intervals configured, Hello 30, Dead 120,</b> Wait 120, Retransmit 5
|
||||
oob-resync timeout 120
|
||||
Hello due in 00:00:04
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 2
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
<b>Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1</b>
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
</pre>
|
||||
|
||||
OSPF要求链路上两台路由器组网类型一致(一致的意思是两台路由器要么都进行选举要么都不进行选举)的主要原因在于计时器的数值。就像上面各个输出中演示的那样,不同组网类型采用了不同Hello数据包发送及死亡计时器间隔。为成功建立一个OSPF邻接关系,在两台路由器上这些数值必须匹配。
|
||||
|
||||
思科IOS软件允许通过使用接口配置命令`ip ospf hello-interval <1-65535>`及`ip ospf dead-interval [<1-65535>|minimal]`,对默认OSPF Hello数据包及死亡计时器进行修改。`ip ospf hell0-interval <1-65535>`命令用于指定Hell0间隔的秒数。在执行该命令后,软件会自动将死亡间隔配置为所配置的Hello包间隔的4倍。比如,假定某台路由器做了如下配置。
|
||||
|
||||
```
|
||||
R2(config)#interface Serial0/0
|
||||
R2(config-if)#ip ospf hello-interval 1
|
||||
R2(config-if)#exit
|
||||
```
|
||||
|
||||
通过在上面的R2上将Hello数据包间隔设置为1, 思科IOS软件就会自动的将默认死亡计时器调整为Hello间隔的4倍,就是4秒。下面的输出对此进行了演示。
|
||||
|
||||
<pre>
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 10.0.2.4/24, Area 2
|
||||
Process ID 4, Router ID 4.4.4.4, Network Type POINT_TO_POINT, Cost: 64
|
||||
Transmit Delay is 1 sec, State POINT_TO_POINT
|
||||
<b>Timer intervals configured, Hello 1, Dead 4,</b> Wait 4, Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:00
|
||||
...
|
||||
[Truncated Output]
|
||||
</pre>
|
||||
|
||||
##配置OSPF
|
||||
|
||||
**OSPF Configuration**
|
||||
|
||||
本节对OSPF配置基础进行说明。
|
||||
|
||||
###在思科IOS软件中开启OSPF
|
||||
|
||||
**Enabling OSPF in Cisco IOS Software**
|
||||
|
||||
在思科IOS软件中,通过使用全局配置命令`router ospf [process id]`开启OSPF。**关键字`[process id]`是本地有效的**(locally sinificant),邻接关系的建立无需网络中所有路由器的进程号一致。运用本地有效的进程号,允许在同一台路由器上配置多个OSPF实例。
|
||||
|
||||
OSPF进程号是一个1与65535之间的整数。每个OSPF进程都维护着其独立链路状态数据库(LSDB);但是,所有路由都放进的是同一IP路由表。也就是说,对配置在路由器上的各个单独OSPF进程,并没有各自唯一的IP路由表。
|
||||
|
||||
在思科IOS软件早期版本中,如路由器上没有至少一个的接口配置了有效IP地址且处于up/up状态,就无法开启OSPF。此限制在当前版本思科IOS软件中去除了。假如路由器没有接口配置了有效IP地址且处于up/up状态,那么思科IOS将创建出一个接近数据库(a Proximity Database, PDB)并允许创建出进程。但是,要记住除非选定路由器ID,该进程就是非活动的进程,而**路由器ID的选定**,可通过下面两种方式完成。
|
||||
|
||||
+ 在某个接口上配置一个有效IP地址,并将该接口开启
|
||||
+ 使用命令`router-id`为该路由器手动配置一个ID(见下)
|
||||
|
||||
作为一个例子,看看下面的所有接口都关闭的路由器。
|
||||
|
||||
```
|
||||
R3#show ip interface brief
|
||||
Interface IP-Address OK? Method Status Protocol
|
||||
FastEthernet0/0 unassigned YES manual administratively down down
|
||||
Serial0/0 unassigned YES NVRAM administratively down down
|
||||
Serial0/1 unassigned YES unset administratively down down
|
||||
```
|
||||
|
||||
接着,使用全局配置命令`router ospf [process id]`在该路由器上开启了OSPF, 如下面输出所示。
|
||||
|
||||
```
|
||||
R3(config)#router ospf 1
|
||||
R3(config-router)#exit
|
||||
```
|
||||
|
||||
基于此配置,思科IOS软件分配给该进程一个默认`0.0.0.0`的路由器ID,如下面`show ip protocols`命令的输出所示。
|
||||
|
||||
<pre>
|
||||
R3#show ip protocols
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
<b>Router ID 0.0.0.0</b>
|
||||
Number of areas in this router is 0. 0 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
Reference bandwidth unit is 100 mbps
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
Distance: (default is 110)
|
||||
```
|
||||
</pre>
|
||||
|
||||
但是,命令`show ip ospf [process id]`揭示出该进程实际上并不是活动的,且表明需要配置一个路由器ID, 其输出如下面所示。
|
||||
|
||||
```
|
||||
R3#show ip ospf 1
|
||||
%OSPF: Router process 1 is not running, please configure a router-id
|
||||
```
|
||||
|
||||
###开启接口或网络的OSPF路由
|
||||
|
||||
**Enabling OSPF Routing for Interfaces or Networks**
|
||||
|
||||
在开启OSPF后,就可以执行两个操作,来为路由器上一个或更多的网络或接口开启OSPF路由。这两个操作如下。
|
||||
|
||||
+ 使用路由器配置命令(router configuration command)`[network] [wildcard] area [area id]`
|
||||
+ 使用接口配置命令`ip ospf [process id] area [area id]`
|
||||
|
||||
与EIGRP不同,OSPF强制使用反掩码且必须配置反掩码; 但与在EIGRP中的情况一样,反掩码提供了同样的功能,也就是匹配指定范围中的接口(unlike EIGRP, the wildcard is mandatory in OSPF and must be configured; however, as is the case with EIGRP, it serves the same function in that it matches interfaces within the range specified)。比如,语句`network 10.0.0.0 0.255.255.255 area 0`,就会对10.0.0.1/30、10.5.5.1/24, 甚至10.10.10.1/25这样的IP地址和子网掩码组合的接口,开启OSPF路由。基于该OSPF网络配置,这些接口都会被分配到0号区域。
|
||||
|
||||
> **注意:** OSPF反掩码可以与传统子网掩码同样格式敲入,比如`network 10.0.0.0 255.0.0.0 area 0`。在这种情况下,思科IOS软件就会将子网掩码翻转,将得到的反掩码输入到运行配置(the running configuration)。另外要记住**OSPF也支持使用全1s和全0s反掩码,来对某个指定接口开启OSPF**。这样的配置在某个特定接口上开启OSPF,但路由器通告配置在该接口自身的实际子网掩码(this configuration enables OSPF on a paricular interface but the router advertises the actual subnet mask configured on the interface itself)。
|
||||
|
||||
在执行了`network [network] [wildcast] area [area id]`命令后,路由器就在与指定网络和反掩码组合匹配的那些接口上发出Hello数据包,来尝试发现邻居路由器。接着在OSPF数据库交换期间,将连接子网通告给一台或更多的邻居路由器,最终,它们将所有子网信息都被加入到这些OSPF路由器的OSPF链路状态数据库(OSPF LSDB)中。
|
||||
|
||||
在命令`network [network] [wildcard] area [area id]`之后,路由器又对最具体条目做出匹配,以决定将接口要分配给的区域。作为实例,想想下面这些OSPF网络语句。
|
||||
|
||||
+ 第一条网络配置语句:`network 10.0.0.0 0.255.255.255 area 0`
|
||||
+ 第二条:`network 10.1.0.0 0.0.255.255 area 1`
|
||||
+ 第三条:`network 10.1.1.0 0.0.0.255 area 2`
|
||||
+ 第四条:`network 10.1.1.1 0.0.0.0 area 3`
|
||||
+ 第五条:`network 0.0.0.0 0.0.0.0 area 4`
|
||||
|
||||
按照路由器上的此种配置,同时路由器上又配置了如下表12.1中展示的这些环回接口。
|
||||
|
||||
<table>
|
||||
<tr><th>接口</th><th>IP地址/掩码</th></tr>
|
||||
<tr><td>Loopback 0</td><td>10.0.0.1/32</td></tr>
|
||||
<tr><td>Loopback 1</td><td>10.0.1.1/32</td></tr>
|
||||
<tr><td>Loopback 2</td><td>10.1.0.1/32</td></tr>
|
||||
<tr><td>Loopback 3</td><td>10.1.1.1/32</td></tr>
|
||||
<tr><td>Loopback 4</td><td>10.2.0.1/32</td></tr>
|
||||
</table>
|
||||
|
||||
就像前面指出的那样,在执行了`network [network] [wildcard] area [area id]`命令后,路由器匹配最具体的网络条目(最小的网络),来决定该接口应分配到的区域。对于在路由器上的网络配置语句及已配置的接口,命令`show ip ospf interface brief`会显示出这些接口都分配给了以下OSPF区域。
|
||||
|
||||
```
|
||||
R1#show ip ospf interface brief
|
||||
Interface PID Area IP Address/Mask Cost State Nbrs F/C
|
||||
Lo4 1 0 10.2.0.1/32 1 LOOP 0/0
|
||||
Lo1 1 0 10.0.1.1/32 1 LOOP 0/0
|
||||
Lo0 1 0 10.0.0.1/32 1 LOOP 0/0
|
||||
Lo2 1 1 10.1.0.1/32 1 LOOP 0/0
|
||||
Lo3 1 3 10.1.1.1/32 1 LOOP 0/0
|
||||
```
|
||||
|
||||
> **注意:** 在运行配置(the running configuration)中,无需考虑网络语句敲入顺序,路由器的`show running-config`输出中最具体的网络条目,始终列在前面。
|
||||
|
||||
**接口配置命令`ip ospf [process id] area [area id]`**令到无需使用**路由器配置命令`network [network] [wildcard] area [area id]`**。该命令对某个指定接口开启OSPF路由,同时将该接口分配给指定OSPF区域。这两个命令完成同样的基本功能,且可互换使用。
|
||||
|
||||
此外,比如有两台路由器是背靠背连接(connected back-to-back),一台使用接口配置命令`ip ospf [process id] area [area id]`进行了配置,而其邻居路由器使用路由器配置命令`network [network] [wildcard] area [area id]`进行了配置,假设两个区域IDs相同,那么两台路由器将成功建立OSPF邻接关系。
|
||||
|
||||
###OSPF区域
|
||||
|
||||
**OSPF Areas**
|
||||
|
||||
**OSPF区域号既可以配置为一个0到4294967295之间的整数,也可使用点分十进制表示法**(也就是采用IP地址格式)。与OSPF进程号不同,**为建立邻接关系,OSPF区域号必须匹配**。最常见OSPF区域配置类型为使用一个整数来指定OSPF区域。确保对支持的两种区域配置方式都要熟悉。
|
||||
|
||||
###OSPF路由器ID
|
||||
|
||||
**OSPF Router ID**
|
||||
|
||||
为令到OSPF在某个网络上运行起来,所有路由器都必须有个唯一身份编号(a unique identifying number),且在OSPF环境下要用到路由器ID。
|
||||
|
||||
在决定OSPF路由器ID时,思科IOS选用所配置环回接口中最高的IP地址。如未曾配置环回接口,软件就会使用所有配置的物理接口中最高的IP地址,来作为0SPF路由器ID。思科IOS软件同样允许管理员使用**路由器配置命令`router-id [address]`**, 来手动指定路由器ID。
|
||||
|
||||
环回接口极为有用,特别是在测试当中,因为它们无需硬件且是逻辑的,因此绝不会宕掉。
|
||||
|
||||
在下面的路由器上,给Loopback0配置了IP地址1.1.1.1/32, 给F0/0配置了2.2.2.2/24。接着在路由器上给所有接口配置了OSPF。
|
||||
|
||||
<pre>
|
||||
Router(config-if)#router ospf 1
|
||||
Router(config-router)#net 0.0.0.0 255.255.255.255 area 0
|
||||
Router(config-router)#end
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
Router#show ip protocols
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
<b>Router ID 1.1.1.1</b>
|
||||
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
0.0.0.0 255.255.255.255 area 0
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
1.1.1.1 110 00:00:14
|
||||
Distance: (default is 110)
|
||||
</pre>
|
||||
|
||||
|
||||
但又想要将路由器ID硬编码(hard code)为`10.10.10.1`。那么可通过再配置一个使用该IP地址的环回接口,或简单地将这个IP地址加在OSPF路由器ID处。**为令到改变生效,必须重启路由器或在路由器上清除该IP OSPF进程**(清除现有数据库)。
|
||||
|
||||
<pre>
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
Router(config)#router ospf 1
|
||||
Router(config-router)#router-id 10.10.10.1
|
||||
Router(config-router)#Reload or use “clear ip ospf process” command, for this to take effect
|
||||
Router(config-router)#end
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
Router#clear ip ospf process
|
||||
Reset ALL OSPF processes? [no]: yes
|
||||
Router#show ip prot
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
<b>Router ID 10.10.10.1</b>
|
||||
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
0.0.0.0 255.255.255.255 area 0
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
1.1.1.1 110 00:03:15
|
||||
Distance: (default is 110)
|
||||
</pre>
|
||||
|
||||
到第39天,**DR和BDR选举时,就将看到这个路由器ID有着特别的重要性**。
|
||||
|
||||
###OSPF被动接口
|
||||
|
||||
**OSPF Passive Interfaces**
|
||||
|
||||
被动接口可被描述成在其上没有路由更新发出的接口。在思科IOS软件中,通过使用**路由器配置命令`passive-interface [name]`**, 将某接口配置为被动接口。如路由器上有多个接口需要配置为被动接口,就应使用**`passive-interface default`这个路由器配置命令**。此命令将路由器上那些位处所配置网络范围内的所有接口,都配置为被动模式。而那些需要允许在其上形成邻接关系或邻居关系的接口,就应使用路由器配置命令`no passive-interface [name]`对其进行配置。
|
||||
|
||||
被动接口配置在OSPF和EIGRP中的工作方式是一样的,也就是一旦某接口被标记为被动接口,经由该接口形成的所有邻居关系都会被拆除,同时再也不会通过该接口发送或接收Hello数据包了。不过,根据路由器上所配置的网络配置语句,该接口仍然会继续受通告。
|
||||
|
||||
<pre>
|
||||
Router(config)#router ospf 10
|
||||
Router(config-router)#passive-interface f0/0
|
||||
Router#show ip ospf int f0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
Internet address is 192.168.1.1/24, Area 0
|
||||
Process ID 10,Router ID 172.16.1.1,Network Type BROADCAST, Cost: 1
|
||||
Transmit Delay is 1 sec, State WAITING, Priority 1
|
||||
No designated router on this network
|
||||
No backup designated router on this network
|
||||
Timer intervals configured,Hello 10, Dead 40, Wait 40,Retransmit 5
|
||||
<b>No Hellos (Passive interface)</b>
|
||||
</pre>
|
||||
|
||||
##第12天问题
|
||||
|
||||
1. What protocol does OSPF use?
|
||||
2. How does OSPF determine whether other Link State routers are operating on the interfaces as well?
|
||||
3. When a `_______` routing protocol is enabled for a particular link, information associated with that network is added to the local Link State Database (LSDB).
|
||||
4. OSPF utilises IP Multicast when sending and receiving updates on Multi-Access networks, such as Ethernet. True or false?
|
||||
5. OSPF is a hierarchical routing protocol that logically divides the network into subdomains referred to as `_______`.
|
||||
6. Name at least 4 OSPF network types.
|
||||
7. Name the command used to enter OSPF configuration mode.
|
||||
8. When determining the OSPF router ID, Cisco IOS selects the lowest IP address of the configured Loopback interfaces. True or false?
|
||||
9. What command can you use to assign an interface to OSPF Area 2 (interface level command)?
|
||||
10. `_______` can be described as interfaces over which no routing updates are sent.
|
||||
|
||||
##第12天答案
|
||||
|
||||
1. IP number 89.
|
||||
2. By sending Hello packets.
|
||||
3. Link State.
|
||||
4. True.
|
||||
5. Areas.
|
||||
6. Non-Broadcast, Point-to-Point, Broadcast, Point-to-Multipoint, Point-to-Multipoint Non-Broadcast, and Loopback.
|
||||
7. The `router ospf <id>` command.
|
||||
8. False.
|
||||
9. The `ip ospf <id> area 2`
|
||||
10. Passive.
|
||||
|
||||
##第12天实验
|
||||
|
||||
###OSPF基础实验
|
||||
|
||||
沿用第10天的实验场景(两台直接连接的路由器,各自其上的环回接口),但取代配置RIP及对物理和环回接口进行通告的是,使用OSPF 0号区域实现(but instead of configuring RIP and advertising the physical and Loopback interfaces, do this using OSPF Area 0)。
|
||||
|
||||
+ 分配一个IPv4地址给直接连接的接口(10.10.10.1/24及10.10.10.2/24)
|
||||
+ 运用ping操作,测试直接连通性
|
||||
+ 分别在两台路由器上配置一个环回接口,并自两个不同范围为其分配上地址(11.11.11.1/32及12.12.12.2/32)
|
||||
+ 配置上标准OSPF 1号进程,并在0号区域中通告所有本地网络。同时为两台设备配置一个路由器ID。
|
||||
|
||||
**R1:**
|
||||
|
||||
```
|
||||
router ospf 1
|
||||
router-id 1.1.1.1
|
||||
network 10.10.10.0 0.0.0.255 area 0
|
||||
network 11.11.11.1 0.0.0.0 area 0
|
||||
```
|
||||
|
||||
**R2:**
|
||||
|
||||
```
|
||||
router ospf 1
|
||||
router-id 2.2.2.2
|
||||
network 10.10.10.0 0.0.0.255 area 0
|
||||
network 12.12.12.2 0.0.0.0 area 0
|
||||
```
|
||||
|
||||
+ 自R1向R2的环回接口执行ping操作,以测试连通性
|
||||
+ 执行一条`show ip route`命令,来验证有通过OSPF接收到路由
|
||||
+ 执行一条`show ip protocols`命令,来验证有配置OSPF且在设备上是活动的
|
||||
+ 坚持特定于OSPF的接口参数:`show ip ospf interface`及`show ip ospf interface brief`
|
||||
+ 在两台路由器上(直接连接接口)修改OSPF的Hello包和死亡计时器:`ip ospf hello`及`ip ospf dead`
|
||||
+ 执行一下`show ip ospf 1`命令,看看路由进程参数
|
||||
+ 重复该实验,但这次使用`ip ospf 1 area 0 interface specific`命令,而不是在router OSPF 下的`network`命令,对各个网络进行通告。
|
214
d13-OSPFv3.md
Normal file
@ -0,0 +1,214 @@
|
||||
#第13天
|
||||
|
||||
**OSPF版本3**
|
||||
|
||||
**OSPFv3**
|
||||
|
||||
##第13天任务
|
||||
|
||||
+ 阅读今天的理论课文
|
||||
+ 回顾昨天的理论课文
|
||||
|
||||
今天我们要着眼于OSPFv3, 这里将学习要下面的知识。
|
||||
|
||||
+ OSPF基础
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
+ 配置OSPFv3
|
||||
+ 路由器ID
|
||||
+ 被动接口
|
||||
|
||||
##OSPF第3版
|
||||
|
||||
**OSPF Version 3**
|
||||
|
||||
OSPFv3定义在RFC 2740中,而其功能与OSPFv2相同,不过OSPFv3显式地是为IPv6路由协议设计(OSPFv3 is defined in RFC 2740 and is the counterpart of OSPFv2, but it is designed explicitly for the IPv6 routed protocol)。该版本号取自此种OSPF数据包中的版本字段,该字段已被更新到数字3. OSPFv3规格主要是基于OSPFv2, 但因为加入对IPv6的支持,而包含了一些额外功能增强。
|
||||
|
||||
OSPFv2和OSPFv3能在同一台路由器上运行。也就是说,同一台物理路由器可同时路由IPv4和IPv6流量,因为每个地址家族都有不同的SPF进程;这就是说,同样SPF算法对OSPFv2和OSPFv3分别有一个单独实例。OSPFv2和OSPFv3有以下共同点。
|
||||
|
||||
+ OSPFv3继续使用着为OSPFv2所用到的那些数据包。包括数据库说明数据包(Database Description, DBD), 链路状态请求数据包(Link State Requests, LSRs),链路状态更新数据包(Link State Updates, LSUs), 以及链路状态通告数据包(Lins State Advertisements, LSAs)
|
||||
+ OSPSv3中的动态邻居发现机制及邻接关系形成过程(OSPF所经历的从初始、尝试建立邻接关系到邻接关系完整建立的过程),仍然和OSPFv2中一样
|
||||
+ 在不同通信技术方面,OSPFv3仍然保持对RFC的遵循(OSPFv3 still remains RFC-compliant on different technologies)。比如,若在某条PPP链路上开启OSPFv3, 那么组网类型仍然被指定为点对点(Point-to-Point)。同样,如在FR上开启OSPFv3, 默认组网类型仍然是非广播类型(Non-Broadcast)。此外,在思科IOS软件中,默认组网类型仍可通过使用不同的、特定于接口的命令,手动进行改变。
|
||||
+ OSPFv2和OSPFv3使用同样的LSA散布及老化机制(the same LSA flooding and aging mechanism).
|
||||
+ 与OSPFv2类似,OSPFv3的路由器ID(rid)仍然需要使用一个32位的IPv4地址。当在某台运行着双栈(dual-stack, 也就是同时有IPv4和IPv6)的路由器上开启OSPFv3时, 那么与在OSPFv2中为思科IOS路由器所用到的同样RID选定过程,也用于确定OSPFv3中要用到的路由器ID。但是,在一台没有接口运行着IPv4的路由器上开启OSPFv3时,就**强制性要求使用路由器配置命令`router-id`来手动配置OSPFv3的路由器ID**。
|
||||
+ OSPFv3链路ID表明,这些链路并非IPv6专用,同时这些链路ID跟OSPFv2中一样,仍然基于一个32位IPv4地址。
|
||||
|
||||
在OSPFv2与OSPFv3有着这些相同点的同时,重要的是掌握那些你必须熟悉的存在的明显不同点。包括下面这些。
|
||||
|
||||
+ 以与EIGRP类似的方式,OSPFv3是在链路上运行的(in a manner similar to EIGRP, OSPFv3 runs over a link)。这就打消了OSPFv3中执行网络声明语句的需求。取而代之的是,**通过使用接口配置命令`ipv6 router ospf [process id] area [area id]`,来将该链路配置为某个OSPF进程的组成部分**。但是,与OSPFv2类似,OSPF进程号仍然是通过在全局配置模式中,使用全局配置命令`ipv6 router ospf [process id]`进行指定。
|
||||
+ **OSPFv3使用本地链路地址(Link-local address)来区分OSPFv3邻接关系**。与EIGRPv6类似,OSPFv3路由的下一跳地址将反映邻接的或邻居路由器的本地链路地址。
|
||||
+ OSPFv3**引入了两种新的OSPF LSA类型**。分别是**链路LSA**(the Link LSA),被定义为LSA类型0x0008(LSA Type 0x0008,或LSA Type 8), 以及**区域内前缀LSA**(the Intra-Area-Prefix LSA),被定义为LSA类型0x0029(LSA Type 0x0029, 或LSA Type 29)。**链路LSA提供了路由器的本地链路地址,及加诸路由器上的所有IPv6前缀**。每条链路都有一个链路LSA。可能有多个带有不同**链路状态IDs**的区域内前缀LSAs。因此,区域LSA散布范围就既可能是与应用自网络LSA的所经过网络的相关前缀网络,也可能是参考自路由器LSA的某台路由器或末梢区域相关前缀(There can be multiple Intra-Area-Prefix LSAs with different Link-State IDs. The Area flooding scope can therefore be an associated prefix with the transit network referencing a Network LSA or it can be an associated prefix with a router or Stub referencing a Router LSA)。
|
||||
+ OSPFv2与OSPFv3所用到的传输方式是不同的。OSPFv3报文是用(封装成)IPv6数据包发出的。
|
||||
+ OSPFv3使用两个标准IPv6多播地址。多播地址`FF02::5`与OSPFv2中用到的所有SPF路由器(AllSPFRouters)地址`224.0.0.5`等价,同时多播地址`FF02::6`就是所有DR路由器(AllDRRouters)地址,且与OSPFv2中用到的`224.0.0.6`组地址等价。(这将在ICND2部分讲到)。
|
||||
+ OSPFv3利用到IPv6内建的IPSec的能力,并将AH和ESP扩展头部用着一种的认证机制,而不是想在OSPFv2中可配置的为数众多的认证机制(OSPFv3 leverages the built-in capabilities of IPSec and uses the AH and ESP extension headers as an authentication mechanism instead of the numerous authentication mechanisms configurable in OSPFv2)。因此,在OSPFv3的OSPF数据包中,那些认证和AuType字段就被移除了。
|
||||
+ 最终的最后一个明显区别就是,OSPFv3 Hello数据包现在不包含任何地址信息,而是包含了一个接口ID,该接口ID是发出Hello数据包路由器分配的,用于对链路做其接口的唯一区分。此接口ID成为网络LSA(the Network LSA)的链路状态ID(Link State ID), 判断该路由器是否应成为该链路上的指定路由器(This interface ID becomes the Network LSA's Link State ID, should the router become the Designated Router on the link)。
|
||||
|
||||
##思科IOS软件的OSPFv2和OSPFv3配置差异
|
||||
|
||||
**Cisco IOS Software OSPFv2 and OSPFv3 Configuration Differences**
|
||||
|
||||
在思科IOS软件中,配置OSPFv2与OSPFv3时有着一些配置差异。但应注意到,这些区别与其它路由协议的IPv4和IPv6版本的差异相比,并不那么显著。
|
||||
|
||||
在思科IOS软件中,通过使用全局配置命令`ipv6 router ospf [process id]`,来开启OSPFv6。和OSPFv2中的情况一样,OSPF进程ID是对路由器本地有效的,并不要求其在邻接路由器上为建立邻接关系保持一致。
|
||||
|
||||
> **译者总结:** 邻居路由器要形成邻接关系,要求:1. 区域号一致;2. 认证一直;3. Hello包、死亡间隔时间直一致;不要求:进程号一致。Hello数据包用于动态邻居发现和形成邻接关系,因此Hello数据包包含上述要求的参数,不包含不要求的参数。只有形成了邻接关系,才能开始发送和接受LSAs。
|
||||
|
||||
与EIGRPv6(将在ICND2中涵盖)所要求的一样,OSPFv3的路由器ID也必须予以手动指定,或配置成一个带有IPv4地址的运行接口(比如一个环回接口)。与EIGRPv6类似,在启用OSPFv3时,是没有网络命令的(网络宣告,network statement)。取而代之的是,OSPF的启用,是基于各个接口的,且在同一接口上可开启多个OSPFv3实例(similar to EIGRPv6, there are no network commands used when enabling OSPFv3. Instead OSPFv3 is enabled on a per-interface basis and multiple instances may be enabled on the same interface)。
|
||||
|
||||
最后,当**在诸如FR及ATM这样的NBMA网络上配置OSPFv3时,是在指定接口下,使用接口配置命令`ipv6 ospf neighbor [link local address]`,来指定邻居声明语句(the neighbor statements)。而在OSPFv2中,这些语句会是在路由器配置模式中配置的**。
|
||||
|
||||
> **注意:** 当在NBMA传输技术上配置OSPFv3时,应该使用本地链路地址来创建出静态FR地图声明语句(static Frame Relay map statements)。这是因为正是使用本地链路地址,而不是全球单播地址,建立邻接关系。比如,为给一个FR部署创建一幅静态FR地图语句并指定一台OSPF邻居路由器,就要在该路由器上应用下面的配置(在ICND2部分将对FR进行讲解)。
|
||||
|
||||
```
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#ipv6 router ospf 1
|
||||
R1(config-rtr)#router-id 1.1.1.1
|
||||
R1(config-rtr)#exit
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#frame-relay map ipv6 FE80::205:5EFF:FE6E:5C80 111 broadcast
|
||||
R1(config-if)#ipv6 ospf neighbor FE80::205:5EFF:FE6E:5C80
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
###思科IOS软件中OSPFv3的配置和验证
|
||||
|
||||
**Configuring and Verifying OSPFv3 in Cisco IOS Software**
|
||||
|
||||
接着上一部分,上部分强调了OSPFv2和OSPFv3之间配置差异,那么这部分就要过一遍那些在思科IOS软件中开启和验证OSPFv3功能及路由的步骤。在思科IOS软件中,需要依序采行下面这些步骤,来开启OSPFv3路由。
|
||||
|
||||
1. 使用全局配置命令`ipv6 unicast-routing`,来全局性地开启IPv6路由。在思科IOS软件中,IPv6路由默认是关闭的。
|
||||
2. 使用全局配置命令`ipv6 router ospf [process ID]`, 配置一或多个的OSPFv3进程。
|
||||
3. 如路由器上没有配置IPv4地址的运行接口,就要使用路由器配置命令(router configuration command)`router-id [IPv4 Address]`, 手动配置OSPFv3路由器ID(Router ID,RID)。
|
||||
4. 在需要的接口上(on the desired interfaces),使用接口配置命令`ipv6 address`及`ipv6 enable`, 对这些接口开启IPv6。
|
||||
5. 使用接口配置命令`ipv6 ospf [process ID] area [area ID]`,在接口下开启一或更多的OSPFv3进程。
|
||||
|
||||
第一个基础多区域OSPFv3配置示例,建立在下图13.1所演示的拓扑之上。
|
||||
|
||||

|
||||
|
||||
*图13.1 -- 在思科IOS软件中配置基本多区域OSPFv3*
|
||||
|
||||
依之间所讲到的顺序配置步骤,照下面这样,在路由器R1上就会配置上OSPFv3。
|
||||
|
||||
```
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#ipv6 router ospf 1
|
||||
R1(config-rtr)#router-id 1.1.1.1
|
||||
R1(config-rtr)#exit
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ipv6 address 3fff:1234:abcd:1::1/64
|
||||
R1(config-if)#ipv6 enable
|
||||
R1(config-if)#ipv6 ospf 1 Area 0
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
而按照同样顺序的步骤,像下面这样在路由器R3上配置好OSPFv3路由。
|
||||
|
||||
```
|
||||
R3(config)#ipv6 unicast-routing
|
||||
R3(config)#ipv6 router ospf 3
|
||||
R3(config-rtr)#router-id 3.3.3.3
|
||||
R3(config-rtr)#exit
|
||||
R3(config)#interface FastEthernet0/0
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:1::3/64
|
||||
R3(config-if)#ipv6 enableR3(config-if)#ipv6 ospf 3 Area 0
|
||||
R3(config-if)#exit
|
||||
R3(config)#interface Loopback0
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:2::3/128
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:3::3/128
|
||||
R3(config-if)#ipv6 enable
|
||||
R3(config-if)#ipv6 ospf 3 Area 1
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
依据上述两台路由器上OSPFv3的配置,就可以使用命令`show ipv6 ospf neighbor`, 来检查OSPFv3的邻接状态,在R1上如下所示。
|
||||
|
||||
```
|
||||
R1#show ipv6 ospf neighbor
|
||||
Neighbor ID Pri State Dead Time Interface ID Interface
|
||||
3.3.3.3 1 FULL/BDR 00:00:36 4 FastEthernet0/0
|
||||
```
|
||||
|
||||
通过将`[detail]`关键字追加到本命令的后面,还可以查看详细的邻居信息。
|
||||
|
||||
<pre>
|
||||
R1#show ipv6 ospf neighbor detail
|
||||
Neighbor 3.3.3.3
|
||||
In the area 0 via interface FastEthernet0/0
|
||||
<b>Neighbor: interface-id 4, link-local address FE80::213:19FF:FE86:A20</b>
|
||||
Neighbor priority is 1, State is FULL, 6 state changes
|
||||
DR is 1.1.1.1 BDR is 3.3.3.3
|
||||
<b>Options is 0x000013 in Hello (V6-Bit E-Bit R-bit )</b>
|
||||
<b>Options is 0x000013 in DBD (V6-Bit E-Bit R-bit )</b>
|
||||
Dead timer due in 00:00:39
|
||||
Neighbor is up for 00:06:40
|
||||
Index 1/1/1, retransmission queue length 0, number of retransmission 0
|
||||
First 0x0(0)/0x0(0)/0x0(0) Next 0x0(0)/0x0(0)/0x0(0)
|
||||
Last retransmission scan length is 0, maximum is 0
|
||||
Last retransmission scan time is 0 msec, maximum is 0 msec
|
||||
</pre>
|
||||
|
||||
在上面的输出中,注意真实的邻居地址是本地链路地址,而不是所配置的全球IPv6单播地址。
|
||||
|
||||
##第13天问题
|
||||
|
||||
1. Both OSPFv2 and OSPFv3 can run on the same router. True or false?
|
||||
2. OSPFv2 and OSPFv3 use different LSA flooding and aging mechanisms. True or false?
|
||||
3. Which is the equivalent of `224.0.0.5` in the IPv6 world?
|
||||
4. As is required for EIGRPv6, the router ID for OSPFv3 must be either specified manually or configured as an operational interface with an IPv4 address. True or false?
|
||||
5. Which command would you use to enable the OSPFv3 routing protocol?
|
||||
6. Which command would you use to specify an OSPFv3 neighbour over an NBMA interface?
|
||||
7. Which command would you use to see the OSPFv3 LSDB?
|
||||
8. A significant difference between OSPFv2 and OSPFv3 is that the OSPFv3 Hello packet now contains no address information at all but includes an interface ID, which the originating router has assigned to uniquely identify its interface to the link. True or false?
|
||||
|
||||
##第13天答案
|
||||
|
||||
1. True.
|
||||
2. False.
|
||||
3. `FF02::5`.
|
||||
4. True.
|
||||
5. The `ipv6 router ospf <id>`
|
||||
6. The `ipv6 ospf neighbor`
|
||||
7. The `show ipv6 ospf database`
|
||||
8. True.
|
||||
|
||||
##第13天实验
|
||||
|
||||
###OSPFv3基础实验
|
||||
|
||||
重复第12天的实验场景(两台路由器直连,各自又有环回接口),但以配置IPv6地址并在设备间使用OSPFv3对这些地址进行通告,取代配置IPv4的OSPF。
|
||||
|
||||
+ 给直连接口分配上IPv6地址(`2001:100::1/64`及`2001:100::2/64`)
|
||||
+ 用`ping`测试直接连通性
|
||||
+ 在两台路由器上分别配置一个环回接口,并从两个不同范围分配地址(`2002::1/128`及`2002::2/128`)
|
||||
+ 配置标准的OSPFv3 1号进程并将所有本地网络在0号区域进行通告。同时为各设备配置一个路由器ID。
|
||||
|
||||
**R1:**
|
||||
|
||||
<pre>
|
||||
ipv6 router ospf 1
|
||||
router-id 1.1.1.1
|
||||
int fa0/0<b>(或特定接口编号)</b>
|
||||
ipv6 ospf 1 area 0
|
||||
int lo0<b>(或特定接口编号)</b>
|
||||
ipv6 ospf 1 area 0
|
||||
</pre>
|
||||
|
||||
**R2:**
|
||||
|
||||
<pre>
|
||||
ipv6 router ospf 1
|
||||
router-id 2.2.2.2
|
||||
int fa0/0<b>(或特定接口编号)</b>
|
||||
ipv6 ospf 1 area 0
|
||||
int lo0<b>(或特定接口编号)</b>
|
||||
ipv6 ospf 1 area 0
|
||||
</pre>
|
||||
|
||||
+ 自R1向R2的IPv6环回接口发出`ping`操作,以测试连通性
|
||||
+ 执行一个`show ipv6 route`命令,来验证有通过OSPFv3接收到路由
|
||||
+ 执行一个`show ipv6 protocols`命令,来验证有配置OSPFv3且在设备上是活动的
|
||||
+ 执行命令`show ipv6 ospf interface`及`show ipv6 ospf interface brief`,检查接口特定于OSPF的那些参数
|
||||
+ 在两台路由器上(直连接口)修改Hello包和死亡计时器: `ipv6 ospf hello`及`ipv6 ospf dead`
|
||||
+ 执行一下`show ipv6 ospf 1`命令,来查看路由进程参数
|
454
d14-DHCP-and-DNS.md
Normal file
@ -0,0 +1,454 @@
|
||||
#第14天
|
||||
|
||||
**DHCP及DNS**
|
||||
|
||||
**DHCP and DNS**
|
||||
|
||||
##第14天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND1记诵指南
|
||||
+ 花15分钟在[subnetting.org](http://www.subnetting.org)上
|
||||
|
||||
主机使用动态主机配置协议(Dynamic Host Configuration Protocol, DHCP),紧接着加电启动后,收集到包括了IP地址、子网掩码及默认网关等初始配置信息。因为所有主机都需要一个IP地址,以在IP网络中进行通信,而DHCP就减轻了手动为每台主机配置一个IP地址的管理性负担。
|
||||
|
||||
域名系统(Domain Name System, DNS)将主机名称映射到IP地址,使得你可[www.in60days.com](www.in60days.com)输入到web浏览器中,而无需输入寄存该站点的服务器IP地址。
|
||||
|
||||
今天将学到以下内容。
|
||||
|
||||
+ DHCP操作, DHCP operations
|
||||
+ 配置DHCP, configuring DHCP
|
||||
+ DHCP故障排除, troubleshooting DHCP issues
|
||||
+ DNS操作, DNS operations
|
||||
+ 配置DNS, configuring DNS
|
||||
+ DNS故障排除, troubleshooting DNS issues
|
||||
|
||||
本课对应了以下CCNA大纲要求。
|
||||
|
||||
+ 配置和验证DNS(IOS路由器)
|
||||
- 将路由器接口配置为使用DHCP, configure router interfaces to use DHCP
|
||||
- DHCP选项, DHCP options
|
||||
- 排除的地址, excluded addresses
|
||||
- 租期,lease time
|
||||
|
||||
##DHCP功能
|
||||
|
||||
**DHCP Functionality**
|
||||
|
||||
###DHCP操作
|
||||
|
||||
**DHCP Operations**
|
||||
|
||||
DHCP通过在网络上给主机自动分配IP信息,简化了网络管理任务。分配的信息可以包括IP地址、子网掩码及默认网关,且通常实在主机启动时。
|
||||
|
||||
在主机第一次启动时,如其已被配置为采用DHCP(大多数主机都是这样的),它就会发出一个询问分配IP信息的广播报文。该广播将为DHCP服务器收听到,同时该信息会被中继。
|
||||
|
||||
> Farai指出 -- "这是假定主机和DHCP服务器实在同一子网的情形,而如它们不在同一子网,就看下面的`ip helper-address`命令。"
|
||||
|
||||

|
||||
|
||||
*图14.1 -- 主机请求IP配置信息*
|
||||
|
||||
DHCP具体使用UDP端口67和68,来在网络上通信,同时,尽管在需要时路由器也可实现DHCP功能,但通常都会使用具体服务器作为DHCP服务器。在需要时,路由器同样可以配置为从DHCP服务器取得其接口IP地址,但很少这样做。配置这个特性的命令如下。
|
||||
|
||||
`Router(config-if)#ip address dhcp`
|
||||
|
||||
客户端的DHCP状态如下:
|
||||
|
||||
+ 初始化,initialising
|
||||
+ 选择,selecting
|
||||
+ 请求,requesting
|
||||
+ 绑定,bound
|
||||
+ 更新,renewing
|
||||
+ 重绑定,rebinding
|
||||
|
||||
DHCP服务器可被配置为在一个名为租期的特定时期,赋予某台主机一个IP地址。租期可以是几个小时或几天。对于那些不能在网络上分配给主机的IP地址,可以也应该予以保留。这些保留的IP地址,将是已被路由器接口或服务器所使用的地址。如未能保留这些地址,就会看到网络上的重复IP地址告警,因为DHCP服务器已将配置给路由器或服务器的地址,分配给了主机。
|
||||
|
||||
下面的图14.2中,可以看到完整的DHCP请求和分配过程。
|
||||
|
||||

|
||||
*图14.2 -- DHCP请求和分配过程*
|
||||
|
||||
1. **DHCP发现数据包**(DHCP Discover packet)当某台设备启动后,同时其被配置为通过DHCP取得一个地址时,就会发出一个自UDP端口68(UDP port 68, bootpc)到UDP端口67(UDP port 67, bootps)的广播数据包。该数据包将到达网络上的所有设备,包括任何位处网络上的可能的DHCP服务器。
|
||||
|
||||
**DHCP提议数据包**(DHCP Offer packet),本地网络上的DHCP服务器看到由客户端发出的广播发现报文(the broadcasted Discover message),就用UDP源端口bootps 67及目的端口bootpc 68, 同样以广播地址的形式,发回一个响应(就是DHCP提议数据包)。之所以同样以广播地址形式,是因为客户端此时仍然没有IP地址,而无法接收单播数据包。
|
||||
|
||||
2. **DHCP请求数据包**(DHCP Request packet), 一旦客户端工作站收到由DHCP服务器做出的提议(an offer made by the DHCP server),它就会发出一个广播(用于告知所有DHCP服务器,它已接受了来自某台服务器的提议)DHCP请求报文到某台特定的DHCP服务器,并再度使用UDP源端口bootpc 68及目的端口bootps 67。**客户端可能会收到来自多台DHCP服务器的提议,但它只需单独一个IP地址,所以它必需选择一台DHCP服务器**(基于服务器标识),而选择通常都是按照"先到,先服务"原则完成的(on a "first-come, first-served" basis)。
|
||||
|
||||
3. **DHCP确认数据包**(DHCP ACK packet), 选中的那台DHCP服务器发出另一个广播报文,来确认给那台特定客户端的地址分配,再度用到UDP源端口bootps 67及目的端口bootpc 68。
|
||||
|
||||
|
||||
###DHCP保留
|
||||
|
||||
**DHCP Reservations**
|
||||
|
||||
DHCP服务器可被配置为以几种不同方式提供IP地址,包括下面这些。
|
||||
|
||||
+ 动态分配, Dynamic allocation
|
||||
+ 自动分配, Automatic allocation
|
||||
+ 静态分配, Static allocation
|
||||
|
||||
**动态分配**
|
||||
|
||||
**Dynamic allocation**
|
||||
|
||||
通过DHCP指派地址的一个十分常用方法,就是采用动态分配过程,在此过程中,DHCP服务器配置为有着一个大的IP地址池,且根据客户端的请求,而为其分配地址池中的一个IP地址。在设备租期超时或设备离开网络时,该特定IP地址就被交还给DHCP服务器,之后就可被分配给另一客户端。
|
||||
|
||||
**自动分配**
|
||||
|
||||
**automatic allocation**
|
||||
|
||||
采用DHCP服务器分配IP地址的另一方式,叫做自动分配,该方式跟动态分配极为相似,但采用此种方式,DHCP服务器尝试维护一个所有过往分配地址清单,而如有某台"旧有"客户端请求一个IP地址,该客户端就会分配到一个跟以前一样的IP地址(也就是说,其曾于此前请求过一个IP地址)。自动分配是一种较为低效的分配IP地址方式,但如有着一个极大的可用IP地址池,这就是一种总能确保某网络中的客户端在每次开机时,获得同样IP地址的巧妙方法。
|
||||
|
||||
|
||||
**静态分配**
|
||||
|
||||
**Static allocation**
|
||||
|
||||
DHCP服务器的IP地址静态分配,是指定义出一些期望在网络上出现的MAC地址,并手动为这些MAC地址都分配上一个唯一IP地址,因此就管理性地建立起一张MAC-to-IP关联表。这通常在服务器环境中用到,因为服务器必须使用可预期的IP地址,以可供访问。
|
||||
|
||||
###DHCP范围
|
||||
|
||||
**DHCP Scopes**
|
||||
|
||||
打算配置一台DHCP服务器的网络管理员,作为配置过程的一部分,也需要配置DHCP范围。范围就是网络某个特殊部分的一组IP地址(A scope is a grouping of IP addresses for a particular section of the network)。而每个子网通常有着自己的范围。
|
||||
|
||||
范围也可以是可供DHCP服务器分配的一个连续地址池(a contiguous pool of addresses)。大多数DHCP服务器都提供了从地址池中排除一些地址的功能,以避免将这些地址动态地分配给客户端。这些排除的地址,就通常是那些手动分配给网络中服务器(及网络设备)的IP地址。
|
||||
|
||||
在定义的DHCP范围内部,可以配置诸如下面的一些参数。
|
||||
|
||||
+ IP地址范围, IP address range
|
||||
+ 子网掩码, subnet mask
|
||||
+ 租约持续时间,lease duration
|
||||
+ 默认网关,default gateway
|
||||
+ DNS服务器,DNS server
|
||||
+ WINS服务器,WINS server
|
||||
|
||||
依据所使用的DHCP服务器,也可以使用不同参数,创建出不同的范围,而这通常与不同子网有关。
|
||||
|
||||
###DHCP租期
|
||||
|
||||
**DHCP Leases**
|
||||
|
||||
DHCP所提供的主要优势之一,就是租借IP地址的能力,也就是说1P地址的分配是临时的。通常,当客户端离开网络时,其所分配到的特定IP地址将变成可用,并由DHCP服务器分配给其它设备。
|
||||
|
||||
DHCP租期关乎每次DHCP分配,限定允许用户使用一个分配到的1P地址多长时间。通常是在DHCP范围内对该参数进行管理性配置。每当有客户端重启后,它都必须再次从DHCP服务器请求一个IP地址。而DHCP服务器又通常被配置为给那台特定主机再度分配同样的地址并扩展租期。
|
||||
|
||||
工作站也能手动释放其IP地址,比如在以下情况下。
|
||||
|
||||
+ 设备无限期关机,the device is turned off indefinitely
|
||||
+ 设备移至另一子网(比如,从有线网络移到无线网络),the device moves to another subnet(e.g, to a wireless network from a wired network)
|
||||
|
||||
租借过程有几个相关的计时器,因此可以肯定在所有网络设备上总是会有一个更新过的IP地址。下面是两个重要的DHCP计时器。
|
||||
|
||||
+ **续借(T1)计时器**(renewal(T1) timer, 默认是租期的一半):在工作站取得一个IP地址后,此计时器就开始计时,当到达租期的50%时,DHCP客户端将向来源DHCP服务器重申租约。
|
||||
+ **重新绑定(T2)计时器**(rebinding(T2) timer, 默认是租期的87.5%):这第二个计时器用在DHCP服务器未有在续借计时器超时后,进行回应或确认的情形。该计数器指出,如租期已过7/8, 那么客户端将尝试找到(发出一个DHCP请求)另一能够提供DHCP地址的DHCP服务器。
|
||||
|
||||
有了租借过程及上述有关计时器,就可以肯定总是会及时拥有一个IP地址,且连带不会有任何停止时间,同时自动地有着一种构建于DHCP过程中的冗余机制。
|
||||
|
||||
图14.3中展示了T1及T2计时器与租期的关系。
|
||||
|
||||

|
||||
|
||||
*图14.3 -- DHCP租期计时器*
|
||||
|
||||
###DHCP选项
|
||||
|
||||
**DHCP Options**
|
||||
|
||||
在DHCP中有一个特殊字段,可用于帮助扩展一些自动配置过程的性能。可在此字段中放入在DHCP RFC中给出的许多不同配置选项。
|
||||
|
||||
> **注意:**BOOTP选项曾被称作“厂商扩展”。
|
||||
|
||||
DHCP提供了256选项值,其中仅254个是可用的,因为0是垫底选项,而255是最后选项(0 is the pad option and 255 is the end option)。许多DHCP选项都是通常所了解的经常使用到的参数,包括下面这些。
|
||||
|
||||
+ 子网掩码,subnet mask
|
||||
+ 域名服务器,domain name server
|
||||
+ 域名,domain name
|
||||
|
||||
这些年来,已加入一些额外的DHCP选项,尤其是VoIP用途的那些选项,比如下面这些。
|
||||
|
||||
+ 选项129: 呼叫服务器IP地址
|
||||
+ 选项135: 话机相关应用的HTTP代理服务器
|
||||
|
||||
所有这些选项都是直接在DHCP服务器上配置,但不是所有DHCP服务器都提供了设置DHCP选项的能力。如网络管理员要用到这些特性,就应该采用一种企业级别的DHCP服务器。在将小型路由器作为家庭办公环境的DHCP服务器是,就可能不会有这些功能上的益处。
|
||||
|
||||
##配置DHCP
|
||||
|
||||
**Configuring DHCP**
|
||||
|
||||
###思科路由器上的DHCP服务器
|
||||
|
||||
**DHCP Servers on Cisco Routers**
|
||||
|
||||
第一步就是在路由器上开启DHCP服务。这是通过使用`service dhcp`命令完成的,如下面所示(as exemplified below)。
|
||||
|
||||
```
|
||||
Router#configure terminal
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#service dhcp
|
||||
```
|
||||
|
||||
下一步就是创建一个DHCP池,该DHCP池定义出将分配给客户端的IP地址池。在本例中,名为`SUBNET_A`的池将提供来自范围`192.168.1.0/24`的IP地址。
|
||||
|
||||
```
|
||||
Router(config)#ip dhcp pool SUBNET_A
|
||||
Router(dhcp-config)#network 192.168.1.0 255.255.255.0
|
||||
Router(dhcp-config)#default-router 192.168.1.1
|
||||
Router(dhcp-config)#dns-server 8.8.8.8
|
||||
Router(dhcp-config)#domain-name Network+
|
||||
Router(dhcp-config)#lease 30
|
||||
```
|
||||
|
||||
该DHCP池配置模式(the DHCP Pool Configuration mode)同时也是配置其它DHCP选项的地方。在上面的配置输出中,配置了以下这些参数。
|
||||
|
||||
+ 默认网关:`192.168.1.1`(指派到将该路由器作为DHCP服务器所服务网络中的路由器接口地址)
|
||||
+ DNS服务器:`8.8.8.8`
|
||||
+ 域名:Network+
|
||||
+ 租期:30天
|
||||
|
||||
在需要时,也可以配置一些从`192.168.1.0/24`范围中排除的地址。我们就说要排除路由器接口IP地址(`192.168.1.1`)及`192.168.1.250`到`192.168.1.255`地址范围,从该范围就可手动为网络中的服务器分配地址。这是通过下面的配置完成的。
|
||||
|
||||
```
|
||||
Router(config)#ip dhcp excluded-address 192.168.1.1
|
||||
Router(config)#ip dhcp excluded-address 192.168.1.250 192.168.1.255
|
||||
```
|
||||
|
||||
可使用下面的命令来查看当前由该路由器DHCP服务器所服务的客户端。
|
||||
|
||||
```
|
||||
Router#show ip dhcp binding
|
||||
Bindings from all pools not associated with VRF:
|
||||
IP address Client-ID/ Lease expiration Type Hardware address/
|
||||
192.168.1.2 Mar 02 2014 12:07 AM Automatic 0063.6973.636f.2d63
|
||||
```
|
||||
|
||||
在上面的输出中,由该DHCP服务器服务的是单独一台客户端,同时分到到DHCP范围的第一个非排除IP地址:192.168.1.2。还可以看到租期超时日期及设备MAC地址。
|
||||
|
||||
###思科路由器上的DHCP客户端
|
||||
|
||||
**DHCP Clients on Cisco Routers**
|
||||
|
||||
除了DHCP服务器功能,思科路由器同样允许将其接口配置为DHCP客户端。这就是说接口将使用标准DHCP过程,请求到一个地址,而在特定子网上的任何服务器,都能分配该IP地址。
|
||||
|
||||
将一个路由器接口配置为DHCP客户端的命令如下。
|
||||
|
||||
```
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip address dhcp
|
||||
```
|
||||
|
||||
一旦某台DHCP服务器分配了一个IP地址,在路由器控制台上就可以看到下面的通知消息(该消息包含了地址和掩码)。
|
||||
|
||||
```
|
||||
*Mar 1 00:29:15.779: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 10.10.10.2, mask 255.255.255.0, hostname Router
|
||||
```
|
||||
|
||||
使用命令`show ip interface brief`,就可以观察到该DHCP分配方式。
|
||||
|
||||
```
|
||||
Router#show ip interface brief
|
||||
Interface IP-Address OK? Method Status Protocol
|
||||
FastEthernet0/0 10.10.10.2 YES DHCP up up
|
||||
FastEthernet0/1 unassigned YES unset administratively down down
|
||||
```
|
||||
|
||||
###DHCP数据包分析
|
||||
|
||||
**DHCP Packet Analysis**
|
||||
|
||||
为实际掌握在本模块中介绍的这些知识点,将生成一些上述示例中涉及到设备的流量捕获。在配置好DHCP服务器及客户端工作站启动起来后,就会发生4步的DHCP过程,可在下面的截屏中观察到。
|
||||
|
||||

|
||||
|
||||
*图14.4 -- DHCP 4步过程*
|
||||
|
||||
下面可以观察到DHCP发现数据包所包含的部分。
|
||||
|
||||

|
||||
|
||||
*图14.5 -- DHCP发现数据包*
|
||||
|
||||
正如你在截屏中看到的,该数据包(DHCP Discover packet)是由客户端发出,将其广播到网络上(目的地址是`255.255.255.255`)。同时还看到其报文类型为“Boot Request(1)”。
|
||||
|
||||
下一个数据包就是DHCP提议数据包(DHCP Offer packet),如下面所示。
|
||||
|
||||

|
||||
|
||||
*图14.6 -- DHCP提议数据包*
|
||||
|
||||
该数据包是由服务器(源IP:192.168.1.1)发出到广播地址(目的地址:255.255.255.255),同时包含了提议的IP地址(192.168.1.2)。同时也可看到报文类型为“Boot Reply(2)”。
|
||||
|
||||
第三个数据包是DHCP请求数据包(DHCP Request packet)。
|
||||
|
||||

|
||||
|
||||
*图14.7 -- DHCP请求数据包*
|
||||
|
||||
DHCP请求数据包是由客户端发出到广播地址。可以看到报文类型是“Boot Request(1)”。该数据包与最初的DHCP发现数据包类似,但包含了一个非常重要的字段,就是50选项: 被请求的IP地址(192.168.1.2)(a very important field, which is Option 50: Requested IP Address(192.168.1.2))。这就是在DHCP提议数据包中由DHCP服务器所提供的同一IP地址,而该客户端对其进行了确认和接受。
|
||||
|
||||
DHCP分配过程的最后数据包就是由服务器发出的DCHP确认数据包了(the DHCP ACK packet)。
|
||||
|
||||

|
||||
|
||||
*图14.8 -- DHCP确认选项数据包*
|
||||
|
||||
该数据包发自DHCP服务器并被广播到网络上;其同样包含了在上面的截屏中所看到的一些额外字段。
|
||||
|
||||
+ DHCP服务器标识:该DHCP服务器的IP地址(192.168.1.1)
|
||||
+ 路由器上配置的所有选项。
|
||||
- 租期:30天(以及派生出的早前讨论的过续租时间和重新绑定时间值)
|
||||
- 子网掩码:`255.255.255.0`
|
||||
- 默认网关(路由器): `192.168.1.1`
|
||||
- DNS服务器:`8.8.8.8`
|
||||
- 域名:Network+
|
||||
|
||||
##DHCP故障排除
|
||||
|
||||
**Troubleshooting DHCP Issues**
|
||||
|
||||
跟NAT一样,DHCP故障基本上总是因为错误配置造成的(开玩笑说就是第8层问题,意思是人为疏忽,jokingly referred to as Layer 8 issue, meaning somebody messed up)。
|
||||
|
||||
命令`service dhcp`默认是开启的,但有些时候其已被网络管理员因为某些原因关闭了。(作者就曾遇到过有管理员在他们的路由器上敲入`no ip routing`命令后因为紧急的路由故障打电话给思科 -- 真的!)
|
||||
|
||||
如在另一子网上使用一台服务器来管理DHCP配置,就要允许路由器放行DHCP数据包。在地址分配过程中,DHCP用到广播报文(而路由器是不会转发广播报文的),那么就**需要将DHCP服务器的IP地址加入到路由器,以令到路由器将该广播报文作为单播数据包进行转发**。**命令`ip helper-address`**就可以实现这点。这是另一个考试喜欢的问题哦。
|
||||
|
||||
同样可以使用下面的`debug`命令作为排错过程中的部分。
|
||||
|
||||
```
|
||||
debug ip dhcp server events
|
||||
debug ip dhcp server packet
|
||||
```
|
||||
|
||||
###DNS操作
|
||||
|
||||
**DNS Operations**
|
||||
|
||||
DNS将主机名映射到IP地址(而不是反过来)。这就允许你在web浏览器中浏览一个网址,而无需输入服务器IP地址。
|
||||
|
||||
在主机或路由器想要将一个域名解析到IP地址(或反过来将IP地址解析到域名时),DNS用到UDP 53号端口。而在两台DNS服务器之间打算同步或分享它们的数据库时,就使用TCP 53号端口。
|
||||
|
||||
##配置DNS
|
||||
|
||||
**Configuring DNS**
|
||||
|
||||
如想要容许路由器找到web上的某台DNS服务器,就使用命令`ip name-server 1.1.1.1`,或是服务器相应的地址。
|
||||
|
||||
也可以将某个主机名设置到路由器上的一个IP地址表中来节省时间,或是令到更易于记住要ping的或是连接到的哪台设备,如下面的输出所示。
|
||||
|
||||
```
|
||||
Router(config)#ip host R2 192.168.1.2
|
||||
Router(config)#ip host R3 192.168.1.3
|
||||
Router(config)#exit
|
||||
Router#ping R2
|
||||
Router#pinging 192.168.1.2
|
||||
!!!!!
|
||||
```
|
||||
|
||||
###DNS故障排除
|
||||
|
||||
**Troubleshooting DNS Issues**
|
||||
|
||||
路由器配置默认将会有一个`ip domain-lookup`命令。如此命令已被关闭,则DNS将不工作。某些时候路由器管理员会因避免在输入错误命令时,等待路由器执行数秒DNS查询,而关闭该命令。可通过下面的命令关闭DNS查询。
|
||||
|
||||
`Router(config)#no ip domain-lookup`
|
||||
|
||||
访问控制清单(access control lists, ACL)常常拦阻DNS,那么这是另一个故障原因。使用命令`debug domain`,可在路由器上对DNS进行调试。
|
||||
|
||||
|
||||
##第14天问题
|
||||
|
||||
1. DHCP simplifies network administrative tasks by automatically assigning `_______` to hosts on a network.
|
||||
2. DHCP uses UDP ports `_______` and `_______`.
|
||||
3. What are the six DHCP states for clients?
|
||||
4. Which command will prevent IP addresses `192.168.1.1` to `192.168.1.10` from being used in the pool?
|
||||
5. Which command will set a DHCP lease of 7 days, 7 hours, and 7 minutes?
|
||||
6. Which command will enable the router to forward a DHCP Broadcast as a Unicast?
|
||||
7. DNS uses UDP port `_______`.
|
||||
8. Which command will set a DNS server address of `192.168.1.1` on your router?
|
||||
9. If the `_______` `_______`-`_______` command has been disabled on your router, then DNS won’t work.
|
||||
10. Which command will debug DNS packets on your router?
|
||||
|
||||
##第14天问题答案
|
||||
|
||||
1. IP information (IP addresses).
|
||||
2. 67 and 68.
|
||||
3. Initialising, Selecting, Requesting, Bound, Renewing, and Rebinding.
|
||||
4. The `ip dhcp excluded-address 192.168.1.1 192.168.1.10`
|
||||
5. The `lease 7 7 7` command under DHCP Pool Configuration mode.
|
||||
6. The `ip helper-address` command.
|
||||
7. 53.
|
||||
8. The `ip name-server 192.168.1.1` command.
|
||||
9. `ip domain-lookup`.
|
||||
10. The `debug domain` command.
|
||||
|
||||
##第14天实验
|
||||
|
||||
###路由器上的DHCP实验
|
||||
|
||||
**拓扑**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习可如何将路由器用作DHCP服务器。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 如你使用着家用电脑或笔记本电脑,就将网络适配器设置为自动获取IP地址。在Packet Tracer中也可这样设置。让后使用交叉线将PC连接到路由器的以太网端口。
|
||||
|
||||

|
||||
|
||||
2. 将IP地址`172.16.1.1 255.255.0.0`加入到路由器接口。如忘记了这个怎么配置,就请看看前面的实验。要确保`no shut`该接口。
|
||||
|
||||
3. 配置DHCP地址池。接着为地址配置一个3天3小时5分的租期。最后将1到10的地址排除在分配给主机的地址之外。假设这些地址已为其它服务器或接口使用。
|
||||
|
||||
<pre>
|
||||
Router#conf t
|
||||
Router(config)#ip dhcp pool 60days
|
||||
Router(dhcp-config)#network 172.16.0.0 255.255.0.0
|
||||
Router1(dhcp-config)#lease 3 3 5 <b>← command won’t work on Packet Trer</b>
|
||||
Router1(dhcp-config)#exit
|
||||
Router(config)#ip dhcp excluded-address 172.16.1.1 172.16.1.10
|
||||
Router(config)#
|
||||
</pre>
|
||||
|
||||
4. 执行一个`ipconfig /all`命令,查看是否有IP地址分配到PC。如旧地址仍在使用,就需要执行一下`ipconfig /renew`命令。
|
||||
|
||||
```
|
||||
PC>ipconfig /all
|
||||
Physical Address................: 0001.C7DD.CB19
|
||||
IP Address......................: 172.16.0.1
|
||||
Subnet Mask.....................: 255.255.0.0
|
||||
Default Gateway.................: 0.0.0.0
|
||||
DNS Servers.....................: 0.0.0.0
|
||||
```
|
||||
|
||||
5. 如想要的话,可回到DHCP地址池配置模式(DHCP Pool Configuration mode),加入一个默认网关及DNS服务器地址,它们也将在主机PC上得到设置。
|
||||
|
||||
```
|
||||
Router(config)#ip dhcp pool 60days
|
||||
Router(dhcp-config)#default-router 172.16.1.2
|
||||
Router(dhcp-config)#dns-server 172.16.1.3
|
||||
PC>ipconfig /renew
|
||||
IP Address......................: 172.16.0.1
|
||||
Subnet Mask.....................: 255.255.0.0
|
||||
Default Gateway.................: 172.16.1.2
|
||||
DNS Server......................: 172.16.1.3
|
||||
```
|
||||
|
||||
###路由器上的DNS实验
|
||||
|
||||
**DNS on a Router lab**
|
||||
|
||||
在一台有着某种到互联网连通性的路由器上完成此实验。确保该路由器可以ping通比如Google公司的DNS服务器`8.8.8.8`这样的公网IP地址。将该地址配置为一个名字服务器。
|
||||
|
||||
`ip name-server 8.8.8.8`
|
||||
|
||||
接着尝试解析一些公网网站名字,比如通过`ping www.cisco.com`。
|
||||
|
||||
请访问[www.in60days.com](http://www.in60days.com), 观看我是怎么完成这个实验的。
|
||||
|
861
d15-Layer_1-and-Layer_2-Troubleshooting.md
Normal file
@ -0,0 +1,861 @@
|
||||
#第15天
|
||||
|
||||
**一二层排错**
|
||||
|
||||
**Layer 1 and Layer 2 Troubleshooting**
|
||||
|
||||
##第15天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND1记诵指南
|
||||
+ 在[subnetting.org](http://www.subnetting.org)花15分钟
|
||||
|
||||
先前数课中已涵盖ICND1排错的许多要求,尤其是关于ACLs及IP分址方面。许多可能的故障都发生在一二层,一二层故障及其原因,是今天这课的重点。
|
||||
|
||||
LAN交换是一种用在局域网中的包交换形式。LAN交换是在数据链路层的硬件中完成的。正因为其是基于硬件的,使用到被称为介质访问控制地址(Media Access Control addresses, MAC地址)的硬件地址。**LAN交换机使用MAC地址来转发帧。**
|
||||
|
||||
今天将学习以下内容。
|
||||
|
||||
+ 物理层排错
|
||||
+ VLAN、VTP及中继概述
|
||||
+ VLANs排错
|
||||
+ 运用`show vlan`命令
|
||||
|
||||
本模块对应了下面的CCNA大纲要求。
|
||||
|
||||
+ 一层故障的排错及处理
|
||||
- 组帧,framing
|
||||
- 循环冗余校验,CRC
|
||||
- 畸形帧,runts
|
||||
- 巨大帧,giants
|
||||
- 丢掉的数据包,dropped packets
|
||||
- 晚发冲突,[late collision](https://en.wikipedia.org/wiki/Late_collision)
|
||||
- 输入/输出错误,Input/Output errors
|
||||
+ VLAN故障的排错和处理
|
||||
- 验证VLANs已配置, verify that VLANs are configured
|
||||
- 验证端口成员关系是正确的,verify that port membership is correct
|
||||
- 验证配置了IP地址, verify that the IP address is configured
|
||||
+ 思科交换机上中继问题的排错和处理
|
||||
- 验证中继状态是正确的, verify that the trunk states are correct
|
||||
- 验证封装类型是正确配置的, verify that encapsulation is configured correctly
|
||||
- 验证那些VLANs是被放行的,verify that VLANs are allowed
|
||||
|
||||
##物理层上的排错
|
||||
|
||||
**Troubleshooting at the Phycical Layer**
|
||||
|
||||
思科IOS交换机支持好几个可用于一层,或至少怀疑是一层故障排错的命令。但是,除了对这些软件命令工具包要熟悉外,对可用于链路状态排错,或示出错误情形的物理指示器(也就是那些LEDs)的掌握,也是重要的。
|
||||
|
||||
###使用发光二极管(LEDs)的链路状态排错
|
||||
|
||||
**Troubleshooting Link Status Using Light Emitting Diodes(LEDs)**
|
||||
|
||||
如可物理接触到交换机,那么LEDs就会是一项有用的排错工具。不同类型的思科Catalyst交换机,提供了不同的LED能力。掌握这些LEDs的意义,是Catalyst交换机链路状态及系统排错所不可或缺的部分。思科Catalyst交换机有一些可用于判断链路状态及其它一些诸如系统状态等变量的前面板LEDs。
|
||||
|
||||
经由Google"Catalyst 2960 Switch Hardware Installation Guide",来查看Catalyst 2960型号交换机的思科文档。该安装和配置手册包含了几百页的注记、建议和技术信息。通读一下该文档是值得的,但不要期望从该文档得到CCNA考试大纲的内容(CCNA考试大纲内容在这本书才有)。
|
||||
|
||||

|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>1</td><td>系统LED</td><td>5</td><td>速率LED</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td><td>冗余电源(redundant power supply, RPS) LED</td><td>6</td><td>PoE LED</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td><td>状态LED</td><td>7</td><td>模式按钮</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td><td>双工LED</td><td>8</td><td>端口LEDs</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
*图15.1 -- 思科2960交换机LEDs,图片版权归思科系统公司*
|
||||
|
||||
PoE LED只有在Catalyst 2960交换机型号上才能找到。
|
||||
|
||||
**系统LED**
|
||||
|
||||
**System LED**
|
||||
|
||||
系统LED表明系统通电了的(或是未通电)且正常发挥功能。
|
||||
|
||||
下表15.1列出了系统LED颜色及其所表明的状态。
|
||||
|
||||
*表15.1 -- 系统LED*
|
||||
|
||||
<table>
|
||||
<tr><th>系统LED颜色</th><th>系统状态</th></tr>
|
||||
<tr><td>不亮</td><td>系统未通电</td></tr>
|
||||
<tr><td>绿色</td><td>系统运行正常</td></tr>
|
||||
<tr><td>琥珀色(amber)</td><td>系统以通电,但未有正确发挥功能</td></tr>
|
||||
</table>
|
||||
|
||||
**冗余电源LED**
|
||||
|
||||
**RPS LED**
|
||||
|
||||
冗余电源LED只在那些有着冗余电源的交换机上才有。下表15.2列出了RPS LED的颜色和其意义。
|
||||
|
||||
*表15.2 -- 冗余电源LEDs*
|
||||
|
||||
<table>
|
||||
<tr><th>RPS LED颜色</th><th>状态</th></tr>
|
||||
<tr><td>绿色</td><td>连接了RPS,且RPS在需要时就可提供后备电力</td></tr>
|
||||
<tr><td>绿色闪烁(Blinking Green)</td><td>连接了RPS,但因为其正为另一设备提供电力(冗余已被分配给一台相邻设备)而不可用</td></tr>
|
||||
<tr><td>琥珀色</td><td>RPS处于待机模式或故障状态(in standby mode or in a fault condition)。按下RPS上的Standby/Active按钮,此时该LED应变成绿色。如未变成绿色,则该RPS风扇可能损坏。请联系思科系统公司。</td></tr>
|
||||
<tr><td>琥珀色闪烁</td><td>交换机内部电源失效,且正由RPS给交换机供电(冗余电源已分配给该设备)</td></tr>
|
||||
</table>
|
||||
|
||||
**端口LEDs及其模式**
|
||||
|
||||
**Port LEDs and Modes**
|
||||
|
||||
端口LEDs提供了一组端口或单个端口的信息,如下表15.3所示。
|
||||
|
||||
*表15.3 -- 端口LEDs的模式*
|
||||
|
||||
<table>
|
||||
<tr><th>所选模式LED</th><th>端口模式</th><th>说明</th></tr>
|
||||
<tr><td>1 -- 系统</td><td></td><td></td></tr>
|
||||
<tr><td>2 -- RPS</td><td></td><td>RPS状态</td></tr>
|
||||
<tr><td>3 -- 状态</td><td>端口状态</td><td>端口状态(默认模式)</td></tr>
|
||||
<tr><td>4 -- 双工</td><td>端口双工情况</td><td>双工模式:全双工或半双工</td></tr>
|
||||
<tr><td>5 -- 速率</td><td>端口速率</td><td>端口运行速率:10, 100或1000Mbps</td></tr>
|
||||
<tr><td>6 -- PoE</td><td>PoE端口供电</td><td>PoE状态</td></tr>
|
||||
<tr><td>7 -- 模式</td><td></td><td>循环显示端口状态、双工模式及速率LEDs</td></tr>
|
||||
<tr><td>8 -- 端口</td><td></td><td>依不同模式有不同含义</td></tr>
|
||||
</table>
|
||||
|
||||
不停按下模式按钮(the Mode button)可在不同模式之间循环,直到需要的模式设置。这会改变端口LED颜色的意义,如下表15.4所示。
|
||||
|
||||
*表15.4 -- 模式设置*
|
||||
|
||||
<table>
|
||||
<tr><th>端口模式</th><th>LED颜色</th><th>系统状态</th></tr>
|
||||
<tr><td rowspan=6>状态</td><td>不亮</td><td>未插入网线或管理性关闭</td></tr>
|
||||
<tr><td>绿色</td><td>有链路且链路无问题</td></tr>
|
||||
<tr><td>绿色闪烁</td><td>活动的:端口在发送或接收数据</td></tr>
|
||||
<tr><td>绿色琥珀色交替闪烁</td><td>链路故障(link fault):出现可影响连通性的错误帧,以及过多的冲突、循环冗余校验(CRC),同时将对以太网的alignment及jabber问题进行检测(<a href="pdfs/EthernetErrorDescription.pdf" >以太网错误描述</a>, <a href="pdfs/EthernetErrors.pdf">以太网错误</a>)</td></tr>
|
||||
<tr><td>琥珀色</td><td>端口被生成树协议(Spanning Tree Protocol, STP)阻塞而未转发数据。<b>注意:</b>在某端口重新配置后,端口LED将保持琥珀色30秒,因为STP会检查网络拓扑有没有可能的环回。</td></tr>
|
||||
<tr><td>琥珀色闪烁</td><td>端口被STP阻塞同时没有发送或接收数据。</td></tr>
|
||||
<tr><td rowspan=2>双工</td><td>不亮</td><td>端口以半双工方式运行。</td></tr>
|
||||
<tr><td>绿色</td><td>端口以全双工方式运行。</td></tr>
|
||||
<tr><td rowspan=8>速率</td><td colspan=2>10/100及10/100/1000Mbps端口</td></tr>
|
||||
<tr><td>不亮</td><td>端口以10Mbps速率运行。</td></tr>
|
||||
<tr><td>绿色</td><td>端口以100Mbps速率运行。</td></tr>
|
||||
<tr><td>绿色闪烁</td><td>端口以1000Mbps运行。</td></tr>
|
||||
<tr><td colspan=2>SPF(小封装可插拔,small form-factor pluggable, SPF)端口</td></tr>
|
||||
<tr><td>不亮</td><td>端口以10Mbps速率运行。</td></tr>
|
||||
<tr><td>绿色</td><td>端口以100Mbps速率运行。</td></tr>
|
||||
<tr><td>绿色闪烁</td><td>端口以1000Mbps速率运行。</td></tr>
|
||||
<tr><td rowspan=5>PoE</td><td>不亮</td><td>PoE关闭。如被供电设备从交流电源取得电力,那么就算被供电设备是连接到交换机的,PoE端口LED也会不亮。</td></tr>
|
||||
<tr><td>绿色</td><td>PoE开启。端口LED只在该交换机端口供电时才亮起绿色。</td></tr>
|
||||
<tr><td>绿色和琥珀色交替亮起</td><td>因为向被供电设备提供电力会超出交换机电源功率,而将PoE禁用了。Catalyst 2960-24PC-L、2960 48PST-L、2960-48PST-S及2960-24PC-S可以提供最高370W的电力。而Catalyst 2960-24LT-L和2960-24LC-S交换机只能提供最高124W的电力。</td></tr>
|
||||
<tr><td>琥珀色闪烁</td><td>PoE因为故障而关闭。<br><b>注意:</b>在做网线不合规及加电的设备连接到PoE端口(non-compliant cabling or powered devices are connected to a PoE port)时,都会导致PoE故障。在将思科认证的IP电话、无线接入点或符合IEEE 802.3af规范的设备连接到PoE端口时,只能使用标准规范的做网线方式。必须将导致PoE故障的网线或设备从网络上移除。(Only standard-compliant cabling can be used to connect Cisco prestandard IP phones, wireless access points, or IEEE 802.3af-compliant devices to PoE ports. You must remove the cable or device that cause the PoE fault from the network.)</td></tr>
|
||||
<tr><td>琥珀色</td><td>端口的PoE已被关闭。默认PoE是开启的。</td></tr>
|
||||
</table>
|
||||
|
||||
除了要掌握这些不同颜色的意义外,重要的是掌握修复这些故障所需的做法。比如,假设正在对一台Catalyst 6500交换机进行排错,并注意到管理引擎(或交换模块)的状态LEDs是红色或不亮。在此情况,就可能是该模块脱离了其插槽,或是因为某个新模块没有正确插入到其机架上。那么建议做法就是重新插好该模块。而有些时候,还需要重启整个系统。
|
||||
|
||||
在某条链路或某个端口LED颜色不是绿色时,就往往表明某种失效或其它故障,而重要的是记住**一条链路发出绿光也并不总意味着网线是完全没有问题的**。比如,只有一根线坏掉或是一个关闭端口,就可能导致一侧显示线路绿色光而另一侧不显示绿色绿色光。这可能是因为网线出现了物理压力而引起该网线具备临界级别的功能。在这种情况下,就可以使用CLI来完成额外的派错。
|
||||
|
||||
###线缆故障排错
|
||||
|
||||
**Troubleshooting Cable Issues**
|
||||
|
||||
在对线路故障进行排错时(一层排错),因为可以直接地查看及检查网线,所以通常都是非常容易找到问题的。但是,有些时候线路问题可以是看不见的,所以就不得不完成一个系统性的排错过程,以确保问题确实是在一层当中。一个一般性建议就是在进行复杂步骤之前,先适当地对所有网线进行测试(however, sometimes cabling problems can be invisible, so you will have to engage in a systematic troubleshooting process to make sure the problem is really localised at Layer 1. A general recommendation is to properly test all cabling before engaging in a complex infrastructure implementation)。下面是一些常见的线路问题。
|
||||
|
||||
+ 有插入网线但没有连接
|
||||
+ 有插入网线且有得到连接,但那条连接的吞吐量极低
|
||||
+ 所有都工作正常,但突然没有了连接,接着又恢复正常,接着又无连接(也就是抖动,flapping)
|
||||
+ 间歇的连通性,看起来工作正常,但信号一次又一次地丢失
|
||||
|
||||
一些针对这些问题的建议测试有下面这些。
|
||||
|
||||
+ 检查交换机链路灯是否亮起
|
||||
+ 检查链路灯有没有间隙地开启和关闭
|
||||
+ 检查网线压得对不对
|
||||
+ 检查网线未有物理损坏
|
||||
+ 检查网线不是过长(这会导致信号恶化)
|
||||
+ 检查网线连接头没有问题(可能需要另外的连接头)
|
||||
+ 检查电线针脚顺序是正确的(如是铜线的话)
|
||||
|
||||
如要确认遇到的不是网线故障,最简单的做法就是换一根好的网线,在进行同样的测试。这很容易办到同时可马上解决问题,而无需在排错过程中耗费过多的时间和资源。
|
||||
|
||||
> **注意:**就算是全新的网线有时也有问题,所以不要假定一根新网线就会如预期那样起作用。
|
||||
|
||||
|
||||
###模块故障的排错
|
||||
|
||||
**Troubleshooting Module Issues**
|
||||
|
||||
大多数企业网络中用到的路由器和交换机都提供了铜质端口连接性,也提供了将不同类型的发送接收器进行板上组装的专门接口。这些发送接收器通常用于光纤连接,不过也有铜质的发送和接收器(copper-compatible transceivers)。
|
||||
|
||||
光纤连接可在很长距离上运作,同时这些特定端口通常都是模块化的,需要一个兼容的SFP(小型可插入发送和接收器),如图15.2中给出的那样。
|
||||
|
||||

|
||||
|
||||
*图15.2 -- SFP模块*
|
||||
|
||||
尽管SFP模块看起来都一样,但依据所使用的连接类型,根据下面这些参数,来选用适当的SFP模块。
|
||||
|
||||
+ 介质类型:光纤还是铜缆, optical fibre or copper
|
||||
+ 光纤类别:单模还是多模光纤(single-mode or multi-mode fibre)
|
||||
+ 带宽, bandwidth
|
||||
+ 波长, wavelength
|
||||
+ 光纤规格,core size
|
||||
+ 模带宽,modal bandwidth
|
||||
+ 运行距离,operating distance
|
||||
|
||||
> **注意:**在为网络采购收发器时,应总要对设备端口、模块类型及所使用的光纤进行检查。
|
||||
|
||||
任何时候都可将收发器插入到网络设备(比如交换机、路由器、防火墙等),或从其上拔下,而无需重启设备。在没有连接时,不会在SFP模块上看到活动,而这就是在可接触到设备时最容易排错的故障了。
|
||||
|
||||
此外,插入光纤将激活那个端口,但又因为各种不同故障而致使连通性受到影响(比如性能恶化或是间歇的连通性),或是没有连通性。此时,有着下面几种可供采行的方法。
|
||||
|
||||
+ 依据收发器的类型,检查使用的线缆类型是正确的(多模还是单模)
|
||||
+ 检查线缆是完好的,要使用那些专门的光纤测试工具
|
||||
+ 检查所使用的收发器是正确的类型
|
||||
+ 检查收发器没有硬件故障(换另一个收发器并进行测试)
|
||||
+ 依据所使用的收发器和线缆类别,检查设备端口有配置上正确的参数
|
||||
|
||||
为令到连接停机时间最低,就应检测那些插入了SFP模块的端口,以观察出现在统计信息中的可能错误。而这可通过标准监测工具完成,最常用的就是SNMP。
|
||||
|
||||
##使用命令行接口来对链路故障进行排错
|
||||
|
||||
**Using the Command Line Interface to Troubleshoot Link Issues**
|
||||
|
||||
思科IOS Catalyst交换机上,可使用好几个命令行接口命令来对一层故障进行排错。常用的命令包括`show interfaces`、`show controllers`以及`show interface [name] counters errors`命令。除了要知道这些命令,还要能解读这些命令的输出或所提供的信息。
|
||||
|
||||
`show interfaces`命令是一个提供过剩信息的强大工具,提供包括以下这些信息。
|
||||
|
||||
+ 交换机端口的管理状态
|
||||
+ 端口允许状态
|
||||
+ 介质类型(对于特定交换机及端口,for select switches and ports)
|
||||
+ 端口输入及输出数据包数目
|
||||
+ 端口缓存失效数及端口错误数
|
||||
+ 端口输入及输出错误
|
||||
+ 端口输入及输出队列丢失情况
|
||||
|
||||
下面是在一个GigabitEthernet交换端口上的`show interfaces`命令的输出。
|
||||
|
||||
<pre>
|
||||
Catalyst-3750-1#<b>show interfaces GigabitEthernet3/0/1</b>
|
||||
GigabitEthernet0/1 is up, line protocol is down <b>(notconnect)</b>
|
||||
Hardware is GigabitEthernet, address is 000f.2303.2db1 (bia 000f.2303.2db1)
|
||||
MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,
|
||||
reliability 255/255, txload 1/255, rxload 1/255
|
||||
Encapsulation ARPA, Loopback not set
|
||||
Keepalive not set
|
||||
Auto-duplex, Auto-speed, link type is auto, media type is unknown
|
||||
input flow-control is off, output flow-control is desired
|
||||
ARP type: ARPA, ARP Timeout 04:00:00
|
||||
Last input never, output never, output hang never
|
||||
Last clearing of “show interface” counters never
|
||||
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
|
||||
Queueing strategy: fifo
|
||||
Output queue: 0/40 (size/max)
|
||||
5 minute input rate 0 bits/sec, 0 packets/sec
|
||||
5 minute output rate 0 bits/sec, 0 packets/sec
|
||||
0 packets input, 0 bytes, 0 no buffer
|
||||
Received 0 broadcasts (0 multicasts)
|
||||
0 runts, 0 giants, 0 throttles
|
||||
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
|
||||
0 watchdog, 0 multicast, 0 pause input
|
||||
0 input packets with dribble condition detected
|
||||
0 packets output, 0 bytes, 0 underruns
|
||||
0 output errors, 0 collisions, 1 interface resets
|
||||
0 babbles, 0 late collision, 0 deferred
|
||||
0 lost carrier, 0 no carrier, 0 PAUSE output
|
||||
0 output buffer failures, 0 output buffers swapped out
|
||||
</pre>
|
||||
|
||||
多数思科Catalyst交换机端口默认都是`notconnect`状态,如同该命令打印输出的第一行所示。但如果网线从该端口拔出或未有正确连接,端口状态也会转换成该状态。在连接的网线有问题或是网线另一端没有插入到活动端口或设备(比如某台工作站插入交换机的端口是关闭的)时,将同样显示为`notconnect`。
|
||||
|
||||
> **注意:**在对GigabitEthernet端口排错时,若两端使用了不正确千兆接口转换器(Gigabit Interface Converters, GBICs),也会导致`notconnect`端口状态。
|
||||
|
||||
输出的第一部分是该命令打印出的第一行(也就是`[interface] is up`),表示特定接口的物理层状态。输出的第二部分(也就是`line protocol is down`)表明该接口的数据链路层状态。而如该该部分指示`up`,就意味着该接口可发送和接收保持活动信号。**记住交换机端口可能在物理层是起来的,却在数据链路层是宕掉的**,比如,当端口是一个SPAN(Switch)目的端口时,或者本地端口连接到一台CatOS交换机的一个关闭的端口时,都会这样(if this indicates an `"up"`, then it means that the interface can send and receive keepalives. Keep in mind that it is possible for the switch port to indicate that the Physical Layer is up while the Data Link Layer is down, for example, such as when the port is a SPAN destination port(for sniffer traffic) or if the local port is connected to a CatOS(older switch operating system) switch with its port disabled)。
|
||||
|
||||
输入队列(the Input queue)表明因为超出最大队列尺寸而丢弃帧的实际数量。而其中的“fushes”列对Catalyst 6000系列交换机上的SPD(selective packet discard, 选择性数据包丢弃, [Selective Packet Discard](pdfs/SelectivePacketDiscard.pdf),[Understanding Selective Packet Discard](http://www.cisco.com/c/en/us/support/docs/routers/12000-series-routers/29920-spd.html))丢弃数据包进行计数。SPD在CPU超负荷时将低优先级的数据包丢弃,从而为高优先级数据包节省下处理能力。`show interfaces`命令输出中的`flushes`计数器随SPD部分而增长,SPD对路由器IP处理队列运用一种选择性数据包丢弃策略(a selective packet drop policy)。因此SPD仅用在进程交换流量上(appliese only to process-switched traffic)。
|
||||
|
||||
总的输出丢弃数量(the total output drops)表示由于输出队列充满而丢弃的数据包数量。输出丢弃经常在正将来多个的高带宽入站链路(比如几条千兆以太网链路)的流量,交换到单个的出站低带宽链路(比如一条快速以太网)时见到。输出丢弃的增长,是因为入站和出站带宽不匹配而造成的超出流量将该接口击败造成的(this is often seen when traffic from multiple inbound high-bandwidth links(e.g., GigabitEthernet links) is being switched to a single outbound lower-bandwidth(e.g., a FastEthernet link). The output drops increment because the interface is overwhelmed by the excess traffic due to the speed mismatch between the inbound and outbound bandwidths)。
|
||||
|
||||
`show interfaces`的输出中的一些其它接口相关的可分析的,同时在一二层排错中非常有用的术语,有下面这些。
|
||||
|
||||
+ **帧数目**(frame number):该字段给出了接收到的带有不正确的CRC及大小不是整数个字节的数据包数目。这通常是由不正常功能的以太网设备(硬件错误)而导致的冲突造成的。
|
||||
+ **循环冗余校验**(CRC):该字段表示由发送设备生成的CRC与接收设备计算出的校验和不一致。这通常表示LAN上的传输错误、冲突或是系统传输不良数据。
|
||||
+ **畸形帧**(runts): 此字段表示由于比最小数据包大小还小而丢弃的包数量。在以太网段上,比64字节还小的包都被看作畸形帧。
|
||||
+ **巨大帧**(giants): 此字段表示由于比最大数据包大小还大而丢弃的包数量。在以太网段上,比起1518字节还大的数据包被看作巨大帧。
|
||||
+ **晚发冲突**(late collisions): 晚发冲突通常在网线过长或网络中有过多中继器时。冲突数目反应了因为以太网冲突而导致的重传报文数目。而这通常是由于对LAN的过度扩展造成的。
|
||||
+ **输入错误**(input errors): 该字段提供所有畸形帧、巨大帧、CRC错误帧、超出帧(overruns)及忽略数据包的总数。
|
||||
+ **输出错误**(output errors): 该字段提供了阻止数据报最后从接口发出的错误总数(this field provides the total sum of all errors that prevented the final transmission of datagrams out of the interface)。
|
||||
|
||||
除了`show interfaces`命令,命令`show interfaces [name] counters errors`也可以用来查看接口错误及促进一层的排错。下面就是命令`show interface [name] counters errors`打印出的输出。
|
||||
|
||||
<pre>
|
||||
Catalyst-3750-1#<b>show interfaces GigabitEthernet3/0/1 counters errors</b>
|
||||
Port Align-Err FCS-Err Xmit-Err Rcv-Err UnderSize
|
||||
Gi3/0/1 0 0 0 0 0
|
||||
Port Single-Col Multi-Col Late-Col Excess-Col Carri-Sen Runts
|
||||
Gi3/0/1 0 0 0 0 0 0
|
||||
Port Giants
|
||||
Gi3/0/1 0
|
||||
</pre>
|
||||
|
||||
接下来的部分对命令`show interfaces [name] counters errors`输出中的一些错误字段,以及这些字段所表示的故障或问题,进行讲述。
|
||||
|
||||
`Align-Err`字段反应了接收到的**没有以偶数个字节结束,同时有着错误CRC帧的数目**。这些错误**通常是由不匹配的双工不匹配或物理问题造成**,比如线路问题、坏端口或坏网卡造成的。在网线头一次插入端口时,一些这类错误就会发生。此外,如有集线器连接到端口,集线器上其它设备之间的冲突也会造成这些错误。
|
||||
|
||||
`FCS-Err`字段反应了有帧校验序列(Frame Check Sequence, FCS)错误的大小有效(valid-sized)、没有组帧错误的帧数目。这通常是因为物理故障,诸如网线做得不好、坏端口或者坏网卡造成的。此外,该字段下的非零值,可能表明存在双工不匹配。
|
||||
|
||||
`Xmit-Err`字段中的非零值是内部发送(Tx)缓冲器充满的表征。当有来自多个入站高带宽链路(比如多条GigabitEthernet链路)的流量正转发到单一的出站低带宽链路(比如一条FastEthernet链路)时,通常会见到这种情形。
|
||||
|
||||
字段`Rcv-Err`表示收到帧错误的总和。该计数器在接口收到诸如畸形帧、巨大帧或FCS错误帧时增长。
|
||||
|
||||
`UnderSize`字段在交换机接收到长度小于64字节的帧时增长。这通常是由故障发送设备造成的。
|
||||
|
||||
不同的`collisions`字段表示接口上的冲突。接口上的冲突通常发生在半双工以太网上,而这在现代网络中几乎是不存在的。因此,这些计数器对于全双工链路不应增长。如果这些计数器下出现了非零数值,那么通常表明存在全双工不匹配故障。当探测到全双工不匹配时,交换机会在控制台或日志中打印出类似于下面的消息。
|
||||
|
||||
```
|
||||
%CDP-4-DUPLEX_MISMATCH: duplex mismatch discovered on FastEthernet0/1 (not full duplex), with R2 FastEthernet0/0 (full duplex)
|
||||
```
|
||||
|
||||
如同将在生成树协议(Spanning Tree Protocol, STP)章节中介绍的那样,全双工不匹配可能导致在某端口连接到另一交换机时,交换网络中的STP循环。这些不匹配**可通过手动配置交换机端口的速率和双工方式予以解决。**
|
||||
|
||||
当以太网控制器每次想要在半双工连接上发送数据时,`Carri-Sen`(载波侦听,carrier sense)都会增长。控制器侦听线路并确保在传输前线路是空闲的。该字段下的非零值表示接口运行于半双工模式。这对半双工来说是正常的。
|
||||
|
||||
因为双工不匹配或其它物理层问题,比如坏网线、坏端口以及所连接设备上的坏网卡,也可能导致`Runts`字段下可以看到非零值。畸形帧是指所接收到的有着错误的CRC、小于最小IEEE 802.3帧大小,也就是以太网的64字节的那些帧。
|
||||
|
||||
最后,当接收到的帧超过IEEE 802.3最大帧大小,非巨大以太网(non-jumbo Ethernet, [Jumbo frame](https://en.wikipedia.org/wiki/Jumbo_frame), [Linux_Jumbo_frame](pdfs/Linux_Jumbo_frame.pdf))的1518字节时,并有着坏的FCS时,`Giants`计数器就会增长。对于那些连接到某台工作站的端口或接口,该字段下的非零数值典型地是由所连接设备上的坏网卡导致的。不过,对于那些连接到另一交换机(比如通过中继链路)的端口或接口,如采用的是802.1Q封装方式,则该字段将会包含一个非零数值。**在802.1Q下,其打标记机制(the tagging mechanism)对帧进行了修改,因为中继设备插入了一个4字节的标记,并随后再度计算了FCS。**
|
||||
|
||||
对已有最大以太网帧大小的帧插入4字节后,就构成了一个1522字节的帧,那么接收设备就会将其看着是一个幼小巨大帧(a baby giant frame)。因此,尽管交换机仍将处理这些帧,该计数器将增长并包含一个非零值。为解决这个问题,802.3委员会建立一个名为802.3ac的小组来将以太网最大大小扩展到1522字节;这样以来,采行802.1Q中继时就不常见到该字段下的非零值了。
|
||||
|
||||
类似与`show interfaces`及`show interfaces <name> counters errors`命令所提供的信息,命令`show controllers ethernet-controller <interface>`也可以用来现实流量计数及错误计数信息。`show controllers ethernet-controllers <interface>`命令的输出如下所示。
|
||||
|
||||
```
|
||||
Catalyst-3750-1#show controllers ethernet-controller GigabitEthernet3/0/1
|
||||
Transmit GigabitEthernet3/0/1 Receive
|
||||
4069327795 Bytes 3301740741 Bytes
|
||||
559424024 Unicast frames 376047608 Unicast frames
|
||||
27784795 Multicast frames 1141946 Multicast frames
|
||||
7281524 Broadcast frames 1281591 Broadcast frames
|
||||
0 Too old frames 429934641 Unicast bytes
|
||||
0 Deferred frames 226764843 Multicast bytes
|
||||
0 MTU exceeded frames 137921433 Broadcast bytes
|
||||
0 1 collision frames 0 Alignment errors
|
||||
0 2 collision frames 0 FCS errors
|
||||
0 3 collision frames 0 Oversize frames
|
||||
0 4 collision frames 0 Undersize frames
|
||||
0 5 collision frames 0 Collision fragments
|
||||
0 6 collision frames
|
||||
0 7 collision frames 257477 Minimum size frames
|
||||
0 8 collision frames 259422986 65 to 127 byte frames
|
||||
0 9 collision frames 51377167 128 to 255 byte frames
|
||||
0 10 collision frames 41117556 256 to 511 byte frames
|
||||
0 11 collision frames 2342527 512 to 1023 byte frames
|
||||
0 12 collision frames 5843545 1024 to 1518 byte frames
|
||||
0 13 collision frames 0 Overrun frames
|
||||
0 14 collision frames 0 Pause frames
|
||||
0 15 collision frames
|
||||
0 Excessive collisions 0 Symbol error frames
|
||||
0 Late collisions 0 Invalid frames, too large
|
||||
0 VLAN discard frames 18109887 Valid frames, too large
|
||||
0 Excess defer frames 0 Invalid frames, too small
|
||||
264522 64 byte frames 0 Valid frames, too small
|
||||
99898057 127 byte frames
|
||||
76457337 255 byte frames 0 Too old frames
|
||||
4927192 511 byte frames 0 Valid oversize frames
|
||||
21176897 1023 byte frames 0 System FCS error frames
|
||||
127643707 1518 byte frames 0 RxPortFifoFull drop frames
|
||||
264122631 Too large frames
|
||||
0 Good (1 coll) frames
|
||||
0 Good (>1 coll) frames
|
||||
```
|
||||
|
||||
> **注意:**根据该命令执行所在平台的不同,上面的输出会略有不同。比如,Catalyst 3650系列交换机还包含了一个`Discarded frames`字段,该字段显示因资源不可用而导致的放弃传输尝试的帧总数(a `Discarded frames` field, which shows the total number of frames whose transmission attempt is abandoned due to insufficient resources)。该字段中出现了较大的数值就典型地表明存在网络壅塞故障(a network congestion issue)。在上面的输出中,应探究一下`RxPortFifoFull drop`帧字段,该字段表示因为入口队列充满而丢弃的接口所接收到的帧总数(the `RxPortFifoFull drop` frame field, which indicates the total number of frames received on an interface that are dropped because the ingress queue is full)。
|
||||
|
||||
###端口配置排错
|
||||
|
||||
**Troubleshooting Port Configuration**
|
||||
|
||||
各台网络设备都可以不同方式进行配置。多数类型的错误配置都产生网络中的问题,包括下面这些。
|
||||
|
||||
+ 极低的流量吞吐,poor throughput
|
||||
+ 没有连通性,lack of connectivity
|
||||
|
||||
某台设备可以连接到网络,有着网络信号,同时可以与Internet及其它设备通信,却有着以持续的、易于重现方式的低通信性能。这种情况可能在正常运行中,包括与网络其它部分进行文件传输或其它类型的通信中出现。
|
||||
|
||||
在重大配置问题下,该故障可能以完全的连通性缺失,包括特定设备端口上连接信号灯不亮的形式出现(with major configuration issues, the issue might manifest as lack of connectivity, including no link lights on the specific device ports)。有时连接灯亮起但仍然没有任何类型的连通性。这显示在网线上有信号,也就是说没有网线问题,而是在端口上的端口问题故障或其它问题。这就要对设备的配置进行问题调查。
|
||||
|
||||
配置端口时有几项不同的设置,包括下面这些。
|
||||
|
||||
+ 速率,speed
|
||||
+ 双工,duplex
|
||||
+ 封装/VLAN, encapsulation/VLAN
|
||||
|
||||
大多数的这些参数都必须在链路两侧保持一致,要么通过手动配置,或是通过开启端口自动配置。如能探测到,自动配置方式将在链路上发送协商数据包,来探测另一端的各种能力,并就两端设备的最佳参数达成一致,以建立最优传输。问题在于有的时候自动配置并不会按照需求选择出最佳参数,所以就要对此进行检查并针对各种特定情形对端口进行手动配置。
|
||||
|
||||
如正对各个端口进行手动配置,那么要注意的第一个参数,就是接口速率。在**链路两端上的接口速率必须一致**。如在一侧配置不正确,链路就可以不会运作。另一个有关的设置就是**端口双工方式**,这可以配置为半双工或全双工。**可以在一侧配置为半双工、另一侧配置为全双工**,这样做尽管链路也会运行,但通过流量将极大地受到影响,因为两侧都期望以不同方式处理通信。同时这样做也会导致对那条链路上的传输造成影响的冲突。为令到流量能够尽可能有效地进行发送,请确保两侧都使用同样的双工设置。
|
||||
|
||||
而如在企业级环境下运营(if you are operating in an enterprise-level environment),就可能需要使用不同的VLANs对流量进行分段。所有交换机在这方面都必须准确配置,如此一来所有交换机端口都分配到正确的VLAN中。而如直接将配置到使用不同VLAN IDs的端口直接连接,那么就算物理层上显示没有故障,二层上的通讯仍将遭到破坏。
|
||||
|
||||
通过对上述的端口配置选项进行检查,以及确保链路两端的所有参数都保持同步,那么就可以肯定所连接设备的连通性及流量吞吐都将是最优的。
|
||||
|
||||
##VLANs及中继排错
|
||||
|
||||
**Troubleshooting VLANs and Trunking**
|
||||
|
||||
先前的小节中,我们谈到可用用于物理层故障排除的三个命令行命令的使用。本节将给出一些用于对VLAN内倍连通性故障进行鉴别及排错的常见方法(the use of three CLI commands that can be used for troubleshooting Physical Layer issues. this section describes some common approaches to identifying and troubleshooting intra-VLAN connectivitiy issues)。VLAN内部连通性故障的一些相对来讲更为常见的原因,有下面这些。
|
||||
|
||||
+ 双工不匹配,duplex mismatches
|
||||
+ 坏的网卡或网线,bad NIC or cable
|
||||
+ 壅塞,congestion
|
||||
+ 硬件故障,hardware issues
|
||||
+ 软件故障, software issues
|
||||
+ 资源过度预订, resource oversubscription, [Cisco MDS交换机端口组速率模式介绍](pdfs/EMC_Community_Network-ECN_Cisco_MDS交换机端口组速率模式介绍.pdf)
|
||||
+ 配置问题,configuration issues
|
||||
|
||||
**双工不匹配**可导致甚低网络性能及连通性。尽管已有对自动协商的改进,同时采行自动协商被认为是有效的做法,双工不匹配仍有可能发生。比如,在网卡设置为100/Full,而交换机端口是自动协商时,网卡将保持其100/Full设置,但交换机端口将被设置为100/Half。而与此相反,也会出现双工不匹配的问题。也就是网卡设置自动协商,交换机端口设置为100/Full。此时,网卡将自动协商为100/Half,而交换机端口保持其静态的100/Full配置,导致双工不匹配。
|
||||
|
||||
因此好的做法就是在那些可以手动设置的地方,对10/100以太网连接的速率和双工手动进行设置,以避免自动协商带来的双工不匹配问题。**双工不匹配可能不仅会对直接连接到交换机上的用户造成影响,还可能对有着不匹配双工设置的交换机间连接上通过的网络流量造成影响。**使用命令`show interface`就可以查看到端口的接口速率和双工设置。
|
||||
|
||||
>**注意:**因为Catalyst交换机仅支持1Gbps链路全双工,所以对于GigabitEthernet连接,双工问题并不常见。
|
||||
|
||||
思科IOS软件中的多个计数器都可用来鉴别潜在**坏网卡或网线问题**。通过对不同的`show`命令中的一些计数器的检查,来识别网卡或网线问题。比如,假设交换机端口计数器显示带有无效CRC或FCS错误的帧数持续增长,就有极大可能是因为工作站或机器的坏网卡,以及坏的网线。
|
||||
|
||||
网络壅塞同样可能引起交换网络中的间隙性连通故障。VLAN超载的第一个表象就是某端口上的接收或发送缓冲过度预订(oversubscribed)。此外,端口上过多的帧丢弃也是网络壅塞的指标。而网络壅塞的常见原因,就是对主干连接的聚合带宽需求估计不足。那么,**壅塞问题就可以通过配置以太网信道或往现有以太网信道中加入更多的端口,得到解决。**同时网络壅塞又是连通性故障的常见原因,同时重要的是要知道**交换机本身可能经历壅塞问题,而交换机本身的壅塞问题有可能会对网络性能产生类似的影响**(a common cause of network congestion is due to underestimating aggregate bandwidth requirements for backbone connections. In such cases, congestion issues can be resolved by configuring EtherChannels or by adding additional ports to existing EtherChannels. While network congestion is a common cause of connectivity issues, it is also important to know that the switch itself can experience congestion issues, which can have a similar impact on network performance)。
|
||||
|
||||
**交换机内部壅塞**,有限的交换机带宽可能导致壅塞问题,由此造成的壅塞可能对网络性能造成极为严重的影响。在LAN交换中,带宽是指交换机内部交换线路([the switch fabric](pdfs/the_Definition_of_a_Switch_Fabric-EtherealMind.pdf))的传输能力。因此,如果交换线路的传输能力是5Gbps, 而要尝试将7Gbps的流量通过交换机传输,结果就是数据包丢失及差强人意的网络性能了。在那些所有端口的聚合传输容量可能超出总的骨干容量的超出预订平台上,这是一个常见的问题(this is a common issue in oversubscribed platforms, where the aggregate capacity of all ports can exceed the totoal backplane capacity)。
|
||||
|
||||
在交换LAN中,**硬件故障**也可能引起连通性问题。这类问题的实例包括交换机的坏端口或坏模块。尽管在可能的情况下可以通过查看诸如LEDs等物理指示器来对这类故障进行排错,某些时候这类问题是难于排错及诊断的。在怀疑存在潜在的硬件故障的多数情况下,都应需求技术支持中心(Technical Assistance Centre, TAC)的支持。
|
||||
|
||||
相比上面这些问题,软件缺陷(software bugs)就更难于分辨出来,因为软件缺陷引起难于对其进行排错的偏差(deviation)。在怀疑有软件缺陷导致连通性问题时,应该就发现的问题,联系技术支持中心(TAC)。此外,如在控制台或日志中有打印出错误消息,就也可以使用思科提供的一些在线工具,来采取一些替代方法(implement a workaround)或是得到某个已经解决该问题并得到验证的软件版本的建议。
|
||||
|
||||
与其它硬件设备相比,交换机有着受限的资源,比如物理内存。在这些资源过度使用时,就会导致严重的性能问题。而像是高CPU使用率这样的问题,就可能对交换机及网络性能造成极为严重的影响。
|
||||
|
||||
最后,如同其它技术一样,**不正确的配置同样会直接或间接地造成连通性问题**。比如,根桥放置粗劣就会导致慢速用户连通性。而将一台不当配置的交换机直接加入到生产网络,则会导致一些或全部用户的网络连接完全中断(the poor placement of the Root Bridge may result in slow connectivity for users. Directly integrating or adding an incorrectly configured switch into the production network could result in an outright outage for some or all users)。下面的小节对一些常见的VLAN相关故障、其可能的原因,以及为排除这些故障可采取的做法,进行了讲解。
|
||||
|
||||
###动态VLAN通告排错
|
||||
|
||||
**Troubleshooting Dynamic VLAN Advertisements**
|
||||
|
||||
思科Catalyst交换机使用VLAN中继协议(VLAN Trunk Protocol, VTP)来在交换域中传播VLAN信息(propagate VLAN information dynamically throughout the switched domain)。VTP是一个思科专有的二层报文发送协议,用于管理位处同一VTP域中的交换机上VLANs的添加、删除及重命名。
|
||||
|
||||
某台交换机在加入到VTP域时无法动态接收任何VLAN信息的原因有好几个。下面是一些常见的原因。
|
||||
|
||||
+ 二层中继配置错误,Layer 2 trunking misconfiguration
|
||||
+ 不正确的VTP配置,incorrect VTP configuration
|
||||
+ 配置修订号,configuration revision number
|
||||
+ 物理层故障, Physical Layer issues
|
||||
+ 软件或硬件故障或缺陷,software or hardware issues or bugs
|
||||
+ 交换机性能问题, switch performance issues
|
||||
|
||||
为令到交换机采用VTP交换VLAN信息,交换机间必须建立中继链路。思科IOS交换机支持ISL和802.1Q两种中继机制。尽管一些交换机默认采用ISL这种思科专有中继机制,不过当前思科IOS Catalyst交换机默认都采用802.1Q了。在提供交换机间中继时,手动指定中继封装协议被认为是好的做法。这是通过在将链路配置为中继端口时,使用接口配置命令`switchport trunk encapsulation [isl|dot1q]`完成的。
|
||||
|
||||
可用于对中继连通性问题进行排错的命令有好几个。可使用`show interfaces`命令来检查基本的端口运行及管理性状态(you can use the `show interfaces` command to verify basic port operational and administrative status)。此外,可通过在`show interfaces`命令后追加`trunk`或`errors`关键字来进行额外排错和检查。 而命令`show interfaces [name] counters trunk`则可用于查看中继端口上传输和接收到的帧数目。
|
||||
|
||||
该命令的输出还包括了封装错误数,而封装错误数可用于检查802.1Q和ISL,以及中继封装不匹配数目,如下面的输出所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show interfaces FastEthernet0/12 counters trunk
|
||||
Port TrunkFramesTx TrunkFramesRx WrongEncap
|
||||
Fa0/12 1696 32257 0
|
||||
```
|
||||
|
||||
参考上面的输出,可以反复执行该命令,以确保Tx及Rx栏是持续增长的,并以此完成更多的排错。比如,假设该交换机没有发出任何帧,则该接口就可能并未配置为中继接口,或者其是宕掉的或关闭的(or it might be down or disabled)。而如果Rx栏没有增长,则可能是远端交换机未有正确配置。
|
||||
|
||||
用于对可能的二层错误配置进行排错的另一个命令,就是`show interfaces [name] trunk`。该命令的输出包含了中继封装协议及模式、802.1Q的原生VLAN、允许通过中继链路VLANs、VTP域中活动的VLANs,以及被修剪掉的VLANs(the output of `show interfaces [name] trunk` includes the trunking encapsulation protocol and mode, the native VLAN for 802.1Q, the VLANs that are allowed to traverse the trunk, the VLANs that are active in the VTP domain, and the VLANs that are pruned)。**一个VLAN传播的常见问题,就是上游交换机已通过使用接口配置命令`switchport trunk allowed vlan`,被配置为对某些VLANs进行过滤。**命令`show interfaces [name] trunk`的输出如下所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show interfaces trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/12 desirable n-802.1q trunking 1
|
||||
Fa0/13 desirable n-802.1q trunking 1
|
||||
Fa0/14 desirable n-isl trunking 1
|
||||
Fa0/15 desirable n-isl trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/12 1-4094
|
||||
Fa0/13 1-4094
|
||||
Fa0/14 1-4094
|
||||
Fa0/15 1-4094
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/12 1-4
|
||||
Fa0/13 1-4
|
||||
Fa0/14 1-4
|
||||
Fa0/15 1-4
|
||||
Port Vlans in spanning tree forwarding state and not pruned
|
||||
Fa0/12 1-4
|
||||
Fa0/13 none
|
||||
Fa0/14 none
|
||||
Fa0/15 none
|
||||
```
|
||||
|
||||
**另一个常见中继错误配置故障就是原生VLAN不匹配。**在配置802.1Q中继链路时,中继链路两端的原生VLAN必须匹配;否则该链路便不会工作。如存在原生VLAN不匹配,STP就会将该端口置为端口VLAN ID不一致状态(a port VLAN ID(PVID) inconsistent state),且不会在该链路上进行转发。在此情况下,将有类似于下面的消息在控制台或日志中打印出来。
|
||||
|
||||
```
|
||||
*Mar 1 03:16:43.935: %SPANTREE-2-RECV_PVID_ERR: Received BPDU with inconsistent peer vlan id 1 on FastEthernet0/11 VLAN2.
|
||||
*Mar 1 03:16:43.935: %SPANTREE-2-BLOCK_PVID_PEER: Blocking FastEthernet0/11 on VLAN0001. Inconsistent peer vlan.
|
||||
*Mar 1 03:16:43.935: %SPANTREE-2-BLOCK_PVID_LOCAL: Blocking FastEthernet0/11 on VLAN0002. Inconsistent local vlan.
|
||||
*Mar 1 03:16:43.935: %SPANTREE-2-RECV_PVID_ERR: Received BPDU with inconsistent peer vlan id 1 on FastEthernet0/12 VLAN2.
|
||||
*Mar 1 03:16:43.935: %SPANTREE-2-BLOCK_PVID_PEER: Blocking FastEthernet0/12 on VLAN0001. Inconsistent peer vlan.
|
||||
*Mar 1 03:16:43.939: %SPANTREE-2-BLOCK_PVID_LOCAL: Blocking FastEthernet0/12 on VLAN0002. Inconsistent local vlan.
|
||||
```
|
||||
|
||||
尽管STP排错将在本书后面进行讲解,该不一致状态仍可通过使用`show spanning-tree`命令进行查证,如下面所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show spanning-tree interface FastEthernet0/11
|
||||
Vlan Role Sts Cost Prio.Nbr Type
|
||||
------------------- ---- --- -------- -------- ----------------
|
||||
VLAN0001 Desg BKN* 19 128.11 P2p *PVID_Inc
|
||||
VLAN0002 Desg BKN* 19 128.11 P2p *PVID_Inc
|
||||
```
|
||||
|
||||
如已经查明该中继链路确实是正确配置,及两台交换机间是可运作的,接下来就应对VTP配置参数进行检查了。这些参数包括VTP域名、正确的VTP模式及VTP口令,如对该VTP域配置了某个参数,就要使用相应的`show vtp status`及`show vtp password`命令。`show vtp status`命令的输出如下所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show vtp status
|
||||
VTP Version : running VTP2
|
||||
Configuration Revision : 0
|
||||
Maximum VLANs supported locally : 1005
|
||||
Number of existing VLANs : 8
|
||||
VTP Operating Mode : Server
|
||||
VTP Domain Name : TSHOOT
|
||||
VTP Pruning Mode : Enabled
|
||||
VTP V2 Mode : Enabled
|
||||
VTP Traps Generation : Disabled
|
||||
MD5 digest : 0x26 0x99 0xB7 0x93 0xBE 0xDA 0x76 0x9C
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
在应用`show vtp status`命令时,要确保交换机使用同一版本的VTP。默认情况下,Catalyst交换机允许VTP版本1。而运行VTP版本1的交换机是不能加入到VTP版本2的域中的。而如某交换机不兼容VTP版本2, 那么就要使用全局配置命令`vtp version`,将所有VTP版本2的交换机配置为运行版本1。
|
||||
|
||||
> **注意:**如在服务器上修改了VTP版本,那么此改变将自动传播到VTP域中的客户端交换机。
|
||||
|
||||
VTP客户端/服务器(clinet/server)或服务器/服务器(server/server)设备上的VTP传播是开启的。而如果在某台交换机上VTP是关闭的(也就是透明模式),那么该交换机将不会经由VTP动态地接收VLAN信息。不过,要留意**VTP版本2的透明模式交换机,将在其中继端口转发出接收到的VTP通告,而充当VTP中继。**就算VTP版本不一样,该过程也会照常进行。域中交换机上的VTP域名称也应保持一致。
|
||||
|
||||
最后,`show vtp status`命令的输出也包含了用于认证目的的MD5散列值。该散列值是从VTP域名称和密码生成的,域中所有交换机上的该散列值应是一致的。而如在这些交换机上的域名称和密码不同,则计算出的MD5也会不同。而如域名称或密码不同,那么`show vtp status`命令就会示出一条MD5摘要校验和不匹配(an MD5 digest checksum mismatch)消息,如下面的输出所示。
|
||||
|
||||
<pre>
|
||||
Cat-3550-1#<b>show vtp status</b>
|
||||
VTP Version : running VTP2
|
||||
Configuration Revision : 0
|
||||
Maximum VLANs supported locally : 1005
|
||||
Number of existing VLANs : 8
|
||||
VTP Operating Mode : Server
|
||||
VTP Domain Name : TSHOOT
|
||||
VTP Pruning Mode : Enabled
|
||||
VTP V2 Mode : Enabled
|
||||
VTP Traps Generation : Disabled
|
||||
MD5 Digest : 0x26 0x99 0xB7 0x93 0xBE 0xDA 0x76 0x9C
|
||||
<b>*** MD5 digest checksum mismatch on trunk: Fa0/11 ***</b>
|
||||
<b>*** MD5 digest checksum mismatch on trunk: Fa0/12 ***</b>
|
||||
...
|
||||
[Truncated Output]
|
||||
</pre>
|
||||
|
||||
最后,在应用VTP时,**配置修订号可能会造成严重破坏。VTP域中的交换机使用配置修订号来保持对域中最新信息的跟踪**(the configuration revision number can wreak havoc when using VTP. Switches use the configuration revision number to keep track of the most recent information in the VTP domain)。域中所有交换机都将其前一次从一条VTP通告中收听到的配置修订号存储起来,同时在每次接收到新信息时该号码都被增加。而在任何交换机接收到带有高于其自身配置修订号的通告报文时,都将覆写任何存储的VLAN信息,并将其自身存储的VLAN信息与所接收到的通告报文中的信息进行同步。
|
||||
|
||||
因此,如想知道为何加入到VTP域中的交换机没有接收任何的VLAN信息,那么可能是该交换机已有一个较高的配置修订号,而导致所有其它交换机覆写了它们的本地VLAN信息,并将本地VLAN信息替换成了接收自新交换机的通告报文中的VLAN信息。为避免此种情形,**在将新的交换机加入到某VTP域之前,总是要确保其配置修订号被设置为0。**这可以通过在该交换机上修改VTP模式或修改VTP域名称完成。配置修订号在命令`show vtp status`的输出中有包含。
|
||||
|
||||
###VLAN内部端到端连接丢失
|
||||
|
||||
**Troubleshooting Loss of End-to-End Intra-VLAN Connectivity**
|
||||
|
||||
某个VLAN中端到端连通性丢失有好几个原因。而最常见的原因包括下面这些。
|
||||
|
||||
+ 物理层故障,Physical Layer issues
|
||||
+ VTP修剪,VTP pruning
|
||||
+ VLAN中继链路过滤,VLAN trunk filtering
|
||||
+ 新的交换机,new switches
|
||||
+ 交换机性能问题,switch performance issues
|
||||
+ 网络壅塞, network congestion
|
||||
|
||||
+ 软件或硬件问题或缺陷,software or hardware issues or bugs
|
||||
|
||||
|
||||
> **注意:**为简明扼要地讲解,这里只会对中继、VTP修剪、以及往域内新加入交换机三个方面进行说明。软件或硬件问题或缺陷及交换机性能问题在本书中已有说明。而物理层排错在本模块早前已经进行了讲解。
|
||||
|
||||
|
||||
**VTP修剪在没有本地端口属于某些VLANs时,将那些VLANs从本地交换机的VLAN数据库中移除。**VTP修剪通过消除不必要的广播、多播及通过网络泛洪的那些未知流量,而提升中继链路效率(VTP pruning increases the efficiency of trunks by eliminating unnecessary Broadcast, Multicast, and unknown traffic from being flooded across the network)。
|
||||
|
||||
尽管VTP修剪是一项值得部署的特性,但不正确的配置或是部署可能导致端到端连通性的丢失。应仅在客户端/服务器环境中开启(in client/server environments)。在包含透明模式交换机的网络中应用修剪,就可能造成连通性丢失。如网络中有一或多台的交换机处于VTP透明模式,就应该要么对整个VTP域全局关闭修剪,否则就要通过在适当的接口下,使用接口配置命令`switchport trunk pruning vlan`, 以确保到上游的透明模式交换机中继链路上的VLANs都无资格修剪(也就是它们在这些链路上不被修剪,ensure that all VLANs on the trunk link(s) to the upstream transparent mode switch(es) are pruning ineligible, i.e., they are not pruned,using the `switchport trunk pruning vlan` interface configuration command under the applicable interfaces)。
|
||||
|
||||
**对放行的VLANs及中继状态进行检查**
|
||||
|
||||
**Verify Allowed VLANs and Trunk Status**
|
||||
|
||||
除了VTP修剪外,交换机中继链路上对VLANs的不正确过滤,也可能导致端到端VLAN连通性的丢失。**默认允许所有VLANs通过所有中继链路;**但是思科IOS软件允许管理员通过使用接口配置命令`switchport trunk allowed vlan`,在指定中继链路上选择性地移除(或加入)VLANs。可以使用命令`show interfaces [name] trunk`及`show interfaces [name] switchport`,来查看中继链路上被修剪和限制的VLANs。作为检查某个中继端口上放行VLANs最容易的方式,命令`show interfaces [name] trunk`的输出如下所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show interfaces trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/1 on 802.1q trunking 1
|
||||
Fa0/2 on 802.1q trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/1 1,10,20,30,40,50
|
||||
Fa0/2 1-99,201-4094
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/1 1,10,20,30,40,50
|
||||
Fa0/2 1,10,20,30,40,50,60,70,80,90,254
|
||||
Port Vlans in spanning tree forwarding state and not pruned
|
||||
Fa0/1 1,10,20,30,40,50
|
||||
Fa0/2 1,40,50,60,70,80,90,254
|
||||
```
|
||||
|
||||
同样要检查中继链路上通告的正确VLANs。在中继链路上放行的不适当VLANs可能引起功能缺失或安全问题。也想要确保中继链路两端有着同样的放行VLANs(Inproper VLANs allowed on the link can lead to a lack of functionality or security issues. Also, you want to make sure that the same VLANs are allowed on both ends of a trunk)。
|
||||
|
||||
>**注意:**在将另外的需要在某条中继链路上放行的VLAN(s)加入进去时,应非常谨慎地不要忘记关键字`add`。比如,在已经配置了`switchport trunk allowed vlan 10, 20`,而打算同样放行VLAN 30时,就需要输入命令`switchport trunk allowed vlan add 30`。而如只是简单地配置`switchport trunk allowed vlan 30`,那么先前所允许的VLANs 10和20就会从中继链路上移除,这将导致VLANs 10和20的通信中断。
|
||||
|
||||
由命令`show interfaces trunk`命令所提供的另一重要信息,就是中继端口状态。中继端口状态信息确认该中继链路是否形成,同时必须要在链路两端对此进行检查。如该端口未处于“中继”模式,此时最重要的就是必须对端口中继运作模式(the mode of operation, o/auto等)进行检查,看看在该模式下是否能与链路另一端形成中继状态。
|
||||
|
||||
**检查封装类型**
|
||||
|
||||
**Verify Encapsulation Type**
|
||||
|
||||
解决中继故障的另一重要步骤,就是查明中继链路两端所配置的正确封装类型。大多数思科交换机都允许ISL及802.1Q封装类型。而尽管大多数现代网络都是设计使用dot1Q, 仍然可能存在一些网络优先使用ISL的情形。封装类型是通过使用接口配置命令`switchport trunk encapsulation <type>`配置的。而可用于查看封装类型的命令如下。
|
||||
|
||||
+ `show interfaces trunk`
|
||||
+ `show interfaces <number> switchport`
|
||||
|
||||
在某个已被静态配置为802.1Q中继链路端口上的`show interfaces [name] switchport`命令的输出如下所示。
|
||||
|
||||
```
|
||||
Cat-3550-2#show interfaces FastEthernet0/7 switchport
|
||||
Name: Fa0/7
|
||||
Switchport: Enabled
|
||||
Administrative Mode: trunk
|
||||
Operational Mode: trunk
|
||||
Administrative Trunking Encapsulation: dot1q
|
||||
Operational Trunking Encapsulation: dot1q
|
||||
Negotiation of Trunking: On
|
||||
Access Mode VLAN: 1 (default)
|
||||
Trunking Native Mode VLAN: 1 (default)
|
||||
Administrative Native VLAN tagging: enabled
|
||||
Voice VLAN: none
|
||||
Administrative private-vlan host-association: none
|
||||
Administrative private-vlan mapping: none
|
||||
Administrative private-vlan trunk native VLAN: none
|
||||
Administrative private-vlan trunk native VLAN tagging: enabled
|
||||
Administrative private-vlan trunk encapsulation: dot1q
|
||||
Administrative private-vlan trunk normal VLANs: none
|
||||
Administrative private-vlan trunk associations: none
|
||||
Administrative private-vlan trunk mappings: none
|
||||
Operational private-vlan: none
|
||||
Trunking VLANs Enabled: 3,5,7
|
||||
Pruning VLANs Enabled: 2-8
|
||||
Capture Mode Disabled
|
||||
Capture VLANs Allowed: ALL
|
||||
Protected: false
|
||||
Unknown unicast blocked: disabled
|
||||
Unknown multicast blocked: disabled
|
||||
Appliance trust: none
|
||||
```
|
||||
|
||||
如之前小节所说到的,网络中一台新交换机的加入,可能导致管理域中VLAN信息的丢失(the integration of a new switch into the network can result in a loss of VLAN information in the management domain)。而此VLAN信息丢失又可能导致同一VLAN中设备间连通性的丢失。所以在将新交换机加入到LAN之前,一定要确保其配置修订号被重置到0。
|
||||
|
||||
###使用“show vlan”命令
|
||||
|
||||
**Using the "show vlan" Command**
|
||||
|
||||
除了在前面几个小节中介绍的那些命令外,还有一些用于对VLAN配置进行检查和排错的有用思科IOS软件的命令。最常用到的VLAN检查和排错命令之一就是`show vlan`命令了。该命令显示管理域内所有VLANs的参数,如下面的输出所示。
|
||||
|
||||
```
|
||||
Cat-3550-1#show vlan
|
||||
VLAN Name Status Ports
|
||||
---- -------------------------------- --------- -------------------------------
|
||||
1 default active Fa0/11, Fa0/12,
|
||||
Fa0/13, Fa0/14,
|
||||
Fa0/20, Fa0/21,
|
||||
Fa0/22, Fa0/23,
|
||||
Fa0/24
|
||||
150 VLAN_150 active Fa0/2, Fa0/3, Fa0/4,
|
||||
Fa0/5, Fa0/6, Fa0/7,
|
||||
Fa0/8, Fa0/9, Fa0/10
|
||||
160 VLAN_160 active Fa0/15, Fa0/16,
|
||||
Fa0/17, Fa0/18,
|
||||
Fa0/19
|
||||
170 VLAN_170 active Gi0/1, Gi0/2
|
||||
1002 fddi-default active
|
||||
1003 token-ring-default active
|
||||
1004 fddinet-default active
|
||||
1005 trnet-default active
|
||||
VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode
|
||||
---- ----- ---------- ----- ------ ------ -------- ---- --------
|
||||
1 enet 100001 1500 - - - - -
|
||||
150 enet 100150 1500 - - - - -
|
||||
160 enet 100160 1500 - - - - -
|
||||
170 enet 100170 1500 - - - - -
|
||||
1002 fddi 101002 1500 - - - - -
|
||||
1003 tr 101003 1500 - - - - -
|
||||
1004 fdnet 101004 1500 - - - ieee -
|
||||
1005 trnet 101005 1500 - - - ibm -
|
||||
Trans1 Trans2
|
||||
------ ------
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
0 0
|
||||
Remote SPAN VLANs
|
||||
-------------------------------------------------------------------
|
||||
Primary Secondary Type Ports
|
||||
------- --------- ----------------- -------------------------------
|
||||
```
|
||||
|
||||
该命令打印出所有可用的VLANs,以及所分配到每个单独VLANs的那些端口。该命令的输出所包含的端口仅是接入端口,且不管这些端口是否开启或宕掉,都会显示出来。该命令输出不包括中继链路,因为这些输出属于所有所有VLANs。`show vlan`命令还提供了RSPAN(Remote Switch Port ANalyser, 远程交换机端口分析器) VLANs, 以及交换机上私有VLAN(Private VLAN, PVLAN, 这是一个CCNP考点)的信息。`show vlan`命令还可以带上一些额外关键字来使用,以提供更具体的信息。下面的输出显示了可与该命令一起使用的所支持的附加关键字。
|
||||
|
||||
```
|
||||
Cat-3550-1#show vlan ?
|
||||
brief VTP all VLAN status in brief
|
||||
id VTP VLAN status by VLAN id
|
||||
ifindex SNMP ifIndex
|
||||
name VTP VLAN status by VLAN name
|
||||
private-vlan Private VLAN information
|
||||
remote-span Remote SPAN VLANs
|
||||
summary VLAN summary information
|
||||
| Output modifiers<cr>
|
||||
```
|
||||
|
||||
`brief`字段打印所有活动VLANs的简要信息。此命令的输出与上面的相同,唯一的区别就是省掉了后两个部分。`id`字段提供了和`show vlan`一样的信息,但如下面的输出所示,只包含特定VLAN的信息。
|
||||
|
||||
```
|
||||
Switch-1#show vlan id 150
|
||||
VLAN Name Status Ports
|
||||
---- -------------------------------- --------- --------------------
|
||||
150 VLAN_150 active Fa0/1, Fa0/2, Fa0/3,
|
||||
Fa0/4, Fa0/5, Fa0/6,
|
||||
Fa0/7, Fa0/8, Fa0/9,
|
||||
Fa0/10
|
||||
VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode
|
||||
---- ----- ---------- ----- ------ ------ -------- ---- --------
|
||||
150 enet 100150 1500 - - - - -
|
||||
Trans1 Trans2
|
||||
------ ------
|
||||
0 0
|
||||
0 0
|
||||
Remote SPAN VLAN
|
||||
----------------
|
||||
Disabled
|
||||
Primary Secondary Type Ports
|
||||
------- --------- ----------------- --------------------------------
|
||||
```
|
||||
|
||||
VLAN与属于该VLAN的接入端口一样,再度包含在了输出中。中继端口因为是属于所有VLANs,而不包含在输出中。额外信息包括了VLAN MTU、RSPAN配置(如适用),以及PVLAN配置参数(如适用)。
|
||||
|
||||
`name`字段允许指定VLAN名称而不是其ID。该命令打印与`show vlan id <number>`命令同样的信息。`ifindex`字段现实VLAN的SNMP IfIndex(如适用),而`private-vlan`及`remote-span`字段打印相应的PVLAN及RSPAN配置信息。最后, `summary`字段打印管理域(the management domain)中活动的VLANs数目的一个汇总信息。活动VLANs包括了标准和扩展VLANs。
|
||||
|
||||
带上或不带参数的`show vlan`命令,在排错过程的以下方面,都是最为有用的命令。
|
||||
|
||||
+ 确认设备上所配置的VLANs
|
||||
+ 判定端口成员关系
|
||||
|
||||
另一个有用的VLAN排错命令,就是`show vtp counters`。该命令打印有关VTP数据包统计的信息。以下是在某台配置为VTP服务器的交换机上,`show vtp counters`的输出。
|
||||
|
||||
```
|
||||
Cat-3550-1#show vtp counters
|
||||
VTP statistics:
|
||||
Summary advertisements received : 15
|
||||
Subset advertisements received : 10
|
||||
Request advertisements received : 2
|
||||
Summary advertisements transmitted : 19
|
||||
Subset advertisements transmitted : 12
|
||||
Request advertisements transmitted : 0
|
||||
Number of config revision errors : 0
|
||||
Number of config digest errors : 0
|
||||
Number of V1 summary errors : 0
|
||||
VTP pruning statistics:
|
||||
Trunk Join Transmitted Join Received Summary advts received
|
||||
from non-pruning-
|
||||
capable device
|
||||
----- ---------------- -------------- -----------------------
|
||||
Fa0/11 0 1 0
|
||||
Fa0/12 0 1 0
|
||||
```
|
||||
|
||||
`show vtp counters`命令打印输出的前六行,提供了三种类型VTP数据包的统计信息:通告请求(advertisement requests)、汇总通告(summary advertisements)以及子集通告(subset advertisements)。随后小节将对这些不同报文进行讲解。
|
||||
|
||||
**VTP通告请求**是对配置信息的请求。这些报文是由VTP客户端发出给VTP服务器,用以请求其没有的VLAN及VTP信息。在交换机重置、VTP域名称改变,或交换机接收到一条带有比其自身更高的配置修订号的VTP汇总通告帧时,客户端交换机便发出一条VTP通告请求报文。VTP服务器应仅显示接收计数器增长,而所有VTP客户端都应只显示发送计数器增长。
|
||||
|
||||
**VTP汇总通告**是由服务器默认每隔5分钟发出的。这些报文类型用于告知邻接交换机当前VTP域名称、配置修订号及VLAN配置状态,及包括时间戳、MD5散列值及子网数目通告等其它VTP信息(VTP summary advertisements are used to tell an adjacent switch of the current VTP domain name, the configuration revision number and the status of the VLAN configuration, as well as other VTP information, which includes the time stamp, the MD5 hash, and the number of subnet advertisements to follow)。而如果服务器上的这些计数器在增长,那么在VTP域中就有不知一台交换机充当或配置为VTP服务器。
|
||||
|
||||
**VTP子集通告**是由VTP服务器在某个VLAN配置改变时,比如有VLAN被加入、中止、改变、删除或其它VLAN指定参数(比如VLAN的MTU等)发生变化时所发出的。在VTP汇总通告之后,会有一或更多的子集通告发出。而一条子集通告包含了一个VLAN信息清单。而如果涉及多个VLANs,就需要多于一条的子集通告,以实现对所有VLANs的通告。
|
||||
|
||||
字段`Number of config revision errors`显示了交换机因其接收到带有相同配置修订号,却有着不同MD5散列值的数据包,而无法接受的通告数目。在同一VTP域中有两台以上的服务器交换机上的VTP信息同时发生变动,且*中间交换机*(an intermediate switch)于同一时间接收到来自这些服务器的通告时,这是常见会发生的。此概念在下图15.3中进行了演示,该图演示了一个基本的交换网络。
|
||||
|
||||

|
||||
|
||||
*图15.3 -- 配置修订号错误的排错*
|
||||
|
||||
图15.3演示了一个结合了冗余和负载均衡(incorporates redundancy and load sharing)的基本网络。应假设Sw1和Sw2都是配置成的VTP服务器,而Sw3是配置成的VTP客户端。Sw1是VLANs 10及30的根交换机,同时Sw2是VLANs 20及40的根交换机。假设在Sw1和Sw2上同时应用了改变,将VLAN 50加入到了Sw1, VLAN 60加入到了Sw2。在数据库的改变之后两台交换机都发出一条通告。
|
||||
|
||||
变动在域中传播,覆写其它接收到该信息交换机先前的数据库。假设Sw5同时接收到来自邻居的同样信息,同时接收到的两条通告都包含了同样配置修订号。那么在此情况下,该交换机就无法接受这两条通告,因为它们有着同样配置修订号,但却有着不同的MD5散列值。
|
||||
|
||||
当这种情况发生时,交换机就将`Number of config revision errors counter`字段加一,同时不更新其VLANs数据库。而这种情况可能导致一个或多个VLANs中连通性的丢失,因为在该交换机上的VLAN信息没有得到更新。为解决此问题并确保该交换机上的本地数据库保持更新,就要在其中一台服务器交换机上配置一个虚构的VLAN(a dummy vlan),这样就导致对所有交换机本地数据库的覆写,从而允许Sw5也更新其数据库。切记这并不是一种常见现象(this is not a common occurance); 但还是可能发生,因此,这里将这么多也是有必要的。
|
||||
|
||||
在交换机接收到一条带有与其计算出的MD5散列值不一致的MD5散列值的通告时,`Number of config digest errors counter`字段就会增长。这是在交换机上配置了不同VTP密码的结果。可使用`show vtp password`命令检查所配置的VTP密码是正确的。同样重要的是记住在密码一致时,硬件或软件的问题或缺陷也会造成VTP数据包的数据错误,从而也会导致这样的错误出现。
|
||||
|
||||
最后,字段`VTP pruning statistics`将只在VTP域的VLAN修剪开启时,才会包含非零值。**修剪是在服务器上开启的,同时该配置在该VTP域中得以传播。**在某VTP域的修剪开启时,服务器将接收来自客户端的Join报文(the VTP Join messages)(pruning is enabled on servers and this configuration is propagated throughtout the VTP domain. Servers will receive joins from clients when pruning has been enabled for the VTP domain, [VTP pruning, InformIT](pdfs/VTP-Pruning_InformIT.pdf))。
|
||||
|
||||

|
||||
|
||||
*VTP Join报文及VTP修剪*
|
||||
|
||||
##第15天问题
|
||||
|
||||
1. What is the colour of the system LED under normal system operations?
|
||||
2. What is the colour of the RPS LED during a fault condition?
|
||||
3. You can cycle through modes by pressing the Mode button until you reach the mode setting you require. This changes the status of the port LED colours. True or false?
|
||||
4. What port speed is represented by a blinking green LED?
|
||||
5. If you want to be sure that you are not dealing with a cabling issue, one of the simplest things to do is to `_______` the cable and run the same tests again.
|
||||
6. Which command is generally used to troubleshoot Layer 1 issues (besides show interfaces )?
|
||||
7. The `_______` status is reflected when the connected cable is faulty or when the other end of the cable is not connected to an active port or device (e.g., if a workstation connected to the switch port is powered off).
|
||||
8. What are runts?
|
||||
9. The `_______` command can also be used to view interface errors and facilitate Layer 1 troubleshooting.
|
||||
10. Which command prints a brief status of all active VLANs?
|
||||
|
||||
|
||||
##第15天答案
|
||||
|
||||
1. Green.
|
||||
2. Amber.
|
||||
3. True.
|
||||
4. 1000Mbps.
|
||||
5. Replace.
|
||||
6. The `show controllers` command.
|
||||
7. `notconnect`.
|
||||
8. Packets that are smaller than the minimum packet size (less than 64 bytes on Ethernet).
|
||||
9. `show interfaces [name] counters errors`.
|
||||
10. The `show vlan brief`command.
|
||||
|
||||
##第15天实验
|
||||
|
||||
###一层排错实验
|
||||
|
||||
在真实设备上对本模块中提到的一层排错相关命令进行测试。
|
||||
|
||||
+ 如同模块中所讲解的那样,检查不同场景下交换机系统及端口LED状态
|
||||
+ 执行一下`show interface`命令,并对本模块中所说明的有关信息进行查证
|
||||
+ 对`show controllers`及`show interface counters errors`进行同样的执行
|
||||
|
||||
###二层排错使用
|
||||
|
||||
在真实设备上对本模块中提到的二层排错相关命令进行测试。
|
||||
|
||||
+ 在交换机之间配置VTP,并将一些VLANs从VTP服务器通告到VTP客户端(查看第三天的VTP实验)
|
||||
+ 在两台交换机之间配置一条中继链路,并生成一些流量(ping操作)
|
||||
+ 测试`show vlan`命令
|
||||
+ 测试`show interface counters trunk`命令
|
||||
+ 测试`show interface switchport`命令
|
||||
+ 测试`show interface trunk`命令
|
||||
+ 测试`show VTP status`命令
|
||||
+ 测试`show VTP counter`命令
|
||||
|
858
d31-Spanning-Tree-Protocol.md
Normal file
@ -0,0 +1,858 @@
|
||||
#第31天
|
||||
|
||||
**生成树协议**
|
||||
|
||||
**Spanning Tree Protocol**
|
||||
|
||||
##第31天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND2记诵指南
|
||||
+ 在[subneting.org](http://subnetting.org/)上花15分钟
|
||||
|
||||
生成树协议(Spanning Tree Protocol, STP)的作用, 是在具备冗余的交换网络拓扑中,允许存在多条物理链路的同时, 通过建立一个无循环逻辑拓扑,阻止网络上循环的发生(the role of Spanning Tree Protocol(STP) is to prevent loops from occuring on your network by creating a loop-free logical topology, while allowing physical links in redundant switched network topologies)。随着网络中所用到交换机数量的急剧增加,以及传播VLAN信息的主要目的下,围绕网络数据帧无尽循环问题开始出现。
|
||||
|
||||
先前CCNA考试仅要求对STP有基本理解。但当前版本则希望对此方面有极好的掌握。
|
||||
|
||||
今天将学习以下内容。
|
||||
|
||||
+ STP的需求,the need of STP
|
||||
+ STP桥ID,STP Bridge ID
|
||||
+ STP根桥选举,STP Root Bridge election
|
||||
+ STP开销及优先级,STP cost and priority
|
||||
+ STP根及候选端口,STP Root and Designated Ports
|
||||
+ STP增强,STP enhancements
|
||||
+ STP排错,Troubleshooting STP
|
||||
|
||||
本课对应了以下CCNA大纲要求。
|
||||
|
||||
+ PVSTP运作的配置和验证,configure and verify PVSTP operation
|
||||
- 对根桥选举进行描述, describe root bridge election
|
||||
- 生成树的模式, spanning tree mode
|
||||
|
||||
##STP的需求
|
||||
|
||||
**The Need for STP**
|
||||
|
||||
STP是在IEEE 802.1D标准中定义的。为维护起一个无循环逻辑拓扑,交换机**每两秒**传递桥协议数据单元(Bridge Protocol Data Units, BPDUs)。BPDUs是一些在生成树拓扑中用到、用于传递有关端口、地址、优先级及开销等信息的数据报文。**BPDUs被打上VLAN ID标签。**
|
||||
|
||||
下图31.1显示了网络中循环是如何能创建出来的。因为各台交换机都学到VLAN 20, 同时这些交换机也将其能达到VLAN 20的情况,通告给其它交换机。很快,所有交换机都认为其是VLAN 20流量的源,且造成了一个循环,因此所有以VLAN 20为目的地的帧将自一台交换机往另一台不停传递。
|
||||
|
||||

|
||||
|
||||
*图31.1 -- 循环是如何建立的*
|
||||
|
||||
STP运行着一种算法,用于根据所考虑的特定VLAN,决定出哪些端口保持开放或活动,以及哪些端口需要对特定VLAN关闭。
|
||||
|
||||
**位处生成树域中的所有交换机,都使用BPDUs来沟通和交换报文。**STP利用BPDUs的交换,来确定网络拓扑,而网络拓扑则是由以下三个变量决定的。
|
||||
|
||||
+ 与各台交换机相关联的唯一MAC地址(交换机识别符),the unique MAC address(switch identifier) that is associated with each switch
|
||||
|
||||
+ 各个交换机端口到根桥的路径开销,the path cost to the Root Bridge associated with each switch port
|
||||
|
||||
+ 各个交换机端口的端口识别符(该端口的MAC地址),the port identifier(MAC address of the port) associated with each switch port
|
||||
|
||||
BPDUs都是每两秒发出的,此特性允许实现快速的网络循环探测及拓扑信息交换。BPDUs的两个类型分别是**配置BPDUs**及**拓扑变化通知BPDUs**(Configuration BPDUs and Topology Change Notification BPDUs); 这里只会对配置BPDUs进行说明。
|
||||
|
||||
##IEEE 802.1D的配置BPDUs
|
||||
|
||||
**IEEE 802.1D Configuration BPDUs**
|
||||
|
||||
配置BPDUs是由LAN交换机发出,用于就生成树拓扑进行通信和计算。在交换机端口初始化后,该端口被置为阻塞状态,同时一个BPDU被发送给交换机中的所有端口。**默认情况下,直到其与其它交换机进行配置BPDUs的交换为止,所有交换机最初都假定其为生成树的根。**在某端口仍将其自身配置BPDUs视为最具吸引力(the most attractive)时,其就会持续发送配置BPDUs。这些交换机基于以下4个因素(以列出顺序),确定出最佳配置BPDU(the best Configuration BPDU)。
|
||||
|
||||
1. 有着最低的根桥ID的, lowest Root Bridge ID
|
||||
|
||||
2. 有着到根桥最低根路径开销的,lowest Root path cost to Root Bridge
|
||||
|
||||
3. 有着最低发送者桥ID的,lowest sender Bridge ID
|
||||
|
||||
4. 有着最低发送者端口ID的,lowest sender Port ID
|
||||
|
||||
配置BPDU交换的完成,导致以下动作。
|
||||
|
||||
+ 选举出整个生成树域的根桥, a Root Switch is elected for the entire Spanning Tree domain
|
||||
|
||||
+ 选举出生成树域中所有非根交换机上的根端口,a Root Port is elected on every Non-Root Switch in the Spanning Tree domain
|
||||
|
||||
+ 选举出所有LAN网段中的候选交换机,a Designated Switch is elected for every LAN segment
|
||||
|
||||
+ 选举出所有网段的候选交换机的候选端口(根交换机上的所有活动端口也都是候选端口),a Designated Port is elected on the Designated Switch for every segment(all active ports on the Root Switch are also designated)
|
||||
|
||||
+ 通过阻塞冗余路径,网络中的循环得以消除,loops in the network are eliminated by blocking redundant paths
|
||||
|
||||
> **注意:**随着逐步深入本模块内容,这些特性将会一一介绍。
|
||||
|
||||
一旦所有交换机端口都处于转发或阻塞状态,生成树网络(the Spanning Tree network)就完成了收敛, 此时配置BPDUs就由根桥以默认每两秒的间隔发出。这就是**配置BPDUs的缘起**。配置BPDUs通过根桥上的候选端口,转发到下游邻居交换机(this is referred to as the origination of Configuration BPDUs. The Configuration BPDUs are forwarded to downstream neighboring switches via the Designated Port on the Root Bridge)。
|
||||
|
||||
当非根桥(a Non-Root Bridge)在其提供了到根桥最优路径的根端口上,接收到一个配置BPDU时,就会通过其候选端口,发送出一个该BPDU的更新版本。这就是**BPDUs的传播**(when a Non-Root Bridge receives a Configuration BPDU on its Root Port, which is the port that provides the best path to the Root Bridge, it sends an updated version of the BPDU via its Designated Port(s). This is referred to as the propagation of BPDUs)。
|
||||
|
||||
**候选端口**则是**候选交换机**上,在转发来自那个LAN网段的数据包到根桥时,有着最低路径开销的端口(**the Designated Port** is a port on **the Designated Switch** that has the lowest cost when forwarding packets from that LAN segment to the Root Bridge)。
|
||||
|
||||
一旦生成树网络得以收敛,便总是会有自根桥传输给STP域内其它交换机的一个配置BPDU在传送。而要记住在生成树网络完成收敛后的配置BPDUs数据流的最简单方法,就是记住以下4条规则。
|
||||
|
||||
1. 配置BPDUs是从根桥发出且通过候选端口发送的, a Configuration BPDU originates on the Root Bridge and is sent via the Designated Port
|
||||
|
||||
2. 配置BPDUs是由非根桥的根端口上接收的,a Configuration BPDU is received by a Non-Root Bridge on a Root Port
|
||||
|
||||
3. 配置BPDU是由非根桥的候选端口上传送的,a Configuration BPDU is transmitted by a Non-Root Bridge on a Designated Port
|
||||
|
||||
4. 在所有单个LAN区段上,都只有一个候选端口(在某台候选交换机上),there is only one Designated Port (on a Designated Switch) on any single LAN segment
|
||||
|
||||
下图31.2演示了该STP域中的配置BPDU数据流,对上面列出的4条简单规则进行了说明。
|
||||
|
||||

|
||||
|
||||
*图31.2 -- STP域中的配置BPDU数据流*
|
||||
|
||||
1. 参考图31.2, 该配置BPDU源自根桥,且是通过根桥上的候选端口发送出来,前往那些非根桥交换机,也就是Switch 2和Switch 3。
|
||||
|
||||
2. 非根桥Switch 2和Switch 3在其有着到根桥最优路径的根端口上,接收到配置BPDU。
|
||||
|
||||
3. Switch 2和Switch 3对接收到的配置BPDU进行修改(更新),让后在其候选端口上转发出去。**Switch 2就是该LAN网段上其自身及Switch 4的候选交换机,Switch 3是该LAN网段上其自身及Switch 5的候选交换机。**而存在于候选交换机上的候选端口,则是在转发来自该LAN区段数据包到根交换机时,有着最低路径开销的端口。
|
||||
|
||||
4. **在Switch 4和Switch 5之间的LAN网段上**,Switch 4被选举为候选交换机,同时候选端口也处于其上。因为在一个网段上只能有一台候选交换机,所以Switch 4和Switch 5之间网段上,Switch 5的端口,就被阻塞掉了。该端口将不会转发任何BPDUs。
|
||||
|
||||
##生成树端口的各种状态
|
||||
|
||||
**Spanning Tree Port States**
|
||||
|
||||
生成树算法(Spanning Tree Algorithm, STA)定义了STP控制下端口在进入到活动的转发状态之前,需要经历的几种状态。802.1D标准中端口状态有下面这些。
|
||||
|
||||
+ 阻塞中 -- 仅接收BPDUs(为期20s), blocking -- BPDUs received only (20 seconds)
|
||||
|
||||
+ 侦听中 -- 有BPDUs发出和接收(为期15s),listening -- BPDUs sent and received (15 seconds)
|
||||
|
||||
+ 学习中 -- 桥接表被建立起来(为期15s),learning -- bridging table is built (15 seconds)
|
||||
|
||||
+ 转发中 -- 发送/接收数据,forwarding -- sending/receiving data
|
||||
|
||||
+ 关闭 -- 管理性关闭,disabled -- administratively down
|
||||
|
||||
端口按以下方式在这些状态间依序移动。
|
||||
|
||||
1. 从初始化状态到阻塞中状态
|
||||
|
||||
2. 从阻塞中状态到侦听中状态或关闭状态
|
||||
|
||||
3. 从侦听状态到学习状态或关闭状态
|
||||
|
||||
4. 从学习状态到转发或关闭状态
|
||||
|
||||
5. 从转发状态到关闭状态
|
||||
|
||||
在该过程中用到**STP计时器**来控制收敛。
|
||||
|
||||
+ Hello计时器 -- 2s(每个配置BPDU直接的时间)
|
||||
|
||||
+ 转发延迟计数器 -- 15s(侦听/控制学习状态的为期),Forward Delay -- 15 seconds (controls durations of Listening/Learning states)
|
||||
|
||||
+ 最大存活时间 -- 20s(控制阻塞状态的为期),Max Age -- 20 seconds (controls the duration of the Blocking state)
|
||||
|
||||
**默认收敛时间是30到50秒。**
|
||||
|
||||
###生成树阻塞状态
|
||||
|
||||
**Spanning Tree Blocking State**
|
||||
|
||||
处于阻塞状态的交换机端口,完成以下动作。
|
||||
|
||||
+ 丢弃在该端口上接收到的来自所连接网段的数据帧,discards frames received on the port from the attached segment
|
||||
|
||||
+ 丢弃交换自另一端口的数据帧,discards frames switched from another port
|
||||
|
||||
+ 不将工作站地址放入到其地址数据库中,does not incorporate station location into its address database
|
||||
|
||||
+ 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
+ 不传送自系统模块接收到的BPDUs,does not transmit BPDUs received from the system module
|
||||
|
||||
+ 接收网络管理报文,并对这些报文进行响应,receives and responds to network management messages
|
||||
|
||||
###生成树侦听状态
|
||||
|
||||
**Spanning Tree Listening State**
|
||||
|
||||
侦听状态是端口在阻塞状态之后所进入的第一个过渡状态。在STP确定端口应参与到帧转发时,该端口就进入此状态。处于侦听状态的交换机端口完成以下动作。
|
||||
|
||||
+ 丢弃接收自所连接网段的帧, discards frames received from the attached segment
|
||||
|
||||
+ 丢弃转发自另一端口的帧, discards frames switched from another port
|
||||
|
||||
+ 不将工作站地址加入到其地址数据库,does not incorporate station location into its address database
|
||||
|
||||
+ 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
+ 接收、处理并传送接收自系统模块的BPDUs, receives, processes, and transmits BPDUs received from the system module
|
||||
|
||||
+ 对网络管理报文进行接收和响应,receives and responds to network management messages
|
||||
|
||||
###生成树学习状态
|
||||
|
||||
**Spanning Tree Learning State**
|
||||
|
||||
学习状态是端口所进入的第二个过渡状态。此状态在侦听状态之后,且在端口进入转发状态之前到来。在此状态中,端口学习MAC地址并将学习到的MAC地址装入到其转发表中。处于学习状态的交换机端口完成以下动作。
|
||||
|
||||
+ 丢弃接收自所连接网段的帧, discards frames received from the attached segment
|
||||
|
||||
+ 丢弃转发自另一端口的帧, discards frames switched from another port
|
||||
|
||||
+ 将工作站地址加入到其地址数据库,incorporates(installs) station location into its address database
|
||||
|
||||
+ 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
+ 接收、处理并传送接收自系统模块的BPDUs, receives, processes, and transmits BPDUs received from the system module
|
||||
|
||||
+ 对网络管理报文进行接收和响应,receives and responds to network management messages
|
||||
|
||||
###生成树转发状态
|
||||
|
||||
**Spanning Tree Forwarding State**
|
||||
|
||||
转发状态是端口在学习状态之后所进入的第三个过渡状态。处于转发状态的端口对帧进行转发。处于转发状态的交换机端口完成以下动作。
|
||||
|
||||
+ 转发接收自所连接网段的数据帧
|
||||
|
||||
+ 转发交换自另一端口的数据帧
|
||||
|
||||
+ 将站点地址信息加入(安装)到其地址数据库
|
||||
|
||||
+ 接收BPDUs并将这些BPDUs导向给系统模块
|
||||
|
||||
+ 处理接收自系统模块的BPDUs
|
||||
|
||||
+ 接收网络管理报文并对其进行响应
|
||||
|
||||
|
||||
###生成树关闭状态
|
||||
|
||||
**Spanning Tree Disabled State**
|
||||
|
||||
关闭状态不是端口正常STP进展的部分。而是端口被网络管理员进行管理性关闭,或因为某种错误条件而被系统所关闭时,就被认为处于关闭状态。关闭的端口完成以下动作。
|
||||
|
||||
+ 丢弃接收自所连接网段的数据帧
|
||||
|
||||
+ 丢弃转发自另一端口的数据帧
|
||||
|
||||
+ 不将工作站地址加入其地址数据库
|
||||
|
||||
+ 接收BPDUs但不将这些BPDUs导向给系统模块
|
||||
|
||||
+ 不接收来自系统模块的BPDUs
|
||||
|
||||
+ 对网络管理报文进行接收和响应
|
||||
|
||||
|
||||
##生成树桥ID
|
||||
|
||||
**Spanning Tree Bridge ID**
|
||||
|
||||
位于某个生成树域中的交换机,都有一个用于对其进行唯一性区分的桥ID(Bridge ID, BID)。BID还用于协助完成STP根桥(an STP Root Bridge)的选举,STP根桥将在稍后讲到。BID是由一个6字节的MAC地址及2字节的桥优先级(a 2-byte Bridge Priority)构成的8字节字段。下图31.3演示了BID。
|
||||
|
||||

|
||||
|
||||
*图31.3 -- 桥ID格式*
|
||||
|
||||
**桥优先级是该交换机相对于其它交换机的优先级。**桥优先级取值范围是0到65535。思科Catalyst交换机的默认值为32768。
|
||||
|
||||
<pre>
|
||||
Switch2#show spanning-tree vlan 2
|
||||
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
<b>Root ID Priority 32768</b>
|
||||
Address 0009.7c87.9081
|
||||
Cost 19
|
||||
Port 1 (FastEthernet0/1)
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32770 (priority 32768 sys-id-ext 2)
|
||||
<b>Address 0008.21a9.4f80</b>
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 300
|
||||
|
||||
Interface Port ID Designated Port ID
|
||||
Name Prior.Nbr Cost Sts Cost Bridge ID Prior.Nbr
|
||||
---------- --------- ---- --- ----------- -------------- ---------
|
||||
Fa0/1 128.1 19 FWD 0 32768 0009.7c87.9081 128.13
|
||||
Fa0/2 128.2 19 FWD 19 32770 0008.21a9.4f80 128.2
|
||||
</pre>
|
||||
|
||||
上面输出中的MAC地址是得自交换机背板或管理引擎的硬件地址(the hardware address derived from the switch backplane or supervisor engine, 又名为基底MAC地址,the base MAC address)。**在802.1D标准中,每个VLAN都需要一个唯一BID。**
|
||||
|
||||
大多数思科Catalyst交换机都有一个可用作VLANs的BIDs的、1024个MAC地址的地址池。这些MAC地址被顺序分配,也就是该范围中的第一个MAC地址分配给VLAN 1, 第二个给VLAN 2, 第三个给VLAN 3, 以致第四个第五个等等。这样就提供了支持标准范围VLANs的支持能力,但要支持扩展范围的VLANs,就需要更多的MAC地址。该问题在802.1t(802.1D的技术和编辑修正)标准中得以解决(this issue was resolved in the 802.1t(Technical and Editoral corrections for 802.1D) standard)。
|
||||
|
||||
##生成树根桥选举
|
||||
|
||||
**Spanning Tree Root Bridge Election**
|
||||
|
||||
默认情况下,紧接着初始化之后,所有交换机最初都假定它们是生成树的根,直到它们与其他交换机交换BPDUs为止。在交换机交换BPDUs时,就举行一次选举,而**网络中有着最低桥ID的交换机就被选举为STP根桥**(the STP Root Bridge)。如有两台或更多交换机有着相同的优先级,则选取有着最低顺序MAC地址的交换机作为根桥。下图31.4对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.4 -- STP根桥的选举*
|
||||
|
||||
在图31.4中,四台交换机--Switch 1、Switch 2、Switch 3及Switch 4, 处于同一STP域中。默认所有交换机都有着桥优先级32768。为确定哪台交换机将成为根桥,并由此打破不分胜负的局面,STP将基于最低顺序MAC地址选择出根桥交换机(in order to determine which switch will become the Root Bridge, and thus break the tie, STP will select the switch based on the lowest-order MAC address)。那么基于此标准,并参考图31.4给出的信息,Switch 1将被选举为根桥。
|
||||
|
||||
一旦选定,根桥就成为生成树网络的逻辑中心。这并不是说根桥位处该网络的物理中心。确保不要做出那样的错误假设。
|
||||
|
||||
>**注意:**重要的是记住在STP根桥选举期间,是没有流量在该相同STP域上转发的。
|
||||
|
||||
**思科IOS软件允许管理员对根桥选举施加影响。**此外,管理员**也可以配置一台备份根桥**(adminitrator can also configure a backup Root Bridge)。备份根桥是一台管理员优先选择、在当前根桥失效或从网络中移除时成为根桥的交换机。
|
||||
|
||||
**为生成树域配置一台备份根桥交换机,始终是好的做法。**这样做允许在根桥失效时,网络具有确定性。最常见的做法就是在根桥上配置最高的优先级(也就是优先级为最低数值),并将第二高的优先级配置在当前根桥失效时作为根桥的备份交换机上。下图31.5对此进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.5 -- STP根桥选举(续)*
|
||||
|
||||
基于图31.5中的配置,最有可能被选举作为根桥的交换机是Switch 1。这是因为尽管所有优先级都一样,但该交换机有着最低顺序的MAC地址。而假如Switch 1失效,STP就会选举Switch 2作为根桥,因为它有着第二低的MAC地址。但是这将导致一个次优的网络拓扑(however, this would result in a suboptimal network topology)。
|
||||
|
||||
为解决此问题,管理员可手动修改Switch 1上的优先级到可能的最低值(0), 以及Switch 2的优先级到可能的第二低优先级值(4096)。这样做将确保在根桥(Switch 1)失效时,Switch 2被选举为根桥。因为管理员知道网络拓扑并了解哪台交换机将承担根桥功能,那么就建立了一个具有确定性、更容易排错的网络。**根ID(the Root ID)承载于BPDUs中,包含了根桥的桥优先级及MAC地址。**
|
||||
|
||||
**考试技巧:**如要强制某台交换机成为根桥,可执行下面的命令(同时参见下图31.6)。
|
||||
|
||||
+ 可以手动设置优先级
|
||||
|
||||
```
|
||||
Switch(config)#spanning-tree vlan 2 priority ?
|
||||
<0-61440> bridge priority in increments of 4096
|
||||
```
|
||||
|
||||
+ 或者使用宏命令`primary`或`secondary`将其设置为根桥
|
||||
|
||||
```
|
||||
Switch(config)#spanning-tree vlan 2 root ?
|
||||
primary Configure this switch as primary root for this spanning tree
|
||||
secondary Configure switch as secondary root
|
||||
```
|
||||
|
||||

|
||||
|
||||
*图31.6 -- 强制某台交换机成为根桥*
|
||||
|
||||
<pre>
|
||||
SwitchC#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID <b>Priority 0</b>
|
||||
Address 0000.0000.000c
|
||||
<b>This bridge is the root</b>
|
||||
Bridge ID Priority 0 (priority 0 sys-id-ext 5)
|
||||
SwitchD#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID <b>Priority 4096</b>
|
||||
Address 0000.0000.000d
|
||||
Bridge ID Priority 4096 (priority 8192 sys-id-ext 5)
|
||||
SwitchD#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID <b>Priority 4096</b>
|
||||
Address 0000.0000.000d
|
||||
Bridge ID Priority 4096 (priority 8192 sys-id-ext 5)
|
||||
</pre>
|
||||
|
||||
注意到VLAN编号通常会被加到优先级数字上,如下面的输出展示的那样。
|
||||
|
||||
<pre>
|
||||
SwitchA#show spanning-tree vlan 5
|
||||
Bridge ID Priority <b>32773</b> (priority 32768 sys-id-ext 5)
|
||||
Address 0013.c3e8.2500
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 300
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- ---- ---- -------- ----
|
||||
Fa0/15 Desg FWD 19 128.15 P2p
|
||||
Fa0/18 Desg FWD 19 128.18 P2
|
||||
</pre>
|
||||
|
||||
##生成树开销及优先级
|
||||
|
||||
**Spanning Tree Cost and Priority**
|
||||
|
||||
**STP使用开销及优先级数值来确定到根桥的最优路径。**这些数值此时用在根端口(the Root Port)的选举中,根端口选举将在接着的小节中讲到。**掌握开销及优先级数值的计算,对于理解为何生成树选举一个端口而不是另一个,是十分重要的。**
|
||||
|
||||
生成树算法的一项关键功能,就是尝试提供出网络中的各台交换机自根桥的最短路径。而该最短路径一旦选定,就被用于转发数据,而将其它冗余链路置为阻塞状态。生成树算法用到两个数值来确定哪个端口将被置为转发状态(也就是到根桥的最优路径),以及哪些端口将被置为阻塞状态。这两个数值就是端口开销和端口优先级。二者都将在下面的小节讲到。
|
||||
|
||||
###生成树端口开销
|
||||
|
||||
**Spanning Tree Port Cost**
|
||||
|
||||
802.1D规格分配16位(短整数)基于端口带宽的默认端口开销值给每个端口。因为管理员同时有着手动分配端口开销值(1和65535之间)的能力,所以该16位值就只用在那些未有具体配置了端口开销的端口。下表31.1列出了在应用短整数方式计算端口开销时各种类型端口的默认值。
|
||||
|
||||
*表 31.1 -- 默认STP端口开销值*
|
||||
|
||||
<table>
|
||||
<tr><th>带宽</th><th>默认端口开销</th></tr>
|
||||
<tr><td>4Mbps</td><td>250</td></tr>
|
||||
<tr><td>10Mbps</td><td>100</td></tr>
|
||||
<tr><td>16Mbps</td><td>62</td></tr>
|
||||
<tr><td>100Mbps</td><td>19</td></tr>
|
||||
<tr><td>1Gbps</td><td>4</td></tr>
|
||||
<tr><td>10Gbps</td><td>2</td></tr>
|
||||
</table>
|
||||
|
||||
在思科IOS Catalyst交换机中,可通过执行`show spanning-tree interface [name]`查看默认端口开销值,如下面的输出中演示的那样,该输出展示了一个FastEthernet接口的默认短整数端口开销。
|
||||
|
||||
<pre>
|
||||
|
||||
VTP-Server#<b>show spanning-tree interface FastEthernet0/2</b>
|
||||
Vlan Role Sts <b>Cost</b> Prio.Nbr Type
|
||||
---- ---- --- ---- -------- ----
|
||||
VLAN0050 Desg FWD <b>19</b> 128.2 P2p
|
||||
</pre>
|
||||
|
||||
下面的输出显示了同样的长整数端口开销分配(the following output shows the same for long port cost assignment)。
|
||||
|
||||
<pre>
|
||||
|
||||
VTP-Server#<b>show spanning-tree interface FastEthernet0/2</b>
|
||||
Vlan Role Sts <b>Cost</b> Prio.Nbr Type
|
||||
---- ---- --- ---- -------- ----
|
||||
VLAN0050 Desg FWD <b>200000</b> 128.2 P2p
|
||||
</pre>
|
||||
|
||||
重要的是记住带有更低的(数值)开销的端口是更为首选的端口;端口开销越低,那个特定端口被选举为根端口的可能性就越高(the lower the port cost, the higher the probability of that particular port being elected the Root Port)。**端口开销全局重要,并影响整个生成树网络。**该数值被配置在生成树域中的所有非根交换机上(on all Non-Root Switches in the Spanning Tree domain)。
|
||||
|
||||
##生成树的根端口及候选端口
|
||||
|
||||
**Spanning Tree Root and Designated Ports**
|
||||
|
||||
STP选举出两种类型用于转发BPDUs的端口:指向根桥的根端口,以及指向根端口另一边的候选端口(STP elects two types of ports that are used to forward BPDUs: the Root Port, which points towards the Root Bridge, and the Designated Port, which points away from the Root Bridge)。掌握这两种端口类型的作用及其选举过程,十分重要。
|
||||
|
||||
###生成树根端口选举
|
||||
|
||||
**Spanning Tree Root Port Election**
|
||||
|
||||
生成树算法定义了三种端口类型:**根端口、候选端口及非候选端口**。这些端口类型是有生成树算法选举出来,并被置为相应状态(比如转发中或阻塞中状态)。在生成树选举过程中,如存在悬而不决的情况,就会用到以下数值作为打破僵局方式。
|
||||
|
||||
1. 最低的根桥ID, lowest Root Bridge ID
|
||||
2. 到根桥的最低根路径开销, lowest Root path cost to Root Bridge
|
||||
3. 最低的发送方桥ID, lowest sender Bridge ID
|
||||
4. 最低的发送方端口ID,lowest sender Port ID
|
||||
|
||||
>**注意:**为掌握生成树选举及候选出在任何给定情形下不同端口类型,那么重要的是记住这些打破平局的标准了。这些标准不仅要对其进行测试,还要为真实世界中设计、部署及支持互联网络而牢固掌握这个知识点。
|
||||
|
||||
生成树**根端口是在该设备将数据包转发到根桥时,提供出最优路径,或最低开销的端口。**也就是说,根端口是接收到该交换机的最优BPDU的端口,而这又表明了在路径开销上其是到根桥的最短路径。根端口是基于根桥路径开销选举出的。
|
||||
|
||||
根桥路径开销又是基于连接到根桥的所有链路的累积开销(路径开销)计算出的。路径开销是各个端口贡献给根桥开销的数值(the path cost is the value that each port contributes to the Root Bridge path cost)。因为此概念通常是十分令人困惑,在下图31.7中对其进行了演示。
|
||||
|
||||
> **注意:**图31.7中除了一条链路外,其它链路都是GigabitEthernet链路。应假定用于端口开销计算的方法是传统的802.1D方法。因此,默认GigabitEthernet的端口开销就是4, 同时FastEthernet是19。
|
||||
|
||||

|
||||
|
||||
*图31.7 -- 生成树根端口选举*
|
||||
|
||||
>**注意:**下面的解释对网络中交换机間的BPDUs数据流进行了说明。与其它信息一起,这些BPDUs包含了根桥路径开销信息,而根桥路径开销在接收交换机上的入站端口处被增加(along with other information, these BPDUs contain the Root Bridge path cost information, which is incremented by the ingress port on the receiving switch)。
|
||||
|
||||
1. 根桥发出一个带有根桥路径开销值0的BPDU,因为其端口直接位于该根桥上。此BPDU发送给Switch 2和Switch 3。
|
||||
2. 当Switch 2和Switch 3接收到来自根桥的BPDU时,它们便基于各自入站借口加上其自己的路径开销。因为Switch 2和Switch 3都是通过GigabitEthernet连接与根桥相连,所以它们将从根桥接收到的路径开销值(0)与它们的GigabitEthernet路径开销值(4)相加。Switch 2及Switch 3经由GigabitEthernet0/1到根桥的根桥路径开销也就是0+4=4。
|
||||
3. Switch 2和Switch 3将新的BPDUs送出至其各自的邻居,也就是Switch 4和Switch 6。这些BPDUs包含了新的累积值(4)作为根桥路径开销。
|
||||
4. 当Switch 4和Switch 6接收到分别来自Switch 2和Switch 3的BPDUs时,它们根据入站借口对接收到的**根桥路径开销**予以增长。因为使用的是GigabitEthernet, 从Switch 2和Switch 3接收到的值被加上4。那么在Switch 4和Switch 6上经由其各自GigabitEthernet0/1接口的根桥路径开销就是0+4+4=8。
|
||||
5. Switch 5接收到两个BPDUs:一个来自Switch 4,另一个来自Switch 6。接收自Switch 4的BPDU有着根桥路径开销0+4+4+4=12。接收自Switch 6的BPDU有着根桥路径开销0+4+4+19=27。因为包含于接收自Switch 4的BPDU中的根桥路径开销值好于接收自Switch 6的,Switch 5将选举GigabitEthernet0/1作为**根端口**(the Root Port)。
|
||||
|
||||
>**注意:**交换机2、3、4、6都将选举其各自的GigabitEthernet端口作为根端口。
|
||||
|
||||

|
||||
|
||||
**更多解释**
|
||||
|
||||
**Further Explanation**
|
||||
|
||||
为更为细致的进行解释(To explain further), 并有助于掌握根端口选举过程,假定上图31.7中所有端口都是GigabitEthernet端口。这就意味着在上面的第5布中,Switch 5将接收到两个带有相同根桥ID的BPDUs,且两个都有着0+4+4+4=12的根路径开销值。为了选举出根端口,STP将进入到下面所列出的打破僵局标准的下一选项(前两个选项已经用到,就被移除了)。
|
||||
|
||||
1. 最低发送方桥ID,lowest sender Bridge ID
|
||||
2. 最低发送方端口ID,lowest sender Port ID
|
||||
|
||||
基于第三个选举标准,Switch 5将优先使用来自Switch 4的BPDU,因为Switch 4的BID(0000.0000.000D)低于Switch 6的BID(0000.0000.000F)。Switch 5选出端口GigabitEthernet0/1作为根端口。
|
||||
|
||||
###生成树候选端口的选举
|
||||
|
||||
**Spanning Tree Designated Port Election**
|
||||
|
||||
与根端口不同,候选端口是指向与STP根相反方向的端口。该端口是候选设备(交换机)连接LAN的端口。候选端口同时也是在将来自LAN的数据包转发给根桥时有着最低路径开销的端口。
|
||||
|
||||
>**注意:**一些人将候选端口当作是候选交换机。这两个术语是可以互换的,且指的是同一个东西。也就是说,这是用于将来自某个特定LAN网段的帧,转发到根桥的交换机,或端口。
|
||||
|
||||
**候选端口的主要目的是阻止循环。**在超过一台的交换机连接到同一网段时,所有交换机都将尝试对在那个网段上接收到的某个帧进行转发。这样的默认行为可能导致该帧的多个拷贝被多台交换机同时转发--从而造成网络循环。为避免这种默认行为,**STP在所有网段上都选举出一个候选端口。***这是因为根桥路径开销将始终为0。*STA的候选端口选举过程在下图31.8中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.8 -- 生成树候选端口选举*
|
||||
|
||||
1. 在根桥和Switch 2之间的网段上,根桥的GigabitEthernet0/1被选举为候选端口,因为该端口有着较低的根桥路径开销0。
|
||||
|
||||
2. 在根桥和Switch 3之间的网段,根桥的GigabitEthernet0/2端口被选举作为候选端口,因为其有着较低的根桥路径开销0。
|
||||
|
||||
3. 在Switch 2和Switch 4之间的网段,Switch 2上的GigabitEthernet0/2被选举为候选端口,因为Switch 2有着最低的根桥路径开销4。
|
||||
|
||||
4. 在Switch 3和Switch 6之间的网段,Switch 3上的GigabitEthernet0/2端口被选举为候选端口,因为Switch 3有着最低的根桥路径开销4。
|
||||
|
||||
5. 在Switch 4和Switch 5之间的网段,Switch 4上的GigabitEthernet0/2端口被选举为候选端口,因为Switch 4有着最低的根桥路径开销8。
|
||||
|
||||
6. 在Switch 5和Switch 6之间的网段,Switch 6上的GigabitEthernet0/2被选举为候选端口,因为Switch 6有着最低的根桥路径开销8。
|
||||
|
||||
非候选端口(the Non-Designated Port)实际上不是一种生成树端口类型。而是其作为一个术语,只是简单地表示某个不作为某LAN网段上候选端口的端口。**非候选端口将始终被STP置为阻塞状态。**基于根端口及候选端口的计算,下图31.9中展示了用于根端口和候选端口选举示例的交换网络的最终生成树拓扑(Based on the calculation of Root and Designated Ports, the resultant Spanning Tree Topology for the switched network that was used in the Root Port and Designated Port election examples is shown in Figure 31.9 below)。
|
||||
|
||||

|
||||
|
||||
*图31.9 -- 已收敛的生成树网络*
|
||||
|
||||
##思科生成树增强
|
||||
|
||||
**Cisco Spanning Tree Enhancements**
|
||||
|
||||
如早前指出的那样,STP对其所在环境做出以下两点假设。
|
||||
|
||||
+ 所有链路都是双向的,而能够发送和接收桥协议数据单元。
|
||||
+ 所有交换机都能正常地接收、处理及发出BPDUs
|
||||
|
||||
在现实世界的网络中,这两个假设并不总是正确。在这种情况下,STP就可能无法阻止网络中循环的形成(in situations where that is the case, STP may not be able to prevent loops from being formed within the network)。正是由于存在这种可能,且为提升基本的802.1D STA性能,思科引入了一些对IEEE 802.1D标准的增强,将在下面进行说明。
|
||||
|
||||
###端口快速
|
||||
|
||||
**Port Fast**
|
||||
|
||||
端口快速是一项典型地对连接了一台主机的端口或接口开启的特性。当该端口上的链路起来时,交换机将跳过STA的第一阶段并直接过渡到转发状态。与通常的看法相反,端口快速特性并不在选定的端口上关闭生成树。这是因为就算带有端口快速特性,该端口仍能发送并接收BPDUs。
|
||||
|
||||
这在该端口所连接的诸如某台工作站的网卡这样的,没有发送或响应BPDUs的网络设备时不是问题。但如该端口所连接的设备确实在发出BPDUs,比如另一台交换机,这可能造成交换循环。这是因为该端口跳过了侦听及学习阶段而立即进入到转发状态(this may result in a switching loop. This is because the port skips the Listening and Learning states and proceeds immediately to the Forwarding state)。端口快速简单地令到该端口相较经历所有STA步骤,快得多地开始转发以太网帧。
|
||||
|
||||
###BPDU守护
|
||||
|
||||
**BPDU Guard**
|
||||
|
||||
**BPDU守护特性用于保护生成树域免受外部影响。BPDU默认是关闭的,但建议在所有开启了端口快速特性的端口上予以开启。**在配置了BPDU守护特性的端口接收到一个BPDU时,就立即转变成错误关闭状态(the errdisable state)。
|
||||
|
||||
在那些关闭了生成树的端口上,这样做阻止了错误信息注入到生成树域中去。BPDU守护的运行,结合端口快速特性,在下面及后续的图31.10、31.11及31.12中,进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.10 -- 掌握BPDU守护*
|
||||
|
||||
图31.10中,Switch 1到Host 1的连接上**开启了端口快速。那么在初始化后,该端口便过渡到转发状态,这就消除了该端口在没有省略掉STA而要走完侦听及学习状态所要花掉的30秒。**因为该网络主机是一台工作站,其不在那个端口上发送BPDUs。
|
||||
|
||||
要么因为偶然,或是由于一些其它恶意目的,Host 1从Switch 1上断开连接。使用同一端口,SWitch 3被连接到Switch 1。Switch 3同时也连接到Switch 2。因为端口快速在连接Switch 1到Switch 3的端口上开启,此端口就从初始化变成转发状态,从而省略掉了一般STP初始化过程。此端口将接收并处理所有由Switch 3发送的BPDUs,如下图31.11所示。
|
||||
|
||||

|
||||
|
||||
*图31.11 掌握BPDU守护(续)*
|
||||
|
||||
基于上面所演示的端口状态,可很快看出一个循环将在此网络中如何建立起来。为阻止此情形的发生,就应在所有的那些开启了端口快速的端口上,开启BPDU守护。这在下面的图31.12中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.12 -- 掌握BPDU守护(续)*
|
||||
|
||||
在端口快速端口上带有BPDU守护下,在Switch 1接收到来自Switch 3的一个BPDU时,就立即将该端口转变成错误关闭状态(immediately transitions the port into the errdisable state)。结果就是STP计算不受该冗余链路的影响,且该网络不会有任何循环。
|
||||
|
||||
###BPDU过滤器
|
||||
|
||||
**BPDU Filter**
|
||||
|
||||
BPDU守护与BPDU过滤器两个特性常常混淆或甚至被想成是同一个特性。但它们是不同的,而掌握它们之间的区别就很重要。在某个端口上开启了端口快速时,该端口将发出BPDUs且将接受及处理收到的BPDUs。BPDU守护特性阻止该端口接收任何的BPDUs,但不阻止其发送BPDUs。如有接收到任何BPDUs,该端口就将成为错误关闭端口(if any BPDUs received, the port will be errdisabled)。
|
||||
|
||||
而BPDU过滤器特性有着两方面的功能(the BPDU Filter feature has dual functionality)。当在接口级别配置上BPDU过滤器时,它将有效地在选定端口上,通过阻止这些端口发送或接收所有BPDUs,而关闭这些端口的STP。而在全局配置了BPDU过滤器,并与全局端口快速配合使用是,它会将任何接收到BPDUs的端口,还原成端口快速模式。下图31.13对此进行了演示。
|
||||
|
||||

|
||||
|
||||
###循环守护
|
||||
|
||||
**Loop Guard**
|
||||
|
||||
循环守护特性用于防止生成树网络中循环的形成。循环守护对根端口及阻塞端口进行探测,并确保它们继续接收BPDUs。当交换机在阻塞端口上接收到BPDUs,该信息就被忽视,因为来自根桥的最佳BPDU仍通过根端口,正在接收着。
|
||||
|
||||
如该交换机链路是运行的,又没有接收到BPDUs(因为该链路是单向链路,due to a unidirectional link),该交换机就假设将该链路开启是安全的,那么该端口就转换到转发状态并开始对接收到的BPDUs进行中继。如有某台交换机连接到该链路的另一端,这将有效地建立起一个生成树循环。下图31.14对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.14 -- 掌握循环守护*
|
||||
|
||||
图31.14中,该生成树网络已完成收敛,从而所有端口都处于阻塞或转发状态。但是,因为一条单向链路,Switch 3上的阻塞端口停止了接收来自Switch 2上的候选端口的BPDUs。Switch 3假定该端口可被转换成转发状态,并开始此转换。该交换机此时就将接收到的BPDUs中继出那个端口,从而导致网络循环。
|
||||
|
||||
在循环守护开启时,Switch 3保持对所有非候选端口的追踪。在端口持续接收到BPDUs时,该端口就是好的;但如该端口停止接收到BPDUs,就被转移到循环不一致状态(a loop-inconsistent state)。也就是说,在循环守护开启时,STP端口状态机(the STP port state machine)被修改为在缺少BPDUs时,阻止该端口从非候选端口角色转变成候选端口角色(in other words, when Loop Guard is enabled, the STP port state machine is modified to prevent the port from transitioning from the Non-Designated Port role to the Designated Port role in the absence of BPDUs)。在应用循环守护时,应知道以下这些应用准则。
|
||||
|
||||
+ 不能在开启了根守护(Root Guard)的交换机上开启循环守护, Loop Guard cannot be enabled on a switch that also has Root Guard enabled
|
||||
+ 循环守护不影响上行快速(Uplink Fast)或骨干快速(Backbone Fast)的运行, Loop Guard does not affect Uplink Fast or Backbone Fast operation
|
||||
+ 循环守护只是必须在点对点链路上开启,Loop Guard must be enabled on Point-to-Point links only
|
||||
+ 循环守护的运行不受生成树计时器的影响,Loop Guard operation is not affected by the Spanning Tree timers
|
||||
+ 循环守护无法真正探测出一条单向链路,Loop Guard cannot actually detect a unidirectional link
|
||||
+ 循环守护无法在端口快速或动态VLAN端口上开启,Loop Guard cannot be enabled on Port Fast or Dynamic VLAN ports
|
||||
|
||||
###根守护
|
||||
|
||||
**Root Guard**
|
||||
|
||||
**根守护特性阻止候选端口成为根端口。**如在某个根守护特性开启的端口上接收到一个优良BPDU(a superior BPDU), 根守护将该端口移入根不一致状态(a root-inconsistent state), 从而维持当前根桥状态(thus maintaining the current Root Bridge status quo)。下图31.15对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.15 -- 掌握根守护*
|
||||
|
||||
图31.15中,Switch 3被加入到当前STP网络,并发出比当前根桥更优质的BPDUs。在通常情况下,STP将重新计算整个拓扑,同时Switch 3将会被选举为根桥。但因为当前根桥及Switch 2上的候选端口上开启了根守护特性,在接收到来自Switch 3的优良BPDUs时,两台交换机都会将这些候选端口置为根不一致状态。这样做保护了生成树拓扑。
|
||||
|
||||
**根守护阻止某个端口成为根端口,因此确保该端口始终是候选端口。**与其它可同时在全局基础上开启的思科STP增强不同,根守护必须手动在所有根桥不应出现的端口上开启(unlike other STP enhancements, which can also be enabled on a global basis, Root Guard must be manually enabled on all ports where the Root Bridge should not appear)。因为这点,在LAN中STP的设计和部署时确保拓扑的确定性就很重要(because of this, it is important to ensure a deterministic topology when designing and implementing STP in the LAN)。根守护令到网络管理员可以强制候选网络中的根桥(Root Guard enables an administrator to enforce the Root Bridge palcement in the network), 确保不会有客户设备因疏忽或其它原因而成为生成树的根,所以根守护常用在ISP网络面向客户设备的边界(so it is usually used on the network edge of the ISP towards the customers's equipment)。
|
||||
|
||||
###上行快速
|
||||
|
||||
**Uplink Fast**
|
||||
|
||||
**上行快速特性提升了在主要链路失效(根端口的直接失效)时,更快的到冗余链路的切换**(the Uplink Fast feature provides faster failover to a redundant link when the primary link fails(i.e., direct failure of the Root Port))。该特性的主要目的是在出现上行链路失效时,提升STP的收敛时间。**该特性在带有到分布层冗余链路的接入层交换机上用的最多**;这也是其名称的由来。
|
||||
|
||||
在接入层交换机有着到分布层的双宿主时,其中一条链路被被STP置为阻塞状态以防止环回(when Access Layer switches are dual-homed to the Distribution Layer, one of the links is placed into a Blocking state by STP to prevent loops)。在到分布层的主链路失效时,处于阻塞状态的端口就必须在开始转发流量之前,转换到侦听和学习状态。这导致在交换机能够转发以其它网段为目的的帧之前,有一个30秒的延迟。上行快速的运作,在下图31.16中进行演示。
|
||||
|
||||

|
||||
|
||||
*图31.16 -- 掌握上行快速*
|
||||
|
||||
图31.16中,在Access 1和Distribution 1之间的链路上出现了失效,Distribution 1是STP根桥,此失效意味着STP会将Access 1和Distribution 2之间的链路移入转发状态(也就是"阻塞中">"侦听中">"学习中">"转发中",Blocking > Listening > Learning > Forwarding)。侦听和学习阶段各耗时15秒,所以该端口只需在总共30秒过去之后,便开始转发数据帧。**而在上行快速开启时,到分布层的后备端口被立即置为转发状态,从而带来无网络宕机时间的结果。**下图31.17对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.17 -- 掌握上行快速(续)*
|
||||
|
||||
###骨干快速
|
||||
|
||||
**Backbone Fast**
|
||||
|
||||
骨干快速特性提供了STP域中一条非直连链路出现失效时的快速切换。在交换机从其候选桥(在其根端口上)接收到一个较差BPDU时,快速切换便发生了。一个较差BPDU表明候选桥失去了其到根桥的连接,所以该交换机知悉存在上游失效而无需等待计时器超时就改变根端口。下图31.18中对此进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.18 -- 掌握骨干快速*
|
||||
|
||||
图31.18中,Switch 1和Switch 2之间的链路挂掉了。Switch 2探测到这个问题并发出BPDUs表明它是根桥。在来自Switch 1的BPDUs信息仍然保存着的Switch 3上,接收到较差的BPDUs。
|
||||
|
||||
Switch 3将忽略这些较差BPDUs,直到最大存活值(the Max Age value)超时。在此期间,Switch 2继续将BPDUs发送给Switch 3。在最大存活时间超时后,Switch 3会将来自根桥、存储的BPDU信息老化排除,并转换到侦听状态,接着将把从根桥接收到的BPDU发送出去,发送给Switch 2。
|
||||
|
||||
因为此BPDU好于Switch 2自己的,Switch 2将停止发送BPDUs,同时Switch 2和Switch 3之间的端口经历侦听及学习状态的转换,并最终进入到转发状态。STP过程的此默认运行方式将意味着Switch 2将至少在50秒内无法转发数据帧。
|
||||
|
||||
骨干快速特性包含了一种允许在接收到一个较差的BPDU时,立即检查某个端口上存储的BPDU信息是否仍然有效的机制。此特性通过一种叫做RLQ PDU 的新协议数据单元及根链路请求实现的(this is implemented with a new PDU and the Root Link Query(RLQ), which is referred to as the RLQ PDU)。
|
||||
|
||||
紧接着较差BPDU的接收,该交换机将在除接收该较差BPDU的端口外的所有非候选端口上,发出一个RLQ PDU。如该交换机是根桥或失去了到根桥的连接,就将对对该RLQ进行响应。否则,该RLQ将向上游传播(otherwise, the RLQ will be propagated upstream)。如该交换机在其根端口上接收到一个RLQ响应,那么到根桥的连通性仍然是完整的。如该响应实在非根端口上接收到的,就意味着到根桥的连通性已丢失,同时在交换机上的本地交换生成树必须重新计算且最大存活时间计数器被置为超时,如此就能重新找到一个新的根端口(if the response is received on a Non-Root Port, it means that connectivity to the Root Bridge is lost, and the local switch Spanning Tree must be recalculated on the switch and the Max Age timer expired so that a new Root Port can be found)。此概念在下图31.19中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.19 -- 掌握骨干快速(续)*
|
||||
|
||||
参考图31.19, 紧接着较差BPDU的接收,Switch 3在除了该BPDU所接收到的端口之外的所有非候选端口上,发出一条RLQ请求。根桥功过一条从其候选端口发出的RLQ回应,对Switch 3的RLQ请求进行响应。因为是在Switch 3的根端口上接收到的该响应,该响应被认为是一条肯定响应(a positive response)。但如该响应是在非根端口上接收到的,那么该响应就被认为是否定的且该交换机将需要再度完成整个的生成树计算。
|
||||
|
||||
基于Switch 3上接收到的肯定响应,就可以老化排除连接到Switch 2的端口而无需等待最大存活时间计数器过期(based on the positive response received on Switch 3, it can age out the port connected to Switch 2 without waiting for the Max Age timer to expire)。但是该端口仍必须经过侦听及学习状态。而通过立即将最大存活时间计数器进行老化清楚,骨干快速将收敛时间从50秒(20秒的最大存活时间 + 30秒的侦听和学习时间)减少到30秒(侦听和学习状态的时间)。
|
||||
|
||||
RLQs的类型有两种:RLQ请求和RLQ响应。**RLQ请求典型地在根端口上发出,用以检查到根桥的连通性。所有RLQ响应都是在候选端口上发出的。**因为RLQ请求包含了发送该RLQ响应的根桥BID,如到根桥路径中其它交换机仍能到达该RLQ响应中所候选的根桥,其就会响应给发出RLQ请求的交换机(because the RLQ request contains the BID of the Root Bridge that sent it, if another switch in the path to the Root Bridge can still reach the Root Bridge specified in the RLQ response, it will respond back to the sending switch)。如路径上的交换机已不能到达RLQ响应中的根桥,该交换机就简单地通过其根端口,往根桥转发该查询。
|
||||
|
||||
>**注意:**RLQ PDU有着与普通BPDU同样的包格式,唯一区别在于RLQ PDU包含了两个用于请求和回应的思科SNAP(子网接入协议,[Subnetwork Access Protocol](https://en.wikipedia.org/wiki/Subnetwork_Access_Protocol))地址。
|
||||
|
||||
##STP排错
|
||||
|
||||
**Troubleshooting STP**
|
||||
|
||||
大多数二层故障都跟域中某种循环有关,而这又引起与其相关的多种问题,包括网络停机。在进行交换机配置的工作及将某台设备插入或拔出时,应确保没有在操作过程中建立循环。为缓和这类问题,就通常应在这些交换机上配置生成树协议,以避免出现在网络中的某处偶然创建出循环的情形(to mitigate against such problems, you should usually configure Spanning Tree Protocol on switches in order to avoid situations that might occur if you happen to accidently create a loop somewhere in the network)。
|
||||
|
||||
网络中的所有交换机都是靠MAC地址进行通信的。在数据包进入时,就对MAC地址进行分析,从而基于二层头部中的目的MAC地址,确定出那个数据包的去向。网络中的所有设备都有着其自己的MAC地址,所以所有数据包在其走向上都是具体的。**不幸的是,像是广播及多播数据包前往交换机的所有端口。**如一个广播帧到达某个交换机端口,它将那个广播拷贝到可能连接到那台交换机的每台其它设备。此过程在网络中有着循环时,通常能是个问题。
|
||||
|
||||
应记住MAC地址数据包内部没有超时机制。**在TCP/IP中(in the case of TCP/IP),IP协议在其头部有一个名为TTL(存活时间,Time to Live)的功能,该功能就是通过路由器的跳数, 而不是事实上的时间单位。**所以如果IP数据包碰巧处于循环中而通过多台路由器,它们将最终超时而被从网络中移除。但是,交换机并未提供那种机制。二层数据帧理论上可以永久循环,因为没有将其超时的机制,意味着如创建出一个循环,那个循环就会一直在那里,直到手动将其从网络中移除。
|
||||
|
||||
如正将一台工作站插入到网络时,某个广播帧到达该工作站,那么该广播数据帧将在那个点终结而不会是个网络问题。但是,如在交换机侧端口进行了不当配置,或两端都插入了交换机而未开启STP,这将导致二层域内的广播风暴。广播风暴的发生,是因为广播数据包被转发到了所有其它端口,因此广播数据包保持继续存在并进入到同一网线上的另一交换机,引起二层循环。广播风暴能够引起高的资源使用甚至网络宕机。
|
||||
|
||||
如在这样的配置不当的网络上开启STP,交换机将识别到循环的出现,并会阻塞确定端口以避免广播风暴。而所有交换机中的其它端口则继续正常运作,所以网络不受影响。如未有配置STP,那么唯一可做的就是拔掉引起问题的网线,或者在还能对交换机进行操作的时候,将其管理性关闭。
|
||||
|
||||
STP故障通常有以下三类(STP issues usually fall within the following three categories)。
|
||||
|
||||
+ 不正确的根桥, incorrect Root Bridge
|
||||
+ 不正确的根端口, incorrect Root Port
|
||||
+ 不正确的候选端口,incorrect Designated Port
|
||||
|
||||
###不正确的根桥
|
||||
|
||||
优先级和基础MAC地址决定根桥是否是正确的(priority and base MAC addresss decide whether the Root Bridge is incorrect)。可以执行`show spanning-tree vlan <vlan#>`命令查看MAC地址及交换机优先级。而运用`spanning-tree vlan <vlan#> priority <priority>`命令修复此问题。
|
||||
|
||||
###不正确的根端口
|
||||
|
||||
根端口提供了自该交换机到根桥最快的路径,同时开销是跨越整个路径的累积(the Root Port provides the fastest path from the switch to the Root Bridge, and the cost is cumulative across the entire path)。如怀疑存在正确的根端口,就可执行`show spanning-tree vlan <vlan#>`命令。如根端口是不正确的,可执行`spanning-tree cost <cost>`命令对其进行修复。
|
||||
|
||||
###不正确的候选端口
|
||||
|
||||
候选端口是将某个网络区段连接到网络其它部分最低开销的端口(the Designated Port is the lowest cost port connecting a network segment to the rest of the network)。如怀疑存在候选端口问题,就可以执行`show spanning-tree vlan <vlan#>`及`spanning-tree cost <cost>`命令。
|
||||
|
||||
而可对相关事件进行调试的一个有用的STP排错命令,就是`Switch#debug spanning-tree events`。
|
||||
|
||||
##第31天问题
|
||||
|
||||
1. How often do switches send Bridge Protocol Data Units ( BPDUs)?
|
||||
2. Name the STP port states in the correct order.
|
||||
3. What is the default Cisco Bridge ID?
|
||||
4. Which command will show you the Root Bridge and priority for a VLAN?
|
||||
5. What is the STP port cost for a 100Mbps link?
|
||||
6. When a port that is configured with the `_______` `_______` feature receives a BPDU, it immediately transitions to the errdisable state.
|
||||
7. The `_______` `_______` feature effectively disables STP on the selected ports by preventing them from sending or receiving any BPDUs.
|
||||
8. Which two commands will force the switch to become the Root Bridge for a VLAN?
|
||||
9. Contrary to popular belief, the Port Fast feature does not disable Spanning Tree on the selected port. This is because even with the Port Fast feature, the port can still send and receive BPDUs. True or false?
|
||||
10. The Backbone Fast feature provides fast failover when a direct link failure occurs. True or false?
|
||||
|
||||
##第31天答案
|
||||
|
||||
1. Every two seconds.
|
||||
2. Blocking, Listening, Learning, Forwarding, and Disabled.
|
||||
3. 32768.
|
||||
4. The `show spanning-tree vlan x` command.
|
||||
5. 19.
|
||||
6. BPDU Guard.
|
||||
7. BPDU Filter.
|
||||
8. The `spanning-tree vlan [number] priority [number]` and `spanning-tree vlan [number] root [primary|secondary]` commands.
|
||||
9. True.
|
||||
10. False.
|
||||
|
||||
##第31天实验
|
||||
|
||||
###生成树根选举实验
|
||||
|
||||
**实验拓扑**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何对哪台交换机成为生成树根桥施加影响。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 设置各台交换机的主机名并将其用交叉线连接起来。此时可以检查它们之间的接口是否被设置到“trunk”中继。
|
||||
|
||||
`Switch#show interface trunk`
|
||||
|
||||
2. 在将一侧设置为中继链路之前,可能看不到中继链路变成活动的。
|
||||
|
||||
<pre>
|
||||
SwitchB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
SwitchB(config)#int FastEthernet0/1
|
||||
SwitchB(config-if)#switchport mode trunk
|
||||
SwitchB(config-if)#^Z
|
||||
SwitchB#sh int trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/1 <b>on</b> 802.1q trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/1 1-1005
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/1 1
|
||||
</pre>
|
||||
|
||||
3. 将看到另一交换机是留作自动模式的。
|
||||
|
||||
<pre>
|
||||
SwitchA#show int trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/1 <b>auto</b> n-802.1q trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/1 1-1005
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/1 1
|
||||
</pre>
|
||||
|
||||
4. 在每台交换机上创建出两个VLANs。
|
||||
|
||||
```
|
||||
SwitchA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
SwitchA(config)#vlan 2
|
||||
SwitchA(config-vlan)#vlan 3
|
||||
SwitchA(config-vlan)#^Z
|
||||
SwitchA#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
SwitchA#show vlan brief
|
||||
VLAN Name Status Ports
|
||||
---- ------------------ ------- --------------------
|
||||
1 default active Fa0/2, Fa0/3, Fa0/4,
|
||||
Fa0/5, Fa0/6, Fa0/7,
|
||||
Fa0/8, Fa0/9, Fa0/10,
|
||||
Fa0/11, Fa0/12, Fa0/13,
|
||||
Fa0/14, Fa0/15, Fa0/16,
|
||||
Fa0/17, Fa0/18, Fa0/19,
|
||||
Fa0/20, Fa0/21, Fa0/22,
|
||||
Fa0/23, Fa0/24
|
||||
2 VLAN0002 active
|
||||
3 VLAN0003 active
|
||||
1002 fddi-default active
|
||||
1003 token-ring-default active
|
||||
```
|
||||
|
||||
同时也在交换机B上创建出VLANs(拷贝上面的命令)。
|
||||
|
||||
5. 确定哪台交换机是VLANs 2和3的根桥。
|
||||
|
||||
<pre>
|
||||
SwitchB#show spanning-tree vlan 2
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID <b>Priority</b> <b>32770</b>
|
||||
Address 0001.972A.7A23
|
||||
<b>This bridge is the root</b>
|
||||
Hello Time 2 sec
|
||||
Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32770 (priority 32768 sys-id-ext 2)
|
||||
Address 0001.972A.7A23
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
</pre>
|
||||
|
||||
可以看到,Switch B是根。在交换机A上完成同样的命令,并对VLAN 3进行检查。优先级是32768加上VLAN编号,这里就是2.最低MAC地址将确定出根桥。
|
||||
|
||||
<pre>
|
||||
SwitchB#show spanning-tree vlan 3
|
||||
VLAN0003
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 32771
|
||||
Address 0001.972A.7A23
|
||||
<b>This bridge is the root</b>
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32771 (priority 32768 sys-id-ext 3)
|
||||
Address 0001.972A.7A23
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
---------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
</pre>
|
||||
|
||||
这里Switch A的MAC地址较高,这就是为何其不会成为根桥的原因:`0010:1123:D245`
|
||||
|
||||
6. 将另一个交换机设置为VLANs 2和3的根桥。对VLAN 2使用命令`spanning-tree vlan 2 priority 4096`,以及对VLAN 3的`spanning-tree vlan 3 root primary`命令。
|
||||
|
||||
<pre>
|
||||
SwitchA(config)#spanning-tree vlan 2 priority 4096
|
||||
SwitchA(config)#spanning-tree vlan 3 root primary
|
||||
SwitchA#show spanning-tree vlan 2
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID <b>Priority 4098</b>
|
||||
Address 0010.1123.D245
|
||||
<b>This bridge is the root</b>
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 4098 (priority 4096 sys-id-ext 2)
|
||||
Address 0010.1123.D245
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
SwitchA#show spanning-tree vlan 3
|
||||
VLAN0003
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 24579
|
||||
Address 0010.1123.D245
|
||||
<b>This bridge is the root</b>
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 24579 (priority 24576 sys-id-ext 3)
|
||||
Address 0010.1123.D245
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
SwitchA#
|
||||
</pre>
|
||||
|
||||
>**注意:**尽管Switch B有较低的桥ID,Switch A还是被强制作为根桥。
|
154
d32-Rapid-Spanning-Tree-Protocol.md
Normal file
@ -0,0 +1,154 @@
|
||||
#快速生成树协议
|
||||
|
||||
**Rapid Spanning Tree Protocol**
|
||||
|
||||
#第32天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND2记诵指南
|
||||
+ 在网站[http://subnetting.org/](subnetting.org)
|
||||
|
||||
IEEE 802.1D标准是在连通性从失去到恢复需要一分钟左右,就被认为性能已经可观的时期设计出来的。在IEEE 802.1D STP下,恢复大约需要50秒,这其中包括20秒的最大老化计时器(the Max Age timer)超时,以及额外的给端口从阻塞状态过渡到转发状态的30秒。
|
||||
|
||||
随着计算机技术的进化,网络变得更为重要,更为快速的网络收敛显然是人们所需要的。思科通过开发一些包括骨干快速(Backbone Fast)及上行快速(Uplink Fast)等专有的STP增强,来满足此需求。
|
||||
|
||||
今天你将学到以下知识。
|
||||
|
||||
+ RSTP的需求, the need for RSTP
|
||||
+ 配置RSTP,RSTP configuration
|
||||
|
||||
本课对应了以下CCNA大纲要求。
|
||||
|
||||
+ 认识增强的交换技术,identify enhanced switching technologies
|
||||
- RSTP
|
||||
- PVSTP
|
||||
|
||||
## RSTP的需求
|
||||
|
||||
**the Need for RSTP**
|
||||
|
||||
随着技术的持续演化,以及在同一物理平台上路由及交换的融合,在诸如OSPF及EIGRP这样的可以在更短时间内提供出替代路径的路由协议面前,交换网络的延迟就变得明显起来。802.1W标准就被设计出来解决此问题。
|
||||
|
||||
IEEE 802.1W标准,或者是快速生成树协议(Rapid Spanning Tree Protocol, RSTP), 显著地缩短了在某条链路失效时,STP用于收敛的时间。在RSTP下,网络从故障切换到一条替代路径或链路可在亚秒级别完成(with RSTP, network failover to an alternate path or link can occur in a subsecond timeframe)。RSTP是802.1D的一个扩展,执行与上行快速及骨干快速类似的功能。**RSTP比传统的STP执行得更好,且无需额外配置。此外,RSTP向后兼容最初的IEEE 802.1D STP标准。**其通过使用一种如下面的截屏中所示的修改的BPDU,实现的向后兼容。
|
||||
|
||||

|
||||
|
||||
*图 32.1 -- 修改的BPDU*
|
||||
|
||||
RSTP的各种端口状态可如下这样与STP端口状态对应起来。
|
||||
|
||||
+ 关闭 -- 丢弃,Disabled -- Discarding
|
||||
+ 阻塞 -- 丢弃,Blocking -- Discarding
|
||||
+ 侦听 -- 丢弃,Listening -- Discarding
|
||||
+ 学习 -- 学习,Learning -- Learning
|
||||
+ 转发 -- 转发,Forwarding -- Forwarding
|
||||
|
||||
RSTP包含了以下的端口角色。
|
||||
|
||||
+ 根端口(转发状态), Root(Forwarding state)
|
||||
+ 候选端口(转发状态),Designated(Forwarding state)
|
||||
+ 可变端口(阻塞状态),Alternate(Blocking state)
|
||||
+ 备份端口(阻塞状态),Bakup(Blocking state)
|
||||
|
||||
对于考试,掌握上面这些着重号标记的内容是非常重要的,尤其是哪些端口状态转发流量(一旦网络完成收敛)。图32.2及32.3分别演示了一个RSTP可变端口及一个RSTP备份端口。
|
||||
|
||||

|
||||
|
||||
*图 32.2 -- RSTP可变端口*
|
||||
|
||||

|
||||
|
||||
*图 32.3 -- RSTP备份端口*
|
||||
|
||||
###带有PVST+的RSTP
|
||||
|
||||
**RSTP with PVST+**
|
||||
|
||||
加强版的基于各VLAN的生成树允许每个VLAN都有一个单独的STP实例(Per VLAN Spanning Tree Plus(PVST+) allows for an individual STP instance per VLAN)。传统或普通的PVST+模式在出现某条链路失效时,在网络收敛中,依赖较旧的802.1D STP的使用。
|
||||
|
||||
###RPVST+
|
||||
|
||||
**RPVST+**
|
||||
|
||||
快速的基于各VLAN的生成树加强版,允许与PVST+一起使用802.1W(Rapid Per VLAN Spanning Tree Plus(RPVST+) allows for the use of 802.1W with PVST+)。这就允许在每个VLAN都有一个单独的RSTP实例的同时,提供比起802.1D STP所能提供的更为快速的收敛。**默认情况下,在某台思科交换机上开启RSTP时,也就在该交换机上开启了R-PVST+。**
|
||||
|
||||
这里有一些可用来记住IEEE STP规格字母命名的记忆窍门。
|
||||
|
||||
+ 802.1D(“经典的”生成树) -- It's dog-gone slow
|
||||
+ 802.1W(快速生成树) -- Imagine Elmer Fudd saying "rapid" as "wapid"
|
||||
+ 802.1S(多生成树) -- You add the letter "s" to nouns to make them plural(multiple) but this is a CCNP SWITCH subject
|
||||
|
||||
##RSTP的配置
|
||||
|
||||
**Configuring RSTP**
|
||||
|
||||
RSTP的配置只需一个命令!
|
||||
|
||||
```
|
||||
Switch(config)#spanning-tree mode rapid-pvst
|
||||
Switch#show spanning-tree summary
|
||||
Switch is in rapid-pvst mode
|
||||
Root bridge for: VLAN0050, VLAN0060, VLAN0070
|
||||
```
|
||||
|
||||
##第32天问题
|
||||
|
||||
**Day 32 Questions**
|
||||
|
||||
1. RSTP is not backward compatible with the original IEEE 802.1D STP standard. True or false?
|
||||
2. What are the RSTP port states?
|
||||
3. What are the four RSTP port roles?
|
||||
4. Which command enables RSTP?
|
||||
5. By default, when RSTP is enabled on a Cisco switch, R-PVST+ is enabled on the switch. True or false?
|
||||
|
||||
##第32天问题答案
|
||||
|
||||
**Day 32 Answers**
|
||||
|
||||
1. False.
|
||||
2. Discarding, Learning, and Forwarding.
|
||||
3. Root, Designated, Alernate, and Backup.
|
||||
4. The `spanning-tree mode rapid-pvst` command.
|
||||
5. True.
|
||||
|
||||
##第32天实验
|
||||
|
||||
**Day 32 Lab**
|
||||
|
||||
###RSTP实验
|
||||
|
||||
**RSTP Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习RSTP的配置命令。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 检查交换机上的生成树模式。
|
||||
|
||||
<pre>
|
||||
SwitchA#show spanning-tree summary
|
||||
Switch is in <b>pvst</b> mode
|
||||
Root bridge for: VLAN0002 VLAN0003
|
||||
</pre>
|
||||
|
||||
2. 将模式改为RSTP并再度检查。
|
||||
|
||||
<pre>
|
||||
SwitchA(config)#spanning-tree mode rapid-pvst
|
||||
SwitchA#show spanning-tree summary
|
||||
Switch is in <b>rapid-pvst</b> mode
|
||||
Root bridge for: VLAN0002 VLAN0003
|
||||
</pre>
|
||||
|
||||
3. 用RSTP模式来重复第31天的实验。
|
||||
|
||||
4. 你可以预先预测出那些端口将是根/候选/阻塞端口吗(can you predict which ports will be Root/Designated/Blocking beforehand)?
|
||||
|
818
d33-EtherChannels-and-Link-Aggregation-Protocols.md
Normal file
@ -0,0 +1,818 @@
|
||||
#第33天
|
||||
|
||||
**各种以太网通道及链路聚合协议**
|
||||
|
||||
**EtherChannels and Link Aggregation Protocols**
|
||||
|
||||
##第33天任务
|
||||
|
||||
+ 阅读今天的课文
|
||||
+ 复习昨天的课文
|
||||
+ 完成今天的实验
|
||||
+ 阅读ICND2记诵指南
|
||||
+ 在网站[subnetting.org](http://subnetting.org/)上花15分钟
|
||||
|
||||
思科IOS软件允许管理员将交换机上的多条物理链路(multiple physical links),结合成为一条单一的逻辑链路。这样做提供了一种负载分配以及链路冗余的理想方案,且可同时为二层及三层子系统所使用(provides an ideal solution for load sharing, as well as link redundancy, and can be used by both Layer 2 and Layer 3 subsystems)。
|
||||
|
||||
今天将学习以下内容。
|
||||
|
||||
+ 掌握各种以太网通道, Understanding EtherChannels
|
||||
+ 端口聚合协议概述,Port Aggregation Protocol(PAgP) overview
|
||||
+ PAgP的端口模式,PAgP port modes
|
||||
+ PAgP 以太网通道协议的数据包转发, PAgP EtherChannel Protocol packet forwarding
|
||||
+ 链路聚合控制协议概述,Link Aggregation Control Protocol(LACP) overview
|
||||
+ 各种LACP端口模式,LACP port modes
|
||||
+ 不同以太网通道负载分配方法,EtherChannel load-distribution methods
|
||||
+ 不同二层以太网通道的配置和验证,Configuring and verifying Layer 2 EtherChannels
|
||||
|
||||
本课对应了以下ICND2大纲要求。
|
||||
|
||||
+ 不同以太网通道技术,EtherChannels
|
||||
|
||||
##掌握各种以太网通道
|
||||
|
||||
**Understanding EtherChannels**
|
||||
|
||||
以太网通道是由一些物理的、单独的FastEthernet、GigabitEthernet或Ten-GigabitEthernet(10Gbps)链路绑定在一起,所构成的一条单一逻辑链路(links that are bundled together into a single logical link),如下面的图33.1所示。由FastEthernet链路所构成的以太网通道叫做FastEtherChannel(FEC);由GigabitEthernet链路所构成的通道被称为GigabitEtherChannel(GEC);最后,由Ten-GigabitEthernet链路所构成的以太网通道则被称为是Ten-GigabitEtherChannel(10GEC)。
|
||||
|
||||

|
||||
*图33.1 -- 以太网通道的物理和逻辑视图*
|
||||
|
||||
**每个以太网通道最多可由8个端口构成。**以太网通道中的物理链路**必须有着相似特性**(physical links in an EtherChannel must share similar characteristics),诸如是定义在同一个VLAN中、或有着同样的速率以及双工设置。当在思科Catalyst交换机上配置以太网通道时,重要的是记住在不同Catalyst交换机型号之间,所支持的以太网通道数目会有所不同。
|
||||
|
||||
比如在Catalyst 3750系列交换机上,支持的数目是1到48个;在Catalyst 4500系列交换机上,是1到64个;而在旗舰的Catalyst 6500系列交换机,有效的以太网通道配置数目则是依据软件版本(the software release)。对早于12.1(3a)E3的版本,有效数值是1到256;对于12.1(3a)E3、12.1(3a)E4以及12.1(4)E1,有效数值是1到64。而对于12.1(5c)EX及以后的版本,支持最大64的数量,范围从1到256。
|
||||
|
||||
>**注意:**并不要求知道不同IOS版本中所支持的以太网通道数量。
|
||||
|
||||
用于自动创建一个以太网通道组(an EtherChannel group)的链路聚合协议有两个:**端口聚合协议**(Port Aggregation Protocol, PAgP)及**链路聚合控制协议**(Link Aggregation Control Protocol, LACP)。**PAgP是一个思科专有协议,同时LACP则是IEEE 802.3ad用于从几条物理链路建立逻辑链路规格的一部分。**本模块中将详细对这两个协议进行讲述。
|
||||
|
||||
##端口聚合协议概述
|
||||
|
||||
**Port Aggregation Protocol Overview**
|
||||
|
||||
端口聚合协议(Port Aggregation Protocol, PAgP)是一个实现以太网通道自动建立的思科专有链路聚合协议(a Cisco proprietary link aggregation protocol that enables the automatic creation of EtherChannels)。默认下,PAgP数据包在可作为以太网通道的端口之间发送(PAgP packets are sent between EtherChannel-capable ports),就以太网通道的形成进行协商。这些数据包被发送到目的多播MAC地址`01-00-0C-CC-CC-CC`(the destination Multicast MAC address `01-00-0C-CC-CC-CC`),而该多播MAC地址也是CDP、UDLD、VTP以及DTP所用到同一多播地址。下图33.2显示了在线路上所见到的一个PAgP数据帧中所包含的字段。
|
||||
|
||||

|
||||
*图 33.2 -- PAgP以太网头部*
|
||||
|
||||
尽管对PAgP数据包格式的深入探讨超出了CCNA考试要求范围,下图33.3还是对一个典型的PAgP数据包所包含的字段进行了展示。PAgP数据所包含的一些字段与CCNA考试有关,在本模块的跟进中将详细说明这些字段。
|
||||
|
||||

|
||||
*图 33.3 -- 端口聚合协议数据帧*
|
||||
|
||||
##各种PAgP端口模式
|
||||
|
||||
**PAgP Port Modes**
|
||||
|
||||
PAgP支持不同端口模式,而这些端口模式则决定在两台支持PAgP的交换机(two PAgP-capable switches)之间将是否形成一个以太网通道。在深入到这两种PAgP端口模式之前,一种特别的模式需要专门关注。该模式(就是“on”模式)有时被误当作一种PAgP模式。事实上,其并不是一种PAgP的端口模式。
|
||||
|
||||
**该`on`模式强制将某个端口无条件地置于某个通道当中。**该通道将只在另一个交换机端口连接上、且被配置为`on`模式时建立起来。在此模式开启后,就不会有该通道的协商被本地以太网通道协议所执行。也就是说,这样做将切实关闭以太网通道协商并强制该端口到该通道(when this mode is enabled, there is no negotiation of the channel performed by the local EtherChannel protocol. In other words, this effectively disables EtherChannel negotiation and forces the port to the channel)。该模式的运作与中继链路上的`switchport nonegatiate`类似。**而重要的是记住配置为`on`模式的交换机接口不会对PAgP数据包进行交换。**
|
||||
|
||||
采用PAgP的交换机以太网通道可被配置为以这两种模式运行:**自动**(`auto`)或**我要**(`desirable`)。这两种PAgP模式的运作,在下面的小节进行说明。
|
||||
|
||||
###自动模式
|
||||
|
||||
**Auto Mode**
|
||||
|
||||
自动模式(`auto` mode)是一种仅在该端口接收到一个PAgP数据包时,才与另一PAgP端口进行协商的PAgP端口模式。在此模式开启后,该(这些)端口绝不会发起PAgP通信,而会在与邻居交换机建立一个以太网通道之前,被动地侦听任何接收到的PAgP数据包(when this mode is enabled, the port(s) will never initiate PAgP communications but will instead listen passively for any received PAgP packets before creating an EtherChannel with the neighbouring switch)。
|
||||
|
||||
###我要模式
|
||||
|
||||
**Desirable Mode**
|
||||
|
||||
我要模式(`desirable` mode)是一种导致某端口发起与另一PAgP端口就通道建立而进行PAgP协商的PAgP端口模式(desirable mode is a PAgP mode that causes the port to initiate PAgP negotiation for a channel with another PAgP port)。也就是说,在此模式下,该端口主动尝试与运行了PAgP的另一交换机建立一个以太网通道。
|
||||
|
||||
总的来说,要记住配置成`on`模式的交换机接口,不交换PAgP数据包,**但它们会与那些配置为`auto`或`desirable`模式的伙伴接口进行PAgP数据包的交换**(but they do exchange PAgP packets with partner interfaces configured in the auto or desirable modes)。表33.1展示了不同的PAgP组合及其在建立一个以太网通道时所使用的结果。
|
||||
|
||||
*表 33.1 -- 采用不同PAgP模式的以太网通道形成*
|
||||
|
||||
<table>
|
||||
<tr><th>交换机一PAgP模式</th><th>交换机二PAgP模式</th><th>以太网通道结果</th></tr>
|
||||
<tr><td>Auto</td><td>Auto</td><td>不会形成以太网通道</td></tr>
|
||||
<tr><td>Auto</td><td>Desirable</td><td>形成以太网通道</td></tr>
|
||||
<tr><td>Desirable</td><td>Auto</td><td>形成以太网通道</td></tr>
|
||||
<tr><td>Desirable</td><td>Desirable</td><td>形成以太网通道</td></tr>
|
||||
</table>
|
||||
|
||||
##PAgP以太网通道协议数据包的转发
|
||||
|
||||
**PAgP EtherChannel Protocol Packet Forwarding**
|
||||
|
||||
尽管PAgP允许以太网通道中的所有链路用于转发和接收用户流量,但应熟知一些关于在转发来自其它协议的流量时的限制。**DTP及CDP透过以太网通道中的所有物理接口发送和接收(协议)数据包。而PAgP仅在那些起来(`up`)并开启了`auto`或`desirable`模式的接口上发送并接收PAgP协议数据单元**(while PAgP allows for all links within the EtherChannel to be used to forward and receive user traffic, there are some restrictions that you should be familiar with regarding the forwarding of traffic from other protocols. DTP and CDP send and receive packets over all the physical interfaces in the EtherChannel. PAgP sends and receives PAgP Protocol Data Units only from interfaces that are up and have PAgP enabled for auto or desirable modes)。
|
||||
|
||||
在以太网通道捆绑(an EtherChannel bundle)被配置成一个中继端口时,该中继就在编号最低的VLAN上发送和接收PAgP数据帧。**生成树协议总是选择以太网通道捆绑中的第一个可运作端口**(when an EtherChannel bundle is configured as a trunk port, the trunk sends and receives PAgP frames on the lowest numbered VLAN. Spanning Tree Protocol(STP) always chooses the first operational port in an EtherChannel bundle)。命令`show pagp [channel number] neighbor`同样可用于验证将会用于STP数据包发送和接收的端口,确定出以太网通道捆绑中STP将使用的端口,如下面的输出所示。
|
||||
|
||||
```
|
||||
Switch-1#show pagp neighbor
|
||||
Flags: S - Device is sending Slow hello. C - Device is in Consistent state.
|
||||
A - Device is in Auto mode. P - Device learns on physical port.
|
||||
Channel group 1 neighbors
|
||||
Partner Partner Partner Partner Group
|
||||
Port Name Device ID Port Age Flags Cap.
|
||||
Fa0/1 Switch-2 0014.a9e5.d640 Fa0/1 2s SC 10001
|
||||
Fa0/2 Switch-2 0014.a9e5.d640 Fa0/2 1s SC 10001
|
||||
Fa0/3 Switch-2 0014.a9e5.d640 Fa0/3 15s SC 10001
|
||||
```
|
||||
|
||||
根据上面的输出,STP将在端口`FastEthernet0/1`上发出其协议数据包,因为该端口是第一个可运作接口。而如那个端口失效,STP将在`FastEthernet0/2`上发出其协议数据包。而由PAgP所使用的默认端口则可由`show EtherChannel summary`命令进行查看,如下面的输出所示。
|
||||
|
||||
```
|
||||
Switch-1#show EtherChannel summary
|
||||
Flags: D - down
|
||||
I - stand-alone
|
||||
H - Hot-standby (LACP only)
|
||||
R - Layer3
|
||||
u - unsuitable for bundling
|
||||
U - in use
|
||||
d - default port
|
||||
P - in port-channel
|
||||
s - suspended
|
||||
S - Layer2
|
||||
f - failed to allocate aggregator
|
||||
Number of channel-groups in use: 1
|
||||
Number of aggregators: 1
|
||||
Group Port-channel Protocol Ports
|
||||
------+-------------+-----------+--------------------------------
|
||||
1 Po1(SU) PAgP Fa0/1(Pd) Fa0/2(P) Fa0/3(P)
|
||||
```
|
||||
|
||||
当在以太网通道上配置诸如`Loop Guard`这样的附加STP特性时,非常重要的是记住就算该通道捆绑中的其它端口是可运作的,**在`Loop Guard`阻塞以太网通道捆绑的第一个端口时,就不会有BPDUs通过该通道得以发送了**。这是因为PAgP将强制令到作为以太网通道端口组中的所有端口在`Loop Guard`配置上一致(when configuring additional STP features such as Loop Guard on an EtherChannel, it is very important to remember that if Loop Guard blocks the first port, no BPDUs will be sent over the channel, even if other ports in the channel bundle are operational. This is because PAgP will enforce uniform Loop Guard configuration on all of the ports that are part of the EtherChannel group)。
|
||||
|
||||
> **真实场景应用**
|
||||
|
||||
> **Real-World Implementation**
|
||||
|
||||
> 在生产网络中,可能会用到思科虚拟交换系统(the Cisco Virtual Switching System, VSS),该系统是由两台物理Catalyst 6500系列交换机所构成的一台单一逻辑交换机。在VSS中,一台交换机被选为活动交换机(the active switch),同时另一交换机就被选为了备用交换机(the standby switch)。这两台交换机就是通过以太网通道连接在一起,从而允许它们之间控制数据包的发送和接收。
|
||||
|
||||
> 接入交换机通过采用多机以太网通道(Multichassis EtherChannel, MEC)与VSS连接起来。而一个MEC就是一个对两台物理的Catalyst 6500交换机进行跨越而端接至一台逻辑虚拟交换机系统的以太网通道。增强的端口聚合协议(Enhanced PAgP, PAgP+)可用于允许Catalyst 6500交换机在其相互之间的以太网通道失效,导致两台交换机都假定其自身是活动角色(双活动), 从而切实影响到交换网络中流量转发时,经由MEC进行通信(an MEC is simply an EtherChannel that spans the two physical Catalyst 6500 switches but terminates to the single logical VSS. Enhanced PAgP(PAgP+) can be used to allow the Catalyst 6500 switches to communicate via the MEC in the event that the EtherChannel between them fails, which would result in both switches assuming the active role(dual active), effectively affecting forwarding of traffic within the switched network)。这在下面的图表中进行了演示。
|
||||
|
||||

|
||||
|
||||
尽管VSS超出了CCNA考试要求范围,了解**只有PAgP才能用于承载VSS控制数据包**是有益处的。因此,如要在一个VSS环境,或者要在一个最终会部署上VSS的环境中部署一些以太网通道,就会打算考虑运行PAgP而不是LACP,因为LACP是一个开放标准,不支持专有的VSS数据帧。本书中不会更为深入地涉及VSS。
|
||||
|
||||
##链路聚合控制协议概述
|
||||
|
||||
**Link Aggregation Control Protocol Overview**
|
||||
|
||||
链路聚合控制协议(Link Aggregation Control Protocol, LACP)是IEEE 802.3ad规格的组成部分,用于从多条物理链路建立起一条逻辑链路。因为LACP与PAgP是不兼容的,所以链路的两端需要运行LACP以令到以太网通道组自动形成(Because LACP and PAgP are incompatible, both ends of the link need to run LACP in order to automate the formation of EtherChannel groups)。
|
||||
|
||||
与PAgP的情形一样,**在配置LACP以太网通道时,所有LAN端口都必须是同样速率,且都必须被配置成二层或三层LAN端口。**而当某端口通道中的一条链路失效时,那么先前由该链路所承载的流量就由该端口通道中剩下的链路进行交换。此外,在对某个端口通道中的活动绑定端口的编号进行修改后,流量模式将反应出该端口通道重新平衡之后的状态。
|
||||
|
||||
LACP通过在端口之间交换LACP数据包,实现对端口通道自动创建的支持。其对端口组别具备的各项能力进行动态学习,并通知给其它端口。而一旦LACP正确地识别出这些匹配的以太网链路,其就推进将这些链路编组为一个GigabitEthernet端口通道。与PAgP要求端口有着相同速率及双工设置不同,**LACP要求端口只能是全双工,因为半双工是不支持的**。某个LACP以太网通道中的那些半双工端口,被置为暂停状态(Half-duplex ports in an LACP EtherChannel are placed into the suspended state)。
|
||||
|
||||
默认情况下,一条链路上的所有入口广播及多播数据包在该端口通道的其它链路上的返回都被阻止(by default, all inbound Broadcast and Multicast packets on one link in a port channel are blocked from returning on any other link of the port channel)。LACP数据包被发送到IEEE 802.3慢速协议多播组地址(the IEEE 802.3 Slow Protocols Multicast group address)`01-80-C2-00-00-02`。LACP数据帧以EtherType数值0x8809进行编码。下图33.4演示了一个以太网数据帧中的这些字段。
|
||||
|
||||

|
||||
|
||||
*图 33.4 -- IEEE 802.3 LACP数据帧*
|
||||
|
||||
##LACP的端口模式
|
||||
|
||||
**LACP Port Modes**
|
||||
|
||||
LACP通过在端口之间交换LACP数据包,实现对端口通道自动建立的支持。而LACP又是通过动态地掌握端口组的各项能力并将其通告给其它端口完成的端口间数据交换。一旦LACP正确地识别出那些匹配的以太网链路,就推进这些链路编组为一个端口通道。而一旦LACP模式得以配置,其仅会在某单个接口被分配到指定通道组时被改变。LACP支持两种模式,**主动**(`acitve`)及**被动**(`passive`)模式。后续小节将对这两种模式的运作进行说明。
|
||||
|
||||
###LACP主动模式
|
||||
|
||||
**LACP Active Mode**
|
||||
|
||||
LACP主动模式将一个交换机端口置为经由发送LACP数据包,对远端端口发起协商的主动协商状态(an active negotiating state in which the switch port initiates negotiations with remote ports by sending LACP packets)。主动模式与PAgP的`desirable`模式等价。也就是说,在此模式下,交换机端口主动尝试与另一台同样运行LACP的交换机建立以太网通道。
|
||||
|
||||
###LACP被动模式
|
||||
|
||||
**LACP Passive Mode**
|
||||
|
||||
当交换机端口被配置为被动模式时,其只在接收到其它LACP数据包时,才就建立LACP通道进行协商。在被动模式下,该端口对其所接收到的LACP数据包进行响应,而并不发起LACP数据包协商。该设置减少了LACP数据包传输。在此模式下,该端口通道组将该接口附加到以太网通道捆绑。此模式与PAgP所用到的`auto`模式类似。
|
||||
|
||||
重要的是记住**主动和被动模式只在非PAgP接口上是有效的**(the active and passive modes are valid on non-PAgP interfaces only)。但是,如有着一个PAgP以太网通道,并打算将其转换到LACP,那么**思科IOS软件允许随时对协议进行改变**。而其间唯一的限制,就是此**改变导致全部现有以太网通道重置为新协议的默认通道模式**。下表33.2展示了不同的LACP组合及它们在两台交换机之间建立一个以太网通道中应用的结果。
|
||||
|
||||
*表 33.2 -- 使用不同LACP模式的以太网通道形成*
|
||||
|
||||
*Table 33.2 -- EtherChannel Formation Using Different LACP Modes*
|
||||
|
||||
<table>
|
||||
<tr><th>交换机一的LACP模式</th><th>交换机二的LACP模式</th><th>以太网通道结果</th></tr>
|
||||
<tr><td>被动模式</td><td>被动模式</td><td>没有以太网通道形成</td></tr>
|
||||
<tr><td>被动模式</td><td>主动模式</td><td>形成以太网通道</td></tr>
|
||||
<tr><td>主动模式</td><td>主动模式</td><td>形成以太网通道</td></tr>
|
||||
<tr><td>主动模式</td><td>被动模式</td><td>形成以太网通道</td></tr>
|
||||
</table>
|
||||
|
||||
##以太网通道的负载分配方式
|
||||
|
||||
**EtherChannel Load-Distribution Methods**
|
||||
|
||||
对于PAgP及LACP以太网通道,Catalyst交换机使用到一种利用数据包头部的一些关键字段,生成一个随后匹配到以太网通道组中的某条物理链路的散列值的多态算法。也就是说,交换机通过将由帧中的地址所形成的二进制模式,减少到从以太网通道中多条链路选出一条的一个数值,从而实现流量负载在这些链路上的分配(a polymorphic algorithm that utilises key fields from the header of the packet to generate a hash, which is then matched to a physical link in an EtherChannel group. In other words, the switch distributes the traffic load across the links in an EtherChannel by reducing part of the binary pattern formed from the addresses in the frame to a numerical value that selects one of the links in the EtherChannel)。
|
||||
|
||||
此操作可在MAC地址或IP地址上完成,并可仅基于源或目的地址,或同时基于源或目的地址。尽管对以太网通道负载分配中所用到的该散列值的实际计算的深入探讨,是超出CCNA考试要求范围的,但知道管理员可以指定头部中的哪些字段,作为确定某个数据包的传输物理链路所用到的算法的输入,是重要的(while delving into detail on the actual computation of the hash used in EtherChannel load distribution is beyond the scope of the CCNA exam requirements, it is important to know that the adminitrator can define which fields in the header can be used as input to the algorithm used to determine the physical link transport to the packet)。
|
||||
|
||||
负载分配方式通过全局配置命令`port-channel load-balance [method]`进行配置。在任何时间,都只能使用一种单一方式。下表33.3列出并解释了在配置以太网通道负载分配时,思科IOS Catalyst交换机中可用的不同方式。
|
||||
|
||||
*表 33.3 -- 以太网通道负载分配(负载均衡)的可选项*
|
||||
|
||||
*Table 33.3 -- EtherChannel Load-Distribution(Load-Balancing) Options*
|
||||
|
||||
<table>
|
||||
<tr><th>方式</th><th>说明</th></tr>
|
||||
<tr><td>dst-ip</td><td>进行基于目的IP地址的负载分配,performs load distribution based on the destination IP address</td></tr>
|
||||
<tr><td>dst-mac</td><td>进行基于目的MAC地址的负载分配,performs load distribution based on the destination MAC address</td></tr>
|
||||
<tr><td>dst-port</td><td>进行基于基于目的第4层端口的负载分配,performs load distribution based on the destination Layer 4 port</td></tr>
|
||||
<tr><td>src-dst-ip</td><td>进行基于源和目的IP地址的负载分配,performs load distribution based on the source and destination IP address</td></tr>
|
||||
<tr><td>src-dst-port</td><td>进行基于源和目的第4层端口的负载分配,performs load distribution based on the source and destination Layer 4 port</td></tr>
|
||||
<tr><td>src-ip</td><td>进行基于源IP地址的负载分配,performs load distribution based on the source IP address</td></tr>
|
||||
<tr><td>src-mac</td><td>进行基于源MAC地址的负载分配, performs load distribution based on the source MAC address</td></tr>
|
||||
<tr><td>src-port</td><td>进行基于源第4层端口的负载分配,performs load distribution based on the source Layer 4 port</td></tr>
|
||||
</table>
|
||||
|
||||
##以太网通道配置准则
|
||||
|
||||
**EtherChannel Configuration Guidelines**
|
||||
|
||||
以下小节列出并说明了配置二层PAgP以太网通道所需要的步骤。但在深入到这些配置步骤之前,有必要熟悉下面这些配置二层以太网通道时的限制。
|
||||
|
||||
+ 每个以太网通道可以有最多8个兼容配置的以太网接口。而LACP则允许一个以太网通道组中多于8个的端口。不过这些额外端口都是热备份(hot-standby)端口。
|
||||
+ 以太网通道中的所有接口都必须以相同的速率及双工模式运行。记住,与PAgP不同,LACP并不支持半双工端口。
|
||||
+ 确保以太网通道中的所有接口都是开启的。在某些情况下,如这些接口没有开启,那么该逻辑端口通道接口(the logical port channel interface)就不会被自动创建。
|
||||
+ 在初次配置一个以太网通道组时,重要的是记住这些端口与所加入的第一个组端口参数集一致(when first configuring an EtherChannel group, it is important to remember that ports follow the parameters set for the first group port added)。
|
||||
+ 如有为某个以太网通道中的某个成员端口配置交换机端口分析器(Switch Port Analyzer, SPAN), 那么该端口将会从该以太网通道组中移除。
|
||||
+ 将以太网通道中的所有端口都指派到同一个VLAN,或将它们配置成中继端口,是必要的。而如果这些参数不同,该通道就不会形成。
|
||||
+ 记住有着不同STP路径开销(由某位管理员所修改的)的那些类似接口,仍可用于组成一个以太网通道。
|
||||
+ 在开始通道配置之前,建议首先关闭所有成员接口(it is recommended to shut down all member interfaces prior to beginning channelling configuration)。
|
||||
|
||||
###配置并验证二层以太网通道
|
||||
|
||||
**Configuring and Verifying Layer 2 EtherChannels**
|
||||
|
||||
该部分内容通过无条件地强制所选接口建立一个以太网通道,对二层以太网通道的配置进行了说明(this section describes the configuration of Layer 2 EtherChannels by unconditionally forcing the selected interfaces to establish an EtherChannel)。
|
||||
|
||||
1. 第一个配置步骤是通过全局配置命令`interface [name]`或`interface range [range]`,进入那些所需要的以太网通道接口的接口配置模式;
|
||||
2. 配置的第二步是通过接口配置命令`switchport`,将这些接口配置为二层交换机接口;
|
||||
3. 第三个配置步骤是通过接口配置命令`switchport mode [access|trunk]`,将这些交换机端口配置为中继或接入链路;
|
||||
4. 作为可选步骤,如该接口或这些接口已被配置为接入端口,就要使用命令`switchport access vlan [number]`,将其指派到同样的VLAN中。而如该接口或这些接口已被配置为中继端口,就要通过执行接口配置命令`switchport trunk allowed vlan [range]`,选择允许通过该中继的那些VLANs;而如VLAN 1将不作为原生VLAN(802.1Q的),就要通过执行接口配置命令`switchport trunk native vlan [number]`, 输入原生VLAN。此项配置在所有端口通道成员接口上必须一致。
|
||||
5. 下一配置步骤就是通过接口配置命令`channel-group [number] mode on`, 将这些接口配置为无条件中继(the next configuration step is to configure the interfaces to unconditionally trunk via the `channel-group [number] mode on` interface configration command)。
|
||||
|
||||
用到上述步骤的无条件以太网通道配置,将基于下图33.5中所演示的网络拓扑。
|
||||
|
||||

|
||||
|
||||
*图 33.5 -- 以太网通道配置输出示例的网络拓扑*
|
||||
|
||||
下面的输出演示了如何在Switch 1及Switch 2上,基于图33.5中所描述的网络拓扑,配置无条件通道操作。该以太网通道将配置成一个使用默认参数的二层802.1Q中继。
|
||||
|
||||
```
|
||||
Switch-1#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-1(config)#interface range fa0/1 – 3
|
||||
Switch-1(config-if-range)#no shutdown
|
||||
Switch-1(config-if-range)#switchport
|
||||
Switch-1(config-if-range)#switchport trunk encapsulation dot1q
|
||||
Switch-1(config-if-range)#switchport mode trunk
|
||||
Switch-1(config-if-range)#channel-group 1 mode on
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-1(config-if-range)#exit
|
||||
Switch-1(config)#exit
|
||||
```
|
||||
|
||||
>**注意:**注意到该交换机自动默认创建出`interface port-channel 1`(根据下面的输出)。**没有要配置该接口的显式用户配置**(notice that the switch automatically creates `interface port-channel 1` by default(refer to the output below). No explicit user configurtion is required to configure this interface)。
|
||||
|
||||
```
|
||||
Switch-2#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-2(config)#interface range fa0/1 - 3
|
||||
Switch-2(config-if-range)#switchport
|
||||
Switch-2(config-if-range)#switchport trunk encapsulation dot1q
|
||||
Switch-2(config-if-range)#switchport mode trunk
|
||||
Switch-2(config-if-range)#channel-group 1 mode on
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-2(config-if-range)#exit
|
||||
Switch-2(config)#exit
|
||||
```
|
||||
|
||||
命令`show EtherChannel [options]`此时即可用于验证该以太网通道的配置。下面的输出中打印了可用选项(依据不同平台会有不同)。
|
||||
|
||||
```
|
||||
Switch-2#show EtherChannel ?
|
||||
<1-6> Channel group number
|
||||
detail Detail information
|
||||
load-balance Load-balance/frame-distribution scheme among ports in port-channel
|
||||
port Port information
|
||||
port-channel Port-channel information
|
||||
protocol protocol enabled
|
||||
summary One-line summary per channel-group
|
||||
| Output modifiers
|
||||
<cr>
|
||||
```
|
||||
|
||||
下面的输出对命令`show EtherChannel summary`进行了演示。
|
||||
|
||||
```
|
||||
Switch-2#show EtherChannel summary
|
||||
Flags: D - down
|
||||
I - stand-alone
|
||||
H - Hot-standby (LACP only)
|
||||
R - Layer3
|
||||
u - unsuitable for bundling
|
||||
U - in use
|
||||
d - default port
|
||||
P - in port-channel
|
||||
s - suspended
|
||||
S - Layer2
|
||||
f - failed to allocate aggregator
|
||||
Number of channel-groups in use: 1
|
||||
Number of aggregators: 1
|
||||
Group Port-channel Protocol Ports
|
||||
------+-------------+-----------+--------------------------------
|
||||
1 Po1(SU) - Fa0/1(Pd) Fa0/2(P) Fa0/3(P)
|
||||
```
|
||||
|
||||
在上面的输出中,可以看到在通道组1(Channel Group 1)中有三条链路。接口FastEthernet0/1是默认端口;**该端口将用于发送比如的STP数据包**。如果该端口失效,FastEthernet0/2就将被指定为默认端口,如此延续(this port will be used to send STP pakcets, for example. If this port fails, FastEthernet0/2 will be designated as the default port, and so forth)。同时通过看看`Po1`后面的`SU`标志,还可以看到该端口组是一个活动的二层以太网通道。下面的输出现实了由`show EtherChannel detail`命令所打印出的信息。
|
||||
|
||||
```
|
||||
Switch-2#show EtherChannel detail
|
||||
Channel-group listing:
|
||||
----------------------
|
||||
Group: 1
|
||||
----------
|
||||
Group state = L2
|
||||
Ports: 3 Maxports = 8
|
||||
Port-channels: 1 Max Port-channels = 1
|
||||
Protocol: -
|
||||
Ports in the group:
|
||||
-------------------
|
||||
Port: Fa0/1
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = On/FEC Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Pol
|
||||
Port index = 0 Load = 0x00 Protocol = -
|
||||
Age of the port in the current state: 0d:00h:20m:20s
|
||||
Port: Fa0/2
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = On/FEC Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Pol
|
||||
Port index = 0 Load = 0x00 Protocol = -
|
||||
Age of the port in the current state: 0d:00h:21m:20s
|
||||
Port: Fa0/3
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = On/FEC Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Pol
|
||||
Port index = 0 Load = 0x00 Protocol = -
|
||||
Age of the port in the current state: 0d:00h:21m:20s
|
||||
Port-channels in the group:
|
||||
---------------------------
|
||||
Port-channel: Po1
|
||||
------------
|
||||
Age of the Port-channel = 0d:00h:26m:23s
|
||||
Logical slot/port = 1/0 Number of ports = 3
|
||||
GC = 0x00000000 HotStandBy port = null
|
||||
Port state = Port-channel Ag-Inuse
|
||||
Protocol = -
|
||||
Ports in the Port-channel:
|
||||
Index Load Port EC state No of bits
|
||||
------+------+------+------------------+-----------
|
||||
0 00 Fa0/1 On/FEC 0
|
||||
0 00 Fa0/2 On/FEC 0
|
||||
0 00 Fa0/3 On/FEC 0
|
||||
Time since last port bundled: 0d:00h:21m:20s Fa0/3
|
||||
```
|
||||
|
||||
在上面的输出中,可以看出这是一个带有通道组中最多8个可能端口中的三个的二层以太网通道。还可以看出,以太网通道模式是`on`, 这是基于由一条短横线所表示的协议字段看出的。此外,同样可以看出这是一个FastEtherChannel(FEC)(in the output above, you can see that this is a Layer 2 EtherChannel with three out of a maximum of eight possible ports in the channel group. You can also see that the EtherChannel mode is on, based on the protocol being denoted by a hash(-). In addition, you can also see that this is a FastEtherChannel(FEC))。
|
||||
|
||||
最后,还可以通过执行命令`show interface port-channel [number] switchport`,对该逻辑的port-channel接口的二层运行状态进行检查。这在下面的输出中进行了演示。
|
||||
在上面的输出中,可以看到这是一个带有通道组中最多8个中的3个端口的二层以太网通道。还可以从由短横所表示的协议,看出以太网通道模式是`on`。此外,还可以看到这是一个FastEtherChannel(FEC)。
|
||||
|
||||
最后,还可通过执行命令`show interfaces port-channel [number] switchport`, 对该逻辑的端口通道接口(the logical port-channel interface)的二层运作状态进行查看。这在下面的输出中有所演示。
|
||||
|
||||
```
|
||||
Switch-2#show interfaces port-channel 1 switchport
|
||||
Name: Po1
|
||||
Switchport: Enabled
|
||||
Administrative Mode: trunk
|
||||
Operational Mode: trunk
|
||||
Administrative Trunking Encapsulation: dot1q
|
||||
Operational Trunking Encapsulation: dot1q
|
||||
Negotiation of Trunking: On
|
||||
Access Mode VLAN: 1 (default)
|
||||
Trunking Native Mode VLAN: 1 (default)
|
||||
Voice VLAN: none
|
||||
Administrative private-vlan host-association: none
|
||||
Administrative private-vlan mapping: none
|
||||
Administrative private-vlan trunk native VLAN: none
|
||||
Administrative private-vlan trunk encapsulation: dot1q
|
||||
Administrative private-vlan trunk normal VLANs: none
|
||||
Administrative private-vlan trunk private VLANs: none
|
||||
Operational private-vlan: none
|
||||
Trunking VLANs Enabled: ALL
|
||||
Pruning VLANs Enabled: 2-1001
|
||||
Protected: false
|
||||
Appliance trust: none
|
||||
```
|
||||
|
||||
###配置并验证PAgP以太网通道
|
||||
|
||||
**Configuring and Verifying PAgP EtherChannels**
|
||||
|
||||
此部分对PAgP二层以太网通道的配置进行了说明。为配置并建立一个PAgP以太网通道,需要执行以下步骤。
|
||||
|
||||
1. 第一个配置步骤是通过全局配置命令`interface [name]`或`interface range [range]`,进入到所需的这些以太网接口的接口配置模式;
|
||||
2. 配置的第二步,是通过接口配置命令`switchport`, 将这些接口配置为二层交换端口;
|
||||
3. 第三个配置步骤,是通过接口配置命令`switchport mode [access|trunk]`,将这些交换端口,配置为中继或接入链路;
|
||||
4. 作为可选步骤,如果已将这些端口配置为接入端口,那么就要使用命令`switchport access vlan [number]`, 将其指派到同一个VLAN中;而如果这些接口已被配置为中继端口,那么就要通过执行接口配置命令`switchport trunk allowed vlan [range]`,来选择所允许通过该中继的那些VLANs;如未打算将VLAN 1用作原生VLAN(对于802.1Q),就要通过执行接口配置命令`switchport trunk native vlan [number]`,输入原生VLAN。此项配置在所有端口通道的成员接口上一致。
|
||||
5. 作为可选项,通过执行接口配置命令`channel-protocol pagp`,将PAgP配置作为以太网通道协议(the EtherChannel protocol)。因为以太网通道默认是PAgP的,所以此命令被认为是可选的而无需输入。但执行该命令被看作是良好实践,因为可以令到配置绝对确定(it is considered good practice to issue this command just to be absolutely sure of your configuration)。
|
||||
6. 下一步就是通过接口配置命令`channel-group [number] mode`,将这些接口配置为无条件中继。
|
||||
|
||||
下面的输出演示了如何在基于上面的图33.5中所给出的网络拓扑的Switch 1和Switch 2上,配置PAgP的通道(PAgP channelling)。该以太网通道将被配置为使用默认参数的二层802.1Q中继。
|
||||
|
||||
```
|
||||
Switch-1#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-1(config)#interface range fa0/1 - 3
|
||||
Switch-1(config-if-range)#switchport
|
||||
Switch-1(config-if-range)#switchport trunk encap dot1q
|
||||
Switch-1(config-if-range)#switchport mode trunk
|
||||
Switch-1(config-if-range)#channel-group 1 mode desirable
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-1(config-if-range)#exit
|
||||
```
|
||||
|
||||
>**注意:**在上面的输出中,选择了端口通道的`desirable`模式。可以在此命令(`channel-group 1 mode desirable`)之后加上一个额外关键字`[non-silent]`。这是因为,默认情况下,PAgP的`auto`模式默认是安静模式。当交换机被连接到一台不兼容PAgP的设备时,就用到安静模式,且绝不会传送数据包(an additional keyword, `[non-silent]`, may also be appended to the end of this command. This is because, by default, PAgP auto and desirable modes default to a silent mode. The silent mode is used when the switch is connected to a device that is not PAgP-capable and that seldom, if ever transmits packets)。一台安静相邻设备的例子(an example of a silent partner),就是一台文件服务器或未有生成流量的数据包分析器。而如果一台设备不会发出PAgP数据包(比如处于`auto`模式),也用到安静模式。
|
||||
|
||||
在此示例中,在一个连接到一台安静相邻设备的物理端口上运行PAgP阻止了那个交换机端口成为运作端口;但是,该安静设置允许PAgP运行,从而将该接口加入到一个通道组,同时利用该接口进行传输。在本例中,因为Switch 2将被配置为`auto`模式(被动模式), 该端口采用默认的安静模式运作,就是首先的了(In this case, running PAgP on a physical port connected to a silent partner prevents that switch port from ever becoming operational; however, the silent setting allows PAgP to operate, to attatch the interface to a channel group, and to use the interface for transmission. In this example, because Switch 2 will be configured for auto mode(passive mode), it is preferred that the port uses the default silent mode operation)。这在下面的PAgP以太网通道配置中进行了演示。
|
||||
|
||||
```
|
||||
Switch-1#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-1(config)#interface range fa0/1 - 3
|
||||
Switch-1(config-if-range)#switchport
|
||||
Switch-1(config-if-range)#switchport trunk encap dot1q
|
||||
Switch-1(config-if-range)#switchport mode trunk
|
||||
Switch-1(config-if-range)#channel-group 1 mode desirable ?
|
||||
non-silent Start negotiation only after data packets received
|
||||
<cr>
|
||||
Switch-1(config-if-range)#channel-group 1 mode desirable non-silent
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-1(config-if-range)#exit
|
||||
```
|
||||
|
||||
继续进行PAgP以太网通道的配置,则Switch 2被配置为以下这样。
|
||||
|
||||
```
|
||||
Switch-2#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-2(config)#int range fa0/1 - 3
|
||||
Switch-2(config-if-range)#switchport
|
||||
Switch-2(config-if-range)#switchport trunk encapsulation dot1q
|
||||
Switch-2(config-if-range)#switchport mode trunk
|
||||
Switch-2(config-if-range)#channel-group 1 mode auto
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-2(config-if-range)#exit
|
||||
```
|
||||
|
||||
以下输出演示了怎样通过在Switch 1及Switch 2上使用命令`show EtherChannel summary`,验证该PAgP以太网通道的配置。
|
||||
|
||||
```
|
||||
Switch-1#show EtherChannel summary
|
||||
Flags: D - down
|
||||
I - stand-alone
|
||||
H - Hot-standby (LACP only)
|
||||
R - Layer3
|
||||
u - unsuitable for bundling
|
||||
U - in use
|
||||
d - default port
|
||||
P - in port-channel
|
||||
s - suspended
|
||||
S - Layer2f - failed to allocate aggregator
|
||||
Number of channel-groups in use: 1
|
||||
Number of aggregators: 1
|
||||
Group Port-channel Protocol Ports
|
||||
------+-------------+-----------+--------------------------------
|
||||
1 Po1(SU) PAgP Fa0/1(Pd) Fa0/2(P) Fa0/3(P)
|
||||
```
|
||||
|
||||
还可以通过执行命令`show pagp [options]`, 查看到PAgP以太网通道的配置及统计数据。下面的输出,演示了此命令下可用的选项。
|
||||
|
||||
```
|
||||
Switch-1#show pagp ?
|
||||
<1-6> Channel group number
|
||||
counters Traffic information
|
||||
internal Internal information
|
||||
neighbor Neighbor information
|
||||
```
|
||||
|
||||
>**注意:**对需要的端口通道编号的进入,提供上面所打印出的后三个选项。这在下面的输出中进行了演示。
|
||||
|
||||
```
|
||||
Switch-1#show pagp 1 ?
|
||||
counters Traffic information
|
||||
internal Internal information
|
||||
neighbor Neighbor information
|
||||
```
|
||||
|
||||
关键字`[counters]`提供了有关PAgP发出及接收到的数据包的信息。关键字`[internal]`提供了诸如端口状态、Hello间隔时间、PAgP端口优先级以及端口学习方式等的信息。下面的输出对命令`show pagp internal`的使用进行了演示。
|
||||
|
||||
```
|
||||
Switch-1#show pagp 1 internal
|
||||
Flags: S - Device is sending Slow hello. C - Device is in Consistent state.
|
||||
A - Device is in Auto mode. d - PAgP is down.
|
||||
Timers: H - Hello timer is running. Q - Quit timer is running.
|
||||
S - Switching timer is running. I - Interface timer is running.
|
||||
Channel group 1
|
||||
Hello Partner PAgP Learning Group
|
||||
Port Flags State Timers Interval Count Priority Method Ifindex
|
||||
Fa0/1 SC U6/S7 H 30s 1 128 Any 29
|
||||
Fa0/2 SC U6/S7 H 30s 1 128 Any 29
|
||||
Fa0/3 SC U6/S7 H 30s 1 128 Any 29
|
||||
```
|
||||
|
||||
关键字`[neighbor]`打印出邻居名称、PAgP邻居的ID、邻居设备ID(MAC)以及邻居端口。同时在比如邻居是一台物理学习设备时(a physical learner),这些标志同样表明了邻居运行的模式。下面的输出对命令`show pagp neighbor`的使用,进行了演示。
|
||||
|
||||
```
|
||||
Switch-1#show pagp 1 neighbor
|
||||
Flags: S - Device is sending Slow hello. C - Device is in Consistent state.
|
||||
A - Device is in Auto mode. P - Device learns on physical port.
|
||||
Channel group 1 neighbors
|
||||
Partner Partner Partner Partner Group
|
||||
Port Name Device ID Port Age Flags Cap.
|
||||
Fa0/1 Switch-2 0014.a9e5.d640 Fa0/1 19s SAC 10001
|
||||
Fa0/2 Switch-2 0014.a9e5.d640 Fa0/2 24s SAC 10001
|
||||
Fa0/3 Switch-2 0014.a9e5.d640 Fa0/3 18s SAC 10001
|
||||
```
|
||||
|
||||
###配置并验证LACP以太网通道
|
||||
|
||||
**Configuring and Verifying LACP EtherChannels**
|
||||
|
||||
此部分对LACP的二层以太网通道的配置进行了讲述。为配置并建立一个LACP以太网通道,需要执行下面这些步骤。
|
||||
|
||||
1. 第一个配置步骤是通过全局配置命令`interface [name]`或`interface range [range]`, 进入到所需要的以太网通道接口的接口配置模式;
|
||||
2. 第二个配置步骤时通过接口配置命令`switchport`,将这些接口配置为二层交换端口;
|
||||
3. 第三个配置步骤,时通过接口配置命令`switchport mode [access|trunk]`,将这些交换端口配置为中继或接入链路;
|
||||
4. 作为可选步骤,如该接口或这些接口已被配置为接入端口,就要使用命令`switchport access vlan [number]`将其指派到同样的VLAN中。而如该接口或这些接口已被配置为中继端口,就要通过执行接口配置命令`switchport trunk allowed vlan [range]`, 选择允许通过该中继的VLANs; 而如将不使用VLAN 1作为原生VLAN(802.1Q的),就要通过执行接口配置命令`switchport trunk native vlan [number]`,输入该原生VLAN。此项配置在所有的端口通道成员接口上一致;
|
||||
5. 通过执行接口配置命令`channel-protocol lacp`, 将LACP配置作为以太网通道协议。因为以太网通道协议默认时PAgP,该命令被认为时LACP所强制的,同时也是所要求输入的(because EtherChannels default to PAgP, this command is considered mandatory for LACP and is required);
|
||||
6. 下一配置步骤时通过接口配置命令`channel-group [number] mode`,将这些接口配置为无条件中继(the next configuration step is to configure the interfaces to unconditionally trunk via the `channel-group [number] mode` interface configuration command)。
|
||||
|
||||
下面的输出对在Switch 1和Switch 2上如何配置基于图33.5中所给出的网络拓扑的LACP通道,进行了演示,该以太网通道将被配置为一个使用默认参数的二层802.1Q中继,如下面的输出所示。
|
||||
|
||||
```
|
||||
Switch-1#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-1(config)#int range FastEthernet0/1 - 3
|
||||
Switch-1(config-if-range)#switchport
|
||||
Switch-1(config-if-range)#switchport trunk encapsulation dot1q
|
||||
Switch-1(config-if-range)#switchport mode trunk
|
||||
Switch-1(config-if-range)#channel-protocol lacp
|
||||
Switch-1(config-if-range)#channel-group 1 mode active
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-1(config-if-range)#exit
|
||||
Switch-2#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Switch-2(config)#interface range FastEthernet0/1 - 3
|
||||
Switch-2(config-if-range)#switchport
|
||||
Switch-2(config-if-range)#switchport trunk encapsulation dot1q
|
||||
Switch-2(config-if-range)#switchport mode trunk
|
||||
Switch-2(config-if-range)#channel-protocol lacp
|
||||
Switch-2(config-if-range)#channel-group 1 mode passive
|
||||
Creating a port-channel interface Port-channel 1
|
||||
Switch-2(config-if-range)#exit
|
||||
```
|
||||
|
||||
下面的输出演示了如何通过在Switch 1及Switch 2上执行`show EtherChannel summary`命令,来对该LACP以太网通道配置进行验证。
|
||||
|
||||
```
|
||||
Switch-1#show EtherChannel summary
|
||||
Flags: D - down
|
||||
I - stand-alone
|
||||
H - Hot-standby (LACP only)
|
||||
R - Layer3
|
||||
u - unsuitable for bundling
|
||||
U - in use
|
||||
d - default port
|
||||
P - in port-channel
|
||||
s - suspended
|
||||
S - Layer2
|
||||
f - failed to allocate aggregator
|
||||
Number of channel-groups in use: 1
|
||||
Number of aggregators: 1
|
||||
Group Port-channel Protocol Ports
|
||||
------+-------------+-----------+--------------------------------
|
||||
1 Po1(SU) LACP Fa0/1(Pd) Fa0/2(P) Fa0/3(P)
|
||||
```
|
||||
|
||||
默认LACP允许最多16个端口进入到一个端口通道组中(by default, LACP allows up to 16 ports to be entered into a port channel group)。前8个运作接口将为LACP所使用,而剩下的8个接口将被置为热备份状态。命令`show EtherChannel detail`显示出一个LACP以太网通道中所支持的链路最大数量,如下面的输出所示。
|
||||
|
||||
<pre>
|
||||
Switch-1#<b>show EtherChannel 1 detail</b>
|
||||
Group state = L2
|
||||
<b>Ports: 3 Maxports = 16
|
||||
Port-channels: 1 Max Port-channels = 16</b>
|
||||
Protocol: LACP
|
||||
Ports in the group:
|
||||
-------------------
|
||||
Port: Fa0/1
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = Active Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Po1
|
||||
Port index = 0 Load = 0x00 Protocol = LACP
|
||||
Flags: S - Device is sending Slow LACPDUs. F - Device is sending fast
|
||||
LACPDUs.
|
||||
A - Device is in active mode. P - Device is in passive mode.
|
||||
Local information:
|
||||
LACP port Admin Oper Port Port
|
||||
Port Flags State Priority Key Key Number State
|
||||
Fa0/1 SA bndl 32768 0x1 0x1 0x0 0x3D
|
||||
Partner’s information
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/1 00001,0014.a9e5.d640 0x1 4s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
Age of the port in the current state: 00d:00h:00m:35s
|
||||
Port: Fa0/2
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = Active Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Po1
|
||||
Port index = 0 Load = 0x00 Protocol = LACP
|
||||
Flags: S - Device is sending Slow LACPDUs. F - Device is sending fast
|
||||
LACPDUs.
|
||||
A - Device is in active mode. P - Device is in passive mode.
|
||||
Local information:
|
||||
LACP port Admin Oper Port Port
|
||||
Port Flags State Priority Key Key Number State
|
||||
Fa0/2 SA bndl 32768 0x1 0x1 0x1 0x3D
|
||||
Partner’s information
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/2 00001,0014.a9e5.d640 0x2 28s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
Age of the port in the current state: 00d:00h:00m:33s
|
||||
Port: Fa0/3
|
||||
------------
|
||||
Port state = Up Mstr In-Bndl
|
||||
Channel group = 1 Mode = Active Gcchange = -
|
||||
Port-channel = Po1 GC = - Pseudo port-channel = Po1
|
||||
Port index = 0 Load = 0x00 Protocol = -
|
||||
Flags: S - Device is sending Slow LACPDUs. F - Device is sending fast
|
||||
LACPDUs.
|
||||
A - Device is in active mode. P - Device is in passive mode.
|
||||
Local information:
|
||||
LACP port Admin Oper Port Port
|
||||
Port Flags State Priority Key Key Number State
|
||||
Fa0/3 SA bndl 32768 0x1 0x1 0x2 0x3D
|
||||
Partner’s information:
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/3 00001,0014.a9e5.d640 0x3 5s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
Age of the port in the current state: 00d:00h:00m:29s
|
||||
Port-channels in the group:
|
||||
----------------------
|
||||
Port-channel: Po1 (Primary Aggregator)
|
||||
------------
|
||||
Age of the Port-channel = 00d:00h:13m:50s
|
||||
Logical slot/port = 1/0 Number of ports = 3
|
||||
HotStandBy port = null
|
||||
Port state = Port-channel Ag-Inuse
|
||||
Protocol = LACP
|
||||
Ports in the Port-channel:
|
||||
Index Load Port EC state
|
||||
------+------+------+------------
|
||||
0 00 Fa0/1 Active
|
||||
0 00 Fa0/2 Active
|
||||
0 00 Fa0/3 Active
|
||||
Time since last port bundled: 00d:00h:00m:32s Fa0/3
|
||||
Time since last port Un-bundled: 00d:00h:00m:49s Fa0/1
|
||||
</pre>
|
||||
|
||||
LACP的配置及统计数据也可以通过执行`show lacp [options]`命令进行查看。此命令可用的选项在下面的输出中进行了演示。
|
||||
|
||||
<pre>
|
||||
Switch-1#<b>show lacp ?</b>
|
||||
<1-6> Channel group number
|
||||
counters Traffic information
|
||||
internal Internal information
|
||||
neighbor Neighbor information
|
||||
sys-id LACP System ID
|
||||
</pre>
|
||||
|
||||
`[counters]`关键字提供了有关LACP发出和接收到的数据包的信息。该命令的打印输出如下面所示。
|
||||
|
||||
<pre>
|
||||
Switch-1#<b>show lacp counters</b>
|
||||
LACPDUs Marker Marker Response LACPDUs
|
||||
Port Sent Recv Sent Recv Sent Recv Pkts Err
|
||||
---------------------------------------------------------------------
|
||||
Channel group: 1
|
||||
Fa0/1 14 12 0 0 0 0 0
|
||||
Fa0/2 21 18 0 0 0 0 0
|
||||
Fa0/3 21 18 0 0 0 0 0
|
||||
</pre>
|
||||
|
||||
而`[internal]`关键字提供了诸如端口状态、管理密钥(adminitrative key)、LACP端口优先级,以及端口编号等信息。下面的输出对此进行了演示。
|
||||
|
||||
<pre>
|
||||
Switch-1#<b>show lacp internal</b>
|
||||
Flags: S - Device is sending Slow LACPDUs. F - Device is sending Fast
|
||||
LACPDUs.
|
||||
A - Device is in Active mode. P - Device is in Passive mode.
|
||||
Channel group 1
|
||||
LACP port Admin Oper Port Port
|
||||
Port Flags State Priority Key Key Number State
|
||||
Fa0/1 SA bndl 32768 0x1 0x1 0x0 0x3D
|
||||
Fa0/2 SA bndl 32768 0x1 0x1 0x1 0x3D
|
||||
Fa0/3 SA bndl 32768 0x1 0x1 0x2 0x3D
|
||||
</pre>
|
||||
|
||||
关键字`[neighbor]`打印出邻居名称、LACP邻居的ID、邻居的设备ID(MAC),以及邻居端口等信息。这些标志还表明邻居运行所处状态,以及其是否时一个物理学习设备(the flags also indicate the mode the neighbor is operating in, as well as whether it is a physical learner, for example)。下面的输出对此进行了演示。
|
||||
|
||||
<pre>
|
||||
Switch-1#show lacp neighbor
|
||||
Flags: S - Device is sending Slow LACPDUs. F - Device is sending Fast
|
||||
LACPDUs.
|
||||
A - Device is in Active mode. P - Device is in Passive mode.
|
||||
Channel group 1 neighbors
|
||||
Partner’s information
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/1 00001,0014.a9e5.d640 0x1 11s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
Partner’s information:
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/2 00001,0014.a9e5.d640 0x2 19s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
Partner’s information:
|
||||
Partner Partner Partner
|
||||
Port System ID Port Number Age Flags
|
||||
Fa0/3 00001,0014.a9e5.d640 0x3 24s SP
|
||||
LACP Partner Partner Partner
|
||||
Port Priority Oper Key Port State
|
||||
32768 0x1 0x3C
|
||||
</pre>
|
||||
|
||||
最后,关键字`[sys-id]`提供了本地交换机的系统ID(finally, the `[sys-id]` keyword provides the system ID of the local switch)。这是一个该交换机MAC地址和LACP优先级的结合体,如下面的输出所示。
|
||||
|
||||
```
|
||||
Switch-1#show lacp sys-id
|
||||
1 ,000d.bd06.4100
|
||||
```
|
||||
|
||||
##第33天问题
|
||||
|
||||
1. What type of ports does a FastEtherChannel contain?
|
||||
2. How many ports can a standard EtherChannel contain?
|
||||
3. What are the two protocol options you have when configuring EtherChannels on a Cisco switch?
|
||||
4. Which of the protocols mentioned above is Cisco proprietary?
|
||||
5. PagP packets are sent to the destination Multicast MAC address `01-00-0C-CC-CC-CC`. True
|
||||
or false?
|
||||
6. What are the two port modes supported by PagP?
|
||||
7. What are the two port modes supported by LACP?
|
||||
8. If more than eight links are assigned to an EtherChannel bundle running LACP, the protocol uses the port priority to determine which ports are placed into a standby mode. True or false?
|
||||
9. LACP automatically configures an administrative key value on each port configured to use LACP. The administrative key defines the ability of a port to aggregate with other ports. Only ports that have the same administrative key are allowed to be aggregated into the same port channel group. True or false?
|
||||
10. What is the command used to assign a port to a channel group?
|
||||
|
||||
##第33天答案
|
||||
|
||||
1. 100 Mbps ports.
|
||||
2. Up to eight ports.
|
||||
3. PagP and LACP.
|
||||
4. PagP.
|
||||
5. True.
|
||||
6. Auto and desirable.
|
||||
7. Active and passive.
|
||||
8. True.
|
||||
9. True.
|
||||
10. The `channel-group [number] mode` command in Interface Configuration mode.
|
||||
|
||||
##第33天实验
|
||||
|
||||
###以太网通道实验
|
||||
|
||||
**EtherChannel Lab**
|
||||
|
||||
在一个包含了两台直接相连的交换机(它们至今至少有两条链路)上,对本课程模块中出现的配置命令进行测试。通过Fa1/1及Fa2/2将它们连接起来(Fa1/1到Fa1/1及Fa2/2到Fa2/2)。
|
||||
|
||||
+ 在两条链路上以`auto-desirable`模式配置PAgP
|
||||
+ 将该以太网通道配置为一条中继并允许一些VLANs通过它
|
||||
+ 执行一条`show etherchannel summary`命令,并验证该端口通道是运行的
|
||||
+ 执行一条`show mac-address-table`命令,并看看在两台交换机上所学习到的MAC地址
|
||||
+ 执行一条`show pagp neighbor`命令,并检查结果
|
||||
+ 采用LACP的`passive-active`模式,重复上述步骤
|
||||
+ 使用命令`show EtherChannel detail`及`show lacp neighbor`命令,对配置进行验证
|
||||
+ 使用`show interface port-channel [number] switchport`命令,对配置进行验证
|
||||
+ 通过端口通道发出一些流量(ping), 并使用`show lacp counters`命令对计数器进行检查
|
||||
+ 配置一个不同的`lacp system-priority`输出,并使用`show lacp sys-id`命令予以验证
|
||||
+ 配置一个不同的`lacp port-priority`输出,并使用命令`show lacp internal`予以验证
|
||||
+ 使用命令`port-channel load-balance`,对LACP的负载均衡进行配置,并使用`show etherchannel load-balance`命令对此进行验证
|
BIN
images/03fig15.gif
Normal file
After ![]() (image error) Size: 32 KiB |
BIN
images/0403.png
Normal file
After ![]() (image error) Size: 223 KiB |
BIN
images/0404.png
Normal file
After ![]() (image error) Size: 225 KiB |
BIN
images/0405.png
Normal file
After ![]() (image error) Size: 66 KiB |
BIN
images/0406.png
Normal file
After ![]() (image error) Size: 54 KiB |
BIN
images/0407.png
Normal file
After ![]() (image error) Size: 42 KiB |
BIN
images/0408.png
Normal file
After ![]() (image error) Size: 41 KiB |
BIN
images/0409.png
Normal file
After ![]() (image error) Size: 41 KiB |
BIN
images/0410.png
Normal file
After ![]() (image error) Size: 86 KiB |
BIN
images/0501.png
Normal file
After ![]() (image error) Size: 134 KiB |
BIN
images/0502.png
Normal file
After ![]() (image error) Size: 427 KiB |
BIN
images/0503.png
Normal file
After ![]() (image error) Size: 88 KiB |
BIN
images/0504.png
Normal file
After ![]() (image error) Size: 224 KiB |
BIN
images/0505.png
Normal file
After ![]() (image error) Size: 115 KiB |
BIN
images/0601.png
Normal file
After ![]() (image error) Size: 179 KiB |
BIN
images/0602.png
Normal file
After ![]() (image error) Size: 190 KiB |
BIN
images/0603.png
Normal file
After ![]() (image error) Size: 119 KiB |
BIN
images/0605.png
Normal file
After ![]() (image error) Size: 111 KiB |
BIN
images/0606.png
Normal file
After ![]() (image error) Size: 114 KiB |
BIN
images/0607.png
Normal file
After ![]() (image error) Size: 109 KiB |
BIN
images/0608.png
Normal file
After ![]() (image error) Size: 119 KiB |
BIN
images/0701.png
Normal file
After ![]() (image error) Size: 90 KiB |
BIN
images/0702.png
Normal file
After ![]() (image error) Size: 70 KiB |
BIN
images/0703.png
Normal file
After ![]() (image error) Size: 158 KiB |
BIN
images/0704.png
Normal file
After ![]() (image error) Size: 58 KiB |
BIN
images/0705.png
Normal file
After ![]() (image error) Size: 354 KiB |
BIN
images/0706.png
Normal file
After ![]() (image error) Size: 31 KiB |
BIN
images/0707.png
Normal file
After ![]() (image error) Size: 33 KiB |
BIN
images/0708.png
Normal file
After ![]() (image error) Size: 32 KiB |
BIN
images/0709.png
Normal file
After ![]() (image error) Size: 61 KiB |
BIN
images/0710.png
Normal file
After ![]() (image error) Size: 66 KiB |
BIN
images/0711.png
Normal file
After ![]() (image error) Size: 185 KiB |
BIN
images/0712.png
Normal file
After ![]() (image error) Size: 233 KiB |
BIN
images/0713.png
Normal file
After ![]() (image error) Size: 319 KiB |
BIN
images/0714.png
Normal file
After ![]() (image error) Size: 184 KiB |
BIN
images/0715.png
Normal file
After ![]() (image error) Size: 209 KiB |
BIN
images/0716.png
Normal file
After ![]() (image error) Size: 238 KiB |
BIN
images/0717.png
Normal file
After ![]() (image error) Size: 150 KiB |
BIN
images/0718.png
Normal file
After ![]() (image error) Size: 101 KiB |
BIN
images/0719.png
Normal file
After ![]() (image error) Size: 111 KiB |
BIN
images/0720.png
Normal file
After ![]() (image error) Size: 205 KiB |
BIN
images/0901.png
Normal file
After ![]() (image error) Size: 95 KiB |
BIN
images/0902.png
Normal file
After ![]() (image error) Size: 132 KiB |
BIN
images/0903.png
Normal file
After ![]() (image error) Size: 170 KiB |
BIN
images/0904.png
Normal file
After ![]() (image error) Size: 78 KiB |
BIN
images/0905.png
Normal file
After ![]() (image error) Size: 98 KiB |
BIN
images/0906.png
Normal file
After ![]() (image error) Size: 225 KiB |
BIN
images/0907.png
Normal file
After ![]() (image error) Size: 225 KiB |
BIN
images/0908.png
Normal file
After ![]() (image error) Size: 225 KiB |
BIN
images/0909.png
Normal file
After ![]() (image error) Size: 169 KiB |
BIN
images/0910.png
Normal file
After ![]() (image error) Size: 169 KiB |
BIN
images/0911.png
Normal file
After ![]() (image error) Size: 169 KiB |
BIN
images/1001.png
Normal file
After ![]() (image error) Size: 233 KiB |
BIN
images/1002.png
Normal file
After ![]() (image error) Size: 250 KiB |
BIN
images/1003.png
Normal file
After ![]() (image error) Size: 229 KiB |
BIN
images/1004.png
Normal file
After ![]() (image error) Size: 248 KiB |
BIN
images/1005.png
Normal file
After ![]() (image error) Size: 214 KiB |
BIN
images/1006.png
Normal file
After ![]() (image error) Size: 185 KiB |
BIN
images/1007.png
Normal file
After ![]() (image error) Size: 194 KiB |
BIN
images/1008.png
Normal file
After ![]() (image error) Size: 300 KiB |
BIN
images/1009.png
Normal file
After ![]() (image error) Size: 489 KiB |
BIN
images/1010.png
Normal file
After ![]() (image error) Size: 146 KiB |
BIN
images/1011.png
Normal file
After ![]() (image error) Size: 22 KiB |
BIN
images/1101.png
Normal file
After ![]() (image error) Size: 108 KiB |
BIN
images/1102.png
Normal file
After ![]() (image error) Size: 100 KiB |
BIN
images/1103.png
Normal file
After ![]() (image error) Size: 106 KiB |
BIN
images/1201.png
Normal file
After ![]() (image error) Size: 368 KiB |
BIN
images/1301.png
Normal file
After ![]() (image error) Size: 218 KiB |
BIN
images/1401.png
Normal file
After ![]() (image error) Size: 106 KiB |
BIN
images/1402.png
Normal file
After ![]() (image error) Size: 170 KiB |
BIN
images/1403.png
Normal file
After ![]() (image error) Size: 28 KiB |
BIN
images/1404.png
Normal file
After ![]() (image error) Size: 151 KiB |
BIN
images/1405.png
Normal file
After ![]() (image error) Size: 145 KiB |
BIN
images/1406.png
Normal file
After ![]() (image error) Size: 158 KiB |
BIN
images/1407.png
Normal file
After ![]() (image error) Size: 176 KiB |
BIN
images/1408.png
Normal file
After ![]() (image error) Size: 92 KiB |
BIN
images/1409.png
Normal file
After ![]() (image error) Size: 67 KiB |
BIN
images/1410.png
Normal file
After ![]() (image error) Size: 84 KiB |
BIN
images/1501.png
Normal file
After ![]() (image error) Size: 147 KiB |
BIN
images/1502.png
Normal file
After ![]() (image error) Size: 94 KiB |
BIN
images/1503.png
Normal file
After ![]() (image error) Size: 170 KiB |
BIN
images/3100.png
Normal file
After ![]() (image error) Size: 19 KiB |