Download as pdf or txt
Download as pdf or txt
You are on page 1of 334

前言:首先申明,本人只是对晴刃发表在QingSword.

COM博客中文章的整理,版权归原作者作用,请勿挪为商
用,谢谢。
[CCNA图文笔记一]水晶头线序以及设备互联法则
发表于 2012 年 10 月 18 日 由 晴刃

这篇文章给大家介绍一些Cisco-CCNA的基础知识,从实用的角度出发,介绍实际应用中经常接触到的概念。
___________________________________________

文章目录

[*1*].水晶头的排线顺序
[*2*].设备互联接线法则

___________________________________________

[*1*].水晶头的排线顺序

对于有线网络来说,在一个局域网里面,接触的最多的可能就是水晶头了,所以这里首先介绍一下水晶头的排线顺序
和规格,现在主流的水晶头分为两种:一种是RJ-45(8针脚),就是我们经常用来插在笔记本或台式机上面上网的那个大
接头。还有一种是RJ-11(4针脚),就是我们电话线经常用来插在电话上面的那个小接头,也有的用来插在”猫(调
制解调器)”上面。

这里主要介绍RJ-45: 这个接头的接线顺序分为两个标准“EIA/TIA-568A标准(简称T568A)”和“EIA/TIA-568B标准
(简称T568B)”,他们的线序,按照有弹片一面朝下头朝上从左往右排列如下:

T568A:绿白、绿、橙白、蓝、蓝白、橙、棕白、棕
T568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕 (这种接法是国内比较普遍的接法)
建议大家最好使用用压制水晶头的钳子实际操作一遍,步骤就是先将旧的水晶头剪去,然后将再用钳子扭转剪去线头
大约两厘米左右的线皮,之后按照上面的线序排序,排序好后最好将线顺直了,用钳子稍微剪去前面一部分让前端齐
平,最后按照有有弹片一面朝下头朝上从左往右排列塞进水晶头,最后用钳子压制即可。

在10Mb/s和100Mb/s以太网中只使用两对导线,针脚1、2、3、6,按照T568B的标准就是1、2、3(橙白、橙、绿白)以
及第6针(绿),其中针脚1发送+,针脚2发送-,针脚3接收+,针脚6接收-。其他针脚起到了屏蔽的作用。

[*2*].设备互联接线法则

这部分介绍三种不同的接线方法: 直通线、交叉线、全反线。

直通线: 网线的两端都是T568A或T568B,这种线适用于不同设备的互联,比如:计算机-交换机、计算机-集线器、交
换机-路由器等。这里需要特别注意的两个特例就是:路由器和计算机属于同种设备不能用直通线。而交换机和集线器
属于同种设备也不能用直通线。

交叉线: 一端是T568A另一端是T568B的线序,主要适用于同种设备互联,如:计算机-计算机、路由器-路由器,交换
机-交换机、集线器-集线器,其中有两个特例“路由器-计算机、集线器-交换机”也使用交叉线。

全反线: 两端接入的RJ-45的线序完全相反,这种线多用于连接计算机和路由器或交换机,对它们进行初始化配置。

现在大多数设备能智能识别,自适应接口状态,这就是为什么两端都是T568B标准线序的网线可以连接路由器和计算
机并且还能正常通信的原因。但是如果各位要参加CCNA考试,建议严格按照上面的接线法则。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二]OSI参考模型和设备的对应关系
发表于 2012 年 10 月 18 日 由 晴刃

这篇文章给大家介绍一下OSI参考模型以及在这个参考模型下设备是如何运作的。

___________________________________________

文章目录

[*1*].ISO/OSI参考模型和设备的关系
物理层(Physical Layer)
数据链路层(Data Link Layer)
网络层(Network)
传输层(Transport Layer)
会话层(Session Layer)
表示层(Presentation Layer)
应用层(Application Layer)

___________________________________________

[*1*].ISO/OSI参考模型和设备的关系

下面这些知识的了解会对以后的学习非常有帮助:

这是一个标准的OSI七层参考模型,从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用
层。下面说明一下在这个参考模型中,我们的设备都是运行在哪一层的。

* 物理层(PHYSICAL LAYER):

物理层关心的典型问题就是用什么方式来发送1和0,一位的持续时间,是否可同时双向进行,连接如何建立和如何终
止等。

工作在物理层的设备有:

中继器(repeater): 双绞线(网线)的理论最大传输距离是100M,超过100M信号会衰减,这时候就要用到中继器,
它能起到放大信号延长传输距离的作用。

集线器(hub): 集线器相当于一个多端口的中继器,也能起到放大信号的作用,并且集线器是属于半双工模式的(简单
的理解成在同一时刻只有一个方向的数据可以传输,收的时候不能发,发的时候不能收。),而在集线器连接的网络
中,不管有多少个集线器,都只有一个广播域和一个冲突域。工作原理如下:

因为集线器属于物理层设备,无法判断数据链路层的MAC地址以及网络层IP地址,所以在这个集线器相连的网络里,
假设PC0封装数据发送给PC1,集线器接收到PC0发来的数据后,直接将它转发到除接收端口以外的所有端口,这时
候PC1/2/3都能收到这个数据,只不过根据包头部的MAC地址信息,只有PC1会处理它,PC2/3将丢弃这个数据包,
而如果PC2/3上面运行了监听软件,这种网络拓扑设计将非常不安全。

* 数据链路层(DATA LINK LAYER):

数据层的主要功能是在不可靠的物理层上进行数据的可靠传输,将用户数据封装成帧(Frame),进行CRC效验(循
环冗余效验)以及防止高速发送方的数据将低速方淹没等。

工作在数据链路层的设备主要有:

网卡(NIC Network Interface Card):也叫网络适配器,在生产时将一个唯一的网络节点地址(MAC地址)烧录


到了它的ROM中。MAC地址占用48位,前24位代表厂商,后24位为设备号。MAC地址可以通过一些软件设备来更
改,但是更改的仅仅是显示,ROM中的MAC地址除非重新烧录否则无法更改。Windows系统可以通过CMD下
的”ipconfig /all”来查看到MAC地址。
网桥(Bridge):网桥可以将两个LAN连接并按照MAC地址转发数据帧,就好像他们是一个LAN一样,现在网桥大多应
用于软件。工作原理如下:

图中A、C连接在集线器1(Hub1)上,B、D连接在Hub2上,Hub1的一个接口连接在网桥的接口1上,Hub2的一个
接口连接在网桥的接口2上(它们之间的连线都是直通线),各PC的MAC地址以及IP地址如图所示。

1,网桥如刚刚加电启动,它的MAC地址缓存为空,此时假设A要发送数据给C,并且A已经知道C的MAC地址(这中
间牵涉到一个ARP获取MAC地址的操作,这里暂时不讨论),A将数据封装好发送给Hub1,Hub1是一个物理层设
备,它简单的将信号放大从除接收端口以外的其他端口将数据发送出去(发送给C和网桥的接口1)。

2,网桥从接口1接收到A发过来的数据后,首先添加这个数据帧的源MAC地址既A的MAC(AAAAAAAAAAAA)和对
应的端口1到自己的MAC地址表中,再接着从自己的MAC地址表中去查找这个数据帧目的地B的MAC地址,但是此时
找不到,所以网桥将这个数据帧从接口2发送出去。

3,集线器2收到这个数据帧,它将这个数据帧从除接收端口以外的其他端口发送出去,D和B都接收到了这个数据
帧,D和B对数据帧进行检查时发现目的MAC地址与自己的网卡MAC地址不相同,计算机D和B丢弃这个数据帧。

4,在第1步中C也同时收到了这个数据帧,C检查目的MAC地址的时候发现,与本机相同,C接收这个数据包,并回
发数据包对A进行确认,C封装一个源地址为自己MAC地址,目的地址是A的MAC地址的数据帧发送给集线器1,集线
器将这个数据帧发给网桥的接口1和A。

5,网桥接收到这个数据帧,它首先添加C的MAC和对应的接口1到自己的MAC地址表,然后查询地址表的时候发
现A的MAC地址同样处在接口1,网桥不再将这个数据帧从接口2发出,也不会将这个数据帧再重新从接口1发回去。

6,A收到C发回的确认,通信成功。

7,最后网桥会学习到这个简单局域网中所有的电脑的MAC地址以及所在接口。如下:
————————————-
MAC Address 端口
AAAAAAAAAAAA 1
BBBBBBBBBBBB 2
CCCCCCCCCCCC 1
DDDDDDDDDDDD 2
————————————

一个网桥包含两个冲突域、一个广播域。冲突域是发送一个单播会影响的范围,广播域是发送一个广播会影响的范
围。

交换机(Switch): 可以将交换机简单的看做多端口的网桥,因为它也根据收到的数据帧的源地址进行学习,也根
据MAC地址表中的目的地址进行转发,但交换机有下面几个需要注意的地方:

假如这个交换机学习到的MAC地址表如下:
—————————————
MAC Address 端口
AAAAAAAAAAAA 1
BBBBBBBBBBBB 2
CCCCCCCCCCCC 3
—————————————

其一:交换机对已知的单播帧,只发往对应的端口,比如A发给B,交换机中学习到了B的MAC,那么直接发往端口2。
其二:交换机对未知的单播帧,进行泛红转发(即发往除接收端口以外的所有端口),比如C发送一个单播帧给D,这
个数据帧到达交换机后,交换机MAC表中还没有学习到D的MAC,交换机将这个数据帧从1,、2、4端口发出。
其三:交换机对所有广播和组播,进行泛红转发(即发往除接收端口以外的所有端口)。

交换机分为三种:

传统交换机(属于链路层,一个广播域,每个接口是一个冲突域)、VLAN交换机(属于链路层,可网管型,可以划
分多个VLAN,每个VLAN是一个广播域,每个接口是一个冲突域,并且可以配置IP地址)、三层交换机(比VLAN型
交换机多了路由功能,可以理解成交换机+路由器,属于OSI模型网络层)
* 网络层(NETWORK):

路由器和三层交换机都属于网络层设备,它们是应用于不同网段间的设备。路由器的每个端口属于一个单独的广播
域,也是一个单独的冲突域。

* 传输层(TRANSPORT LAYER):

传输层实现了用户进程间端到端的通信(End-to-End),传输层相关的协议有TCP、UDP。我们会经常看到这两个协
议名称出现在Windows CMD的”netstat -ano”这条命令的显示里。

* 会话层(SESSION LAYER ):

会话层提供的主要服务是会话控制、同步、重传等。

* 表示层(PRESENTATION LAYER):

表示层提供的主要服务为数据的编码、压缩、解密解密等。

* 应用层(APPLICATION LAYER):

这一层包含了大量人们普遍需要的协议: HTTP-TCP80、FTP-TCP21、SMTP-TCP25、POP3-TCP110、DNS-
TCP/UDP53、TELNET-TCP23等。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记三]TCP/IP参考模型和协议的对应关系
发表于 2012 年 10 月 19 日 由 晴刃

这篇文章给大家介绍一下关于TCP/IP参考模型以及在这个参考模型下运行的协议,重点描述ARP协议和TCP协议的工
作原理。

___________________________________________

文章目录

[*1*].TCP/IP参考模型和OSI参考模型的对应关系
网络访问层(NetworkAccess)
网际层(Internet)
传输层(Transport)
应用层(Application)

___________________________________________

[*1*].TCP/IP参考模型和OSI参考模型的对应关系

TCP/IP参考模型分为四层,分别是: 网络访问层(NetworkAccess)、网际层(Internet)、传输层(Transport)和应
用层(Application)。

ISO/OSI参考模型是在其协议被开发出来之前设计出来的,它并不基于某个特定的协议集而设计,所以具有通用性,
但在协议实现方面存在不足。TCP/IP模型是先有协议,模型只是对现有协议的描述,因此和现有协议非常吻合,但它
在描述非TCP/IP网络时的用处不大。

TCP/IP参考模型和ISO/OSI参考模型的对应关系如下图:

下面依次来介绍TCP/IP参考模型这四层的作用:
* 网络访问层(NETWORKACCESS )

: 这一层的功能包括IP地址和MAC地址的映射,将IP封装成帧,提供物理介质的连接,它接收从网际层传来的IP数据
报,并将这个数据包通过底层物理接口发送出去。

* 网际层(INTERNET)

: 这一层的功能主要有三个。

第一: 处理来自传输层的分组发送请求(本机向外发送),将分组装入IP数据报,填充报头,选择目的节点路径,然
后将封装好的IP数据包发往对应的接口。
第二: 处理从外部输入的数据报,检查合法性,进行路由选择,如果数据报的目的地是本机,则去掉报头,将IP数据
报数据部分提交给上层传输层对应协议处理,如果数据报的目的不是本机,则根据路由表转发。
第三: 处理ICMP(Internet Control Message Protocol 网际控制信息协议)报文,处理网络路由选择,流量控制等。

网际层上的几个重要协议:

IP协议——主要的功能是实现寻址和转发(根据目的IP地址转发)。这里不做详细介绍,有兴趣的朋友可以去参考一
本书《TCP/IP详解卷一:协议》,其中我们经常看到的可能就是TTL了,我们ping某个IP或网址的时候会出现下图所示

的TTL=XX:

TTL是IP协议中的一个字段,每经过一个路由,这个字段的值就减一。当这个字段是0时,路由就会丢弃这个数据报。
其中64是系统设定的一个初始值,这个初始值根据不同系统构架不同,有的是128,有的是256。只要看最后TTL等于
的那个值最接近这三个初始值的哪一个(64、128、256),就用哪个初始值去减,即可得出中间路由个数。

IP报头各字段如下图,仅供参考:
ICMP协议——我们常用的ping命令就是使用了这个协议。还有Windows下的tracert命令也是基于这个协议的。IP报
头中协议字段为1,就说明这是一个ICMP报文。

上图就是ICMP报文的一个应用,Tracert可以用来显示从本地到目的地中间经过的路由。

ARP协议——这是局域网中应用的最多的协议之一,正在局域网中,实际传输的是数据帧,数据帧是需要封
装MAC地址的,而ARP协议的主要作用是在发送数据帧前,根据目的IP获得目的MAC。所以它叫做地址解析协议。
它的工作原理如下:
三台PC连接在一台二层交换机上,他们的IP地址和MAC地址如图。

1,此时计算机A要发送数据包给计算机B,首先A要判断B是否与本机处在同一个子网(192.168.1.0)中,如果处在
同一个子网,计算机A先在本机的ARP缓存中搜索B的IP对应的MAC是否存在,如果找到B的MAC缓存,则直接用找
到的MAC封装帧发送出去。

2,如果A没有找到B的MAC缓存,那么它将封装一个ARP查询包(ARP Request),查询包的源IP地址是A的IP地址,目
的IP地址是B的IP地址,查询包的源MAC是A自己的MAC(AAAAAAAAAAAA),目的MAC是广播MAC地址
(FFFFFFFFFFFF)。

3,A封装完后将这个查询包以广播的形式发送出去,这个ARP广播包到达交换机接口1,根据交换机的工作原理(对
广播包进行泛红转发,发往除接收端口以外的所有端口,这里是2和3),这个时候计算机B和C都能收到这个ARP查
询广播包。

4,C收到这个ARP查询广播包,它对这个数据包解封装,发现目的MAC不是本机MAC,但是是广播MAC(接收目的
地是本机MAC或者广播MAC的数据帧),C解封装这个数据帧并传到网络层,网络层对目的IP进行检查发现目
的IP是B的IP(192.168.1.2)和本机IP不同,C放弃对这个数据报的继续处理,同时在本地的ARP缓存中更新或添
加A的IP地址对应的MAC条目,然后丢弃这个数据报。

5,B收到这个数据报,首先判断数据链路层的目的MAC是广播,所以它也解封装这个数据报传送到网络层,并且发
现目的IP也和本机IP相同,这是针对本机(B)进行的ARP MAC地址查询,首先它将A的MAC和对应的IP记录在自己
的MAC缓存中,然后封装一个ARP应答包(ARP Reply)发回。ARP应答包的源IP是B自己的IP,目的IP是A的IP,
源MAC是B自己的MAC(BBBBBBBBBBBB)目的MAC是A的MAC,这个包封装好后被送达交换机接口2。

6,交换机接收到这个ARP应答包后,根据MAC目的地址判断,目的MAC(AAAAAAAAAAAA)处在自己的接口1上
(还记得交换机的工作原理吧,在第3步中,交换机收到A的ARP查询的时候,就将A的MAC地址和对应的接口1记录
在自己的MAC地址表中了),这时交换机直接将这个数据报从接口1发出。

7,A收到这个ARP应答包,这时它就知道了B的MAC,可以封装其他数据发送了。
这就是一个ARP查询的全过程。如果大家对这一部分比较感兴趣,这里还有一个比较有趣的应用供大家参考:”局域
网ARP攻击实现与防范“,其实ARP协议是横跨了网际层与物理层的一个协议,这就是为什么一些网络层的防火墙对底
层的ARP攻击无能为力的原因。

Proxy-ARP协议(代理ARP): 因为ARP查询包是一个广播包,而路由器是隔离广播的,每个接口是一个广播域,
所以在上面的例子中:

如果此时交换机的4端口上接着一个路由器,当上面的ARP查询包通过交换机泛红转发的时候,路由器可以从自己的
接口5接收到这个A发出的ARP查询包,在没有开启Proxy-ARP协议的情况下,路由器直接将这个包丢弃。如果路由的
接口5开启了Proxy-ARP协议,那么这个广播包就可以转发到路由上其他的接口。所有Cisco路由的以太网接口默认都
是启动了这个协议的。

RARP(Reverse Address Resolution Protocol,反向地址转换协议)—— 这个协议和ARP刚好相反,是根


据本机MAC询问本机IP的一个协议,如今被DHCP协议所替代。

* 传输层(TRANSPORT)

在网际层中的IP协议,采用无连接的数据报机制,不做验证也不进行确认,而TCP/IP的可靠性体现在传输层,传输层
的重要协议有:

TCP(Transmission Control Protocol)——是一种面向连接的传输层协议,能提供可靠的数据传输,在传输数


据前需要先建立连接,下面是TCP”三次握手”建立连接的过程:
1,主机A向B发送SYN,主机A初始序列号X,设置SYN位,未设置ACK位。
2,主机B收到这个SYN,立即向A发SYN、ACK,B初始序列号Y,确认号(ACK)为X+1,X+1的确认号暗示已经收
到A发往B的同步序号,设置SYN位和ACK位。
3,主机A收到B发回的SYN、ACK,再向B发ACK确认,A的序号是X+1,确认号是Y+1,Y+1暗示主机B我已经收到
了你的SYN、ACK,设置ACK位,未设置SYN位。

下面是一个简单的示意图,图中的笔记本电脑想连接服务器的telnet(TCP23),这是在建立连接之前的TCP三次握
手操作,可以看到笔记本使用本地的一个随机端口,去链接服务器的23端口,首先发送了SYN,初始序列号200,确
认号没有设置所以是0,服务器发回的SYN、ACK中初始序列号是100,确认号是201,最后笔记本再发送ACK给服务
器,三次握手建立连接成功,就可以传输telnet数据了。

TCP报头分段格式,仅供参考:
UDP协议——无连接的传输协议,结构简单,适用于语音和视频数据的传输。

* 应用层(APPLICATION )

TCP/IP的应用层上运行的应用程序协议和OSI参考模型一致,这里就不再赘述了。

下面这张图是TCP/IP协议族中各协议之间的关系,仅供参考:
————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记四]IP地址详解
发表于 2012 年 10 月 19 日 由 晴刃

这篇文章给大家介绍一下IP地址十进制和二进制之间的转换、IP地址的分类、IP子网划分、子网掩码以及公有地址和
私有地址等。

___________________________________________

文章目录

[*1*].二进制和十进制之间的转换
[*2*].IPv4地址分类
保留IP地址
公有地址和私有地址
[*3*].IP子网划分
实例一:
实例二:
实例三:
实例四:

___________________________________________

[*1*].二进制和十进制之间的转换

IPv4地址使用32位二进制数格式,通常使用点分十进制数来表示,如202.101.123.21,对应的二进制数就
是(11001010.01100101.01111011.00010101)下面就来看一下这个二进制和十进制之间是如何转换的:

首先看二进制转十进制:
11001010.01100101.01111011.00010101

第一组二进制是11001010。可以使用1×2^7+1×2^6+0×2^5+0×2^4+1×2^3+0×2^2+1×2^1+0×2^0=202,后面几组同
理,但是这里有一种简便的方法,因为每组二进制都是8位,而每一位对应的十进制数都是不变的,比如:二进
制11111111等于128+64+32+16+8+4+2+1=255,而我们只要记住这八位从大到小的对应的十进制就可以了
(128、64、32、16、8、4、2、1),比如11001001就可以直接得出(128+64+8+1),10000001=128+1=129,这样
就简便了运算。

然后再来看十进制转换二进制:
202.101.123.21

实际上也有简便方法,就是将IP地址对应的十进制数凑成(128、64、32、16、8、4、2、1)可以组合出的那个数,
比如202=128+64+8+2,从高位到低位,如果出现这个数字就填1,没有出现这个数字就填0。很容易就能得
到11001010。

[*2*].IPv4地址分类

一个IPv4地址主要分为两个部分: 一部分用于标识该地址所属网络号,一部分用于标识该网络中某个特定主机。

* IPv4将IP地址分为5类:

A类:前8位用来标识网络号,后面24位用来标识主机,所以每个A类网络可以有2^24次方个IP地址,全球只
有126个A类网络,2^8-2=126(规定0不允许使用,而127被用作回环测试地址)。A类网络第一个字节十进制范围
是1(00000001)-126(01111110)

B类:前16位用来标识网络号,后16位用来标识主机,第一个字节十进制范围从128(10000000)-191(10111111),全球
共有2^14个B类网络,每个B类网络可以容纳2^16个主机。

C类:前24位用来标识网络号,后8位用来标识主机,第一个字节十进制范围从192(11000000)-
223(11011111),全球共有2^21个C类网络,每个C类网络的主机数是2^8=256个。

D类:第一个字节十进制范围从224(11100000)-239(11101111),这类地址用于组播,全球共用2^28个组播地址。

E类:第一个字节十进制范围从240-255,科研用网。

* 保留IP 地址

每个网络中实际可容纳的主机数量是理论数量减2,这是因为有两个地址被保留:

网络地址——网络位不变,主机位全0的地址,表示网路本身,如192.168.1.0/24
广播地址——网络位不变,主机位全1的地址,表示本网络的广播,如192.168.1.255/24

(/24表示网络位是24位,也就是子网掩码为255.255.255.0)

* 公有地址和私有地址

RFC1918规定了三块专有的地址,作为私有的内部组网使用:

A类:10.0.0.0—10.255.255.255
B类:172.16.0.0—172.31.255.255
C类:192.168.0.0—192.168.255.255

Internet上的路由不会配置这些IP地址,如果有去往这些私有地址的数据包,会被路由丢弃。

[*3*].IP子网划分

* 实例一:

四台PC的IP地址如图,如何让它们之间都可以正常互访?(不考虑防火墙等因素)
分析:A、B、C、D的网络位都是24位(子网掩码255.255.255.0),那么A和B同处在一个子网192.168.1.0,而C和D处在一
个子网192.168.2.0,这个时候A和B能够互访,C和D能够互访,而AB和CD之间无法互访。

方法一:将他们改成一个子网,可以将C和D都改成192.168.1.0子网。
方法二:修改四台PC的子网掩码为/22(255.255.252.0),这样他们同处在192.168.0.0子网中。
方法三:将中间的二层交换机换成三层交换机,并将A和B划分到一个VLAN里面,给这个VLAN分配一个IP地
址192.168.1.254,将A和B的默认网关改成192.168.1.254,同时将C和D划分到另外一个VLAN给这个VLAN分配一
个IP地址192.168.2.254,将C和D的默认网关改成192.168.2.254,这样通过三层交换机将两个不同网段连接起来,实
现互访。

* 实例二:

某个C类网络地址被某公司申请,网络地址是202.1.1.0/24,该单位有5个部门,每个部门有28台计算机,问:如何将
这5个部门分配到不同子网中?

分析: C类地址,前24位是服务商提供,不能改变。所以单位只能调整后8位主机位,有5个部门,所以需要从后8位中
借出至少3位(2^3=8)可以分成8个子网,而剩余的5位(2^5=32)能容纳32-2=30台计算机。这种方式刚好适合5个部
门,每个部门只有28台PC的情况。

从主机位中借出三位,网络位变成24+3=27位,子网掩码为 255.255.255.224

借出的三位可以分成如下
000
001
010
011
100
101
110
111
既是:
202.1.1.0/27
202.1.1.32/27
202.1.1.64/27
202.1.1.96/27
202.1.1.128/27
202.1.1.160/27
202.1.1.192/27
202.1.1.224/27

(在Cisco-CCNA考试中默认是不支持全0和全1的子网的,除非特别说明)

单位只有5个部门,在不使用全0和全1的子网的前提下(不使用202.1.1.0/27和202.1.1.224/27),划分如下:

IP范围202.1.1.32-202.1.1.63,子网202.1.1.32,网关202.1.1.33,子网广播202.1.1.63,可用IP从34-62,掩码/27
IP范围202.1.1.64-202.1.1.95,子网202.1.1.64,网关202.1.1.65,子网广播202.1.1.95,可用IP从66-94,掩码/27
IP范围202.1.1.96-202.1.1.127,子网202.1.1.96,网关202.1.1.96,子网广播202.1.1.127,可用IP从97-126,掩码/27
IP范围202.1.1.128-202.1.1.159,子网202.1.1.128,网关202.1.1.129,子网广播202.1.1.159,可用IP从130-158,掩
码/27
IP范围202.1.1.160-202.1.1.191,子网202.1.1.160,网关202.1.1.161,子网广播202.1.1.191,可用IP从162-190,掩
码/27
IP范围202.1.1.192-202.1.1.223,子网202.1.1.192,网关202.1.1.193,子网广播202.1.1.223,可用IP从194-222,掩
码/27 (这一个子网暂时没有使用)

* 实例三:

一台计算机的IP和子网掩码是192.168.1.160/26,问:这台计算机所在子网、子网广播、子网中第一个可用IP、子网中最
后一个IP、子网一共有多少IP可用?

其实这个例子在经常划分子网的高手眼里几乎就是一眼能看出来,但是为了让新手朋友能够很好的理解,下面给出一
个比较通用的步骤:

可以看到上图中,Host对应的是主机IP的二进制表示,Mask是子网掩码的二进制表示,子网掩码26位,所以主机位
全0的就是子网地址Subnet,换算成十进制就是(192.168.1.128),主机位全1的就是广播地址Broadcast,换算成十
进制就是(192.168.1.191),而子网中第一个IP地址就是(192.168.1.129),最后一个IP地址自然就是
(192.168.1.190),子网中一共2^6-2=62个IP地址可用。

* 实例四:

将下面这组C类IP地址汇总成一条IP地址

192.168.1.1/24
192.168.2.1/24
192.168.3.1/24
192.168.4.1/24

汇总可以减小路由表的大小,汇总的方法就是将需要汇总的IP转换成二进制,将共同的部分取出来,然后在根据共同
的部分占用的位数来写出子网掩码。上面的4个IP地址转换成二进制如下:

不难看出,红线前面的部分对于四个IP地址来说是相同的,一共21位,所以这组IP汇总后的IP是(192.168.0.0/21)

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记五]数据封装和解封装
发表于 2012 年 10 月 20 日 由 晴刃

这篇文章介绍一下数据的封装和解封装,结合一个实例讲解数据包是如何在网络中流动的。

___________________________________________

文章目录

[*1*].Telnet远程登录实例
[*2*].总结

___________________________________________

[*1*].Telnet远程登录实例

各设备IP如下图,PC1和PC2连接在一个集线器上,集线器连接在路由器R1上,R1和R2通过串行线路相连,一台二
层交换机连接在R2上,它的上面连接着PC1需要远程登录的服务器(Server),以及另外一台PC3:

PC1 Telnet登录服务器具体步骤如下:

1,PC1开始封装数据包,首先它比较要去往的目的地(202.2.2.2)发现此IP不在本地网络(202.1.1.0)中,PC1知道要
发往其他网段的数据先要发给网关,也就是路由器R1的fa0/0接口(202.1.1.1),PC1首先在本地ARP缓存中查
找202.1.1.1的MAC地址,如果找到,就用它封装,如果没有找到,就发送ARP查询,再利用查询到的MAC进行封
装。

2,首先在传输层进行分段(Segment)处理,因为Telnet使用的是TCP协议,所以PC1使用本地一个大于1024的任
意端口(这里假设是1234)作为源端口,目的端口是23,这两个端口被添加到传输层的协议数据单元中。传输层封装
好后,数据被传输到网络层,网络层在数据头部添加源IP(202.1.1.2),目的IP(202.2.2.2)。网络层封装好后,数
据被传输到数据链路层,在以太网中这一层主要是在数据头部添加源MAC(AAAAAAAAAAAA)和目的MAC
(111111111111),然后在数据尾部添加一个CRC效验,封装好后的帧如下:

看到这里可能大家很奇怪,为什么目的MAC是网关的MAC而不是Server的MAC,因为MAC只是用于局域网内寻址,
发往其他网段的数据都要先经过网关,假设封装的MAC是Server的MAC,数据被传送到路由器R1后,R1检查MAC地
址,发现不是发往本路由的,它会直接丢弃这个数据,那样PC1就永远别想和Server通信成功了。

3,PC1发送的数据到达集线器,集线器将数据信号放大,并将它从除接收端口以外的其他接口发出,PC2和R1都会
收到这个数据,PC2收到后查看目的MAC地址不是本机,PC2放弃处理,丢弃数据。

4,路由器R1发现目的MAC地址是本机fa0/0接口的MAC地址,它解封装这个帧,上传到网络层,在网络层R1看到这
个数据包的目的地址是202.2.2.2,并不是发给本路由的,需要进行转发。R1查看本地路由表,发现需要将这个数据
从s0/0接口发出,但是此时R1并不能直接将数据发出,因为数据在被解封装到网络层后还需要进行再封装才能从物理
层发出。因为R1和R2之间是串行线路,串行线路不同于以太网,不是使用MAC通信,串行线路的通信协议可能
是PPP或者是HDLC(这里假设是PPP协议),而且一端发出另一端一定能收到,所以在数据发出去之前,在数据链
路层路由器R1给这个数据包封装PPP协议头部,然后从s0/0发出,数据帧格式如下:

5,路由R2收到了这个数据帧,上传至数据链路层处理,数据链路层去掉PPP封装,上传至网络层处理。网络层发现这
个数据包的目的地址并非本路由,但是目的连接在本路由的以太网接口上,这个时候如果R2有Server的MAC地址,
就直接用Server的MAC地址封装,否则它先发送ARP查询,收到回应后再封装,封装后的数据帧从fa0/0发出,如下:

6,R2发出的数据帧到达交换机,交换机的MAC缓存表中如果存在Server的MAC和对应端口,它将直接将数据发
给Server,如果不知道Server的MAC则会发送ARP查询(可见ARP在局域网中多么重要),然后再转发。

7,Server收到了这个数据帧,它将数据帧上传到数据链路层,发现是本机的MAC,然后再上传到网络层,发现是本
机的IP,之后再上传到传输层,发现是访问本机23端口,最后数据被传输到应用层.
8,Server对PC1的应答和上面的步骤刚好相反,目的IP、源IP以及目的端口、源端口位置对调,发回的数据帧格式
如下:

这就是一个完整的互联网Telnet封装解封装过程。

[*2*].总结

从这个过程中我们可以看出,数据流在中间设备上执行的是OSI模型下三层的操作,物理层设备(集线器)不改变帧
格式,广播式转发;数据链路层设备(二层交换机)也不改变帧格式,但可根据帧的目的地址进行转发;网络层的设
备改变帧格式,要进行帧的解封装再封装,但不改变数据包中源和目的IP地址。(会改变数据包中的一些字段,比
如TTL字段会减1)

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


发表于 2012 年 10 月 21 日 由 晴刃

这篇文章给大家介绍一下Cisco实验环境的搭建。推荐两款Cisco模拟器,一个是Cisco官方的”Cisco Packet Tracer”,


主要用于做交换机相关实验;还有就是功能非常强大的”GNS3″,主要用来做路由相关的实验。这两款模拟器可以完
成CCNA阶段的所有实验。

___________________________________________

文章目录

[*1*].准备工作
[*2*].GNS3的安装和配置
GNS3全局配置
配置Cisco IOS 到GNS3
路由接口配置和连线
GNS3的使用视频

___________________________________________

*1*].准备工作

* 下载最新版本的GNS3,官方下载地址: http://www.gns3.net/download/
本篇文章发布时的最新版是: GNS3 v0.8.3 all-in-one 所以下面主要围绕这个版本进行安装和配置讲解,版本如果有升
级,大致步骤是相同的。(GNS3有Windows、Mac、Linux三种版本可以根据自己的系统进行选择)

* 下载GNS3上面需要用到的Cisco路由器IOS,我已经将unzip-c3640-ik9o3s-mz.124-10.bin这个IOS文件共享到了百
度网盘,供大家下载:

http://pan.baidu.com/share/link?shareid=84693&uk=1108295926

CCNA阶段,在GNS3中仅使用这一个IOS就够了。

* 下面是当前最新版Packet.Tracer5.3.0.0088,已经上传到百度网盘,供大家下载:

http://pan.baidu.com/share/link?shareid=84778&uk=1108295926

[*2*].GNS3的安装和配置

* 安装

这一步比较简单,下载下来后按照提示”Next”或者”I Agree”下去就可以了,中间会让你选择软件的安装位置等,还会
弹出其他组件的安装对话框,那些组件都需要安装。
* GNS3全局配置

第一次运行GNS3,会弹出一个引导界面和一个新项目选择窗口,可以不用理会直接关闭。

在GNS3主程序菜单中右击”Edit”>”Preferences”,按照下图进行配置和测试:

切换到Capture选项,输入正确的Wireshare程序路径,这个在以后抓包的时候,如果这里的路径不正确,则无法启
动Wireshark,因为我在安装的时候改变了默认的安装路径,所以我的路径如图:
在Qemu和VirtualBox中也有两个Wireshark的路径需要更改,更改成你安装的Wireshark程序的位置。

Tip:在这里曾经遇到过不少问题,就是在Dynamips中点击”Test Settings”后出现”can’t set up hypervisor onport


7200″这样的错误,后来的解决方法是使用360的LSP修复功能(在360安全卫士安装目录下的\Utils\LSPFix.exe)双
击这个文件进行修复。

到这里,GNS3的软件部分就配置好了,接下来配置IOS。

* 配置CISCO IOS 到GNS3

将我们下载下来的unzip-c3640-ik9o3s-mz.124-10.bin这个IOS文件放到一个全英文路径的目录中,比如我这里是将它
放在”G:\Virtual RS\IOS\unzip-c3640-ik9o3s-mz.124-10.bin”,路径中不能包含中文,否则可能出现各种未知错误。

接下来点击GNS3的”edit”>”IOS images and hypervisors”


配置好3640IOS后回到GNS3主窗口,按照下图进行IDLE的计算:
计算好后,计算机的CPU就会回到正常状态,如果没有计算IDLE,启动IOS之后计算机的CPU会一直在50%以上运
转,这一步如果没有计算出带*的,可以多计算几次,如果多次都计算不出带*的,可以选择列表中居中的那个数值。

* 路由接口配置和连线

在路由器没有启动以前,可以对路由器进行接口配置,双击你要配置的路由器,进入它的配置界面:
这里我拖动两台3600路由到工作区,并且在每个路由上添加了一个串行接口模块,之后将R1的串口s0/0和R2的串
口s0/1连接:
这就是GNS3安装配置以及路由配置接口到连线启动的全部过程。

* GNS3的使用视频

这是从网络上收集的一套GNS3的使用视频演示(非常经典),上传到了百度网盘供大家参考:

http://pan.baidu.com/share/link?shareid=84767&uk=1108295926

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记七]路由器硬件组成和启动流程
发表于 2012 年 10 月 21 日 由 晴刃

这篇文章主要介绍关于路由器的基本硬件组成,以及路由器的引导过程。

___________________________________________

文章目录

[*1*].路由器的基本硬件组成
[*2*].路由器引导过程

___________________________________________

[*1*].路由器的基本硬件组成

* CPU : 执行操作系统的功能,包括系统初始化,路由和交换等功能。

* 闪存(Flash Memory): 在大多数Cisco路由器上闪存被用来保存路由的IOS,设备断电后,闪存的内容不会丢失。

* 只读储存器(Read Only Memory,ROM) : ROM用来储存那些不经常变动的内容,包括Bootstrap instructions(引导程


序)、Basic diagnostic software(基本诊断程序)、Scaled-down version of IOS(缩小版的IOS)。设备断电后,只读
储存器的内容不会丢失。

* 随机存取存储器(Random Access Memory,RAM): RAM用来保存一些临时的指令和数据,包括Operating


System(运行的操作系统)、Running-Config(运行配置文件)、IP Routing Table(IP路由表)、ARP
Cache(ARP缓存,用于路由器的以太网接口)、Packet Buffer(包缓冲区)。设备断电后,RAM中的内容全部丢
失。

* 非易失性随机存取存储器(NonVolatile RAM,NVRAM): 路由器使用NVRAM来保存启动配置文件(startup-


config),如果希望路由重启后所做的修改任然起作用,就需要将RAM中的Running-Config保存到NVRAM的Startup-
Config中。设备断电后,NVRAM中的内容不会丢失。

* 输入输出端口(Input/Output,I/O): I/O端口就是数据进出路由的接口,可以使用Cisco命令”Show Interface”来查看当


前路由都有哪些端口。使用”show interface brief”来查看和显示当前激活和未激活的接口。

[*2*].路由器引导过程

路由的引导流程可以简答描述如下:

加电自检>自启加载器>检查配置寄存器>确定操作系统位置>加载操作系统>定位配置文件>找到就加载配置文件>没找
到就进入初始化设置模式
* 执行POST(Power-On Self Test)加电自检 : 路由器打开电源后,会执行一系列的诊断效验,来测试其硬件,完成
加电自检后,路由开始加载引导程序。

* 加载引导程序(Bootstarp) : POST完成后,引导程序被从ROM中拷贝到RAM中,CPU开始执行引导程序,引导程序
的主要作用就是定位IOS(Cisco路由操作系统文件),并将IOS加载到RAM中运行。

* 定位和加载IOS : 在加载IOS前,首先需要定位IOS位置,现在多数型号的路由是通过读取配置寄存器的值来定位操
作系统位置的,配置寄存器是储存在NVRAM中的一个16位的值(在一些老设备上可能是一个16针的跳线)。

这个值的最后4位指明了引导字段,比如0×2142这个十六进制数从右往左第一个数2就为引导字段,引导字段的范围
是从0~15,0表示RXBOOT模式,1表示自动从ROM启动,2-F表示boot system命令,检查NVRAM中的配置,这将使
路由在NVRAM中寻找boot system命令,如果找到(比如”boot system flash:unzip-c3640-ik9o3s-mz.124-10.bin”,就
是让路由读取闪存中的unzip-c3640-ik9o3s-mz.124-10.bin这个IOS文件)就用引导命令中指定的方式引导。如果boot
system引导失败,路由则会自动加载闪存中第一个IOS文件。如果闪存中也无有效的IOS,或者根本找不到闪存,路
由则会通过TFTP广播请求IOS,如果TFTP广播请求失败,路由会从ROM中将一个缩小版的诊断IOS加载到RAM中,
以帮助路由判断是什么原因导致了引导失败。

* 加载配置文件(startup-config): IOS加载成功后,系统会去NVRAM中查找有无startup-config,如果找到就用这个配置
文件中的配置初始化路由启动。如果没有找到,系统将进入初始化配置模式。如果想要路由启动时加载上一次保存
的startup-config,需要将配置寄存器的值改为0×2102,在GNS3实验环境中,默认是0×2142,不加载startup-config

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记八]Cisco路由CLI基础命令
发表于 2012 年 10 月 22 日 由 晴刃

这篇文章主要介绍Cisco路由器的基础命令,包括全局配置模式介绍、配置路由名称、设置特权密码、Console线路密
码、AUX线路密码、配置远程访问、设置路由接口IP等。

这些基础命令也是Cisco 路由和交换配置中使用的最频繁的命令。

___________________________________________

文章目录

[*1*].实验环境介绍
[*2*].基础命令详解
路由操作模式
全局配置模式
给路由设置名称
给特权模式设置密码
给路由设置控制端口密码
接口配置模式
配置接口IP和开启接口
设置命令输入同步模式
配置远程登录(VTY)
配置路由时钟
配置路由旗帜(banner)消息
命令的简写与补全
其他常用命令
[*3*].配置R1远程登录R2实例

___________________________________________

[*1*].实验环境介绍

上面这些基础命令的演示放在GNS3中进行,IOS版本为”c3640-ik9o3s-mz.124-10.bin”,通过这个实力,演示一下这
些基础命令的用法。

实验拓扑图如下:
两台3640路由器,添加了”NM-4T”插槽(串口),R1的s0/0和R2的s0/1相连,假设s0/0端为DCE端(需要配置时钟同
步率),s0/1为DTE端,IP地址如图所示。

现在启动这两台路由,进入他们的CLI(Command Line Interface,命令行接口)。

Tip: 在Cisco Packet Tracer模拟器中,如果没有保存配置文件,启动时会出现下面的信息:

1 --- System Configuration Dialog ---


2
3 Continue with configuration dialog? [yes/no]: /*在这里输入no就可以了*/
4 /*因为我们需要手动配置,不需要按照向导来配置。*/

下面首先拿R1来对各种命令进行详细的解释,在第三部分中再对上面的拓扑做一次连贯的实验。

[*2*].基础命令详解

(注意:GNS3的安装目录下有一个baseconfig.txt文件,里面有一些基础配置命令,进入CLI后GNS3自动使用这个文
件下的命令配置了路由,所以你看到的可能和我这里不一样,不过可以将这个文件下的内容清空,下次启动就不会自
动配置了)

* 路由操作模式

1 /*第一次进入路由CLI,我们看到的可能是下面这个样子,Router是初始化的路由默认名称,后面
的>代表当前处在用户模式,非特权模式*/
2 Router>
3
4 /*使用下面的命令进入特权模式与退出特权模式*/
5 Router>enable
6 Router#disable
7 Router>

* 全局配置模式

1 /*进入特权模式后使用下面的命令可以进入全局配置模式*/
2 Router# configure terminal
3
4 /*使用下面的命令进入特权模式*/
5 Router>enable
6 Enter configuration commands, one per line. End with CNTL/Z.
7 Router(config)#

* 给路由设置名称

1 Router(config)#hostname R1
2 R1(config)#

* 给特权模式设置密码

因为特权模式的权限非常高,可以执行路由IOS中所有支持的命令,所以为了安全需要给特权模式设置密码

1 /*第一种特权密码设置方式,这种方式密码不会被加密*/
2 R1(config)#enable password testpassword
3
4 /*第二种特权密码设置方式,这种方式密码会被MD5加密,推荐*/
5 R1(config)#enable secret testpassword
6
7 /*设置完密码后可以测试一下,首先用exit退回到用户模式下*/
8
9 R1(config)#exit
10 R1#exit
11 ....回车一下....
12 R1>enable
13 Password: /*输入你设置的密码才能进入下面的特权模式*/
14 R1#

* 给路由设置控制端口(CONSOLE )和远程调试端口(AUX)密码

我们现在使用的是模拟器,实际在真实环境中,我们是通过全反线连接到路由的Console接口上对路由进行配置的,
路由没有做任何配置时,这个接口是没有密码的,也就是说任何人只要用配置线接到这个接口上,就能进入路
由CLI下。所以这里我们也需要设置密码。AUX接口是用于远程调试的,也可以用于本地配置,所以也需要设置密
码。

1 /*设置Console接口密码,password后面接你要设置的密码*/
2 /*注意,密码是允许尾部带空格的,不允许首部带空格*/
3 R1(config)#line console 0
4 R1(config-line)#password testpass
5 R1(config-line)#login
6
7 /*设置AUX接口密码*/
8 R1(config-line)#line aux 0
9 R1(config-line)#password auxtestpass
10 R1(config-line)#login
11 R1(config-line)#exit
12 R1(config)#

* 接口配置模式

1 /*在全局配置模式下可以使用下面这样的命令进入接口配置模式*/
2 R1(config)#interface serial 0/0
3 R1(config-if)#
4
5 /*这里是在R1上进入了R1的串口s0/0,之后就可以配置IP了*/
* 配置接口IP 和开启接口

1 /*给s0/0配置ip,子网掩码*/
2 R1(config-if)#ip address 12.1.1.1 255.255.255.0
3
4 /*在DCE端需要配置时钟同步率*/
5 R1(config-if)#clock rate 64000
6
7 /*设置接口描述,这一步不是必须的,但是如果有描述就好像程序有注释一样*/
8 R1(config-if)#description "this port is link to R2 s0/1"
9
10 /*如果要给这个接口配置多个IP可以这样*/
11 R1(config-if)#ip address 12.2.2.1 255.255.255.0 secondary
12
13 /*启用这个接口,这一步最容易忘记*/
14 R1(config-if)#no shutdown

* 设置命令输入同步模式

大家到这里可能会发现,输入命令的时候,经常会有路由返回的各种消息打断了你的输入,虽然可以使用”Ctrl+R”来将
当前输入转移到新行继续输入,但是这样非常不方便,可以通过下面的命令来让路由返回的消息不影响你的输入:

1 /*设置console线路同步模式*/
2 R1(config)#line console 0
3 R1(config-line)#logging synchronous
4
5 /*设置console线路命令输入永不超时*/
6 R1(config-line)#exec-timeout 0 0
7 R1(config-line)#end
8 R1#
9
10 /*end命令可以一次性退到特权模式,exit是一次退一步*/

* 配置远程登录(VTY )

远程登录允许远程通过Telnet、SSH等对路由进行远程访问和管理。路由必须配置特权密码,这样远程用户才能进入
特权模式(本地连接,没有特权密码直接enable就进去了)。

1 /*如果路由没有配置特权密码先配置特权密码*/
2 R1(config)#enable secret testpass
3
4 /*设置允许5条并发线路对此路由的远程访问(0-4)*/
5
6 R1(config)#line vty 0 4
7 R1(config-line)#password vtppass /*连接密码vtppass*/
8 R1(config-line)#login /*这一句的作用是要求登录密码,如果是no login远程登录将不需要
密码*/
9 R1(config-line)#exit
10
11 /*下面的可选配置将仅允许12.1.1.2这一个IP远程登录此路由*/
12 R1(config)#access-list 1 permit 12.1.1.2
13 R1(config)#line vty 0 4
14 R1(config-line)#access-class 1 in
15 R1(config-line)#end
16 R1#

* 配置路由时钟

1 /*首先需要在全局配置模式下设置时区,然后在特权模式下配置时钟*/
2 R1(config)#clock timezone GMT +8
3 R1(config)#exit
4 R1#clock set 11:54:00 october 22 2012 /*2012年10月22日的11点54分*/

* 配置路由旗帜(BANNER)消息

关于旗帜消息,大家可以在全局配置模式中输入”banner ?”去一个个的尝试,其实就是当你远程登录路由时,或者登录
路由的控制端口时,显示出来的提示信息。

1 R1(config)#banner ?
2 LINE c banner-text c, where 'c' is a delimiting character
3 exec Set EXEC process creation banner
4 incoming Set incoming terminal line banner
5 login Set login banner
6 motd Set Message of the Day banner
7 prompt-timeout Set Message for login authentication timeout
8 slip-ppp Set Message for SLIP/PPP
9
10 /*一个简单的实例*/
11 R1(config)#banner exec *Hello Welcome to R1*
12 R1(config)#exit
13 R1#exit
14
15 R1 con0 is now available
16 Press RETURN to get started.
17 User Access Verification
18
19 Password: /*输入console密码后显示下面的旗帜消息*/
20 Password: Hello Welcome to R1
21 R1>

* 命令的简写与补全

在Cisco IOS中的所有命令都可以使用和Linux一样的[tab]键来补全,并且这些命令都可以使用简写

1 /*命令简写实例*/
2
3 Router>en /*进入特权模式,没有设置密码*/
4 Router#conf t /*进入全局配置模式*/
5
6 Router(config)#host R1 /*设置路由名称*/
7 R1(config)#line co 0 /*进入console线路*/
8 R1(config-line)#pass consolepass /*设置console接入密码*/
9 R1(config-line)#login /*必须输入密码登陆*/
10 R1(config-line)#logg syn /*启用命令输入同步模式*/
11 R1(config-line)#exec-time 0 0 /*命令输入永不超时*/
12 R1(config-line)#exit
13 R1(config)#int s 0/0 /*进入Serial0/0接口*/
14 R1(config-if)#ip add 12.1.1.1 255.255.255.0 /*配置主IP*/
15 R1(config-if)#no shut /*开启接口*/
16 R1(config-if)#

关于简写命令,大家看到后可以使用[tab]补全就知道实际是什么命令了。

* 其他常用命令

/*查看当前全局配置文件情况*/
R1#show running-config

/*查看接口是否开启*/
R1#show ip interface brief

/*查看接口详细参数*/
R1#show interfaces

/*查看接口IP相关参数*/
R1#show ip interfaces

/*查看远程连接用户*/
R1#show users

[*3*].配置R1远程登录R2实例

R1配置如下:

1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 Router(config)#enable secret test1
5 R1(config)#line co 0
6 R1(config-line)#logg syn
7 R1(config-line)#exec-time 0 0
8 R1(config-line)#pass test
9 R1(config-line)#exit
10 R1(config)#int s 0/0
11 R1(config-if)#ip add 12.1.1.1 255.255.255.0
12 R1(config-if)#no shut
13 R1(config-if)#end
14 R1#

R2配置如下:

1 Router>en
2 Router#conf t
3 Router(config)#host R2
4 R2(config)#enable secret test2 /*配置特权密码*/
5 R2(config)#line vty 0 4 /*配置远程访问线路*/
6 R2(config-line)#pass 123456 /*远程访问密码*/
7 R2(config-line)#login
8 R2(config-line)#exit
9 R2(config)#line co 0
10 R2(config-line)#logg syn
11 R2(config-line)#exec-time 0 0
12 R2(config-line)#exit
13 R2(config)#int s 0/1 /*配置与R1相连的接口IP*/
14 R2(config-if)#ip add 12.1.1.2 255.255.255.0
15 R2(config-if)#no shut
16 R2(config-if)#end

测试R1连接R2:

1 R1#telnet 12.1.1.2
2 Trying 12.1.1.2 ... Open
3 User Access Verification
4 Password: /*输入远程访问密码123456*/
5 R2>en
6 Password: /*输入R2上的特权密码test2*/
7 R2# /*这样就进入了R2的特权模式了*/
8
9 /*远程登录可以执行的一些特殊操作*/
10 R2# 使用Crtl+Shift+6组合键,松开后马上按键盘上的X键,即可挂起远程登录,回到R1
11 R1#
12
13 /*在R1上使用Show sessions可以看到挂起的会话,可以看到会话编号是1*/
14 R1#show sessions
15 Conn Host Address Byte Idle Conn Name
16 * 1 12.1.1.2 12.1.1.2 0 0 12.1.1.2
17
18 /*直接输入1回车,登回到R2*/
19 R1# 1
20 R2#
21
22 /*退出登录*/
23 R2#exit
24 R1#
25
26 /*在R2上可以查看登录到本地的链接,0是本地console连接,130那个vty是R1的链接,可以看到
它的IP:12.1.1.1*/
27 R2#show users
28 Line User Host(s) Idle Location
29 * 0 con 0 idle 00:00:00
30 130 vty 0 idle 00:01:19 12.1.1.1
31
32 /*在R2上使用命令强行断开某链接,输入命令回车确认即可*/
33 R2#clear line 130
34 [confirm]
35 [OK]
36 R2#

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记九]Ping、Traceroute应用与排错
发表于 2012 年 10 月 23 日 由 晴刃

这篇文章通过一个实例,演示ping、traceroute、debug等命令的用法;测试网络连通性,分析网络数据不可达的原
因。

___________________________________________

文章目录

[*1*].实例拓扑图与配置
[*2*].测试连通性
[*3*].高级ping命令和路由追踪命令traceroute
Traceroute的工作原理
[*4*].常用排错命令

___________________________________________

[*1*].实例拓扑图与配置

C1是使用VPCS虚拟出来的一台计算机,SW1是一台不可网管交换机,R1、R2、R3上都添加了”NM-4T”串口,R1上
还添加了一个”NM-1FE-TX”快速以太网端口。R3上面配置了一个回环接口3.3.3.3/24,各设备IP配置和连接如下图:

R1配置如下:

1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 R1(config)#line co 0
5 R1(config-line)#logg syn
6 R1(config-line)#exec-time 0 0
7 R1(config-line)#exit
8 R1(config)#int fa 1/0
9 R1(config-if)#ip add 192.168.1.1 255.255.255.0
10 R1(config-if)#no shut
11 R1(config-if)#int s 0/0
12 R1(config-if)#ip add 12.1.1.1 255.255.255.0
13 R1(config-if)#no shut
14 R1(config-if)#end
15 R1#

R2配置如下:

1 Router>en
2 Router#conf t
3 Router(config)#line co 0
4 Router(config-line)#logg syn
5 Router(config-line)#exec-time 0 0
6 Router(config-line)#exit
7 Router(config)#host R2
8 R2(config)#int s 0/1
9 R2(config-if)#ip add 12.1.1.2 255.255.255.0
10 R2(config-if)#no shut
11 R2(config-if)#int s 0/2
12 R2(config-if)#ip add 23.1.1.2 255.255.255.0
13 R2(config-if)#no shut
14 R2(config-if)#end
15 R2#

R3配置如下:

1 Router>en
2 Router#conf t
3 Router(config)#host R3
4 R3(config)#line co 0
5 R3(config-line)#logg syn
6 R3(config-line)#exec-time 0 0
7 R3(config-line)#int s 0/3
8 R3(config-if)#ip add 23.1.1.3 255.255.255.0
9 R3(config-if)#no shut
10 R3(config-if)#exit
11 R3(config)#int loopback 0 /*配置回环接口0*/
12 R3(config-if)#ip add 3.3.3.3 255.255.255.0
13 R3(config-if)#no shut
14 R3(config-if)#end
15 R3#

[*2*].测试连通性

首先在C1上面测试ping自己的网关(R1的fa1/0接口)

1 VPCS[1]> ping 192.168.1.1


2 192.168.1.1 icmp_seq=1 ttl=255 time=49.000 ms /*可以ping通*/
3
4 /*继续在C1上测试ping不同网段的地址*/
5
6 VPCS[1]> ping 12.1.1.1
7 12.1.1.1 icmp_seq=1 ttl=255 time=29.000 ms /*ping网关上的串口,成功*/
8
9 VPCS[1]> ping 12.1.1.2 /*ping R2和R1相连的接口,失败,超时*/
10 12.1.1.2 icmp_seq=1 timeout

这一步为什么会超时呢?是不是数据包没有到达R2?我们在R2上开启debug命令进行调试:

1 R2#debug ip icmp
2 ICMP packet debugging is on
3
4 R2# /*开启调试后,再一次用C1去ping 12.1.1.2,发现R2上出现了下面的提示*/
5 *Mar 1 00:17:10.135: ICMP: echo reply sent, src 12.1.1.2, dst 192.168.1.2
6
7 /*关闭所有调试的方法是undebug all*/

从上面的显示可以看出R2收到了C1发送过来的ICMP包,我们查看一下R2的路由表:

1 R2#show ip route
2
3 /*省略部分输出*/
4
5 Gateway of last resort is not set
6
7 23.0.0.0/24 is subnetted, 1 subnets
8 C 23.1.1.0 is directly connected, Serial0/2
9 12.0.0.0/24 is subnetted, 1 subnets
10 C 12.1.1.0 is directly connected, Serial0/1
11
12 R2#
13
14 /*
15 * 从输出可以明显的看到R2的路由表中有两个直连条目(C)
16 * 发往23.1.1.0/24网段的数据从Serial0/2发出
17 * 发往12.1.1.0/24网段的数据从Serial0/1发出
18 */

这样就很清楚的发现,并没有说明发往192.168.1.0/24网段的数据应该怎么发送,所以R2丢弃发往192.168.1.2发送过
来的数据。

下面给R2添加静态路由,让他知道发往192.168.1.0/24网段的数据应该发给12.1.1.1(R1),这样,C1再ping
12.1.1.2,就能ping通了:

1 R2(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.1

这个时候实际上C1 ping R3的任何地址都是ping不通的,因为数据包到达R1后,R1检查自己的路由表,它会发现没


有任何去往R3的路由条目(3.3.3.0/24、23.1.1.0/24),所以它会直接给C1回复一个主机不可达:

1 VPCS[1]> ping 3.3.3.3


2 *192.168.1.1 icmp_seq=1 ttl=255 time=20.000 ms (ICMP type:3, code:1,
Destination host unreachable)
3
4 VPCS[1]> ping 23.1.1.2
5 *192.168.1.1 icmp_seq=1 ttl=255 time=20.000 ms (ICMP type:3, code:1,
Destination host unreachable)
6
7 VPCS[1]> ping 23.1.1.3
8 *192.168.1.1 icmp_seq=1 ttl=255 time=26.000 ms (ICMP type:3, code:1,
Destination host unreachable)

在R1上开启ICMP调试就能看到

1 R1#debug ip icmp
2 ICMP packet debugging is on
3 R1#
4 *Mar 1 00:34:55.587: ICMP: dst (23.1.1.3) host unreachable sent to 192.168.1.2

要想让这个拓扑图中的各个设备都能互相ping通,需要在R1、R2、R3上面添加下面的静态路由条目:

1 /*R1添加一条默认路由目的地是12.1.1.2(R2)*/
2 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
3
4 /*R2添加下面两条静态路由*/
5 R2(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.1
6 R2(config)#ip route 3.3.3.0 255.255.255.0 23.1.1.3
7
8 /*R3也添加一条默认路由*/
9 R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2

这个时候,不论在哪个设备上,都能ping通拓扑上的所有接口IP。下面是R1上面ping R3回环接口的返回信息:

1 R1#ping 3.3.3.3
2
3 Type escape sequence to abort.
4 Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
5 !!!!!
6
7 /*
8 * 这里显示五个感叹号,说明上面默认ping发送5次,ping成功5次
9 * 如果超时会显示省略号"....."
10 */

关闭R3的回环接口,就会出现超时的情况:

1 R3#conf t
2 R3(config)#int lo 0
3 R3(config-if)#shut /*关闭R3的回环接口*/
4 R3(config-if)#
5
6 /*使用R1去ping,显示超时,实际上这里产生了路由环路*/
7 R1#ping 3.3.3.3
8
9 Type escape sequence to abort.
10 Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
11 .
12 *Mar 1 00:45:09.355: ICMP: time exceeded rcvd from 23.1.1.2.
13
14 /*R2显示的信息,意思是TTL=0了*/
15 *Mar 1 00:45:07.991: ICMP: time exceeded (time to live) sent to 12.1.1.1 (dest
was 3.3.3.3)
实际上这里就是因为R3关闭了换回接口,R1首先根据自己的默认路由将数据发送给R2,R2再根据自己的静态路由将
数据发送给R3,如果回环口没有关闭,R3将应答这个ICMP,但是此时R3上回环关闭了,R3根据自己的默认路由又
将数据发回R2,R2再次将数据发回R3,这样直到IP报头里面的TTL字段减小到0,丢弃这个数据。

下面我们打开R3的lo0回环接口,关闭R2的s0/2,再次用R1去ping 3.3.3.3

1 /*关闭R2与R3相连的s0/2接口*/
2 R2(config-if)#int s 0/2
3 R2(config-if)#shut
4
5 /*R1开始ping*/
6 R1#ping 3.3.3.3
7
8 Type escape sequence to abort.
9 Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
10
11 U /*这里显示不可达(U)*/
12
13 *Mar 1 00:53:32.091: ICMP: dst (12.1.1.1) host unreachable rcv from 12.1.1.2
14
15 /*R2上的显示如下*/
16 R2#
17 *Mar 1 00:53:34.823: ICMP: dst (3.3.3.3) host unreachable sent to 12.1.1.1
18
19 /*
20 * 查看R2路由表,发现直连接口条目23.1.1.0/24消失了
21 * 同样,目的地址是这个直连接口网段的静态路由条目也消失了
22 * 所以R2返回一个消息告诉R1"(3.3.3.3) host unreachable"
23 */
24 R2#show ip route
25
26 Gateway of last resort is not set
27
28 12.0.0.0/24 is subnetted, 1 subnets
29 C 12.1.1.0 is directly connected, Serial0/1
30 S 192.168.1.0/24 [1/0] via 12.1.1.1

打开R2的s0/2继续下面的实验。

[*3*].高级ping命令和路由追踪命令traceroute

使用高级ping命令,R1 ping R3的回环接口:

1 R1#ping /*直接输入ping,回车*/
2 Protocol [ip]: /*选择协议,默认回车即可*/
3 Target IP address: 3.3.3.3 /*选择目标IP,这里是R3的lo0接口IP*/
4 Repeat count [5]: 10 /*ping次数,这里输入了10次,默认5次*/
5 Datagram size [100]: /*数据包大小,默认回车即可*/
6 Timeout in seconds [2]: /*超时时间,直接回车*/
7 Extended commands [n]: y /*是否显示扩展命令,输入y*/
8 Source address or interface: 192.168.1.1 /*选择用本地的哪个接口去ping,这里选
择R1的以太网接口*/
9 Type of service [0]: /*下面暂时不用理会,一路回车*/
10 Set DF bit in IP header? [no]:
11 Validate reply data? [no]:
12 Data pattern [0xABCD]:
13 Loose, Strict, Record, Timestamp, Verbose[none]:
14 Sweep range of sizes [n]:
15 Type escape sequence to abort.
16 Sending 10, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
17 Packet sent with a source address of 192.168.1.1
18 !!!!!!!!!! /*可以看到ping通了十次*/
19 Success rate is 100 percent (10/10), round-trip min/avg/max = 16/40/64 ms
20
21 /*高级ping命令能同样能实现路由跟踪*/
22 R1#ping
23 Protocol [ip]:
24 Target IP address: 3.3.3.3
25 Repeat count [5]: 1 /*Ping一次*/
26 Datagram size [100]:
27 Timeout in seconds [2]:
28 Extended commands [n]: y /*使用扩展*/
29 Source address or interface: 192.168.1.1 /*选择源端口*/
30 Type of service [0]:
31 Set DF bit in IP header? [no]:
32 Validate reply data? [no]:
33 Data pattern [0xABCD]:
34 Loose, Strict, Record, Timestamp, Verbose[none]: r /*这里输入r*/
35 Number of hops [ 9 ]:
36 Loose, Strict, Record, Timestamp, Verbose[RV]:
37 Sweep range of sizes [n]:
38
39 /*记录ICMP包从发出到返回所经过的端口(外出方向)*/
40 Reply to request 0 (96 ms). Received packet has options
41 Total option bytes= 40, padded length=40
42 Record route:
43 (12.1.1.1) /*首先从R1的这个接口发出*/
44 (23.1.1.2) /*到达R2,R2从这个接口发出*/
45 (3.3.3.3) /*到达目的地*/
46 (23.1.1.3) /*ICMP包开始返回,R3从这个接口发回给R2*/
47 (12.1.1.2) /*到达R2,R2从这个接口发给R1*/
48 (192.168.1.1) <*> /*回到起点*/
49 (0.0.0.0)
50 (0.0.0.0)
51 (0.0.0.0)
52 End of list

ping命令可以测试网络通不通,但是如果中间网络不通,ping不能很好的定位问题出在哪里,而traceroute可以很好的
定位问题出现的位置,下面是正常状态下traceroute 3.3.3.3的结果

1 R1#traceroute 3.3.3.3
2
3 Type escape sequence to abort.
4 Tracing the route to 3.3.3.3
5
6 1 12.1.1.2 40 msec 24 msec 40 msec
7 2 23.1.1.3 28 msec 48 msec *
8
9 /*
10 * 可以看到数据首先经过了12.1.1.2,然后到达23.1.1.3
11 * 3.3.3.3和23.1.1.3同处于R3上,所以追踪到此完成
12 */
* TRACEROUTE 的工作原理:

首先,发送设备将数据包中的TTL设置成1,数据包会被第一条路由器丢弃,返回一个错误码信息,设备源根据这个信
息判断经过的中间设备和延时,设备源一般发送三个重复的包(这就是为什么每个IP后面有3个返回时间的原
因”12.1.1.2 40 msec 24 msec 40 msec”);之后设备源接着发送TTL为2的数据包,再发送TTL为3的数据包,直到数
据包达到目的地或者TTL=30为止。在正常情况下,除非路由存在环路,否则TTL不会超过30就到达目的地。

在PC(Windows设备)CMD下,命令是tracert:

1 PC> tracert 3.3.3.3 -d


2 traceroute to 3.3.3.3, 64 hops max, press Ctrl+C to stop
3 1 192.168.1.1 18.000 ms 9.000 ms 9.000 ms
4 2 12.1.1.2 39.000 ms 29.000 ms 29.000 ms
5 3 *23.1.1.3 58.000 ms (ICMP type:3, code:3, Destination port unreachable)
6
7 /*
8 * 可以看到最后一个包返回了一个端口不可达,
9 * 其实源设备就是利用返回的是错误码,还是端口不可达判断是否到达了目的主机。
10 * 如果是端口不可达,就说明到达了主机
11 * 详见"TCP/IP详解 卷一:协议"
12 */

[*4*].常用排错命令

1 /*针对某接口,以太网接口可以看到MAC地址,带宽,IP地址等*/
2 R1#show interfaces fa 1/0
3 FastEthernet1/0 is up, line protocol is up
4 Hardware is AmdFE, address is cc00.143c.0010 (bia cc00.143c.0010)
5 Internet address is 192.168.1.1/24
6 MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
7 reliability 255/255, txload 1/255, rxload 1/255
8 Encapsulation ARPA, loopback not set

1 /*查看接口是否开启*/
2 R1#show ip interface brief
3 Interface IP-Address OK? Method Status Protocol
4 Serial0/0 12.1.1.1 YES manual up up
5 Serial0/1 unassigned YES unset administratively down down
6 Serial0/2 unassigned YES unset administratively down down
7 Serial0/3 unassigned YES unset administratively down down
8 FastEthernet1/0 192.168.1.1 YES manual up up

1 /*查看路由器IOS版本,硬件信息等*/
2 R1#show version

1 /*查看路由器接口硬件信息*/
2 R1#show controllers fa 1/0
1 /*
2 * 查看路由器接口硬件信息,
3 * 如果是串行接口可以看到如下一行,可以判断接口是DCE端还是DTE端还有时钟
4 * cable type : V.11 (X.21) DCE cable, received clockrate 2015232
5 */
6 R1#show controllers s 1/0

1 /*查看路由器ARP缓存*/
2 R1#show arp
3 Protocol Address Age (min) Hardware Addr Type Interface
4 Internet 192.168.1.1 - cc00.143c.0010 ARPA FastEthernet1/0
5 Internet 192.168.1.2 42 0050.7966.6800 ARPA FastEthernet1/0

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十]配置文件备份与还原
发表于 2012 年 10 月 24 日 由 晴刃

本篇文章第一部分通过具体实例演示一下如何将Cisco设备的运行配置文件(running-config)保存到启动配置文件
(startup-config),如何将启动配置文件或运行配置文件直接备份到内网的一台开启了TFTP服务的计算机上;第二
部分通过具体实例演示一下Cisco的CDP协议的工作原理。

___________________________________________

文章目录

[*1*].配置文件的保存与备份
运行配置文件保存到启动配置文件
将配置文件备份到计算机
从备份文件恢复路由配置
[*2*].CDP(Cisco Discovery Protocol)协议应用
查看CDP协议全局信息
修改CDP发送和保持时间
开启和关闭CDP协议
查看CDP邻居表
CDP其他命令

___________________________________________

[*1*].配置文件的保存与备份

实验拓扑图: 真实计算机连接到GNS3中的路由器R1的以太网接口fa 0/0,设备IP如下图所示,真实计算机上开启


了TFTP服务。

R1配置如下:

1 R1>en
2 R1#conf t
3 R1(config)#no ip domain-lookup
4 R1(config)#line co 0
5 R1(config-line)#logg syn
6 R1(config-line)#exec-timeout 0 0
7 R1(config-line)#exit
8 R1(config)#int fa 0/0
9 R1(config-if)#ip add 192.168.1.1 255.255.255.0
10 R1(config-if)#no shut
11 R1(config-if)#end

* 将运行配置文件保存到启动配置文件中

1 R1#show startup-config /*在没有将运行配置文件保存到启动配置文件前,启动配置文件什么


都没有*/
2 R1#write /*这条命令将运行配置文件写入启动配置文件中*/
3 Building configuration...
4 [OK]
5 R1#show startup-config /*再次查看启动配置文件就能看到里面和当前运行配置文件内容一
致*/
6
7 /*方法二,下面的命令和上面的write执行后效果相同*/
8 R1#copy running-config startup-config
9 Destination filename [startup-config]? /*指定文件名,可以使用默认*/
10 Building configuration...
11 [OK]
12 R1#

* 将配置文件备份到计算机C1 上

首先确保C1的IP和网关设置正确,并启动了TFTP软件,然后在R1上执行下面的命令:

1 R1#copy startup-config tftp /*将启动配置文件保存到tftp*/


2 Address or name of remote host []? 192.168.1.2 /*输入运行了TFTP服务的计算机IP*/
3 Destination filename [r1-confg]? /*保存的文件名,输入一个名称或默认回车即可*/
4 .!!
5 /*出现感叹号表示传输成功,出现句号表示超时,检查IP设置是正确以及tftp服务是否开启*/
6 552 bytes copied in 3.252 secs (170 bytes/sec)
7 R1#
8
9 /*上面的语句同样可以变形成备份运行配置文件*/
10 R1#copy running-config tftp

* 将计算机上备份的配置文件恢复到路由

1 /*首先我删除startup-config*/
2 R1#erase startup-config
3 Erasing the nvram filesystem will remove all configuration files! Continue?
[confirm]
4 [OK]
5 Erase of nvram: complete
6 R1#
7
8 /*显示startup-config,被告知不存在*/
9 R1#show startup-config
10 startup-config is not present
11
12 /*从备份文件恢复startup-config*/
13 R1#copy tftp startup-config
14 Address or name of remote host []? 192.168.1.2 /*tftp主机IP*/
15 Source filename []? r1-confg /*输入备份文件的名字*/
16 Destination filename [startup-config]? /*恢复到启动配置文件,默认回车即可*/
17 Accessing tftp://192.168.1.2/r1-confg...
18 Loading r1-confg from 192.168.1.2 (via FastEthernet0/0): !
19 [OK - 552 bytes]
20
21 /*恢复成功,查看一下*/
22 R1#show startup-config
23 Using 552 out of 129016 bytes
24 !
25 version 12.4
26
27 /*
28 * 内容省略,恢复成功
29 * 同样的方法可以直接恢复到running-config
30 * # copy tftp running-config
31 */

[*2*].CDP(Cisco Discovery Protocol)协议应用

CDP协议顾名思义,就是用来检测本地和远程设备信息的协议,思科私有协议之一。实验拓扑图如下:一台三层交换
机(在GNS3中使用3640添加了16口以太网交换模块模拟出来的),两台3640路由,一台不可网管型二层路由器。因
为CDP是一个二层协议,所以不需要配置IP地址,直接将设备所有端口打开。

* SW1配置: 因为交换模块默认所有接口都是打开的,如果不放心可以使用下面的命令一次性打开所有端口

1 SW1(config)#int range fastEthernet 0/0 - 15 /*添加range的命令可以一次性配置多个


以太网接口*/
2 SW1(config-if-range)#no shutdown
3 SW1(config-if-range)#end
4 SW1#

* R1配置:
1 /*首先查看当前设备有哪些接口*/
2 R1#show ip interface brief
3
4 Interface IP-Address OK? Method Status Protocol
5 Serial0/0 unassigned YES unset administratively down down
6 Serial0/1 unassigned YES unset administratively down down
7 Serial0/2 unassigned YES unset administratively down down
8 Serial0/3 unassigned YES unset administratively down down
9 FastEthernet1/0 unassigned YES unset administratively down down
10 FastEthernet2/0 unassigned YES unset administratively down down
11
12 /*依次开启全部接口*/
13 R1(config)#int fa 1/0
14 R1(config-if)#no shut
15 R1(config-if)#int fa 2/0
16 R1(config-if)#no shut
17 R1(config-if)#int s 0/0
18 R1(config-if)#no shut
19 R1(config-if)#int s 0/1
20 R1(config-if)#no shut
21 R1(config-if)#int s 0/2
22 R1(config-if)#no shut
23 R1(config-if)#int s 0/3
24 R1(config-if)#no shut
25 R1(config-if)#end
26 R1#

* R2按照R1相同的操作依次开启所有接口

Tip:这里有一个简便方法,不用一行一行的去敲命令,实际上大多数工程师都是先用一个记事本将命令写在里面(一
行一条命令,但是要注意当前位置是在哪里,比如在接口里面就要先用exit退出到全局配置模式才能输入下一条全局
配置模式下的命令),然后复制粘贴到路由器的CLI里面,比如将下面这一段直接粘贴到R2的CLI里面:

1 en
2 conf t
3 host R2
4 line co 0
5 logg syn
6 exec-time 0 0
7 exit
8 int fa 1/0
9 no shut
10 int fa 2/0
11 no shut
12 int s 0/0
13 no shut
14 int s 0/1
15 no shut
16 int s 0/2
17 no shut
18 int s 0/3
19 no shut
20 end

* 查看CDP协议全局信息
1 R1#show cdp
2 Global CDP information:
3 Sending CDP packets every 60 seconds /*CDP发送时间间隔*/
4 Sending a holdtime value of 180 seconds /*CDP保持时间*/
5 Sending CDPv2 advertisements is enabled /*协议版本,是否开启*/

* 修改CDP发送和保持时间

1 R1#conf t
2 R1(config)#cdp timer 15 /*修改CDP发送时间间隔是15秒*/
3 R1(config)#cdp holdtime 30 /*修改CDP保持时间是30秒*/
4 R1(config)#end
5 R1#show cdp /*再次显示CDP全局信息看到更改*/
6 Global CDP information:
7 Sending CDP packets every 15 seconds
8 Sending a holdtime value of 30 seconds
9 Sending CDPv2 advertisements is enabled
10 R1#

* 开启和关闭CDP协议

1 R1#conf t
2 R1(config)#no cdp run /*关闭全局CDP协议*/
3 R1(config)#cdp run /*开启全局CDP协议*/
4 R1(config)#end
5 R1#
6
7 R1#conf t
8 R1(config)#int fa 1/0
9 R1(config-if)#no cdp enable /*关闭某接口的CDP协议*/
10 R1(config-if)#cdp enable /*开启某接口的CPD协议*/
11 R1(config-if)#end
12 R1#
13
14 /*显示那些接口开启了CDP协议,如果在接口中关闭了CDP,将不会出现在这个列表中*/
15 R1#show cdp interface

* 通过CDP邻居表,判断拓扑图

这里我们假设不知道上面的拓扑图是什么,通过打开网络中所有接口,开启CDP协议,可以查看CDP邻居表,从中我
们可以看到设备的接口的链接状况,从而判断拓扑表。

SW1的CDP邻居表:

1 SW1#show cdp neighbors


2 Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
3 S - Switch, H - Host, I - IGMP, r - Repeater
4
5 Device ID Local Intrfce Holdtme Capability Platform Port ID
6 R1 Fas 0/15 140 R S I 3640 Fas 1/0
7
8 /*
9 * Device ID是连接在本地接口Fas0/15上的设备的名称(hostname)
10 * Holdtme 是保持时间,保持时间是一个倒计时,
11 * 每次接收到这个设备发来的CDP包,这个时间重新设置成对方设备设置的保持时间最大值,
12 * 之后开始倒计时,如果倒计时到0,这条条目消失。
13 * Capability 表示这台设备的类型,RS=带有路由交换功能
14 * Port ID 是对端设备(R1)端口。
15 * Platform 是对端设备平台(3640路由器)
16 * 这样就不难看出,一台名称是R1,的3640路由器的fa1/0接口连接在本地的fa0/15接口上
17 * 这和拓扑图完全吻合。
18 */

R1的CDP邻居表:

1 R1#show cdp neighbors


2
3 Device ID Local Intrfce Holdtme Capability Platform Port ID
4 SW1 Fas 1/0 147 R S I 3640 Fas 0/15
5 R2 Ser 0/0 17 R S I 3640 Ser 0/1
6 R2 Fas 2/0 17 R S I 3640 Fas 2/0
7 R2 Fas 2/0 27 R S I 3640 Fas 1/0
8
9 /*
10 * 在R1的CDP邻居表中大家可能觉得最奇怪的就是为什么会有两个R2连接在本地fa2/0
11 * 其实这是因为R2的Fas 2/0、Fas 1/0都连接在一台二层交换机上面
12 * 而R1的fa2/0也连接在上面,所以就会出现这样的情况
13 */

R2的CDP邻居表:

1 R2#show cdp neighbors


2
3 Device ID Local Intrfce Holdtme Capability Platform Port ID
4 R2 Fas 1/0 20 R S I 3640 Fas 2/0
5 R2 Fas 2/0 29 R S I 3640 Fas 1/0
6 R1 Fas 2/0 141 R S I 3640 Fas 2/0
7 R1 Fas 1/0 141 R S I 3640 Fas 2/0
8 R1 Ser 0/1 131 R S I 3640 Ser 0/0
9
10 /*
11 * 前面的两个R2说明R2的两个接口连接在二层交换机或者集线器上,
12 * 而本地的这两个接口又同时连在R1的Fa2/0上,
13 * 这进一步验证了中间是有一台交换机或者集线器。
14 */

* CDP其他命令

1 R2#show cdp entry * /*显示所有CDP邻居详细信息*/


2
3 R2#show cdp entry R1 /*显示邻居R1的详细信息*/
4
5 R2#show cdp traffic /*显示CDP数据包收发数量等*/

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十一]静态路由与默认路由
发表于 2012 年 10 月 25 日 由 晴刃

这篇文章介绍一下路由器互连的网络和交换机互连的网络的区别;什么是直连路由,什么是静态路由,什么是动态路
由,什么是默认路由;网络互连中路由选路的基本原则;最后结合一个实例演示讲解这些路由的工作方式。

___________________________________________

文章目录

[*1*].交换机互连与路由器互连的区别
交换机互连网络
路由器互连网络
[*2*].路由原理
[*3*].路由协议
静态路由
静态路由总汇
默认路由

___________________________________________

[*1*].交换机互连与路由器互连的区别

* 交换机互连网络

交换机工作在OSI参考模型的第二层,完成数据帧(Frame)的转发,帧中的地址为MAC地址,交换机可以将多个相
同类型的网络(拥有相似的帧结构)互连起来,但是对于帧结构不同的网络无能为力。

交换机存在以下几点不足:

第一,广播风暴。当网络的规模较大时,可能引起广播风暴,网络中广播信息量巨大,导致网络拥塞,或瘫痪。
第二,不同网段互连。普通的二层交换机无法满足不同网段间的通信。
第三,网络安全。无法进行不同网段间互相通信,就意味着,需要通信时,要将两个网段合并成一个,这增加了安全
风险。

* 路由器互连网络

路由器工作在OSI参考模型的第三层网络层,利用网络层定义的“逻辑地址”(IP地址)来区别不同网络,它不转发广播
消息,并将广播消息限制在每个网络内部。发往其他网段的数据根据路由表转发。目前在Internet网络中采用子网掩码
来确定IP地址中的网络号和主机号,规定,子网掩码中数字“1”对应的IP地址中的部分为网络号,子网掩码中数字“0”所
对应的IP地址中的部分为主机号,相同网络号的主机可以直接通信,不同网络号的主机需要通过网络中某个路由(网
关)使他们能够通信。路由上不同端口对应不同IP子网,不同端口的网络号必须不同。

[*2*].路由原理

路由器的工作就是接收信息分组,根据路由表将分组发送出去,这是路由器的两个基本功能,寻址和转发;路由器也
被称作转存设备,因为它在内存中储存接收到的信息分组,直到它被传送出去。路由的转发是基于目标的网络地址
的,而不是目标的IP地址。

当一台主机将信息发送给处于同一子网的另外一台主机时(他们也许是连接同一台交换机上),不需要经过路由器,
只需要交换机中转数据;但是,如果这台主机想要给不同子网的一台主机发信息,就必须通过路由器中转数据,而一
般主机商都配置有默认网关(default gateway),这个默认网关就是出口路由连接这个网段的接口的IP地址。

下图是Windows系统配置了默认网关(192.168.1.1)后的路由表:

Tip: 在这里不得不说一下,Windows系统根据自身路由表转发数据,如果存在一个恶意进程,直接使用下面的命令删
除了默认路由,效果就是发往其他网段的数据全部丢弃,也就是上不了网了。

1 /*执行后查看route print可以看到默认路由消失了,并且在本地网卡里面的默认路由设置也被清
空了*/
2 C:\Users\Administrator>route delete 0.0.0.0
3 操作完成!

不仅仅操作系统中存在默认路由这个概念,路由器本身也有默认路由,路由器将不知道往哪发的IP分组发给默认路
由。

[*3*].路由协议

路由协议分类如下图所示:

注:EIGRP是一个高级距离矢量协议,同时具有距离矢量和链路状态路由协议的特征,Cisco私有协议之一。

下面通过一个实例来演示直连路由协议、静态路由协议以及默认路由。

如下图,R1、R2、R3互相连接,他们上面分别开启了一个回环接口:

R1配置:
1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 R1(config)#no cdp run /*关闭CDP协议,不然会一直出现双工不匹配的提示*/
5 R1(config)#line co 0
6 R1(config-line)#logg syn
7 R1(config-line)#exec-time 0 0
8 R1(config-line)#exit
9 R1(config)#int s 0/0
10 R1(config-if)#ip add 12.1.1.1 255.255.255.0
11 R1(config-if)#no shut
12 R1(config-if)#int fa 1/0
13 R1(config-if)#ip add 13.1.1.1 255.255.255.0
14 R1(config-if)#no shut
15 R1(config-if)#int lo 0
16 R1(config-if)#ip add 1.1.1.1 255.255.255.0
17 R1(config-if)#no shut
18 R1(config-if)#int s0/3 /*配置了一个没有连线的接口,并且开启了它*/
19 R1(config-if)#ip add 8.8.8.8 255.255.255.0
20 R1(config-if)#no shut
21 R1(config-if)#end
22 R1#

R2配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R2
4 R2(config)#int s 0/1
5 R2(config-if)#ip add 12.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int s 0/0
8 R2(config-if)#ip add 23.1.1.2 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#int lo 0
11 R2(config-if)#ip add 2.2.2.2 255.255.255.0
12 R2(config-if)#no shut
13 R2(config-if)#end
14 R2#

R3配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R3
4 R3(config)#no cdp run /*以后的实验,只要涉及到以太网接口,就关闭CDP*/
5 R3(config)#int s 0/1
6 R3(config-if)#ip add 23.1.1.3 255.255.255.0
7 R3(config-if)#no shut
8 R3(config-if)#int fa 1/0
9 R3(config-if)#ip add 13.1.1.3 255.255.255.0
10 R3(config-if)#no shut
11 R3(config-if)#int lo 0
12 R3(config-if)#ip add 3.3.3.3 255.255.255.0
13 R3(config-if)#no shut
14 R3(config-if)#end
15 R3#
配置完成后,在R1上查看当前路由表:

1 R1#show ip route
2
3 Gateway of last resort is not set
4
5 1.0.0.0/24 is subnetted, 1 subnets
6 C 1.1.1.0 is directly connected, Loopback0
7 12.0.0.0/24 is subnetted, 1 subnets
8 C 12.1.1.0 is directly connected, Serial0/0
9 13.0.0.0/24 is subnetted, 1 subnets
10 C 13.1.1.0 is directly connected, FastEthernet1/0
11
12 /*
13 * 我们看到,R1的路由表中有3个条目,分别代表了三个不同网段
14 * 前面的“C”表示直连路由,但是为什么没有出现s0/3(8.8.8.8)这个路由条目呢?
15 * 这是因为,路由只会产生激活端口的直连路由,
16 * 虽然s0/3配置了IP并且开启了,但是它并没有连线,
17 * 就算连线,如果对端端口没有加电开启,这个接口的IP任然是无效的,不会显示出来。
18 * Loopback接口是虚拟接口,只要配置IP,默认就是打开并且显示的。
19 */
20 R1#

下面是R2和R3的路由表:

1 /*显示R2路由表*/
2 R2#show ip route
3
4 Gateway of last resort is not set
5
6 2.0.0.0/24 is subnetted, 1 subnets
7 C 2.2.2.0 is directly connected, Loopback0
8 23.0.0.0/24 is subnetted, 1 subnets
9 C 23.1.1.0 is directly connected, Serial0/0
10 12.0.0.0/24 is subnetted, 1 subnets
11 C 12.1.1.0 is directly connected, Serial0/1
12
13 /*显示R3路由表*/
14 R3#show ip route
15
16 Gateway of last resort is not set
17
18 3.0.0.0/24 is subnetted, 1 subnets
19 C 3.3.3.0 is directly connected, Loopback0
20 23.0.0.0/24 is subnetted, 1 subnets
21 C 23.1.1.0 is directly connected, Serial0/1
22 13.0.0.0/24 is subnetted, 1 subnets
23 C 13.1.1.0 is directly connected, FastEthernet1/0

测试网络连通性:

1 /*在R1上测试Ping所有直连接口*/
2 R1#ping 12.1.1.2
3
4 Type escape sequence to abort.
5 Sending 5, 100-byte ICMP Echos to 12.1.1.2, timeout is 2 seconds:
6 !!!!! /*成功*/
7 Success rate is 100 percent (5/5), round-trip min/avg/max = 32/41/76 ms
8
9 R1#ping 13.1.1.3
10
11 Type escape sequence to abort.
12 Sending 5, 100-byte ICMP Echos to 13.1.1.3, timeout is 2 seconds:
13 .!!!! /*成功*/
14 Success rate is 80 percent (4/5), round-trip min/avg/max = 24/49/76 ms
15
16 R1#ping 2.2.2.2
17
18 Type escape sequence to abort.
19 Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
20 ..... /*失败*/
21 Success rate is 0 percent (0/5)
22
23 /*
24 * 在R1、R2、R3上均可以ping通直连接口,但是非直连接口全部ping失败
25 */

为什么所有直连能够ping通,但是非直连IP全部ping失败呢?这要从路由器中数据的流动来分析,当路由器从局域网
中收到一个帧时,在进入RAM之前,首先检查它的二层帧头,如果是发往本路由,则去掉二层帧头;在RAM里,路由
检测第三层报头信息,同时搜索路由表匹配包头信息中的地址应该怎么转发。

当R1上ping 12.1.1.2时,R1检查自己的路由表,发现应该将数据从s0/0发出(12.1.1.0 is directly connected,


Serial0/0)R1和R2之间是串行点对点线路,R2收到这个ping(Echo request)包后,知道是12.1.1.1发来的,同时查
询自己的路由表,也找到了直连的路由条目,所以它将ping的应答包从自己的s0/1接口发回去,这样R1 ping R2成
功。

而当R1 ping 2.2.2.2时,R1查询自己的路由表,发现里面根本没有去往2.2.2.2的路由条目,所以R1丢


弃ping包,ping失败。

* 静态路由

可以通过手动添加静态路由的方法让R1、R2、R3相互之间能够ping通非直连网段,分别在R1、R2、R3上添加下面的
静态路由条目:

1 /*
2 * 静态路由添加命令格式
3 * administrative_distance是管理距离(可选)
4 * permanent是一个关键字参数,如果添加这个关键字参数,
5 * 代表路由器接口关闭或者下一跳路由丢失时,这个静态路由条目也不会消失。
6 */
7 ip route 目标网络 掩码 下一跳路由器直连接口IP或本路由外出接口
administrative_distance permanent
8
9 /*第一种方法,使用下一跳路由直连接口IP作为静态路由目的地址*/
10
11 /*
12 * R1配置静态路由,
13 * 去往2.2.2.0/24网段的数据发往12.1.1.2
14 * 去往3.3.3.0/24的数据发往13.1.1.3
15 * 去往23.1.1.0/24的数据也发往13.1.1.3
16 */
17 R1(config)#ip route 2.2.2.0 255.255.255.0 12.1.1.2
18 R1(config)#ip route 3.3.3.0 255.255.255.0 13.1.1.3
19 R1(config)#ip route 23.1.1.0 255.255.255.0 13.1.1.3
20
21 /*R2配置静态路由*/
22 R2(config)#ip route 1.1.1.0 255.255.255.0 12.1.1.1
23 R2(config)#ip route 13.1.1.0 255.255.255.0 12.1.1.1
24 R2(config)#ip route 3.3.3.0 255.255.255.0 23.1.1.3
25
26 /*R3配置静态路由*/
27 R3(config)#ip route 1.1.1.0 255.255.255.0 13.1.1.1
28 R3(config)#ip route 12.1.1.0 255.255.255.0 12.1.1.1
29 R3(config)#ip route 2.2.2.0 255.255.255.0 23.1.1.2
30
31 /*这样配置完后,任何一台路由上都能ping通网络中的任意端口IP*/
32
33 /*第二种方法,使用本地路由外出接口*/
34 R1(config)#ip route 2.2.2.0 255.255.255.0 s0/0
35 R1(config)#ip route 3.3.3.0 255.255.255.0 fa1/0
36 R1(config)#ip route 23.1.1.0 255.255.255.0 fa1/0
37
38 R2(config)#ip route 1.1.1.0 255.255.255.0 s0/1
39 R2(config)#ip route 13.1.1.0 255.255.255.0 s0/1
40 R2(config)#ip route 3.3.3.0 255.255.255.0 s0/0
41
42 R3(config)#ip route 1.1.1.0 255.255.255.0 fa1/0
43 R3(config)#ip route 12.1.1.0 255.255.255.0 fa1/0
44 R3(config)#ip route 2.2.2.0 255.255.255.0 s0/1
45
46 /*这样配置后全网也能互相通信,只是稍微有一点不一样,R1和R3是使用以太网端口相连的,以太
网不同于点对点端口,以太网的封装是需要MAC地址的,在通信前需要先ARP获取目的MAC地址才能
封装帧*/

* 在静态路由设置中,接口是多路访问网络(以太网或帧中继等)使用”本路由外出接口”能够ping通目标的条件:

条件一:ARP请求的源IP和路由接口IP在同一个子网中。
条件二:路由器有ARP请求的IP地址的路由。

在上面的例子第二个方法中,R1上面设置去往R3的静态路由使用的是外出接口fa1/0,所以R3的fa1/0必须开启ARP
proxy,而且请求的源地址(13.1.1.1)与R3接收到的广播的接口IP(13.1.1.3)处于同一个子网,并且R3上面
有24.1.1.0/24以及3.3.3.0/24的路由,这样就满足了代理ARP执行的这两个条件。

* 在静态路由设置中,使用”下一跳路由器与本路由直连接口的IP”和使用”本路由外出接口”的区别:

区别一:使用下一跳路由器和本路由器相连的IP地址,默认的管理距离是1;使用本路由外出接口,管理距离默认是0。
区别二:下一跳使用本路由外出接口,这种用法仅能使用在点对点线路上(PPP或HDLC)。如果是以太网或帧中继网
络,建议指定下一跳路由器与本路由直连接口的IP地址。

我们来做一个实验就能明白为什么必须开启ARP proxy,使用上面的第二种方法添加静态路由,然后在R3的fa1/0接口
上关闭ARP proxy。清空R1 ARP缓存,再用R1去ping 3.3.3.3以及23.1.1.3和23.1.1.2,就会发现ping不通了。开
启R3的ARP代理,立刻就能ping通这三个地址了:
1 /*在使用外出接口添加静态路由条目后,R1的ARP缓存如下*/
2 R1#show arp
3 Protocol Address Age (min) Hardware Addr Type Interface
4 Internet 3.3.3.3 0 cc02.0ab4.0010 ARPA FastEthernet1/0
5 Internet 13.1.1.1 - cc00.0ab4.0010 ARPA FastEthernet1/0
6 Internet 13.1.1.3 83 cc02.0ab4.0010 ARPA FastEthernet1/0
7 Internet 23.1.1.2 0 cc02.0ab4.0010 ARPA FastEthernet1/0
8
9 /*关闭R3 fa1/0接口的ARP代理功能*/
10 R3(config)#int fa 1/0
11 R3(config-if)#no ip proxy-arp
12
13 /*清空R1 ARP缓存*/
14 R1#clear arp
15
16 /*此时再去ping 3.3.3.3以及任何23.1.1.0/24网段IP,都ping不通了*/

* 静态路由总汇

如图,在R2上面有三个回环接口IP如图,这时,在R1上需要设置三条静态路由,但为了减小路由表大小,也可以使
用一条路由汇总来代替。

1 /*可以不使用汇总,那么需要在R1上添加三条静态路由*/
2 R1(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.2
3 R1(config)#ip route 192.168.2.0 255.255.255.0 12.1.1.2
4 R1(config)#ip route 192.168.3.0 255.255.255.0 12.1.1.2
5
6 /*使用静态路由汇总*/
7 R1(config)#ip route 192.168.0.0 255.255.252.0 12.1.1.2

* 默认路由

删除R1、R2、R3上面的所有静态路由条目,使用默认路由代替它们:

1 /*R1 删除静态路由,使用默认路由,所有未知数据包发往12.1.1.2*/
2 R1(config)#no ip route 2.2.2.0 255.255.255.0 12.1.1.2
3 R1(config)#no ip route 3.3.3.0 255.255.255.0 13.1.1.3
4 R1(config)#no ip route 23.1.1.0 255.255.255.0 13.1.1.3
5 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
6
7 /*R2 所有未知数据包发往23.1.1.3*/
8 R2(config)#no ip route 1.1.1.0 255.255.255.0 12.1.1.1
9 R2(config)#no ip route 3.3.3.0 255.255.255.0 23.1.1.3
10 R2(config)#no ip route 13.1.1.0 255.255.255.0 23.1.1.3
11 R2(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.3
12
13 /*R3 所有未知数据包发往13.1.1.1*/
14 R3(config)#no ip route 1.1.1.0 255.255.255.0 13.1.1.1
15 R3(config)#no ip route 2.2.2.0 255.255.255.0 23.1.1.2
16 R3(config)#no ip route 12.1.1.0 255.255.255.0 12.1.1.1
17 R3(config)#ip route 0.0.0.0 0.0.0.0 13.1.1.1
18
19 /*
20 * 配置完成默认路由后全网均能够互相通信,
21 * 实际上这种默认路由的设置最容易形成路由环路,
22 * 如果数据目的地址在这个网络中不存在,
23 * R1将未知数据发往R2、而R2又发往R3、R3再发给R1,环路形成。
24 */
25
26 /*
27 * 可以使用traceroute来测试路由环路,traceroute一个不存在的IP地址,
28 * 可以看到,下面的实验结果,数据在重复的被R1-R2-R3循环传送,
29 * 因为Traceroute只追踪到TTL=30,所以到30跳就停止了。
30 * 那么如果换成ping会不会一直循环下去呢?
31 * 答案是,不会,因为网络层有一个TTL字段,最大255,
32 * 每经过一个路由TTL减一,直到TTL等于0,数据被丢弃。
33 */
34 R1#traceroute 6.6.6.6
35 1 12.1.1.2 72 msec 104 msec 32 msec
36 2 23.1.1.3 76 msec 92 msec 68 msec
37 3 13.1.1.1 72 msec 72 msec 80 msec
38 4 12.1.1.2 92 msec 128 msec 88 msec
39 5 23.1.1.3 112 msec 212 msec 80 msec
40 ........
41 30 13.1.1.1 73 msec 71 msec 112 msec

下面用高级ping命令来看看数据是走的什么路径达到的目的地:

1 R1#ping
2 Protocol [ip]:
3 Target IP address: 3.3.3.3 /*目的IP是R3上的回环接口*/
4 Repeat count [5]: 1 /*ping一次*/
5 Datagram size [100]:
6 Timeout in seconds [2]:
7 Extended commands [n]: y
8 Source address or interface: 1.1.1.1 /*用本地的1.1.1.1接口去ping*/
9 Type of service [0]:
10 Set DF bit in IP header? [no]:
11 Validate reply data? [no]:
12 Data pattern [0xABCD]:
13 /*记录每一台设备发起的IP地址,除此输入"r"项外,其他全部默认回车*/
14 Loose, Strict, Record, Timestamp, Verbose[none]: r
15 Number of hops [ 9 ]:
16 Loose, Strict, Record, Timestamp, Verbose[RV]:
17 Sweep range of sizes [n]:
18
19 Reply to request 0 (56 ms). Received packet has options
20 Total option bytes= 40, padded length=40
21 Record route:
22 (12.1.1.1) /*数据首先从本地s0/0发出*/
23 (23.1.1.2) /*再从R2的s0/1发出*/
24 (3.3.3.3) /*到达R3的回环接口*/
25 (13.1.1.3) /*R3再从fa1/0发回*/
26 (1.1.1.1) <*> /*回到R1*/
27 (0.0.0.0)
28 (0.0.0.0)
29 (0.0.0.0)
30 (0.0.0.0)
31 End of list

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十二]路由选路原则
发表于 2012 年 10 月 26 日 由 晴刃

这篇文章介绍一下当一个目标地址被多个目标网络覆盖、一个目标网络的多种路由协议的多条路径共存时,或当一个
目标网络同一种路由协议的多条路径共存时,路由器的转发规则。

___________________________________________
文章目录

[*1*].管理距离 AD(Administrative Distance)


[*2*].路由选路原则
子网掩码最长匹配
管理距离最小优先
度量值最小优先
[*3*].静态路由排错

___________________________________________

[*1*].管理距离 AD(Administrative Distance)

管理距离是用来提供路由可信度的一个参考值,管理距离越小,路由条目越可靠。这意味着,有较小管理距离的路由
条目将优先于较大的条目,管理距离的取值范围从0-255,0是最可信,255是最不可信,如果一台路由收到同一个网
络的两条路由更新,路由器将选择管理距离较小的那条,放入路由表。

各路由协议默认管理距离如下图:
[*2*].路由选路原则

1 ,子网掩码最长匹配

如果一个目标地址被多个网络目标覆盖,它将优先选择最长的子网掩码的路由。比如到达10.0.0.1网络有两条路由条
目:10.0.0.0/24下一跳是12.1.1.2,10.0.0.0/16的下一跳是13.1.1.3,因为第一条的子网掩码/24大于第二条的/16,所以
路由将数据发往12.1.1.2。而如果路由上有发往10.0.1.1的数据,则选择10.0.0.0/16,因为10.0.1.1不包括
在10.0.0.0/24网络中。

2 ,管理距离最小优先

在子网掩码长度相同的情况下,路由器优先选择管理距离最小的路由条目。比如到达10.1.1.0/24路由有两条,一条是
通过RIP学习来的,管理距离是120,一条是通过OSPF学习到的,管理距离是110,那么路由器优先选择OSPF学习
到的路由条目放进自己的路由表中。

RIP和OSPF学习到的10.1.1.0/24的条目不会同时出现在路由表中,路由器只会保存最优路径,如果OSPF学习到的那
个条目消失,RIP学习到的路由条目才会出现在路由表中。请注意,这里必须强调的是,相同的路由条目
(RIP和OSPF同时报告了一个相同的子网,路由优先选择OSPF,因为在子网掩码长度相同的前提下,OSPF有更小
的管理距离)。

3 ,度量值最小优先

如果路由的子网掩码长度相等,管理距离也相等,接下来比较度量值,度量值最小的将进入路由表。比如路由器通
过RIP学习到了10.0.0.0/24的两个条目,一个条目的跳数(hop)是2,另一个的跳数是3,那么,路由器选择跳数是2的
那个条目放入路由表。
[*3*].静态路由排错

下图中,R1可以Ping通PC2,PC1却Ping不通PC2,所有设备IP配置正确,且接口都正常开启,请问是什么原因导致
了这种情况的发生?

原因分析:R1可以ping通PC2,说明R1上面添加了去往PC2网段的静态路由。而当PC1 Ping PC2时,数据到


达R1,R1添加了PC2所在网段的路由,所以他将数据发往R2,R2转发给PC2,数据成功到达,之
后,PC2对PC1的ping进行应答,应答数据被发往自己的网关R2,假如R2上面也存在PC1所在网段的静态路由,那
么R2将应答数据发给R1,R1再交给PC1,应答数据也成功到达,ping成功。现在的问题是ping不通,说明假设错
误,R2上面没有去往PC1所在网段的路由。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十三]RIPv1协议详解
发表于 2012 年 10 月 27 日 由 晴刃

这篇文章介绍经典路由协议RIPv1。结合实例,详细介绍RIPv1的特征、配置。

___________________________________________
文章目录

[*1*].RIP主要特征
[*2*].RIP路由互相学习过程解析
[*3*].RIP定时器
[*4*].RIP路由环路形成解析
[*5*].距离矢量路由环路的解决方法
[*6*]RIPv1配置实例
负载均衡
查看路由协议
debug ip rip
水平分隔
被动接口配置
单播更新实例
触发更新
缺省路由
浮动静态路由
更改定时器

___________________________________________

[*1*].RIP主要特征

RIP(Routing Information Protocol,路由信息协议),是早期应用比较普遍的内部网关协议,是典型的距离矢量路由


协议,适用于小型网络,最大的毛病是无法在具有冗余链路的网络中有效的运用。

RIP协议的默认管理距离是120,RIP所接收的路由信息都被封装在UDP协议的数据报中,在UDP的520端口接收来自
远程路由的信息。

RIP使用Hop Count(跳计数)作为路径选择的度量值。最大跳数是15,如果最大跳数大于15,则认为该网络失
效。RIPv1采用广播式更新,RIPv2采用组播更新方式,RIP默认每隔30秒周期性的发送整个路由表给邻路由。

[*2*].RIP路由互相学习过程解析
RIP协议运行前R1、R2、R3的路由表中只有直连路由的信息,如下图:

1,运行RIP路由协议,R1、R2、R3宣告各自直连网络

2,假设R1先发送路由更新,R1将自己直连网络10.1.0.0和10.2.0.0以1跳的度量值告诉R2。

3,R2收到R1的路由表后,将自己的路由与R1传过来的路由进行比较,R2发现自己的路由表中没有10.1.0.0,R2记
下这条路由以及路由对应的接口和跳数1;并且R2发现自己的路由表中已经有10.2.0.0这个条目,而且是直连条目,
直连路由的管理距离是0,学到的RIP路由的管理距离是120,所以R2忽略R1传过来的10.2.0.0这个条目。

4,R2把自己路由表中的直连网络10.2.0.0和10.3.0.0以1跳的度量值告诉R3;并且将从R1那里学到的10.1.0.0网络
以2跳的度量值告诉R3。

5,R3收到R2发过来的路由条目,将自己的路由表和R2发过来的条目进行比较,R3发现自己路由表中没
有10.1.0.0,R3记录下这条路由以及对应端口和跳数2;R3发现自己路由表中没有10.2.0.0,R3记录下这条路由和对
应端口以及跳数1;R3发现自己的路由表中已经存在10.3.0.0,并且是直连,比R2发过来的RIP更新有刚好的度量
值,R3忽略R2发来的10.3.0.0。这样R3学到了完整的路由条目。

6,类似,R3也会将路由发给R2,R2再发给R1,最后所有路由都可以学到所有条目。

运行RIP后各路由上的路由表如下图:
[*3*].RIP定时器

在运行了RIP协议的路由上查看RIP定时器的情况:

1 R1#show ip protocols /*显示路由器运行了那些协议以及协议详细信息*/


2 Routing Protocol is "rip"
3 Outgoing update filter list for all interfaces is not set
4 Incoming update filter list for all interfaces is not set
5 Sending updates every 30 seconds, next due in 0 seconds
6 Invalid after 180 seconds, hold down 180, flushed after 240
7
8 /*
9 * 可以看到RIP有4种不同类型的定时器:
10 *
11 * 路由更新定时器"Sending updates every 30 seconds",
12 * 默认每隔30秒将自己的路由信息完整的拷贝给邻居。
13 *
14 * 路由失效定时器"Invalid after 180 seconds",
15 * 默认180秒,如果路由在这个期间没有收到某个路由的更新,
16 * 它认为这个路由失效,这一情况发生时,
17 * 路由器将给所有相邻路由发送一个更新消息,通知他们这个路由已经失效。
18 *
19 * 抑制定时器(holddown time),"hold down 180",
20 * 当收到指示某个路由不可达的更新数据包时,路由器将进入“抑制时间”
21 * 抑制定时器默认180秒。
22 *
23 * 路由刷新定时器"flushed after 240",
24 * 用于设置某个路由成为无效路由并将它从路由表中删除的时间间隔。
25 * 路由失效定时器必须小于路由刷新定时器,
26 * 这样可以为路由提供足够的时间来通知它的相邻路由有关这一无效路由的情况。
27 */

在不考虑使用任何防止距离矢量协议路由选择环路的情况下,可以这样来理解上面的四种定时器。结合下图,默认情况
下,网络中的路由30秒发送一次RIP路由更新,如果此时R1上面的“网路1”失效,R1发往R2的路由更新中不再含有“网
路1”,R2上的路由失效定时器、路由抑制定时器、路由刷新定时器同时开启,连续6个更新周期(180秒)后,R2都
没有收到R1发过来的“网路1”的路由更新,R2认为“网路1”失效,这里用到的就是路由失效定时器(倒计时180秒)。
在R2认为“网路1”失效以前(180秒内),如果R2收到发往“网路1”的数据,R2任然转发数据给R1。在R2认为“网
路1”失效的前的这180秒中,“网路1”在R2上处于抑制状态。在接下来的60秒中(240-180,也就是R2认为“网路1”失
效后),R2认为“网路1”可能down掉了,并且不再转发去往“网路1”的数据给R1。

(图三)

[*4*].RIP路由环路形成解析

在上图中,R1将网络1的路由信息发给R2,R2学到了网络1并将度量值标记为1跳,即经过一台路由可以到达,下一
跳是R1;路由R2将网络1的路由信息发给R3和R5,R3和R5都学到了网络1,并将度量值标记为2跳,即经过两台路
由可以到达,下一跳是路由R2;R3和R5都将网络1发给R4,R4也学到网络1,并将度量值标记为3跳,下一跳路由
是R3或R5,即从两台路由都能到达,R4去往网络1的数据将负载均衡。此时所有的路由都拥有一致的认识和正确的
路由表,这时网络被称作”已收敛”。此时,当网络1断开,R1将网络1不可达的信息发送给R2,R2将网络1不可达的信
息发送给R3和R5,此时R4还不知道网络1不可达的信息,就在这个时候R4发送了一个更新给R5,认为通过R3可以
到达网络1。当然也可能是发送给R3,告诉它通过R5可以到达网络1。这里假设是第一种情况,R5收到通过R4可以到
达网络1的更新后,更新自己的路由表,并将网络1可达的信息发送给了R2,R2更新自己的路由表并发送
给R3和R1。R3更新自己的路由表并发送给R4,此时,路由环路形成。

[*5*].距离矢量路由环路的解决方法

距离矢量路由环路的解决方法有如下五种:

1,最大跳计数(maximum metric),RIP允许跳计数最大可以达到15,任何需要经过16跳才能到达的网络都被认为是不
可达的。

2,水平分隔(split horizon),(使用图3举例)限制路由器不能按照接收信息的方向去将接收到的信息再发回去。比如
路由R3和R5有关网络1的信息是从R2学习到的,它们不会将网络1的信息再从与R2相连的接口发回去。这样R4最终
会学习到网络1不可达的信息。

3,路由中毒(route poisconing),路由中毒通过将故障网络设置成最大跳计数加1来暗示网络不可达,毒性反转是
避免环路的另一种方法,比如R2学习到R1发送过来的网络1不可达的信息,首先它将网络1的跳计数更改成16跳,并
且根据毒性反转,它将向R1送回一条网络1不可达的更新。

4,触发更新(triggered update),周期性发送更新,RIP是默认每隔30秒。

5,抑制定时器(holddown time),(使用图3举例)比如R2收到了R1发来的网络1不可达的信息后,R2首先标记此
网络不可达,同时R2的抑制定时器启动,在RIP中抑制定时器是180秒倒计时,如果在抑制定时器到期前,又从R1收
到网络1可达的信息了,那么删除这个抑制定时器,并且标记网络1可达;如果在抑制定时器期满前,收到一个来自其
他路由的(R3或者R4)关于网络1的更新,并且这个更新具有更好的度量值(假设以前学到的是3跳,这里有其他路
由告诉它只需要1跳就能到达网络1),那么R2删除抑制定时器,并且标记网络1可达;如果在抑制定时器到期
前,R2收到另外路由器发来的关于网络1的更新,并且具有更差的度量值,那么忽略此更新;在抑制定时器期满
后,R2删除抑制定时器,接收来自任何源路由的关于网络1的更新。

[*6*]RIPv1配置实例

使用RIPv1来配置下图:

R1配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 R1(config)#no cdp run /*关闭以太网双工不匹配提示*/
5 R1(config)#int s 0/0
6 R1(config-if)#ip add 12.1.1.1 255.255.255.0
7 R1(config-if)#no shut
8 R1(config-if)#int fa 1/0
9 R1(config-if)#ip add 13.1.1.1 255.255.255.0
10 R1(config-if)#no shut
11 R1(config-if)#int lo 0
12 R1(config-if)#ip add 1.1.1.1 255.255.255.0
13 R1(config-if)#no shut
14 R1(config-if)#exit
15 R1(config)#router rip /*配置RIPv1协议*/
16 R1(config-router)#net 1.0.0.0 /*宣告直连主类网络*/
17 R1(config-router)#net 12.0.0.0
18 R1(config-router)#net 13.0.0.0
19 R1(config-router)#end
20 R1#

R2配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R2
4 R2(config)#int s 0/1
5 R2(config-if)#ip add 12.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int s 0/0
8 R2(config-if)#ip add 23.1.1.2 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#int lo 0
11 R2(config-if)#ip add 2.2.2.2 255.255.255.0
12 R2(config-if)#no shut
13 R2(config-if)#router rip
14 R2(config-router)#net 2.0.0.0 /*宣告直连主类网络*/
15 R2(config-router)#net 12.0.0.0
16 R2(config-router)#net 23.0.0.0
17 R2(config-router)#end
18 R2#

R3配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R3
4 R3(config)#no cdp run
5 R3(config)#int fa 1/0
6 R3(config-if)#ip add 13.1.1.3 255.255.255.0
7 R3(config-if)#no shut
8 R3(config-if)#int s 0/1
9 R3(config-if)#ip add 23.1.1.3 255.255.255.0
10 R3(config-if)#no shut
11 R3(config-if)#int lo 0
12 R3(config-if)#ip add 3.3.3.3 255.255.255.0
13 R3(config-if)#no shut
14 R3(config)#router rip
15 R3(config-router)#net 3.0.0.0
16 R3(config-router)#net 23.0.0.0
17 R3(config-router)#net 13.0.0.0
18 R3(config-router)#end
19 R3#

配置完成后名查看一下路由表信息:

1 /*查看R1的路由表*/
2 R1#show ip route
3
4 1.0.0.0/24 is subnetted, 1 subnets
5 C 1.1.1.0 is directly connected, Loopback0
6 R 2.0.0.0/8 [120/1] via 12.1.1.2, 00:00:11, Serial0/0
7 R 3.0.0.0/8 [120/1] via 13.1.1.3, 00:00:07, FastEthernet1/0
8 R 23.0.0.0/8 [120/1] via 13.1.1.3, 00:00:07, FastEthernet1/0
9 [120/1] via 12.1.1.2, 00:00:11, Serial0/0
10 12.0.0.0/24 is subnetted, 1 subnets
11 C 12.1.1.0 is directly connected, Serial0/0
12 13.0.0.0/24 is subnetted, 1 subnets
13 C 13.1.1.0 is directly connected, FastEthernet1/0
14
15 /*
16 * 可以看到R1拥有全网6条路由信息,其中3条是直连(C),3条是通过RIP学习到的(R)
17 * 路由表中,C表示直连路由条目;R表示通过RIP学习到的路由,
18 * D表示通过EIGRP学习到的路由条目,O表示通过OSPF学习到的路由条目。
19 * "2.0.0.0/8 [120/1] via 12.1.1.2, 00:00:11, Serial0/0"解释如下:
20 * "2.0.0.0/8"是学到的远程网络,[120/1]是管理距离120和度量值1(跳),
21 * "via 12.1.1.2"代表去往2.0.0.0/8网络的下一跳是12.1.1.2,
22 * "Serial0/0"是本路由去往2.0.0.0/8网络的外出接口。
23 */

断开R1和R2之间的链路,等网络再次收敛后查看R1的路由表:

1 R1(config)#int s 0/0
2 R1(config-if)#shut /*关闭R1的s0/0接口*/
3
4 /*
5 * 网络收敛后查看R1路由表
6 * 可以看到去往"2.0.0.0/8"网络的路由条目发生了变化,
7 * 它的下一跳变成了"via 13.1.1.3",并且跳数变成了2.
8 */
9 R1#show ip route
10
11 1.0.0.0/24 is subnetted, 1 subnets
12 C 1.1.1.0 is directly connected, Loopback0
13 R 2.0.0.0/8 [120/2] via 13.1.1.3, 00:00:12, FastEthernet1/0
14 R 3.0.0.0/8 [120/1] via 13.1.1.3, 00:00:12, FastEthernet1/0
15 R 23.0.0.0/8 [120/1] via 13.1.1.3, 00:00:12, FastEthernet1/0
16 13.0.0.0/24 is subnetted, 1 subnets
17 C 13.1.1.0 is directly connected, FastEthernet1/0

重新打开R1的s0/0接口,继续下面的实验。

* 负载均衡

从R1的路由表输出可以看到,去往23.0.0.0/24的路径有两条:

1 R 23.0.0.0/8 [120/1] via 13.1.1.3, 00:00:07, FastEthernet1/0


2 [120/1] via 12.1.1.2, 00:00:11, Serial0/0

R1去往23.0.0.0/8网络的数据将被负载到这两条线路上,可以看出RIP不考虑线路带宽,仅考虑度量值,在本例
中R1和R3之间的以太网线路速率为100Mb/s,而R1和R2之间的串行线路速率仅仅只有1.544Mb/s,RIP默认支持四
条线路的负载均衡,可以使用下面的命令更改最大负载均衡线路数:

1 R1(config)#router rip
2 R1(config-router)#max
3 R1(config-router)#maximum-paths ?
4 Number of paths
5 /*可以通过?查看最大支持多少条线路的负载均衡*/
6 R1(config-router)#maximum-paths 16 /*更改成最大支持16条线路负载均衡*/
7 R1(config-router)#end
8 R1#

现在来测试一下负载均衡是否被使用:

1 /*开启ICMP调试*/
2 R1#debug ip icmp
3 ICMP packet debugging is on
4
5 /*测试ping*/
6 R1#ping 23.1.1.2
7
8 Type escape sequence to abort.
9 Sending 5, 100-byte ICMP Echos to 23.1.1.2, timeout is 2 seconds:
10 !!!!!
11 Success rate is 100 percent (5/5), round-trip min/avg/max = 16/53/80 ms
12 /*从下面的信息看出,去往23.1.1.2的数据全部是从R3走的,并没有负载到两条线路上*/
13 *Mar 1 00:32:01.583: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
14 *Mar 1 00:32:01.663: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
15 *Mar 1 00:32:01.679: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
16 *Mar 1 00:32:01.755: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
17 *Mar 1 00:32:01.787: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
18 R1#

上面的测试中,之所以没有将数据负载到两条线路中,是因为思科的IOS软件提供了两种负载均衡的方式:
第一:基于每个分组的负载均衡,称作进程交换。
第二:基于每个目的的负载均衡,称作快速交换。
而IOS默认使用快速交换,如果使用进程交换,IOS将会将交替使用每条线路,下面关闭快速交换,使用进程交换:

1 R1(config)#no ip cef /*关闭快速交换*/


2 R1(config)#end
3
4 /*再次进行ping测试*/
5 R1#ping 23.1.1.2
6
7 Type escape sequence to abort.
8 Sending 5, 100-byte ICMP Echos to 23.1.1.2, timeout is 2 seconds:
9 !!!!!
10 Success rate is 100 percent (5/5), round-trip min/avg/max = 32/48/88 ms
11 R1#
12 *Mar 1 00:37:53.147: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
13 *Mar 1 00:37:53.179: ICMP: echo reply rcvd, src 23.1.1.2, dst 12.1.1.1
14 *Mar 1 00:37:53.223: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
15 *Mar 1 00:37:53.271: ICMP: echo reply rcvd, src 23.1.1.2, dst 12.1.1.1
16 *Mar 1 00:37:53.303: ICMP: echo reply rcvd, src 23.1.1.2, dst 13.1.1.1
17 /*从上面的结果可以看出,数据被均匀的分担到了不同的线路上*/

* 查看路由协议

在R1上使用”show ip protocols”查看R1上运行的路由协议:

1 R1#show ip protocols
2
3 /*显示运行的协议类型*/
4 Routing Protocol is "rip"
5 /*进入和外出方向有没有使用过滤列表*/
6 Outgoing update filter list for all interfaces is not set
7 Incoming update filter list for all interfaces is not set
8 /*RIP定时器的值*/
9 Sending updates every 30 seconds, next due in 16 seconds
10 Invalid after 180 seconds, hold down 180, flushed after 240
11 /*重分布只有RIP,说明这里只接受和发送RIP协议*/
12 Redistributing: rip
13 /*当前运行的是RIPv1,发送版本1,接收版本1和2的更新*/
14 Default version control: send version 1, receive any version
15 Interface Send Recv Triggered RIP Key-chain
16 Serial0/0 1 1 2
17 FastEthernet1/0 1 1 2
18 Loopback0 1 1 2
19 /*路由自动总汇是起作用的*/
20 Automatic network summarization is in effect
21 /*负载均衡设置,默认是4,刚才调整成了16*/
22 Maximum path: 16
23 /*本路由直连的有类网络信息*/
24 Routing for Networks:
25 1.0.0.0
26 12.0.0.0
27 13.0.0.0
28 /*RIP从哪些路由收到更新信息、路由下一跳、管理距离、收到最后一次更新的时间*/
29 Routing Information Sources:
30 Gateway Distance Last Update
31 13.1.1.3 120 00:00:16
32 12.1.1.2 120 00:00:19
33 Distance: (default is 120)

* DEBUG IP RIP

使用”debug ip rip”命令查看路由输出信息,可以看到路由收发RIP更新的情况:

1 R1#debug ip rip
2 RIP protocol debugging is on
3 R1#
4 *Mar 1 00:50:08.223: RIP: sending v1 update to 255.255.255.255 via Loopback0
(1.1.1.1)
5 *Mar 1 00:50:08.223: RIP: build update entries
6 *Mar 1 00:50:08.223: network 2.0.0.0 metric 2
7 *Mar 1 00:50:08.223: network 3.0.0.0 metric 2
8 *Mar 1 00:50:08.227: network 12.0.0.0 metric 1
9 *Mar 1 00:50:08.227: network 13.0.0.0 metric 1
10 *Mar 1 00:50:08.227: network 23.0.0.0 metric 2
11 R1#
12 *Mar 1 00:50:29.887: RIP: received v1 update from 13.1.1.3 on FastEthernet1/0
13 *Mar 1 00:50:29.887: 2.0.0.0 in 2 hops
14 *Mar 1 00:50:29.891: 3.0.0.0 in 1 hops
15 *Mar 1 00:50:29.891: 23.0.0.0 in 1 hops
16 R1#
17 *Mar 1 00:50:30.199: RIP: received v1 update from 12.1.1.2 on Serial0/0
18 *Mar 1 00:50:30.199: 2.0.0.0 in 1 hops
19 *Mar 1 00:50:30.203: 3.0.0.0 in 2 hops
20 *Mar 1 00:50:30.203: 23.0.0.0 in 1 hops
21 R1#
22 *Mar 1 00:50:33.115: RIP: sending v1 update to 255.255.255.255 via
FastEthernet1/0 (13.1.1.1)
23 *Mar 1 00:50:33.115: RIP: build update entries
24 *Mar 1 00:50:33.115: network 1.0.0.0 metric 1
25 *Mar 1 00:50:33.119: network 2.0.0.0 metric 2
26 *Mar 1 00:50:33.119: network 12.0.0.0 metric 1
27 R1#
28 *Mar 1 00:50:36.823: RIP: sending v1 update to 255.255.255.255 via Serial0/0
(12.1.1.1)
29 *Mar 1 00:50:36.823: RIP: build update entries
30 *Mar 1 00:50:36.823: network 1.0.0.0 metric 1
31 *Mar 1 00:50:36.827: network 3.0.0.0 metric 2
32 *Mar 1 00:50:36.827: network 13.0.0.0 metric 1
33
34 /*
35 * 从sending v1和received v1可以判断,路由运行的是RIPv1,
36 * update to 255.255.255.255说明RIPv1使用的是广播式更新,
37 * 并且从发送的网络更新中没有包含直连接口的路由以及对方发送过来的路由,可以判断,R1所
有接口都开启了水平分隔
38 * 默认路由接口的水平分隔是开启的,可以使用show ip interface查看。
39 * 从这些更新中同样可以看到,路由也向回环接口发送更新,
40 * 向回环接口发送更新没有什么实质意义,稍后介绍如何取消向回环接口发送更新。
41 */
42
43 /*关闭所有debug调试*/
44 R1#u all
45 All possible debugging has been turned off

* 水平分隔

查看某接口是否开启了水平分隔:

1 /*查看R1 s0/0接口是否开启水平分隔*/
2 R1#show ip interface s 0/0
3 ....
4 Split horizon is enabled
5 ....
6 /*可以看到输出中有这么一条,显示水平分隔已开启*/

关闭R1 s0/0接口的水平分隔,再使用debug ip rip查看发送更新情况:

1 R1(config)#int s 0/0
2 R1(config-if)#no ip split-horizon /*关闭水平分隔*/
3 R1(config-if)#exit
4 R1(config)#end
5
6 /*显示RIP调试信息*/
7 R1#debug ip rip
8 RIP protocol debugging is on
9 R1#
10 /*可以发现关闭这个接口的水平分隔后,它将发送整个路由表的条目*/
11 *Mar 1 01:06:54.363: RIP: sending v1 update to 255.255.255.255 via Serial0/0
(12.1.1.1)
12 *Mar 1 01:06:54.363: RIP: build update entries
13 *Mar 1 01:06:54.363: network 1.0.0.0 metric 1
14 *Mar 1 01:06:54.363: network 2.0.0.0 metric 2
15 *Mar 1 01:06:54.367: network 3.0.0.0 metric 2
16 *Mar 1 01:06:54.367: subnet 12.1.1.0 metric 1
17 *Mar 1 01:06:54.367: network 13.0.0.0 metric 1
18 *Mar 1 01:06:54.367: network 23.0.0.0 metric 2
19
20 /*关闭RIP调试输出*/
21 R1#undebug ip rip
22 RIP protocol debugging is off
23
24 /*再次查看s0/0接口信息,显示水平分隔已关闭*/
25 R1#show ip interface s 0/0
26 ....
27 Split horizon is disabled
28 ....
29
30 /*可以使用下面的命令再次打开它*/
31 R1(config)#int s 0/0
32 R1(config-if)#ip split-horizon

* 被动接口配置

从前面的Debug信息中可以看到RIP向回环接口发送了更新,这些更新都是没有意义的,可以使用下面的命令将回环
接口设置成被动接口,这样这个接口将不再向外发送路由更新:

1 R1(config)#router rip
2 R1(config-router)#passive-interface loopback 0
3 R1(config-router)#end
4 R1#

* 单播更新实例

在下图中,通过配置单播更新,实现路由R1可以和R2相互学习路由,但不与R3交换路由:

R1配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 R1(config)#int fa 0/0
5 R1(config-if)#ip add 123.1.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int lo 0
8 R1(config-if)#ip add 1.1.1.1 255.255.255.0
9 R1(config-if)#no shut
10 R1(config-if)#exit
11 R1(config)#router rip
12 R1(config-router)#net 123.0.0.0
13 R1(config-router)#net 1.0.0.0
14 R1(config-router)#passive-interface default /*将所有接口都设置成被动接口*/
15 R1(config-router)#neighbor 123.1.1.2 /*设置单播邻居IP*/
16 R1(config-router)#end
17 R1#

R2配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R2
4 R2(config)#int fa 0/0
5 R2(config-if)#ip add 123.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int lo 0
8 R2(config-if)#ip add 2.2.2.2 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#exit
11 R2(config)#router rip
12 R2(config-router)#net 123.0.0.0
13 R2(config-router)#net 2.0.0.0
14 R2(config-router)#passive-interface default
15 R2(config-router)#neighbor 123.1.1.1 /*指定R1为邻居*/
16 R2(config-router)#end
17 R2#

R3配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R3
4 R3(config)#int fa 0/0
5 R3(config-if)#ip add 123.1.1.3 255.255.255.0
6 R3(config-if)#no shut
7 R3(config-if)#int lo 0
8 R3(config-if)#ip add 3.3.3.3 255.255.255.0
9 R3(config-if)#no shut
10 R3(config-if)#router rip
11 R3(config-router)#net 3.0.0.0
12 R3(config-router)#net 123.0.0.0
13 R3(config-router)#passive-interface default
14 R3(config-router)#end
15 R3#
16 /*R3没有设置邻居*/

这时,使用show ip route分别查看R1、R2、R3上面的路由信息,发现R1和R2可以彼此学习到路由信息,R3学习不
到任何路由信息,也不向外发送任何路由信息。使用debug ip rip在R1和R2上可以查看到” sending v1 update to
123.1.1.2 “这样的单播更新包。

* 触发更新

距离矢量路由采用的是周期性更新,可以在串口上使用触发更新,以太网接口不支持触发更新:

1 R1(config)#int s 0/0
2 R1(config-if)#ip rip triggered

* 缺省路由

如下图所示,R1是公司内部路由,R2是公司边界路由,R3相当于ISP的边界路由。在公司内部运行了RIPv1协议。如
果公司内部有许多路由,为了访问Internet,需要在公司内部每台路由上面都做默认路由指向公司边界路由R2。其实
这里可以使用RIP缺省路由自动向公司内部路由宣告一条默认路由。然后在R2上做一条默认路由指向ISP的边界路
由R3即可。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#exit
5 R1(config)#router rip
6 R1(config-router)#net 12.0.0.0
7 R1(config-router)#end
8 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#net 12.0.0.0
9 /*声明R2是默认路由源,这样R2就会向其他RIP路由宣告自己是默认路由*/
10 R2(config-router)#default-information originate
11 R2(config-router)#exit
12 R2(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.3 /*默认静态路由向外指向R3*/
13 R2(config)#end
14 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int lo 0
5 R3(config-if)#ip add 3.3.3.3 255.255.255.0
6 R3(config-if)#no shut
7 R3(config-if)#exit
8 R3(config)#ip route 12.1.1.0 255.255.255.0 23.1.1.2
9 R3(config)#end
10 R3#

下面是R1的路由表:

1 R1#show ip route
2
3 Gateway of last resort is 12.1.1.2 to network 0.0.0.0
4
5 12.0.0.0/24 is subnetted, 1 subnets
6 C 12.1.1.0 is directly connected, Serial0/0
7 R* 0.0.0.0/0 [120/1] via 12.1.1.2, 00:00:25, Serial0/0
8
9 /*可以看到R1上面通过RIP学到了一条默认路由,指向R2*/

* 浮动静态路由

如下图所示,R1和R2使用快速以太网和串行线路相连,假如R1是公司总部路由,R2是分部路由,它们之间的快速以
太网线路想象成快速专线连接,而串行线路想象成普通慢速线路。R1和R2运行RIPv1协议,在没有出现故障前,总部
和分部使用专线通信,当专线发生故障时,要求自动切换到串行线路,并且保持总部和分部的数据通信正常。

R1配置:

1 R1(config)#int fa 1/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int s 0/0
5 R1(config-if)#ip add 21.1.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int lo 0
8 R1(config-if)#ip add 192.168.1.1 255.255.255.0
9 R1(config-if)#no shut
10 /*RIP仅宣告内部网络和专线,没有宣告串行慢速线路*/
11 R1(config-if)#router rip
12 R1(config-router)#net 192.168.1.0
13 R1(config-router)#net 12.0.0.0
14 R1(config-router)#exit
15 /*手动配置一条静态路由,使用串行线路到达R2,并且管理距离配置成130*/
16 R1(config)#ip route 192.168.2.0 255.255.255.0 21.1.1.2 130
17
18 /*这样,根据路由选路原则,子网掩码长度相同的前提下,RIP的管理距离是120,这条静态路由的
管理距离是130,所以,首先将RIP条目放入路由表,只有当去往192.168.2.0/24的RIP条目消失
后,这条静态路由才会进入路由表,这就是浮动静态路由*/

R2配置:

1 R2(config)#int fa 1/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/1
5 R2(config-if)#ip add 21.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int lo0
8 R2(config-if)#ip add 192.168.2.1 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#exit
11 R2(config)#router rip
12 R2(config-router)#net 192.168.2.0
13 R2(config-router)#net 12.0.0.0
14 R2(config-router)#exit
15 R2(config)#ip route 192.168.1.0 255.255.255.0 21.1.1.1 130
16 /*R2上也配置一条去往R1内部网络的静态路由指向R1的串口IP,管理距离是130*/

这个时候随便在哪个路由上查看路由表,都只能看到RIP学到的条目

1 R2#show ip route
2
3 21.0.0.0/24 is subnetted, 1 subnets
4 C 21.1.1.0 is directly connected, Serial0/1
5 12.0.0.0/24 is subnetted, 1 subnets
6 C 12.1.1.0 is directly connected, FastEthernet1/0
7 R 192.168.1.0/24 [120/1] via 12.1.1.1, 00:00:23, FastEthernet1/0
8 C 192.168.2.0/24 is directly connected, Loopback0
9
10 /*可以看到去往R1内部网络192.168.1.0/24是走的专线,即快速以太网*/

如果此时,我们关闭R2的fa1/0,再次查看路由表:

1 /*关闭fa 1/0*/
2 R2(config)#int fa 1/0
3 R2(config-if)#shut
4
5 /*可以看到管理距离是130的静态路由进入了路由表,并且下一跳是R1的串口IP*/
6 R2#show ip route
7
8 21.0.0.0/24 is subnetted, 1 subnets
9 C 21.1.1.0 is directly connected, Serial0/1
10 S 192.168.1.0/24 [130/0] via 21.1.1.1
11 C 192.168.2.0/24 is directly connected, Loopback0
12 R2#

在这个例子中因为GNS3模拟器的关系,需要关闭两端的fa1/0接口才能让双方通信成功,真实环境中只要关闭一端的
端口,另一端立即就会down掉了。

* 更改定时器

RIP的定时器是可以更改的,但一般不建议更改,更改方法如下:

1 /*
2 * 更改4个定时器的默认值
3 * timers basic updates invalid holddown flush
4 */
5 R2(config)#router rip
6 R2(config-router)#timers basic 20 120 120 180
7 R2(config-router)#end
8
9 /*查看更改后的值*/
10 R2#show ip protocols
11 Routing Protocol is "rip"
12 Outgoing update filter list for all interfaces is not set
13 Incoming update filter list for all interfaces is not set
14 Sending updates every 20 seconds, next due in 5 seconds
15 Invalid after 120 seconds, hold down 120, flushed after 180

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十四]RIPv1协议缺陷详解
发表于 2012 年 10 月 30 日 由 晴刃

这篇文章首先介绍一下VLSM(Variable Length Subnet Masking,变长子网掩码)技术以及CIDR(Classless Inter-


Domain Routing,无类域间路由)技术,之后将讨论RIPv1的不足。

___________________________________________

文章目录

[*1*].VLSM实例
VLSM适用协议
[*2*].借用IP地址(ip unnumbered)
[*3*].CIDR浅析
[*4*].RIPv1的局限性
不支持不连续子网演示
什么是主类网络的边界
不支持VLSM
RIPv1局限总结

___________________________________________

[*1*].VLSM实例

传统的A/B/C类网络,使用固定长度的子网掩码。VLSM允许在同一个网络地址空间中使用多个子网掩码,可以对子网
再进行子网划分。

实例: 假设一个公司申请到一个C类网络地址201.1.1.0/24,该公司一共5个部门,其中A部门100台计算机,B部
门50台计算机其他3个部门各有10台计算机,为了安全,需要将各部门分在不同的子网里面,如何划分子网?

这个实例,用前面介绍过的固定的子网长度划分办法就就行不通了,所以要用到VLSM,下面来看看如何使用VLSM:

1,首先,申请到的C类地址前24位是固定的,公司只能变动后8位来满足自身需求。先看A部门,为了满足第一个子网
中容纳100台计算机,该子网主机位至少满足7位(2^7-2=126),可以从8位中借出1位作为子网位,可以划分出2个子
网,0和1:

第一个子网:
201.1.1.0/25 (0=0 0000000)——201.1.1.127/25 (127=0 1111111)
这个子网可以提供给A部门,它可以容纳125台计算机(排除网关),其中子网网络号是201.1.1.0/25,这个子网的广
播地址是201.1.1.127,假设201.1.1.1/25分配给这个子网的网关,那么可用地址范围就是201.1.1.2/25-
201.1.1.126/25。
第二个子网:
201.1.1.128/25 (1 0000000)
这个子网用来继续划分子网。

2,在201.1.1.128/25子网中,还剩下7位可以变动,要划分出一个子网,满足部门B的50台计算机,50台计算机,意味
着主机位必须有6位(2^6-2=62),所以继续将这个子网再划分成两个子网:

第一个子网:
201.1.1.128/26 (128=1 0 000000)——201.1.1.191/26 (191=1 0 111111)
这个子网分配给B部门使用,可容纳61台计算机,子网网关是201.1.1.129,子网网络号是201.1.1.128,子网广播
是201.1.1.191.可用IP范围是201.1.1.130-201.1.1.190。

第二个子网:
201.1.1.192/26 (1 1 000000)
这个子网用来继续划分子网。

3,接下来的三个部门中都只有10台计算机,最少需要占用4位主机位(2^4-2=14),剩下来的子网201.1.1.128/26 (1
1 000000)中,前两位已经分配出去了,只有后面6位可以变动,这6位中的前面两位可以作为子网位,后面4位可以作
为主机位,刚好满足三个部门,每部门各有10台计算机的要求,可以分配出4个子网:

201.1.1.192/28 (1 1 00 0000)——201.1.1.207/28 (1 1 00 1111)


201.1.1.208/28 (1 1 01 0000)——201.1.1.223/28 (1 1 01 1111)
201.1.1.224/28 (1 1 10 0000)——201.1.1.239/28 (1 1 10 1111)
201.1.1.240/28 (1 1 11 0000)——201.1.1.255/28 (1 1 11 1111)

其中前面三个子网可以分配给剩下的三个部门,最后一个子网可以留来备用。5个部门,使用3种子网掩码长度,这就
是VLSM的应用。

* VLSM适用协议

VLSM虽然可以节约IP地址,但是得根据不同的协议。RIPv1和IGRP是有类路由协议,无法支持VLSM。静态路
由、RIPv2、EIGRP、OSPF、IS-IS以及BGP都是无类路由协议,都支持VLSM。后面会演示到RIPv1这一缺陷。

[*2*].借用IP地址(ip unnumbered)

在如下图所示的网络中,R1和R2的串行接口(s0/0、s0/1)上必须配置IP地址,才能实现通信。可这两个地址除用来通
信外再没有其他用途,为了节约IP地址,借用IP地址技术诞生了,R1和R2可以借用其他接口的IP地址,在下面的图
中,R1可以借用自己的192.168.1.0/24网段的IP地址,而R2可以借用自己192.168.2.0/24网段的IP地址,但前提是,
需要分贝在R1、R2上配置到对端去的静态路由,借用IP地址配置如下:
R1配置:

1 Router>en
2 Router#conf t
3 Router(config)#host R1
4 R1(config)#int lo 0 /*配置一个回环接口来模拟路由其他接口*/
5 R1(config-if)#ip add 192.168.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int s 0/0
8 R1(config-if)#ip unnumbered lo 0 /*借用这个回环接口的IP*/
9 R1(config-if)#no shut
10 R1(config-if)#exit
11 R1(config)#ip route 192.168.2.0 255.255.255.0 s 0/0 /*设置去往R2的静态路由*/
12 R1(config)#end
13 R1#

R2配置:

1 Router#conf t
2 Router(config)#host R2
3 R2(config)#int lo 0
4 R2(config-if)#ip add 192.168.2.1 255.255.255.0
5 R2(config-if)#no shut
6 R2(config-if)#int s 0/1
7 R2(config-if)#ip unnumbered lo 0
8 R2(config-if)#no shut
9 R2(config-if)#exit
10 R2(config)#ip route 192.168.1.0 255.255.255.0 s 0/1
11 R2(config)#end
12 R2#

查看R1的接口IP和状态:

1 /*查看R1路由表,可以看到静态路由*/
2 R1#show ip route
3
4 C 192.168.1.0/24 is directly connected, Loopback0
5 S 192.168.2.0/24 is directly connected, Serial0/0
6
7 /*查看R1接口IP和状态,可以看到s0/0借用了lo0的IP地址*/
8 R1#show ip interface brief
9 Interface IP-Address OK? Method Status
Protocol
10 Serial0/0 192.168.1.1 YES TFTP up up
11 Serial0/1 unassigned YES unset administratively down down
12 Serial0/2 unassigned YES unset administratively down down
13 Serial0/3 unassigned YES unset administratively down down
14 Loopback0 192.168.1.1 YES manual up up

这样R1、R2的串行接口没有占用多余的IP地址,也同样实现了互连。

[*3*].CIDR浅析

CIDR(Classless Inter-Domain Routing,无类域间路由)。在一个有类别的系统中,路由器决定了一个地址的类


别,并根据该类别识别网络和主机。而在CIDR中,路由器使用前缀来描述有多少位是网络位,剩下的则是主机位。表
示前缀的数字跟在地址的结尾,用斜杠(“/”)来表示,比如:192.168.1.0/30,这里的”/30″就是前缀,一个地址不再受完整
的8位组的限制,比如A类地址的网络位是8位,B是16位,C是24位。CIDR的设计提高了IPv4的可扩展性。

[*4*].RIPv1的局限性

* RIPV1 不支持不连续子网演示

使用RIPv1完成下图配置

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo 0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.128
6 R1(config-if)#no shut
7 R1(config-if)#router rip
8 R1(config-router)#net 192.168.1.0 /*宣告主类网络*/
9 R1(config-router)#net 12.0.0.0
10 R1(config-router)#end
11 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#net 12.0.0.0
9 R2(config-router)#net 23.0.0.0
10 R2(config-router)#end
11 R2#
R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int lo 0
5 R3(config-if)#ip add 192.168.1.129 255.255.255.128
6 R3(config-if)#no shut
7 R3(config-if)#router rip
8 R3(config-router)#net 192.168.1.0
9 R3(config-router)#net 23.0.0.0
10 R3(config-router)#end
11 R3#

配置完成后在R2上测试网络连通性:

1 /*ping R1回环接口*/
2 R2#ping 192.168.1.1
3
4 Type escape sequence to abort.
5 Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
6 U.U.U
7 Success rate is 0 percent (0/5)
8
9 /*ping R2回环接口*/
10 R2#ping 192.168.1.129
11
12 Type escape sequence to abort.
13 Sending 5, 100-byte ICMP Echos to 192.168.1.129, timeout is 2 seconds:
14 U.U.U
15 Success rate is 0 percent (0/5)
16
17 /*
18 * 可以看到这里两个都Ping不通,这可能是GNS3模拟器的原因,
19 * 实际情况是,其中一个能ping通,而另外一个ping不通。
20 */
21
22 /*查看一下R2的路由表*/
23 R2#show ip route
24
25 23.0.0.0/24 is subnetted, 1 subnets
26 C 23.1.1.0 is directly connected, Serial0/0
27 12.0.0.0/24 is subnetted, 1 subnets
28 C 12.1.1.0 is directly connected, Serial0/1
29 R 192.168.1.0/24 [120/1] via 23.1.1.3, 00:00:05, Serial0/0
30 [120/1] via 12.1.1.1, 00:00:05, Serial0/1
31 R2#
32
33 /*
34 * 从R2的路由表输出中,我们发现去往192.168.1.0/24网络有两个下一跳
35 * 分别指向了R1和R2,我们知道Cisco IOS使用的是快速交换,
36 * 我们将它替换成进程交换来继续测试Ping
37 */
38
39 /*关闭快速交换,使用进程交换*/
40 R2(config)#no ip cef
41
42 /*再次测试ping*/
43 R2#ping 192.168.1.1
44
45 Type escape sequence to abort.
46 Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
47 !U!.!
48 Success rate is 60 percent (3/5), round-trip min/avg/max = 32/41/48 ms
49
50 R2#ping 192.168.1.129
51
52 Type escape sequence to abort.
53 Sending 5, 100-byte ICMP Echos to 192.168.1.129, timeout is 2 seconds:
54 !U!.!
55 Success rate is 60 percent (3/5), round-trip min/avg/max = 24/46/60 ms
56 R2#
57
58 /*这次我们看到了正确的情况,就是数据包一个通,一个不通*/

出现这种情况的原因是因为RIPv1协议是一个有类路由协议,自动在主类网络的边界汇总,而这种汇总是无法关闭
的。

可以通过在R1和R3上调试rip进程,查看输出来看到这一汇总过程:

1 /*R1的部分RIPv1调试输出*/
2 R1#debug ip rip
3 RIP protocol debugging is on
4 R1# /*发送*/
5 *Mar 1 00:19:08.931: RIP: sending v1 update to 255.255.255.255 via Serial0/0
(12.1.1.1)
6 *Mar 1 00:19:08.931: RIP: build update entries
7 *Mar 1 00:19:08.931: network 192.168.1.0 metric 1
8 R1# /*接收*/
9 *Mar 1 00:20:58.375: RIP: received v1 update from 12.1.1.2 on Serial0/0
10 *Mar 1 00:20:58.375: 23.0.0.0 in 1 hops
11
12 /*R3的部分RIPv1调试输出*/
13
14 R3#debug ip rip
15 RIP protocol debugging is on
16 R3# /*发送*/
17 *Mar 1 00:22:49.671: RIP: sending v1 update to 255.255.255.255 via Serial0/1
(23.1.1.3)
18 *Mar 1 00:22:49.671: RIP: build update entries
19 *Mar 1 00:22:49.671: network 192.168.1.0 metric 1
20 R3# /*接收*/
21 *Mar 1 00:22:56.959: RIP: received v1 update from 23.1.1.2 on Serial0/1
22 *Mar 1 00:22:56.959: 12.0.0.0 in 1 hops

从上面两段调试中可以看出,R2将自己的直连网络12.1.1.0/24汇总成主类网络12.0.0.0向R3发送,同样
将23.1.1.0/24汇总成主类网络23.0.0.0发给R1。而R2没有将R1发过来的192.168.1.0发给R3的原因是因为R3也将自
己的192.168.1.129/25汇总成了192.168.1.0/24,并且发送给了R2,因为水平分隔,R2不会再将相同的网络发回去
给R3。而就算关闭了水平分隔,R2将192.168.1.0发给R3,因为RIPv1是有类路由协议,既然R3已经有相同主类网络
的直连路由了,它不会学习RIP通告过来的这个主类网络。

* 什么是主类网络的边界
那么,什么是主类网络的边界?主类网络的边界就是,当路由器从一个接口向外发送更新包时,如果要传送的更
新IP与这个路由外出接口的IP所在的主类网络号不同,路由就将要传送的更新IP汇总成主类网络再发送出去,如果要传
送更新IP和传输它的外出接口的IP主类网络号相同,则不汇总。

比如R1的s0/0 IP是12.1.1.1/24主类网络属于12.0.0.0/8(因为12属于A类网络),而此时这个接口要传输自己
的lo0的IP(192.168.1.1/25)给R2,这个要传输的更新IP的主类网络是属于192.168.1.0/24(因为192属于C类网
络),这个时候R1在主类网络边界,也就是自己的s0/0接口处,将lo0的IP汇总成它的主类网络IP即192.168.1.0/24,然
后发送给R2。

上面说到了主类网络号不同的情况,下面来看看主类网络号相同的一个实例:

下图为一个连续的子网掩码长度相同、主类网络也相同的网络。

R1配置:

1 R1(config)#int lo 0
2 R1(config-if)#ip add 192.168.1.1 255.255.255.192
3 R1(config-if)#no shut
4 R1(config-if)#int s 0/0
5 R1(config-if)#ip add 192.168.1.65 255.255.255.192
6 R1(config-if)#no shut
7 R1(config-if)#router rip
8 R1(config-router)#net 192.168.1.0
9 R1(config-router)#end
10 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 192.168.1.66 255.255.255.192
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 192.168.1.129 255.255.255.192
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#net 192.168.1.0
9 R2(config-router)#end
10 R2#

配置完成后,再次使用调试命令调试RIP:
1 R1#debug ip rip
2 RIP protocol debugging is on
3 R1#
4 *Mar 1 00:14:15.575: RIP: sending v1 update to 255.255.255.255 via Serial0/0
(192.168.1.65)
5 *Mar 1 00:14:15.575: RIP: build update entries
6 *Mar 1 00:14:15.575: subnet 192.168.1.0 metric 1
7 R1#
8 *Mar 1 00:14:27.435: RIP: received v1 update from 192.168.1.66 on Serial0/0
9 *Mar 1 00:14:27.435: 192.168.1.128 in 1 hops
10 R1#u all /*关闭所有调试输出*/
11 All possible debugging has been turned off
12 R1#

从结果中可以看到R2发送过来的网络并没有被汇总成主类网络192.168.1.0,而是发送了192.168.1.128这个子网,所
以可以得出结论RIPv1在非主网边界不会自动汇总。

分别查看一下R1、R2的路由表:

1 R1#show ip route
2
3 192.168.1.0/26 is subnetted, 3 subnets
4 C 192.168.1.64 is directly connected, Serial0/0
5 C 192.168.1.0 is directly connected, Loopback0
6 R 192.168.1.128 [120/1] via 192.168.1.66, 00:00:14, Serial0/0
7
8 R2#show ip route
9
10 192.168.1.0/26 is subnetted, 3 subnets
11 C 192.168.1.64 is directly connected, Serial0/1
12 R 192.168.1.0 [120/1] via 192.168.1.65, 00:00:23, Serial0/1
13 C 192.168.1.128 is directly connected, Loopback0

从上面的RIP调试中看出RIPv1更新包不会携带子网掩码长度,那么为什么路由表中会判断出子网掩码长度是26位
呢?其实RIPv1中,当从一个接口收到同一个主类网络的子网路由时,路由器认为收到的子网路由与接收接口的网络
位相同。

* 不支持VLSM

下面这个拓扑图中,虽然主类网络号相同,但是运行了VLSM:

R1配置:
1 R1(config)#int lo 0
2 R1(config-if)#ip add 192.168.1.1 255.255.255.192
3 R1(config-if)#no shut
4 R1(config-if)#int s 0/0
5 R1(config-if)#ip add 192.168.1.65 255.255.255.252
6 R1(config-if)#no shut
7 R1(config-if)#router rip
8 R1(config-router)#net 192.168.1.0
9 R1(config-router)#end
10 R1#

R2配置:

1 R2(config)#int lo 0
2 R2(config-if)#ip add 192.168.1.129 255.255.255.192
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/1
5 R2(config-if)#ip add 192.168.1.66 255.255.255.252
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#net 192.168.1.0
9 R2(config-router)#end
10 R2#

这个时候我们调试RIP:

1 R1#debug ip rip
2 RIP protocol debugging is on
3 R1#
4 *Mar 1 00:08:35.671: RIP: sending v1 update to 255.255.255.255 via Loopback0
(192.168.1.1)
5 *Mar 1 00:08:35.671: RIP: build update entries - suppressing null update
6
7 /*可以看出R1抑制了空更新,R2也同样抑制了空更新*/

分别查看R1和R2的路由表,发现并没有出现RIP路由条目,因为当R1或者R2发现,要传输出去路由网络位”/26″,与
外出接口网络位”/30″不相同时,R1不发送不一致的主类网络更新。(主类网络相同,但是网络位不相同的情况)

从上面的结果可以看出RIPv1不支持VLSM。

* RIPV1 局限总结

RIPv1是一个有类路由协议,可以支持带子网的网络地址,但是必须是连续的,中间不被其他主类网络分隔,并且子
网掩码长度必须相同。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十五]RIPv2协议详解
发表于 2012 年 10 月 31 日 由 晴刃

这篇文章讲解RIPv2的增强特性,演示RIPv2对CIDR和VLSM的支持、RIPv2手动汇总、RIPv2验证以及与RIPv1的共
存。

___________________________________________

文章目录

[*1*].RIPv2增强特性
[*2*].RIPv2基本配置
RIPv2支持VLSM实例
RIPv2支持CIDR实例
RIPv2手工汇总实例
路由翻动
[*3*].RIPv2高级配置
RIPv2路由验证
RIPv1和RIPv2的共存

___________________________________________

[*1*].RIPv2增强特性

RIPv2与RIPv1的相同点:

也用跳数作为度量值,最大值为15。
也是距离矢量路由协议。
也容易产生路由环路,使用最大跳计数,水平分隔,触发更新,路由中毒和抑制定时器来防止路由环路。
也是周期更新,默认每30秒发送一次路由更新。

RIPv2的增强特性

在路由更新中携带有子网掩码的路由选择信息,因此支持VLSM和CIDR。
提供身份验证功能,支持明文和MD5验证。
在路由更新信息中包含下一跳路由器的IP地址。
使用外部标记。
使用组播地址224.0.0.9代替RIPv1的广播更新。
可以关闭自动汇总,并支持手动汇总。
[*2*].RIPv2基本配置

1 Router(config)#router rip
2 Router(config-router)#version 2 /*使用RIPv2,如果不使用这条命令默认是使用RIPv1*/
3 Router(config-router)#network 主类网络号 /*和RIPv1相同,都是宣告主类网络号*/

* RIPV2 支持VLSM实例

在上一篇关于RIPv1的缺陷中有涉及到这张拓扑的配置,这里使用RIPv2去配置,看看结果会有何不同。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 192.168.1.65 255.255.255.252
3 R1(config-if)#no shut
4 R1(config-if)#int lo0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.192
6 R1(config-if)#no shut
7 R1(config-if)#router rip
8 R1(config-router)#version 2
9 R1(config-router)#net 192.168.1.0
10 R1(config-router)#end

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 192.168.1.66 255.255.255.252
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 192.168.1.129 255.255.255.192
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#ver 2
9 R2(config-router)#net 192.168.1.0
10 R2(config-router)#end

配置完成后,在R1上查看路由表并测试连通性:

1 /*可以看到R1支持VLSM*/
2 R1#show ip route
3
4 192.168.1.0/24 is variably subnetted, 3 subnets, 2 masks
5 C 192.168.1.64/30 is directly connected, Serial0/0
6 C 192.168.1.0/26 is directly connected, Loopback0
7 R 192.168.1.128/26 [120/1] via 192.168.1.66, 00:00:01, Serial0/0
8
9 /*ping R2的回环接口,成功*/
10 R1#ping 192.168.1.129
11
12 Type escape sequence to abort.
13 Sending 5, 100-byte ICMP Echos to 192.168.1.129, timeout is 2 seconds:
14 !!!!!
15 Success rate is 100 percent (5/5), round-trip min/avg/max = 32/38/56 ms
16 R1#

通过Debug调试RIPv2查看输出:

1 R1#debug ip rip
2 RIP protocol debugging is on
3 R1#
4 *Mar 1 00:22:31.687: RIP: sending v2 update to 224.0.0.9 via Serial0/0
(192.168.1.65)
5 *Mar 1 00:22:31.687: RIP: build update entries
6 *Mar 1 00:22:31.687: 192.168.1.0/26 via 0.0.0.0, metric 1, tag 0
7 R1#
8 *Mar 1 00:22:52.391: RIP: received v2 update from 192.168.1.66 on Serial0/0
9 *Mar 1 00:22:52.391: 192.168.1.128/26 via 0.0.0.0 in 1 hops
10 R1#u all
11 All possible debugging has been turned off
12 R1#
13
14 /*
15 * 从输出可以看到,发送和接收的版本均为RIPv2(sending v2、received v2)
16 * 发送更新分组使用的是组播地址"update to 224.0.0.9"
17 * 发送和接收的更新分组中携带了子网掩码长度"/26"
18 * 发送的更新分组中使用了路由标记"tag 0"
19 */

* RIPV2 支持CIDR实例

如下图所示,假设R2上面有多个192.168.*.0/24网络,可以在RIPv2中以CIDR的方式把路由宣告出去。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#router rip
5 R1(config-router)#ver 2
6 R1(config-router)#net 12.0.0.0
7 R1(config-router)#end
8 R1#

R2配置:

R2上配置了4个回环接口来测试CIDR。

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 192.168.1.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int lo 1
8 R2(config-if)#ip add 192.168.2.1 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#int lo 2
11 R2(config-if)#ip add 192.168.3.1 255.255.255.0
12 R2(config-if)#no shut
13 R2(config-if)#int lo 3
14 R2(config-if)#ip add 192.168.4.1 255.255.255.0
15 R2(config-if)#no shut
16 R2(config-if)#exit
17 /*生成一条静态路由192.168.0.0/16*/
18 R2(config)#ip route 192.168.0.0 255.255.0.0 null 0
19 R2(config)#router rip
20 R2(config-router)#ver 2
21 R2(config-router)#net 12.0.0.0
22 /*将静态路由重发布出去*/
23 R2(config-router)#redistribute static
24 R2(config)#end

这个时候我们在R1上查看路由表,就能看到R2重发布过来的超网路由:

1 /*可以看到192.168.0.0/16这条超网信息,如果这里使用的是RIPv1,就不会看到这条超网信息,
因为RIPv2不支持CIDR*/
2 R1#show ip route
3
4 12.0.0.0/24 is subnetted, 1 subnets
5 C 12.1.1.0 is directly connected, Serial0/0
6 R 192.168.0.0/16 [120/1] via 12.1.1.2, 00:00:14, Serial0/0

* RIPV2 手工汇总实例

RIPv1和RIPv2都会在主类网络的边界汇总,区别在于RIPv2的自动汇总可以关闭,并支持手工汇总。

利用RIPv2完成下面配置,在关闭自动汇总前和RIPv1路由表结果一样,关闭自动汇总后RIPv2就能很好的支持不连续
的子网:
R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo 0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.128
6 R1(config-if)#no shut
7 R1(config-if)#router rip
8 R1(config-router)#ver
9 R1(config-router)#version 2 /*使用RIPv2*/
10 R1(config-router)#no auto-summary /*关闭自动汇总*/
11 R1(config-router)#net 192.168.1.0
12 R1(config-router)#net 12.0.0.0
13 R1(config-router)#end
14 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#ver 2
9 R2(config-router)#no auto-summary
10 R2(config-router)#net 12.0.0.0
11 R2(config-router)#net 23.0.0.0
12 R2(config-router)#end
13 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int lo 0
5 R3(config-if)#ip add 192.168.1.129 255.255.255.128
6 R3(config-if)#no shut
7 R3(config-if)#router rip
8 R3(config-router)#ver 2
9 R3(config-router)#no auto
10 R3(config-router)#net 23.0.0.0
11 R3(config-router)#net 192.168.1.0
12 R3(config-router)#end
13 R3#

配置完成后在R1/R2/R3上分别查看路由表:

1 R1#show ip route
2
3 23.0.0.0/24 is subnetted, 1 subnets
4 R 23.1.1.0 [120/1] via 12.1.1.2, 00:00:11, Serial0/0
5 12.0.0.0/24 is subnetted, 1 subnets
6 C 12.1.1.0 is directly connected, Serial0/0
7 192.168.1.0/25 is subnetted, 2 subnets
8 C 192.168.1.0 is directly connected, Loopback0
9 R 192.168.1.128 [120/2] via 12.1.1.2, 00:00:11, Serial0/0
10
11 R2#show ip route
12
13 23.0.0.0/24 is subnetted, 1 subnets
14 C 23.1.1.0 is directly connected, Serial0/0
15 12.0.0.0/24 is subnetted, 1 subnets
16 C 12.1.1.0 is directly connected, Serial0/1
17 192.168.1.0/25 is subnetted, 2 subnets
18 R 192.168.1.0 [120/1] via 12.1.1.1, 00:00:15, Serial0/1
19 R 192.168.1.128 [120/1] via 23.1.1.3, 00:00:10, Serial0/0
20
21 R3#show ip route
22
23 23.0.0.0/24 is subnetted, 1 subnets
24 C 23.1.1.0 is directly connected, Serial0/1
25 12.0.0.0/24 is subnetted, 1 subnets
26 R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:26, Serial0/1
27 192.168.1.0/25 is subnetted, 2 subnets
28 R 192.168.1.0 [120/2] via 23.1.1.2, 00:00:26, Serial0/1
29 C 192.168.1.128 is directly connected, Loopback0

从三个路由的路由表输出,进一步证实了RIPv2关闭总汇后能够支持不连续的子网。但同时也带来一个问题,路由表
变大了,如果R1上面有多个接口属于不同子网,那么R1将向其他路由通告这些接口所处的子网,下面这个实例将演
示如何进行手动汇总来减小路由表的大小,拓扑如图:

首先不使用手动汇总,配置各路由:
R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.240
6 R1(config-if)#no shut
7 R1(config-if)#int lo1
8 R1(config-if)#ip add 192.168.1.17 255.255.255.240
9 R1(config-if)#no shut
10 R1(config-if)#int lo 2
11 R1(config-if)#ip add 192.168.1.33 255.255.255.240
12 R1(config-if)#no shut
13 R1(config-if)#int lo 3
14 R1(config-if)#ip add 192.168.1.49 255.255.255.240
15 R1(config-if)#no shut
16 R1(config-if)#router rip
17 R1(config-router)#no auto-summary
18 R1(config-router)#ver 2
19 R1(config-router)#net 12.0.0.0
20 R1(config-router)#net 192.168.1.0
21 R1(config-router)#end
22 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#ver 2
9 R2(config-router)#no auto-summary
10 R2(config-router)#net 12.0.0.0
11 R2(config-router)#net 23.0.0.0
12 R2(config-router)#end
13 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int lo 0
5 R3(config-if)#ip add 192.168.1.129 255.255.255.128
6 R3(config-if)#no shut
7 R3(config-if)#router rip
8 R3(config-router)#ver 2
9 R3(config-router)#no auto
10 R3(config-router)#net 192.168.1.0
11 R3(config-router)#net 23.0.0.0
12 R3(config-router)#end
13 R3#

配置完成后,查看一下R3的路由表:
1 R3#show ip route
2
3 23.0.0.0/24 is subnetted, 1 subnets
4 C 23.1.1.0 is directly connected, Serial0/1
5 12.0.0.0/24 is subnetted, 1 subnets
6 R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:24, Serial0/1
7 192.168.1.0/24 is variably subnetted, 5 subnets, 2 masks
8 R 192.168.1.32/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
9 R 192.168.1.48/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
10 R 192.168.1.0/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
11 R 192.168.1.16/28 [120/2] via 23.1.1.2, 00:00:26, Serial0/1
12 C 192.168.1.128/25 is directly connected, Loopback0
13 R3#
14 /*发现R3上学到了R1上的4条明细路由*/

下面在R1的s0/0接口上使用手动汇总:

注意:汇总是在路由的外出接口上面做的,如果有多条外出接口,就要在每个接口上执行手动汇总。

1 /*手动汇总*/
2 R1(config)#int s 0/0
3 R1(config-if)#ip summary-address rip 192.168.1.0 255.255.255.192
4 R1(config-if)#
5
6 /*等待R3收敛后,查看R3的路由表,就只能看到R1汇总后的一条路由条目了*/
7 R3#show ip rout
8
9 23.0.0.0/24 is subnetted, 1 subnets
10 C 23.1.1.0 is directly connected, Serial0/1
11 12.0.0.0/24 is subnetted, 1 subnets
12 R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:15, Serial0/1
13 192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
14 R 192.168.1.0/26 [120/2] via 23.1.1.2, 00:00:15, Serial0/1
15 C 192.168.1.128/25 is directly connected, Loopback0

* 路由翻动

当路由的接口在”UP”和”DOWN”之间快速变换时,就会产生路由翻动,而路由汇总除了可以减小路由表大小,还能有
效的将上游路由从路由翻动问题中隔离出来。比如在上面这个实例中,没使用手动汇总前,不停的开启关闭R1上
的loopback 0就会造成R2和R3不停的接收新的路由更新,它们的处理器将不停的工作,影响网络性能。当使用汇总
后,虽然R1的直连路由不停的发生变化,但是汇总路由没有发生任何变化,所以R2和R3也不会时不时的收到lo0的网
络不可达或可达的更新了。

[*3*].RIPv2高级配置

* RIPV2 路由验证

使用下面这个拓扑来完成RIPv2路由验证实验:
R1配置:

1 R2(config)#int lo 0
2 R2(config-if)#ip add 192.168.1.1 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 12.1.1.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#net 12.0.0.0
9 R2(config-router)#net 192.168.1.0
10 R2(config-router)#version 2
11 R2(config-router)#exit
12 R2(config)#key chain test1 /*创建密钥链test1*/
13 R2(config-keychain)#key 1 /*配置密钥链中的key 1*/
14 R2(config-keychain-key)#key-string ccna1 /*配置密码串*/
15 R2(config-keychain-key)#end
16 R2#conf t
17 R2(config)#int s 0/0 /*在与R2相连的串口中配置使用密钥链test1进行验证*/
18 R2(config-if)#ip rip authentication key-chain test1
19 R2(config-if)#ip rip authentication mode md5 /*使用MD5验证*/
20 R2(config-if)#end
21 R2#
22
23 /*
24 * 验证模式分为两种,一种是text明文验证,一种是md5验证,本实验使用了md5验证
25 * 另外,两端使用的密钥链中的密码串必须相同,并且验证模式也要相同,才能验证成功。
26 */

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 192.168.2.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#version 2
9 R2(config-router)#net 12.0.0.0
10 R2(config-router)#net 192.168.2.0
11 R2(config-router)#exit
12 R2(config)#key chain test2 /*test2是密钥名,只起到标识作用*/
13 R2(config-keychain)#key 1
14 R2(config-keychain-key)#key-string ccna1 /*密钥字符串"ccna1"必须和R1相同*/
15 R2(config-keychain-key)#end
16 R2#conf t
17 R2(config)#int s 0/1
18 R2(config-if)#ip rip authentication key-chain test2
19 R2(config-if)#ip rip authentication mode md5 /*验证模式也必须相同*/
20 R2(config-if)#end
21 R2#

这里可以将R2的密钥字符串配置成和R1不同的字符,或者将R2改成text明文验证,来测试两端是否能够正常互交。

* RIPV1 和RIPV2 的共存

利用上面的RIPv2路由验证实验的拓扑图来完成下面的RIPv1和RIPv2共存的实验:

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#router rip /*并没有启动RIPv2,默认使用RIPv1*/
8 R1(config-router)#net 12.0.0.0
9 R1(config-router)#net 192.168.1.0
10 R1(config-router)#end
11 R1#

R1配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo0
5 R2(config-if)#ip add 192.168.2.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#router rip
8 R2(config-router)#version 2 /*开启了RIPv2*/
9 R2(config-router)#net 12.0.0.0
10 R2(config-router)#net 192.168.2.0
11 R2(config-router)#end
12 R2#

分别查看R1、R2的路由表:

1 /*发现R1上面能学习到R2上面的回环接口*/
2 R1#show ip route
3
4 12.0.0.0/24 is subnetted, 1 subnets
5 C 12.1.1.0 is directly connected, Serial0/0
6 C 192.168.1.0/24 is directly connected, Loopback0
7 R 192.168.2.0/24 [120/1] via 12.1.1.2, 00:00:20, Serial0/0
8
9 /*R2上面什么都学不到,这是为什么呢?*/
10 R2#show ip route
11
12 12.0.0.0/24 is subnetted, 1 subnets
13 C 12.1.1.0 is directly connected, Serial0/1
14 C 192.168.2.0/24 is directly connected, Loopback0

为什么R2学不到任何R1的路由信息?我们分别查看R1和R2的协议情况:

1 /*
2 * 可以看到R1“send version 1, receive any version”
3 * 也就是说,R1发送版本1的更新,接收任何版本(V1,V2)的更新,
4 * R1配置的是RIPv1,而R2配置的是RIPv2,当R2发送过来v2版本的更新时,
5 * R1照样接收它,这就是R1为什么能学到R2的回环接口的原因。
6 */
7 R1#show ip protocols
8 ....
9 Default version control: send version 1, receive any version
10 Interface Send Recv Triggered RIP Key-chain
11 Serial0/0 1 1 2
12 Loopback0 1 1 2
13 ..../*省略大部分输出*/
14
15 /*
16 * 而R2上面的RIPv2协议默认只能"send version 2, receive version 2"
17 * 也就是发送版本2和接收版本2,R1发过来的版本1的更新直接被忽略了。
18 */
19 R2#show ip protocols
20
21 Default version control: send version 2, receive version 2
22 Interface Send Recv Triggered RIP Key-chain
23 Serial0/1 2 2
24 Loopback0 2 2

如果一段配置的是RIPv1,另一端配置的是RIPv2,可以通过下面的方法让它们互交成功:

在R1上的每个外出接口(如果有多个)上配置发送版本1和版本2的更新,或者在R2的外出接口上配置接收版本1和版
本2的更新。

1 /*在运行RIPv1的一端,让它同时发送版本1和版本2的更新*/
2 R1(config)#int s 0/0
3 R1(config-if)#ip rip send version 1 2
4
5 /*或者在运行RIPv2的一端,让它同时接收版本1和版本2的更新*/
6 R2(config)#int s 0/1
7 R2(config-if)#ip rip receive version 1 2

这样,两端就都能学到对方的路由条目了。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十六]路由有类查找和无类查找
发表于 2012 年 11 月 1 日 由 晴刃

这篇文章通过一个实例介绍一下路由表的结构和路由查找过程,重点讨论什么是路由有类查找(ip classless)和路由
无类查找(no ip classless)。

___________________________________________

文章目录

[*1*].路由表结构
级别1路由(Level 1 Route)
父路由(Parent Route)
子路由(Child Route)
最终路由(Ultimate Route)
[*2*].路由查找过程

___________________________________________

[*1*].路由表结构

首先如下图所示配置R1和R2,R1上面有4个回环接口,其中Lo3的子网掩码长度是26,在R1上有一条默认路由指
向R2的s0/1接口IP,R2上面有一条静态路由指向R1的s0/0接口IP:

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo 0
5 R1(config-if)#ip add 172.16.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int lo 1
8 R1(config-if)#ip add 172.16.2.1 255.255.255.0
9 R1(config-if)#no shut
10 R1(config-if)#int lo 2
11 R1(config-if)#ip add 172.17.1.1 255.255.255.0
12 R1(config-if)#no shut
13 R1(config-if)#int lo 3
14 R1(config-if)#ip add 172.17.2.1 255.255.255.192
15 R1(config-if)#no shut
16 R1(config-if)#exit
17 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
18 R1(config)#end
19 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 192.168.2.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#exit
8 R2(config)#ip route 172.16.0.0 255.254.0.0 12.1.1.1
9 R2(config)#end
10 R2#

配置完成后查看R1和R2的路由表:

1 /*查看R1路由表*/
2 R1#show ip route
3
4 Gateway of last resort is 12.1.1.2 to network 0.0.0.0
5
6 172.17.0.0/16 is variably subnetted, 2 subnets, 2 masks
7 C 172.17.1.0/24 is directly connected, Loopback2
8 C 172.17.2.0/26 is directly connected, Loopback3
9 172.16.0.0/24 is subnetted, 2 subnets
10 C 172.16.1.0 is directly connected, Loopback0
11 C 172.16.2.0 is directly connected, Loopback1
12 12.0.0.0/24 is subnetted, 1 subnets
13 C 12.1.1.0 is directly connected, Serial0/0
14 S* 0.0.0.0/0 [1/0] via 12.1.1.2
15
16 /*查看R2路由表*/
17 R2#show ip route
18
19 Gateway of last resort is not set
20
21 12.0.0.0/24 is subnetted, 1 subnets
22 C 12.1.1.0 is directly connected, Serial0/1
23 C 192.168.2.0/24 is directly connected, Loopback0
24 S 172.16.0.0/15 [1/0] via 12.1.1.1

对于这个路由表的结构可能大家会有疑问,为什么R2中像“172.16.0.0/15 [1/0] via 12.1.1.1”和“192.168.2.0/24 is


directly connected, Loopback0”这样的路由只显示成一行,而“12.0.0.0/24 is subnetted, 1 subnets”却显示了两行,这
是路由级别决定的:
* 级别1 路由(LEVEL 1 ROUTE)

级别1路由是指一条路由使用的子网掩码小于或等于有类网络的默认子网掩码。

级别1路由包括:

网络路由:一条路由使用的子网掩码等于有类网络默认的子网掩码,比如R2上的192.168.2.1/24。
超网路由:一条路由使用的子网掩码小于有类网络默认的子网掩码,比如R2上的172.16.0.0/15。
默认路由:比如R1上的0.0.0.0/0。

对于上面列出的三种路由,在路由表中只显示成一行。

* 父路由(PARENT ROUTE)

注意上面R2的路由表中”12.0.0.0/24″就是一条父路由,父路由不包括下一跳地址或本地路由的外出接口。父路由实际
上只是一个头部,暗示后面还有级别2的路由,级别2的路由也称为子路由。无论什么时候,只要路由表中出现一条子
网掩码长度大于默认有类网络子网掩码的路由,父路由就会被创建。

在R2的路由表中“12.0.0.0/24 is subnetted, 1 subnets”表示的是父路由,子网掩码的位数是24,该主类网络在路


由表中有一个子网。
R1的路由表中的“172.17.0.0/16 is variably subnetted, 2 subnets, 2 masks”也是一条父路由,因为子路由拥有不
同的子网掩码,所以父路由的子网掩码使用主类网络默认的子网掩码16。“variably subnetted”表示是变长子网,
有两个子网,有两种掩码,不同的子网掩码在子路由中分别表示。
R1中的“172.16.0.0/24 is subnetted, 2 subnets”也是一条父路由,因为两个子路由的掩码长度相同,所以在父路
由中用/24表示出来,父路由中已经表示了子网掩码长度,子路由就不必再表示了。

* 子路由(CHILD ROUTE ),也称级别2 路由

子路由中明确的标出了下一跳的IP地址或本路由的外出接口。如果所有子路由的子网掩码相同,相同的子网掩码将在
父路由中体现出来,子路由中就不再显示子网掩码长度了,比如R1中的“172.16.1.0 is directly connected,
Loopback0”和“172.16.2.0 is directly connected, Loopback1”;如果子路由拥有不同的子网掩码,子网掩码将在每个子
路由中单独表现出来,而父路由则使用默认主类网络掩码表示,如R1中的“172.17.1.0/24 is directly connected,
Loopback2”和“172.17.2.0/26 is directly connected, Loopback3”。

* 最终路由(ULTIMATE ROUTE)

所谓的最终路由是指路由条目中包含下一跳路由器的IP地址或本路由的外出接口。除父路由外,所有级别1的路由和
子路由都是最终路由。

[*2*].路由查找过程

当一个路由器收到一个IP报文时,检查目的IP地址,按照下面的步骤查找路由表:
1,路由器根据目的IP查找级别1路由:网络路由(包括父路由)、超网路由、默认路由,如果最佳匹配(子网掩码最长
匹配)是级别1路由的最终路由(路由条目中包含下一跳IP或本地外出接口),那么这条路由用来转发数据包。

2,如果最佳匹配的是级别1中的父路由,继续下一步查找即查找该父路由的子路由,如果找到匹配的子路由,则这条
子路由用来转发数据包。

3,如果子路由没有匹配,继续下一步查找,此时判断路由执行的是有类查找还是无类查找(有类或无类查找是通过ip
classless和no ip classless这两条命令来控制的),如果是有类查找则跳到第4步,如果是无类查找则跳到第5步。

4,有类路由行为:终止查找,丢弃数据包。

5,无类路由行为:继续查找级别1的超网路由和默认路由,如果没有超网路由匹配,也没有默认路由匹配,则终止查
找,丢弃数据包。如果找到匹配,则使用找到的路由条目进行转发。

下面使用本文第一部分中那个例子来演示上面的路由查找步骤:

路由查找实例一:在R2上新增加一个Loopback1并配置IP(2.2.2.2/24),然后在R1上去ping R2的lo1:

1 /*新增一个回环接口lo1*/
2 R2(config)#int lo 1
3 R2(config-if)#ip add 2.2.2.2 255.255.255.0
4 R2(config-if)#no shut
5 R2(config-if)#end
6 R2#
7
8 /*在R1上去ping R2新增的这个回环接口地址*/
9 R1#ping 2.2.2.2
10
11 Type escape sequence to abort.
12 Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
13 !!!!!
14 /*可以ping通*/

这个时候R1的查找过程是这样的:

1,查找级别1路由。
2,找到最佳匹配即默认路由0.0.0.0/0,这是一条最终路由,下一跳是12.1.1.2.
3,使用这条路由转发,结果是R1将数据发往R2。

路由查找实例二:路由R1上去往12.1.1.2的数据包查找过程:

1,R1查找级别1路由。
2,找到最佳匹配12.0.0.0/24,这,是一条级别1的父路由,继续下一步查找。
3,查找这条父路由的子路由,子路由中的12.1.1.0/24匹配12.1.1.2,R1根据这条路由,将数据从自己的s0/0发送出
去。

路由查找实例三:R1去往172.16.3.1的数据包查找过程:
注意,在继续这一步前需要让R1执行进程交换而不是快速交换,默认的快速交换会影响无类路由查找过程。

在R2上新增一个回环接口loopback2给它分配IP地址172.16.3.1/24,然后在R1上使用进程交换并且使用有类查找:

1 /*在R2上增加新回环接口*/
2 R2(config)#int lo2
3 R2(config-if)#ip add 172.16.3.1 255.255.255.0
4 R2(config-if)#no shut
5 R2(config-if)#end
6 R2#
7
8 /*R1使用进程交换和有类查找*/
9 R1(config)#no ip cef /*切换到进程交换*/
10 R1(config)#no ip classless /*切换到有类查找*/
11 R1(config)#end
12
13 /*测试ping R2的lo2*/
14 R1#ping 172.16.3.1
15
16 Type escape sequence to abort.
17 Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds:
18 ..... /*无法ping通*/
19 Success rate is 0 percent (0/5)
20 R1#

导致这一步无法ping通的原因是因为R1开启了有类查找,根据路由查找过程:

1,R1根据自身路由表查找级别1路由,找到匹配的父路由172.17.0.0/16。
2,继续下一步查找该父路由的子路由,结果无法找到匹配172.17.3.1的最终路由。
3,路由R1检查自己是使用有类查找还是无类查找,结果发现自己是使用有类查找。
4,停止继续查找,丢弃该数据。

下面开启R1的无类查找,再次ping测试:

1 /*使用无类查找*/
2 R1(config)#ip classless
3
4 /*再次ping R2的lo2*/
5 R1#ping 172.16.3.1
6
7 Type escape sequence to abort.
8 Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds:
9 !!!!!
10 /*ping成功*/

下面看看R1的查找过程:

1,R1根据自身路由表查找级别1路由,找到匹配的父路由172.17.0.0/16。
2,继续下一步查找该父路由的子路由,结果无法找到匹配172.17.3.1的最终路由。
3,路由R1检查自己是使用有类查找还是无类查找,发现自己是使用无类查找。
4,继续查找级别1路由中的超网和默认路由,找到默认路由0.0.0.0/0,使用这条默认路由转发数据。
————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十七]EIGRP协议详解
发表于 2012 年 11 月 2 日 由 晴刃

这篇文章主要介绍EIGRP的特性、分组类型、表的种类、度量值的计算以及EIGRP非等值负载均衡、路由汇总等配
置。

___________________________________________

文章目录

[*1*].EIGRP特性与基本配置
EIGRP特性
EIGRP包格式
EIGRP分组类型
EIGRP基本配置
查看和修改Hello分组发送间隔
[*2*].EIGRP表
邻居表(Neighbor Table)
路由表
拓扑表
[*3*].度量值的计算
[*4*].EIGRP高级配置
非等值负载均衡
手动汇总
外部路由
重发布默认路由
验证
性能调整

___________________________________________

[*1*].EIGRP特性与基本配置

EIGRP(Enhanced Interior Gateway Routing Protocol,增强型内部网关路由协议),是思科私有的,高级距离矢


量、无类的路由选择协议。

* EIGRP特性

复合度量值:使用带宽(bandwidth)、负载(load)、延时(delay)、可靠性(reliability),默认只使用带宽
和延时做为度量值计算的参数。
快速收敛:使用DUAL算法,通过在拓扑表中保存可行性后继,相当于次优路由,当可用路由消失后,次优路由
马上进入路由表。
100%无环路:主要受益于DUAL算法。
配置简单。
可靠的更新:采用RTP(可靠传输协议),并为每个邻居保存一个重传列表。
建立邻居关系:运行EIGRP的路由器中有三张表,路由表、邻居表、拓扑表。
支持多种网络协议。
支持VLSM和CIDR。
支持手动汇总,能关闭自动汇总。
使用组播地址224.0.0.10发送更新。
支持等价和非等价负载均衡。
兼容IGRP。
增量式更新:仅发送变化的路由信息。
路由标记功能:从IGRP何任何外部源收到的更新都标记成EX(外部)。

* EIGRP包格式

EIGRP被设计成一个传输层协议,协议号是88,EIGRP使用RTP(Reliable Transport Protocol,可靠传输协议)传


送和接收EIGRP分组

EIGRP的包格式如下图:

数据链路层头部:每个组播IP都有一个对应的MAC地址,组播厂商编码为“01-00-5E”,后面的编号部分根据不同的组
播IP计算得来,224.0.0.10对应的MAC地址是“01-00-5E-00-00-0A”。

* EIGRP分组类型

EIGRP使用5种分组类型:

1,Hello分组
Hello分组用来发现、验证和重新发现邻居路由器。默认的Hello分组发送间隔,除小于等于1.544Mb/s的多点帧中继链
路是60秒外,其他链路都是5秒。使用组播地址224.0.0.10发送,在邻居表中包含一个“保持时间”字段,记录了最后收
到hello分组的时间,如果在保持时间到期前没有收到邻居路由器的任何Hello分组,就认为这个邻居出现了故障,默认
的保持时间是Hello时间的3倍,即15秒。EIGRP仅在宣告进EIGRP进程的接口的主IP地址上发送分组。

* EIGRP基本配置

下面使用一个实例演示EIGRP基本配置以及Hello分组的参数设置:

图中,R1和R2使用串行线路和以太网线路相连,在R1上有两个回环接口其中除Lo1(3.3.3.3)外,R1和R2的其他接口都
宣告进EIGRP进程,自制系统号100(AS=100)。

(本文[1][2][3]部分使用此拓扑来介绍EIGRP配置)

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int fa 1/0
5 R1(config-if)#ip add 21.1.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int lo 0
8 R1(config-if)#ip add 1.1.1.1 255.255.255.0
9 R1(config-if)#no shut
10 R1(config-if)#int lo 1
11 R1(config-if)#ip add 3.3.3.3 255.255.255.0
12 R1(config-if)#no shut
13 R1(config-if)#router eigrp 100 /*EIGRP需要配置AS号*/
14 R1(config-router)#net 1.1.1.0 0.0.0.255 /*宣告接口使用的是反掩码形式*/
15 R1(config-router)#net 12.1.1.0 0.0.0.255
16 R1(config-router)#net 21.1.1.0 0.0.0.255
17 R1(config-router)#end
18 R1#
19
20 /*
21 * router eigrp 100
22 * EIGRP进程需要配置AS号(自制系统号),这里的100就是AS号,
23 * AS标识了属于一个互连网络中的所有路由器,
24 * 同一个AS内的不同路由如果想要互相学习路由信息,必须配置相同的AS号。
25 *
26 * net 12.1.1.0 0.0.0.255
27 * 在EIGRP中宣告接口需要使用反掩码,如果不输入反掩码,
28 * 路由默认会使用接口的主类网络号,
29 * "net 12.1.1.0" 等价于 "net 12.0.0.0 0.255.255.255"
30 *
31 * 如果路由的所有接口都宣告进EIGRP进程,则可以使用"net 0.0.0.0"一次性宣告所有接口。
32 *
33 */

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 2.2.2.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int fa 1/0
8 R2(config-if)#ip add 21.1.1.2 255.255.255.0
9 R2(config-if)#router eigrp 100 /*自制系统号和R1相同*/
10 R2(config-router)#net 0.0.0.0 /*宣告所有接口接入EIGRP进程*/
11 R2(config-router)#end
12 R2#

* 查看和修改HELLO 分组发送间隔

配置完成后使用下面的命令查看Hello分组默认发送间隔:

1 /*显示R1的s0/0接口上EIGRP配置信息*/
2 R1#show ip eigrp interfaces detail s0/0
3 IP-EIGRP interfaces for process 100
4
5 Xmit Queue Mean Pacing Time Multicast Pending
6 Interface Peers Un/Reliable SRTT Un/Reliable Flow Timer Routes
7 Se0/0 1 0/0 37 0/15 163 0
8 Hello interval is 5 sec /*这里就是Hello分组发送间隔,默认5秒*/
9 Next xmit serial <none>
10 Un/reliable mcasts: 0/0 Un/reliable ucasts: 1/3
11 Mcast exceptions: 0 CR packets: 0 ACKs suppressed: 3
12 Retransmissions sent: 0 Out-of-sequence rcvd: 1
13 Authentication mode is not set
14 Use unicast
15 R1#

可以使用下面的命令修改Hello分组发送间隔:

1 /*修改hello时间间隔为30秒*/
2 R1(config)#int s 0/0
3 R1(config-if)#ip hello-interval eigrp 100 30
4
5 /*再次查看,发现hello时间变成30秒了*/
6 R1#show ip eigrp interfaces detail s 0/0
7 .....
8 Hello interval is 30 sec
9 .....
10 R1#
11
12 /*这样修改后,会遇到一个问题,因为默认的EIGRP保持时间是15秒,而R1发给R2的hello间隔却
被修改成了30秒,我们将看到路由上面反复的出现邻居关系down掉后又建立的消息,*/
13 *Mar 1 00:31:28.823: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 12.1.1.2
(Serial0/0) is down: Interface
14
15 Goodbye received
16 R1(config-if)#
17 *Mar 1 00:31:33.739: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 12.1.1.2
(Serial0/0) is up: new adjacency
18
19 /*解决的办法是修改保持时间大于hello时间,一般修改成hello时间的3倍(90秒)*/
20 R1(config-if)#ip hold-time eigrp 100 90
21 R1(config-if)#end
22 R1#
23
24 /*修改后在R2上查看EIGRP邻居表,可以看到R1发送过来的保持时间有是从90秒开始倒计时了*/
25 R2#show ip eigrp neighbors
26 IP-EIGRP neighbors for process 100
27 H Address Interface Hold Uptime SRTT RTO Q Seq
28 (sec) (ms) Cnt Num
29 1 21.1.1.1 Fa1/0 70 00:01:07 1025 5000 0 9
30 0 12.1.1.1 Se0/1 70 00:01:07 58 348 0 7
31
32 /*上面的Hold下面的70,代表已经收到hello分组20秒了,根据我们的改动再过10秒R2将再次收
到R1发送过来的hello分组*/

在EIGRP中,邻居的建立不需要有相同的hello时间和保持时间,而OSPF中必须要有相同的Hello时间和保持时间,否
则邻居关系建立将不会成功。

2,ACK(确认)分组

路由器在交换期间,使用确认分组来确认收到了EIGRP分组,确认分组单播发送。

3,Update(更新)分组

更新分组是可靠传送的,需要被确认,当路由发现新邻居或检测到网络拓扑发生变化时,使用更新分组。

4,Query(查询)分组

当EIGRP路由器需要从一个或所有邻居那里得到指定信息时,使用查询分组。查询分组也是可靠传送的,需要被确
认。

5,Reply(回复)分组

对邻居的查询信息进行单播回复,可靠传送,需要被确认。
EIGRP分组对照表:

[*2*].EIGRP表

EIGRP中有三张表:邻居表、路由表、拓扑表。

* 邻居表(NEIGHBOR TABLE)

两台相邻路由器要建立起邻接关系需要满足两个条件:

具有相同的AS号
具有相匹配的K值

可以通过下面的命令来查看EIGRP默认的K值:

1 R1#show ip protocols
2 Routing Protocol is "eigrp 100" /*AS=100*/
3 Outgoing update filter list for all interfaces is not set
4 Incoming update filter list for all interfaces is not set
5 Default networks flagged in outgoing updates
6 Default networks accepted from incoming updates
7 EIGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
8 EIGRP maximum hopcount 100
9 EIGRP maximum metric variance 1
10 Redistributing: eigrp 100
11 EIGRP NSF-aware route hold timer is 240s
12 Automatic network summarization is in effect
13 Automatic address summarization:
14 21.0.0.0/8 for Loopback0, Serial0/0
15 Summarizing with metric 28160
16 12.0.0.0/8 for Loopback0, FastEthernet1/0
17 Summarizing with metric 2169856
18 1.0.0.0/8 for FastEthernet1/0, Serial0/0
19 Summarizing with metric 128256
20 Maximum path: 4
21 Routing for Networks: /*本路由运行了EIGRP的接口*/
22 1.1.1.0/24
23 12.1.1.0/24
24 21.1.1.0/24
25 Routing Information Sources: /*从哪些源接收到了更新*/
26 Gateway Distance Last Update
27 (this router) 90 00:02:29
28 12.1.1.2 90 00:02:29
29 21.1.1.2 90 00:02:24
30 Distance: internal 90 external 170 /*内部管理距离和外部管理距离*/
31
32 /*
33 * 从输出可以看到自制系统号AS=100。
34 *
35 * Maximum path: 4 代表最大允许4条线路的负载均衡,
36 * 可以使用R1(config-router)#maximum-paths 16来修改成16条,或者其他数值
37 *
38 * 可以看到上面的输出中有这么一行:
39 * EIGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
40 * 其中K1代表带宽,K2代表负载,K3代表延时,K4和K5代表可靠性,
41 * 默认EIGRP只使用了带宽和负载作为度量值计算参数。
42 *
43 */

可以使用下面的命令来修改K值:

“metric weights tos k1 k2 k3 k4 k5″


其中tos被用作服务质量区分服务等级,这里暂时用不到,0为不启用,1为启用。

1 /*修改EIGRP K值,只使用带宽作为度量值计算参数*/
2 R1(config)#router eigrp 100
3 R1(config-router)#metric weights 0 1 0 0 0 0
4
5 /*修改后马上看到了与邻路由K值不匹配的消息*/
6 *Mar 1 00:45:32.391: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 12.1.1.2
(Serial0/0) is down: K-value
7
8 mismatch
9
10 /*接着就发现与邻居的邻接关系down掉了*/
11 *Mar 1 00:45:32.391: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 12.1.1.2
(Serial0/0) is down: K-value
12
13 mismatch
14
15 /*重新将K值改成默认的带宽和延时有效的状态*/
16 R1(config-router)#metric weights 0 1 0 1 0 0

下图是EIGRP建立邻接关系的过程:
可以使用下面的命令查看邻居表:

1 R1#show ip eigrp neighbors


2 IP-EIGRP neighbors for process 100
3 H Address Interface Hold Uptime SRTT RTO Q Seq
4 (sec) (ms) Cnt Num
5 1 21.1.1.2 Fa1/0 11 00:04:50 52 312 0 9
6 0 12.1.1.2 Se0/0 10 00:04:50 59 354 0 10
7
8 /*
9 * “H”表示邻居被学到的先后顺序,0是最先学到的邻居。
10 * “Address”是邻居路由接口IP。
11 * “Interface”是本地路由和这个邻居相连的接口
12 * “Hold”是当前的保持时间,默认15秒,是一个递减的数值。
13 * “Uptime”是邻居进入邻居表到当前经过了多长时间。
14 * 后面的参数在CCNA中暂时不讨论。
15 */

* 路由表

使用下面的命令显示R1的路由表:

1 R1#show ip route
2 Gateway of last resort is not set
3
4 1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
5 C 1.1.1.0/24 is directly connected, Loopback0
6 D 1.0.0.0/8 is a summary, 00:06:49, Null0
7 D 2.0.0.0/8 [90/156160] via 21.1.1.2, 00:06:49, FastEthernet1/0
8 3.0.0.0/24 is subnetted, 1 subnets
9 C 3.3.3.0 is directly connected, Loopback1
10 21.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
11 C 21.1.1.0/24 is directly connected, FastEthernet1/0
12 D 21.0.0.0/8 is a summary, 00:06:51, Null0
13 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
14 C 12.1.1.0/24 is directly connected, Serial0/0
15 D 12.0.0.0/8 is a summary, 00:06:50, Null0
16 R1#
17
18 /*
19 *
20 * 路由表中的"D 1.0.0.0/8 is a summary, 01:40:23, Null0",
21 * 是一条自动汇总产生的路由,EIGRP和RIP默认都在主网边界自动汇总,
22 * 而不同的是EIGRP会在本地产生一条自动汇总后的路由,目标指向空接口(Null0)
23 * 发往空接口的数据会被丢弃。这可以有效的避免路由环路的产生。
24 *
25 * "D 2.0.0.0/8 [90/156160] via 21.1.1.2, 00:06:49, FastEthernet1/0
26 * 这是一条通过EIGRP学习到的最终路由,D代表是通过EIGRP学习到的,
27 * 可以看到R1上的2.2.2.2/24被汇总成了2.0.0.0/8发送过来,
28 * [90/156160]中的90是EIGRP默认的管理距离,后面是度量值。
29 * 从这条路由可以得知,去往2.0.0.0/8网络的数据发往21.1.1.2,
30 * 从本地的FastEthernet1/0发出。
31 *
32 */

下面这个例子解释了,为什么EIGRP要在本地产生一条去往空接口的汇总路由:

假设R1和R2都运行了RIP协议,R1和R2相连的串行线路属于12.1.1.0/24网段,R1将自己回环接口lo0汇总
成1.0.0.0/8发送给R2,并且在R1上有一条默认路由指向R2。此时,在R2上面有一个去往1.1.2.1的数据包,R2根
据R1发过来的路由1.0.0.0/8匹配,将数据发给R1,R1上面只有默认路由可以匹配,它又将数据发回R2,这样路由环
路形成。

假设R1和R2都运行了EIGRP协议,R1和R2相连的串行线路属于12.1.1.0/24网段,R1将自己回环接口lo0汇总
成1.0.0.0/8发送给R2,并且在R1上有一条默认路由指向R2。此时,在R2上面有一个去往1.1.2.1的数据包,R2根
据R1发过来的路由1.0.0.0/8匹配,将数据发给R1,R1发现路由表中有一条1.0.0.0/8的条目能够匹配(子网掩码最长
匹配,这个条目比默认路由子网掩码长,所以优先选取),所以最终R1将数据发往了空接口,即丢弃。有效的避免了
路由环路的形成。
* 拓扑表

显示拓扑表:

1 /*显示R1的拓扑表*/
2 R1#show ip eigrp topology
3 IP-EIGRP Topology Table for AS(100)/ID(3.3.3.3)
4
5 Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
6 r - reply Status, s - sia Status
7
8 P 1.0.0.0/8, 1 successors, FD is 128256
9 via Summary (128256/0), Null0
10 P 1.1.1.0/24, 1 successors, FD is 128256
11 via Connected, Loopback0
12 P 2.0.0.0/8, 1 successors, FD is 156160
13 via 21.1.1.2 (156160/128256), FastEthernet1/0
14 via 12.1.1.2 (2297856/128256), Serial0/0
15 P 12.0.0.0/8, 1 successors, FD is 2169856
16 via Summary (2169856/0), Null0
17 P 12.1.1.0/24, 1 successors, FD is 2169856
18 via Connected, Serial0/0
19 P 21.0.0.0/8, 1 successors, FD is 28160
20 via Summary (28160/0), Null0
21 P 21.1.1.0/24, 1 successors, FD is 28160
22 via Connected, FastEthernet1/0
23 R1#
24
25 /*
26 * 路由状态:
27 * P 表示被动路由(Passive),即路由是稳定可用的,
28 * A 表示是活跃路由(Active),即路由正在使用DUAL重新计算中,不可用。
29 *
30 * 网络目标: 2.0.0.0/8就是一个网络目标。
31 *
32 * 后继(Successor):到达远程网络的主要路由,对任何特定的路由可以有多达4条后继路由。
33 * "2.0.0.0/8, 1 successors",代表去往2.0.0.0/8只有一条最佳路径。
34 *
35 * 可行距离(FD,Feasible Distance):
36 * 是下一跳路由的报告距离和本路由到下一跳路由的距离之和,
37 * R1去往2.0.0.0/8的路径有两条,距离分别是156160和2297856,
38 * 最小距离156160成为可行距离,即从快速以太网接口到达R2。
39 *
40 * 路由来源:是指最初发布这条路由的路由器标识(via 12.1.1.2),
41 * 这个标识仅当路由是从其他EIGRP路由器学到时才填入。
42 *
43 * 报告距离(RD,Reported Distance):
44 * 报告距离是邻路由报告的,到一个指定目标网络的距离,
45 * “via 21.1.1.2 (156160/128256), FastEthernet1/0”
46 * 128256就是R2报告给R1达自己lo0接口的报告距离,
47 *
48 * 接收端口如"FastEthernet1/0",是本路由从哪个接口可以到达目的地。
49 *
50 */

[*3*].度量值的计算

EIGRP使用复合度量值计算到目的地址最佳路径,复合度量值是带宽、延时、可靠性和负载的组合。
在K1、K2、K3、K4、K5都不

为0的前提下,复合度量值的计算公式:

1 Metric=[K1*Bandwidth+(K2*Bandwidth)/(256-Load)+K3*Delay]*[K5/(Reliability+K4)]

K1影响的是带宽(Bandwidth),K2影响的是负载(Load),K3影响的是延时(Delay),K4和K5影响的是可靠性
(Reliability)。

默认情况下Cisco路由器只使用K1和K3来进行复合度量值的计算,所以公式可以简化成:

1 Metric=(10000M/源和目的之间最低链路带宽+源和目的之间所有链路延时总和/10)*256
2
3 /*
4 * 源和目的之间最低链路带宽,单位是M。
5 * 源和目的之间所有链路延时总和,单位是微秒(usec)。
6 * 至于这里为什么要用延时总和除以10,
7 * 那是因为EIGRP度量值计算中是使用10微秒作为单位进行计算的。
8 */

下面举个例子,计算一下R1到R2的lo0接口的复合度量值。注意,R1到R2的lo0接口的度量值,要使用R1去往R2
Lo0接口方向的出接口的带宽和延时作为参数来计算:

1 /*
2 * 查看R1的s 0/0接口参数
3 * 可以看到 BW带宽等于1.544M,延时为20000微秒。
4 */
5 R1#show interfaces s 0/0
6 Serial0/0 is up, line protocol is up
7 Hardware is M4T
8 Internet address is 12.1.1.1/24
9 MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
10
11 /*
12 * 查看R1的fa 1/0接口参数
13 * 可以看到 BW带宽等于100M,延时为100微秒。
14 */
15 R1#show interfaces fastEthernet 1/0
16 FastEthernet1/0 is up, line protocol is up
17 Hardware is AmdFE, address is cc00.04b0.0010 (bia cc00.04b0.0010)
18 Internet address is 21.1.1.1/24
19 MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
20
21 /*
22 * 再查看R2的Lo0接口的参数
23 * 带宽为8000M,延时为5000微秒。
24 */
25 R2#show int lo 0
26 Loopback0 is up, line protocol is up
27 Hardware is Loopback
28 Internet address is 2.2.2.2/24
29 MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec,

根据公式”Metric=(10000M/源和目的之间最低链路带宽+源和目的之间所有链路延时总和/10)*256″,如果从s0/0去往R2
lo0,最低链路带宽是1.544,延时总和是s0/0的延时+R2的lo0的延时=20000+5000,代入公式计算:
[10000/R1的s0/0接口带宽(单位M)+(R1的s0/0接口延时+R2的lo0接口延时)/10]*256
[10000/1.544+(20000+5000)/10]*256
注意,这个公式的计算每部分都是取整的,比如:
10000/1.544≈6476 ,小数部分直接舍去,且不四舍五入。
(20000+5000)/10=2500
8976*256=2297856

如果从R1的fa1/0去往R2的lo0的度量值就是:
[10000/R1的fa1/0接口带宽(单位M)+(R1的fa1/0接口延时+R2的lo0接口延时)/10]*256
[10000/100+(100+5000)/10]*256=156160

使用show ip eigrp topology看看结果是否相同:

1 R1#show ip eigrp topology


2
3 P 2.0.0.0/8, 1 successors, FD is 156160
4 via 21.1.1.2 (156160/128256), FastEthernet1/0
5 via 12.1.1.2 (2297856/128256), Serial0/0
6
7 /*显示的可行距离和自己计算的,完全相同*/

上面的输出中报告距离128256,也可以使用公式计算出来:
[10000/R2的lo0接口带宽(单位M)+(R2的lo0接口延时)/10]*256
[10000/8000+(5000)/10]*256=
10000/8000≈1 , 直接舍去小数位,且不四舍五入。
501*256=128256

计算中,除法出现小数都直接舍去小数部分,且不四舍五入。

如果此时我们更改R2的s0/1或R2的fa1/0带宽,是不会影响R1上面去往R2的lo0接口的度量值的,因为R1去
往R2的lo0接口的度量值计算是根据出接口,即R1的s0/0和f1/0以及R2的lo0接口的带宽和延时作为参数来计算的,但
是会影响R2到R1的lo0接口的度量值,可以使用下面的方法来验证:

1 /*没有更改带宽前,查看R2上去往R1的lo0接口的度量值*/
2 R2#show ip eigrp topology
3
4 P 1.0.0.0/8, 1 successors, FD is 156160
5 via 21.1.1.1 (156160/128256), FastEthernet1/0
6 via 12.1.1.1 (2297856/128256), Serial0/1
7
8 /*下面我们更改R2的出接口s0/1的带宽,看会不会改变2297856这个数值大小*/
9 R2(config)#int s 0/1
10 R2(config-if)#bandwidth 1000000 /*将带宽改成1000M*/
11 R2(config-if)#end
12
13 /*查看一下,确实修改成功了*/
14 R2#show interfaces s 0/1
15 MTU 1500 bytes, BW 1000000 Kbit, DLY 20000 usec,
16
17 /*再看R2拓扑表*/
18 R2#show ip eigrp topology
19
20 P 1.0.0.0/8, 1 successors, FD is 156160
21 via 21.1.1.1 (156160/128256), FastEthernet1/0
22 via 12.1.1.1 (642560/128256), Serial0/1
23 /*
24 * 可以看到,从s0/1去往1.0.0.0/8的度量值变成了642560,
25 * 可以用公式来验证这个数值是更改后的1000M带宽作为参数计算得到的。
26 */

可以通过下面的命令来查看某条路由的明细拓扑数据库:

1 R2#show ip eigrp topology 1.0.0.0


2 IP-EIGRP (AS 100): Topology entry for 1.0.0.0/8
3 State is Passive, Query origin flag is 1, 1 Successor(s), FD is 156160
4 Routing Descriptor Blocks:
5 21.1.1.1 (FastEthernet1/0), from 21.1.1.1, Send flag is 0x0
6 Composite metric is (156160/128256), Route is Internal
7 Vector metric:
8 Minimum bandwidth is 100000 Kbit
9 Total delay is 5100 microseconds
10 Reliability is 255/255
11 Load is 1/255
12 Minimum MTU is 1500
13 Hop count is 1
14 12.1.1.1 (Serial0/1), from 12.1.1.1, Send flag is 0x0
15 Composite metric is (642560/128256), Route is Internal
16 Vector metric:
17 Minimum bandwidth is 1000000 Kbit /*这是我们刚才修改的带宽*/
18 Total delay is 25000 microseconds
19 Reliability is 255/255
20 Load is 1/255
21 Minimum MTU is 1500
22 Hop count is 1
23 R2#

[*4*].EIGRP高级配置

介绍EIGRP高级配置前,先介绍一下DUAL算法的相关术语:

Successor(后继):后继就是到目标网络花费最少的路由。
FD(Feasible Distance,可行距离):到目标网络的最小度量值。
RD(Reported Distance,报告距离)又称AD(Advertised Distance,通告距离):下一跳路由器通告的到相同
目标网络的距离。
FS(Feasible Successor,可行后继):可行后继就是次优路径。
FC(Feasibility Condition,可行条件):可行条件是报告距离必须小于可行距离,也就是邻路由到目标网络的距
离必须小于本路由到目标网络的距离。

能出现在”show ip eigrp topology”中的非可行距离路径,都满足可行条件,都是可行后继。

下面这个例子中列出的拓扑表很好的解释了上面这些概念:
1 R2#show ip eigrp topology
2
3 P 1.0.0.0/8, 1 successors, FD is 156160
4 via 21.1.1.1 (156160/128256), FastEthernet1/0
5 via 12.1.1.1 (2297856/128256), Serial0/1
6
7 /*
8 * 在上面的拓扑表显示中:
9 * R2去往1.0.0.0/8网络有一条后继"1 successors",
10 * 可行距离是"FD is 156160",
11 * 报告距离是"128256",
12 * 可行后继是"via 12.1.1.1 (2297856/128256), Serial0/1"
13 * 能出现在这个命令下的,都满足可行条件。
14 */

* EIGRP非等值负载均衡

用下面这个实例来讲解EIGRP非等值负载均衡的配置:

R1配置:

1 R1(config)#no cdp run /*关闭CDP协议,否则在以太网会有不匹配提示*/


2 R1(config)#int lo 0
3 R1(config-if)#ip add 1.1.1.1 255.255.255.0
4 R1(config-if)#no shut
5 R1(config-if)#int s 0/0
6 R1(config-if)#ip add 12.1.1.1 255.255.255.0
7 R1(config-if)#no shut
8 R1(config-if)#int fa 1/0
9 R1(config-if)#ip add 13.1.1.1 255.255.255.0
10 R1(config-if)#no shut
11 R1(config-if)#router eigrp 100
12 R1(config-router)#net 0.0.0.0
13 R1(config-router)#end
14 R1#

R2配置:

1 R2(config)#int lo 0
2 R2(config-if)#ip add 2.2.2.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/1
5 R2(config-if)#ip add 12.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int s 0/0
8 R2(config-if)#ip add 23.1.1.2 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#router eigrp 100
11 R2(config-router)#net 0.0.0.0
12 R2(config-router)#end
13 R2#

R3配置:

1 R3(config)#no cdp run


2 R3(config)#int lo 0
3 R3(config-if)#ip add 3.3.3.3 255.255.255.0
4 R3(config-if)#no shut
5 R3(config-if)#int s 0/1
6 R3(config-if)#ip add 23.1.1.3 255.255.255.0
7 R3(config-if)#no shut
8 R3(config-if)#int fa 1/0
9 R3(config-if)#ip add 13.1.1.3 255.255.255.0
10 R3(config-if)#no shut
11 R3(config-if)#router eigrp 100
12 R3(config-router)#net 0.0.0.0
13 R3(config-router)#end
14 R3#

配置完成后查看R1路由表:

1 R1#show ip route
2
3 1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
4 C 1.1.1.0/24 is directly connected, Loopback0
5 D 1.0.0.0/8 is a summary, 00:07:03, Null0
6 D 2.0.0.0/8 [90/2297856] via 12.1.1.2, 00:03:10, Serial0/0
7 D 3.0.0.0/8 [90/156160] via 13.1.1.3, 00:03:10, FastEthernet1/0
8 D 23.0.0.0/8 [90/2172416] via 13.1.1.3, 00:03:10, FastEthernet1/0
9 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
10 C 12.1.1.0/24 is directly connected, Serial0/0
11 D 12.0.0.0/8 is a summary, 00:05:02, Null0
12 13.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
13 C 13.1.1.0/24 is directly connected, FastEthernet1/0
14 D 13.0.0.0/8 is a summary, 00:07:04, Null0
15 R1#
16
17 /*注意,路由表中去往23.0.0.0/8的路径只显示了一条,而RIP则会显示两条,因为RIP仅仅通过
跳数去判断路径的好坏,而EIGRP使用复合度量值,默认和带宽和延时有关,前面已经说明。*/
实际上去往23.0.0.0/8的路径还有一条可行后继,即通过R1,可以通过查看R1上针对23.0.0.0/8的拓扑数据库看到另
外一条可行后继:

1 R1#show ip eigrp topology 23.0.0.0


2 IP-EIGRP (AS 100): Topology entry for 23.0.0.0/8
3 State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2172416
4 Routing Descriptor Blocks:
5
6 /*这一条是后继路由*/
7 13.1.1.3 (FastEthernet1/0), from 13.1.1.3, Send flag is 0x0
8 Composite metric is (2172416/2169856), Route is Internal
9 Vector metric:
10 Minimum bandwidth is 1544 Kbit
11 Total delay is 20100 microseconds
12 Reliability is 255/255
13 Load is 1/255
14 Minimum MTU is 1500
15 Hop count is 1
16
17 /*这一条是可行后继*/
18 12.1.1.2 (Serial0/0), from 12.1.1.2, Send flag is 0x0
19 Composite metric is (2681856/2169856), Route is Internal
20 Vector metric:
21 Minimum bandwidth is 1544 Kbit
22 Total delay is 40000 microseconds
23 Reliability is 255/255
24 Load is 1/255
25 Minimum MTU is 1500
26 Hop count is 1
27 R1#

可以使用下面的方法让去往23.0.0.0/8的数据能够很好的被分配到两条线路上:

我们使用上面拓扑数据中最大的可行后继的度量值(本例只有一个可行后继度量值是2681856)除以后继路径的度量
值(2172416),取不小于结果的整数:

2681856/2172416≈1.234 , 所以取值等于2作为不等价因子来配置非等值负载均衡:

1 R1(config)#router eigrp 100


2 R1(config-router)#variance 2 /*配置非等值负载均衡*/
3 R1(config-router)#end
4 R1#
5
6 /*再次查看R1路由表,发现23.0.0.0/8出现了两条路径*/
7 R1#show ip route
8
9 1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
10 C 1.1.1.0/24 is directly connected, Loopback0
11 D 1.0.0.0/8 is a summary, 00:00:42, Null0
12 D 2.0.0.0/8 [90/2297856] via 12.1.1.2, 00:00:42, Serial0/0
13 D 3.0.0.0/8 [90/156160] via 13.1.1.3, 00:00:42, FastEthernet1/0
14 D 23.0.0.0/8 [90/2172416] via 13.1.1.3, 00:00:42, FastEthernet1/0
15 [90/2681856] via 12.1.1.2, 00:00:42, Serial0/0
16 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
17 C 12.1.1.0/24 is directly connected, Serial0/0
18 D 12.0.0.0/8 is a summary, 00:00:43, Null0
19 13.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
20 C 13.1.1.0/24 is directly connected, FastEthernet1/0
21 D 13.0.0.0/8 is a summary, 00:00:43, Null0
22 R1#

这里用到的不等价因子2,代表度量值小于“可行距离*2”且报告距离小于可行距离的路径可以进入路由表,可以使用下
面的命令来验证这一点:

1 /*
2 * 这条命令可以显示所有的路由链路,即使不满足可行条件的也会显示出来
3 * 可以看到2.0.0.0/8、3.0.0.0/8,
4 * 他们的第二条链路的度量值也小于"可行距离*2",
5 * 但是这两条链路不满足可行条件,所以不能进入路由表。
6 */
7 R1#show ip eigrp topology all-links
8
9 P 1.0.0.0/8, 1 successors, FD is 128256, serno 6
10 via Summary (128256/0), Null0
11 P 1.1.1.0/24, 1 successors, FD is 128256, serno 3
12 via Connected, Loopback0
13 P 2.0.0.0/8, 1 successors, FD is 2297856, serno 10
14 via 12.1.1.2 (2297856/128256), Serial0/0
15 via 13.1.1.3 (2300416/2297856), FastEthernet1/0
16 P 3.0.0.0/8, 1 successors, FD is 156160, serno 14
17 via 13.1.1.3 (156160/128256), FastEthernet1/0
18 via 12.1.1.2 (2809856/2297856), Serial0/0
19 P 12.0.0.0/8, 1 successors, FD is 2169856, serno 8
20 via Summary (2169856/0), Null0
21 P 12.1.1.0/24, 1 successors, FD is 2169856, serno 7
22 via Connected, Serial0/0
23 P 13.0.0.0/8, 1 successors, FD is 28160, serno 5
24 via Summary (28160/0), Null0
25 P 13.1.1.0/24, 1 successors, FD is 28160, serno 2
26 via Connected, FastEthernet1/0
27 P 23.0.0.0/8, 1 successors, FD is 2172416, serno 13
28 via 13.1.1.3 (2172416/2169856), FastEthernet1/0
29 via 12.1.1.2 (2681856/2169856), Serial0/0

* EIGRP手动汇总

EIGRP和RIP一样,默认在主类网络的边界自动汇总,我们来看下面这个实例:

R1配置:

1 R1(config)#int lo 0
2 R1(config-if)#ip add 12.1.2.1 255.255.255.128
3 R1(config-if)#no shut
4 R1(config-if)#int s 0/0
5 R1(config-if)#ip add 12.1.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#router eigrp 100
8 R1(config-router)#net 12.1.1.0 0.0.0.255
9 R1(config-router)#net 12.1.2.0 0.0.0.127
10 R1(config-router)#end
11 R1#

R2配置:

1 R2(config)#int lo 0
2 R2(config-if)#ip add 2.2.0.1 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 1
5 R2(config-if)#ip add 2.2.1.1 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int s 0/1
8 R2(config-if)#ip add 12.1.1.2 255.255.255.0
9 R2(config-if)#no shut1
10 R2(config-if)#router eigrp 100
11 R2(config-router)#net 0.0.0.0
12 R2(config-router)#end
13 R2#

配置完成后分别查看R1和R2的路由表:

1 /*
2 * 可以看到R1的路由表中2.0.0.0/8是R2汇总后发送过来的条目
3 * R2在将自己的Lo0和Lo1从s0/1向外发送的时候,
4 * 发现发送的接口s0/1的IP是12.1.1.2,默认的主类网络是12.0.0.0/8,
5 * 这和Lo0和Lo1的默认主类网络(2.0.0.0/8)不同,
6 * 所以R2在自己的s0/1自动汇总这两条路由成2.0.0.0/8发送给R1。
7 */
8 R1#show ip route
9
10 D 2.0.0.0/8 [90/2297856] via 12.1.1.2, 00:00:53, Serial0/0
11 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
12 C 12.1.1.0/24 is directly connected, Serial0/0
13 C 12.1.2.0/25 is directly connected, Loopback0
14 R1#
15
16 /*
17 * 与RIP不同的是,EIGRP自动汇总后,会在本地产生一条指向空接口的汇总路由
18 *
19 * "2.0.0.0/8 is a summary, 00:02:59, Null0",
20 * 是Lo0和Lo1在本地s0/1汇总时产生的。
21 *
22 * "12.0.0.0/8 is a summary, 00:02:59, Null0",
23 * 是R2将自己的s0/1接口路由和从R2接收到的12.1.2.0/25,
24 * 从Lo0和Lo1发送出去时的汇总路由。
25 *
26 * "12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:00:50, Serial0/1"
27 * 这一条从R1发过来的路由没有被汇总的原因是,
28 * R1的发送接口s0/0(12.1.1.1)的默认主类网络地址12.0.0.0/8,
29 * 和这条被发送的路由条目的默认主类网络地址相同,
30 * 自动汇总只发生在主类网络边界。并且从这里可以看出EIGRP支持VLSM。
31 */
32 R2#show ip route
33
34 2.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
35 C 2.2.0.0/24 is directly connected, Loopback0
36 C 2.2.1.0/24 is directly connected, Loopback1
37 D 2.0.0.0/8 is a summary, 00:02:59, Null0
38 12.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
39 C 12.1.1.0/24 is directly connected, Serial0/1
40 D 12.0.0.0/8 is a summary, 00:02:59, Null0
41 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:00:50, Serial0/1
42 R2#

关于上面的R2的路由表中“12.0.0.0/8 is a summary, 00:02:59, Null0”这条汇总条目是没有必要的,因为是R2向自己的


回环接口发送EIGEP分组的时候产生的汇总路由,可以使用下面的命令将回环接口设置成被动接口,即不发送分组,
来减小路由表大小:

1 /*将回环接口设置成被动接口*/
2 R2(config)#router eigrp 100
3 R2(config-router)#passive-interface lo 0
4 R2(config-router)#passive-interface lo 1
5 R2(config-router)#end
6
7 /*再次查看R2的路由表,就看不到12.0.0.0/8的汇总路由了*/
8 R2#show ip route
9
10 2.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
11 C 2.2.0.0/24 is directly connected, Loopback0
12 C 2.2.1.0/24 is directly connected, Loopback1
13 D 2.0.0.0/8 is a summary, 00:18:02, Null0
14 12.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
15 C 12.1.1.0/24 is directly connected, Serial0/1
16 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:15:53, Serial0/1
17 R2#

接下来,关闭EIGRP的自动汇总,使用手动汇总:

1 /*关闭R1的自动汇总*/
2 R1(config)#router eigrp 100
3 R1(config-router)#no auto-summary
4
5 /*关闭R2的自动汇总*/
6 R2(config)#router eigrp 100
7 R2(config-router)#no auto-summary
8
9 /*
10 * 关闭汇总后查看R1和R2的路由表
11 * R1上的2.0.0.0/8汇总路由变成了两条明细路由,
12 * 所有的指向空接口的条目消失了
13 */
14 R1#show ip route
15
16 2.0.0.0/24 is subnetted, 2 subnets
17 D 2.2.0.0 [90/2297856] via 12.1.1.2, 00:00:06, Serial0/0
18 D 2.2.1.0 [90/2297856] via 12.1.1.2, 00:00:06, Serial0/0
19 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
20 C 12.1.1.0/24 is directly connected, Serial0/0
21 C 12.1.2.0/25 is directly connected, Loopback0
22
23 R2#show ip route
24
25 2.0.0.0/24 is subnetted, 2 subnets
26 C 2.2.0.0 is directly connected, Loopback0
27 C 2.2.1.0 is directly connected, Loopback1
28 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
29 C 12.1.1.0/24 is directly connected, Serial0/1
30 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:25:08, Serial0/1
31
32 /*在R2上使用手动汇总将Lo0和Lo1汇总成一条*/
33 R2(config)#int s 0/1 /*手动汇总是在主类网络的边界接口上配置的*/
34 R2(config-if)#ip summary-address eigrp 100 2.2.0.0 255.255.254.0
35 R2(config-if)#end
36 R2#
37
38 /*再次查看R1和R2的路由表*/
39 R1#show ip route
40
41 2.0.0.0/23 is subnetted, 1 subnets /*汇总后发过来的条目*/
42 D 2.2.0.0 [90/2297856] via 12.1.1.2, 00:01:32, Serial0/0
43 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
44 C 12.1.1.0/24 is directly connected, Serial0/0
45 C 12.1.2.0/25 is directly connected, Loopback0
46 R1#
47
48 /*手动汇总后R2上自动生成了一条汇总路由,指向空接口*/
49 R2#show ip route
50
51 2.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
52 C 2.2.0.0/24 is directly connected, Loopback0
53 D 2.2.0.0/23 is a summary, 00:02:20, Null0
54 C 2.2.1.0/24 is directly connected, Loopback1
55 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
56 C 12.1.1.0/24 is directly connected, Serial0/1
57 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:30:19, Serial0/1
58 R2#

* EIGRP外部路由

接着上面的实验,在R1上新增一个Loopback1,IP地址设置成1.1.1.1/24 :

1 R1(config)#int lo 1
2 R1(config-if)#ip add 1.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#end
5 R1#

这个时候在R2上查看路由表,看不到R1的回环接口lo1的条目,这是因为前面配置的时候,并没有使用net 0.0.0.0宣
告全部的接口,这里要使用路由重发布技术,将R1的lo1接口发布进EIGRP,R1配置如下:

1 R1(config)#router eigrp 100


2 R1(config-router)#redistribute connected /*重发布直连路由*/
3 R1(config-router)#end
4 R1#
5
6 /*
7 * 在R2上查看路由表,发现一条D EX开头的条目,
8 * “D EX”表示这条路由条目是EIGRP外部路由,不是起源EIGRP内部,
9 * 可能是用重发布发布进EIGRP进程的,EIGRP外部路由默认管理距离是170。
10 */
11 R2#show ip route
12
13 1.0.0.0/24 is subnetted, 1 subnets
14 D EX 1.1.1.0 [170/2297856] via 12.1.1.1, 00:00:51, Serial0/1
15 2.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
16 C 2.2.0.0/24 is directly connected, Loopback0
17 D 2.2.0.0/23 is a summary, 00:13:00, Null0
18 C 2.2.1.0/24 is directly connected, Loopback1
19 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
20 C 12.1.1.0/24 is directly connected, Serial0/1
21 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:40:59, Serial0/1
22 R2#
23
24 /*可以在拓扑表中看到这条外部路由的详细信息*/
25 R2#show ip eigrp topology 1.1.1.0/24
26 IP-EIGRP (AS 100): Topology entry for 1.1.1.0/24
27 State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2297856
28 Routing Descriptor Blocks:
29 12.1.1.1 (Serial0/1), from 12.1.1.1, Send flag is 0x0
30 /*Route is External,这是一条外部路由*/
31 Composite metric is (2297856/128256), Route is External
32 Vector metric:
33 Minimum bandwidth is 1544 Kbit
34 Total delay is 25000 microseconds
35 Reliability is 255/255
36 Load is 1/255
37 Minimum MTU is 1500
38 Hop count is 1
39 External data:
40 Originating router is 12.1.2.1
41 AS number of route is 0
42 /*External protocol is Connected,重发布的是外部直连路由*/
43 External protocol is Connected, external metric is 0
44 Administrator tag is 0 (0x00000000)
45 R2#

* EIGRP重发布默认路由

可以使用相同的方法重发布一条外部默认路由,在R1上配置一条默认路由,然后再将这条默认路由使用静态路由的形式
重发布到EIGRP进程里:

1 R1(config)#ip route 0.0.0.0 0.0.0.0 lo1 /*所有未知数据从lo1接口发出*/


2 R1(config)#router eigrp 100
3 R1(config-router)#redistribute static /*重发布静态路由*/
4 R1(config-router)#end
5 R1#
6
7 /*在R2上查看路由表,可以看到来自外部的默认路由"D*EX"*/
8 R2#show ip route
9
10 Gateway of last resort is 12.1.1.1 to network 0.0.0.0
11
12 1.0.0.0/24 is subnetted, 1 subnets
13 D EX 1.1.1.0 [170/2297856] via 12.1.1.1, 00:15:54, Serial0/1
14 2.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
15 C 2.2.0.0/24 is directly connected, Loopback0
16 D 2.2.0.0/23 is a summary, 00:28:03, Null0
17 C 2.2.1.0/24 is directly connected, Loopback1
18 12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
19 C 12.1.1.0/24 is directly connected, Serial0/1
20 D 12.1.2.0/25 [90/2297856] via 12.1.1.1, 00:56:02, Serial0/1
21 D*EX 0.0.0.0/0 [170/2297856] via 12.1.1.1, 00:00:05, Serial0/1

* EIGRP验证

EIGRP配置验证的模式和RIPv2协议一样,在全局配置模式下创建密钥链,在接口中调用密钥链并且制定验证模式,接
着上面的实验,在R1和R2之间,使用MD5验证:

1 /*R1配置验证*/
2 R1(config)#key chain ccnakey1 /*密钥链标识ccnakey1,只具有本地意义*/
3 R1(config-keychain)#key 1
4 R1(config-keychain-key)#key-string eigrp123456 /*密钥密码,双方需要相同*/
5 R1(config-keychain-key)#int s 0/0 /*在和R2相连的接口上调用密钥链,并指MD5加密。*/
6 R1(config-if)#ip authentication key-chain eigrp 100 ccnakey1
7 R1(config-if)#ip authentication mode eigrp 100 md5
8 R1(config-if)#end
9 R1#
10
11 /*R2配置验证*/
12 R2(config)#key chain ccnakey2
13 R2(config-keychain)#key 1
14 R2(config-keychain-key)#key
15 R2(config-keychain-key)#key-string eigrp123456
16 R2(config-keychain-key)#int s 0/1
17 R2(config-if)#ip authentication mode eigrp 100 md5
18 R2(config-if)#ip authentication key-chain eigrp 100 ccnakey2
19 R2(config-if)#end
20 R2#

配置完成后,R1和R2邻居关系将重新建立,并且能够交互信息。大家可以将两边的密钥密码配置的不相同,看看它
们可不可以交互信息。

* EIGRP性能调整

默认情况下EIGRP使用接口50%的带宽来传递EIGRP信息,可以使用下面的命令来更改EIGRP默认的接口带宽占用
率:

1 /*将R1的s0/0接口的EIGRP带宽占用率调整成5%*/
2 R1(config)#int s 0/0
3 R1(config-if)#ip bandwidth-percent eigrp 100 5

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十八]OSPF协议详解
发表于 2012 年 11 月 4 日 由 晴刃

这篇文章主要介绍链路状态路由协议OSPF的特征、术语、包类型、邻居关系的建立、RID的选择、DR和BDR的选
举、度量值的计算、默认路由、验证等。

___________________________________________

文章目录

[*1*].链路状态路由协议概述
工作过程
优缺点
[*2*].OSPF概述和基本配置
特性
术语
包格式
包类型
邻居关系的建立过程
基本配置实例
Router ID选举规则
DR和BDR选举规则
度量值计算方法
[*3*].OSPF高级配置
验证实例
默认路由实例

___________________________________________

[*1*].链路状态路由协议概述

链路状态路由协议使用Dijkstra算法,也称SPF(Shortest Path First,最短路径优先)算法。常见的链路状态路由协


议有:OSPFv2、OSPFv3和IS-IS。这篇文章主要针对OSPFv2,OSPFv3是面向IPv6的且不兼容IPv4。

* 链路状态路由协议工作过程

1,每台路由器学习激活的直接相连的网络。
2,每台路由器和直接相连的路由器互交,发送Hello报文,建立邻居关系。
3,每台路由器构建包含直接相连的链路状态的LSA(Link-State Advertisement,链路状态通告)。链路状态通
告(LSA)中记录了所有相关的路由器,包括邻路由器的标识、链路类型、带宽等。
4,每台路由器泛洪链路状态通告(LSA)给所有的邻路由器,并且自己也在本地储存邻路由发过来的LSA,然后再将
收到的LSA泛洪给自己的所有邻居,直到在同一区域中的所有路由器收到了所有的LSA。每台路由器在本地数据库中
保存所有收到的LSA副本,这个数据库被称作“链路状态数据库(LSDB,Link-State Database)”
5,每台路由器基于本地的“链路状态数据库(LSDB)”然后执行“最短路径优先(SPF)”算法,并以本路由器为根,生成
一个SPF树,基于这个SPF树计算去往每个网络的最短路径,也就得到了最终的路由表。

下图演示了链路状态路由协议路由表的生成过程:

* 链路状态路由协议优缺点

优点: 运行链路状态路由协议的路由器通过LSA的交换,最后独立的计算出到每个网络的最短路径,相对距离矢量路由
具有更强的全局观念;收到邻居的LSA后立即泛洪,并且本路由再执行SPF算法,比距离矢量路由有更高的收敛速度
(EIGRP除外,EIGRP是高级距离矢量路由协议有更快的收敛速度);当检测到拓扑发生变化时立即发送更新;多区
域设计,可以将一些问题限制在较小的区域中。

缺点: 内存需求高,需要更强的CPU的支持,在网络初始化时,大量链路状态包泛洪,会影响网络的可用带宽。

[*2*].OSPF概述和基本配置

OSPF(Open Shortest Path First,开放最短路径优先)是一个被各厂商设备广泛支持的链路状态路由协议。

* OSPF特性

OSPF执行IETF标准,IETF标准被不同厂商的设备所支持;执行SPF算法,不会产生环路;支持VLSM和CIDR;可以
用于大型网络;层次型设计,易扩展;区域化设计,减小路由更新给设备带来的负担;快速收敛,使用触发式更新;
支持针对区域和链路的验证。执行OSPF的路由默认每隔30分钟会泛洪一次链路状态通告(LSA),称为链路状态刷新
(并非周期性更新);当一条LSA被接收并被储存到链路状态数据库中后,路由器会给这条记录增加一个老化时间标
识,默认是一小时,所以为了防止一些正常的LSA被清除,始发这条LSA的路由会每隔30分钟泛洪一次这条LSA的一
个新拷贝。
* OSPF术语

链路(Link):当一个接口加入OSPF进程,就被当做是OSPF的一条链路。
链路状态(Link-State):包括接口的IP、子网、网络类型、链路花费、链路上的邻居等。
路由器ID(Router ID,简称RID):RID是一个用来标识路由器的IP地址,可以在OSPF路由进程中手工指定;如
果没有指定,路由器默认选择回环接口中最高的IP作为RID;如果没有回环地址,路由器使用所有激活的物理接
口中最高的IP作为RID。
邻居(Neighbor):两台或多台路由连接在一个公共的网络上,如两台路由通过串行线路相连,多台路由通过以
太网相连。
邻接(Adjacency):邻接是两台路由器之间的关系,OSPF只与建立了邻接关系的邻居共享路由信息。
区域(Area):OSPF通过划分区域来实现分层设计,跨越两个或两个以上区域的路由被称作ABR(Area Border
Router,区域边界路由)。所有的区域都和“Area 0”相连,“Area 0”被称作骨干区域,骨干区域路由器具有整个
自制系统中所有路由条目,LSA的扩散仅限制在区域内,通过划分多个区域可以减小LSA扩散过程中对硬件的负
担。
指定路由器(Designated Router,简称RD):当OSPF链路被连接到多路访问的网络中时,需要选择一台指定路由
器(DR),每台路由器都把拓扑变化发给DR和BDR,然后由DR通知该多路访问网络中的其他路由器。
备用的指定路由器(Backup Designated Router,简称BDR):当DR发生故障的时候,BDR转变成DR,接替DR个工
作。
花费(Cost):OSPF中使用的唯一度量值,使用链路的带宽计算得来。

* OSPF包格式

OSPF和EIGRP一样,也被设计成一个网络层协议,协议号89。包格式如下图:

各部分解释如下:

数据链路层头部: OSPF使用的组播IP地址是224.0.0.5(非DR和BDR路由使用的地址)
和224.0.0.6(DR和BDR使用的组播地址),这两个组播地址对应的MAC地址分别为”01-00-5E-00-00-05″和”01-
00-5E-00-00-06″。
包头部:协议号是89,源IP是发送路由的IP,目的IP是组播IP地址224.0.0.5或224.0.0.6。
OSPF头部:包括路由ID和所在的区域号、包的类型代码(5种类型的包代码)。
OSPF包对应的数据:每种包有每种包具体的内容。

* OSPF包类型

1,Hello包

Hello报文用来建立和维护OSPF路由器间的邻接关系,它的主要作用是:发现OSPF邻居,建立和维护邻接关系;在多
路访问中选择DR和BDR。OSPF泛洪链路状态通告给其他路由前需要先建立邻接关系,通过在OSPF协议的接口上发
送Hello报文判断是否有其他OSPF路由器运行在相同的链路上。

双方要建立邻接关系,Hello报文中的区域号、Hello间隔和死亡间隔、验证(如果有)以及区域类型都要一致。在广
播(如以太网)和点对点链路(如串行线路)中,Hello间隔默认是10秒;死亡时间默认是Hello间隔的4倍(40秒);
非广播多路访问(NBMA),比如帧中继网络中默认Hello间隔是30秒。

可以通过下面的命令修改默认的Hello时间和死亡时间:

1 /*修改串行线路s0/0的Hello间隔为5秒,死亡间隔为20秒。*/
2 Router(config)#int s 0/0
3 Router(config-if)#ip ospf hello-interval 5
4 Router(config-if)#ip ospf dead-interval 20
5 Router(config-if)#end
6 Router#

2,DBD(Database Description,数据库状态描述包)DBD包是发送端对自己链路状态数据库的一个简短描述,接收
路由器根据接收到的DBD包对比自己的链路状态数据库,检测发送端和接收端的链路状态数据库是否同步。

3,LSR(Link-State Request,链路状态请求包)接收端可以发送LSA来请求接收到的DBD中的某些详细信息。

4,LSU(Link-State Update,链路状态更新包)LSU用来更新OSPF路由信息,回复LSR请求。

5,LSAck(Link-State Acknowledgement,链路状态确认)当收到一个LSU,路由器发送LSAck确认。

* OSPF邻居关系的建立过程

OSPF中邻居建立过程演示图如下:
Down: OSPF初始状态,还没有开始交换信息。
Init: 交换信息初期,表示已经收到了邻居的Hello报文,但是报文中没有列出本路由的RID,也就是说对方还没有
收到本路由发出的Hello报文。
Two-Way: 双向阶段,双方都收到了对方发送的Hello报文,建立了邻居关系。在多路访问的网络中,两个接口
状态是DROther的路由器之间将停留在此状态,其他情况将继续转入高级状态。在此状态下的路由器是不能共享
路由信息的,想共享路由信息,必须建立邻接关系。(注意邻居关系和邻接关系的区别)
Exstart: 准备开始交换阶段,双方通过Hello报文决定主从关系,最高RID的路由将成为主路由,最先发起交换。
主从关系确立后进入下一个阶段。
Exchange: 开始交换阶段,路由器将本地的”路由状态数据库(LSDB)”用”数据库描述(DBD)”报文来描述,然后发
给邻路由。如果这个阶段中的路由收到不在其数据库中的有关链路的信息,那么在下一个阶段中将请求对方发送
该路由条目的完整信息。
Loading: 加载阶段,路由器通过发送”链路状态请求(LSR)”,来向邻居请求一些路由条目的详细信息。邻居则会使
用”链路状态更新包(LSU)”来回复LSR请求,收到邻居发回的LSU后,再发送LSAck向发送LSU的路由进行确
认。
FULL: 完全邻接状态,Loading结束后,路由器之间就变成了”Full adjacency”。

* OSPF基本配置实例

使用OSPF配置下面的拓扑:

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int lo 0
5 R1(config-if)#ip add 1.1.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#int fa 1/0
8 R1(config-if)#ip add 123.1.1.1 255.255.255.0
9 R1(config-if)#no shut
10 R1(config-if)#router ospf 1 /*启用OSPF进程,进程号1只具有本地意义。*/
11 R1(config-router)#net 123.1.1.0 0.0.0.255 area 0
12 R1(config-router)#net 1.1.1.0 0.0.0.255 area 0
13 R1(config-router)#net 12.1.1.0 0.0.0.255 area 0
14 R1(config-router)#end
15 R1#
16
17 /*
18 * “router ospf 1”中的OSPF进程号1,只具有本地意义,每个路由可以不同,
19 * “net 123.1.1.0 0.0.0.255 area 0”OSPF网络的宣告使用反掩码形式,
20 * 最后的“area 0”是OSPF区域号,同一个区域里的路由器区域号要保持一致,
21 * CCNA中只涉及区域0,也就是骨干区域的配置。
22 * 其实这里还可以使用下面这条命令,一次性将路由上的所有接口都宣告进OSPF进程:
23 * “net 0.0.0.0 255.255.255.255 area 0”
24 */

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int lo 0
5 R2(config-if)#ip add 2.2.2.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#int fa 1/0
8 R2(config-if)#ip add 123.1.1.2 255.255.255.0
9 R2(config-if)#no shut
10 R2(config-if)#router ospf 2
11 R2(config-router)#net 0.0.0.0 255.255.255.255 area 0
12 R2(config-router)#end
13 R2#
14
15 /*“net 0.0.0.0 255.255.255.255 area 0”将R2上的所有接口都发布进OSPF进程*/

R3配置:

1 R3(config)#int fa 1/0
2 R3(config-if)#ip add 123.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int lo 0
5 R3(config-if)#ip add 3.3.3.3 255.255.255.0
6 R3(config-if)#no shut
7 R3(config-if)#int lo 1
8 R3(config-if)#ip add 33.3.3.3 255.255.255.0
9 R3(config-if)#no shut
10 R3(config-if)#router ospf 3
11 R3(config-router)#net 123.1.1.0 0.0.0.255 area 0
12 R3(config-router)#net 3.3.3.0 0.0.0.255 area 0
13 R3(config-router)#end
14 R3#
15
16 /*R3并没有将Lo1接口宣告进OSPF进程*/
17
18 /*
19 * 对于OSPF的宣告下面还有几种不规范形式,但可以使用:
20 *
21 * "net 123.1.1.1 0.0.0.0 area 0"
22 * 指定仅有一个IP(123.1.1.1)宣告进OSPF进程。
23 *
24 * "net 123.1.1.0 255.255.255.0 area 0",
25 * 这条命令同"net 123.1.1.0 0.0.0.255 area 0"效果相同。
26 *
27 * "net 0.0.0.0 0.0.0.0 area 0",
28 * 这条命令同"net 0.0.0.0 255.255.255.255 area 0"效果相同。
29 *
30 * 上面几种格式都能被正确识别,但是最好使用规范格式。
31 */

1,配置完成后查看路由表:

1 /*
2 * 查看R1的路由表,显示如下:
3 * 可以看到R1学习到了R2和R3上面的回环接口的IP地址,
4 * 因为R3的Lo1并没有宣告进OSPF进程,所以这里没有33.3.3.3这个地址。
5 * “O”表示是从OSPF学习到的路由条目。
6 */
7 R1#show ip route
8
9 1.0.0.0/24 is subnetted, 1 subnets
10 C 1.1.1.0 is directly connected, Loopback0
11 2.0.0.0/32 is subnetted, 1 subnets
12 O 2.2.2.2 [110/2] via 123.1.1.2, 00:15:04, FastEthernet1/0
13 3.0.0.0/32 is subnetted, 1 subnets
14 O 3.3.3.3 [110/2] via 123.1.1.3, 00:15:04, FastEthernet1/0
15 123.0.0.0/24 is subnetted, 1 subnets
16 C 123.1.1.0 is directly connected, FastEthernet1/0
17 12.0.0.0/24 is subnetted, 1 subnets
18 C 12.1.1.0 is directly connected, Serial0/0
19 R1#

在OSPF中所有的回环接口都被自动宣告成32位的主机路由”/32″,如果想显示回环接口的实际子网掩码,可以使用下
面的命令:

1 /*在R1、R2、R3宣告进OSPF的回环接口上执行下面的命令*/
2 R1(config)#int lo 0
3 R1(config-if)#ip ospf network point-to-point

执行完成后,再次查看路由表就会发现所有回环接口的子网掩码都变成了实际的子网掩码。

2,查看OSPF邻居表

1 R1#show ip ospf neighbor


2
3 Neighbor ID Pri State Dead Time Address Interface
4 2.2.2.2 0 FULL/ - 00:00:37 12.1.1.2 Serial0/0
5 2.2.2.2 1 FULL/BDR 00:00:37 123.1.1.2 FastEthernet1/0
6 33.3.3.3 1 FULL/DROTHER 00:00:31 123.1.1.3 FastEthernet1/0
7 R1#
8
9 /*
10 * Neighbor ID: 邻居的RID,通过上面的输出可以看到R2的RID是2.2.2.2
11 * R3的RID是33.3.3.3,R1和R2通过不同的接口(以太网和串行线路),
12 * 建立了两次邻居关系。
13 *
14 * Pir: OSPF邻居接口的优先级,接口优先级用于DR和BDR的选举,
15 * 以太网接口接口的默认优先级是1,串行线路不需要选举DR和BDR,
16 * 所以上面显示中和串行线路建立的那条邻接关系的优先级是0,
17 * 0代表不参与选举。
18 *
19 * State: 邻居路由器的状态,FULL代表已经建立邻接关系,
20 * 斜杠"/"后面是选举的DR或BDR标识,因为串行线路不需要选举,所以是"-",
21 * "FULL/BDR"表示R2是BDR,R3是DROTHER,除了DR和BDR的其余路由器都是DROTHER。
22 * 所以R1自己就是DR了。稍后会介绍DR和BDR的选举过程。
23 *
24 * Dead time: 默认的死亡时间是hello时间的4倍,即40秒。
25 * 死亡时间是一个倒计时,计时器为0时,该邻居被删除。
26 *
27 * Address: 邻居直连接口的IP地址。
28 *
29 * Interface: 本路由的外出接口。
30 */

3,查看OSPF拓扑表

1 R1#show ip ospf database


2
3 OSPF Router with ID (1.1.1.1) (Process ID 1)
4
5 Router Link States (Area 0)
6
7 Link ID ADV Router Age Seq# Checksum Link count
8 1.1.1.1 1.1.1.1 1087 0x80000006 0x0096BA 4
9 2.2.2.2 2.2.2.2 486 0x80000004 0x001832 4
10 33.3.3.3 33.3.3.3 953 0x80000004 0x00358D 2
11
12 Net Link States (Area 0)
13
14 Link ID ADV Router Age Seq# Checksum
15 123.1.1.1 1.1.1.1 292 0x80000003 0x00304B
16 R1#
17
18 /*在同一个区域中的所有路由器的OSPF拓扑表都是相同的*/

* OSPF ROUTER ID选举规则

Router ID简称RID,用来唯一标示OSPF网络中的每一台路由器。如果两条OSPF路由器的RID一样,彼此间无法建立
邻接关系。RID是以IP地址的形式出现的,按照下面的顺序来选举RID:

1,Router-id 配置命令最优先

首先在R3上查看一下默认选举出来的RID:

1 R3#show ip protocols
2 Routing Protocol is "ospf 3"
3 Outgoing update filter list for all interfaces is not set
4 Incoming update filter list for all interfaces is not set
5 Router ID 33.3.3.3 /*默认选出来的RID是lo1接口的IP*/
6 Number of areas in this router is 1. 1 normal 0 stub 0 nssa
7 Maximum path: 4
8 Routing for Networks:
9 3.3.3.0 0.0.0.255 area 0
10 123.1.1.0 0.0.0.255 area 0
11 Reference bandwidth unit is 100 mbps
12 Routing Information Sources:
13 Gateway Distance Last Update
14 2.2.2.2 110 01:11:14
15 1.1.1.1 110 01:11:14
16 Distance: (default is 110)

下面手工配置Router ID:

1 R3(config)#router ospf 3
2 R3(config-router)#router-id 8.8.8.8 /*使用命令将RID配置成8.8.8.8*/
3 Reload or use "clear ip ospf process" command, for this to take effect
4 /*路由器提示需要重启OSPF进程来使更改生效*/
5 R3(config-router)#end
6 R3#clear ip ospf process /*重启OSPF进程*/
7 Reset ALL OSPF processes? [no]: y /*输入y回车*/
8 R3#
9
10 /*再次查看协议,发现RID更改成了8.8.8.8*/
11 R3#show ip protocols
12 Routing Protocol is "ospf 3"
13 Outgoing update filter list for all interfaces is not set
14 Incoming update filter list for all interfaces is not set
15 Router ID 8.8.8.8
16 ......

从上面手动配置RID来看,RID可以是一个并不存在的IP地址,RID仅仅作为路由的标识,不用于寻址。

2,如果没有手动指定RID,路由器默认使用最大已激活的回环接口IP作为RID(注意,这个最大并不是接口号最打,
而是IP地址最大,比如33.3.3.3大于3.3.3.3)。

下面我们通过取消R3的手动RID配置,并且关闭Lo1接口,这个时候最大的已激活回环接口IP应该是lo0的3.3.3.3,重
启OSPF进程看看结果是否和预测的一样:

1 R3(config)#router ospf 3
2 R3(config-router)#no router-id /*删除手动RID配置*/
3 Reload or use "clear ip ospf process" command, for this to take effect
4 R3(config-router)#int lo 1
5 R3(config-if)#shutdown /*关闭Lo1,它将处于非激活状态*/
6 R3(config-if)#end
7 R3#clear ip ospf process
8 Reset ALL OSPF processes? [no]: y
9 R3#
10
11 /*再次查看协议,RID果然变成了3.3.3.3*/
12 R3#show ip protocols
13 Routing Protocol is "ospf 3"
14 Outgoing update filter list for all interfaces is not set
15 Incoming update filter list for all interfaces is not set
16 Router ID 3.3.3.3
17 ......

3,如果路由器没有激活的回环接口,路由器默认选择最大激活的物理接口的IP地址作为RID(同上,是接口的IP最
大,而不是接口号最大)。

下面我们关闭R3的lo0接口,再次重启OSPF进程,看看RID的变化情况:
1 R3(config)#int lo 0
2 R3(config-if)#shut
3 R3(config-if)#end
4 R3#clear ip ospf process
5 Reset ALL OSPF processes? [no]: y
6 R3#
7
8 /*关闭回环接口lo0后,再次查看协议*/
9
10 R3#show ip protocols
11 Routing Protocol is "ospf 3"
12 Outgoing update filter list for all interfaces is not set
13 Incoming update filter list for all interfaces is not set
14 Router ID 3.3.3.3
15
16 /*看到这里大家可能觉得奇怪,为什么还是回环接口的地址作为RID,回环地址明明已经全部关闭
了,下面使用手动配置RID然后再
17
18 删除手动配置的方法来让物理接口成为RID*/
19
20 R3#conf t
21 R3(config)#router ospf 3
22 R3(config-router)#router-id 5.5.5.5 /*首先手动配置一个RID*/
23 Reload or use "clear ip ospf process" command, for this to take effect
24 R3(config-router)#end
25 R3#clear ip ospf process /*重启OSPF进程*/
26 Reset ALL OSPF processes? [no]: y
27 R3#conf t
28 R3(config)#router ospf 3
29 R3(config-router)#no router-id /*接着清除这个手动配置的RID*/
30 Reload or use "clear ip ospf process" command, for this to take effect
31 R3(config-router)#end
32 R3#clear ip ospf process /*重启OSPF进程*/
33 Reset ALL OSPF processes? [no]: y
34 R3#
35
36 /*这时候再次查看协议,发现RID变成了最大激活的物理接口IP地址了*/
37 R3#show ip protocols
38 Routing Protocol is "ospf 3"
39 Outgoing update filter list for all interfaces is not set
40 Incoming update filter list for all interfaces is not set
41 Router ID 123.1.1.3

* OSPF DR和BDR选举规则

首先用下面的图来说明一下为什么多路访问的以太网中需要选举DR和BDR,选举它们有什么好处:
在上图的多路访问的网络中,如果没有选举DR和BDR,为了交互路由信息,每台路由器都需要和其他路由建立邻接
关系,就会有10个邻接关系,如果其中一台路由离开,要和所有的路由断开邻接关系,新的路由加入,也需要和所有路
由建立邻接关系,这样会影响收敛效率。

如果选举了DR和BDR,那么所有DROther路由器只需要和DR以及BDR建立邻接关系即可,DROther之间的关系停留
在Two-Way状态,如果网络上有路由条目更新,DROther向组播地址224.0.0.6发出,224.0.0.6是DR和BDR的组播地
址,DR接收到这个更新后,再用224.0.0.5组播地址向其他的DROhter发送LSA。这样不仅加快的网络收敛速度,也
节约了网络带宽的占用。

在多路访问网络中需要选举DR和BDR,比如广播型多路访问的网络以太网、令牌环网、FDDI;非广播型多路访问的
网络帧中继、X.25、SMDS。点对点或点对多点网络不需要选举,如PPP或HDLC封装的点对点线路。

DR和BDR选举规则:

1,OSPF路由器选择网络优先级最高的路由器为DR,接口优先级次高的路由器为BDR,以太网接口默认的优先级都
为1。
2,如果优先级相同,将使用RID最高的为DR,次高的为BDR。

按照上面的选举规则,我们来查看一下R3的邻居表:

1 /*发现R3的邻居表的显示中,并没有像我们想象的那样,反而R1是DR*/
2 R3#show ip ospf neighbor
3
4 Neighbor ID Pri State Dead Time Address Interface
5 1.1.1.1 1 FULL/DR 00:00:30 123.1.1.1 FastEthernet1/0
6 2.2.2.2 1 FULL/BDR 00:00:34 123.1.1.2 FastEthernet1/0

DR和BDR的选举在设计的时候考虑到网络的稳定性,并没有使用抢占机制。假设此时R1、R2、R3同时启动,因为
优先级都为1,所以按照路由的RID,应该R3成为DR,R2成为BDR,R1是DROther,但是前面的配置
中,R3的OSPF进程重新启动过,相当于DR离开,此时身为BDR的R2升级成为DR,而身为DROther的R1升级成
为BDR,如果此时R2也重启了进程,那么身为BDR的R1升级成为DR,身为DROther的R3升级成为BDR,R2变成
了DROther,而R3此时如果重启OSPF,R2将从DROther升级成为BDR,就出现了现在显示的这个样子。其实无非就
是一个顶替机制。DR离开BDR顶替DR,DROther再顶替BDR的位置。

可以通过下面让R3永远是DR:

1 /*将R1和R2的以太网的优先级调成0*/
2 R1(config)#int fa 1/0
3 R1(config-if)#ip ospf priority 0
4 R1(config-if)#end
5 R1#
6
7 R2(config)#int fa 1/0
8 R2(config-if)#ip ospf priority 0
9 R2(config-if)#end
10 R2#
11
12 /*查看R2的邻居表,发现和R1停留在了2WAY状态,R3是DR*/
13 R2#show ip ospf neighbor
14
15 Neighbor ID Pri State Dead Time Address Interface
16 1.1.1.1 0 2WAY/DROTHER 00:00:33 123.1.1.1 FastEthernet1/0
17 123.1.1.3 1 FULL/DR 00:00:36 123.1.1.3 FastEthernet1/0
18 1.1.1.1 0 FULL/ - 00:00:37 12.1.1.1 Serial0/1
19
20 /*查看R3的拓扑表,发现R1和R2都是DROther*/
21 R3#show ip ospf neighbor
22
23 Neighbor ID Pri State Dead Time Address Interface
24 1.1.1.1 0 FULL/DROTHER 00:00:34 123.1.1.1 FastEthernet1/0
25 2.2.2.2 0 FULL/DROTHER 00:00:36 123.1.1.2 FastEthernet1/0

这个时候如果R3出现了故障Down掉了,R1和R2将不能通过以太网正常的互交信息。另外必须强调一
点,DR和BDR的选举是基于接口的,比如一台路由器的某个接口可能在那个网段是DR,但是另外一个接口在另外一
个网段却是BDR或者DROther,这都是有可能的。

* OSPF度量值计算方法

OSPF中使用的度量值是“花费(Cost)”,默认OSPF使用100Mb/s作为参考带宽,使用100Mb/s除以实际链路带宽,
得出的值取整(对于小于0的结果,取1),就是花费。

比如串行线路的带宽是1.544M,快速以太网的带宽是100M:
串行线路的花费=100M/1.544≈64 (取整,且不四舍五入)
快速以太网线路花费=100M/100M=1

继续上面的实验,将R1和R2的快速以太网接口的优先级再次调整成1,并且开启R3的lo0接口,然后我们查
看R1的OSPF路由条目验证这一点:

1 /*仅显示OSPF条目*/
2 R1#show ip route ospf
3 2.0.0.0/24 is subnetted, 1 subnets
4 O 2.2.2.0 [110/2] via 123.1.1.2, 00:03:40, FastEthernet1/0
5 3.0.0.0/24 is subnetted, 1 subnets
6 O 3.3.3.0 [110/2] via 123.1.1.3, 00:03:40, FastEthernet1/0
7 R1#
8 /*
9 * 可以看到[110/2],110是OSPF的默认管理距离,2是花费,
10 * 去往2.2.2.0/24的花费是2,就是快速以太网的花费加上回环接口的花费,
11 * 因为回环接口的带宽非常高,用100M除会小于0,所以取1。
12 */

下面关闭R1的快速以太网接口,再次查看R1路由表:

1 R1(config)#int fa 1/0
2 R1(config-if)#shut
3 R1(config-if)#end
4 R1#
5
6 /*
7 * 发现数据都要经过串行线路,此时的花费变成了65,
8 * "3.3.3.0 [110/66]"这个66是串行线路花费64加上以太网花费1,再加上回环地址花费1。
9 */
10 R1#show ip route ospf
11 2.0.0.0/24 is subnetted, 1 subnets
12 O 2.2.2.0 [110/65] via 12.1.1.2, 00:00:05, Serial0/0
13 3.0.0.0/24 is subnetted, 1 subnets
14 O 3.3.3.0 [110/66] via 12.1.1.2, 00:00:05, Serial0/0
15 123.0.0.0/24 is subnetted, 1 subnets
16 O 123.1.1.0 [110/65] via 12.1.1.2, 00:00:05, Serial0/0
17 R1#

可以通过下面的方法修改计算花费的参考带宽:

1 R1(config)#router ospf 1
2 R1(config-router)#auto-cost reference-bandwidth 10000
3 % OSPF: Reference bandwidth is changed.
4 Please ensure reference bandwidth is consistent across all routers.
5 R1(config-router)#end
6 R1#
7 /*
8 * 将参考带宽改成10000M,
9 * 路由器提示我们,在所有的路由上都执行这条命令,让它们拥有相同的参考带宽。
10 */

将所有路由的参考带宽全部设置成10000M后,再次查看R1路由表:

1 R1#show ip route ospf


2 2.0.0.0/24 is subnetted, 1 subnets
3 O 2.2.2.0 [110/6477] via 12.1.1.2, 00:00:33, Serial0/0
4 3.0.0.0/24 is subnetted, 1 subnets
5 O 3.3.3.0 [110/6577] via 12.1.1.2, 00:00:33, Serial0/0
6 123.0.0.0/24 is subnetted, 1 subnets
7 O 123.1.1.0 [110/6576] via 12.1.1.2, 00:00:33, Serial0/0
8 R1#

这里拿去往3.3.3.0/24网络的6577举例计算花费:

R1和R2相连的串行链路花费=10000M/1.544M≈6476
R2去往R3中间是快速以太网线路,花费=10000M/100M=100
R3上的Lo1接口的花费=10000M/8000M≈1

所以最后结果就是这三条线路花费的综合,即6577。

可以通过下面的方法可以查看某接口的OSPF信息:

1 R1#show ip ospf interface s 0/0


2 Serial0/0 is up, line protocol is up
3 Internet Address 12.1.1.1/24, Area 0
4 Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_POINT, Cost: 64
5 Transmit Delay is 1 sec, State POINT_TO_POINT,
6 Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
7 oob-resync timeout 40
8 Hello due in 00:00:05
9 Supports Link-local Signaling (LLS)
10 Index 3/3, flood queue length 0
11 Next 0x0(0)/0x0(0)
12 Last flood scan length is 1, maximum is 1
13 Last flood scan time is 0 msec, maximum is 4 msec
14 Neighbor Count is 1, Adjacent neighbor count is 1
15 Adjacent with neighbor 2.2.2.2
16 Suppress hello for 0 neighbor(s)
17 R1#

[*3*].OSPF高级配置

* OSPF验证实例

OSPF链路的验证分为两种,一种明文验证,一种MD5验证,默认OSPF链路没有使用验证,在没有使用任何验证
前,通过下面的命令来查看一下R1的OSPF分组的接收情况:

1 R1#debug ip ospf packet


2 OSPF packet debugging is on
3 R1#
4 *Mar 1 03:44:54.507: OSPF: rcv. v:2 t:1 l:48 rid:2.2.2.2
5 aid:0.0.0.0 chk:E694 aut:0 auk: from Serial0/0
6
7 /*
8 * 这里我截取其中从R2上发过来OSPF报文,下面对各字段做出解释:
9 *
10 * v:2 表示OSPFv2版本。
11 * t:1 表示Type,即类型,类型1是Hello报文。
12 * l:48 长度Length是48。
13 * rid:2.2.2.2 发送整个报文的路由器的RID。
14 * aid:0.0.0.0 表示所在区域是0(area 0)。
15 * chk:E694 表示验证和。
16 * aut:0 表示验证,0表示空验证,1表示明文验证,1表示MD5验证。
17 * auk: 这一项是验证相关的内容,因为没有使用验证,这里什么都没有。
18 * from Serial0/0 表示从s0/0整个接口接收到的这个OSPF分组。
19 */

下面首先介绍OSPF明文验证配置,首先再次打开前面的试验中关闭的R1的fa1/0接口,然后在R1、R2、R3上配置验
证:
明文验证的配置步骤是:
1,在所有参与OSPF进程的接口上配置使用明文密码。
2,在OSPF进程中声明使用明文验证。

1 /*在每个参与OSPF进程的接口上配置明文密码"ccna1234"*/
2 R1(config)#int fa 1/0
3 R1(config-if)#ip ospf authentication-key ccna1234
4 R1(config-if)#int s 0/0
5 R1(config-if)#ip ospf authentication-key ccna
6 /*在OSPF进程中开启区域0的明文验证*/
7 R1(config-if)#router ospf 1
8 R1(config-router)#area 0 authentication
9 R1(config-router)#end
10 R1#
11
12 /*在R2上也开启明文验证,链路两端配置的密码必须相同*/
13 R2(config)#int fa 1/0
14 R2(config-if)#ip ospf authentication-key ccna1234
15 R2(config-if)#int s 0/1
16 R2(config-if)#ip ospf authentication-key ccna
17 R2(config-if)#router ospf 2
18 R2(config-router)#area 0 authentication
19 R2(config-router)#end
20 R2#
21
22 /*在R3上面开启明文验证*/
23 R3(config)#int fa 1/0
24 R3(config-if)#ip ospf authentication-key ccna1234
25 R3(config-if)#router ospf 3
26 R3(config-router)#area 0 authentication
27 R3(config-router)#end
28 R3#
29
30 /*
31 * 上面R1和R2的串行线路配置的密码都是"ccna",和多路访问的以太网接口的密码不一样,
32 * 这是允许的,只要两端的密码相同即可。
33 */

可以使用”debug ip ospf packet”来查看是否开启了验证:

1 R1#debug ip ospf packet


2 OSPF packet debugging is on
3 R1#
4 *Mar 1 04:13:24.546: OSPF: rcv. v:2 t:1 l:48 rid:2.2.2.2
5 aid:0.0.0.0 chk:E693 aut:1 auk: from Serial0/0
6
7 /*可以看到aut:1,说明开启了明文验证*/

这里试着取消将R1的fa1/0的明文验证,然后使用下面的命令查看路由器输出:

1 /*取消R1的fa1/0明文验证*/
2 R1(config)#int fa 1/0
3 R1(config-if)#no ip ospf authentication-key
4 R1(config-if)#end
5 R1#
6
7 /*查看邻接关系输出*/
8 R1#debug ip ospf adj
9 OSPF adjacency events debugging is on
10 R1#
11 *Mar 1 04:17:24.578: OSPF: Rcv pkt from 123.1.1.2, FastEthernet1/0 : Mismatch
Authentication Key - Clear Text
12 R1#u all
13 /*看到了不匹配的验证提示"Mismatch Authentication Key"*/

这里不需要将R1的fa1/0接口验证恢复,接着下面的实验,配置MD5验证(点对点线路两端必须配置相同的密码):

1 /*R1配置MD5验证*/
2 R1(config)#int s 0/0
3 R1(config-if)#no ip ospf authentication-key /*删除原来的明文验证*/
4 R1(config-if)#ip ospf message-digest-key 1 md5 ccna123 /*配置MD5验证*/
5 R1(config-if)#int fa 1/0 /*这个接口在上面的试验中已经删除了原来的明文验证*/
6 R1(config-if)#ip ospf message-digest-key 1 md5 ccna123456
7 R1(config-if)#router ospf 1
8 R1(config-router)#no area 0 authentication /*取消区域的明文验证*/
9 R1(config-router)#area 0 authentication message-digest /*使用MD5验证*/
10 R1(config-router)#end
11 R1#
12
13 /*R2配置MD5验证*/
14 R2(config)#int fa 1/0
15 R2(config-if)#no ip ospf authentication-key
16 R2(config-if)#ip ospf message-digest-key 1 md5 ccna123456
17 R2(config-if)#int s 0/1
18 R2(config-if)#no ip ospf authentication-key
19 R2(config-if)#ip ospf message-digest-key 1 md5 ccna123
20 R2(config-if)#router ospf 2
21 R2(config-router)#area 0 authentication message-digest /*可以直接这样覆盖明文验
证*/
22 R2(config-router)#end
23 R2#
24
25 /*R3配置MD5验证*/
26 R3(config)#int fa 1/0
27 R3(config-if)#no ip ospf authentication-key
28 R3(config-if)#ip ospf message-digest-key 1 md5 ccna123456
29 R3(config-if)#router ospf 3
30 R3(config-router)#area 0 authentication message-digest
31 R3(config-router)#end
32 R3#

配置完成后,查看debug输出:

1 R1#debug ip ospf packet


2 OSPF packet debugging is on
3 R1#
4 *Mar 1 04:32:14.582: OSPF: rcv. v:2 t:1 l:48 rid:2.2.2.2
5 aid:0.0.0.0 chk:0 aut:2 keyid:1 seq:0x3C7F02E8 from Serial0/0
6
7 /*可以看到"aut:2 keyid:1 seq:0x3C7F02E8",验证类型是MD5,以及其他参数。*/

此时拓扑中的所有路由都可以互交信息,并且是MD5加密模式。继续下面的实验,配置默认路由。

* OSPF默认路由实例
在R1上新建一个回环接口Lo1,IP设置成11.11.11.11,因为R1并没有将所有接口都发布到OSPF进程中,所以Lo1不会
被其他路由器学习到,下面将这个新增加的接口设置成R1的默认路由出口,并且宣告给其他路由:

1 R1(config)#int lo 1
2 R1(config-if)#ip add 11.11.11.11 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#exit
5 R1(config)#ip route 0.0.0.0 0.0.0.0 lo 1 /*假设这是去往ISP的*/
6 R1(config)#router ospf 1
7 R1(config-router)#default-information originate /*发布默认路由*/
8 R1(config-router)#end
9 R1#
10
11 /*查看R2的路由表,可以看到多出一条"O*E2"的默认路由*/
12 R2#show ip route
13
14 Gateway of last resort is 123.1.1.1 to network 0.0.0.0
15 ....
16 O*E2 0.0.0.0/0 [110/1] via 123.1.1.1, 00:01:02, FastEthernet1/0

“O*E2″中O表示从OSPF学习到的路由,E2表示该路由是OSPF外部类型2的路由,OSPF使用E1和E2标记外部路
由,E1表示除计算外部来的花费外,还要计算OSPF内部花费,而E2则只计算外部花费,不计算OSPF域内花费,这
就是这条默认路由的花费为1的原因。如果此时关闭R1的Lo1接口,其他路由上这条默认路由将消失,可以使用下面
的命令让R1始终对外发布默认路由:

1 R1(config)#router ospf 1
2 R1(config-router)#default-information originate always
3 R1(config-router)#end
4 R1#

使用这条命令配置之后R1关闭Lo1接口,其他路由上还是会存在这条默认路由。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记十九]交换机基础
发表于 2012 年 11 月 8 日 由 晴刃

这篇文章主要介绍Cisco分层体系构架、交换机分类、基本的配置命令、远程登录和交换机容易受到的安全威胁以及如
何防范。

___________________________________________

文章目录

[*1*].典型网络分层设计
[*2*].交换机分类
[*3*].交换机远程登录实例
[*4*].交换机安全
如何查看某IP所属端口
MAC地址泛洪防范
DHCP欺骗防范
ARP攻击原理与防范
其他安全威胁

___________________________________________

[*1*].典型网络分层设计

典型的网络分级设计模型将网络分为三层:

接入层(Access): 接入层负责接入终端设备,比如打印机、计算机、IP电话等。一般在接入层实现冲突域的隔
离、Vlan的划分和交换机的端口安全等。
汇聚层(Distribution): 该层位于接入层和核心层之间,主要作用是实现VLAN间的通信、广播域的划分以及网络策
略的定义等。
核心层(Core): 核心层的最主要作用就是快速转发。

典型网络三层设计模型如下图:
[*2*].交换机分类

按型号分类:

固定配置交换机: 不可扩展型,比如交换机上只有24个端口,那么就是24个端口,不可后期添加模块。
模块化交换机: 可扩展型,通常有不同大小的机箱,以便安装不同模块化线路卡,可以通过添加不同的模块给交
换机增加不同的功能。
可堆叠交换机: 可堆叠交换机可以通过一根背板电缆将两台可堆叠交换机连接起来,就好像是一台交换机一样。
用堆叠线连接的多台交换机只有一个MAC地址表,只需要一次MAC查询。

按转发方式分:

储存转发(Store-and-Forward): 交换机接收数据时,将数据储存在本地缓存中,直到接收了完整的帧后,再转
发。
快速转发(Cut-through): 交换机接收数据的前14个字节即开始转发,因为前14个字节已经包含了目的的MAC地
址。
无碎片式转发(Fragment-free): 接收数据的前64个字节后立刻转发,因为大多数的错误和碰撞都发生在前64字
节,也就是说大多数的错误帧都小于64字节。

交换机转发方式示意图:

按对称性分:

对称式交换机: 交换机所有端口的速率都一样。这种交换机多用在Peer-To-Peer(终端到终端)网络中。
非对称式交换机: 交换机的端口速率不一样,比如少数几个速率是1000Mb/s,而多数端口速率是100Mb/s。多用
在C/S(客户端/服务器)网络中。

按缓存方式分:

基于端口内存缓冲: 内存是基于每个端口分配的,每个端口有固定的缓存空间用来储存数据。
基于共享内存缓冲: 内存是被每个端口共享使用的,可以根据每个端口的使用情况动态调整。

按功能层分:

二层交换机。
三层交换机。

[*3*].交换机远程登录实例

思科交换机的硬件组成和路由相似(交换机上没有AUX辅助配置端口),CLI下的命令也基本一致,下面使用思
科PacketTracer5来模拟一下交换机的远程登录,实验拓扑如下:
SW1配置:

1 Switch>
2 Switch>en
3 Switch#conf t
4 Switch(config)#host SW1
5 SW1(config)#int vlan 1 /*进入虚拟局域网1*/
6 SW1(config-if)#ip add 192.168.2.2 255.255.255.0
7 SW1(config-if)#no shut
8 SW1(config)#ip default-gateway 192.168.2.1 /*配置默认网关*/
9 SW1(config)#enable secret 123456 /*配置特权密码,和路由器命令相同*/
10 SW1(config)#line vty 0 5 /*VTY配置命令也和路由相同*/
11 SW1(config-line)#password vtypass123
12 SW1(config-line)#login
13 SW1(config-line)#end
14 SW1#
15
16 /*
17 * “SW1(config)#int vlan 1”在默认情况下,所有端口都属于VLAN1,
18 * VLAN端口也称虚拟路由端口,属于三层端口,可以配置IP地址。
19 * 可以通过VLAN端口的IP地址,对交换机进行远程管理。
20 *
21 * “SW1(config)#ip default-gateway 192.168.2.1 ”
22 * 对一台不支持路由的设备,配置默认路由的方法就是配置默认网关,
23 * 这和计算机的默认网关是一个道理。
24 *
25 */

R1配置:

1 R1(config)#int fa 0/1
2 R1(config-if)#ip add 192.168.2.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int fa 0/0
5 R1(config-if)#ip add 192.168.1.1 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#end
8 R1#

PC1配置IP和网关如图所示,接下来在PC1上面telnet SW1的VLAN1接口IP:

点击PC1切换到”Desktop”>”Command Prompt”

1 Packet Tracer PC Command Line 1.0


2
3 PC>telnet 192.168.2.2
4 Trying 192.168.2.2 ...Open
5 User Access Verification
6
7 Password: /*输入SW1上面配置的VTY的密码vtypass123*/
8 SW1>en /*切换到特权模式*/
9 Password: /*输入自己配置的特权密码123456*/
10 SW1#
11 SW1#conf t
12 Enter configuration commands, one per line. End with CNTL/Z.
13 SW1(config)# /*成功登陆,并且可以做全局配置*/
14 SW1(config)#exit
15 SW1#exit /*退出登录*/
16
17 [Connection to 192.168.2.2 closed by foreign host]
18 PC>

在PC1上使用路由追踪命令:

1 PC>tracert 192.168.2.2
2
3 Tracing route to 192.168.2.2 over a maximum of 30 hops:
4
5 1 32 ms 31 ms 31 ms 192.168.1.1
6 2 62 ms 50 ms 63 ms 192.168.2.2
7
8 Trace complete.
9
10 PC>
11
12 /*可以通过路由追踪命令看到数据在网络中是如何流动的*/

在PC1上使用Ping命令Ping SW1的VLAN1:

1 PC>ping 192.168.2.2
2
3 Pinging 192.168.2.2 with 32 bytes of data:
4
5 Reply from 192.168.2.2: bytes=32 time=63ms TTL=254
6
7 Ping statistics for 192.168.2.2:
8 Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
9 Approximate round trip times in milli-seconds:
10 Minimum = 63ms, Maximum = 63ms, Average = 63ms
11
12 Control-C
13 ^C
14 PC>
15
16 /*可以看到TTL=254,说明其间经过了一台路由,这和拓扑一致*/

另外,交换机除可以通过命令行远程管理之外,还能通过Web方式远程管理(在浏览器中输入交换机管理IP即可),思
科交换机的Web管理方式默认是开启的(PacketTracer5中没有模拟出这一条命令,但在GNS3中可以通过路由器添
加16口交换模块来模拟交换机):

1 /*开启Web管理*/
2 SW1(config)#ip http server
3
4 /*关闭Web管理*/
5 SW1(config)#no ip http server

[*4*].交换机安全

* 如何查看某IP 所属端口

实际工作中的交换机上的MAC地址可能有几百甚至几千条,想从这些条目中用眼睛找出某个IP对应MAC地址或者某
个MAC地址对应端口无疑是一件费时间的事情,下面这个方法可以很快的查找出某个IP对应的MAC和端口:

1 /*首先找出目标IP对应的MAC地址*/
2 SW1#show arp | include 192.168.1.2
3 Protocol Address Age (min) Hardware Addr Type Interface
4 Internet 192.168.1.2 38 0050.7966.6802 ARPA Vlan1
5
6 /*使用找到的MAC地址获得对应的端口*/
7 SW1#show mac-address-table | include 0050.7966.6802
8 0050.7966.6802 Dynamic 1 FastEthernet0/2
9 SW1#

* MAC 地址泛洪防范

MAC地址泛洪(Flooding)攻击的原理:

根据交换机工作原理,即根据数据帧中的源MAC地址进行学习。当某台主机伪造大量的虚假MAC地址发往交换机,交
换机的地址表容量有限(大约几千条)当交换机的MAC地址表被填满之后,交换机将不再学习其他MAC地址,此时不
论是单播组播,交换机都进行泛洪转发;这样,攻击主机只需要在本地开启一个监听软件即可捕获局域网中的所有数
据包。

MAC地址表的老化时间默认是5分钟,为了保证这种攻击有效性,攻击主机必须持续发动攻击。

MAC地址泛洪攻击的防范方法:

可以在接入端口上配置每个端口允许学习的MAC地址数量:

1 Switch(config)#int fa 0/1 /*进入需要配置的端口*/


2
3 /*
4 * 将交换机端口配置成接入端口,三层交换机端口或二层的主干端口都不支持端口安全,
5 * 端口安全只能配置在二层的接入端口上
6 */
7 Switch(config-if)#switchport mode access
8 Switch(config-if)#switchport port-security /*开启端口安全*/
9 Switch(config-if)#switchport port-security maximum 10 /*允许最大学习10个MAC地
址*/
10
11 Switch(config-if)#switchport port-security violation ? /*查看一下违规可以进行的
操作*/
12 protect Security violation protect mode /*超过10个,阻止新的MAC学习*/
13 restrict Security violation restrict mode /*大致功能同上*/
14 shutdown Security violation shutdown mode /*超过10个MAC,关闭端口*/
15
16 /*这里选择保护,即超过10个不学习新的MAC*/
17 Switch(config-if)#switchport port-security violation protect
18 Switch(config-if)#end
19 Switch#

使用下面的命令可以查看某个接入端口的安全规则:

1 Switch#show port-security interface fa 0/1


2
3 Port Security : Enabled
4 Port Status : Secure-down
5 Violation Mode : Protect
6 Aging Time : 0 mins
7 Aging Type : Absolute
8 SecureStatic Address Aging : Disabled
9 Maximum MAC Addresses : 10
10 Total MAC Addresses : 0
11 Configured MAC Addresses : 0
12 Sticky MAC Addresses : 0
13 Last Source Address:Vlan : 0000.0000.0000:0
14 Security Violation Count : 0
15
16 Switch#

交换机可以一次配置多个端口:

1 /*一次性配置fa0/2至fa0/5以及fa0/10至fa0/12这些端口*/
2 Switch(config)#int range fa0/2 - 5,fa0/10 - 12
3 Switch(config-if-range)#switchport mode access
4 Switch(config-if-range)#switchport port-security
5 Switch(config-if-range)#switchport port-security maximum 10
6 Switch(config-if-range)#switchport port-security violation protect
7 Switch(config-if-range)#end
8 Switch#

端口安全应用: 一台交换机上连接着一台服务器,要求这个端口只能学习这台服务器的MAC地址:

1 /*假设这台服务器连接在fa0/1接口上*/
2 Switch(config)#int fa 0/1
3
4 /*将这个接口设置成接入接口*/
5 Switch(config-if)#switchport mode access
6
7 /*开启端口安全*/
8 Switch(config-if)#switchport port-security
9
10 /*设置只能学习一个MAC地址*/
11 Switch(config-if)#switchport port-security maximum 1
12
13 /*违规操作"保护",不学习新的MAC*/
14 Switch(config-if)#switchport port-security violation protect
15
16 /*将服务器的MAC地址和这个端口进行手工绑定*/
17 Switch(config-if)#switchport port-security mac-address 10ec.55ab.12ed
18 Switch(config-if)#end
19 Switch#
使用下面的命令可以实现端口MAC地址的自动绑定:

1 Switch(config)#int fa 0/2
2 Switch(config-if)#switchport mode access
3 Switch(config-if)#switchport port-security
4 Switch(config-if)#switchport port-security maximum 10
5 Switch(config-if)#switchport port-security violation protect
6
7 /*交换机将对最先学习到的10个MAC地址进行自动绑定*/
8 Switch(config-if)#switchport port-security mac-address sticky
9 Switch(config-if)#end
10 Switch#

* DHCP欺骗防范

如下图所示,网络中有一台正确的DHCP服务器和一台非法的DHCP服务器,如果没有做出正确的设置,DHCP客户
端很有可能从非法的DHCP服务器上获取IP地址导致不能正常上网。

可以在上图中标出红圈的几个接口上配置下面的命令来阻止非法的DHCP服务器对DHCP请求的响应,只有标记出红
圈的端口允许转发DHCP响应报文:

Switch0上的配置:

1 /*启用DHCP防欺骗功能*/
2 Switch0(config)#ip dhcp snooping
3
4 /*
5 * 在Vlan1上启用DHCP防欺骗功能,
6 * 默认情况下交换机所有端口都属于Vlan1,如果创建了其他VLAN,
7 * 可以使用相同的方法启动在那个Vlan上的DHCP防欺骗功能,
8 * 比如:"ip dhcp snooping vlan 2"。
9 */
10 Switch0(config)#ip dhcp snooping vlan 1
11
12 /*设置下面这两个端口为可信任端口,不可信任端口将不会接受DHCP应答包*/
13 Switch0(config)#int range fa0/1,fa0/23
14 Switch0(config-if-range)#ip dhcp snooping trust
15
16 /*
17 * 限制这个交换机上其他端口的DHCP请求包的发送速率,
18 * 避免非法用户发送大量DHCP请求耗尽DHCP服务器资源。
19 */
20 Switch0(config-if-range)#int range fa0/2 - 22,fa0/24
21 Switch0(config-if-range)#ip dhcp snooping limit rate 2

Switch1上的配置:

1 Switch1(config)#ip dhcp snooping


2 Switch1(config)#ip dhcp snooping vlan 1
3 Switch1(config)#int fa 0/24
4 Switch1(config-if)#ip dhcp snooping trust
5 Switch1(config-if)#int range fa 0/1 - 23
6 Switch1(config-if-range)#ip dhcp snooping limit rate 2

* ARP攻击原理与防范

这一部分我前面专门写了一篇文章“局域网ARP攻击实现与防范[图文]”;文中提到了局域网ARP攻击形成的原因,如何
发动攻击以及如何防范。想要进一步了解的朋友可以参考一下这篇文章。

在一个小型局域网中,可以使用双向绑定的方法,在计算机上使用第三方ARP防火墙绑定网关MAC,然后在交换设备
或路由上使用下面的命令静态绑定计算机IP对应的MAC地址:

1 /*前面是要绑定的IP后面是个IP对应的MAC地址*/
2 R1(config)#arp 192.168.1.2 eb9c.2d13.5eca arpa

在一些大型的局域网中,可以在交换或路由设备上使用ARP动态绑定技术。

* 其他安全威胁

除上面几种交换机的完全威胁以外,还有很多我们需要注意的地方比如:

交换机远程登录密码过于简单导致的暴力破解、Telnet明文传输(在命令行登录路由器的时候建议使用SSH代替明
文telnet)、CDP攻击(建议不使用这个协议的时候关闭它,因为攻击者可以从CDP信息中获得设备的IP以及IOS版
本,有些IOS版本存在Bug)、DOS攻击等。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十]VLAN配置实例详解
发表于 2012 年 11 月 11 日 由 晴刃

这篇文章介绍一下VLAN相关技术,通过几个实例来演示VLAN干线、VLAN的封装和工作方式、VLAN配置、VLAN间
路由等。(本文中的大部分实验均可在”Cisco Packet Tracer 5.3″中完成)

文章目录

[*1*].VLAN介绍
[*2*].VLAN干线
什么是VLAN干线
干线协议介绍
交换机间VLAN通信过程
DTP协议
[*3*].VLAN配置实例
创建VLAN
把端口加入VLAN
配置主干端口(Trunk)
本地VLAN
语音VLAN
VLAN维护操作
在GNS3上模拟配置VLAN
[*4*].VLAN间路由
基于路由器物理接口的VLAN间路由
基于路由器子接口的VLAN间路由(单臂路由)
交换机上的端口类型
基于三层交换机的VLAN间路由
路由器和三层交换机在实现VLAN间路由上的区别

[*1*].VLAN介绍

VLAN(Virtual Local Area Network,虚拟局域网),通过在支持VLAN的交换机上添加VLAN,并且动态的调整每个端


口所属VLAN(默认端口都属于VLAN1),实现一台物理交换机上可以有多个LAN,每个LAN称作VLAN,VLAN之间
的广播互不可达,VLAN间互不影响。每个VLAN是一个独立的广播域,如果不同VLAN中的结点想要互相访问,需要
通过一台三层或三层以上设备才能实现(比如路由器、三层交换机、防火墙等)。这样就增加了安全性,可以在三层
设备上配置访问列表来达到流量控制的目的。
[*2*].VLAN干线

* 什么是VLAN 干线

干线(Trunk)就是在两台交换机之间可以传输多个VLAN的信息的那条线缆,干线又称主干。

下图是没有使用干线的情况,在SW1和SW2上划分了两个VLAN(VLAN1、VLAN2),PC1和PC2属
于VLAN2,PC3和PC4属于VLAN3,在没有使用主干线路的时候,需要在SW1和SW2之间使用两条线缆,将一条线
缆的两个端口划分到VLAN2,另一条线缆的两个端口划分到VLAN3,这样PC1和PC2才能正常通信,PC3和PC4也能
正常通信。在没有使用间路由的情况下,VLAN2中的PC1和PC2无法和VLAN3中的PC3和PC4通信。

下图是使用了主干线路的情况,只需要在SW1和SW2之间使用一条线缆,并且设置这条线缆为主干,这样这条主干线
缆就能同时传输多个VLAN的数据了。PC1和PC2能正常通信,PC3和PC4也能正常通信。在没有使用间路由的情况
下,VLAN2中的PC1和PC2无法和VLAN3中的PC3和PC4通信。
最后需要注意的是,现在只有100Mb/s以上(包括100Mb/s)的线路才支持Trunk。

* 干线协议介绍

对于VLAN交换机来说,干线就是交换机之间的连线,它在两个或两个以上的VLAN之间传输业务流。每个交换机必须
确定它所收到的数据帧属于哪个VLAN。

在传统的交换机中,当一个帧进入交换机时,交换机只检查目的MAC,然后根据自己的MAC表进行转发或者泛洪。
在VLAN中除了需要知道目的MAC做转发决定外,还要考虑帧的源地址,因为帧的源地址通常会影响它所属VLAN,
并可能影响它被转发出去的端口。追踪一个帧的源地址有两种常用的方式:

帧标记(又称显式标记): 根据数据进入交换机的端口属于哪个VLAN来标记一个帧。当一个帧进入交换机的时
候,根据那个端口所属VLAN,为帧添加一个包含VLAN标识的域(VLAN着色),这种方式的缺点就是大多数不
支持VLAN的设备会将这种更改后的帧当成无效帧丢弃。但现在这种技术已经形成了一个IEEE802.1Q的标准,
这个标准解决了不同厂商进行帧标记时候的兼容性问题。
帧过滤(又称隐式标记): 这种方法为每个VLAN保持一张MAC地址表,确定目标后就做出转发决定。这种方式
的好处就是不更改原来的帧格式,帧通过不同的网络设备都不会出现问题。这种方式的缺点就是每个VLAN交换
机都要保存一张MAC地址表,这张表还要包含每个MAC所属VLAN的信息,并且能根据源地址的VLAN以
及MAC进行过滤转发。

现阶段最常使用的干线协议是802.1Q和ISL(在不同厂商设备混用的情况下一定要使用802.1Q):
1,802.1Q

802.1Q是IEEE提出的一个通用标准,也是现在大部分厂商的默认干线传输协议,通过在原来的以太网帧头部添加一
个4字节的802.1Q头部,然后重新计算FCS(帧效验序列)来实现,如下图:

本文中的配置均以802.1Q为例。

2,ISL(Interior Switching Link,交换机间链路)

ISL是思科私有的干线传输协议,这里不做过多介绍。

* 交换机间VLAN 通信过程

这一部分结合“* 什么是VLAN干线”中的第二张图片,讲解一下802.1Q干线协议的工作流程:

图中PC1和PC2属于VLAN2,PC3和PC4属于VLAN3,SW1和SW2通过干线相连,干线运行的是802.1Q协议。

1,假设PC1发送消息给PC2,刚开始PC1不知道PC2的MAC地址,所以它首先发送ARP查询包,查询PC2的MAC地
址,ARP查询包以广播形式发送。

2,交换机SW1收到PC1发送过来的ARP查询广播包,SW1知道数据是从fa0/0接收到的,fa0/0被划分到VLAN2中,
是一个接入端口,SW1知道这是一个来自VLAN2的广播包,SW1在MAC地址表中加入PC1的MAC和VLAN号以及对
应的端口号,非VLAN交换机和VLAN交换机都会根据数据的源地址进行学习,只不过VLAN交换机除了记录源MAC地
址,还需要记录源MAC所对应的VLAN号。

3,SW1在收到的数据帧中加入VLAN2的标识(VLAN交换机从Access(接入)端口收到数据时需要插入VLAN标
识),接着SW1将这个VLAN2的广播包从除接收端口以外的所有属于VLAN2的接口以及主干发送出去,在从所有属
于VLAN2的接入接口发送出去前需要去掉VLAN标识(VLAN交换机从Access将数据发出时要去掉VLAN标识,否则其
他计算机不能识别这个加了标识的帧),从主干发送出去的帧不需要去掉VLAN标识(后面介绍到的本地VLAN除
外)。也就是说如果此时SW1上还有一个非主干端口也被分配到VLAN2中,这个广播从这接入端口送出前要去
掉VLAN标识,而从SW1的fa0/2发往SW2的数据帧不需要去掉VLAN标识(本地VLAN除外)。

4,PC3接收不到PC1发出的ARP广播请求,因为连接PC3的端口被划分到VLAN3中了,不属于VLAN2,一
个VLAN是一个广播域。

5,当SW2从自己的fa0/2接口(主干接口)接收到一个数据帧时,SW2查看数据帧中的VLAN标识,并在本地MAC地
址表中添加了帧中源MAC地址、VLAN号以及对应的端口号fa0/2。接下来SW2将决定往哪转发这个收到的数据
帧,SW2通过查看VLAN标识和目的MAC地址,知道这是一个VLAN2的广播ARP查询包,SW2将这个包从除接收接
口(fa0/2)以外的所有属于VLAN2的接口以及其他的主干接口(如果有)发送出去,同理,在发出去之前,如果接口
属于接入接口,则去掉VLAN标识,如果是主干端口则保留VLAN标识。

6,PC4是收不到这个广播包的,因为不属于VLAN2,这个时候PC2收到了这个ARP请求包,发现请求的是自己
的MAC地址,PC2封装ARP应答包发给SW2。

7,SW2收到这个应答包,首先学习PC2的MAC地址和VLAN号以及对应端口到自己的MAC地址表,然后给这个数据
帧添加VLAN2标识,之后SW2查询MAC地址表,找到PC1对应的MAC号、VLAN号和端口号,SW2比较数据帧的
源MAC和目的MAC在同一个VLAN2中,SW2将数据帧从目的MAC对应的fa0/2接口发出(PC1的MAC是第5步中收
到SW1发来的数据帧的时候记录的)。

8,SW1收到这个数据帧,首先也是对源MAC、VLAN号以及对应端口进行学习,然后查看数据帧中的目的MAC,之
前已经保存过PC1的MAC,SW1将目的MAC所在VLAN号和源MAC所在VLAN号进行对比,发现他们处于同一
个VLAN2下,SW2将这个数据帧中的VLAN标记去除并直接从目的MAC(PC1的MAC)所对应的端口fa0/0发
给PC1。

9,PC1成功收到ARP应答包,接下来的通信过程和这个步骤类似。

总结:交换机何时添加802.1Q标签头(VLAN标签)与交换机的接口有关,如果交换机的接口接的是一台计算机,那
么这个端口是接入端口,在数据帧进入时被添加802.1Q标签头,数据帧从接入端口发出时去掉标签头;如果交换机的
接口接的是另外一台交换机,那么这个接口就属于主干接口(Trunk),数据从这种接口发出一般不会去掉标签头(后面演
示的Native VLAN除外)。

* DTP协议

DTP(Dynamic Trunking Protocol,动态主干协议),是思科私有的协议,其它厂商不支持该协议,当交换机上某些


端口被配置成主干模式时,DTP自动运行,用来协商链路能否成为主干链路。DTP支持802.1Q和ISL封装的主干链路
协商。

下面是思科交换机端口的几种主干模式:

OFF(关闭): 使用”switchport mode access”命令,静态配置交换机端口为接入端口(非主干端口)。


ON(打开): 使用”switchport mode trunk”命令,静态配置交换机端口为主干端口。
Dynamic auto(动态自动): 使用”switchport mode dynamic auto”命令,静态配置交换机端口为动态自动模式。
Dynamic desirable(动态期望): 使用”switchport mode dynamic desirable”命令,静态配置交换机端口为动态期
望模式。
Nonegotiate(关闭DTP协议): 使用”switchport nonegotiate”命令,将关闭DTP协议。

思科交换机的接口可以配置以上五种模式。下表显示了,交换机和交换机之间相连,在什么情况下能建立起主干链
路,什么情况下不能建立起主干线路:

注:Access是链路通过DTP协议协商后成为了非主干链路;Trunking是指链路协商后成为了主干线路;错误是指有故障
的链路,协商失败。

举一个例子: 两台交换机相连,一端使用命令”switchport mode dynamic auto”,另外一端使用命令”switchport mode


trunk”,那么根据这张表,最后的协商结果就是Trunking,也就是成功协商成主干链路。后面”配置主干端口”会演示
到DTP,这个表可以作为参考。

[*3*].VLAN配置实例

这个实例的配置环境是在”Cisco Packet Tracer 5.3″模拟器中进行,实验拓扑如下:


五台计算机,子网24位,IP地址如图所示,其中PC1、PC2连接在SW1上,PC1和交换机之间还连接了一台IP电
话,PC3、PC4连接在SW2上,PC5连接在一台集线器上,SW1和SW2也连接在这台集线器上,在没有划
分VLAN前,整个网络属于同一个广播域,PC1-5互相能够ping通;现在要将PC1、PC3、PC5划分到VLAN2里面,
将PC2、PC4划分到VLAN3里面,配置主干、本地VLAN、语音VLAN。(注意交换机和集线器之间的连线需要使用交
叉线,其他全部使用直通线)

* 创建VLAN

打开SW1和SW2的CLI界面(点击交换机图标,然后选择CLI,就可以输入命令了),首先创建VLAN2和VLAN3:

SW1配置:

1 Switch>en
2 Switch#conf t
3 Switch(config)#host SW1
4 SW1(config)#vlan 2 /*创建VLAN2*/
5 SW1(config-vlan)#name vlan2name /*给VLAN2命名*/
6 SW1(config-vlan)#vlan 3 /*创建VLAN3*/
7 SW1(config-vlan)#name vlan3name /*给VLAN3命名*/
8 SW1(config-vlan)#end
9 SW1#
10
11 /*
12 * 查看VLAN信息,可以看到默认情况下所有端口都属于VLAN1,
13 * VLAN1也是交换机上默认存在的VLAN。
14 *
15 * 下面是我们新建的VLAN2和VLAN3。
16 *
17 * VLAN1002-1005也是交换机上默认存在的VLAN,有特殊用途,这里暂且不用理会。
18 */
19 SW1#show vlan
20
21 VLAN Name Status Ports
22 ---- -------------------- ------- -------------------------------
23 1 default active Fa0/1, Fa0/2, Fa0/3, Fa0/4
24 Fa0/5, Fa0/6, Fa0/7, Fa0/8
25 Fa0/9, Fa0/10, Fa0/11, Fa0/12
26 Fa0/13, Fa0/14, Fa0/15, Fa0/16
27 Fa0/17, Fa0/18, Fa0/19, Fa0/20
28 Fa0/21, Fa0/22, Fa0/23, Fa0/24
29 Gig1/1, Gig1/2
30 2 vlan2name active
31 3 vlan3name active
32 1002 fddi-default act/unsup
33 1003 token-ring-default act/unsup
34 1004 fddinet-default act/unsup
35 1005 trnet-default act/unsup

SW2配置:

1 Switch>en
2 Switch#conf t
3 Switch(config)#host SW2
4 SW2(config)#vlan 2
5 SW2(config-vlan)#name vlan2name
6 SW2(config-vlan)#vlan 3
7 SW2(config-vlan)#name vlan3name
8 SW2(config-vlan)#end
9 SW2#

这样VLAN2和VLAN3就创建好了,继续下一步。

* 把端口加入VLAN

默认情况下所有端口都属于VLAN1,根据拓扑要求,我们需要调整SW1和SW2上的端口,在SW1上将和PC1相连的
端口静态的分配给VLAN2,将于PC2相连的端口静态的分配给VLAN3,同理SW2上也要做出调整:

SW1配置:

1 SW1#conf t
2 SW1(config)#int fa 0/1 /*进入和PC1相连的端口*/
3 /*交换机默认的端口模式是"Dynamic auto",由于这个端口连接的是终端设备,所以要配置成接入
接口*/
4 SW1(config-if)#switchport mode access
5 SW1(config-if)#switchport access vlan 2 /*将这个接口划分到VLAN2*/
6 SW1(config-if)#int fa 0/2 /*进入和PC2相连的端口*/
7 SW1(config-if)#swi mod acc /*同上,这是简写形式*/
8 SW1(config-if)#swi acc vlan 3
9 SW1(config-if)#end
10 SW1#
11
12 /*查看VLAN分配情况,可以看到Fa0/1和Fa0/2被分配到了对应的VLAN下*/
13 SW1#show vlan brief
14
15 VLAN Name Status Ports
16 ---- -------------------- ------- -------------------------------
17 1 default active Fa0/3, Fa0/4, Fa0/5, Fa0/6
18 Fa0/7, Fa0/8, Fa0/9, Fa0/10
19 Fa0/11, Fa0/12, Fa0/13, Fa0/14
20 Fa0/15, Fa0/16, Fa0/17, Fa0/18
21 Fa0/19, Fa0/20, Fa0/21, Fa0/22
22 Fa0/23, Fa0/24, Gig1/1, Gig1/2
23 2 vlan2name active Fa0/1
24 3 vlan3name active Fa0/2
25 1002 fddi-default active
26 1003 token-ring-default active
27 1004 fddinet-default active
28 1005 trnet-default active
29 SW1#

SW2配置:

1 SW2#conf t
2 SW2(config)#int fa 0/1
3 SW2(config-if)#swi mod acc
4 SW2(config-if)#swi acc vlan 2
5 SW2(config-if)#int fa 0/2
6 SW2(config-if)#swi mod acc
7 SW2(config-if)#swi acc vlan 3
8 SW2(config-if)#end
9 SW2#

端口分配完毕后,在PC1上Ping拓扑中任意一台其他的PC,都Ping不通;PC1 ping不通PC2是因为他们不在一
个VLAN中,ping不通其他几台是因为SW1的fa0/24端口默认属于VLAN1,并且是一个接入端口,该端口只转
发VLAN1的数据包,而PC1在VLAN2中,所以ping不通。继续下一步,配置主干。

* 配置主干端口(TRUNK)

在SW1和SW2上配置fa0/24为主干端口:

SW1配置:

1 SW1#conf t
2 SW1(config)#int fa 0/24
3
4 /*
5 * 配置主干模式,这种模式就是前面DTP协议协商图中的"ON and Nonegotiate",
6 * 交换机两端都配置成这种模式,协商的结果就是Trunking,即主干。
7 */
8 SW1(config-if)#switchport mode trunk
9 SW1(config-if)#switchport nonegotiate
10
11 /*配置主干允许传输的VLAN,用?查看一下可以执行的操作。*/
12 SW1(config-if)#switchport trunk allowed vlan ?
13 WORD VLAN IDs of the allowed VLANs when this port is in trunking mode
14 add add VLANs to the current list
15 all all VLANs
16 except all VLANs except the following
17 none no VLANs
18 remove remove VLANs from the current list
19
20 /*
21 * 本例设置成允许所有VLAN的传输。
22 * 如果只允许VLAN1、3、1002-1005,可以像下面这样写,
23 * switchport trunk allowed vlan 1,3,1002-1005
24 * 如果想追加新的VLAN2被允许可以这样写:
25 * switchport trunk allowed vlan add 2
26 */
27 SW1(config-if)#switchport trunk allowed vlan all
28 SW1(config-if)#end
29 SW1#

SW2配置:

1 SW2(config)#int fa 0/24
2
3 /*SW2的fa0/24也配置成"ON and Nonegotiate"模式*/
4 SW2(config-if)#swi mod trunk
5 SW2(config-if)#swi nonegotiate
6
7 SW2(config-if)#swi trunk allowed vlan all
8 SW2(config-if)#end
9 SW2#

配置完成后在SW1上查看主干链路状态:

1 SW1#show interfaces fa 0/24 switchport


2 Name: Fa0/24
3 Switchport: Enabled
4 Administrative Mode: trunk /*配置的端口模式是主干*/
5 Operational Mode: trunk /*链路的状态是主干*/
6 Administrative Trunking Encapsulation: dot1q /*主干默认封装协议dot1q(802.1Q)*/
7 Operational Trunking Encapsulation: dot1q /*有效的封装协议也是dot1q*/
8 Negotiation of Trunking: Off /*DTP协议关闭*/
9 Access Mode VLAN: 1 (default) /*端口默认VLAN是VLAN1*/
10 Trunking Native Mode VLAN: 1 (default) /*该主干端口的本地VLAN是VLAN1*/
11 Voice VLAN: none /*没有配置语言VLAN*/
12 /*以下输出省略*/
13 SW1#

查看SW1工作在主干模式的端口:

1 SW1#show interfaces trunk


2 /*端口 模式 封装协议 状态 本地VLAN号*/
3 Port Mode Encapsulation Status Native vlan
4 Fa0/24 on 802.1q trunking 1
5 /*主干上允许传输的VLAN号*/
6 Port Vlans allowed on trunk
7 Fa0/24 1-1005
8
9 Port Vlans allowed and active in management domain
10 Fa0/24 1,2,3
11
12 Port Vlans in spanning tree forwarding state and not pruned
13 Fa0/24 1,2,3
14 SW1#

在这一步,大家可以使用DTP协议部分介绍的命令,将交换机两端的模式替换成协商表里面的其他模式,来测
试DTP协议。

现在,再次测试Ping,PC1和PC3可以互相Ping通,PC2和PC4可以互相Ping通,但是PC1和PC3确Ping不通PC5,
根据拓扑图,PC5也必须在VLAN2中,可以和PC1和PC3通信,是什么原因造成这一情况的呢?继续往下看。

PS:”Cisco Packet Tracer 5.3″不支持更改主干端口封装协议的命令,在真实交换机中可以通过下面的命令来更改主


干端口的封装协议:

1 /*进入主干接口进行更改*/
2 Switch(config-if)#switchport trunk encapsulation ?
3 dot1q ....../*802.1Q*/
4 isl ....../*思科私有的ISL*/
5
6 /*将主干端口的封装协议改成802.1Q*/
7 Switch(config-if)#switchport trunk encapsulation dot1q

* 本地VLAN

本地Vlan(Native Vlan)是主干端口的特征,使用802.1Q协议封装的主干端口,将数据帧从主干发出时,如果数据
帧中的VLAN标识与主干端口的本地VLAN号一致,那么交换机清除数据帧中的VLAN标识,再从主干端口发出;使
用802.1Q封装的主干端口,从主干端口接收到数据帧时,如果数据帧中没有VLAN标识,交换机将给这个数据帧添加
接收这个帧的主干端口的本地VLAN号。

理解了上面主干端口本地VLAN的工作方式后,就可以解释上面的问题了,PC1属于VLAN2,PC1 ping PC5的时候,


首先要获取PC5的MAC地址,ARP请求包被以广播的形式发送出去,交换机SW1在广播帧上添加VLAN2标识,然后
从fa0/24发出,fa0/24是主干端口默认情况下该主干端口的默认本地VLAN号是1,和要发出去的数据帧中的VLAN号不
一样,所以SW1不做任何修改,直接将这个数据帧从主干端口发出,由于PC5连接在集线器上,集线器收到这个数据
帧后简单的放大信号,然后从除接收端口以外的所有端口发出,PC5收到这个数据帧,由于数据帧是添加了VLAN2标
识的,PC5直接判断这是一个错误的帧,最后丢弃。

在这种情况下,如果想让PC1和PC3能够ping通PC5,其实可以将SW1和SW2的fa0/24这个主干端口的本地VLAN号
改成VLAN2,这样根据上面所说的本地VLAN的工作原理,当SW1将VLAN2的数据帧从这个主干发出时,将去掉帧中
的VLAN标记,那么PC5收到的就是一个正常的帧了。

SW1设置:

1 SW2(config)#int fa 0/24 /*将主干端口的本地VLAN改成VLAN2*/


2 SW2(config-if)#switchport trunk native vlan 2
3 SW2(config-if)#end
4 SW2#

SW2设置:
1 SW1(config)#int fa 0/24
2 SW1(config-if)#switchport trunk native vlan 2
3 SW1(config-if)#end
4 SW1#

现在再次测试PC1以及PC3 ping PC5,都能够成功Ping通。根据本地VLAN的工作原理,PC5去ping


PC2和PC4是ping不通的,因为当SW1或SW2从自己的主干接收到一个没有打标记的VLAN帧后,它会给这个帧打上
这个接收端口的本地VLAN标记,即VLAN2的标记,而PC2和PC4属于VLAN3,这个数据帧不会送给任何被划分
到VLAN3的端口。

大家可能注意到拓扑图中SW1和PC1之间连接了一台IP电话,下面继续配置语音VLAN。

* 语音VLAN

IP语音电话需要带宽保证、优先传输、拥塞避免并且要求穿过整个网络的延时小于150毫秒,思科IP电话机一般有两
个接口,一个接口可以接交换机,一个接口可以接PC,IP电话可以单独连接在交换机上,有时为了节约端口,可以连
接IP电话后再连接计算机,本例就使用了这种方式。

下面简单的介绍一下VoIP的配置,在SW1上执行下面的命令:

1 /*
2 * 在没有配置语音VLAN前,IP电话和PC1处于同一个VLAN2中,
3 * Cisco交换机支持一种独特的功能,
4 * 可以通过下面这条命令将IP电话和PC工作站划分到不同的VLAN中。
5 */
6 SW1(config)#int fa 0/1
7 SW1(config-if)#switchport voice vlan 50
8 SW1(config-if)#end
9 SW1#
10
11 /*查看交换接口参数,可以看到Vioce VLAN变成了50*/
12 SW1#show int fa 0/1 switchport
13 Voice VLAN: 50

* VLAN 维护操作

可以在SW1上查看全局配置信息:

1 SW1#show running-config
2 Building configuration...
3 !
4 interface FastEthernet0/1
5 switchport access vlan 2
6 switchport mode access
7 switchport voice vlan 50
8 !
9 interface FastEthernet0/2
10 switchport access vlan 3
11 switchport mode access
12 !
13 ....
14 !
15 interface FastEthernet0/24
16 switchport trunk native vlan 2
17 switchport mode trunk
18 switchport nonegotiate
19 !
20 ....

从上面的输出中我们发现,找不到VLAN的创建信息,这是因为VLAN的创建信息是被单独保存在vlan.dat文件中,可
以使用下面的命令查看:

1 /*
2 * dir命令可以查看此交换机的Flash空间中的文件,
3 * 从命令的输出可以看到Flash空间中除了保存IOS外还保存了vlan.dat文件。
4 */
5 SW1#dir
6 Directory of flash:/
7
8 1 -rw- 4414921 c2960-lanbase-mz.122-25.FX.bin
9 2 -rw- 676 vlan.dat
10
11 64016384 bytes total (59600787 bytes free)
12 SW1#

使用”show vlan brief”可以查看交换机上VLAN配置信息;

1 /*
2 * 从配置信息可以看到,SW1上新建立了两个VLAN(vlan2和vlan3),
3 * 每个VLAN中还包含了一个端口,Fa0/24是主干端口,不属于任何VLAN。
4 */
5 SW1#show vlan brief
6
7 VLAN Name Status Ports
8 ---- --------------------- --------- -------------------------------
9 1 default active Fa0/3, Fa0/4, Fa0/5, Fa0/6
10 Fa0/7, Fa0/8, Fa0/9, Fa0/10
11 Fa0/11, Fa0/12, Fa0/13, Fa0/14
12 Fa0/15, Fa0/16, Fa0/17, Fa0/18
13 Fa0/19, Fa0/20, Fa0/21, Fa0/22
14 Fa0/23, Gig1/1, Gig1/2
15 2 vlan2name active Fa0/1
16 3 vlan3name active Fa0/2
17 1002 fddi-default active
18 1003 token-ring-default active
19 1004 fddinet-default active
20 1005 trnet-default active
21 SW1#

使用”reload”命令重启SW1:

1 SW1#reload
2 Proceed with reload? [confirm]
3
4 /*在真实交换机上还会出现下面的提示信息,输入no,不保存配置*/
5 System configuration has been modified. Save?[yes/no]:no

重启完成后再次查看VLAN配置:

1 /*
2 * 从下面的输出可以看到,虽然没有保存配置文件,但是创建的VLAN还在,
3 * 这是因为创建的VLAN信息是默认保存在Flash的vlan.dat里面的,
4 * 但是端口的分配信息是保存在配置文件中的,所以端口分配信息丢失了。
5 */
6 Switch#show vlan brief
7
8 VLAN Name Status Ports
9 ---- --------------------- --------- -------------------------------
10 1 default active Fa0/1, Fa0/2, Fa0/3, Fa0/4
11 Fa0/5, Fa0/6, Fa0/7, Fa0/8
12 Fa0/9, Fa0/10, Fa0/11, Fa0/12
13 Fa0/13, Fa0/14, Fa0/15, Fa0/16
14 Fa0/17, Fa0/18, Fa0/19, Fa0/20
15 Fa0/21, Fa0/22, Fa0/23, Fa0/24
16 Gig1/1, Gig1/2
17 2 vlan2name active
18 3 vlan3name active
19 1002 fddi-default active
20 1003 token-ring-default active
21 1004 fddinet-default active
22 1005 trnet-default active
23 Switch#

其实vlan.dat文件中不仅仅包含了VLAN信息,还包含了VTP信息(下一篇文章中将会讲到),可以通过下面这条命令
删除vlan.dat文件:

1 Switch#delete vlan.dat
2 Delete filename [vlan.dat]? /*回车确定*/
3 Delete flash:/vlan.dat? [confirm]

再次查看”show vlan brief”就看不到我们创建的VLAN信息了。

* 在GNS3上模拟配置VLAN

这一部分使用GNS3模拟器来完成跨交换机的VLAN配置实验,实验中用到的命令和”Cisco Packet Tracer 5.3″中稍有


不同,实验拓扑如下:
图中4台计算机分别用VPCS来模拟,两台交换机实际上是3640路由器上面增加了一个16口的快速以太网交换模
块”NM-16ESW”,实验要求VPC1和VPC3划分到VLAN2中,VPC2和VPC4划分到VLAN3中,两台交换
机SW1和SW2之间相连的线路设置成主干线路,实现VPC1可以和VPC3通信,VPC2可以和VPC4通信。

VPCS配置:

1 /*配置每台VPC的IP地址和子网掩码*/
2 VPCS[1]> ip 192.168.1.1 24
3 PC1 : 192.168.1.1 255.255.255.0
4 VPCS[1]> 2
5 VPCS[2]> ip 192.168.1.2 24
6 PC2 : 192.168.1.2 255.255.255.0
7 VPCS[2]> 3
8 VPCS[3]> ip 192.168.1.3 24
9 PC3 : 192.168.1.3 255.255.255.0
10 VPCS[3]> 4
11 VPCS[4]> ip 192.168.1.4 24
12 PC4 : 192.168.1.4 255.255.255.0
13
14 /*查看配置是否生效*/
15 VPCS[4]> show
16
17 NAME IP/CIDR GATEWAY MAC LPORT RPORT
18 VPCS1 192.168.1.1/24 0.0.0.0 00:50:79:66:68:00 20000 30000
19 fe80::250:79ff:fe66:6800/64
20 VPCS2 192.168.1.2/24 0.0.0.0 00:50:79:66:68:01 20001 30001
21 fe80::250:79ff:fe66:6801/64
22 VPCS3 192.168.1.3/24 0.0.0.0 00:50:79:66:68:02 20002 30002
23 fe80::250:79ff:fe66:6802/64
24 VPCS4 192.168.1.4/24 0.0.0.0 00:50:79:66:68:03 20003 30003
25 fe80::250:79ff:fe66:6803/64
26 VPCS[4]>

SW1配置:

1 Router>en
2 Router#conf t
3 Router(config)#host SW1 /*改个名字看起来像一点*/
4 SW1(config)#end
5
6 /*GNS3中只支持数据库配置模式配置VLAN*/
7 SW1#vlan database
8 SW1(vlan)#vlan 2 name vlan2 /*创建VLAN2并且起名为vlan2*/
9 VLAN 2 added:
10 Name: vlan2
11 SW1(vlan)#vlan 3 name vlan3 /*创建VLAN3并且起名为vlan3*/
12 VLAN 3 added:
13 Name: vlan3
14 SW1(vlan)#exit /*退出vlan数据库配置模式*/
15 APPLY completed.
16 Exiting....
17 SW1#conf t
18 SW1(config)#int fa 0/0
19 SW1(config-if)#swi acc vlan 2 /*将fa0/0接入vlan2*/
20 SW1(config-if)#int fa 0/1
21 SW1(config-if)#swi mod acc
22 SW1(config-if)#swi acc vlan 3 /*将fa0/1接入vlan3*/
23 SW1(config-if)#int fa 0/15
24 SW1(config-if)#swi mod trunk /*将fa0/15配置成主干模式*/
25 SW1(config-if)#switchport trunk allowed vlan all /*允许所有VLAN*/
26
27 /*GNS3模拟器上支持这条命令,更改主干线路封装协议为802.1Q(默认也是这个)*/
28 SW1(config-if)#switchport trunk encapsulation dot1q
29 SW1(config-if)#end
30 SW1#

SW2配置:

1 Router>
2 Router>en
3 Router#conf t
4 Router(config)#host SW2
5 SW2(config)#end
6 SW2#vlan database
7 SW2(vlan)#vlan 2 name vlan2
8 VLAN 2 added:
9 Name: vlan2
10 SW2(vlan)#vlan 3 name vlan3
11 VLAN 3 added:
12 Name: vlan3
13 SW2(vlan)#exit
14 APPLY completed.
15 Exiting....
16 SW2#conf t
17 SW2(config)#int fa 0/0
18 SW2(config-if)#swi acc vlan 2
19 SW2(config-if)#int fa 0/1
20 SW2(config-if)#swi acc vlan 3
21 SW2(config-if)#int fa 0/15
22 SW2(config-if)#swi mod trunk
23 SW2(config-if)#swi trunk allowed vlan all
24 SW2(config-if)#swi trunk encapsulation dot1q
25 SW2(config-if)#end
26 SW2#

配置完成后,在VPCS上测试PING:

1 /*VPC4可以和VPC2通信*/
2 VPCS[4]> ping 192.168.1.2
3 192.168.1.2 icmp_seq=1 ttl=64 time=32.000 ms
4
5 /*VPC4不能和VLAN2中的任何计算机通信*/
6 VPCS[4]> ping 192.168.1.1
7 host (192.168.1.1) not reachable
8 VPCS[4]> ping 192.168.1.3
9 host (192.168.1.3) not reachable
10
11 /*切换到VPC3进行测试*/
12 VPCS[4]> 3
13 VPCS[3]> ping 192.168.1.1
14 192.168.1.1 icmp_seq=1 ttl=64 time=31.000 ms
15
16 VPCS[3]> ping 192.168.1.2
17 host (192.168.1.2) not reachable
18 VPCS[3]> ping 192.168.1.4
19 host (192.168.1.4) not reachable

在添加了交换模块的路由器上显示VLAN信息和在交换机上显示的命令有略微差异:

1 /*使用下面的命令来查看VLAN信息*/
2 SW1#show vlan-switch brief
3
4 VLAN Name Status Ports
5 ---- -------------------- --------- -------------------------------
6 1 default active Fa0/2, Fa0/3, Fa0/4, Fa0/5
7 Fa0/6, Fa0/7, Fa0/8, Fa0/9
8 Fa0/10, Fa0/11, Fa0/12, Fa0/13
9 Fa0/14
10 2 vlan2 active Fa0/0
11 3 vlan3 active Fa0/1
12 1002 fddi-default active
13 1003 token-ring-default active
14 1004 fddinet-default active
15 1005 trnet-default active
16 SW1#

除此命令外,其他命令都相同。

[*4*].VLAN间路由

在上面的试验中VLAN之间是不能互访的,VLAN间的互访需要借助路由器或三层交换机来实现。

* 基于路由器物理接口的VLAN 间路由
如下图所示,PC1和PC2连接在SW1上,PC的IP和网关配置如图所示,PC1属于VLAN2,PC2属于VLAN3,为了实
现VLAN2能够和VLAN3通信,需要将SW1的Fa0/23划分到VLAN2中,将Fa0/24划分到VLAN3中,并且在R1上配置
对应的网关IP地址。

SW1配置:

1 SW1(config)#vlan 2 /*创建VLAN*/
2 SW1(config-vlan)#name vlan2
3 SW1(config-vlan)#vlan 3
4 SW1(config-vlan)#name vlan3
5 SW1(config-vlan)#int fa 0/1 /*将端口划分到VLAN*/
6 SW1(config-if)#swi mod acc
7 SW1(config-if)#swi acc vlan 2
8 SW1(config-if)#int fa 0/2
9 SW1(config-if)#swi mod acc
10 SW1(config-if)#swi acc vlan 3
11 SW1(config-if)#int fa 0/23
12 SW1(config-if)#swi mod acc
13 SW1(config-if)#swi acc vlan 2
14 SW1(config-if)#int fa 0/24
15 SW1(config-if)#swi mod acc
16 SW1(config-if)#swi acc vlan 3
17 SW1(config-if)#end
18 SW1#

R1配置:

1 R1(config)#int fa 0/0
2 R1(config-if)#ip add 192.168.1.254 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#int fa 0/1
5 R1(config-if)#ip add 192.168.2.254 255.255.255.0
6 R1(config-if)#no shut
7 R1(config-if)#end
8 R1#

配置完成后在PC1上可以Ping通PC2,VLAN2和VLAN3通信成功。

* 基于路由器子接口的VLAN 间路由(单臂路由)
在上面的实例中,如果使用路由的物理接口来配置,那么交换机上有多少个VLAN就需要在路由器上配置多少个物理
接口来实现VLAN间的互访,这样成本很高。现实中一般使用”单臂路由”的形式,也就是使用路由器接口的子接口来实
现VLAN间的互访。如下图所示:

PC1和PC2的IP地址和网关如图所示,路由器R1的Fa0/0接口上配置两个子接口分别作为VLAN2和VLAN3的网
关,SW1的fa0/24接口需要配置成主干。

SW1配置:

1 SW1(config)#vlan 2
2 SW1(config-vlan)#name vlan2 /*创建VLAN*/
3 SW1(config-vlan)#vlan 3
4 SW1(config-vlan)#name vlan3
5 SW1(config-vlan)#int fa 0/1 /*分配端口到VLAN*/
6 SW1(config-if)#swi mod acc
7 SW1(config-if)#swi acc vlan 2
8 SW1(config-if)#int fa 0/2
9 SW1(config-if)#swi mod acc
10 SW1(config-if)#swi acc vlan 3
11 SW1(config-if)#int fa 0/24 /*配置和R1相连的接口为主干模式*/
12 SW1(config-if)#swi mod trunk
13 SW1(config-if)#end
14 SW1#

R1配置:

1 R1(config)#int fa0/0
2 R1(config-if)#no shut /*主接口只需要打开即可*/
3 R1(config-if)#int fa 0/0.1 /*创建子接口*/
4
5 /*
6 * 子接口封装模式要和SW1的主干封装模式一致,
7 * 因为思科交换机主干默认的封装模式是802.1Q(dot1Q),所以这里也要是这个。
8 * 在dot1Q后面的数字2要和VLAN号对应,这个子接口是针对VLAN2的,所以这里是2。
9 */
10 R1(config-subif)#encapsulation dot1Q 2
11 R1(config-subif)#ip add 192.168.1.254 255.255.255.0
12 R1(config-subif)#no shut /*其实子接口默认是打开的,这条命令可以省去*/
13 R1(config-subif)#int fa 0/0.2
14 R1(config-subif)#encapsulation dot1Q 3
15 R1(config-subif)#ip add 192.168.2.254 255.255.255.0
16 R1(config-subif)#no shut
17 R1(config-subif)#end
18 R1#

配置完成后PC1和PC2能正常通信。

* 交换机上的端口类型

思科交换机有三种类型的端口: 交换端口(Switchport)、路由端口(No Switchport)和SVI端口(Switch Virtual


Interface,交换虚拟端口)。

1,二层交换机的端口类型

交换端口: 二层交换机上的物理接口就是一个二层的交换端口。
SVI端口: 二层交换机也可以被配置一个IP地址,来实现对交换机的远程管理。

在上面的单臂路由实例中,可以给SW1配置一个SVI端口用于远程管理:

1 /*可以通过下面的命令给SW1配置一个用来网管的IP地址*/
2 SW1(config)#int vlan 2
3 SW1(config-if)#ip add 192.168.1.200 255.255.255.0
4 SW1(config-if)#no shut /*打开此SVI接口*/
5 SW1(config-if)#exit
6 /*配置网关指向R1的子接口*/
7 SW1(config)#ip default-gateway 192.168.1.254
8 SW1(config)#end
9 SW1#

这样PC1和PC2均可以使用这个IP地址(192.168.1.200)对SW1进行远程管理。交换机的网关地址可以配置在任何一
个VLAN的SVI上,但是这个VLAN必须在间路由上有子接口(或物理接口)作为网关,并且只有最小的SVI端口是有
效的。比如在本例中,可以将SVI配置在VLAN3上,但是必须关闭刚才配置的VLAN2的SVI:

1 /*删除之前配置的默认网关*/
2 SW1(config)#no ip default-gateway 192.168.1.254
3 SW1(config)#int vlan 2 /*关闭刚才配置的较小的SVI*/
4 SW1(config-if)#shut
5 SW1(config-if)#int vlan 3 /*将网管IP配置在VLAN3上*/
6 SW1(config-if)#ip add 192.168.2.200 255.255.255.0
7 SW1(config-if)#no shut
8 SW1(config-if)#exit
9
10 /*配置在哪个VLAN上默认网关就要指向那个VLAN的网关*/
11 SW1(config)#ip default-gateway 192.168.2.254
12 SW1(config)#end
13 SW1#

2,三层交换机的端口类型

三层交换机除了支持二层交换机的”交换端口”、”SVI端口”之外,还支持”路由端口”,可以使用下面的命令将一台三层
交换机的某个端口转变成”路由端口”:
1 SW1(config)#int fa 0/1
2 /*在没有被配置成路由接口以前,配置IP会出现下面的错误提示*/
3 SW1(config-if)#ip add 192.168.1.1 255.255.255.0
4
5 % IP addresses may not be configured on L2 links.
6
7 /*用下面的命令将接口变成路由接口*/
8 SW1(config-if)#no switchport
9 SW1(config-if)#ip add 192.168.1.1 255.255.255.0
10 SW1(config-if)#no shut
11 SW1(config-if)#end
12 SW1#
13
14 /*可以使用下面的命令将3层接口再转换成2层接口*/
15 SW1(config)#int fa 0/1
16 SW1(config-if)#switchport

路由端口虽然可以配置IP地址,具有三层接口的特性,但同时也失去了二层接口的特性,比如端口安全等。

* 基于三层交换机的VLAN 间路由

基于三层交换机的VLAN间路由实际上就是利用三层交换机的SVI作为每个VLAN的网关。如下图所示,SW1是一台三
层交换机,在它上面启用了对应每个VLAN号的SVI接口:

SW1配置:

1 SW1(config)#vlan 2 /*创建VLAN*/
2 SW1(config-vlan)#name vlan2
3 SW1(config-vlan)#vlan 3
4 SW1(config-vlan)#name vlan3
5 SW1(config-vlan)#int fa 0/1 /*将端口划分到VLAN*/
6 SW1(config-if)#swi mod acc
7 SW1(config-if)#swi acc vlan 2
8 SW1(config-if)#int fa 0/2
9 SW1(config-if)#swi mod acc
10 SW1(config-if)#swi acc vlan 3
11 SW1(config-if)#int vlan 2 /*配置对应VLAN号的SVI端口*/
12 SW1(config-if)#ip add 192.168.1.254 255.255.255.0
13 SW1(config-if)#no shut
14 SW1(config-if)#int vlan 3
15 SW1(config-if)#ip add 192.168.2.254 255.255.255.0
16 SW1(config-if)#no shut
17 SW1(config-if)#end
18 SW1#

三层交换机的VLAN间路由配置是最简单的,注意SVI端口号和VLAN号对应就可以了,配置完成
后PC1能Ping通PC2。到此VLAN间路由配置的三种方法介绍完毕。

* 路由器和三层交换机在实现VLAN 间路由上的区别

在前面两个基于路由器的VLAN间路由上,不同VLAN间的通信都要经过路由器,而经过路由器的延时比流经交换机的
延时大,因为路由器比交换机处理过程复杂(对每个数据帧都得解封装-查询路由表-再封装);其次就是路由和交换
机之间的线路会成为瓶颈。

在后面的基于三层交换机的VLAN间路由上,首先不存在线路瓶颈,因为在交换机内部,交换机的背板带宽可以上几
十GB;其次假设VLAN2中的PC1要和VLAN3中的PC2进行通信,PC1将数据包发给三层交换机上的SVI端口,三层交
换机知道这是一个VLAN间的通信,三层交换机将数据包通过背板电路发给路由模块,路由模块解封装查询路由表,
然后再次封装发给交换模块,交换模块查询MAC表最后封装成帧,从对应接口发出去。后面相同目的地的数据包直接
查询缓存进行转发,而不发往路由模块(一次路由,多次交换),这就大大提高了转发速度。

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十一]VTP协议实例详解
发表于 2012 年 11 月 13 日 由 晴刃

这篇文章介绍VTP协议,包括VPT的作用、特点、默认信息、域名、通告、模式以及裁剪,最后用两个实例来演
示VTP的配置。
___________________________________________

文章目录

[*1*].VTP协议介绍
VTP的作用
VTP的特点
如何查看VTP信息
什么是VTP域名
什么是VTP通告
VTP模式有哪几种
[*2*].VTP配置实例
VTP综合实验
VTP裁剪(Pruning)实例
[*3*].VTP配置需要注意的问题

___________________________________________

[*1*].VTP协议介绍

Cisco交换机一旦通过某种方式激活了干线,这些交换机会通过通告报文来指示哪些VLAN是可用的,并且会维持这
些VLAN的相关信息,这种功能就叫做VTP(Vlan Trunking Protocol,VLAN中继协议)。VTP是思科私有的协议,
但大多数交换机都支持该协议。

* VTP 的作用

使用VTP可以将一台交换机配置成VTP Server,将其余的交换机配置成VTP Client,那么作为VTP Client的交换机会


自动同步VTP Server交换机上面配置的VLAN信息,这样就不需要在每一台交换机上配置相同的VLAN信息;对VTP
Server上VLAN的添加和删除重命名等操作会自动同步到VTP Client,确保了整个网络配置的一致性。

* VTP 的特点

VTP是一种消息协议,使用第二层帧,通过VLAN1传输;可以用VTP管理网络的VLAN范围从1到1005,VTP不能管
理扩展的VLAN(大于1005)。VTP协议使用VTP通告(VTP advertisements)在交换机间交互VLAN信息,VTP通
告只能在Trunk(主干)链路上上互交信息。
* 如何查看VTP 信息

一台思科交换机的默认VTP信息大致如下,可以通过下面的命令来查看:

1 Switch#show vtp status


2 VTP Version : 2
3 Configuration Revision : 0
4 Maximum VLANs supported locally : 255
5 Number of existing VLANs : 5
6 VTP Operating Mode : Server
7 VTP Domain Name :
8 VTP Pruning Mode : Disabled
9 VTP V2 Mode : Disabled
10 VTP Traps Generation : Disabled
11 MD5 digest : 0x7D 0x5A 0xA6 0x0E 0x9A 0x72 0xA0 0x3A
12 Configuration last modified by 0.0.0.0 at 0-0-00 00:00:00
13 Local updater ID is 0.0.0.0 (no valid interface found)
14 Switch#
15
16 /*
17 * "VTP Version:2" 表示这台交换支持两种VTP版本(1和2),默认运行的是版本1,
18 * 这里显示的2,不代表默认运行的版本是 Version 2,只代表支持几种版本。
19 *
20 * "Configuration Revision:0" 配置修正号是0,
21 * 交换机上VLAN配置信息发生改变时,配置修正号自动加1,
22 * 配置修正号暗示了交换机VLAN配置信息的新旧。
23 *
24 * "Maximum VLANs supported locally:255"
25 * 表示交换机最大可配置的VLAN数量是255个,这个值和交换机的型号有关。
26 *
27 * "Number of existing VLANs:5" 当前已经有5个VLAN,
28 * 交换机默认VLAN就是5个(VLAN1、VLAN1002-1005)。
29 *
30 * "VTP Operating Mode:Server" 交换机当前的VTP模式是VTP Server。
31 *
32 * "VTP Domain Name" VTP域名,没有配置的时候为空。
33 *
34 * "VTP Pruning Mode:Disabled" 是否开启了VTP裁剪功能,默认没有开启。
35 *
36 * "VTP V2 Mode:Disabled" VTP版本2没有开启,所以默认是使用版本1,
37 * 可以使用下面这条命令修改VTP使用的版本:
38 * Switch(config)#vtp version 1或2。
39 *
40 * "VTP Traps Generation" Trap主要用来为SNMP服务器发送消息,默认没有开启。
41 *
42 * "MD5 digest" 从VTP计算得出的散列值,如果VLAN信息发生改变该值也会改变。
43 *
44 * "Configuration last modified" 最后配置改变的时间。
45 *
46 * "Local updater ID" 发送VTP信息的端口IP地址,可以手动指定发送VTP信息的端口。
47 */

* 什么是VTP 域名

VTP协议允许在一台交换机上集中配置,所做的配置会被自动传播到网络中所有其他的交换机上,但是前提是这些交
换机都在一个VTP域中;同一个域中的交换机拥有相同的VTP域名;默认的域名为空,此时交换机不会向外传
播VTP通告,并且一个交换机只能加入一个VTP域。
可以使用下面的命令更改VTP域名:

1 /*修改VTP域名为"ccna_VTP_name"*/
2 Switch(config)#vtp domain ccna_VTP_name
3 Changing VTP domain name from NULL to ccna_VTP_name
4 Switch(config)#end
5 Switch#
6
7 /*再次查看VTP状态,可以看到域名已经修改*/
8 Switch#show vtp status
9 VTP Version : 2
10 Configuration Revision : 0
11 Maximum VLANs supported locally : 255
12 Number of existing VLANs : 5
13 VTP Operating Mode : Server
14 VTP Domain Name : ccna_VTP_name
15 ....
16 Switch#

注意,当域名被改变或者删除闪存中的VLAN配置文件vlan.dat并且重启时配置修正号会自动归零;另外,当交换机处
于Transparent模式时,因为不需要和其他交换机同步VTP信息,配置修正号始终为0;当网络中的交换机配置修正号
都为0的时候,他们之间不会同步VLAN配置信息。

在同一个域中,如果没有设置VTP密码,只要域名相同,配置修正号大的交换机的VLAN配置将覆盖配置修正号小的
交换机的VLAN配置,这样非常不安全,可以通过下面的命令配置一个VTP密码,只有域名和密码都相同的情况下,
才会互交VLAN配置信息:

1 Switch(config)#vtp password ccna

在后面的综合试验中会演示到这些命令。

* 什么是VTP 通告

1,VTP帧结构

VTP被封装在802.1Q或ISL帧中(交换机间主干链路的封装协议),VTP帧以组播的方式发送,目的MAC是保留
的MAC地址”01-00-0C-CC-CC-CC”。

VTP帧包括帧头和信息内容:

VTP帧头中包含了VTP域名、域名长度、VTP版本、VTP配置修正号、VTP信息类型(包含了三种信息类型,总
汇、子集、查询)等。
VTP信息内容包括MD5散列值、帧的格式(ISL或802.1Q)、每个VLAN的配置信息(配置信息中包括:VLAN
ID、VLAN名称、类型、状态等)。

2,VTP通告类型

VTP通告有三种类型:
汇总通告(Summary Advertisements):汇总通告包含VTP域名、配置修正号以及配置的一些细节。汇总通告有两
种发送方式:周期性发送,每隔5分钟被VTP Server或VTP Client发送。触发发送,如果VTP配置发生变化VTP通
告立即发送。
子集通告(Subset Advertisements):在创建或删除VLAN、挂起或激活VLAN、更改VLAN名称、改变VLAN
UTM时会发送子集通告。
查询通告(Request Advertisements):当VTP Server收到一个查询通告时,VTP Server会发送一个VTP汇总通告
和一个VTP子集通告。下面这些情况会发送查询通告:VTP域名发生变化时、交换机收到一个汇总通告,通告中
的配置修正号高于本交换机的配置修正号、因为某些原因子集通告丢失、交换机重启。

* VTP 模式有哪几种

思科交换机可以被配置成3种VTP模式:

Server模式:Server模式是思科交换机默认的VTP模式,在这种模式下的交换机可以创建、修改、删
除VLAN,VTP Server交换机通告自己的VLAN信息给同一个域中的其他交换机,同时也与收到的VTP通告同
步VLAN信息,VLAN的配置信息保存在闪存的vlan.dat文件中。
Client模式:工作在这种模式下的交换机不可以创建、修改、删除VLAN,当工作在这种模式下的交换机重启时,
它发送一个查询通告给VTP Server,请求更新的VLAN信息。这种模式下的交换机VLAN配置信息也保存在闪存
的vlan.dat文件中。
Transparent模式:工作在这种模式下的交换机可以创建、修改、删除VLAN,但所做的修改只影响当前交换机。
在这种模式下,交换机可以转发收到的VTP通告给网络中的其他交换机,但只是转发,Transparent模式下的交
换机并不发送自己的VTP信息给其他交换机,也不与网络中的其他交换机同步信息。这种模式下的交换机
的VLAN配置信息保存在running-config中,并非保存在vlan.dat中。

[*2*].VTP配置实例

* VTP 综合实验

这一部分用一个综合实验来演示一下上面提到的三种VTP模式、VTP密码和域名、VTP版本的选择等。需要注意的几
点是,VTP的域名是区分大小写的,VTP版本1和版本2是不兼容的。

实验拓扑如下(实验在Cisco Packet Tracer 5.3模拟器中完成):


配置SW1为VTP Server,SW2和SW4为VTP Client,SW3为VTP Transparent,交换机和交换机之间配置成主干链
路(前面理论部分说过,VTP通告只能在主干链路上发送):

1,将交换机之间的链路全部配置成主干链路

SW1配置:

1 SW1(config)#int fa 0/1
2 SW1(config-if)#swi mod trunk
3 SW1(config-if)#int fa 0/2
4 SW1(config-if)#swi mod trunk
5 SW1(config-if)#end
6 SW1#

SW2配置:

1 SW2(config)#int fa 0/2
2 SW2(config-if)#swi mod trunk
3 SW2(config-if)#end
4 SW2#

SW3配置:

1 SW3(config)#int fa 0/2
2 SW3(config-if)#swi mod trunk
3 SW3(config-if)#int fa 0/3
4 SW3(config-if)#swi mod trunk
5 SW3(config-if)#end
6 SW3

SW4配置:

1 SW4(config)#int fa 0/2
2 SW4(config-if)#swi mod trunk
3 SW4(config-if)#end
4 SW4#

2,首先配置网络中的VTP Transparent交换机

SW3配置:

1 W3(config)#vtp mode transparent /*配置交换机VTP模式为Transparent*/


2 Setting device to VTP TRANSPARENT mode.
3 SW3(config)#vtp domain ccna /*配置VTP域名为ccna,也可以配置成和VTP Server不同
的任意名字*/
4 Changing VTP domain name from NULL to ccna
5 SW3(config)#vlan 2 /*创建一个VLAN2*/
6 SW3(config-vlan)#name SW3vlan2
7 SW3(config-vlan)#int fa 0/1 /*将和PC2相连的接口接入VLAN2*/
8 SW3(config-if)#swi mod acc
9 SW3(config-if)#swi acc vlan 2
10 SW3(config-if)#end
11 SW3#
12 SW3#

3,配置VTP Server交换机

SW1配置:

1 SW1(config)#vtp mode server /*将交换机VTP模式配置成Server*/


2 Device mode already VTP SERVER.
3 SW1(config)#vtp domain ccna /*配置VTP域名*/
4 Changing VTP domain name from NULL to ccna
5 SW1(config)#vtp password ccna /*配置VTP密码*/
6 Setting device VLAN database password to ccna
7 SW1(config)#vtp version 2 /*将VTP版本改成2*/
8 SW1(config)#end
9 SW1#

4,配置VTP Client

SW2配置:

1 SW2(config)#vtp mode client /*配置VTP模式为Client*/


2 Setting device to VTP CLIENT mode.
3 SW2(config)#vtp domain ccna /*域名ccna要和VTP Server相同*/
4 Domain name already set to ccna.
5 SW2(config)#vtp password ccna /*密码也要和VTP Server上的相同*/
6 Setting device VLAN database password to ccna
7 SW2(config)#end
8 SW2#

SW4配置:

1 SW4(config)#vtp mode client


2 Setting device to VTP CLIENT mode.
3 SW4(config)#vtp domain ccna
4 Domain name already set to ccna.
5 SW4(config)#vtp password ccna
6 Setting device VLAN database password to ccna
7 SW4(config)#end
8 SW4#

5,在VTP Server上测试新增VLAN,在其他交换机上查看是否同步成功

SW1配置:

1 SW1(config)#vlan 2
2 SW1(config-vlan)#name vlan2
3 SW1(config-vlan)#vlan 3
4 SW1(config-vlan)#name vlan3
5 SW1(config-vlan)#end
6 SW1#

下面是SW2、SW3、SW4的VTP以及VLAN显示信息:

1 /*
2 * 可以看到SW2上面的VTP信息发生了变化,同步了SW1的配置,
3 * VLAN数也增加到了7,VTP版本也变成了版本2。
4 */
5 SW2#show vtp status
6 VTP Version : 2
7 Configuration Revision : 5
8 Maximum VLANs supported locally : 255
9 Number of existing VLANs : 7
10 VTP Operating Mode : Client
11 VTP Domain Name : ccna
12 VTP Pruning Mode : Disabled
13 VTP V2 Mode : Enabled
14 VTP Traps Generation : Disabled
15 MD5 digest : 0xC6 0x8E 0x52 0x80 0x59 0xF9 0x43 0x2F
16 Configuration last modified by 0.0.0.0 at 3-1-93 00:25:40
17
18 /*SW2的VLAN信息和SW1保持同步*/
19 SW2#show vlan brief
20
21 VLAN Name Status Ports
22 ---- --------------------- --------- -------------------------------
23 1 default active Fa0/1, Fa0/3, Fa0/4, Fa0/5
24 Fa0/6, Fa0/7, Fa0/8, Fa0/9
25 Fa0/10, Fa0/11, Fa0/12, Fa0/13
26 Fa0/14, Fa0/15, Fa0/16, Fa0/17
27 Fa0/18, Fa0/19, Fa0/20, Fa0/21
28 Fa0/22, Fa0/23, Fa0/24, Gig1/1
29 Gig1/2
30 2 vlan2 active
31 3 vlan3 active
32 1002 fddi-default active
33 1003 token-ring-default active
34 1004 fddinet-default active
35 1005 trnet-default active
36 SW2#
37
38 /*
39 * 可以看到SW3配置成了Transparent模式,这种模式不和其他交换机同步VLAN信息,
40 * 同时它的配置修正号也始终为0,VTP版本也是默认的版本1,
41 * 但是它仍然转发SW1的VTP通告给SW4。
42 */
43 SW3#show vtp status
44 VTP Version : 2
45 Configuration Revision : 0
46 Maximum VLANs supported locally : 255
47 Number of existing VLANs : 6
48 VTP Operating Mode : Transparent
49 VTP Domain Name : ccna
50 VTP Pruning Mode : Disabled
51 VTP V2 Mode : Disabled
52 VTP Traps Generation : Disabled
53 MD5 digest : 0xE1 0x2A 0x13 0xE5 0xB3 0xA4 0x96 0xA4
54 Configuration last modified by 0.0.0.0 at 0-0-00 00:00:00
55
56 /*可以看到SW3的VLAN并没有和SW1同步*/
57 SW3#show vlan brief
58
59 VLAN Name Status Ports
60 ---- --------------------- --------- -------------------------------
61 1 default active Fa0/4, Fa0/5, Fa0/6, Fa0/7
62 Fa0/8, Fa0/9, Fa0/10, Fa0/11
63 Fa0/12, Fa0/13, Fa0/14, Fa0/15
64 Fa0/16, Fa0/17, Fa0/18, Fa0/19
65 Fa0/20, Fa0/21, Fa0/22, Fa0/23
66 Fa0/24, Gig1/1, Gig1/2
67 2 SW3vlan2 active Fa0/1
68 1002 fddi-default active
69 1003 token-ring-default active
70 1004 fddinet-default active
71 1005 trnet-default active
72 SW3#
73
74 /*SW4的输出和SW2是一样的,这里就不列出了,大家可以在SW1上去添加删除VLAN,测
试SW1和SW4是否会和SW1的VLAN信息同步。*/

6,下面我们将PC1和PC3也加入到VLAN2中,并且测试PC1、PC2、PC3的通信是否能够成功

1 SW2(config)#int fa 0/1
2 SW2(config-if)#swi mod acc
3 SW2(config-if)#swi acc vlan 2
4 SW2(config-if)#end
5 SW2#
6
7 SW4(config)#int fa 0/1
8 SW4(config-if)#swi mod acc
9 SW4(config-if)#swi acc vlan 2
10 SW4(config-if)#end
11 SW4#

最后发现,都能够Ping通,这一部分实验到此结束。

* VTP 裁剪(PRUNING )实例

VTP Pruning(VTP裁剪),是VTP的一个重要功能,能够减少中继端口上不必要的信息量,默认情况下思科
的VTP裁剪是关闭的。在下图中,SW1和SW2在没有开启VTP裁剪以前,在主干端口上会发送全部VLAN信息
的VTP通告,如果开启了VTP裁剪,那么SW1发给SW2的VTP通告中将不会包含VLAN2的信息,因为SW2上面没有
属于这个VLAN的接口,同理SW2发给SW1的通告中不会包含VLAN4的信息。

“Cisco Packet Tracer 5.3″不支持VTP裁剪命令,这个实验在GNS3中模拟,GNS3中VTP模式配置命令稍有不同,拓扑


图如下:

图中,SW1和SW2之间的链路被配置成了主干,SW1被配置成VTP Server,SW2被配置成VTP Client,VPC1-4是


用VPCS模拟出来的4台计算机,VPC1被划分到VLAN2中,VPC2被划分到VLAN3中,VPC3被划分
到VLAN3中,VPC4被划分到VLAN4中。

1,将SW1和SW2之间的链路配置成主干

SW1配置:

1 SW1(config)#int fa 0/15
2 SW1(config-if)#swi mode trunk

SW2配置:

1 SW2(config)#int fa 0/15
2 SW2(config-if)#swi mode trunk

2,将SW1配置成VTP Server(GNS3中仅支持在VLAN数据库配置模式下配置)

SW1配置:

1 SW1#vlan database /*进入VLAN数据库配置模式*/


2 SW1(vlan)#vtp domain ccna /*建议首先配置VTP域名,这里配置成ccna*/
3 Domain name already set to ccna .
4 SW1(vlan)#vtp password ccna /*配置VTP密码为ccna*/
5 Password already set to ccna.
6 SW1(vlan)#vtp server /*将SW1配置成Server*/
7 Device mode already VTP SERVER.
8 SW1(vlan)#vtp v2-mode /*将默认的VTP版本改成版本2*/
9 V2 mode already enabled.
10 SW1(vlan)#exit /*保存退出*/
11 APPLY completed.
12 Exiting....
13 SW1#

3,将SW2配置成VTP Client

SW2配置:

1 SW2#vlan database
2 SW2(vlan)#vtp domain ccna /*先配置VTP域名和VTP Server相同*/
3 Domain name already set to ccna .
4 SW2(vlan)#vtp password ccna /*配置VTP密码*/
5 Setting device VLAN database password to ccna.
6 SW2(vlan)#vtp client /*将SW2配置成VTP Client*/
7 Setting device to VTP CLIENT mode.
8 SW2(vlan)#exit
9 In CLIENT state, no apply attempted.
10 Exiting....
11 SW2#

4,在SW1上增加VLAN,然后在SW1和SW2上划分端口到VLAN新增的VLAN中

SW1配置:

1 /*在SW1上新增3个VLAN*/
2 SW1#vlan database
3 SW1(vlan)#vlan 2 name vlan2
4 VLAN 2 added:
5 Name: vlan2
6 SW1(vlan)#vlan 3 name vlan3
7 VLAN 3 added:
8 Name: vlan3
9 SW1(vlan)#vlan 4 name vlan4
10 VLAN 4 added:
11 Name: vlan4
12 SW1(vlan)#exit
13 APPLY completed.
14 Exiting....
15
16 /*将端口划分到VLAN中*/
17 SW1#conf t
18 SW1(config)#int fa 0/0
19 SW1(config-if)#swi mod acc
20 SW1(config-if)#swi acc vlan 2
21 SW1(config-if)#int fa 0/1
22 SW1(config-if)#swi mod acc
23 SW1(config-if)#swi acc vlan 3
24 SW1(config-if)#end
25 SW1#

SW1配置:

1 /*
2 * 查看SW2上的VLAN信息,确保已经学习到SW1上的VLAN,
3 * 交换模块查看VLAN的命令稍有不同。
4 */
5 SW2#show vlan-switch brief
6
7 VLAN Name Status Ports
8 ---- ------------------ --------- -------------------------------
9 1 default active Fa0/0, Fa0/1, Fa0/2, Fa0/3
10 Fa0/4, Fa0/5, Fa0/6, Fa0/7
11 Fa0/8, Fa0/9, Fa0/10, Fa0/11
12 Fa0/12, Fa0/13, Fa0/14
13 2 vlan2 active
14 3 vlan3 active
15 4 vlan4 active
16 1002 fddi-default active
17 1003 trcrf-default active
18 1004 fddinet-default active
19 1005 trbrf-default active
20 SW2#
21
22 /*将端口划分到VLAN中*/
23 SW2(config)#int fa 0/0
24 SW2(config-if)#swi mod acc
25 SW2(config-if)#swi acc vlan 3
26 SW2(config-if)#int fa 0/1
27 SW2(config-if)#swi mod acc
28 SW2(config-if)#swi acc vlan 4
29 SW2(config-if)#end
30 SW2#

5,在没有开启裁剪前查看主干链路信息

查看SW1主干链路信息:

1 SW1#show interfaces trunk


2
3 Port Mode Encapsulation Status Native vlan
4 Fa0/15 on 802.1q trunking 1
5
6 Port Vlans allowed on trunk
7 Fa0/15 1-1005
8
9 Port Vlans allowed and active in management domain
10 Fa0/15 1-4
11
12 /*这一项显示了VTP裁剪情况,现在还没有VLAN被裁剪*/
13 Port Vlans in spanning tree forwarding state and not pruned
14 Fa0/15 1-4
15 SW1#

6,开启裁剪后查看主干链路信息

在SW1上开启VTP裁剪(只需要在VTP Server上开启即可):

1 SW1#vlan database
2 SW1(vlan)#vtp pruning /*开启VTP裁剪*/
3 Pruning switched ON
4 SW1(vlan)#exit
5 APPLY completed.
6 Exiting....
7 SW1#
8
9 /*再次查看SW1主干信息*/
10 SW1#show interfaces trunk
11
12 Port Mode Encapsulation Status Native vlan
13 Fa0/15 on 802.1q trunking 1
14
15 Port Vlans allowed on trunk
16 Fa0/15 1-1005
17
18 Port Vlans allowed and active in management domain
19 Fa0/15 1-4
20
21 /*
22 * 发现SW1的主干端口上面裁剪掉了VLAN2的信息,
23 * 因为SW2上没有端口在VLAN2下。
24 */
25 Port Vlans in spanning tree forwarding state and not pruned
26 Fa0/15 1,3-4
27 SW1#
28
29 /*SW2上查看VTP信息*/
30 SW2#show vtp status
31 VTP Version : 2
32 Configuration Revision : 3
33 Maximum VLANs supported locally : 256
34 Number of existing VLANs : 8
35 VTP Operating Mode : Client
36 VTP Domain Name : ccna
37 VTP Pruning Mode : Enabled /*VTP裁剪已经开启*/
38 VTP V2 Mode : Enabled
39 VTP Traps Generation : Disabled
40 MD5 digest : 0x9E 0x65 0x20 0x33 0xB6 0xC7 0x1B 0x55
41 Configuration last modified by 0.0.0.0 at 3-1-02 00:15:12
42 SW2#
43
44 /*SW2上查看主干信息*/
45 SW2#show interfaces trunk
46
47 Port Mode Encapsulation Status Native vlan
48 Fa0/15 on 802.1q trunking 1
49
50 Port Vlans allowed on trunk
51 Fa0/15 1-1005
52
53 Port Vlans allowed and active in management domain
54 Fa0/15 1-4
55
56 /*可以看到这里裁剪了VLAN4,因为SW1上没有接口在VLAN4下*/
57 Port Vlans in spanning tree forwarding state and not pruned
58 Fa0/15 1-3
59 SW2#

[*3*].VTP配置需要注意的问题

VTP配置需要注意下面几点:

VTP版本1不兼容版本2。
确保同一个域中VTP密码要一致。
确保同一个域中VTP域名要一致。
VTP模式要配置正确,VTP域中至少要有一台VTP Server。
在一台交换机加入VTP域中时,最好先将它的配置修正号归零,方法就是随便给它配置一个域名,然后再将它的
域名改成正确的域名,再将它连入域中。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十二]STP生成树协议实例详解
发表于 2012 年 11 月 16 日 由 晴刃

这篇文章介绍SPT(Spanning-Tree Protocol,生成树协议)的工作原理,在分层网络中存在冗余链路的情况下容易引
起流量环路,使用STP能够动态的管理这些冗余链路;当某台交换机的一条连接丢失时,另一条链路能迅速取代失败
链路,并且不会产生流量环路。文章主要包括下面几点内容:冗余拓扑中存在的问题、生成树协议、生成树收敛、利用
生成树实施负载均衡等。
___________________________________________

文章目录

[*1*].冗余链路中存在的问题
广播风暴
MAC地址表不稳定
重复帧拷贝
[*2*].STP介绍
STP算法
根交换机选举
端口花费和路径花费
BPDU结构浅析
STP端口角色
端口状态和BPDU时间
[*3*].STP收敛
生成树的选举
STP拓扑变化
[*4*].STP负载均衡实验

___________________________________________

[*1*].冗余链路中存在的问题

这一部分使用下面这个拓扑来讲解一下链路冗余容易造成的三个问题:
如图所示SW1和SW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那
条链路,这样可以很好的解决单链路故障引起的网络中断,但在此之前有下面三个问题需要考虑。

* 广播风暴

以太网交换机传送的第二层数据帧不像路由器传送的第三层数据包有TTL(Time To Live),如果有环路存在第二层
帧不能被适当的终止,他们将在交换机之间永无止境的传递下去。结合交换机的工作原理,来看一下上面这张拓扑中
广播风暴是如何形成的:

1,PC1发出一个广播帧(可能是一个ARP查询),SW1收到这个广播帧,SW1将这个广播帧从除接收端口的其他端口
转发出去(即发往fa0/2、fa0/23、fa0/24)。
2,SW2从自己的fa0/23和fa0/24都会收到SW1发过来的相同的广播帧,SW2再将这个广播帧从除接收端口外的所有
其他接口发送出去(SW2将从fa0/23接收的广播帧发往其他三个端口fa0/24、fa0/1、fa0/2,从fa0/24接收到的也会发往
其他三个端口fa0/23、fa0/1、fa0/2)。
3,这样这个广播帧又从fa0/23以及fa0/24传回了SW1,SW1再用相同的方法传回SW2,除非物理线路被破坏,否
则PC1-4将不停的接收到广播帧,最终造成网络的拥塞甚至瘫痪。

* MAC 地址表不稳定

广播风暴除了会产生大量的流量外,还会造成MAC地址表的不稳定,在广播风暴形成过程中:

1,PC1发出的广播帧到达SW1,SW1将根据源MAC进行学习,SW1将PC1的MAC和对应端口fa0/1写入MAC缓存表
中。
2,SW1将这个广播帧从除接收端口之外的其他端口转发出去,SW2接收到两个来自SW1的广播
(从fa0/23和fa0/24),假设fa0/23首先收到这个广播帧,SW2根据源MAC进行学习,将PC1的MAC和接收端
口fa0/23存入自己的MAC缓存表,但是这时候又从fa0/24收到了这个广播帧,SW1将PC1的MAC和对应的fa0/24接口
存入自己的MAC缓存表。
3,SW2分别从自己的这两个接口再将这个广播帧发回给SW1,这样PC1的MAC地址会不停的在两台交换机
的fa0/23和fa0/24之间波动,MAC地址缓存表也不断的被刷新,影响交换机的性能。

* 重复帧拷贝

冗余拓扑除了会带来广播风暴以及MAC地址的不稳定,还会造成重复的帧拷贝:

1,假设PC1发送一个单播帧给PC3,这个单播帧到达SW1,假设SW1上海没有PC3的MAC地址,根据交换机的原理,
对未知单播帧进行泛洪转发,即发往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
2,SW2分从自己的fa0/23和fa0/24接收到这个单播帧,SW3知道PC3连接在自己的fa0/1接口上,所以SW1将这两个
单播帧都转发给PC3。
3,PC1只发送了一个单播帧,PC3却收到了两个单播帧,这会给某些网络环境比如流量统计带来不精确计算等问
题。

[*2*].STP介绍
基于冗余链路中存在的这些问题STP被设计出来用来解决这些问题,下面介绍STP的工作原理。

* STP 算法

STP通过拥塞冗余路径上的一些端口,确保到达任何目标地址只有一条逻辑路径,STP借用交换BPDU(Bridge
Protocol Data Unit,桥接数据单元)来阻止环路,BPDU中包含BID(Bridge ID,桥ID)用来识别是哪台计算机发出
的BPDU。在STP运行的情况下,虽然逻辑上没有了环路,但是物理线上还是存在环路的,只是物理线路的一些端口
被禁用以阻止环路的发生,如果正在使用的链路出现故障,STP重新计算,部分被禁用的端口重新启用来提供冗余。

STP使用STA(Spanning Tree Algorithm,生成树算法)来决定交换机上的哪些端口被堵塞用来阻止环路的发


生,STA选择一台交换机作为根交换机,称作根桥(Root Bridge),以该交换机作为参考点计算所有路径。

* 根交换机选举

首先要知道什么是BID(Bridge ID,桥ID),因为根交换机的选举是基于BID的,BID由三部分组成:优先级、发送交
换机的MAC地址、Extended System ID(扩展系统ID,可选项)如下图所示:

BID一共8个字节,其中优先级2个字节,MAC地址6个字节。在不使用Extended System ID的情况下,BID由优先级


域和交换机的MAC地址组成,针对每个VLAN,交换机的MAC地址都不一样,交换机的优先级可以是0-65535。在使
用Extended System ID的情况下每个VLAN的MAC地址可以相同(在GNS3模拟器中不支持Extended System
ID,Cisco Packet Tracer 5.3支持Extended System ID)。值得一提的是,现在的交换机普遍使用Extended System
ID。拥有最小BID的交换机被选举成为根交换机。

在同一个广播域中的所有交换机都参与选举根交换机,当一台交换机启动时,它假设自己是根交换机,并默认每
隔2秒发送一次“次优BPDU”帧,BPDU帧中的Root ID(根交换机的BID)和本机的BID相同。在一个广播域中的交换
机互相转发BPDU帧,并且从接收到的BPDU中读取Root ID,如果读取到的Root ID比本交换机的BID小,交换机更
新Root ID为这个较小的Root ID,然后继续转发修改后的BPDU;如果接收的BPDU中的Root ID比本交换机的BID大,
那么继续将自己的BID作为Root ID向外发送BPDU,直到最后在同一个生成树实例中拥有一致的Root ID,这个Root
ID对应了这个广播域中某台交换机的BID(并且这个BID一定是这个广播域最小的),这台交换机就被选作根交换机。

下面用一个实例来演示一下根交换机的选举,在Cisco Packet Tracer 5.3中搭建下面这样的拓扑:


线连接好后等待几十秒钟,它们会自动选举出根交换机,使用下面的命令验证:

1 /*
2 * 在SW1上查看生成树信息,因为SW1、SW2、SW3上面都没有划分其他的VLAN,
3 * 所以默认只有VLAN0001的生成树信息。
4 *
5 * "Spanning tree enabled protocol ieee",
6 * 表示交换机使用的生成树协议是"PVST+",这也是思科默认的生成树协议。
7 *
8 * "Root ID"后面是VLAN1中根交换机的BID参数,
9 * Priority 32769,表示根交换机的优先级是32769,
10 * Address是根交换机的MAC地址,
11 * "This bridge is the root",表示当前这台交换机就是根交换机。
12 *
13 * "Hello Time 2sec Max Age 20sec Forward Delay 15sec"
14 * BPDU发送间隔默认2秒,最大存在时间是20秒,转发延时是15秒。
15 *
16 * "Bridge ID"后面的参数是本交换机的BID参数,
17 * 因为SW1就是根交换机,所以这个下面的参数和"Root ID"是一样的,
18 * 其中"priority 32768 sys-id-ext 1",表示SW1的优先级是32768,
19 * Extended System ID是1,所以优先级就是32768+1。
20 *
21 * 所以SW1的BID=SW1的优先级+SW1的MAC地址=32769+0001.9681.2683
22 * 接下来查看SW2和SW3的生成树信息,就会知道为什么SW1可以被选举成根交换机了。
23 */
24 SW1#show spanning-tree
25 VLAN0001
26 Spanning tree enabled protocol ieee
27 Root ID Priority 32769
28 Address 0001.9681.2683
29 This bridge is the root
30 Hello Time 2 ec Max Age 20sec Forward Delay 15sec
31
32 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
33 Address 0001.9681.2683
34 Hello Time 2sec Max Age 20sec Forward Delay 15sec
35 Aging Time 20
36
37 Interface Role Sts Cost Prio.Nbr Type
38 ----------- ---- --- --------- -------- ----------
39 Fa0/1 Desg FWD 19 128.1 P2p
40 Fa0/2 Desg FWD 19 128.2 P2p
41 Fa0/3 Desg FWD 19 128.3 P2p
42
43 /*
44 * 查看SW2的生成树信息,
45 *
46 * 可以看到SW2的BID中,优先级是32769,和根交换机(SW1)的相同,
47 * 但是SW2的MAC地址是0030.A310.3975,大于SW1的MAC地址,
48 * 因为BID=优先级+MAC地址,
49 * 从这里可以看出SW1的BID要小于SW2的BID,
50 * 所以SW1为根交换机。
51 */
52 SW2#show spanning-tree
53 VLAN0001
54 Spanning tree enabled protocol ieee
55
56 /*这里是根交换机,也就是SW1的BID信息*/
57 Root ID Priority 32769
58 Address 0001.9681.2683
59 Cost 19
60 Port 2(FastEthernet0/2)
61 Hello Time 2sec Max Age 20sec Forward Delay 15sec
62
63 /*这里是SW2的BID*/
64 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
65 Address 0030.A310.3975
66 Hello Time 2sec Max Age 20sec Forward Delay 15sec
67 Aging Time 20
68 ....
69
70 /*查看SW3的生成树信息,优先级相同,同样是因为MAC地址比SW1大*/
71 SW3#show spanning-tree
72 VLAN0001
73 Spanning tree enabled protocol ieee
74 Root ID Priority 32769
75 Address 0001.9681.2683
76 Cost 19
77 Port 1(FastEthernet0/1)
78 Hello Time 2sec Max Age 20sec Forward Delay 15sec
79
80 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
81 Address 00E0.8F76.269C
82 Hello Time 2sec Max Age 20sec Forward Delay 15sec
83 Aging Time 20
84 ....

通过这个实例,结合前面说的根交换机选举原理,就能很容易的理解根交换机是如何在一个广播域中被选举出来的
了。

上面这种情况是默认连线后不做任何修改根交换机的选举情况,可以通过下面的命令将某台交换机的优先级改小,或
者设置成动态优先级(即永远比其它交换机的优先级小),这样,这台拥有较小优先级的交换机将成为根交换机。

结合上面这个拓扑图(图三),将SW3的优先级改小,从而达到手动指定一台根交换机的目的:

1 /*首先我随便配置一个优先级*/
2 SW3(config)#spanning-tree vlan 1 priority 1000
3
4 /*它提示我,只能是4096的倍数,可以是下面的这些值*/
5 % Bridge Priority must be in increments of 4096.
6 % Allowed values are:
7 0 4096 8192 12288 16384 20480 24576 28672
8 32768 36864 40960 45056 49152 53248 57344 61440
9
10 /*
11 * 这里就设置成4096,注意这里针对的是VLAN1,
12 * 不同的VLAN优先级可以不同,
13 * 不同VLAN的STP选举出来的根交换机也可以不同,
14 * 比如SW3现在是VLAN1的根交换机,
15 * 假设还存在一个VLAN2,并且在SW1上使用这条命令:
16 * spanning-tree vlan 2 priority 4096
17 * 那么SW1就将成为VLAN2的根交换机。前提是VLAN2下有端口。
18 */
19 SW3(config)#spanning-tree vlan 1 priority 4096
20 SW3(config)#end
21 SW3#
22
23 /*过个一两秒,查看SW3的生成树信息,发现他已经成为了根交换机。*/
24 SW3#show spanning-tree
25 VLAN0001
26 Spanning tree enabled protocol ieee
27 Root ID Priority 4097
28 Address 00E0.8F76.269C
29 This bridge is the root
30 Hello Time 2sec Max Age 20sec Forward Delay 15sec
31
32 Bridge ID Priority 4097 (priority 4096 sys-id-ext 1)
33 Address 00E0.8F76.269C
34 Hello Time 2sec Max Age 20sec Forward Delay 15sec
35 Aging Time 20
36 ....

使用下面的命令可以让交换机自动动态的调整自己的优先级为整个广播域最小,使用这条命令让SW2成为根交换机:

1 /*首先清除SW3上面手动配置的优先级*/
2 SW3(config)#no spanning-tree vlan 1 priority
3
4 /*然后配置自动调整优先级,让SW2自己动态调整*/
5 SW2(config)#spanning-tree vlan 1 root primary
6
7 /*等待几秒钟,查看SW2的生成树信息,发现根交换机变成了自己*/
8 SW2#show spanning-tree
9 VLAN0001
10 Spanning tree enabled protocol ieee
11 Root ID Priority 16385
12 Address 0030.A310.3975
13 This bridge is the root
14 ....

* 端口花费和路径花费

根交换机被选举出来后,计算其他交换机到根交换机的花费,STA考虑两种花费,端口花费和路径花费,路径花费是
从根交换机出发到最终交换机前进方向进入的端口花费总和,也就是说在上面的拓扑图图三中,假设SW1是根交换
机,想要改变SW3到根交换机SW1的花费,应该在SW3的fa0/1来改变,而不是在SW1的fa0/3端口上改变。

如果一台交换机有多条路径到达根交换机,这台交换机会选择路径花费最小的那条,下面是默认的端口花费参照表:
这个参照表只是端口默认的花费,端口花费是可以手动修改的,因为”Cisco Packet Tracer 5.3″不支持修改端口花费,
修改端口花费的实验使用GNS3来进行,拓扑如下:

图五中SW1被选举成为根交换机,先在SW3上面查看一下默认的生成树信息:

1 SW3#show spanning-tree brief


2
3 VLAN1
4 Spanning tree enabled protocol ieee
5 Root ID Priority 32768
6 Address cc00.0c94.0000
7
8 /*
9 * 可以看到SW3到根交换机的花费是19,
10 * 这说明SW3的fa0/0接口速率是100Mb/s。
11 */
12 Cost 19
13 Port 1 (FastEthernet0/0)
14 Hello Time 2sec Max Age 20sec Forward Delay 15sec
15 .....

通过下面的命令来修改SW3到根交换机的花费:

1 /*将SW3的fa0/0接口的花费改成40*/
2 SW3(config)#int fa 0/0
3 SW3(config-if)#spanning-tree cost 40
4 SW3(config-if)#end
5
6 /*
7 * 再次查看SW3的生成树信息,发现花费居然变成了38,
8 * 这是为什么呢?不是应该为40吗?
9 * 另外我们还发现下面的Port端口也发生了变化,
10 * 没有修改前是Fa0/0,现在是Fa0/1,
11 * 这说明去往根交换机的数据是通过SW3的Fa0/1发给SW2再转发给SW1的,
12 * 这是因为我们将SW3的Fa0/0的花费修改成了40,
13 * 然而,通过SW3的Fa0/1发给SW2再转发给SW1的花费只有38,
14 * 即SW3的Fa0/1的默认花费19,加上SW2的Fa0/2的默认花费19,
15 * 前面也提到了,交换机选取花费最小的那条路径去往根交换机。
16 */
17 SW3#show spanning-tree brief
18 VLAN1
19 Spanning tree enabled protocol ieee
20 Root ID Priority 32768
21 Address cc00.0c94.0000
22 Cost 38
23 Port 2 (FastEthernet0/1)
24 ....

* BPDU结构浅析

前面提到的交换机之间通过转发BPDU来选择根交换机,这里讲BPDU帧的结构简单的介绍一下:

BPDU包含12个字段,如上图所示,部分字段解释如下:

Flags:标记域,包含TC(Topology Change,拓扑改变)比特位,TCA(Topology Change Acknowledgment,拓扑


改变确认)比特位。
Root ID:包含了根交换机的BID。
Cost of path:到根交换机的路径花费。
Bridge ID:转发BPDU的交换机的BID。
Port ID:转发BPDU的交换机的PID,PID等于端口优先级(默认128)加端口号,后面会介绍到。
Message age:BPDU已经存在的时间。
Max age:BPDU最大存在时间。
Hello time:根交换机发送配置信息的间隔时间,默认2秒。
Forward Delay:转发延时,默认15秒。
* STP 端口角色

1,根端口(Root Port,RP),每个非根交换机上有且仅有一个根端口,稍后的生成树选举中会详细介绍根端口的选举过
程。
2,指派端口(Designated Port,DP),网络上除根端口外,所有允许转发流量的端口,每个网段都有一个指派端口,根交
换机上的端口都是指派端口。
3,非指派端口,既不是根端口也不是指派端口,这种端口虽然是激活的但是会被堵塞(Blocking)用来阻止环路。根端
口和指派端口都处于转发(Forwarding)状态。
4,禁用端口,被管理员使用”shutdown”命令关闭的端口称作禁用端口,禁用端口不参与生成树算法。

* 端口状态和BPDU时间

互连交换机通过在一个广播域交换BPDU帧构建一个逻辑上无环的路径,当一台交换机启动后,如果一个交换机端口
直接转换到转发状态可能会造成暂时性的环路。为了使用这个逻辑生成树,交换机需要在五种状态间转换,转换会历
经三种BPDU时间。

下面是STP中的五种端口状态:

1,Down(禁用)状态。可以使用”no shutdown”命令和插入网线来激活。
2,Blocking(阻塞)状态。链路激活后转入阻塞状态,这个状态大约停留20秒,主要用来确定该端口的角色。如果判
断出该端口是非指派端口,则将保持在这一状态,即阻塞,如果处在阻塞状态的端口接收不到BPDU了,也会转入下
一状态。如果判断出是其他端口角色,则转入下一状态。
3,Listening(侦听)状态。这个状态大约停留15秒,除了接收BPDU外,还向邻居发送BPDU,通知邻居它将参与激
活拓扑。
4,Learning(学习)状态。大约停留15秒,开始学习MAC地址。
5,Forwarding(转发)状态。端口可以转发数据帧。

BPDU的时间有三种,Hello Time、Max Age、Forward Delay:

1,Hello时间控制了发送配置BPDU的时间间隔,默认2秒。这是根交换机生成BPDU并向非根交换机发送的间隔。
2,非根交换机接收到根交换机发送来的BPDU,再从除接收端口以外的其他端口转发出去,如果在2-20秒里面由于网
络故障没有新的BPDU从根交换机发送过来,非根交换机将停止向外发送从根交换机接收到的BPDU。如果这种情况
持续20秒,也就是最大存活期,非根交换机就使原储存的BPDU无效,并开始寻找新的根端口。所谓最大存活期就是
非根交换机丢弃BPDU前用来备份储存它的时间。
3,转发延时是交换机在侦听状态到学习状态所花的时间,默认是15秒。

从上面的叙述中我们可能会发现,一台启动STP的交换机,每个端口从UP到Forwarding所需的时间大约是50秒左
右,而普通的二层交换机端口UP到Forwarding瞬间就能完成。这会带来一个问题,那就是如果这台启动STP的交换机
的接口连接的是一个终端设备,比如计算机,那么端口加电启动后计算机就要等上50秒才能发送数据,这很不合理,
可以使用下面的命令将支持STP的交换机与终端相连的端口设置成快速端口,这样端口从UP到Forwarding也能一瞬间
完成了。但需要注意的是,仅在连接计算机的端口上使用快速端口的功能,不要在和其他交换机,集线器网桥相连的
端口上使用这个功能,否则容易造成环路。
1 /*假设这台交换机的fa0/1到10口都连接的是计算机*/
2 Switch(config)#int range fa 0/1 - 10
3 Switch(config-if-range)#spanning-tree portfast

[*3*].STP收敛

STP的收敛就是整个网络达到稳定的状态,选举出了根交换机,并决定出所有端口的角色,排除所有的潜在环路。

* 生成树的选举

这一小节是这篇文章最重要的部分,上面的所有理论都会在这一小节得到解释和应用,STP最终收敛成为一个没有环
路的网络需要通过下面四个步骤:

每个广播域只能有一个根交换机。
每个非根交换机有且只有一个根端口。
每个网段有且只能有一个指派端口。
既不是根端口也不是指派端口的端口会被阻塞。

下面来看看生成树的选举过程,一共分为四步:

1,选举根交换机

交换机之间通过发送BPDU来选举根交换机,拥有最小BID的交换机将成为根交换机,每个广播域只能有一个根交换
机。

2,选举根端口

每个非根交换机有且只有一个根端口,选举根端口依照下面的顺序。

*** 首先,最低花费的端口将成为根端口;在花费相同的情况下比较发送者的BID,BID小的将成为根端口,请看下面
这张拓扑图:
图中SW1被选举成根交换机,交换机之间的链路都是100Mb/s,所以SW2的根端口是SW2的fa0/2接口,SW3的根端口
是SW3的fa0/1接口,因为他们从这个接口去根交换机的花费都是19,小于通过SW4去根交换机的花费。那么SW4的
根端口是哪个呢?不论从自己的哪个接口去往根交换机(经过SW2或SW3),花费都是一样(38),所以在花费相同的情
况下比较发送者的BID,也就是比较SW2和SW3的BID,显然SW2的BID(32768+2222.2222.2222)小
于SW3的BID(32768+3333.3333.3333),所以SW4将自己和SW2相连的接口fa0/4选举成为根端口。

*** 在发送者BID相同的情况下,比较发送者的PID,请看下面这张图:

图中,SW1和SW2通过两条100Mb/s线路相连,SW1拥有较小的BID被选举成为根交换机,这时SW2要选举根端口,
首先SW2会寻找最低花费的端口,但是去往SW1的两个端口的花费都是19,然后SW2比较发送者的BID,SW2发现,
两个端口都连接的是SW1,发送者(SW1)的BID相同,这个时候,就会比较发送者的PID,也就是端口ID(端口ID等于
优先级(默认端口优先级是128)加上端口号),发送者(SW1)端口ID较小的那个端口对应的本地(SW2)上的那个端
口,将成为根端口。

我们在SW1上查看生成树信息:

1 SW1#show spanning-tree
2 VLAN0001
3 Spanning tree enabled protocol ieee
4 Root ID Priority 24577
5 Address 0030.A3B8.5728
6 This bridge is the root
7 Hello Time 2sec Max Age 20sec Forward Delay 15sec
8
9 Bridge ID Priority 24577 (priority 24576 sys-id-ext 1)
10 Address 0030.A3B8.5728
11 Hello Time 2sec Max Age 20sec Forward Delay 15sec
12 Aging Time 20
13
14 /*
15 * 这一部分信息就是SW1上面的端口信息,其中Prio下面的就是端口ID,
16 * 可以看到SW1的fa0/1默认端口ID是128.1,小于fa0/2的端口ID。
17 */
18 Interface Role Sts Cost Prio.Nbr Type
19 ---------------- ---- --- --------- -------- -----------
20 Fa0/1 Desg FWD 19 128.1 P2p
21 Fa0/2 Desg FWD 19 128.2 P2p
22
23 SW1#

从输出可以看到,SW1上面的fa0/1拥有较小的端口ID,它对应了SW2的fa0/2端口,所以SW2的fa0/2端口被选举成为
根端口。

*** 如果发送者的PID也相同,那么比较接收者的PID,看下面这种情况:
图中,SW1的fa0/1连接在一台集线器上,SW2的fa0/1和fa0/2也连接在这台集线器上,线路均为100Mb/s,假
设SW1拥有较小的BID被选举成根交换机,SW2现在要选举根端口,首先根据前面说的,比较花费,SW2从两个端口
到根交换机SW1的花费都相同;然后SW2比较发送者BID,发送者(SW1)的BID也相同;SW2再比较发送者PID,发
现PID也相同;这个时候,SW2比较接收者,也就是自己的PID,将自己PID最小的那个端口选举成根端口。

可以根据SW2的生成树信息输出判断,fa0/1拥有更小的PID,所以它被选举成为根端口:

1 SW2#show spanning-tree
2 VLAN0001
3 Spanning tree enabled protocol ieee
4 Root ID Priority 24577
5 Address 0030.A3B8.5728
6 Cost 19
7 Port 1(FastEthernet0/1)
8 Hello Time 2sec Max Age 20sec Forward Delay 15sec
9
10 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
11 Address 0003.E4A7.92DA
12 Hello Time 2sec Max Age 20sec Forward Delay 15sec
13 Aging Time 20
14
15 /*
16 * 下面这一部分可以清楚的看到fa0/1拥有更小的PID 128.1,
17 * Root FWD 表示这个端口被选举成为了根端口,并且状态是转发,
18 * Altn BLK 表示这个端口既不是根端口也不是指派端口,被阻塞。
19 */
20 Interface Role Sts Cost Prio.Nbr Type
21 ---------------- ---- --- --------- -------- ---------
22 Fa0/1 Root FWD 19 128.1 Shr
23 Fa0/2 Altn BLK 19 128.2 Shr
24
25 /*
26 * 这里补充一个知识点,端口的优先级默认为128,
27 * 而这个端口优先级是可以手动修改的,
28 * 可以将fa0/2的优先级通过下面的命令改成100,
29 * 这样STP重新收敛,Fa0/1将被阻塞,Fa0/2将被选举成为根端口,
30 * 端口优先级的取值范围是0-255,
31 * Cisco Packet Tracer中不支持这一条命令,可以在GNS3中测试。
32 */
33 SW2(config)#int fa 0/2
34 SW2(config-if)#spanning-tree port-priority 100

到这里,选举根端口的全部可能性都讲解完了。下面讲解指派端口的选举。

3,选举指派端口

每个网段有且只有一个指派端口。其实,每个网段都有一个指派交换机,指派交换机上如果有多个端口,再从多个端
口中选举出一个成为指派端口,指派端口的选举依照下面的顺序:

*** 比较花费

图中,假设SW1被选举成了根交换机,因为每个网段都有一个指派端口,在SW1和SW3相连的线路上,由于SW1本
身是根交换机,SW1的fa0/1端口到自己的花费是0,所以SW1的fa0/1接口被选举成指派端口(根交换机上的所有端口
都是指派端口);同理在SW1和SW2相连的网段上,SW1的fa0/2也被选举成了指派端口;而在SW2和SW3相连的网
段上,由于SW1和SW2之间是1Gb/s链路,SW2去往根交换机的花费(4)要小于SW3去往根交换的花费(19),所
以SW2是这个网段上的指派交换机,SW2的fa0/3将成为这个网段的指派端口。再根据前面的根端口的选举可以知
道SW2的fa0/2是根端口,SW3的fa0/1是根端口,SW3的fa0/3端口因为不是根端口,也不是指派端口,所以被阻塞。

*** 花费相同则比较接收者的BID(这次不是发送者了)

图中,SW1是根交换机,在SW2和SW3相连的网段上,SW2和SW3到根交换机的花费相同,这时就需要比较接收者
的BID,也就是SW2和SW3的BID,BID小的将成为指派交换机,从图中可以看到SW2的BID小于SW3的BID,所
以SW2是指派交换机,SW2的fa0/3端口将成为指派端口。

*** 接收者的BID也相同则比较接收者的PID
图中,SW1是根交换机,SW2和SW3相连的网段上有一台集线器,SW2有两个端口连接在这台集线器上,这种情况
下,根据上面一步比较出了SW2的BID比SW3小,但是SW2上面有多个端口连接在这个网段,这时就要比较这些端口
的PID,拥有最小PID的成为指派端口(fa0/3),PID大的剩余端口全部阻塞(fa0/4阻塞),通过在SW2上查看生成树信
息验证:

1 SW2#show spanning-tree
2 VLAN0001
3 Spanning tree enabled protocol ieee
4 Root ID Priority 24577
5 Address 0090.21DE.9A5B
6 Cost 19
7 Port 2(FastEthernet0/2)
8 Hello Time 2sec Max Age 20sec Forward Delay 15sec
9
10 Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
11 Address 0004.9A05.9A31
12 Hello Time 2sec Max Age 20sec Forward Delay 15sec
13 Aging Time 20
14
15 Interface Role Sts Cost Prio.Nbr Type
16 ---------------- ---- --- --------- -------- ---------
17 Fa0/2 Root FWD 19 128.2 P2p
18 Fa0/3 Desg FWD 19 128.3 Shr
19 Fa0/4 Altn BLK 19 128.4 Shr
20 /*可以看到默认的PID fa0/3比fa0/4小,所以fa0/4被阻塞,fa0/3是指派端口*/

4,阻塞端口

既不是根端口也不是指派端口的端口将被阻塞。

* STP 拓扑变化

当交换机检测到端口发生了变化时,交换机将通知根交换机拓扑变化情况,根交换机再将这一情况扩散到整个网络,
有三种特殊的BPDU用来完成这些工作:TCN(Topology Change Notification)BPDU-拓扑改变通
知BPDU、TCA(Topology Change Acknowledgement)BPDU-拓扑改变确认BPDU、TC(Topology
Change)BPDU,下图演示了这一过程:
图中,左边SW5首先检测到了拓扑变化,它从根端口向SW2发送TCN,SW2使用TCA向SW5确认,然后SW2产生一
个TCN从自己的根端口发送给SW1,也就是根交换机,根交换机SW1收到这个TCN后,使用TCA向SW2确认。一旦
根交换机知道了这一拓扑变化,它将向外广播发送TC位被设置的BPDU,就是上图右边的情况,最后整个广播域都知
道了这一变化。

[*4*].STP负载均衡实验

实验在GNS3中完成。

在上面这张拓扑图中,SW1的fa0/0连接了SW1的fa0/1,SW1的fa0/1连接了SW2的fa0/0,这两条链路被配置成主
干,将SW1设置成VTP Server,SW2设置成VTP Client,在SW1上新建VLAN2,让SW1成为VLAN1的根交换机,SW2成
为VLAN2的根交换机,这样根据前面的叙述,在VLAN1生成树实例中SW2的fa0/0接口将被阻塞,VLAN1的流量将全
部从上面那条线路经过,而在VLAN2生成树实例中SW1的fa0/0将被阻塞,VLAN2的流量将全部从下面这条线路走。

1 /*首先将SW1和SW2相连的两条线路配置成主干*/
2 SW1(config)#int fa 0/0
3 SW1(config-if)#swi mod trunk
4 SW1(config-if)#int fa 0/1
5 SW1(config-if)#swi mod trunk
6
7 SW2(config)#int fa 0/0
8 SW2(config-if)#swi mod trunk
9 SW2(config-if)#int fa 0/1
10 SW2(config-if)#swi mod trunk
11
12 /*将SW2配置成VTP Server*/
13 SW1#vlan database
14 SW1(vlan)#vtp domain ccna
15 Changing VTP domain name from NULL to ccna
16 SW1(vlan)#vtp password ccna
17 Setting device VLAN database password to ccna.
18 SW1(vlan)#vtp server
19 Device mode already VTP SERVER.
20 SW1(vlan)#vlan 2 /*新建了一个VLAN2*/
21 VLAN 2 added:
22 Name: VLAN0002
23 SW1(vlan)#exit
24 APPLY completed.
25 Exiting....
26 SW1#
27
28 /*将SW2配置成VTP Client*/
29 SW2#vlan database
30 SW2(vlan)#vtp domain ccna
31 Domain name already set to ccna .
32 SW2(vlan)#vtp password ccna
33 Setting device VLAN database password to ccna.
34 SW2(vlan)#vtp client
35 Setting device to VTP CLIENT mode.
36 SW2(vlan)#exit
37 In CLIENT state, no apply attempted.
38 Exiting....
39 SW2#
40
41 /*将SW1配置成VLAN1的根交换机*/
42 SW1(config)#spanning-tree vlan 1 root primary
43 % This switch is already the root of VLAN1 spanning tree
44 VLAN 1 bridge priority set to 8192
45 VLAN 1 bridge max aging time unchanged at 20
46 VLAN 1 bridge hello time unchanged at 2
47 VLAN 1 bridge forward delay unchanged at 15
48 SW1(config)#
49
50 /*将SW2配置成VLAN2的根交换机*/
51 SW2(config)#spanning-tree vlan 2 root primary
52 VLAN 2 bridge priority set to 8192
53 VLAN 2 bridge max aging time unchanged at 20
54 VLAN 2 bridge hello time unchanged at 2
55 VLAN 2 bridge forward delay unchanged at 15
56 SW2(config)#end
57 SW2#
58
59 /*
60 * 这个时候根据前面介绍的STP收敛,
61 * 可以分析出那些端口会被阻塞,
62 * 因为思科交换机默认使用的STP协议为PVST+,
63 * 这种协议为每一个VLAN生成一个生成树。
64 */
65 SW1#show spanning-tree brief
66 /*这里是VLAN1的生成树,在这个实例中SW1是根交换机*/
67 VLAN1
68 Spanning tree enabled protocol ieee
69 Root ID Priority 8192
70 Address cc00.125c.0000
71 This bridge is the root
72 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
73
74 Bridge ID Priority 8192
75 Address cc00.125c.0000
76 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
77 Aging Time 300
78
79 Interface Designated
80 Name Port ID Prio Cost Sts Cost Bridge ID Port ID
81 -------------- ------- ---- ----- --- ---- ------------------- --
82 FastEthernet0/0 128.1 128 19 FWD 0 8192 cc00.125c.0000 128.1
83 FastEthernet0/1 128.2 128 19 FWD 0 8192 cc00.125c.0000 128.2
84
85 /*这里是VLAN2的生成树,在这个实例中SW2是根交换机*/
86 VLAN2
87 Spanning tree enabled protocol ieee
88 Root ID Priority 8192
89 Address cc01.125c.0001
90 Cost 19
91 Port 2 (FastEthernet0/1)
92 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
93
94 Bridge ID Priority 32768
95 Address cc00.125c.0001
96 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
97 Aging Time 300
98
99 /*可以看到SW1的fa0/0端口在VLAN2生成树实例中被阻塞*/
100 Interface Designated
101 Name Port ID Prio Cost Sts Cost Bridge ID Port ID
102 --------------- ------- ---- ---- --- ---- ------------------- ---
103 FastEthernet0/0 128.1 128 19 BLK 0 8192 cc01.125c.0001 128.2
104 FastEthernet0/1 128.2 128 19 FWD 0 8192 cc01.125c.0001 128.1

这样就实现了VLAN的负载均衡和冗余备份;线路没有故障前VLAN1的数据从上面的路径走,VLAN2的数据从下面的
路径走,当任意一条路径出现故障的时候,STP重新收敛,剩下的那条线路将承担VLAN1和VLAN2的全部流量。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十三]无线网络介绍
发表于 2012 年 11 月 17 日 由 晴刃

这篇文章介绍当前可使用的不同无线标准以及每种标准的特点,无线网络中的硬件组成、部署,如何加强无线网络的
安全性以及相关的安全协议和特点。
___________________________________________

文章目录

[*1*].无线网络介绍
无线网络分类
无线网络和有线网络的区别
无线局域网标准
无线局域网组件
无线配置中的一些术语
[*2*].无线局域网的安全
无线网安全协议介绍
无线网安全认证过程

___________________________________________

[*1*].无线网络介绍

* 无线网络分类

无线网络根据连接范围分有下面这几种类型:PAN(Personal Area Network,个人网)、LAN(Local Area


Network,局域网)、MAN(Metropolitan Area Network,城域网)、WAN(Wide Area Network,广域网)。而现
在在一些企业和家中,最典型的应用就是WLAN(Wireless Local Area Network,无线局域网)。

下面这个表列出了这几种无线网络使用的标准、速度、有效范围和典型应用:

无线网络可以节约电缆降低成本,用户不必在一个固定的位置接入网络。

* 无线局域网和有线局域网的区别
WLAN和LAN都采用IEEE的802标准,LAN使用802.3标准,WLAN使用802.11标准,下面的列表显示了他们的区别:

无线局域网使用的是无线电频率而不是线缆,和线缆相比无线电频率有下面的特点:没有边界,数据帧可以向任何能接
收无线电信号的地方发送,处在无线电频率范围内的无线网卡都可以接收到信号,在同一个区域中使用相同的无线电
频率可以互相干扰。在不同国家对无线电频率有不同规定。

WLAN的客户端使用无线接入点(AP,Access Point)连接到网络,而不是以太网交换机。无线网络是一个共享网
络,一个AP就像以太网中的Hub,数据使用无线电波传送。无线网络实际上采用的是半双工模式,收发是不能同时进
行的,除非接收和发送使用不同的无线电频率。无线网络不同于有线网络,线缆上可以检测到有冲突信号,无线网络
中只要数据发送出去就没有办法检测是否发生冲突,所以802.11采用的是CSMA中的CA(冲突避免技术。)

* 无线局域网标准

802.11无线局域网是IEEE定义的标准,在这个标准的基础上又相继推出了802.11a、802.11b、802.11g、802.11n等
标准,不同的标准受一些调制技术的影响,比如DSSS(Direct Sequence Sparead Spectrum,直接序列展频技术)
和OFDM(Orthogonal Frequency Division Multiplexing,正交频分复用),其中当一个标准使用OFDM时将会有更快
的传输速度,DSSS比OFDM简单,相对花费较少。

下面这个列表是无线局域网的标准对比:
无线电频率的频段由国际电讯联盟无线通信部门(ITU-R)分配,指定了900MHz、2.4GHz、5GHz用于ISM(工业、
医疗、科学)通信无需许可。虽然ISM频段在全球范围无需许可,但是也受当地法律限制。

* 无线局域网组件

1,无线网卡,无线网卡使客户工作站能够发送和接收射频信号,它使用调制技术将数据流编码后放到无线电频率信
号上。

2,无线AP,就是一个无线接入点可以连接无线客户端到有线客户端。在本质上来说,一个AP转换空气中的802.11封
装的帧格式到有线以太网上的802.3以太网帧格式。AP类似802.3以太网中的Hub,是一个共享的媒体。

3,无线路由器,无线路由器可以执行无线接入点AP、以太网交换机和路由器的角色。

* 无线配置中的一些术语

1,AP参数

模式:无线网络的模式指的是WLAN的协议,802.11a/b/g/n等。有时候无线路由器上的无线网络模式会显示一
个”混合”的选项,这意味着这个选项同时支持802.11b和802.11g的标准。
SSID:即服务设置标识符(Service Set Identifier),是一个独立的标示符,也称作无线网络的名称,客户端使
用SSID区分不同的无线网络。
通道:在ISM无线频段中,2.4GHz又被划分出不同的通道,北美的标准是11个通道,欧洲的标准是13个通
道,CCNA以北美为准,每个通道占22MHz,相邻通道间隔为5MGHz。在实际情况中,可以让无线路由器自动
选择通道,当和其他设备的通道重叠的时候,自动动态的调整通道。

2,无线局域网拓扑结构

AD hoc:也称IBSS(Independent Basic Service Set,独立基本服务集),最常用的就是我们使用带有无线网卡


的笔记本建立无线临时网络(计算机到计算机的)。
BSS:基本服务集,最常见到的就是一台家用无线路由器,上面用有线链接到我们的台式机,还有几台笔记本或手
机通过无线连接到这台无线路由上。
ESS:Extended Service Set,扩展服务集,也称作Infrastructure拓扑,也就是多个BSS组成的网络,网络中有多
台无线AP,不同的AP有不同的SSID,用户可以根据SSID自己选择连接到哪个AP上。
Common Distribution system:共同分布式系统,就是多个AP组成的覆盖范围很广的一个区域,在这个覆盖区域
中AP使用同一个SSID来允许用户漫游在多个AP之间,不同AP之间有10%-15%的范围重叠,并且不同的AP之
间不使用重叠的通道。

[*2*].无线局域网的安全

无线局域网是很脆弱的,这里列出一些无线网络容易受到的安全威胁:AP欺骗、Dos拒绝服务、中间人攻击、密码暴力
破解、协议自身缺陷等等。
* 无线网安全协议介绍

开放式:不加密的无线AP,任何人都可以连接。
WEP加密:WEP(Wired Equivalent Privacy,有线等效保密,这种加密方式本身存在缺陷,可以在几分钟以内破解
出使用的密钥,不推荐使用这种加密。
WPA加密:WPA(Wi-Fi Protected Access,Wi-Fi安全接入),安全性相对WEP大幅提升,只能暴力猜解,破解这种
加密的条件是设置的密码刚好在破解者的破解字典里面,否则无法破解。
WPA2加密:WPA的安全加强版。

* 无线网安全认证过程

在家庭无线局域网中,并没有严格的验证要求,验证是在无线接入点(AP)上面进行的,而在一些安全要求严格的场
合,需要有额外的登录和认证机制,通常是使用一台专门用来认证的服务器。用户的登录过程被EAP(Extensible
Authentication Protocol,扩展验证协议)管理,IEEE使用802.1x协议对无线局域网进行认证和授权。

EAP的认证步骤如下:

1,AP上的802.11连接进程为每个无线局域网的用户创建一个虚拟接口。
2,AP阻止所有其他的数据帧,只允许802.1x协议的流量通过。
3,通过AP,802.1x的数据帧携带EAP身份验证数据包到达认证服务器,这台服务器上运行RADIUS协议,可以提供
认证、授权、记账,即AAA服务。AP起到了一个中转的作用,将服务器的要求转发给无线客户端,将无线客户端
的EAP应答转发给AAA服务器。
4,如果EAP验证成功,AAA服务器发送一个EAP验证成功的信息给无线接入点AP,AP就让通过验证的无线客户端
的数据流通过虚拟接口。如果验证失败则关闭虚拟接口。
5,开放虚拟接口前,WLAN客户端和AP之间的数据链路被加密,以确保只有通过验证的客户端才能接入。

在这里要提到两个无线网络设置,在某种场合确实可以增加无线网络的安全性,但是这两种方法是很容易被突破的:

不广播SSID:这种方法确实可以在表面上让无线客户端搜索不到SSID,从而达到了隐藏AP的目的,但是如果被
动的监听无线电频率SSID很容易被捕获,因为SSID是明文传输的。
过滤MAC地址:这种方式在某种程度上也能很好的阻止非法MAC地址的接入,但是现在的一些软件可以很容易的
改变计算机的MAC地址显示,只要捕获到其他被允许的用户的MAC,再将自己的MAC伪装成这个MAC即可突破
这个限制。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十四]PPP协议实例详解
发表于 2012 年 11 月 19 日 由 晴刃

这篇文章介绍PPP(Point-to-Point,点到点协议)的基础知识,实例演示PPP协议在思科路由器上的基本配置,文章
的后半部分重点介绍PPP的两种验证方式。
___________________________________________

文章目录

[*1*].PPP概述
HDLC封装协议
同步和异步串行通信
PPP特点
PPP分层体系结构
PPP会话建立过程
PPP身份验证协议
[*2*].PPP基本配置
配置PPP封装
配置压缩
配置链路质量监控(LQM)
配置链路负载均衡
[*3*].PPP验证配置
PAP验证
CHAP验证

___________________________________________

[*1*].PPP概述

* HDLC封装协议

HDLC是思科路由器串行接口默认的封装协议,由于串行线路在远距离通信中的优势,远距离传输数据一般都使用串
行线路,而一些计算机的内部通信一般采用并行通信。标准的HDLC封装只能支持单协议,即IP协议,思科对标准
的DHLC进行了改进,增加了协议域字段来支持多种网络层协议。虽然改进后的DHLC是思科私有的,但是现在大多网
络设备都能够使用它。

在”Cisco Packet Tracer 5.3″中添加一台2811路由器,给这个路由器添加”WIC-2T”串行接口模块,然后通过下面的命令


来查看串行接口默认的封装协议:

1 R1#show interfaces serial 0/0/0


2 ....
3 MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
4 reliability 255/255, txload 1/255, rxload 1/255
5
6 /*可以在这一部分看到"Encapsulation HDLC",默认思科路由串口使用HDLC封装*/
7 Encapsulation HDLC, loopback not set, keepalive set (10 sec)
8 ....

思科路由之所以默认使用HDLC封装是因为路由器之间用同步串行接口连接时,Cisco HDLC封装要比PPP封装效率高
很多。但是其他网络设备不一定支持思科HDLC,所以在不同厂商设备混用的时候,最好采用PPP作为串口封装协
议。

可以使用下面这条命令将串行接口的封装改成PPP:

1 R1(config)#int s 0/0/0
2 R1(config-if)#encapsulation ppp /*将串口封装改成PPP*/
3 R1(config-if)#end
4 R1#
5
6 R1#show interfaces s 0/0/0
7 ....
8 /*再次查看接口信息,封装协议变成了PPP*/
9 Encapsulation PPP, loopback not set,
10 ....

* 同步和异步串行通信

串行通信分为同步传输和异步传输,下面分别介绍着两种传输技术。

1.异步传输

通常,异步传输是以字符为传输单位的,每个字符添加一位起始位和一位停止位,用来标记一个字符的开始和结束。
这种传输方式每传输一个字符都要附加2-3位,通信效率较低。这种传输方式发送方发出数据后,不等对方发回响应,
接着发送下一个数据包。

2.同步传输

通常,同步传输是以数据块为传输单位,每个数据块的头部和尾部附加一个特殊的字符或比特序列,标记一个数据块
的开始和结束,一般还附加一个效验序列,以便对数据块进行差错控制。这种传输方式发送方发出数据后要等待接收
方发回响应,然后再发下一个数据包。路由器的串行接口属于快速的同步接口,所以需要在DCE端配置”时钟”来进行
信号同步。

上图中R1的s0/0/0是DCE端,可以通过下面的命令配置DCE端的时钟:
1 R1(config)#int s 0/0/0
2
3 /*
4 * 其中的64000是比特率,可以通过下面这条命令来查看比特率允许的值,
5 * R1(config-if)#clock rate ?
6 */
7 R1(config-if)#clock rate 64000
8 R1(config-if)#end
9 R1#

* PPP 特点

PPP是IETF(因特网工程任务组)推出的点到点类型线路的数据链路层封装协议,PPP支持下面几类物理接口:

同步串行接口
异步串行接口
高速串行接口(HSSI)
综合业务数字网(ISDN)

此外PPP还被广泛的应用在ATM上(PPP over ATM,简称PPPoA)以及以太网上(PPP over Ethernet,简


称PPPoE)。

PPP利用下面三个组件来解决网际网络连接问题:

在点对点链路上使用高级数据链路控制(HDLC)封装数据。PPP帧格式以HDLC帧格式为基础,做了少许改
动。
使用LCP(Link Control Protocol,链路控制协议)来建立、设定和测试数据链路连接。
使用NCPs(Network Control Protocols,网络控制协议系列)建立和设定不同的网络层协议。

* PPP 分层体系结构

PPP分层体系架构是一个逻辑模型,下图是这一构架和OSI参考模型的对比:

只要是点到点类型的线路都可以运行PPP,在数据链路层PPP通过LCP协议进行链路管理,相当于以太网数据链路层
的MAC子层,在网络层NCP为不同协议提供服务,相当于以太网数据链路层的LLC子层。

下面是PPP的LCP子层和NCP子层的简单介绍:

1.LCP(Link Control Protocol)子层

LCP子层位于物理层之上,除了用来建立、配置和测试数据链路连接外,还提供下面这些功能:

身份验证:提供了PAP和CHAP验证。
压缩:将需要传输的数据先压缩再传输。支持Stac、Predictor、MPPC以及TCP头部压缩。
错误检测:保证链路的质量。
多链路:实现链路的负载均衡。
PPP回拨:可以提高安全性和节约用户拨号费用。

2.NCP(Network Control Protocol)子层

当LCP将链路建立好后,PPP开始根据不同用户的需要配置上层协议所需环境,NCP被用来为上层服务提供服务接
口,针对不同的上层协议NCP提供不同的服务组件。

* PPP 会话建立过程

PPP从开始发起呼叫到最终通信完成后释放链路一共要经历下面四个步骤:

第一步:链路的建立和配置协商,主要由LCP完成,通信的发起方发送LCP帧来配置和检测数据链路。
第二部:链路质量检测(可选),属于LCP的可选功能,主要是测试链路的质量能否满足要求。
第三步:网络层协议的配置阶段,主要是NCP的功能,通信双方交换一系列NCP分组来配置网络层,NCP配置好后
双方的逻辑通信链路就建立完成了。
第四部:链路终止,当数据传送完成,或者一些外部事件发生的时候,一方会发起断开连接的请求,这时,首先
使用NCP来释放网络层的链接,然后使用LCP来关闭数据链路层的链接,最后双方的通信设备关闭物理链路。

* PPP 身份验证协议

PPP有两种可选的身份验证协议PAP和CHAP:

1.PAP(Password Authentication Protocol,密码验证协议)

这是一种两次握手协议,采用明文传输方式传输用户口令,验证步骤如下:
首先被验证方主动发起验证请求,将本地配置的用户名和密码用明文的方式发送给验证方,验证方接收到验证请求后
检查此用户名和密码是否正确(在验证方的数据库中也配置有此用户名和密码),正确就发回接受报文,错误就发送
拒绝报文。这种验证方式是采用明文传输,很容易被破解。

2.CHAP(Challenge Handshake Authentication Protocol,挑战握手验证协议)

这是一种三次握手协议,它只在网络上传输用户名,密码并不在网络上传输,下图为CHAP验证示意图:

CHAP的验证过程如下:

在PPP链路建立阶段完成后(R1作为被验证方拨入),验证方R2主动发起验证挑战”Challenge”,挑战报文中”01″是
序列号;R2上可能有多个拨入请求,”ID”用来识别是哪个拨入者发起的挑战;”Random”是一个随机数;”R2″是发起挑
战路由器的名字。

被验证方收到验证方发来的请求后,根据这个报文中的路由器名称(R2),在本地数据库中找到这个名称对应的密
码,如果找到对应的密码,则用验证方发送过来的报文的ID和随机数加上本地数据库中找到的密码,以MD5算法生成
一个”hash”值。
生成hash之后,再将这个hash值、验证方R2发送过来的ID号以及本路由的名称R1,发回给验证方R2。其中报文的序
列号是”02″,”ID”是R2发送过来的那个ID不变,”hash”是R1计算后得到的哈希值。

R2接收到这个报文后,利用报文中的ID值找到储存在本地数据库中的随机数,并且根据发送过来的报文中路由器的名
称(R1)找到本地数据库对应这个名称的密码,然后利用ID、随机数、R1对应的密码使用MD5算法生成一个hash值,
最后用这个hash值与R1发送过来的hash比较,相同则验证通过,发回序号是”03″的确认报文,如果不相同则验证失
败,发回序号是”04″的验证失败报文。

从这个步骤可以看出,只要双方配置相同的验证密码,即可完成验证,并且这个密码是不会在链路上传输的,传输的
只是一个随机数、一个ID值、路由器的名称和发回的hash值。

[*2*].PPP基本配置

* 配置PPP 封装

在GNS3中配置下面这个简单的拓扑:

R1和R2配置:

1 /*配置R1串口IP*/
2 R1(config)#int s 0/0
3 R1(config-if)#ip add 12.1.1.1 255.255.255.0
4 R1(config-if)#no shut
5 R1(config-if)#end
6 R1#
7
8 /*配置R2串口IP*/
9 R2(config)#int s 0/1
10 R2(config-if)#ip add 12.1.1.2 255.255.255.0
11 R2(config-if)#no shut
12 R2(config-if)#end
13 R2#
14
15 /*在R1上查看接口默认封装协议*/
16 R1#show interfaces s 0/0
17 Serial0/0 is up, line protocol is up
18 ...../*默认的串口封装协议是HDLC*/
19 Encapsulation HDLC, crc 16, loopback not set
20 .....
21
22 /*此时R1和R2双方互相能够Ping通*/
23 R1#ping 12.1.1.2
24 Type escape sequence to abort.
25 Sending 5, 100-byte ICMP Echos to 12.1.1.2, timeout is 2 seconds:
26 !!!!!
27
28 /*将R1的串口封装改成PPP*/
29 R1(config)#int s 0/0
30 R1(config-if)#encapsulation ppp
31 R1(config-if)#end
32 R1#
33
34 /*
35 * 如果R2的串口没有改成PPP,会出现端口down掉的提示,查看R1接口,
36 * 发现S0/0接口的协议是down的。
37 */
38 R1#show ip interface brief
39 Interface IP-Address OK? Method Status Protocol
40 Serial0/0 12.1.1.1 YES manual up down
41 Serial0/1 unassigned YES unset administratively down down
42 Serial0/2 unassigned YES unset administratively down down
43 Serial0/3 unassigned YES unset administratively down down
44 R1#
45
46 /*再查看R1的s0/0接口详细信息*/
47 R1#show interfaces s 0/0
48 Serial0/0 is up, line protocol is down
49 Hardware is M4T
50 Internet address is 12.1.1.1/24
51 MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
52 reliability 255/255, txload 1/255, rxload 1/255
53 Encapsulation PPP, LCP Listen, crc 16, loopback not set
54 /*可以看到封装虽然已经改成了PPP,但是LCP还处于监听状态*/
55 ....
56
57 /*此时R1是ping不通R2的,用下面命令将R2也改成PPP封装*/
58 R2(config)#int s 0/1
59 R2(config-if)#encapsulation ppp
60 R2(config-if)#end
61 R2#
62
63 /*再次查看R1的s0/0接口详细信息*/
64 R1#show interfaces s 0/0
65 Serial0/0 is up, line protocol is up
66 ....
67 Encapsulation PPP, LCP Open
68 Open: IPCP, CDPCP, crc 16, loopback not set
69 /*
70 * 从这里可以看出LCP Open表示链路协商成功,
71 * Open:IPCP表示NCP也建立成功了。
72 */

* 配置压缩

配置压缩会影响路由性能,如果需要传送的文件已经压缩过,比如ZIP,RAR等,则不建议在路由上开启压缩:

1 /*在路由串行接口上启用压缩功能*/
2 R1(config)#int s 0/0
3 R1(config-if)#compress ? /*查看可用的压缩类型*/
4 lzs lzs compression type
5 mppc MPPC compression type
6 predictor predictor compression type
7 stac stac compression algorithm
8 <cr>
9 R1(config-if)#compress lzs /*启用lzs压缩*/
10 R1(config-if)#end
11 R1#

* 配置链路质量监控(LQM)

在本文前面的”PPP会话建立过程”的第二步中提到了一个可选的阶段”链路质量检测”,在这个阶段LCP测试链路并决定
链路的质量能否满足第三层协议的需要,如果不能满足,链路将会关闭。可以使用下面的命令来配置质量监控:

1 /*计算数据包发送的成功率,链路有效要大于80%,否则认为链路无效*/
2 R1(config)#int s 0/0
3 R1(config-if)#ppp quality 80
4 R1(config-if)#end
5 R1#

* 配置链路负载均衡

PPP链路负载均衡(多链路PPP,也叫MP、MPPP、MLP或Multilink)允许包被分段,在到对方的多条点对点线路上
被同时发送,配置命令如下:

1 R1(config)#int s 0/0
2 R1(config-if)#ppp multilink
3 R1(config-if)#end
4 R1#

[*3*].PPP验证配置

PPP验证部分使用上面的图八作为拓扑图在GNS3中配置。

* PAP 验证
R1配置:

1 /*配置用户名和密码,这个用户名和密码要和R2发送过来的一致*/
2 R1(config)#username ccna_R2 password ccna_R2_pass
3 R1(config)#int s 0/0
4 R1(config-if)#ip add 12.1.1.1 255.255.255.0
5 R1(config-if)#no shut
6 R1(config-if)#encapsulation ppp /*使用PPP封装*/
7 R1(config-if)#ppp authentication pap /*使用PAP验证*/
8 /*R1发给R2的用户名和密码,R2上需要配置和R1发送过去的这个用户名和密码一致*/
9 R1(config-if)#ppp pap sent-username ccna_R1 password ccna_R1_pass
10 R1(config-if)#end
11 R1#

R2配置:

1 /*在R2上配置用户名和密码,要和R1发送过来的一致*/
2 R2(config)#username ccna_R1 password ccna_R1_pass
3 R2(config)#int s 0/1
4 R2(config-if)#ip add 12.1.1.2 255.255.255.0
5 R2(config-if)#no shut
6 R2(config-if)#encapsulation ppp
7 R2(config-if)#ppp authentication pap
8 /*向R1发送用户名和密码*/
9 R2(config-if)#ppp pap sent-username ccna_R2 password ccna_R2_pass
10 R2(config-if)#end
11 R2#

配置完成后检测R1和R2连通性,发现可以正常通信,PAP并不是路由器推荐的验证方式。

* CHAP验证

使用CHAP验证配置本文图八中的拓扑:

R1配置:

1 /*
2 * 配置本地验证的用户名和密码,这里的用户名必须是对方路由器的名称,
3 * 这里使用的密码要和对方相同,
4 * 在本文"PPP身份验证协议"中已经讲解过。
5 */
6 R1(config)#username R2 password ccna
7 R1(config)#int s 0/0
8 R1(config-if)#ip add 12.1.1.1 255.255.255.0
9 R1(config-if)#no shut
10 R1(config-if)#encapsulation ppp
11 R1(config-if)#ppp authentication chap /*使用CHAP验证*/
12 R1(config-if)#end
13 R1#

R2配置:

1 /*用户名是R1的名称,密码和R1相同*/
2 R2(config)#username R1 password ccna
3 R2(config)#int s 0/1
4 R2(config-if)#ip add 12.1.1.2 255.255.255.0
5 R2(config-if)#no shut
6 R2(config-if)#encapsulation ppp
7 R2(config-if)#ppp authentication chap
8 R2(config-if)#end
9 R2#

配置完成后测试双方可以通信。

除此之外,可以使用下面的命令来查看PPP验证过程:

1 /*调试ppp验证*/
2 R1#debug ppp authentication
3 PPP authentication debugging is on
4 R1#conf t
5 R1(config)#int s 0/0
6 R1(config-if)#shut /*关闭s0/0,然后再打开*/
7 R1(config-if)#no shut
8 R1(config-if)#
9 *Mar 1 01:18:25.623: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
10 *Mar 1 01:18:25.627: Se0/0 PPP: Using default call direction
11 *Mar 1 01:18:25.627: Se0/0 PPP: Treating connection as a dedicated line
12 *Mar 1 01:18:25.627: Se0/0 PPP: Session handle[7300007B] Session id[127]
13 *Mar 1 01:18:25.631: Se0/0 PPP: Authorization required
14 /*这里省略部分输出,可以看到很多类似输出*/

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十五]帧中继实例详解
发表于 2012 年 11 月 22 日 由 晴刃

这篇文章介绍一下帧中继相关知识,包括帧中继的术语、帧中继运行方式、帧中继本地管理接口、帧中继全局寻址、
基于物理接口的帧中继和基于子接口的帧中继等。文章的后半部分会使用几个实例来演示前面介绍的理论。
___________________________________________

文章目录

[*1*].帧中继概述
帧中继术语
帧中继运行方式
帧中继寻址方式
帧中继水平分隔潜在问题
[*2*].帧中继配置实例
配置帧中继交换机
配置其他路由器使用帧中继网络
配置帧中继能够ping通本端
配置帧中继使用静态映射
RIP over 帧中继
配置帧中继子接口
[*3*].EIGRP over 帧中继
在帧中继物理接口上运行EIGRP
在帧中继子接口上运行EIGRP
在帧中继点到点接口上运行EIGRP

___________________________________________

[*1*].帧中继概述

Frame Relay,简称FR,可以将它看做X.25协议的简化版本,帧中继网络中不考虑传输差错问题,其中的结点只做帧
的转发操作,不需要执行接收确认和请求重发等操作。帧中继是一种严格意义上的二层协议。

在帧中继网络中使用VC(Virtual Circuit,虚电路)来互连各个分支,并不需要两个分支之间有单独的物理链路。下面
是物理专线和帧中继虚电路的示意图:
使用虚电路的最主要好处就是配置方便,建立和拆除虚电路只需要使用命令配置即可,所以虚电路并非真正的物理链
路,只是在现有网络的基础上添加的一系列转发规则,就好像在源和目的间存在一条专线一样;相比之下专线则需要
综合布线施工,建立和拆除难度较大。

帧中继的工作范围在DTE设备和帧中继交换机之间。

* 帧中继术语

1.VC(Virtual Circuit,虚电路)

帧中继网络中两台DTE设备之间的连接称为虚电路,现在常用的虚电路为PVC(Permanent Virtual Circuit,永久虚电


路),PVC由运营商预先配置。

2.DLCI(Data Link Connection Identifier,数据链路连接标识符)


DLCI是源设备和目的设备之间标识逻辑电路的一个数据值,该数据值只具有本地意义。在图二中,R1上
的DLCI号103标识的是R1到R3的连接,R1上的DLCI号104标识的是R1到R4的连接。不同DTE设备上的DLCI号可以
相同,但在同一台DTE设备上不能用相同的DLCI号来标识到不同的连接。

DLCI号的范围是0-1023,其中0-15以及1008-1023被保留用作特殊用途,所以用户可以配置的DLCI号为16-1007。

3.LMI(Local Management Interface,本地管理接口)

LMI是用户端和帧中继交换机之间的信令标准,负责管理设备之间的连接,维护设备的状态。LMI被用来获知路由器被
分配了哪些DLCI,确定PVC的操作状态,有哪些可用的PVC,另外还用来发送维持分组,确保PVC处于激活状态。

LMI的类型有三种:ANSI、Cisco、Q933A,DTE端的LMI配置要和帧中继上的一致,否则LMI不能正常工作,进而导
致PVC失败。思科路由上默认的LMI类型为Cisco。

除了上面三个比较常见外,还有下面这些术语,有兴趣的朋友可以自己去查一下每个术语的解释:

承诺信息速率(CIR)
承诺突发(BC)
超量突发(BE)
前向显示拥塞通知(FECN)
后向显示拥塞通知(BECN)
允许丢弃(DE)

* 帧中继运行方式

这一部分结合下面的图三来介绍帧中继是如何工作的,数据包是如何被转发的。
1,帧中继帧格式

帧中继的帧和以太网帧一样,也工作在数据链路层,帧的格式如下图:

帧中继帧的各字段解释如下:

Flag标志:标志帧的开始和结束
地址:地址字段2个字节中包含了DLCI号(帧中继的帧中只有一个DLCI号,即去往的目的地的DLCI号,2个字节
中的10个比特用来储存这个DLCI号);拥塞控制(Congestion Control)占3比特,其中包括1比特
的FECN位,1比特的BECN位和1比特的DE位;除此之外地址域中还包含3个比特的其他值。
数据:是一个可变长的字段,包含了封装的上层协议数据。
帧效验序列:用来保证传输数据的完整性。

2.帧中继中的帧转发方式
在图三中,假设R1要将数据发往R3,R1封装DLCI号103(至于为什么R1知道发往R3要封装103这个在下面的帧中继
寻址方式中会详细的介绍),将封装好的帧发往帧中继交换机FR1。根据FR1上管理员的配置,FR1知道如果从接
口1接收到DLCI号为103的帧,应该将DLCI号修改成112并从接口3发出。此时帧到达FR3,FR3也根据配置得知,从
自己的1接口接收到的DLCI号为112的帧,应该将DLCI号修改成301,并从3号接口发出。此时R3接收到FR3发过来
的帧中继帧,解封装后交给上层处理。

从上面的工作方式中可以看出,只要R1封装DLCI号103的帧,就能将数据发往R3,帧中继网云使
用DLCI号103和DLCI号301在R1和R3之间建立了一条永久虚电路(PVC),同理R1到R4可以封装104,R4到R1可
以封装401。

3.帧中继交换表

在图三的帧中继网络中,FR1-3三台帧中继交换机上都维护着一个帧中继交换表,下面是FR1的帧中继交换表的样式:

* 帧中继寻址方式

这一部分将介绍”反向ARP(Inverse ARP)”,帧中继中的反向ARP是根据DLCI号解析IP的一个过程,和以太网中通
过ARP解析MAC地址很相似。下图演示了这一过程是如何进行的:
以上图R1和R3之间的通信为例,假设R1和帧中继交换机相连的物理接口IP是123.1.1.1,R3和帧中继交换机相连的物
理接口IP是123.1.1.3,首先第一步在R1和R3的物理接口上配置帧中继封装(图中第1步),接口开启后,R1和R3会
自动向帧中继交换机发送查询信息,该消息可以向帧中继交换机通知本路由状态,还可以查询有哪些可用的DLCI号
(图中第2步)。

帧中继交换机通知R1,DLCI号103和104是激活的(图中第3步),可以使用。对于每个激活的DLCI号,R1发送一个
反向ARP请求分组,宣告自己的IP,并且封装对应的DLCI号(图中第4步)。

从这一点可以看出,帧中继是不支持广播的,帧中继网络默认是NBMA(Non-Broadcast Multiple Access,非广播多


路访问),但可以通过发送多个帧拷贝来解决广播问题。

帧中继网云将R1发来的DLCI号103替换成301发往R3(图中第5步,实际帧中继网络中可能存在很多帧中继交换机,
这里假设中间只有一台,便于讲解)。

R3收到帧中继交换机发来的帧,DLCI号是301,R3处理该数据帧并进行应答,R3封装DLCI号为301,并且告知自己
的IP是123.1.1.3(图片中第6步),然后从自己的物理接口发回。
帧中继交换机收到这个DLCI号是301的帧,根据自己的交换表,将DLCI号改成103发往R1,R1收到这个应答后在本
地的映射中添加R3的IP123.1.1.3和对应的DLCI号103,以后发往123.1.1.3的数据帧就用DLCI号103封装。

最后图中第7步,R1继续发送维持消息,默认10秒一次,此维持消息可以验证帧中继交换机是否处于激活状态。反
向ARP默认的发送时间是60秒。

同理R3和R4也可以使用相同的方法获得对方的IP地址和对应的DLCI号。

* 帧中继水平分隔潜在问题

有时候不需要建立全互连型帧中继网络,比如下面这中情况:

在这种星型拓扑结构中R1和R2以及R3通过虚电路相连,R2和R3之间没有建立虚电路,R1就像以太网中的一
个Hub,R2或R3将路由信息发给R1,因为水平分隔的原因,R1不会将从一个接口接收到的路由信息再从这个接口发
回,导致R1上面有所有分支的路由信息,而分支路由间无法学习到路由信息。

解决这一问题的方法是关闭水平分隔,或者使用多个点到点子接口,在后面的配置实例中会详细介绍到。

[*2*].帧中继配置实例

* 配置帧中继交换机

帧中继的所有实验都在GNS3中完成,配置下面这张拓扑图,其中R2是一台3640路由器,这里将它配置成帧中继交换
机,用来模拟帧中继网云,R1、R3、R4是DTE端的路由器配置了帧中继封装。
这一部分首先配置R2成为帧中继交换机。

R2配置:

1 Router>en
2 Router#conf t
3 Router(config)#host Frame-relay-SW
4 Frame-relay-SW(config)#frame-relay switch /*配置成帧中继交换机*/
5 Frame-relay-SW(config)#int s 0/0 /*进入和R1相连的接口*/
6
7 /*使用帧中继封装*/
8 Frame-relay-SW(config-if)#encapsulation frame-relay
9
10 /*
11 * 配置帧中继LMI类型为ANSI,这一句是可选配置,
12 * 如果不配置,思科使用Cisco作为默认的LMI类型
13 */
14 Frame-relay-SW(config-if)#frame-relay lmi-type ansi
15
16 /*
17 * 为了帧中继交换需要将接口改变成DCE,
18 * 这和具体链接的是DCE还是DTE接口无关。
19 */
20 Frame-relay-SW(config-if)#frame-relay intf-type dce
21
22 /*
23 * 这两条命令的作用是将s0/0接口接收到的DLCI号是103的帧,
24 * DLCI号替换成301从s0/1接口发出。
25 * 将s0/0接收到的DLCI号是104的帧,DLCI号替换成401从s0/2接口发出。
26 */
27 Frame-relay-SW(config-if)#frame-relay route 103 interface s 0/1 301
28 Frame-relay-SW(config-if)#frame-relay route 104 interface s 0/2 401
29 Frame-relay-SW(config-if)#no shut /*一定不要忘记打开接口*/
30
31 /*配置和R3相连的s0/1接口*/
32 Frame-relay-SW(config-if)#int s 0/1
33 Frame-relay-SW(config-if)#encapsulation frame-relay
34 Frame-relay-SW(config-if)#frame-relay lmi-type ansi
35 Frame-relay-SW(config-if)#frame-relay intf-type dce
36 Frame-relay-SW(config-if)#frame-relay route 301 interface s 0/0 103
37 Frame-relay-SW(config-if)#frame-relay route 304 interface s 0/2 403
38 Frame-relay-SW(config-if)#no shut
39
40 /*配置和R4相连的s0/2接口*/
41 Frame-relay-SW(config-if)#int s 0/2
42 Frame-relay-SW(config-if)#encapsulation frame-relay
43 Frame-relay-SW(config-if)#frame-relay lmi-type ansi
44 Frame-relay-SW(config-if)#frame-relay intf-type dce
45 Frame-relay-SW(config-if)#frame-relay route 403 interface s 0/1 304
46 Frame-relay-SW(config-if)#frame-relay route 401 interface s 0/0 104
47 Frame-relay-SW(config-if)#no shut
48 Frame-relay-SW(config-if)#end
49 Frame-relay-SW#

帧中继交换机配置完成后继续下面的配置,配置帧中继网络中其他路由器(R1、R3、R4)。

* 配置其他路由器使用帧中继网络

R1配置:

1 /*配置与帧中继相连的接口使用帧中继封装,再配置IP地址*/
2 R1(config)#int s 0/0
3 R1(config-if)#encapsulation frame-relay
4 R1(config-if)#ip add 123.1.1.1 255.255.255.0
5 R1(config-if)#no shut
6 R1(config-if)#end
7 R1#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#encapsulation frame-relay
3 R3(config-if)#ip add 123.1.1.3 255.255.255.0
4 R3(config-if)#no shut
5 R3(config-if)#end
6 R3#

R4配置:

1 R4(config)#int s 0/2
2 R4(config-if)#ip add 123.1.1.4 255.255.255.0
3 R4(config-if)#encap frame /*命令简写,配置帧中继封装*/
4 R4(config-if)#no shut
5 R4(config-if)#end
6 R4#

配置完成后测试R1、R3、R4都能互相ping通,使用下面的命令可以查看帧中继DLCI号的映射情况:

1 R1#show frame-relay map


2 /*
3 * "ip 123.1.1.3 dlci 103"
4 * 由此可以得出,去往123.1.1.3的帧,封装的DLCI号是103,
5 * 前面在帧中继的反向ARP中介绍过这个映射是如何得到的。
6 *
7 * "dynamic"表示这种映射关系是动态学习到的。
8 *
9 * "broadcast"表示帧中继上支持广播。
10 *
11 * "active"表示链路是正常的。
12 */
13 Serial0/0 (up): ip 123.1.1.3 dlci 103(0x67,0x1870), dynamic,
14 broadcast,, status defined, active
15
16 /*同理,发往123.1.1.4的帧用DLCI号104封装。*/
17 Serial0/0 (up): ip 123.1.1.4 dlci 104(0x68,0x1880), dynamic,
18 broadcast,, status defined, active
19 R1#

通过下面的命令查看PVC建立和DLCI号的分配情况:

1 R1#show frame-relay pvc


2
3 PVC Statistics for interface Serial0/0 (Frame Relay DTE)
4
5 Active Inactive Deleted Static
6 Local 2 0 0 0
7 Switched 0 0 0 0
8 Unused 0 0 0 0
9
10 /*
11 * 主要是看下面这两句,其中的详细参数这里暂时不需要了解,
12 * R1使用LMI从帧中继交换机(R2)那学到了两条本地可用的DLCI号,
13 * 103和104,"STATUS=ACTIVE"表示正常,
14 * 如果"STATUS=INACTIVE"表示不可用,一般是远端配置有问题,
15 * "STATUS=DELETED"则表示本地配置可能有问题。
16 */
17 DLCI=103,DLCI USAGE=LOCAL, PVC STATUS=ACTIVE, INTERFACE=Serial0/0
18 ....
19
20 DLCI=104,DLCI USAGE=LOCAL, PVC STATUS=ACTIVE, INTERFACE=Serial0/0
21 ....

通过下面的命令查看R1接口的LMI类型:

1 R1#show frame-relay lmi


2
3 /*
4 * R1会自动调整默认的LMI类型和帧中继交换机上配置的一致,
5 * "TYPE=ANSI"表示R1的s0/0接口的LMI类型是ANSI。
6 */
7 LMI Statistics for interface Serial0/0(Frame Relay DTE) LMI TYPE=ANSI
8 Invalid Unnumbered info 0 Invalid Prot Disc 0
9 Invalid dummy Call Ref 0 Invalid Msg Type 0
10 Invalid Status Message 0 Invalid Lock Shift 0
11 Invalid Information ID 0 Invalid Report IE Len 0
12 Invalid Report Request 0 Invalid Keep IE Len 0
13 Num Status Enq. Sent 116 Num Status msgs Rcvd 117
14 Num Update Status Rcvd 0 Num Status Timeouts 0
15 Last Full Status Req 00:00:21 Last Full Status Rcvd 00:00:21
16 R1#
在上面的这些配置中可能出现的问题是:

如果使用”show frame-relay pvc”查看路由器上面学不到DLCI号,请检查物理接口是否打开(包括帧中继交换机上的


物理接口),本地和帧中继交换机相连的接口的封装协议是否被配置成了帧中继,本地接口的LMI类型是否和帧中继
交换机的一致。

可以通过查看接口信息来验证:

1 /*
2 * 接口信息中的下面这几点:
3 * 接口是否开启"Serial0/0 is up, line protocol is up"
4 * 封装协议"Encapsulation FRAME-RELAY"
5 * LMI类型"LMI type is ANSI"
6 */
7 R1#show interfaces s 0/0
8 Serial0/0 is up, line protocol is up
9 ....
10 Encapsulation FRAME-RELAY, crc 16, loopback not set
11 Keepalive set (10 sec)
12 Restart-Delay is 0 secs
13 LMI enq sent 150, LMI stat recvd 151, LMI upd recvd 0, DTE LMI up
14 LMI enq recvd 0, LMI stat sent 0, LMI upd sent 0
15 LMI DLCI 0 LMI type is ANSI Annex D frame relay DTE
16 ....

到此,R1、R3、R4都能互相ping通对方,但是还存在一个问题,他们ping不同自己的IP,从上面的”show frame-
relay map”也可以看出,R1的帧中继映射中没有自己的”123.1.1.1″的映射,它不知道发往这个IP需要封装什
么DLCI号,下面继续配置,让他们都能ping通自己。

* 配置帧中继能够PING通本端

为了它们能够ping通自己的IP,需要使用静态映射命令:

1 /*
2 * 其中IP地址是要去往的目的地址,DLCI号是这个IP对应的DLCI,
3 * 后面的broadcast参数是让链路支持广播,
4 * 配置动态路由协议时必须携带此参数,
5 * 最后面的[cisco|ietf]中有两个可选参数,
6 * 如果网络中不是全思科设备,存在不同设备互连,
7 * 建议携带ietf参数。
8 */
9 R1(config-if)#frame-relay map ip ip地址 DLCI号 [broadcast] [cisco|ietf]

下面就用这条命令给R1、R3、R4添加能ping通自己的静态映射。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#frame-relay map ip 123.1.1.1 103 broadcast
3 R1(config-if)#end
4 R1#

R3配置:
1 R3(config)#int s 0/1
2 R3(config-if)#frame-relay map ip 123.1.1.3 301 broadcast
3 R3(config-if)#end
4 R3#

R4配置:

1 R4(config)#int s 0/2
2 R4(config-if)#frame-relay map ip 123.1.1.4 401 broadcast
3 R4(config-if)#end
4 R4#

这样R1、R3、R4就能够ping通自己的IP了:

1 /*查看帧中继映射*/
2 R1#show frame-relay map
3 Serial0/0 (up): ip 123.1.1.3 dlci 103(0x67,0x1870), dynamic,
4 broadcast,, status defined, active
5 Serial0/0 (up): ip 123.1.1.4 dlci 104(0x68,0x1880), dynamic,
6 broadcast,, status defined, active
7
8 /*
9 * 这一条是我们添加的静态映射,在没有指定ieft的时候,
10 * 默认的帧中继封装是CISCO。
11 */
12 Serial0/0 (up): ip 123.1.1.1 dlci 103(0x67,0x1870), static,
13 broadcast,
14 CISCO, status defined, active
15 R1#
16
17 /*
18 * 测试ping自己,虽然是ping自己,但是根据前面的映射可以得知,
19 * 数据是到达了R3后再返回的,如果R3关闭物理接口s0/2,
20 * 这里就会ping不通,大家可以测试一下。
21 */
22 R1#ping 123.1.1.1
23
24 Type escape sequence to abort.
25 Sending 5, 100-byte ICMP Echos to 123.1.1.1, timeout is 2 seconds:
26 !!!!!
27 R1#

到这里为止,帧中继网络中的三台路由器都使用了反向ARP从帧中继交换机上获取到DLCI和对应的IP地址,下面一部
分将介绍如何关闭反向ARP,使用全手动静态配置来配置帧中继映射。

* 配置帧中继使用静态映射

这一部分手动配置DLCI的静态映射,首先关闭反向ARP,然后清除通过反向ARP学习到的动态映射缓存,然后使用手
动配置。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#no frame-relay inverse-arp /*关闭反向ARP*/
3 R1(config-if)#end
4 R1#clear frame-relay inarp /*清除反向ARP学到的映射缓存*/
5 R1#conf t
6 R1(config)#int s 0/0 /*在接口下添加静态映射*/
7 R1(config-if)#frame-relay map ip 123.1.1.3 103 broadcast
8 R1(config-if)#frame-relay map ip 123.1.1.4 104 broadcast
9 R1(config-if)#end
10 R1#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#no frame-relay inverse-arp
3 R3(config-if)#end
4 R3#clear frame-relay inarp
5 R3#conf t
6 R3(config)#int s 0/1
7 R3(config-if)#frame-relay map ip 123.1.1.1 301 broadcast
8 R3(config-if)#frame-relay map ip 123.1.1.4 304 broadcast
9 R3(config-if)#end
10 R3#

R4配置:

1 R4(config)#int s 0/2
2 R4(config-if)#no frame-relay inverse-arp
3 R4(config-if)#end
4 R4#clear frame-relay inarp
5 R4#conf t
6 R4(config)#int s 0/2
7 R4(config-if)#frame-relay map ip 123.1.1.1 401 broadcast
8 R4(config-if)#frame-relay map ip 123.1.1.3 403 broadcast
9 R4(config-if)#end
10 R4#

配置完成后在R1上查看帧中继映射表:

1 /*可以看到状态全部变成了"static"即静态映射。*/
2 R1#show frame-relay map
3 Serial0/0 (up): ip 123.1.1.3 dlci 103(0x67,0x1870), static,
4 broadcast,
5 CISCO, status defined, active
6 Serial0/0 (up): ip 123.1.1.4 dlci 104(0x68,0x1880), static,
7 broadcast,
8 CISCO, status defined, active
9 Serial0/0 (up): ip 123.1.1.1 dlci 103(0x67,0x1870), static,
10 broadcast,
11 CISCO, status defined, active
12 R1#

* RIP OVER 帧中继

帧中继作为二层链路,上面可以运行各种动态路由协议。完成下图配置,在帧中继网络中运行RIP协议。
R2被配置成帧中继交换机,其中只有两条虚电路R1-R3和R1-R4,R1 s0/0的IP为123.1.1.1,R3
s0/1的IP为123.1.1.3,R4 s0/2的IP为123.1.1.4,它们上面都有一个回环接口,这些接口都被发布到RIP协议中。

首先将R2配置成帧中继交换机:

1 Router>en
2 Router#conf t
3 Router(config)#host FR-SW
4 FR-SW(config)#frame-relay switching
5 FR-SW(config)#int s 0/0
6 FR-SW(config-if)#encapsulation frame-relay
7 FR-SW(config-if)#frame-relay lmi-type ansi
8 FR-SW(config-if)#frame-relay intf-type dce
9 FR-SW(config-if)#frame-relay route 103 interface s 0/1 301
10 FR-SW(config-if)#frame-relay route 104 interface s 0/2 401
11 FR-SW(config-if)#int s 0/1
12 FR-SW(config-if)#encapsulation frame-relay
13 FR-SW(config-if)#frame-relay lmi-type ansi
14 FR-SW(config-if)#frame-relay intf-type dce
15 FR-SW(config-if)#frame-relay route 301 interface s 0/0 103
16 FR-SW(config-if)#no shut
17 FR-SW(config-if)#int s 0/2
18 FR-SW(config-if)#encapsulation frame-relay
19 FR-SW(config-if)#frame-relay lmi-type ansi
20 FR-SW(config-if)#frame-relay intf-type dce
21 FR-SW(config-if)#frame-relay route 401 interface s 0/0 104
22 FR-SW(config-if)#no shut
23 FR-SW(config-if)#end
24 FR-SW#

R1配置:
1 R1(config)#int s 0/0
2 /*使用帧中继封装*/
3 R1(config-if)#encapsulation frame-relay
4 /*关闭反向ARP,使用手动静态映射配置*/
5 R1(config-if)#no frame-relay inverse-arp
6 /*配置静态映射*/
7 R1(config-if)#frame-relay map ip 123.1.1.3 103 broadcast
8 R1(config-if)#frame-relay map ip 123.1.1.1 103 broadcast
9 R1(config-if)#frame-relay map ip 123.1.1.4 104 broadcast
10 R1(config-if)#ip add 123.1.1.1 255.255.255.0
11 R1(config-if)#no shut
12 R1(config-if)#int lo 0
13 R1(config-if)#ip add 1.1.1.1 255.255.255.0
14 R1(config-if)#no shut
15 R1(config-if)#router rip /*配置RIP,宣告所有接口*/
16 R1(config-router)#net 1.0.0.0
17 R1(config-router)#net 123.0.0.0
18 R1(config-router)#end
19 R1#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#encapsulation frame-relay
3 R3(config-if)#no frame-relay inverse-arp
4 R3(config-if)#frame-relay map ip 123.1.1.1 301 broadcast
5
6 /*让R3能ping通自己*/
7 R3(config-if)#frame-relay map ip 123.1.1.3 301 broadcast
8
9 /*因为R3和R4之间并没有虚电路,所以发往R4的数据要先发往R1*/
10 R3(config-if)#frame-relay map ip 123.1.1.4 301 broadcast
11 R3(config-if)#ip add 123.1.1.3 255.255.255.0
12 R3(config-if)#no shut
13 R3(config-if)#int lo0
14 R3(config-if)#ip add 3.3.3.3 255.255.255.0
15 R3(config-if)#no shut
16 R3(config-if)#router rip
17 R3(config-router)#net 3.0.0.0
18 R3(config-router)#net 123.0.0.0
19 R3(config-router)#end
20 R3#

R4配置:

1 R4(config)#int s 0/2
2 R4(config-if)#encapsulation frame-relay
3 R4(config-if)#no frame-relay inverse-arp
4 R4(config-if)#frame-relay map ip 123.1.1.1 401 broadcast
5
6 /*让R4能ping通自己*/
7 R4(config-if)#frame-relay map ip 123.1.1.4 401 broadcast
8
9 /*因为R4和R3之间没有配置虚电路,发往R3的数据先发往R1*/
10 R4(config-if)#frame-relay map ip 123.1.1.3 401 broadcast
11 R4(config-if)#ip add 123.1.1.4 255.255.255.0
12 R4(config-if)#no shut
13 R4(config-if)#int lo 0
14 R4(config-if)#ip add 4.4.4.4 255.255.255.0
15 R4(config-if)#no shut
16 R4(config-if)#router rip
17 R4(config-router)#net 4.0.0.0
18 R4(config-router)#net 123.0.0.0
19 R4(config-router)#end
20 R4#

配置完成后全网后能互相通信,在R4上查看路由表和帧中继映射表:

1 /*显示R4已经学习到R1和R3上面的回环接口信息*/
2 R4#show ip route
3
4 Gateway of last resort is not set
5
6 R 1.0.0.0/8 [120/1] via 123.1.1.1, 00:00:18, Serial0/2
7 R 3.0.0.0/8 [120/2] via 123.1.1.1, 00:00:18, Serial0/2
8 4.0.0.0/24 is subnetted, 1 subnets
9 C 4.4.4.0 is directly connected, Loopback0
10 123.0.0.0/24 is subnetted, 1 subnets
11 C 123.1.1.0 is directly connected, Serial0/2
12 R4#
13
14 /*静态映射全部是激活可用的*/
15 R4#show frame-relay map
16 Serial0/2 (up): ip 123.1.1.3 dlci 401(0x191,0x6410), static,
17 broadcast,
18 CISCO, status defined, active
19 Serial0/2 (up): ip 123.1.1.4 dlci 401(0x191,0x6410), static,
20 broadcast,
21 CISCO, status defined, active
22 Serial0/2 (up): ip 123.1.1.1 dlci 401(0x191,0x6410), static,
23 broadcast,
24 CISCO, status defined, active
25 R4#
26
27 /*
28 * 这个时候假设R4去ping 3.3.3.3,首先R4查询路由表,
29 * 发现"3.0.0.0/8 [120/2] via 123.1.1.1",
30 * 发往3.0.0.0/8网段的数据要发给123.1.1.1即R1,
31 * R4再查询帧中继映射表,发现"ip 123.1.1.1 dlci 401"
32 * 所以R4用DLCI号401封装这个帧发往R1。
33 */

从上面的输出中并没有出现上面”帧中继水平分隔潜在问题”中提到的水平分隔问题,这是因为帧中继物理接口默认关
闭了水平分隔,在R1上查看接口信息:

1 R1#show ip int s 0/0


2 Serial0/0 is up, line protocol is up
3 ....
4 Split horizon is disabled /*水平分隔是关闭的*/
5 ....

可以使用下面的命令打开水平分隔:

1 R1(config)#int s 0/0
2 R1(config-if)#ip split-horizon
3 R1(config-if)#end
4 R1#

打开水平分隔后稍等一段时间,RIP收敛后,R3上面就看不到R4回环接口的路由了,同样R4上面也看不到R3的回环
接口路由了。

除了关闭水平分隔外,还可以使用接下来介绍的方法,使用点到点子接口来解决水平分隔在帧中继网络中导致的问
题。

* 配置帧中继子接口

这一部分来配置一个稍微复杂一点的拓扑,在这个拓扑中会综合运用到两种子接口:点到点子接口(Point-to-Point)、多点
子接口(Multipoint)。

如图所示,R5被配置成帧中继交换机,其中有三条虚电路R1-R2,R1-R3,R1-R4,在R1的s0/0上启用了子接口,
其中s0/0.1用来连接R2,是一个点到点子接口,s0/0.2被用来连接R3和R4,是一个多点子接口。R1
s0/0.1的IP为12.1.1.1、s0/0.2的IP地址为134.1.1.1,R2的s0/1的IP地址为12.1.1.2,R3的s0/2的IP地址
为134.1.1.3,R4的s0/3的IP地址为134.1.1.4。每个路由上都有一个回环接口,IP如图所示。在这个帧中继网络上运
行RIP协议,测试多点子接口存在的水平分隔问题。

首先配置R5成为帧中继交换机:

1 Router>en
2 Router#conf t
3 Router(config)#host RF-SW
4 RF-SW(config)#frame-relay switch
5 RF-SW(config)#int s 0/0
6 RF-SW(config-if)#encap frame
7 RF-SW(config-if)#frame lmi-type ansi
8 RF-SW(config-if)#frame intf-type dce
9 RF-SW(config-if)#frame route 102 int s 0/1 201
10 RF-SW(config-if)#frame route 103 int s 0/2 301
11 RF-SW(config-if)#frame route 104 int s 0/3 401
12 RF-SW(config-if)#no shut
13 RF-SW(config-if)#int s 0/1
14 RF-SW(config-if)#encap frame
15 RF-SW(config-if)#frame lmi-type ansi
16 RF-SW(config-if)#frame intf-type dce
17 RF-SW(config-if)#frame route 201 int s 0/0 102
18 RF-SW(config-if)#no shut
19 RF-SW(config-if)#int s 0/2
20 RF-SW(config-if)#encap frame
21 RF-SW(config-if)#frame lmi-type ansi
22 RF-SW(config-if)#frame intf-type dce
23 RF-SW(config-if)#frame route 301 s 0/0 103
24 RF-SW(config-if)#frame route 301 int s 0/0 103
25 RF-SW(config-if)#no shut
26 RF-SW(config-if)#int s 0/3
27 RF-SW(config-if)#encap frame
28 RF-SW(config-if)#frame lmi-type ansi
29 RF-SW(config-if)#frame intf-type dce
30 RF-SW(config-if)#frame route 401 int s 0/0 104
31 RF-SW(config-if)#no shut
32 RF-SW(config-if)#end
33 RF-SW#

在R1上配置点到点和多点子接口:

1 R1(config)#int s 0/0
2 R1(config-if)#encap frame /*使用帧中继封装*/
3 R1(config-if)#no frame inverse-arp /*关闭反向ARP*/
4 R1(config-if)#no shut /*物理接口只需要打开即可*/
5
6 /*配置点到点子接口*/
7 R1(config-if)#int s 0/0.1 point-to-point
8 R1(config-subif)#ip add 12.1.1.1 255.255.255.0
9 /*
10 * 点到点子接口不需要和物理接口一样配置静态映射,
11 * 只要指明该接口使用的DLCI号即可,
12 * 点到点子接口去往该子接口的IP地址(12.1.1.1)
13 * 或远端(R2的12.1.1.2)的数据都使用这个DLCI号封装。
14 */
15 R1(config-subif)#frame-relay interface-dlci 102
16
17 /*配置多点子接口*/
18 R1(config-fr-dlci)#int s 0/0.2 multipoint
19 R1(config-subif)#ip add 134.1.1.1 255.255.255.0
20
21 /*多点子接口的静态映射和物理接口相同*/
22 R1(config-subif)#frame-relay map ip 134.1.1.1 103 broadcast
23 R1(config-subif)#frame-relay map ip 134.1.1.4 104 broadcast
24 R1(config-subif)#frame-relay map ip 134.1.1.3 103 broadcast
25 R1(config-subif)#int lo 0
26 R1(config-if)#ip add 1.1.1.1 255.255.255.0
27 R1(config-if)#no shut
28 R1(config-if)#router rip /*启用RIP协议*/
29 R1(config-router)#net 1.0.0.0
30 R1(config-router)#net 12.0.0.0
31 R1(config-router)#net 134.1.0.0
32 R1(config-router)#end
33 R1#

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#encapsulation frame-relay
3 R2(config-if)#no frame-relay inverse-arp
4 R2(config-if)#frame-relay map ip 12.1.1.1 201 broadcast
5 R2(config-if)#frame-relay map ip 12.1.1.2 201 broadcast
6 R2(config-if)#ip add 12.1.1.2 255.255.255.0
7 R2(config-if)#no shut
8 R2(config-if)#int lo 0
9 R2(config-if)#ip add 2.2.2.2 255.255.255.0
10 R2(config-if)#no shut
11 R2(config-if)#router rip
12 R2(config-router)#net 2.0.0.0
13 R2(config-router)#net 12.0.0.0
14 R2(config-router)#end
15 R2#

R3配置:

1 R3(config)#int s 0/2
2 R3(config-if)#encapsulation frame-relay
3 R3(config-if)#no frame-relay inverse-arp
4 /*配置静态映射,去往R1*/
5 R3(config-if)#frame-relay map ip 134.1.1.1 301 broadcast
6 /*因为R3和R4之间没有配置虚电路,所以去往R4要先发往R1*/
7 R3(config-if)#frame-relay map ip 134.1.1.4 301 broadcast
8 /*配置R3能够ping通自己*/
9 R3(config-if)#frame-relay map ip 134.1.1.3 301 broadcast
10 R3(config-if)#ip add 134.1.1.3 255.255.255.0
11 R3(config-if)#no shut
12 R3(config-if)#int lo 0
13 R3(config-if)#ip add 3.3.3.3 255.255.255.0
14 R3(config-if)#no shut
15 R3(config-if)#router rip /*配置RIP*/
16 R3(config-router)#net 3.0.0.0
17 R3(config-router)#net 134.1.0.0
18 R3(config-router)#end
19 R3#

R4配置:

1 R4(config)#int s 0/3
2 R4(config-if)#encapsulation frame-relay
3 R4(config-if)#no frame-relay inverse-arp
4 R4(config-if)#frame-relay map ip 134.1.1.1 401 broadcast
5 R4(config-if)#frame-relay map ip 134.1.1.3 401 broadcast
6 R4(config-if)#frame-relay map ip 134.1.1.4 401 broadcast
7 R4(config-if)#ip add 134.1.1.4 255.255.255.0
8 R4(config-if)#no shut
9 R4(config-if)#int lo 0
10 R4(config-if)#ip add 4.4.4.4 255.255.255.0
11 R4(config-if)#no shut
12 R4(config-if)#router rip
13 R4(config-router)#net 4.0.0.0
14 R4(config-router)#net 134.1.0.0
15 R4(config-router)#end
16 R4#

可以在R1上查看子接口信息来验证默认情况下,点到点子接口和多点子接口的水平分隔都是打开的:

1 R1#show ip interface s 0/0.1


2 Serial0/0.1 is up, line protocol is up
3 ....
4 Split horizon is enabled
5 ....
6
7 R1#show ip interface s 0/0.2
8 Serial0/0.2 is up, line protocol is up
9 ....
10 Split horizon is enabled
11 ....

在R2的多点子接口上连接了两台路由器R3和R4,查看R3的路由表:

1 R3#show ip route
2 /*从路由表中看不到R4的回环接口的信息*/
3 R 1.0.0.0/8 [120/1] via 134.1.1.1, 00:00:28, Serial0/2
4 R 2.0.0.0/8 [120/2] via 134.1.1.1, 00:00:28, Serial0/2
5 3.0.0.0/24 is subnetted, 1 subnets
6 C 3.3.3.0 is directly connected, Loopback0
7 R 12.0.0.0/8 [120/1] via 134.1.1.1, 00:00:28, Serial0/2
8 134.1.0.0/24 is subnetted, 1 subnets
9 C 134.1.1.0 is directly connected, Serial0/2
10 R3#

同样,在R4上面也看不到R3回环接口的信息,这就是因为R1上s0/0.2接口上默认的水平分隔设置导致的,用下面的
命令关闭R1的s0/0.2子接口的水平分隔:

1 R1(config)#int s 0/0.2
2 R1(config-subif)#no ip split-horizon
3 R1(config-subif)#end
4 R1#

再次查看R3的路由表:

1 R3#show ip route
2
3 R 1.0.0.0/8 [120/1] via 134.1.1.1, 00:00:13, Serial0/2
4 R 2.0.0.0/8 [120/2] via 134.1.1.1, 00:00:13, Serial0/2
5 3.0.0.0/24 is subnetted, 1 subnets
6 C 3.3.3.0 is directly connected, Loopback0
7 /*已经学习到了R4的回环接口信息*/
8 R 4.0.0.0/8 [120/2] via 134.1.1.1, 00:00:13, Serial0/2
9 R 12.0.0.0/8 [120/1] via 134.1.1.1, 00:00:13, Serial0/2
10 134.1.0.0/24 is subnetted, 1 subnets
11 C 134.1.1.0 is directly connected, Serial0/2
12
13 /*测试ping R4回环接口*/
14 R3#ping 4.4.4.4
15
16 Type escape sequence to abort.
17 Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
18 !!!!! /*成功*/
19 Success rate is 100 percent (5/5), round-trip min/avg/max = 80/118/184 ms
20 R3#

这一部分演示了路由器子接口配置(点到点子接口和多点子接口)以及多点子接口上面需要注意的水平分隔问题。

[*3*].EIGRP over 帧中继

这一部分使用的拓扑图如下:

R4是帧中继交换机,图中配置了两条虚电路R1-R2,R1-R3。

这一部分先配置R4成为帧中继交换机:

1 Router>en
2 Router#conf t
3 Router(config)#host RF-SW
4 RF-SW(config)#frame-relay switching
5 RF-SW(config)#int s 0/0
6 RF-SW(config-if)#encapsulation frame-relay
7 RF-SW(config-if)#frame-relay lmi-type ansi
8 RF-SW(config-if)#frame-relay intf-type dce
9 RF-SW(config-if)#frame-relay route 103 int s 0/1 301
10 RF-SW(config-if)#frame-relay route 102 int s 0/2 201
11 RF-SW(config-if)#no shut
12 RF-SW(config-if)#int s 0/1
13 RF-SW(config-if)#encapsulation frame-relay
14 RF-SW(config-if)#frame-relay lmi-type ansi
15 RF-SW(config-if)#frame-relay intf-type dce
16 RF-SW(config-if)#frame-relay route 301 int s 0/0 103
17 RF-SW(config-if)#no shut
18 RF-SW(config-if)#int s 0/2
19 RF-SW(config-if)#encapsulation frame-relay
20 RF-SW(config-if)#frame-relay lmi-type ansi
21 RF-SW(config-if)#frame-relay intf-type dce
22 RF-SW(config-if)#frame-relay route 201 int s 0/0 102
23 RF-SW(config-if)#no shut
24 RF-SW(config-if)#end
25 RF-SW#

* 在帧中继物理接口上运行EIGRP

配置R1、R2、R3的物理接口使用帧中继封装,并且在上面运行EIGRP协议。

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#encapsulation frame-relay
3 R1(config-if)#no frame-relay inverse-arp
4 R1(config-if)#frame-relay map ip 123.1.1.1 102 broadcast
5 R1(config-if)#frame-relay map ip 123.1.1.2 102 broadcast
6 R1(config-if)#frame-relay map ip 123.1.1.3 103 broadcast
7 R1(config-if)#ip add 123.1.1.1 255.255.255.0
8 R1(config-if)#no shut
9 R1(config-if)#int lo 0
10 R1(config-if)#ip add 1.1.1.1 255.255.255.0
11 R1(config-if)#no shut
12 R1(config-if)#router eigrp 100
13 R1(config-router)#net 1.1.1.0 0.0.0.255
14 R1(config-router)#net 123.1.1.0 0.0.0.255
15 R1(config-router)#end
16 R1#

R2配置:

1 R2(config)#int s 0/2
2 R2(config-if)#encapsulation frame-relay
3 R2(config-if)#no frame-relay inverse-arp
4 R2(config-if)#frame-relay map ip 123.1.1.1 201 broadcast
5 R2(config-if)#frame-relay map ip 123.1.1.2 201 broadcast
6 R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast
7 R2(config-if)#ip add 123.1.1.2 255.255.255.0
8 R2(config-if)#no shut
9 R2(config-if)#int lo 0
10 R2(config-if)#ip add 2.2.2.2 255.255.255.0
11 R2(config-if)#no shut
12 R2(config-if)#router eigrp 100
13 R2(config-router)#net 2.2.2.0 0.0.0.255
14 R2(config-router)#net 123.1.1.0 0.0.0.255
15 R2(config-router)#end
16 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#encapsulation frame-relay
3 R3(config-if)#no frame-relay inverse-arp
4 R3(config-if)#frame-relay map ip 123.1.1.1 301 broadcast
5 R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast
6 R3(config-if)#frame-relay map ip 123.1.1.3 301 broadcast
7 R3(config-if)#ip add 123.1.1.3 255.255.255.0
8 R3(config-if)#no shut
9 R3(config-if)#int lo 0
10 R3(config-if)#ip add 3.3.3.3 255.255.255.0
11 R3(config-if)#no shut
12 R3(config-if)#router eigrp 100
13 R3(config-router)#net 3.3.3.0 0.0.0.255
14 R3(config-router)#net 123.1.1.0 0.0.0.255
15 R3(config-router)#end
16 R3#

配置完成后在R2上面查看路由表:

1 R2#show ip route
2
3 D 1.0.0.0/8 [90/2297856] via 123.1.1.1, 00:00:02, Serial0/2
4 2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
5 C 2.2.2.0/24 is directly connected, Loopback0
6 D 2.0.0.0/8 is a summary, 00:05:45, Null0
7 123.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
8 C 123.1.1.0/24 is directly connected, Serial0/2
9 D 123.0.0.0/8 is a summary, 00:05:45, Null0
10 R2#

在这里发现了问题,R2上面并没有学到去往R3的回环接口3.3.3.3的路由条目,同样R3上面也没有学习到R2的回环接
口的条目,这是因为在R1的物理接口s0/0上开启了对EIGEP的水平分隔,通过下面的命令来关闭它:

1 R1(config)#int s 0/0
2 R1(config-if)#no ip split-horizon eigrp 100
3 R1(config-if)#end
4 R1#

关闭之后再次查看R2的路由表,就可以学习到去往R3回环接口的路由条目了。

* 在帧中继多点子接口上运行EIGRP

R2、R3、R4配置保持不变,直接右击R1选择”reload”重启这台路由器,由于没有保存配置,R1将恢复初始状态,这
里要在它的物理接口s0/0上配置多点子接口:

1 R1(config)#int s 0/0
2 R1(config-if)#encapsulation frame-relay
3 R1(config-if)#no frame-relay inverse-arp
4 R1(config-if)#no shut /*物理接口只需要打开即可*/
5 R1(config-if)#exit
6 R1(config)#int s 0/0.1 multipoint /*配置多点子接口*/
7 R1(config-subif)#ip add 123.1.1.1 255.255.255.0
8 R1(config-subif)#frame-relay map ip 123.1.1.1 102 broadcast
9 R1(config-subif)#frame-relay map ip 123.1.1.2 102 broadcast
10 R1(config-subif)#frame-relay map ip 123.1.1.3 103 broadcast
11
12 /*多点子接口默认对EIGRP的水平分隔也是开启的,这里关闭它*/
13 R1(config-subif)#no ip split-horizon eigrp 100
14 R1(config-subif)#int lo 0
15 R1(config-if)#ip add 1.1.1.1 255.255.255.0
16 R1(config-if)#no shut
17 R1(config-if)#router eigrp 100
18 R1(config-router)#net 1.1.1.0 0.0.0.255
19 R1(config-router)#net 123.1.1.0 0.0.0.255
20 R1(config-router)#end
21 R1#

* 在帧中继点到点接口上运行EIGRP

R4帧中继交换机的配置保持不变,直接右击R1、R2、R3选择”reload”重启这几台路由器,将他们恢复初始状态,这
里要在R1的物理接口s0/0上配置点到点子接口,由于多点子接口下所有对应的路由属于同一网段,而点到点子接口,
每个子接口对应了一个单独网段,每个子接口就像一个单独的物理接口一样工作,所以不会出现水平分隔的问题:

R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#encapsulation frame-relay
3 R1(config-if)#no frame-relay inverse-arp
4 R1(config-if)#no shut /*物理接口只需要开启*/
5
6 /*使用点到点子接口*/
7 R1(config-if)#int s 0/0.1 point-to-point
8 R1(config-subif)#ip add 12.1.1.1 255.255.255.0
9 /*
10 * 点到点子接口只需要封装DLCI号即可,
11 * 从封装的DLCI号可以得知,这个点到点子接口是用来连接R2的。
12 */
13 R1(config-subif)#frame-relay interface-dlci 102
14
15 /*连接R3的点到点子接口*/
16 R1(config-fr-dlci)#int s 0/0.2 point-to-point
17 R1(config-subif)#ip add 13.1.1.1 255.255.255.0
18 R1(config-subif)#frame-relay interface-dlci 103
19
20 R1(config-fr-dlci)#int lo 0
21 R1(config-if)#ip add 1.1.1.1 255.255.255.0
22 R1(config-if)#no shut
23 R1(config-if)#router eigrp 100
24 R1(config-router)#net 1.1.1.0 0.0.0.255
25 R1(config-router)#net 12.1.1.0 0.0.0.255
26 R1(config-router)#net 13.1.1.0 0.0.0.255
27 R1(config-router)#end
28 R1#

R2配置:

1 R2(config)#int s 0/2
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#encapsulation frame-relay
5 R2(config-if)#no frame-relay inverse-arp
6 R2(config-if)#frame-relay map ip 12.1.1.1 201 broadcast
7 R2(config-if)#frame-relay map ip 12.1.1.2 201 broadcast
8 R2(config-if)#int lo 0
9 R2(config-if)#ip add 2.2.2.2 255.255.255.0
10 R2(config-if)#router eigrp 100
11 R2(config-router)#net 2.2.2.0 0.0.0.255
12 R2(config-router)#net 12.1.1.0 0.0.0.255
13 R2(config-router)#end
14 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#encapsulation frame-relay
3 R3(config-if)#no frame-relay inverse-arp
4 R3(config-if)#frame-relay map ip 13.1.1.3 301 broadcast
5 R3(config-if)#frame-relay map ip 13.1.1.1 301 broadcast
6 R3(config-if)#ip add 13.1.1.3 255.255.255.0
7 R3(config-if)#no shut
8 R3(config-if)#int lo 0
9 R3(config-if)#ip add 3.3.3.3 255.255.255.0
10 R3(config-if)#no shut
11 R3(config-if)#router eigrp 100
12 R3(config-router)#net 3.3.3.0 0.0.0.255
13 R3(config-router)#net 13.1.1.0 0.0.0.255
14 R3(config-router)#end
15 R3#

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十六]访问控制列表(ACL)实例详解
发表于 2012 年 11 月 25 日 由 晴刃

这篇文章介绍一下访问控制列表的作用,标准、扩展、命名访问控制列表的配置和需要注意的问题。文章后半部分会
实例演示一些高级访问控制列表的配置,包括动态、反射、和基于时间的访问控制列表(本文中所有配置都可以
在GNS3中完成)。
___________________________________________

文章目录

[*1*].ACL概述
ACL的作用
ACL的工作流程
通配符掩码在ACL中的作用
[*2*].标准ACL配置
如何配置标准ACL
如何编辑标准ACL
标准ACL放置的位置
如何配置标准命名ACL
[*3*].扩展ACL配置
如何配置扩展ACL
扩展ACL放置的位置
如何编辑扩展ACL
扩展ACL中的established
如何配置扩展命名ACL
[*4*].配置ACL需要注意的事项
配置扩展ACL允许RIP协议
配置扩展ACL允许EIGRP协议
配置扩展ACL允许OSPF协议
[*5*].高级ACL配置
如何配置反射ACL
如何配置动态ACL
如何配置基于时间的ACL

___________________________________________

[*1*].ACL概述

ACL(Access Control List,访问控制列表),是一系列运用到路由器接口的指令列表,路由根据ACL中指定的条件


对经过路由器接口的数据包进行检查。本篇文章仅讨论IP的访问控制列表,针对IP协议在路由的每个端口可以创建两
个ACL:一个用于过滤进入端口的数据,另外一个用于过滤流出端口的数据。

ACL指令的放置顺序是很重要的,Cisco的IOS软件,按照ACL中指令的顺序依次检查数据包是否满足某一个指令条
件,当检测到某个指令满足条件时就执行该指令规定的动作,并且不会再检测后面的指令条件。

* ACL 的作用

配置扩展ACL允许RIP协议

ACL的作用大致分为下面这几点:

限制网络流量,提高网络性能。
提供数据流控制。
为网络访问提供基本的安全层。
决定转发或阻止哪些类型的数据流。

* ACL 的工作流程

上图为ACL的工作流程图,当路由器的进入方向的接口收到一个分组的时候,首先检查它是否是可路由的,如果不可
路由(比如并非是发往本路由的分组),则直接丢弃。

如果可路由,接下来判断进入方向的接口是否配置了ACL,如果没有配置进入方向的ACL,则直接查询路由表,然后
根据路由表中找到的端口准备往外转发;如果配置了进入方向的ACL则检查指令组是否允许该分组通过,不允许则丢
弃,允许则查询路由表,选择外出接口准备往外转发,从这里可以看出入站的ACL检查是在查询路由表之前执行的。

外出接口选择好之后,再检查外出接口上有没有配置ACL,如果配置了ACL则检查ACL指令组是否允许,没有配
置ACL则直接转发。
在ACL流程图中的”ACL指令组”可能包含多条语句,”ACL指令组”的工作流程图如下:
“ACL指令组”是逐条执行的,在逐条执行的过程中,只要发现有一条匹配,则使用那一条规定动作确定允许或拒绝
(比如执行第一条的时候就匹配了,那么就使用第一条规定的动作允许或拒绝,后面的语句就不会被执行了),如果
所有指令都不匹配,默认的动作是拒绝。

* 通配符掩码在ACL 中的作用

路由器使用通配符掩码(Wildcard Masking)与源或目标地址一起来分辨匹配的地址范围,在访问控制列表中,将通配
符掩码中的位设置成1表示忽略IP地址中对应的位,设置成0表示必须精确匹配IP地址中对应的位,下面举几个浅显易
懂的例子:

192.168.1.0 0.0.0.255

这个例子中,通配符掩码是0.0.0.255,前面24位是0,最后8位是1,也就是前面24位必须精确匹配,最后8位是什么
都没关系。将这个通配符和前面的IP地址192.168.1.0结合起来意思就是,匹配从192.168.1.0到192.168.1.255的所
有IP地址(这和OSPF或EIGRP中的反掩码是一个道理)。

192.168.0.0 0.0.255.255

这个例子匹配的IP地址范围就是192.168.0.0-192.168.255.255。

192.168.16.0 0.0.7.255

这个例子中,通配符掩码的第三个数是7,IP地址的第三位是16,对他们进行分解转化成二进制就是:
7 = 00000 111
16 = 00010 000

前面说过,通配符掩码中0的部分必须精确匹配,1的部分什么都可以,也就是说16的二进制表示法前面的5位
(00010)必须精确匹配,最后3位的取值范围可以是(000-111),那么就是:

00010000-00010111,转化成十进制就是16-23。

所以这条规则匹配的IP地址范围就是”192.168.16.0-192.168.23.255″。

192.168.1.0 0.0.0.254

这条规则匹配的是192.168.1.0中所有偶数IP地址。

192.168.1.1 0.0.0.254

这条规则匹配的是192.168.1.0中所有奇数IP地址。

上面这些例子说明了怎么通过规则中的通配符掩码确定匹配的IP地址范围,下面就来看一看一个数据包中包含了
源IP地址192.168.0.2到达路由器,假设路由器上的访问控制列表语句中包含地址对”192.168.0.0 0.0.0.255″,路由器
是如何操作的:

1. 使用访问控制列表中的地址对”192.168.0.0 0.0.0.255″执行逻辑或操作(192.168.0.0和0.0.0.255执行逻辑或运
算),得到结果192.168.0.255。

2. 用地址对中的通配符掩码(0.0.0.255)和数据包头中的IP(192.168.0.2)执行逻辑或操作,结果为192.168.0.255。

3. 将得到的两个结果相减,如果结果是0则匹配,如果结果非0,则说明不匹配。对接下来的ACL条目都重复以上三步
相同的操作。

在IP访问控制列表地址掩码对中,有两个关键词可以用来省略一些输出:

“any” : 它可以用来代替地址掩码对”0.0.0.0 255.255.255.255″,该地址掩码对匹配任何IP地址。


“host” : 它可以用来代替通配符掩码”0.0.0.0″,该通配符掩码只能匹配一个IP地址。比如”host 192.168.1.1″等同于地址
对”192.168.1.1 0.0.0.0″。在标准的访问控制列表中,如果仅匹配一个IP地址,可以省略关键字host,也就是说在标准
访问控制列表条目中,没有通配符掩码,说明掩码是”0.0.0.0″;而在扩展的访问控制列表中不能省略host关键字。

[*2*].标准ACL配置

这一部分的实验全部在GNS3中可以完成。

* 如何配置标准ACL

首先配置下面的拓扑,保证全网可以互通:
R1配置:

1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut
4 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
5 R1(config)#end
6 R1#

R2配置:

1 R2(config-if)#int s 0/1
2 R2(config-if)#ip add 23.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/0
5 R2(config-if)#ip add 12.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#end
8 R2#

R3配置:

1 R3(config)#int s 0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#exit
5 R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
6 R3(config)#end
7 R3#

完成基本连通性的配置后,下面来创建和应用标准的访问控制列表。

访问控制列表是在路由器的全局配置模式输入的,增加一条标准的访问控制列表的语句如下:

1 Router(config)#access-list {ACL的编号} {deny|permint} {source [source-


wildcard]|any} [log]
2
3 /*
4 * 其中大括号里面的类容表示必选,中括号里面的类容表示可选,
5 *
6 * {ACL的编号}:
7 * 标准ACL的编号范围是1-99之间的整数,
8 * 扩展ACL的编号是100-199之间的整数。
9 *
10 * {deny|permint}:
11 * 指定匹配这条规则的数据是允许(permint)还是拒绝(deny),
12 *
13 * {source [source-wildcard]|any} :
14 * 指定了一个IP地址范围,使用地址对的形式,比如,
15 * "192.168.1.0 0.0.0.255","host 192.168.1.1"或者"any"。
16 * 这个参数在前面的"通配符掩码在ACL中的作用"中详细介绍过。
17 *
18 * [log]:可选参数,表示要不要将匹配的条目显示在控制台输出中,
19 * 或者输出到特定的服务器。
20 */

下面在R3上面来创建一条标准ACL,禁止IP(12.1.1.1)的访问:

R3配置:

1 /*
2 * 创建标准的ACL,编号是1,第一个条目是阻止12.1.1.1,
3 * 编号是1的ACL的第二个条目是允许任何IP地址的访问,
4 * 两个条目的顺序很重要,不能颠倒,如果将允许任何IP地址放置第一条,
5 * 那么由于每个IP地址都能匹配第一条,所以第二条将永远不会被执行到。
6 * 这个ACL的第一条还可以简写成"access-list 1 deny 12.1.1.1",
7 * 这是标准ACL的简写规则,在扩展ACL中不能省略关键字host。
8 */
9 R3(config)#access-list 1 deny host 12.1.1.1
10 R3(config)#access-list 1 permit any
11
12 /*
13 * 将编号是1的标准ACL应用到路由器的s0/1接口上,
14 * 方向是in,即进入的方向。
15 */
16 R3(config)#int s 0/1
17 R3(config-if)#ip access-group 1 in
18 R3(config-if)#end
19 R3#
20
21 /*在R1上ping R3测试*/
22 R1#ping 23.1.1.3
23
24 Type escape sequence to abort.
25 Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:
26 U.U.U /*发现ping不通*/
27 Success rate is 0 percent (0/5)
28 R1#

这条标准的ACL仅仅是禁止了一个IP地址12.1.1.1,如果R1上面还有其他接口,使用高级ping命令让其他接口的IP地址
作为源,去ping R3的s0/1接口IP,还是可以ping通的。

下面看一下如何编辑这个创建好了的标准ACL。

* 如何编辑标准ACL

R3 ACL :
完成上面的配置后,可以在 上使用下面的命令来查看 条目

1 /*
2 * "Standard IP access list 1"这一行是ACL类型和编号,
3 * 每一行是一个条目,其中"10"是行号,
4 * 后面是执行的操作,(22 matches)表示匹配的次数。
5 */
6 R3#show access-lists
7 Standard IP access list 1
8 10 deny 12.1.1.1 (22 matches)
9 20 permit any (15 matches)

可以使用下面的命令来删除标准ACL中对应的条目:

1 /*首先进入标准ACL 1的编辑模式*/
2 R3(config)#ip access-list standard 1
3 R3(config-std-nacl)#no 10 /*删除行号是10的这一行*/
4 R3(config-std-nacl)#end
5
6 /*再次查看,发现只剩下行号是20的了*/
7 R3#show access-lists
8 Standard IP access list 1
9 20 permit any (30 matches)
10 R3#

这里有一点不得不说一下,这种删除方法只能适用于Cisco的IOS版本是12.0之后的版本,这里有个简单的判断方法,
如果使用”show access-lists”看不到每个条目前面的行号,就说明当前路由器的IOS版本不支持这种方法,也同样不支
持接下来要介绍到的”标准命名ACL”。

标准ACL配置完成后,如果不需要了可以用下面的方法来删除ACL:

1 /*删除编号是1的标准ACL*/
2 R3(config)#no access-list 1
3
4 /*删除在接口上的调用*/
5 R3(config)#int s 0/1
6 R3(config-if)#no ip access-group 1 in
7 R3(config-if)#end
8 R3#

* 标准ACL 放置的位置

标准的ACL只能对源地址进行控制,如下图所示,将R1的s0/0接口作为源地址,R3的s0/1作为目的地址,数据一共要
经过四个接口。
如果将前面创建的ACL 1配置在R1的s0/0上,方向是Out,结果将不起作用,因为ACL仅对穿越流量起作用,对本路
由器起源的流量不起作用。

如果将前面创建的ACL 1配置在R2的s0/0上,方向是In,结果起作用,R1不能访问R3了,但同时R1也不能访
问R2了,因为标准ACL只针对源地址进行过滤。

如果将前面创建的ACL 1配置在R2的s0/1上,方向是Out,结果正确,R1能正常访问R2,但是不能访问R3。

如果将前面创建的ACL 1配置在R3的s0/1上,方向是In,结果同样正确。

经过上面四步的分析,可以得出这样的结论,标准访问控制列表要尽可能的应用在靠近目标端,因为标准ACL只针对
源地址进行过滤。

* 如何配置标准命名ACL

可以使用字符来代替数字标识ACL,称为命名ACL,命名ACL与Cisco IOS 11.2以前的版本不兼容,现在的版本一般


都是12.0以后的版本。另外,不能为多个ACL使用相同的名字,不能使用相同的名字来命名不同类型的ACL,比如,
不能使用相同的名字来命名一个标准ACL和一个扩展ACL。

下面使用标准命名ACL来实现拒绝R1访问R3:

1 /*"deny-r1"就是这条标准ACL的字符串名称,可以自己随便写一个*/
2 R3(config)#ip access-list standard deny-r1
3 R3(config-std-nacl)#deny 12.1.1.1 /*第一条规则,阻止12.1.1.1*/
4 R3(config-std-nacl)#permit any /*第二条规则允许所有IP*/
5 R3(config-std-nacl)#end
6 R3#conf t
7 R3(config)#int s 0/1 /*在R3的s0/1接口上调用它*/
8 R3(config-if)#ip access-group deny-r1 in
9 R3(config-if)#end
10
11 /*查看ACL*/
12 R3#show access-lists
13 Standard IP access list deny-r1
14 10 deny 12.1.1.1
15 20 permit any
16 R3#

标准命名的ACL也可以使用标准ACL里面的编辑语句来编辑它:
1 /*删除编号是20的条目*/
2 R3(config)#ip access-list standard deny-r1
3 R3(config-std-nacl)#no 20
4 R3(config-std-nacl)#end
5
6 /*再次查看,发现只剩下一条ACL条目了*/
7 R3#show access-lists
8 Standard IP access list deny-r1
9 10 deny 12.1.1.1
10
11 /*可以使用下面的方法删除这个标准命名ACL,并在接口上删除对它的调用*/
12 R3#conf t
13 R3(config)#no ip access-list standard deny-r1
14 R3(config)#int s 0/1
15 R3(config-if)#no ip access-group deny-r1 in
16 R3(config-if)#end
17 R3#

[*3*].扩展ACL配置

* 如何配置扩展ACL

配置扩展ACL也分为两个步骤:创建ACL和在接口下调用;扩展ACL的结尾也是隐式的拒绝所有。下面是创建扩
展ACL的基本格式:

1 Router(config)#access-list access-list-number {deny|permit|remark} protocol


source source-wildcard [operator operand] [port port-name or name] destination
destination-wildcard [operator operand] [port port-name or name] [established]
2
3 /*
4 * "access-list-number"是扩展ACL编号,范围从100-199。
5 *
6 * {deny|permit|remark} 是这条ACL条目执行的操作,拒绝|允许|注释,
7 * 其中的"remark"是添加注释,相当于程序设计中的注释语句。
8 *
9 * "protocol"代表协议,可以用具体的协议名称代替,比如TCP、UDP、ICMP、IP等。
10 *
11 * "source source-wildcard",表示源地址以及通配符掩码。
12 *
13 * "destination destination-wildcard",表示目的地址以及通配符掩码。
14 *
15 * "[port port-name or name]"表示端口号或名称,输入telnet和23的效果是一样的。
16 *
17 * "[established]"在后面的"扩展ACL中的established"中介绍。
18 */

下面举个例子,还是使用上面的图三作为拓扑图,配置扩展ACL拒绝R1去往R3的Telnet通信。

在R2上配置扩展ACL然后调用它:

1 /*
2 * 扩展ACL号为100,第一条命令拒绝tcp类型的连接,
3 * 源主机是12.1.1.1,没有配置源端口,默认就匹配所有端口,
4 * 目的主机是23.1.1.3,目的端口是23,即telnet。
5 */
6 R2(config)#access-list 100 deny tcp host 12.1.1.1 host 23.1.1.3 eq telnet
7
8 /*第二条命令允许所有IP通信,源和目的是任意主机。*/
9 R2(config)#access-list 100 permit ip any any
10
11 /*在R2的s0/0接口上调用它*/
12 R2(config)#int s 0/0
13 R2(config-if)#ip access-group 100 in
14 R2(config-if)#end
15 R2#

在R3上配置VTY:

1 R3(config)#enable secret ccna


2 R3(config)#line vty 0 4
3 R3(config-line)#password ccna
4 R3(config-line)#login
5 R3(config-line)#end
6 R3#

测试在R1上telnet R3:

1 R1#telnet 23.1.1.3
2 Trying 23.1.1.3 ...
3 % Destination unreachable; gateway or host down
4 /*发现无法连接上*/
5 R1#
6
7 /*在R2上是可以连接上的*/
8 R2#telnet 23.1.1.3
9 Trying 23.1.1.3 ... Open
10
11 User Access Verification
12
13 Password:
14 R3>en
15 Password:
16 R3#

这里需要注意,因为这个实验是在前面的标准ACL实验的基础上进行的,请确保静态路由配置无误,全网能够互相通
信。如果之前没有删除标准ACL可以使用上面标准ACL编辑部分的命令来删除它,之后再进行扩展ACL的实验。

对于这个实验为什么要将扩展ACL配置在R2上呢?下面这一部分将介绍扩展ACL推荐放置的位置。

* 扩展ACL 放置的位置

还是利用上面的图四来进行说明,R1的12.1.1.1是源地址,R3的23.1.1.3是目的地址:

如果将扩展ACL 100放在R1的s0/0接口上,方向是Out,结果将不起作用,前面也介绍过,ACL只对穿越流量起作
用,对本地起源的流量不起作用。

如果将扩展ACL 100放在R2的s0/0接口上,方向是In,结果正确,并无其他影响。

如果将扩展ACL 100放在R2的s0/1接口上,方向是Out,结果正确,并无其他影响。
如果将扩展ACL 100放在R3的s0/1接口上,方向是In,结果正确,并无其他影响。

结果上面四步的分析,因为扩展ACL是可以根据源和目的地址进行以及端口过滤,放在R2和R3的任何接口上都不会
影响其他数据流量。但有以下两点需要注意:

放在R2的s0/1接口,方向是Out,根据前面的”ACL工作流程示意图”可以知道,路由器会先处理这个数据,并且查询
路由表准备转发,转发的时候发现在转发端口上面调用的扩展ACL 100中,有一个条目匹配,并且动作是阻止,这个
数据在这个时候被丢弃,这就浪费了R2的CPU资源(需要查询路由表)。

放在R3的s0/1接口,方向是In,不但会因为一个最终会被丢弃的数据浪费R2和R3的CPU资源,还会造成带宽资源的
浪费。

所以从上面的分析得出结论,扩展ACL应该尽可能的放在靠近源端,这样可以使得一些非法的数据流尽早的被丢弃。
所以在上面的实例中,这个扩展ACL 100被放置在R2的s0/0接口上,方向是In,这是最靠近源的端口。

* 如何编辑扩展ACL

这一部分的命令适用于扩展ACL以及扩展命名ACL,下面介绍如何查看、添加、删除、更改扩展ACL:

在R2的ACL 100中,只是阻止了R1对R3的telnet访问,R1此时是可以ping通R3的,可以使用下面的命令禁止R1
ping R3的23.1.1.3:

1 /*首先我们查看R2上面的扩展ACL*/
2 R2#show access-lists
3 Extended IP access list 100
4 10 deny tcp host 12.1.1.1 host 23.1.1.3 eq telnet (3 matches)
5 20 permit ip any any
6 R2#
7
8 /*在R1上测试Ping*/
9 R1#ping 23.1.1.3
10
11 Type escape sequence to abort.
12 Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:
13 !!!!! /*可以ping通*/
14 R1#
15
16 /*
17 * 在R2上添加ACL条目到ACL 100,让R1无法ping通R3,
18 * 进入ACL 100编辑模式。
19 */
20 R2(config)#ip access-list extended 100
21
22 /*
23 * 添加一条新的规则,阻止ICMP协议,
24 * 源地址是12.1.1.1,目的地址是23.1.1.3。
25 */
26 R2(config-ext-nacl)#deny icmp host 12.1.1.1 host 23.1.1.3
27 R2(config-ext-nacl)#end
28
29 /*
30 * 查看ACL 100,发现了一个问题,
31 * 新添加的ACL条目被增加到了ACL的末尾,
32 * 而在此之前有一条"permit ip any any",
33 * 这样,新增加的那个条目永远也别想执行到,
34 * 这个时候在R1上ping R3的23.1.1.3任然能够Ping通。
35 */
36 R2#show access-list
37 Extended IP access list 100
38 10 deny tcp host 12.1.1.1 host 23.1.1.3 eq telnet (3 matches)
39 20 permit ip any any (5 matches)
40 30 deny icmp host 12.1.1.1 host 23.1.1.3
41 R2#
42
43 /*先用下面的命令删除最新添加的ACL条目*/
44 R2(config)#ip access-list extended 100
45 R2(config-ext-nacl)#no 30
46 R2(config-ext-nacl)#
47
48 /*
49 * 然后用这条命令在中间插入一条ACL条目,
50 * 前面的数字15是条目编号,可以是10-20之间的任何整数,
51 * 这样这条条目就会被自动插入到ACL100的10到20之间。
52 */
53 R2(config-ext-nacl)#15 deny icmp host 12.1.1.1 host 23.1.1.3
54 R2(config-ext-nacl)#end
55 R2#
56
57 /*查看一下,发现果然插入到了10-20之间,这样R1就Ping不了R3了。*/
58 R2#show access-lists
59 Extended IP access list 100
60 10 deny tcp host 12.1.1.1 host 23.1.1.3 eq telnet (3 matches)
61 15 deny icmp host 12.1.1.1 host 23.1.1.3
62 20 permit ip any any (5 matches)
63 R2#

如果大家觉得ACL条目前面的编号从10开始不怎么习惯,可以使用下面的命令自己调整起始编号和编号的递增方式:

1 /*
2 * 100是ACL的编号,也可以是一个命名扩展ACL的字符串名称,
3 * 1代表起始的数字,5代表增量(每个条目编号增加5)。
4 */
5 R2(config)#ip access-list resequence 100 1 5
6 R2(config)#end
7
8 /*查看ACL,条目编号就变成1、6、11了*/
9 R2#show access-lists
10 Extended IP access list 100
11 1 deny tcp host 12.1.1.1 host 23.1.1.3 eq telnet (3 matches)
12 6 deny icmp host 12.1.1.1 host 23.1.1.3
13 11 permit ip any any (5 matches)
14 R2#

* 扩展ACL 中的ESTABLISHED

在扩展ACL中有一个可选参数,可以用作TCP的单向访问控制。这种设计是基于TCP的三次握手,在TCP会话中初始
的数据包只有Sequence(序列号)而没有ACK(确认号),如果受保护的网络主动发起对外部网络的TCP访问,外
部返回的数据将携带TCP ACK参数,这样的数据将被允许,而外部主动发起的对内部受保护网络的攻击则不会被允
许,因为只有序列号没有确认号。

下面还是使用本文上面的拓扑图图三来完成这一实验演示,首先配置各个路由的IP以及静态路由,让全网都可以互
通,这一步这里就不重复了,实验的目的是在R1和R3上面都配置VTY,只允许R3对R1的telnet访问,不允
许R1对R3的telnet访问,配置如下:

R1、R3配置VTY:

1 /*R1上面配置VTY*/
2 R1(config)#enable secret ccna
3 R1(config)#line vty 0 4
4 R1(config-line)#pass ccna
5 R1(config-line)#login
6 R1(config-line)#end
7 R1#
8
9 /*R3上面配置VTY*/
10 R3(config)#enable secret ccna
11 R3(config)#line vty 0 4
12 R3(config-line)#pass ccna
13 R3(config-line)#login
14 R3(config-line)#end
15 R3#

R2上面配置ACL:

1 /*
2 * 末尾添加established参数,
3 * 还有一点要注意,因为是允许R3访问R1的telnet,
4 * 所以源和目的地址以及端口别搞错了,
5 * 这个访问列表是当R3的telnet发到R1,R1回复的TCP中携带ACK号才匹配的,
6 * 所以源应该是R1,源端口应该是R1的telnet端口23,
7 * 目的端口是R3上的一个随机端口,没有写出来就是匹配所有端口。
8 */
9 R2(config)#access-list 100 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3
established
10 R2(config)#int s 0/1 /*在接口上调用,注意方向是Out*/
11 R2(config-if)#ip access-group 100 out
12 R2(config-if)#end
13 R2#

下面测试R1 telnet R3和R3 telnet R1:

1 R1#telnet 23.1.1.3
2 Trying 23.1.1.3 ...
3 % Destination unreachable; gateway or host down
4 /*
5 * 发现连接不上,根据前面的分析可以知道,
6 * 因为R1始发的TCP连接只有序列号,在经过R2的s0/1接口准备往外发送的时候,
7 * 被ACL拦截了下来。
8 */
9 R1#
10
11 /*可以看到拦截记录*/
12 R2#show access-lists
13 Extended IP access list 100
14 10 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 established (25
matches)
15 R2#
16
17 /*R3 telnet R1没有任何问题*/
18 R3#telnet 12.1.1.1
19 Trying 12.1.1.1 ... Open
20
21 User Access Verification
22
23 Password:
24 R1>en
25 Password:
26 R1#exit
27
28 [Connection to 12.1.1.1 closed by foreign host]
29 R3#

此时不论是R1 ping R3还是R3 ping R1结果都是Ping不通的,因为ACL 100中没有匹配ICMP的条目,最后默认的操


作是拒绝所有没有条目匹配的数据,可以使用下面的命令添加一条条目允许R3 ping R1,R1不能Ping R3:

1 /*进入ACL 100的编辑模式*/
2 R2(config)#ip access-list extended 100
3
4 /*添加一条命令允许R1对R3的ICMP的应答包*/
5 R2(config-ext-nacl)#permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
6 R2(config-ext-nacl)#end
7
8 /*查看一下*/
9 R2#show access-lists
10 Extended IP access list 100
11 10 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 established (25
matches)
12 20 permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
13 R2#
14
15 /*测试ping*/
16 R3#ping 12.1.1.1
17
18 Type escape sequence to abort.
19 Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
20 !!!!! /*R3 ping R1成功了*/
21 R3#
22
23 R1#ping 23.1.1.3
24
25 Type escape sequence to abort.
26 Sending 5, 100-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:
27 U.U.U /*R1 ping不通R3*/
28 Success rate is 0 percent (0/5)
29 R1#

在实际应用中很少使用这一参数,因为established只能用于基于TCP的应用,对于UDP、ICMP等协议不起作用,稍
后的高级ACL配置中”如何配置反射ACL”将会介绍一种高级版本用来解决这一缺陷。

* 如何配置扩展命名ACL
配置扩展命名ACL和标准命名ACL使用的方法类似,下面就简单的使用扩展命名ACL来实现上面”established”中的配
置:

1 /*首先删除之前配置好的ACL 100*/
2 R2(config)#no access-list 100
3 R2(config)#int s 0/1
4 R2(config-if)#no ip access-group 100 out
5 R2(config-if)#exit
6
7 /*配置扩展命名ACL,名称为tcp-firewall*/
8 R2(config)#ip access-list extended tcp-firewall
9 R2(config-ext-nacl)#permit tcp host 12.1.1.1 eq 23 host 23.1.1.3 established
10 R2(config-ext-nacl)#permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
11 R2(config-ext-nacl)#end
12 R2#conf t
13
14 /*在接口上调用*/
15 R2(config)#int s 0/1
16 R2(config-if)#ip access-group tcp-firewall out
17 R2(config-if)#end
18
19 /*查看*/
20 R2#show access-lists
21 Extended IP access list tcp-firewall
22 10 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 established
23 20 permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
24 R2#

上面的扩展命名ACL配置后的效果和上面“扩展ACL中的established”中的扩展ACL的效果完全相同。

[*4*].配置ACL需要注意的事项

下面是应用访问控制列表需要注意的一些事情:

访问控制列表只对穿越流量起作用。
标准列表应该尽可能应用在靠近目标端。
扩展访问列表应该尽可能应用在靠近源端。
ACL条目的放置顺序很重要,如果两条语句放置的前后都不影响结果,一般将较多使用的那条放在前面,这样可
以减少路由器的查找时间。
IP访问控制列表中最后隐含的拒绝所有,没有匹配任何语句的流量将被拒绝。
同一个访问控制列表可以应用在同一个路由的不同接口上;对于每个协议的每个接口的每个方向,只能提供一个
访问控制列表。
没有携带条目号对ACL的编辑,比如添加操作,条目默认是被添加在ACL的最后面。

* 配置扩展ACL 允许RIP 协议

配置ACL时往往容易忽略路由协议,如果一个网络中运行的是RIPv1协议,在路由器上使用了ACL,ACL条目中没有
能够匹配RIP数据流的条目,默认的操作是拒绝,这样就会影响RIP协议的运作,可以在ACL的第一条添加下面的语
句,允许RIPv1协议的数据流通过:
1 Router(config)#access-list 100 permit udp any host 255.255.255.255 eq rip

如果一个网络中运行的是RIPv2协议,则可以使用下面这条语句允许RIPv2的流量:

1 Router(config)#access-list 100 permit udp any host 224.0.0.9 eq rip

* 配置扩展ACL 允许EIGRP协议

如果一个网络中运行的是EIGRP协议,可以使用下面这条语句允许EIGRP的流量:

1 Router(config)#access-list 100 permit eigrp any any

* 配置扩展ACL 允许OSPF协议

如果一个网络中运行的是OSPF协议,可以使用下面这条语句允许OSPF的流量:

1 Router(config)#access-list 100 permit ospf any any

[*5*].高级ACL配置

* 如何配置反射ACL

注意:Cisco IOS只支持使用扩展的命名访问控制列表来定义反射列表。

前面介绍的ACL参数中携带established能够起到单向访问控制的目的,但是这种使用方法只能针对TCP的流量,而反
射ACL能够提供真正意义上的单向访问控制,下图演示了反射ACL的工作方式:

上图的上半部分,当内部发起一个会话(基于IP、ICMP、TCP、UDP都可以),并将数据发给外部网络时,反
射ACL被触发并且生成一个新的临时条目,如果从外部返回的数据符合临时条目,则允许进入内部网络。

如果是一个始发于外部的会话,在边界路由上不会有临时条目的记录,边界路由上的反射ACL将阻止这样的流量进入
内部网络。

临时条目的生成依据的原则:协议(protocol)保持不变,Source-IP和Destination-IP严格对调,Source-
Port和Destination-Port严格对调;对于ICMP协议,会根据协议类型号进行匹配。
下面就来实际的配置一下反射ACL(使用上面的图五),让R3可以远程telnet R1,R1不能telnet R3:

步骤1,路由器各接口IP如图五所示,在R1和R3上面配置静态路由,让全网互通,这些配置就不贴出来了。

步骤2,在R1和R3上分别配置远程登录VTY:

1 R1(config)#enable secret ccna


2 R1(config)#line vty 0 4
3 R1(config-line)#password ccna
4 R1(config-line)#login
5 R1(config-line)#end
6 R1#
7
8 R3(config)#enable secret ccna
9 R3(config)#line vty 0 4
10 R3(config-line)#pass ccna
11 R3(config-line)#login
12 R3(config-line)#end
13 R3#

步骤3,在R2上创建反射ACL:

1 /*
2 * 创建扩展命名ACL,这个ACL将在R2的s0/0接口的出方向上调用,
3 * "permit ip any any reflect out-ip",这个条目的意思是,
4 * 允许所有IP流量,并对外出的IP流量进行反射,
5 * 反射的名称叫out-ip,其实这个out-ip就是一个临时ACL。
6 */
7 R2(config)#ip access-list extended out-acl
8 R2(config-ext-nacl)#permit ip any any reflect out-ip
9 R2(config-ext-nacl)#exit
10
11 /*
12 * 创建另外一个扩展命名ACL,这个ACL的作用是对进入的流量做评估,
13 * "evaluate out-ip"当有流量进入的时候,使用这个临时的ACL评估。
14 */
15 R2(config)#ip access-list extended in-acl
16 R2(config-ext-nacl)#evaluate out-ip
17 R2(config-ext-nacl)#exit
18
19 R2(config)#int s 0/0
20 /*
21 * 在R2的s0/0接口的外出方向调用out-acl,
22 * 这个ACL会根据每个从R3途径R2外出到R1的流量做反射,
23 * 生成一个临时的ACL out-ip。
24 */
25 R2(config-if)#ip access-group out-acl out
26 /*在R2的s0/0接口进入方向做评估*/
27 R2(config-if)#ip access-group in-acl in
28 R2(config-if)#end
29 R2#
30
31 /*注意,这里说的进入方向、外出方向是相对的。从R1访问R3,那么R2的s0/0就是进入方向;
从R3访问R1,R2的s0/0接口对于R3来说就是外出方向。*/

配置完成后,分别在R1和R3上telnet对方进行测试:
1 /*发现R1不能telnet R3了*/
2 R1#telnet 23.1.1.3
3 Trying 23.1.1.3 ...
4 % Destination unreachable; gateway or host down
5
6 /*首先查看一下R2的ACL*/
7 R2#show access-lists
8 Extended IP access list in-acl
9 10 evaluate out-ip
10 Extended IP access list out-acl
11 10 permit ip any any reflect out-ip
12 Reflexive IP access list out-ip
13 R2#
14
15 /*在R3上面telnet R1*/
16 R3#telnet 12.1.1.1
17 Trying 12.1.1.1 ... Open
18 User Access Verification
19 Password:
20 R1>en
21 Password:
22 R1# /*成功*/
23
24 /*再次查看R2的ACL*/
25 R2#show access-lists
26 Extended IP access list in-acl
27 10 evaluate out-ip
28 Extended IP access list out-acl
29 10 permit ip any any reflect out-ip (50 matches)
30
31 /*这个条目就是反射ACL自动生成的*/
32 Reflexive IP access list out-ip
33 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 eq 52116 (86 matches)
(time left 269)

临时的反射条目是有生存时间的,对于TCP会话,如果路由器检测到两组FIN标记,则会在5秒内删除这个临时条目
(比如R3登录R1后使用exit退出登录,R2就会在5秒钟以内删除这个临时条目);如果路由器检测到RST位的分组,
则会立即删除临时条目;对于UDP和其他协议(比如ICMP等),默认的删除时间是倒计时300秒。

可以使用下面的命令来更改反射ACL中临时ACL条目的默认生存时间:

1 /*将默认生存时间改成30秒*/
2 R2(config)#ip reflexive-list timeout 30

对于这个生存时间的测试,大家可以在R3上面Ping一下R1的12.1.1.1,然后在R2上查看ACL条目信息,就可以看到
临时ICMP条目的末尾有一个(time left 26),time left后面的数字是从刚才更改的30秒开始倒计时的。

* 如何配置动态ACL

结合下图来解释什么是动态ACL,当Internet上的用户需要访问内网的服务器时,外网用户需要先向边界路由发起一
个telnet会话,并且提供有效的用户名和密码,边界路由验证成功后,将会临时添加一条ACL语句到动态ACL中,然后
关闭Telnet会话。动态添加的条目对被验证用户进行授权,当条目超时后删除这条临时添加的动态条目。
动态ACL还有下面几点需要了解的地方:

1,临时条目的生存周期

动态ACL的生存周期有两个参数:空闲时间和绝对时间,当验证通过后,动态ACL临时条目生成后,空闲时间和绝对时
间倒计时同时启动,空闲计时器在每当有一个报文匹配动态访问列表时进行复位(即重新开始倒计时),当空闲计时
器到期时,该临时条目被删除。绝对计时器永不复位,当绝对定时器到期时,该动态条目被删除。

2,Telnet的设置

配置了动态ACL后,R2上所有的Telnet请求都会被路由器认为是要开启一个动态ACL条目,当用户验证后,telnet就
会被关闭,这样会带来一个问题,网络管理员将不能通过Telnet对路由进行管理,解决的方法是使用rotary命令开启其
他Telnet端口,如”rotary 1″命令开启的端口是3001,”rotary 2″开启3002以此类推。

下面就结合图六来讲解如何配置动态ACL:

这里我们希望实现,让R1(Internet上的用户)访问R3(内网)前,先需要在R2上进行验证,最后达到的效果是,验
证前R1不能Telnet R3,验证通过后R1能够telnet R3。

第一步:配置R1、R2、R3各接口IP,配置静态路由让全网能够互相通信,在R1和R3上面配置VTY,这一步很简单就不
贴出配置信息了。

第二步:在R2上配置动态ACL:

1 /*允许外网Telnet本路由进行验证*/
2 R2(config)#access-list 100 permit tcp any host 12.1.1.2 eq 23
3
4 /*
5 * 允许使用3001端口对本路由进行管理,
6 * 稍后会用"rotary 1"命令打开这一端口,
7 * 在实际应用中很少使用Telnet去对1路由进行远程管理,
8 * 如果使用其他网络协议,在这里需要打开对应端口。
9 */
10 R2(config)#access-list 100 permit tcp any host 12.1.1.2 eq 3001
11 ^
12 /*
13 * 创建动态ACL,名称为"ccna_dyanmic_acl",
14 * timeout 60 是绝对时间,60分钟。
15 *
16 * "permit tcp any host 23.1.1.3 eq 23"
17 * 后半部分中的any会被通过验证的主机的IP地址所代替。
18 */
19 R2(config)#access-list 100 dynamic ccna_dyanmic_acl timeout 60 permit tcp any
host 23.1.1.3 eq 23
20
21 /*在本地创建验证用的用户名ccna和密码ccna*/
22 R2(config)#user ccna pass ccna
23
24 /*用来验证的VTY线路0、1、2、3*/
25 R2(config)#line vty 0 3
26 R2(config-line)#login local /*使用本地用户名和密码验证*/
27 /*
28 * 这条命令中的host会被验证通过的主机的IP代替,
29 * 这个IP会被传递到上面的动态临时ACL中,去替换any关键字,
30 * timeout 3,是空闲时间,这里设置成3分钟。
31 */
32 R2(config-line)#autocommand access-enable host timeout 3
33
34 /*
35 * 另外创建一条VTY线路4,也使用本地用户名和密码验证,
36 * 这条线路用来远程管理路由器,使用的端口是3001。
37 */
38 R2(config-line)#line vty 4
39 R2(config-line)#login local
40 R2(config-line)#rotary 1
41
42 /*在路由的端口上调用这个ACL*/
43 R2(config-line)#int s 0/0
44 R2(config-if)#ip access-group 100 in
45 R2(config-if)#end
46 R2#

配置完成后进行下面的测试来验证动态ACL配置的正确性:

1 /*在没有登录R2验证前,telnet不了R3*/
2 R1#telnet 23.1.1.3
3 Trying 23.1.1.3 ...
4 % Destination unreachable; gateway or host down
5
6 /*登录R2进行验证*/
7 R1#telnet 12.1.1.2
8 Trying 12.1.1.2 ... Open
9 User Access Verification
10 Username: ccna /*用户名和密码都是ccna*/
11 Password:
12 [Connection to 12.1.1.2 closed by foreign host]
13 R1# /*验证成功,然后R2主动断开连接*/
14
15 /*在R2上查看ACL条目*/
16 R2#show access-lists
17 Extended IP access list 100
18 10 permit tcp any host 12.1.1.2 eq telnet (66 matches)
19 20 permit tcp any host 12.1.1.2 eq 3001
20 30 Dynamic ccna_dyanmic_acl permit tcp any host 23.1.1.3 eq telnet
21 /*在动态临时条目下面多出一条,any关键字被验证通过的R1的s0/0接口IP替代。*/
22 permit tcp host 12.1.1.1 host 23.1.1.3 eq telnet
23
24 /*这时在R1再次telnet R3*/
25 R1#telnet 23.1.1.3
26 Trying 23.1.1.3 ... Open
27 User Access Verification
28 Password: /*连接上了,没有任何问题*/
29 R3>en
30 Password:
31 R3#exit
32 [Connection to 23.1.1.3 closed by foreign host]
33 R1#
34
35 /*再次查看R2的ACL*/
36
37 R2#show access-lists
38 Extended IP access list 100
39 10 permit tcp any host 12.1.1.2 eq telnet (66 matches)
40 20 permit tcp any host 12.1.1.2 eq 3001
41 30 Dynamic ccna_dyanmic_acl permit tcp any host 23.1.1.3 eq telnet
42 /*
43 * 如果没有任何符合这个动态临时条目的流量,
44 * (time left 107)这个条目将在107秒后被删除,
45 * 这个显示是空闲时间倒计时。
46 */
47 permit tcp host 12.1.1.1 host 23.1.1.3 eq telnet (39 matches) (time left
107)
48
49 /*最后测试3001端口对R2的远程管理*/
50 R1#telnet 12.1.1.2 3001
51 Trying 12.1.1.2, 3001 ... Open
52 User Access Verification
53 Username: ccna
54 Password:
55 R2> /*登录R2成功,没有和验证的时候一样断开连接。*/

* 如何配置基于时间的ACL

使用基于时间的ACL配置下面的拓扑,让R1只有在每周周一到周五上午7点到8点,下午1点到2点可以Telnet R2:

R1配置:
1 R1(config)#int s 0/0
2 R1(config-if)#ip add 12.1.1.1 255.255.255.0
3 R1(config-if)#no shut

R2配置:

1 R2(config)#int s 0/1
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#exit
5
6 /*配置时区,我们是在东八区。*/
7 R2(config)#clock timezone GMT +8
8 R2(config)#end
9 /*设置成当前时间*/
10 R2#clock set 22:33:00 25 november 2012
11
12 R2#conf t
13 /*创建时间范围,working是自定义的名称*/
14 R2(config)#time-range working
15 R2(config-time-range)#? /*查看帮助*/
16 Time range configuration commands:
17 absolute absolute time and date
18 default Set a command to its defaults
19 exit Exit from time-range configuration mode
20 no Negate a command or set its defaults
21 periodic periodic time and date
22
23 /*使用周期性的时间范围,关键字weekdays代表周一到周五*/
24 R2(config-time-range)#periodic weekdays 7:00 to 8:00
25 R2(config-time-range)#periodic weekdays 13:00 to 14:00
26 R2(config-time-range)#exit
27
28 /*创建基于时间的ACL,time-range后面跟上面创建的时间范围名称*/
29 R2(config)#$access-list 100 permit tcp host 12.1.1.1 host 12.1.1.2 eq 23 time-
range working
30
31 /*在接口上调用它*/
32 R2(config)#int s 0/1
33 R2(config-if)#ip access-group 100 in
34 R2(config-if)#end
35
36 /*查看,因为现在时间不符合,这个条目没有生效(inactive)*/
37 R2#show access-lists
38 Extended IP access list 100
39 10 permit tcp host 12.1.1.1 host 12.1.1.2 eq telnet time-range working
(inactive)
40 R2#

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十七]Cisco设备文件管理与密码恢复
发表于 2012 年 11 月 27 日 由 晴刃

这篇文章前半部分介绍路由IOS文件、启动配置文件(Startup-config)的备份、还原、维护;后半部分介绍思科路由
器以及交换机特权密码丢失或遗忘后如何恢复。
___________________________________________

文章目录

[*1*].Cisco IOS管理
如何备份IOS文件
如何升级IOS文件
如何从备份恢复IOS文件
[*2*].Cisco配置文件管理
如何备份配置文件
如何恢复配置文件
[*3*].Cisco设备密码恢复
如何恢复Cisco路由器特权密码
如何恢复Cisco交换机特权密码

___________________________________________

[*1*].Cisco IOS管理

* 如何备份IOS文件

出于安全考虑我们可以对思科路由器的IOS进行备份,以便在不小心删除IOS文件或其他意外情况时,能够很快的恢
复,如下图所示:

图中,笔记本用控制线连接到了路由器的console接口,路由器的以太网接口fa0/1连接了一台服务器,服务器上开启
了TFTP服务,IP如图所示,下面演示通过笔记本控制路由器使用TFTP将路由器的IOS文件备份到服务器上:

1 /*连接上R1的console后首先查看一下Flash中都有哪些文件*/
2 R1#show flash:
3
4 System flash directory:
5 File Length Name/status
6 /*下面这个.bin后缀的文件就是我们要备份的IOS*/
7 3 50938004 c2800nm-advipservicesk9-mz.124-15.T1.bin
8 2 28282 sigdef-category.xml
9 1 227537 sigdef-default.xml
10 [51193823 bytes used, 12822561 available, 64016384 total]
11 63488K bytes of processor board System flash (Read/Write)
12
13 /*使用copy命令备份*/
14 R1#copy flash tftp
15
16 /*输入Flash中你要备份的文件名*/
17 Source filename []? c2800nm-advipservicesk9-mz.124-15.T1.bin
18
19 /*输入TFTP服务器的IP地址*/
20 Address or name of remote host []? 192.168.1.100
21
22 /*这一步可以自己输入一个备份名,回车就直接用IOS原名*/
23 Destination filename [c2800nm-advipservicesk9-mz.124-15.T1.bin]?
24
25 Writing c2800nm-advipservicesk9-mz.124-15.T1.bin...
26 !!!!!!!!!!!!!!!!!!!! /*备份开始,省略很多感叹号*/
27 [OK - 50938004 bytes]
28 /*备份成功*/
29 50938004 bytes copied in 30.561 secs (1666000 bytes/sec)
30 R1#

* 如何升级IOS文件

当路由器的IOS有了新的版本,可以通过下面的命令来升级,升级前可以使用show flash来查看一下flash空间大小,
看看是否可容纳新的IOS文件。

仍然使用图一作为实验拓扑:

1 /*从TFTP服务器上拷贝文件到Flash*/
2 R1#copy tftp flash
3
4 /*输入TFTP服务器的IP*/
5 Address or name of remote host []? 192.168.1.100
6
7 /*输入TFTP上的新IOS文件名*/
8 Source filename []? c2800nm-advipservicesk9-mz.124-15.T1.bin
9
10 /*输入存放到路由器Flash中使用的名称,默认回车即可*/
11 Destination filename [c2800nm-advipservicesk9-mz.124-15.T1.bin]?
12
13 /*
14 * 路由提示,是否在拷贝新的IOS前删除旧的IOS,
15 * 如果按回车则会删除旧的IOS。
16 */
17 Erase flash: before copying? [confirm]
18 Erasing the flash filesystem will remove all files! Continue? [confirm]
19 Erasing device... eee ...erased /*删除中*/
20 Erase of flash: complete
21
22 /*删除完成后开始拷贝新IOS*/
23 Accessing tftp://192.168.1.100/c2800nm-advipservicesk9-mz.124-15.T1.bin...
24 Loading c2800nm-advipservicesk9-mz.124-15.T1.bin from 192.168.1.100:
!!!!!!!!!!!!!!!!!!!!!
25 [OK - 50938004 bytes]
26
27 /*如果Flash中有多个IOS,可以使用下面的命令让这个新的IOS开机引导*/
28 R1(config)#boot system flash flash:c2800nm-advipservicesk9-mz.124-15.T1.bin

* 如何从备份恢复IOS文件

如果IOS文件被不小心删除,或者在升级IOS的过程中突然断电,则可能造成路由器IOS文件的丢失,路由不能正常启
动,在图一中,假设服务器上备份好了路由器的IOS文件,这里手动删除路由器的IOS来模拟IOS丢失的情况:

1 /*删除Flash中的IOS文件*/
2 R1#delete flash:c2800nm-advipservicesk9-mz.124-15.T1.bin
3 Delete filename [c2800nm-advipservicesk9-mz.124-15.T1.bin]?
4 Delete flash:/c2800nm-advipservicesk9-mz.124-15.T1.bin? [confirm]
5
6 /*删除后重启路由*/
7 R1#reload
8 Proceed with reload? [confirm] /*回车*/
9
10 /*重启后发现路由进入了这个模式*/
11 rommon 1 >

因为IOS文件被删除,路由器进入了ROM monitor模式,在这个模式下配置下面的信息:

1 /*设置路由器的临时IP,只要和TFTP服务器在同一网段就可以了*/
2 rommon 1 > IP_ADDRESS=192.168.1.222
3
4 /*设置子网掩码*/
5 rommon 2 > IP_SUBNET_MASK=255.255.255.0
6
7 /*设置网关,由此可见IOS文件的恢复支持跨网段进行*/
8 rommon 3 > DEFAULT_GATEWAY=192.168.1.1
9
10 /*设置TFTP服务器的IP地址*/
11 rommon 4 > TFTP_SERVER=192.168.1.100
12
13 /*设置TFTP服务器上的IOS的文件名*/
14 rommon 5 > TFTP_FILE=c2800nm-advipservicesk9-mz.124-15.T1.bin
15
16 /*下载指定的IOS*/
17 rommon 6 > tftpdnld
18 ...
19 /*输入y继续*/
20 Do you wish to continue? y/n [n]: y
21 ...
22 !!!!!!!!! /*文件传输中*/
23 ...
24
25 /*传输完成后使用reset重启路由*/
26 rommon 7 > reset

在这一步中我遇到了一个小问题,按照图一中将路由的fa0/1连接到服务器,使用”tftpdnld”命令发现连接不上TFTP服
务器,显示”….”超时,后来我将服务器连接到了路由器的fa0/0接口,再次使用”tftpdnld”命令,这一次成功的下载到
了IOS,不知道这是不是因为模拟器的问题。

[*2*].Cisco配置文件管理

* 如何备份配置文件

在本文的图一中,可以使用下面的命令将startup-config文件备份到TFTP服务器上:

1 /*将启动配置文件复制到tftp服务器*/
2 R1#copy startup-config tftp:
3
4 /*TFTP服务器的IP地址*/
5 Address or name of remote host []? 192.168.1.100
6
7 /*startup-config保存的文件名*/
8 Destination filename [R1-confg]?
9
10 Writing startup-config....!! /*传输中*/
11 [OK - 459 bytes]
12 /*传输成功*/
13 459 bytes copied in 3.073 secs (0 bytes/sec)
14 R1#

这种方法也能直接将running-config备份到TFTP服务器上,命令是”copy running-config tftp:”。

* 如何恢复配置文件

可以使用下面的命令将备份的配置文件恢复到路由器:

1 /*从TFTP恢复启动配置文件*/
2 R1#copy tftp startup-config
3
4 /*TFTP服务器IP*/
5 Address or name of remote host []? 192.168.1.100
6
7 /*以前备份的启动配置文件的名称,注意大小写要正确*/
8 Source filename []? R1-confg
9 Destination filename [startup-config]?
10
11 Accessing tftp://192.168.1.100/R1-confg...
12 Loading R1-confg from 192.168.1.100: !
13 [OK - 459 bytes]
14 /*恢复成功*/
15 459 bytes copied in 0.031 secs (14806 bytes/sec)
16 R1#

[*3*].Cisco设备密码恢复

* 如何恢复CISCO路由器特权密码

有时候我们可能配置了路由器的特权密码,但是后来忘记了,导致无法进入路由的特权模式:

1 R1>en
2 Password:
3 Password:
4 Password: /*无法进入特权模式*/
5 % Bad secrets
6
7 /*使用下面的命令查看一下路由信息*/
8 R1>show version
9 ....
10 /*
11 * 在最后面会出现一条这样的信息,
12 * 其中的0x2102表示路由启动时加载启动配置文件startup-config,
13 * 0x2142表示启动时不加载启动配置文件,
14 * 一般路由器都是启动加载配置文件。
15 */
16 Configuration register is 0x2102

密码恢复实际操作:

首先使用控制线连接到路由的console端口,然后使用电源开关关闭路由器的电源,再次打开路由电源,在路由启动
的60秒内,按计算机键盘上的”Ctrl+Break”键,进入ROM monitor模式:

1 Self decompressing the image :


2 ################## /*路由正在启动,这时候可以按键盘的"Ctrl+Break"*/
3 monitor: command "boot" aborted due to user interrupt
4
5 /*
6 * 进入了ROMMON模式,
7 * 使用下面的命令更改启动时不加载startup-config文件
8 */
9 rommon 1 > confreg 0x2142
10
11 /*更改完成后重启*/
12 rommon 1 > reset
13
14 /*输入no回车*/
15 --- System Configuration Dialog ---
16
17 Continue with configuration dialog? [yes/no]: no
18
19 /*路由没有加载startup-config文件,直接可以进入特权模式*/
20 Router>en
21
22 /*这时候再将startup-config复制到running-config*/
23 Router#copy startup-config running-config
24 Destination filename [running-config]? /*回车*/
25
26 /*复制成功后发现路由器名称变成以前配置的名字*/
27 R1#
28 R1#conf t
29
30 /*更改特权密码为ccna*/
31 R1(config)#enable secret ccna
32
33 /*将配置寄存器的值重新改成开机加载startup-config*/
34 R1(config)#config-register 0x2102
35 R1(config)#exit
36
37 /*保存修改到startup-config*/
38 R1#copy running-config startup-config
39 Destination filename [startup-config]?
40 Building configuration...
41 [OK]
42 R1#

恢复路由器特权密码成功。

* 如何恢复CISCO交换机密码

首先使用控制线连接到交换机的console端口,断电重启交换机,在启动过程中按住交换机面板上的MODE按键大
约10秒左右,然后会出现下面这样的命令行模式:

1 /*上面省略一些信息*/
2 ....
3 flash_init
4 load_helper
5 boot
6
7 /*首先输入下面两条命令*/
8 switch: flash_init
9 switch: load_helper
10
11 /*
12 * 交换机的启动配置文件是保存在Flash中的一个叫做config.text文件,
13 * 可以使用下面的命令查看。
14 */
15 switch: dir flash:
16
17 Directory of flash:/
18 ....
19 7 -rwx 1900 <date> config.text
20
21 /*
22 * 将这个文件重命名,当交换机启动的时候,
23 * 没有在闪存中找到config.text则无法加载特权密码等配置信息。
24 */
25 switch: rename flash:config.text flash:config.bk
26
27 /*重启交换机*/
28 switch: boot
29
30 /*输入no回车*/
31 --- System Configuration Dialog ---
32
33 Continue with configuration dialog? [yes/no]: no
34
35 /*直接可以进入特权模式*/
36 Switch>en
37
38 /*将闪存中的配置文件名称更改回来*/
39 Switch#rename flash:config.bk flash:config.text
40 Destination filename [config.text]? /*回车*/
41
42 /*加载config.text中的配置信息*/
43 Switch#copy startup-config running-config
44 Destination filename [running-config]? /*回车*/
45
46 /*更改特权密码为ccna*/
47 SW1#conf t
48 SW1(config)#enable secret ccna
49 SW1(config)#exit
50
51 /*保存修改到startup-config*/
52 SW1#copy running-config startup-config
53 Destination filename [startup-config]?
54 Building configuration...
55 [OK]

交换机的特权密码恢复成功。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十八]思科路由安全浅析
发表于 2012 年 11 月 29 日 由 晴刃

这篇文章简单的介绍一下Cisco路由密码的安全、远程访问的设置、如何用SSH代替Telnet进行安全的登录、日志的记
录、不常用服务和端口的禁用等。在文章的最后会介绍一款老牌的图形化界面思科路由管理工具Cisco
SDM(Security Device Manager),以及如何在路由上设置来允许SDM的管理。
___________________________________________

文章目录

[*1*].思科路由密码安全浅析
[*2*].如何限制远程访问
[*3*].如何使用SSH代替Telnet
[*4*].如何记录日志
[*5*].如何禁用思科路由不必要的服务和端口
[*6*].如何配置路由器允许SDM管理

___________________________________________

[*1*].思科路由密码安全浅析

对路由器最直接有效的攻击手段就是获取管理密码,保护路由器密码安全的方法包括:

设置一个复杂的密码:一个强密码应该具有的特点是”包含数字、包含大写字母、包含小写字母、包含特殊符号”;
不要在密码中使用生日格式如:19901203;不要在密码中使用英文字典中最常用的单词如:hello等;不要在密码
中包含电话号码、区号、手机号等。因为这些东西能很容易的放入坏人暴力猜解的字典中进行组合,最后就能获
得你的密码。
对配置文件中的密码实行加密:在全局配置模式下输入这条命令”service password-encryption”能够对所有密码进
行加密,虽然这种加密可以破解,但至少增加了一道防线。
特权密码的设置:创建特权密码应该使用”enable secret”而不是”enable password”。
设置密码最小长度:在全局配置模式下输入”security passwords min-length 12″,可以将密码的最小长度设置
成12位。
密码存放:不要将密码随便的记录在一台不安全的计算机的文本文件里;如果你将密码写在纸上,在密码更改以
前不要随便将这张纸丢进垃圾桶,因为坏人可以从垃圾桶翻出很多敏感信息,其中就包括你的密码,或者你习惯
的编码方式。

[*2*].如何限制远程访问

可以使用ACL来设置仅允许管理员的IP登录这台设备的VTY终端:

1 /*
2 * 使用ACL允许192.168.1.200访问,这里演示使用了一个简单ACL,
3 * 如果使用其他网管软件管理路由,可以使用复杂ACL允许管理IP和软件相应的端口。
4 */
5 R1(config)#access-list 1 permit 192.168.1.200
6 R1(config)#line vty 0 4
7 R1(config-line)#password ccna
8 /*因为前面设置了密码最小长度是12个字符,所以这里报错了。*/
9 % Password too short - must be at least 12 characters. Password configuration
failed
10 R1(config-line)#password 123456789098 /*这种密码是最容易被破解的*/
11 R1(config-line)#access-class 1 in /*将ACL 1应用于VTY*/
12 R1(config-line)#login
13 R1(config-line)#end
14 R1#

这样设置后,VTY 0-4号线路就只有IP是192.168.1.200这个用户可以连上了。

[*3*].如何使用SSH代替Telnet

Telnet使用明文的方式传输密码,在Internet上使用明文传输密码是非常不安全的,可以通过SSH(Secure Shell)远
程登录和管理路由,SSH传输的时候使用RSA加密,就算数据包被捕获,也是RSA加密后的数据包。

下面在GNS3中来做一下这个实验:

上图中,使用C1(其实这个就是GNS左侧的Cloud,我自己改了图片,看起来像计算机而已)桥接到本地网卡,本地
网卡IP地址是192.168.1.202/24,在R1上添加一个快速以太网模块连接到C1。

(做这个实验的时候,如果计算机上面开启了一些防火墙建议关闭,否则很可能导致连接不上。)

首先,配置R1:

1 /*配置路由快速以太网接口IP*/
2 Router(config)#int fa 0/0
3 Router(config-if)#ip add 192.168.1.254 255.255.255.0
4 Router(config-if)#no shut
5 Router(config-if)#exit
6
7 /*一定要改变路由默认的名称*/
8 Router(config)#host R1
9
10 /*必须配置一个域名*/
11 R1(config)#ip domain-name ccna.com
12
13 /*生成rsa非对称密钥*/
14 R1(config)#crypto key generate rsa
15 The name for the keys will be: R1.ccna.com
16 Choose the size of the key modulus in the range of 360 to 2048 for your
17 General Purpose Keys. Choosing a key modulus greater than 512 may take
18 a few minutes.
19
20 /*
21 * 这里是密钥长度,直接回车则使用默认长度,
22 * 上面的提示说长度可以是360到2048。
23 */
24 How many bits in the modulus [512]:
25 % Generating 512 bit RSA keys, keys will be non-exportable...[OK]
26
27 R1(config)# /*路由提示现在支持SSH了*/
28 *Mar 1 00:01:23.711: %SSH-5-ENABLED: SSH 1.99 has been enabled
29
30 /*
31 * 先在本地创建一个SSH用来登录的用户,
32 * 这里为了演示简单的将用户名和密码都设置成ccna。
33 */
34 R1(config)#username ccna secret ccna
35
36 /*启用VTY线路0-5*/
37 R1(config)#line vty 0 5
38
39 /*仅允许SSH连接*/
40 R1(config-line)#transport input ssh
41
42 /*使用本地用户进行登录验证*/
43 R1(config-line)#login local
44 R1(config-line)#exit
45
46 /*查看SSH支持的选项*/
47 R1(config)#ip ssh ?
48 authentication-retries Specify number of authentication retries
49 break-string break-string
50 logging Configure logging for SSH
51 maxstartups Maximum concurrent sessions allowed
52 port Starting (or only) Port number to listen on
53 rsa Configure RSA keypair name for SSH
54 source-interface Specify interface for source address in SSH
55 connections
56 time-out Specify SSH time-out interval
57 version Specify protocol version to be supported
58
59 /*设置SSH登录超时是20秒*/
60 R1(config)#ip ssh time-out 20
61
62 /*设置默认三次密码输入错误则断开连接*/
63 R1(config)#ip ssh authentication-retries 3
64 R1(config)#end
65 R1#

配置完成后使用SecureCRT来验证(没有SecureCRT的朋友可以到这里去下载,这个版本是6.6.1的:SecureCRT百度
网盘下载。另外这里还有一套收集自网络的SecureCRT使用演示:SecureCRT使用演示):

打开SecureCRT后可以选择菜单栏中的”文件>快速连接”,或者使用快捷键”Alt+Q”打开快速连接界面:
大家可以使用SecureCRT用Telnet的方式来连接一下192.168.1.254,会发现连接不上。
可以使用下面的命令让R1的VTY0-5同时支持SSH和Telnet登录:

1 R1(config)#line vty 0 5
2 R1(config-line)#transport input ssh telnet

[*4*].如何记录日志

通常使用Console端口对路由进行配置时,可以看到来自路由的监控提示消息,比如开启或关闭一个端口就会出现相
应的提示,但是通过VTY远程登录的时候却看不到这些提示,也看不到Debug命令的输出,这是因为虚拟终端默认情
况下是关闭监控的,可以使用下面的命令来打开监控:

1 /*开启终端监控功能*/
2 Router#terminal monitor
3
4 /*关闭终端监控功能*/
5 Router#terminal no monitor

下面是一些和日志记录有关的命令:

1 /*关闭日志记录*/
2 R1(config)#no logging on
3
4 /*开启日志记录*/
5 R1(config)#logging on
6
7 /*设置日志记录缓存,后面的7是最高级别,记录所有信息*/
8 R1(config)#logging buffered 7
9
10 /*给记录的debug消息添加时间戳,单位精确到毫秒*/
11 R1(config)#service timestamps debug datetime msec
12
13 /*给记录的log消息添加时间戳,单位精确到毫秒*/
14 R1(config)#service timestamps log datetime msec
15 R1(config)#end
16
17 /*显示本地缓存中的日志信息*/
18 R1#show logging

路由缓存的空间是有限的,一般的做法是配置一台日志服务器,将路由和交换机的日志信息发送到服务器上,这样可
以避免路由重启或者其他原因导致日志信息的丢失。

[*5*].如何禁用思科路由不必要的服务和端口

可以使用下面这条命令来手动或者自动的配置路由,禁用一些不必要的服务和端口:

1 /*不带参数,进入交互配置模式,根据提示设置即可*/
2 Router#auto secure
3
4 /*还有一种简便模式,非交互式,使用的是思科推荐的安全配置*/
5 R1#auto secure no-interact

[*6*].如何配置路由器允许SDM管理

SDM是基于Cisco IOS的路由器开发的一种可视化Web管理工具,这款工具集成了大量命令,通过点击鼠标填入参
数,就能够简单高效的对路由进行各种配置。

如果没有SDM的朋友可以到这个地址去下载(SDM-V241-zh中文版),在安装SDM前必须先安装JAVA的运行库,可以
去JAVA官网下载。

这一部分仅介绍如何配置路由器,使路由支持SDM的连接;如本文图一所示,一台3640路由器通过fa0/0接口桥接到
本地网卡(不知道如何使用GNS3桥接的朋友可以去这里:GNS3使用演示,下载其中的第四课看一下):

R1配置:

1 R1(config)#int fa 0/0
2 R1(config-if)#ip add 192.168.1.254 255.255.255.0
3 R1(config-if)#no shut
4 R1(config-if)#exit
5
6 /*
7 * SDM是使用WEB方式来配置和管理路由的,所以路由上必须开启HTTP,
8 * 如果觉得HTTP不安全,可以使用下面这条命令开启HTTPS:
9 * R1(config)#ip http secure-server
10 */
11 R1(config)#ip http server
12
13 /*HTTP使用本地验证*/
14 R1(config)#ip http authentication local
15
16 /*
17 * 配置本地用来验证的用户名和密码,
18 * privilege 15表示需要权限15的用户才能配置SDM。
19 */
20 R1(config)#username ccna privilege 15 secret ccna
21 R1(config)#end
22 R1#

配置完成后确保计算机上面没有第三方防火墙阻止连接,首先需要设置一下IE,打开IE浏览器>工具>Internet选项,勾
选允许活动内容:
然后打开SDM输入路由fa0/0口的IP地址,确定:

填入我们在R1上设置的用户名和密码ccna:
之后可能会提示安全警告,全部允许,然后会再次让输入用户名和密码,最后就能看到SDM的配置界面了:

SDM都是图形化的,大家可以尝试着去使用里面的功能,个人感觉还是蛮强大的一款工具。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记二十九]利用SDM配置站点到站点的VPN
发表于 2012 年 12 月 1 日 由 晴刃

这篇文前半部分会简单的介绍一些和VPN的配置相关的术语、封装和加密的方式;后面会使用Cisco SDM结
合GNS3来实际的配置一下站点到站点(Site-To-Site)的VPN。
___________________________________________

文章目录

[*1*].VPN概述
VPN的优点和类型
VPN的安全浅析
IPSec安全协议浅析
[*2*].VPN配置实例
如何配置站点到站点的VPN

___________________________________________

[*1*].VPN概述

VPN(virtual private network,虚拟专用网)被定义为通过一个公用网络建立一个临时的、安全的连接,它是一条穿过混


乱的公用网络的安全的稳定的隧道。它可以帮助远程用户、公司的分支机构同公司内部网络建立可信的安全连接。

* VPN的优点和类型

VPN的优点是低费用、可扩展性和安全性。VPN的主要类型分为:

1,站点到站点的VPN(Site-To-Site VPN)

在站点到站点VPN中,主机通过VPN网关发送和接收TCP/IP流量,VPN网关可以是一台路由器、防火墙等设备,它负
责封装和加密数据,然后通过VPN隧道发送。在接收端VPN网关去除头部信息,解密内容后再将数据发送给目标主
机。

站点到站点的VPN面向的对象是端对端网络,比如公司总部与分支机构的连接。这种连接和专线相比有很大的价格优
势。

2,远程访问VPN

远程访问VPN多数是给移动办公用户(SOHO用户)提供服务的,只要你能够连接Internet网,就可以使用一个VPN客
户端提供一个用户名和密码拨入公司内部网络,数据封装和加密过程和站点到站点VPN一样。用户只要提供有效的用
户名和密码,拨入公司内部网络之后就好像和公司内部处于同一个局域网中一样,可以给公司内部局域网其他用户共
享文件,或者使用公司内部打印机等。
* VPN的安全浅析

VPN提供的保护有:

1,数据机密性

数据的发送方使用数学方法对数据进行加密,使得数据在传输过程中不可读;接收方再对收到的数据进行解密。

对数据的加密有两种方式:

对称式加密:发送和接收方使用相同的密钥加密和解密数据,对称式加密算法有DES、3DES、AES,从加密强度
讲AES优于3DES,3DES优于DES。对称式加密因为加密和解密都使用相同密钥,所以要保证密钥的安全性。
一般用于对数据内容的加密。
非对称式加密:发送方和接收方不使用相同的密钥加密解密数据,非对称式加密算法有RSA,因为RSA密钥很长
(最短512位),所以RSA对数据内容的加密效率很低,一般使用RSA进行数字签名或对密钥本身进行加密。

不论是DES、3DES、AES还是RSA,都需要使用DH算法为对等体生成密钥,DH算法比较复杂,这里不详细介绍,
有兴趣的朋友可以去查看相关文档。

2,数据完整性

数据完整性保证数据在传输中不被修改,发送方将源数据和共享密钥通过Hash算法生成一个Hash值,其运算过程是
不可逆的,将这个值同源数据一起发送给接受者,接受者收到源数据后,用相同的方法算出一个Hash值,将这个值与
发送方发送过来的Hash值进行比较,如果信息在传输过程中被修改,两个Hash值将无法匹配。

目前常用的Hash算法有:HMAC-MD5和HMAC-SHA-1,后者更安全,但占用资源较多。

3,起源认证

起源认证可以确保信息来源真实可信,起源认证有时也叫对等体认证,主要有下面两种方式:

通过域共享密钥(PSK,Pre-Shared Key),在IPSec对等体上预先设置好相同的密钥,发送方将PSK和身份信息进
行散列计算,然后将计算结果发送给对方,接收方用相同的密钥进行计算,如果结果相同则发送方验证成功。
通过RSA签名,这种方法和RSA加密过程相反,发送方使用自己的私钥对身份信息加密,形成签名,接收方使
用发送方的公钥解密,将解密后的身份信息与发送过来的明文身份信息比较,相同则验证通过。

* IPSEC 安全协议浅析

在VPN通信中,双方如果要用IPSec建立一条安全的传输通路,需要事先协商好将采用的安全策略,包括使用的算
法、密钥、密钥的生存期等。双方协商好之后就能通过IPSec建立一条安全的连接了。IPSec主要使用下面两种协议来
保证传输的安全:

ESP(Encapsulating Security Payload,封装安全负载)


AH(Authentication Header,验证头部)

为了避免混淆,这里对上面介绍的和VPN相关的术语做一下总结:

IPSec协议:用来保证IP传输的安全,包括IP头部和有效负荷保护,至于使用什么加密算法加密,使用什么Hash算法进
行完整性检查与IPSec是独立的。
加密算法:IPSec中ESP可以选择的加密算法有DES、3DES、AES。
认证:通过Hash算法确保数据没有被修改。使用的算法有MD5和SHA。
密钥交换算法:双方使用DH算法建立密钥信息。

[*2*].VPN配置实例

(本实例可以在GNS3中完成)

如下图所示:假设R1是总部边界路由,R1上的fa0/0接口连接了一台计算机192.168.1.2/24它是总部内部网
络192.168.1.0/24中的一台主机,R1上的fa0/1:172.16.1.1/24连接到了另外一台PC,这台PC是使用Cloud模拟的并且
桥接到了本地网卡,用来使SDM能够连接上R1进行配置。R2是Internet网上的一台路由器。R3是分支机构边界路
由,其中fa0/0接口连接了一台主机192.168.2.2/24,它是分支机构内部网络192.168.2.0/24中的一台主
机,R2的fa0/1:172.16.2.1/24同样连接到了一个Cloud,这个Cloud桥接到本地网卡上,这样就能通过更改真实计算机
的IP地址到172.16.1.0/24网段来使用SDM连接R1,配置完成后再将真实计算机的IP更改成172.16.2.0/24网段来使
用SDM连接R2。在R1和R2上分别使用NAT将内网IP转换成外网IP。
* 如何配置站点到站点的VPN

首先配置一下VPC1和VPC2,打开GNS3中的VPCS:

1 /*VPC1配置IP和网关*/
2 VPCS[1]> ip 192.168.1.2 24 192.168.1.1
3 PC1 : 192.168.1.2 255.255.255.0 gateway 192.168.1.1
4
5 /*VPC2配置IP和网关*/
6 VPCS[1]> 2
7 VPCS[2]> ip 192.168.2.2 24 192.168.2.1
8 PC2 : 192.168.2.2 255.255.255.0 gateway 192.168.2.1
9
10 /*查看一下配置,没问题*/
11 VPCS[2]> show
12
13 NAME IP/CIDR GATEWAY MAC LPORT RPORT
14 VPCS1 192.168.1.2/24 192.168.1.1 00:50:79:66:68:00 20000 30000
15 fe80::250:79ff:fe66:6800/64
16 VPCS2 192.168.2.2/24 192.168.2.1 00:50:79:66:68:01 20001 30001
17 fe80::250:79ff:fe66:6801/64
18 ....
19 VPCS[2]>

配置R1:
1 /*R1上用来连接真实计算机的端口*/
2 R1(config)#int fa 1/0
3 R1(config-if)#ip add 172.16.1.1 255.255.255.0
4 R1(config-if)#no shut
5 R1(config-if)#ip nat inside
6
7 /*这是R1连接内网的端口,也是内网的默认网关*/
8 R1(config-if)#int fa 0/0
9 R1(config-if)#ip add 192.168.1.1 255.255.255.0
10 R1(config-if)#no shut
11
12 /*将这个端口设置成对内端口,这是配置NAT时的设置*/
13 R1(config-if)#ip nat inside
14
15 /*R1上和Internet相连的端口*/
16 R1(config)#int s 2/0
17 R1(config-if)#ip add 12.1.1.1 255.255.255.0
18 R1(config-if)#no shut
19
20 /*将这个端口设置成对外端口*/
21 R1(config-if)#ip nat outside
22
23 R1(config-if)#exit
24
25 /*设置一条默认路由指向R2*/
26 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
27
28 /*
29 * 开启HTTP服务,允许SDM连接,
30 * 这里为了演示方便没有设置本地用户名和密码,
31 * 大家可以按照我上一篇文章中讲到的,
32 * 让SDM连接路由时需要提供用户名和密码。
33 */
34 R1(config)#ip http server
35
36 /*
37 * 配置ACL 100,这个扩展访问列表用于NAT地址转换,
38 * ACL中的第一个条目阻止了R1的内网去往R2的内网的数据,
39 * 因为R1内网去R2内网的数据不需要被转换成公网IP,他们走的是VPN隧道。
40 * 第二个条目,除隧道外的所有其他流量允许被NAT。
41 */
42 R1(config)#access-list 100 deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
43 R1(config)#access-list 100 permit ip any any
44
45 /*除非VPN流量外,其他所有"对内端口"都共享s2/0的外网IP*/
46 R1(config)#ip nat inside source list 100 interface s 2/0 overload
47 R1(config)#end
48 R1#

配置R2:

1 R2(config)#int s 2/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 2/2
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#end
配置R3:

1 /*R3上的内网*/
2 R3(config)#int fa 0/0
3 R3(config-if)#ip add 192.168.2.1 255.255.255.0
4 R3(config-if)#no shut
5 R3(config-if)#ip nat inside
6
7 /*SDM用于连接的接口*/
8 R3(config-if)#int fa 1/0
9 R3(config-if)#ip nat inside
10 R3(config-if)#ip add 172.16.2.1 255.255.255.0
11 R3(config-if)#no shut
12
13 /*开启HTTP服务*/
14 R3(config)#ip http server
15
16 /*连接Internet的接口*/
17 R3(config-if)#int s 2/2
18 R3(config-if)#ip add 23.1.1.3 255.255.255.0
19 R3(config-if)#no shut
20 R3(config-if)#ip nat outside
21 R3(config-if)#exit
22
23 /*默认路由指向R2*/
24 R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
25
26 /*ACL100用于NAT*/
27 R3(config)#access-list 100 deny ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
28 R3(config)#access-list 100 permit ip any any
29
30 /*除非VPN流量外,其他所有"对内端口"都共享s2/2的外网IP*/
31 R3(config)#ip nat inside source list 100 interface s 2/2 overload
32 R3(config)#end
33 R3#

配置完成后将本地计算机的IP地址设置成”172.16.1.2″,子网掩码”255.255.255.0″,网关”172.16.1.1″,在R2上开
启Debug ICMP,测试NAT转换是否成功:

1 /*
2 * 真实计算机更改成这个IP后,就相当于连接到了R1的Fa1/0接口上,
3 * 因为R1和R3都桥接到了真实计算机的本地网卡,
4 * 在真实计算机上Ping测试。
5 */
6
7 /*Ping网关,也就是R1的fa1/0接口IP,可以Ping通*/
8 C:\Users\Administrator>ping 172.16.1.1
9
10 正在 Ping 172.16.1.1 具有 32 字节的数据:
11 来自 172.16.1.1 的回复: 字节=32 时间=16ms TTL=255
12
13 /*在R2上开启ICMP调试*/
14 R2#debug ip icmp
15 ICMP packet debugging is on
16
17 /*在真实计算机上ping R2的s2/0接口IP*/
18 C:\Users\Administrator>ping 12.1.1.2
19
20 正在 Ping 12.1.1.2 具有 32 字节的数据:
21 来自 12.1.1.2 的回复: 字节=32 时间=46ms TTL=254
22
23 /*从R2上的提示来看,NAT转换成功了,Echo Reply的目的地址是R1的s2/0接口IP*/
24 *Mar 1 00:31:47.627: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.1
25 R2#

接着在VPC1上测试Ping R2:

1 VPCS[2]> 1 /*切换VPC只需要输入数字就可以了*/
2
3 /*首先Ping一下VPC1的网关,可以通*/
4 VPCS[1]> ping 192.168.1.1
5 192.168.1.1 icmp_seq=1 ttl=255 time=52.000 ms
6
7 /*首先Ping一下R1上面另外一个接口,可以通*/
8 VPCS[1]> ping 172.16.1.1
9 172.16.1.1 icmp_seq=1 ttl=255 time=50.000 ms
10
11 /*首先Ping一下R2上面的接口,可以通,并且被NAT*/
12 VPCS[1]> ping 12.1.1.2
13 12.1.1.2 icmp_seq=1 ttl=254 time=82.000 ms
14
15 /*
16 * Ping R2内网,不通,因为ACL阻止了流量,
17 * 并且我们现在还没有使用SDM配置VPN,使用SDM配置VPN后这里就能Ping通了,
18 * 数据不会被NAT,数据走的是VPN通道。
19 */
20 VPCS[1]> ping 192.168.2.1
21 192.168.2.1 icmp_seq=1 timeout
22
23 VPCS[1]> ping 192.168.2.2
24 192.168.2.2 icmp_seq=1 timeout
25
26 VPCS[1]>

在VPC2上的效果相同,这里就不演示了,下面使用SDM来配置R1的192.168.1.0/24网段到R2的192.168.2.0/24网段
的VPN。

打开Cisco SDM,使用SDM时候需要在Internet中允许活动内容(还不知道怎么配置SDM的可以去看一下这篇文章”如
何配置路由器允许SDM管理“,文章中还提供了SDM的下载地址),直接在SDM中输入172.16.1.1链接上R1:
在弹出来的另外一个窗口中选择”逐步操作向导”,然后点击下一步。
默认是没有选中的,一定要用鼠标点击一下默认的那个条目,会出现一个浅蓝色边框。
最后点击”结束”,会弹出一个警告点击”是”,之后等待SDM将配置语句写入R1,写入成功后点击确定。

接下来将本地计算机的IP地址更改成172.16.2.2,子网掩码255.255.255.0,默认网关172.16.2.1,在SDM中输
入172.16.2.1连接上R3,配置R3的步骤和上面一样,在图三中接口选择s2/2,远程对等项的IP设置成12.1.1.1,共享密
钥和R1上面配置的相同”ccna”,图四和图五中和R1配置相同的加密算法等,图六中左边填写R3的内
网192.168.2.0/24,右边是R1的内网192.168.1.0/24,结束,警告同样选择”是”。

下面来测试VPN是否成功,在上面还没有做VPN之前,VPC1是ping不通VPC2的:
1 /*首先在R3开启调试ICMP*/
2 R3#debug ip icmp
3 ICMP packet debugging is on
4
5 /*使用VPC1 ping R3的fa0/0接口,成功了*/
6 VPCS[1]> ping 192.168.2.1
7 192.168.2.1 icmp_seq=1 ttl=254 time=172.000 ms
8
9 /*
10 * R3上的ICMP调试输出,我们发现并没有转换成公网IP,
11 * 源和目的地址都直接使用的是内网IP。
12 */
13 *Mar 1 00:42:49.587: ICMP: echo reply sent, src 192.168.2.1, dst 192.168.1.2
14 R3#
15
16 /*Ping VPC2同样能Ping通*/
17 VPCS[1]> ping 192.168.2.2
18 192.168.2.2 icmp_seq=1 ttl=62 time=171.000 ms

到此站点到站点的VPN配置成功。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记三十]DHCP协议实例详解
发表于 2012 年 12 月 3 日 由 晴刃

这篇文章主要介绍DHCP(Dynamic Host Configuration Protocol,动态主机分配协议)的工作过程;文章后半部分会


实例演示如何在Cisco路由器上配置DHCP、如何配置DHCP中继服务。
___________________________________________

文章目录

[*1*].DHCP工作过程
[*2*].DHCP配置实例
思科路由器如何配置DHCP
思科路由器如何配置DHCP中继

___________________________________________

[*1*].DHCP工作过程

DHCP工作流程如下图所示:

DHCP客户端(PC1)被配置成自动获取IP,R1上面配置了DHCP服务,当PC1启动连接网络时,通过下面的步骤来
从DHCP服务端(R1)上获取IP:

1.PC1通过网卡向外广播DHCP Discover信息,该数据包的目的MAC是广播MAC地址(FFFFFFFFFFFF),
源MAC地址是PC1的网卡MAC地址;该数据包的目的IP是255.255.255.255,源IP是0.0.0.0;DHCP使用UDP协议,
该数据包的目的UDP端口是67(DHCP服务端使用的UDP端口),源UDP端口是68(客户端使用的UDP端口)。

2.R1收到PC1的DHCP Discover广播包,比如上图中R1的Fa0/0接口配置的IP地址是192.168.1.1/24,R1从Fa0/0接
口接收到PC1的DHCP Discover广播包后,它在本地的DHCP配置中寻找可以和自己Fa0/0匹配的地址
池(192.168.1.0/24这个子网的地址池),如果配置了这个地址池,R1查找这个地址池中还可以使用的IP地址;这里假
设192.168.1.100是可用的,R1在提供租用地址之前首先会发送一个ARP查询包,查询192.168.1.100在网络上有没有
被使用,如果收到应答,表明这个IP已经被使用,R1在地址池中换一个地址再发送ARP查询,直到找到没有ARP回复
的那个IP地址。

3.R1向PC1发送DHCP Offer信息,其中包括这个没被使用的IP地址,DHCP Offer包仍然是一个广播包,目的MAC是


广播MAC地址,源MAC是R1的Fa0/0的MAC地址,目的IP是255.255.255.255,源IP是192.168.1.1,目的端口
是UDP68,源端口是UDP67。

4.在上面几步中,如果PC1发送的DHCP Discover广播没有DHCP服务端回复,PC1将无法获得IP地址,PC1会每隔
一段时间发送一次DHCP Discover,在没有请求到IP地址的这段时间里,Windows主机会被临时分配一个属
于169.254.0.0/16的本地地址。

5.接着上面的第三步,PC1收到R1发回的DHCP Offer信息,PC1马上发送DHCP Request包,表示自己将使用R1所


提供的IP地址;该数据包还是一个广播包,目的MAC是广播MAC,源MAC是PC1的网卡MAC,目
的IP是255.255.255.255,源IP是0.0.0.0,传输层的目的UDP端口是67,源UDP端口是68。DHCP Request中包含了
要选择的DHCP服务器(R1的Fa0/0接口)的IP地址以及客户端(PC1)将要使用的IP地址。

6.R1收到PC1发来的DHCP Request信息后,马上发送DHCP Ack确认信息,该确认信息也是以广播发送的(和第三


步中的包头差不多,这里就不描述了)。DHCP Ack中包含了一些其他选项,比如子网掩码、默认网关、DNS地址、
租约期限、域名等。

7.PC1收到DHCP Ack后,利用其中的信息配置自己的TCP/IP属性,然后广播一个ARP Reply包,这个包的目的是通


知其他设备,该IP地址已经被使用。

[*2*].DHCP配置实例

* 思科路由器如何配置DHCP

在GNS3中配置下面这个拓扑图,其中VPC1(Cloud)使用VPCS来模拟一台计算机,右边的(Cloud)桥接到真实计
算机Loopback网卡(在Windows7以后的Windows版本中可以手动添加回环接口,添加方法可以查看这个文
档:在Windows7下添加loopback网卡,添加后需要重新启动计算机GNS3才能识别),R1上面被配置了两个DHCP地址
池(192.168.1.0/24和172.16.1.0/24),两台计算机通过DHCP获取IP地址。
首先配置R1:

1 /*配置接口IP*/
2 R1(config)#int fa 0/0
3 R1(config-if)#ip add 192.168.1.1 255.255.255.0
4 R1(config-if)#no shut
5 R1(config-if)#int fa 1/0
6 R1(config-if)#ip add 172.16.1.1 255.255.255.0
7 R1(config-if)#no shut
8 R1(config-if)#exit
9
10 /*
11 * 配置DHCP分配时候需要排除的IP地址,排除网关的IP地址。
12 * 也可以使用这种方法排除一些需要保留的IP地址。
13 */
14 R1(config)#ip dhcp excluded-address 192.168.1.1
15 R1(config)#ip dhcp excluded-address 172.16.1.1
16
17 /*配置192.168.1.0/24网段地址池,自定义的名称是192pool*/
18 R1(config)#ip dhcp pool 192pool
19
20 /*后面的24是子网掩码长度,等同于255.255.255.0*/
21 R1(dhcp-config)#network 192.168.1.0 /24
22
23 /*默认网关*/
24 R1(dhcp-config)#default-router 192.168.1.1
25
26 /*DNS服务器地址*/
27 R1(dhcp-config)#dns-server 192.168.1.1
28
29 /*域名,可选*/
30 R1(dhcp-config)#domain-name www.qingsword.com
31
32 /*租约期限,3天*/
33 R1(dhcp-config)#lease 3
34 R1(dhcp-config)#exit
35
36 /*配置172.16.1.0/24网段地址池*/
37 R1(config)#ip dhcp pool 172pool
38 R1(dhcp-config)#network 172.16.1.0 /24
39 R1(dhcp-config)#default-router 172.16.1.1
40 R1(dhcp-config)#dns-server 172.16.1.1
41 R1(dhcp-config)#domain-name qingsword.com
42 R1(dhcp-config)#lease 5
43 R1(dhcp-config)#end
44 R1#

使用VPC1自动获取IP地址:

1 VPCS[1]> ip dhcp
2
3 /*获取成功*/
4 DDORA, IP 192.168.1.2/24 GW 192.168.1.1

将真实计算机同GNS3相连的Loopback网卡设置成自动获取IP,然后在CMD下查看IP获取情况(确保系统的DHCP
Client服务是打开的):

1 /*重新让计算机发送DHCP请求*/
2 C:\Users\Administrator>ipconfig /renew
3
4 /*获取成功后查看详细信息*/
5 C:\Users\Administrator>ipconfig /all
6
7 以太网适配器 Loopback1:
8
9 连接特定的 DNS 后缀 . . . . : qingsword.com
10 描述. . . . . . . . . . . . : Microsoft Loopback Adapter
11 物理地址. . . . . . . . . . : 02-00-4C-4F-4F-50
12 DHCP 已启用 . . . . . . . . : 是
13 自动配置已启用. . . . . . . : 是
14 IPv4 地址 . . . . . . . . . : 172.16.1.2(首选)
15 子网掩码 . . . . . . . . . : 255.255.255.0
16 获得租约的时间 . . . . . . : 2012年12月3日 10:29:18
17 租约过期的时间 . . . . . . : 2012年12月8日 10:29:17
18 默认网关. . . . . . . . . . : 172.16.1.1
19 DHCP 服务器 . . . . . . . . : 172.16.1.1
20 DNS 服务器 . . . . . . . . : 172.16.1.1
21 TCPIP 上的 NetBIOS . . . . : 已启用
22
23 /*从上面的输出信息可以看到,系统的回环接口获取到了正确的IP以及其他相关信息*/

DHCP的基本配置完成。

* 思科路由器如何配置DHCP中继

如下图所示,R1的Fa0/0连接到真实计算机的回环接口上,R1是DHCP中继服务器,R2是DHCP服务器,R1负责将
真实计算机发来的DHCP广播请求以单播的形式发给DHCP服务器R2。
R1配置如下:

1 R1(config)#int fa 0/0
2 R1(config-if)#ip add 192.168.1.1 255.255.255.0
3
4 /*
5 * 在离DHCP客户端最近的那个接口上配置DHCP中继服务,
6 * 这句话的意思就是将这个接口收到的DHCP广播请求以单播形式发给DHCP服务器12.1.1.2
7 */
8 R1(config-if)#ip helper-address 12.1.1.2
9 R1(config-if)#no shut
10
11 R1(config-if)#int s 1/1
12 R1(config-if)#ip add 12.1.1.1 255.255.255.0
13 R1(config-if)#no shut
14 R1(config-if)#end
15 R1#

R2配置:

1 R2(config)#int s 0/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#exit
5
6 /*排除网关地址*/
7 R2(config)#ip dhcp excluded-address 192.168.1.1
8
9 /*配置地址池*/
10 R2(config)#ip dhcp pool 192pool
11 R2(dhcp-config)#network 192.168.1.0 /24
12 R2(dhcp-config)#default-router 192.168.1.1
13 R2(dhcp-config)#dns-server 192.168.1.1
14 R2(dhcp-config)#domain-name qingsword.com
15 R2(dhcp-config)#lease 2
16 R2(dhcp-config)#exit
17
18 /*
19 * DHCP服务器上要有去往被分配网段的路由,
20 * 在真实环境中只要R2路由可达R1的Fa0/0接口就可以。
21 */
22 R2(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.1
23 R2(config)#end
24 R2#

在真实计算机上重新获取一下IP地址:
1 /*重新获取IP地址*/
2 C:\Users\Administrator>ipconfig /renew
3
4 /*查看IP配置详细信息*/
5 C:\Users\Administrator>ipconfig /all
6
7 以太网适配器 Loopback1:
8
9 连接特定的 DNS 后缀 . . . .: qingsword.com
10 描述. . . . . . . . . . . .: Microsoft Loopback Adapter
11 物理地址. . . . . . . . . .: 02-00-4C-4F-4F-50
12 DHCP 已启用 . . . . . . . .: 是
13 自动配置已启用. . . . . . .: 是
14 IPv4 地址 . . . . . . . . .: 192.168.1.2(首选)
15 子网掩码 . . . . . . . . .: 255.255.255.0
16 获得租约的时间 . . . . . .: 2012年12月3日 11:01:07
17 租约过期的时间 . . . . . .: 2012年12月5日 11:01:11
18 默认网关. . . . . . . . . .: 192.168.1.1
19
20 /*注意到这一行的变化了吧,这个地址是DHCP服务器的地址*/
21 DHCP 服务器 . . . . . . . .: 12.1.1.2
22 DNS 服务器 . . . . . . . .: 192.168.1.1
23 TCPIP 上的 NetBIOS . . . .: 已启用

简单的DHCP中继服务配置完毕。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记三十一]NAT协议实例详解
发表于 2012 年 12 月 4 日 由 晴刃

这篇文章介绍一下Cisco路由器上NAT(Network Address Translation,网络地址转换)的基本配置,包括:静


态NAT、动态NAT、PAT以及静态端口映射。
___________________________________________

文章目录

[*1*].NAT概述
[*2*].在Cisco路由器上配置NAT
如何配置静态NAT
如何配置动态NAT
如何配置PAT
如何配置静态端口映射

___________________________________________

[*1*].NAT概述

简单的来说,NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转
换,当外部数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址。

RFC1918规定了三块专有的地址,作为私有的内部组网使用:

A类:10.0.0.0—10.255.255.255
B类:172.16.0.0—172.31.255.255
C类:192.168.0.0—192.168.255.255

这三块私有地址本身是可路由的,只是公网上的路由器不会转发这三块私有地址的流量;当一个公司内部配置了这些
私有地址后,内部的计算机在和外网通信时,公司的边界路由会通过NAT或者PAT技术,将内部的私有地址转换成外
网IP,外部看到的源地址是公司边界路由转换过的公网IP地址,这在某种意义上也增加了内部网络的安全性。

这里介绍三种常用的NAT技术:

静态NAT:静态NAT就是一对一的NAT,内部有多少私有地址需要和外部通信,就要配置多少外网IP地址与其对
应。
动态NAT:动态NAT是在路由器上配置一个外网IP地址池,当内部有计算机需要和外部通信时,就从地址池里动
态的取出一个外网IP,并将他们的对应关系绑定到NAT表中,通信结束后,这个外网地址被释放,可供其他内
部IP转换使用,这和DHCP租约IP有相似之处。
PAT(Port address Translation,端口地址转换,也叫端口地址复用):这是最常用的NAT技术,也是IPv4能维持到
今天的最重要原因之一,它提供了一种多对一的方式,针对多个内网IP地址,边界路由可以给他们分配一个外
网IP,利用这个外网IP的不同端口(不同的端口对应不同的内网IP)和外部进行通信。

[*2*].在Cisco路由器上配置NAT

* 如何配置静态NAT

请看下面这张拓扑图,VPC1和PVC2是使用GNS3的VPCS虚拟出来的两台计算机,它们处于一个内网环境,R1是这个
内网的边界路由,R2是公网上的一台路由器(可以看做是ISP的路由器),各设备IP配置如图所示:

通过在R1上配置静态NAT,让VPC1和VPC2通过两个静态分配的公网IP和R2通信。

首先配置VPCS中的两台虚拟计算机的IP:

1 VPCS[1]> ip 192.168.1.2 24 192.168.1.1


2 PC1 : 192.168.1.2 255.255.255.0 gateway 192.168.1.1
3
4 VPCS[1]> 2
5 VPCS[2]> ip 192.168.1.3 24 192.168.1.1
6 PC2 : 192.168.1.3 255.255.255.0 gateway 192.168.1.1

配置R1使用静态NAT:

1 /*配置内网网关接口*/
2 R1(config)#int fa 1/0
3 R1(config-if)#ip add 192.168.1.1 255.255.255.0
4
5 /*这个接口是内网接口,需要配置成NAT对内接口*/
6 R1(config-if)#ip nat inside
7 R1(config-if)#no shut
8
9 /*配置与ISP相连的外网接口*/
10 R1(config-if)#int s 0/0
11 R1(config-if)#ip add 12.1.1.1 255.255.255.0
12
13 /*配置成NAT对外接口*/
14 R1(config-if)#ip nat outside
15 R1(config-if)#no shut
16 R1(config-if)#exit
17
18 /*配置静态转换条目,每个内网IP需要和一个外网IP对应*/
19 R1(config)#ip nat inside source static 192.168.1.2 12.1.1.20
20 R1(config)#ip nat inside source static 192.168.1.3 12.1.1.30
21 R1(config)#end
22 R1#

配置R2:

1 R2(config)#int s 0/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#end
5 R2#
6
7 /*在R2上开启ICMP调试*/
8 R2#debug ip icmp
9 ICMP packet debugging is on
10 R2#

在VPCS上面进行Ping测试:

1 /*使用192.168.1.3去Ping*/
2 VPCS[2]> ping 12.1.1.2
3 12.1.1.2 icmp_seq=1 ttl=254 time=78.000 ms
4
5 /*
6 * R2上的ICMP调试输出显示,echo reply的目的地址是12.1.1.30,
7 * 说明R1上的静态NAT是成功的,成功将VPC2的私有IP转换成了公网IP。
8 */
9 R2#
10 *Mar 1 00:10:08.383: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.30
11
12 /*使用192.168.1.2去Ping*/
13 VPCS[2]> 1
14 VPCS[1]> ping 12.1.1.2
15 12.1.1.2 icmp_seq=1 ttl=254 time=125.000 ms
16
17 /*R2显示*/
18 R2#
19 *Mar 1 00:10:24.751: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.20

在R1上查看NAT地址转换表:

1 R1#show ip nat translations


2 Pro Inside global Inside local Outside local Outside global
3 --- 12.1.1.20 192.168.1.2 --- ---
4 --- 12.1.1.30 192.168.1.3 --- ---
5 R1#

这就是静态NAT的配置,下面介绍动态NAT。

* 如何配置动态NAT
使用上面的图一作为拓扑,图中VPC1、VPC2和R2的配置保持不变,重新配置R1,使用动态NAT:

1 R1(config)#int fa 1/0
2 R1(config-if)#ip add 192.168.1.1 255.255.255.0
3 R1(config-if)#ip nat inside
4 R1(config-if)#no shut
5
6 R1(config-if)#int s 0/0
7 R1(config-if)#ip add 12.1.1.1 255.255.255.0
8 R1(config-if)#ip nat outside
9 R1(config-if)#no shut
10
11 /*
12 * 配置外网地址池,poolname1是这个地址池的名称,
13 * 外网地址池范围从12.1.1.20-12.1.30,11个可用于转换的IP地址,
14 * 子网掩码24位。
15 */
16 R1(config)#ip nat pool poolname1 12.1.1.20 12.1.1.30 netmask 255.255.255.0
17
18 /*
19 * 设置一个ACL来允许那些内网IP被转换,
20 * 这里是192.168.1.0/24网段都允许被转换。
21 */
22 R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
23
24 /*开启动态NAT,允许ACL 1中的私有地址转换成poolname1中的外网IP*/
25 R1(config)#ip nat inside source list 1 pool poolname1
26 R1(config)#end
27 R1#

在VPCS中Ping测试:

1 VPCS[1]> ping 12.1.1.2


2 12.1.1.2 icmp_seq=1 ttl=254 time=94.000 ms
3
4 /*R2的ICMP调试输出*/
5 R2#
6 *Mar 1 00:43:05.727: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.20
7
8 VPCS[1]> 2
9 VPCS[2]> ping 12.1.1.2
10 12.1.1.2 icmp_seq=1 ttl=254 time=78.000 ms
11
12 /*R2的ICMP调试输出*/
13 R2#
14 *Mar 1 00:43:18.431: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.21
15
16 /*查看R1的NAT转换表*/
17 R1#show ip nat translation
18 Pro Inside global Inside local Outside local Outside global
19 --- 12.1.1.20 192.168.1.2 --- ---
20 --- 12.1.1.21 192.168.1.3 --- ---
21 R1#

NAT动态转换介绍完了,下面介绍PAT端口转换。

* 如何配置PAT
图一中其他设备配置保持不变,重设R1(Reload),配置PAT:

1 R1(config)#int fa 1/0
2 R1(config-if)#ip add 192.168.1.1 255.255.255.0
3 R1(config-if)#ip nat inside
4 R1(config-if)#no shut
5 R1(config-if)#int s 0/0
6 R1(config-if)#ip add 12.1.1.1 255.255.255.0
7 R1(config-if)#ip nat outside
8 R1(config-if)#no shut
9 R1(config-if)#exit
10
11 /*配置允许转换的内部地址范围*/
12 R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
13
14 /*ACL1中允许的私有IP地址将会共用R1的s0/0接口外网IP地址*/
15 R1(config)#ip nat inside source list 1 interface s 0/0 overload
16 R1(config)#end
17 R1#

在VPCS中Ping测试:

1 VPCS[2]> ping 12.1.1.2


2 12.1.1.2 icmp_seq=3 ttl=254 time=78.000 ms
3
4 VPCS[2]> 1
5 VPCS[1]> ping 12.1.1.2
6 12.1.1.2 icmp_seq=2 ttl=254 time=94.000 ms
7
8 /*在R2中显示相同的ICMP调试信息*/
9 R2#
10 *Mar 1 00:56:43.723: ICMP: echo reply sent, src 12.1.1.2, dst 12.1.1.1
11
12 /*查看R1的PAT转换表,可以看到内部IP地址使用了外网IP不同的端口*/
13 R1#show ip nat translations
14 Pro Inside global Inside local Outside local Outside global
15 icmp 12.1.1.1:17252 192.168.1.2:17252 12.1.1.2:17252 12.1.1.2:17252
16 ....
17 icmp 12.1.1.1:21092 192.168.1.3:21092 12.1.1.2:21092 12.1.1.2:21092
18 ....
19 R1#

PAT的基本配置就是这样,下面介绍如何将内网IP的某端口映射到外网IP的某端口。

* 如何配置静态端口映射

在图一中,假设VPC1上面架设了TFTP服务,外网要访问VPC1的TFTP服务就需要将VPC1(192.168.1.2)的69端口
映射到外网s0/0(12.1.1.1)的某个端口上,下面的是实际操作:

1 /*添加静态端口映射,TFTP使用的是UDP的69号端口*/
2 R1(config)#ip nat inside source static udp 192.168.1.2 69 12.1.1.1 69
3 R1(config)#end
4
5 /*查看NAT转换表*/
6 R1#show ip nat translations
7 Pro Inside global Inside local Outside local Outside global
8 udp 12.1.1.1:12345 192.168.1.2:69 --- ---
9 R1#

配置完这个静态映射后,外网的用户只需要访问12.1.1.1:69就能访问到内网的192.168.1.2:69,即可通过外网IP访问
到内网VPC1的TFTP服务了。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记三十二]IPv6实例详解
发表于 2012 年 12 月 8 日 由 晴刃

这篇文章简单的介绍一下IPv6技术,其中会涉及到IPv6的表示格式(格式和IPv4有很大不同,刚开始可能不习惯)、
在Cisco路由接口上配置IPv6地址(普通静态配置和静态EUI-64配置)、IPv6静态和动态路由配置,最后会介绍一
个IPv4到IPv6过渡阶段的技术(IPv6-Over-IPv4隧道)。
___________________________________________

文章目录

[*1*].IPv6概述
IPv6地址格式
IPv6地址类型
[*2*].Cisco路由器配置IPv6地址
手工静态配置
静态EUI-64配置
[*3*].IPv6路由配置实例
如何配置IPv6静态路由
如何配置IPv6 RIPng
[*4*].配置IPv6-Over-IPv4隧道实例

___________________________________________

[*1*].IPv6概述

* IPV6地址格式

IPv6地址一共有128位长度(IPv4一共是32位长度),每16位为一个分组,每个16位分组写成4个十六进制数,一共
分为8组,中间用冒号分隔,下面举个例子:

1 2001:3CA1:010F:001A:121B:0000:0000:0010

上面这个就是一个完整的IPv6地址格式,一共用冒号分为8组,每组4个十六进制数,每个十六进制数占4位,那么4个
十六进制数字就是4X4=16位,即每组是16位,8组就是128位。

从上面这个例子看起来IPv6地址非常冗长,不过IPv6有下面几种简写形式:

1.IPv6地址中每个16位分组中前导零位可以去除做简化表示,但每个分组必须保留一位数字,请看下面的例子。

1 /*完整版的IPv6地址*/
2 2001:3CA1:010F:001A:121B:0000:0000:0010
3
4 /*
5 * 简写去除前导0简写形式,可以看到第三个和第四个分组去除了前导0,
6 * 第七个和第八个分组因为全部是0,但必须保留一位数字。
7 * 这还不是最简写形式,请接着往下看。
8 */
9 2001:3CA1:10F:1A:121B:0:0:10

2.可以将冒号十六进制格式中相邻的连续零位合并,用双冒号表示”::”,并且双冒号在地址格式中只能出现一次,请看下
面的例子。

1 /*完整版的IPv6地址*/
2 2001:3CA1:010F:001A:121B:0000:0000:0010
3
4 /*去除前导零并将连续的零位合并。*/
5 2001:3CA1:10F:1A:121B::10
6
7 /*另一个完整的IPv6地址*/
8 2001:0000:0000:001A:0000:0000:0000:0010
9
10 /*
11 * 可以看到虽然第二组和第三组也是连续的零位,
12 * 但双冒号只能在IPv6的简写中出现一次,运用到了后面更长的连续零位上。
13 * 这个地址还可以简写成这样&quot;2001::1A:0:0:0:10&quot;。
14 */
15 2001:0:0:1A::10
16
17 /*
18 * 需要将上面这个地址还原也很简单,只要看存在数字的分组有几个,
19 * 然后就能推测出双冒号代表了多少个连续的零位分组。
20 * 一共有5个保留了数字的分组,那么连续冒号就代表了3个连续的零位分组。
21 */
22
23 /*
24 * 需要注意的是,只有前导零位可以去除,如果这个地址写成下面这样就是错误的,
25 * 注意最后一组,不能去除1后面的那个0。
26 */
27 2001:0:0:1A::1 /*这是错误的写法*/

* IPV6地址类型

IPv6中的地址有单播地址(Unicast)、组播地址(Multicast)、任意播地址(Anycast)除此之外还包含一些特殊的
地址,下面将介绍到。

1.全局单播地址

全局单播地址是全球可路由的,可以分配给任何个人和机构,IANA组织当前规定全局单播地址是2000::/3,然
后IANA再将这个地址空间逐级分下去,/23是注册机构前缀,/32是ISP运营商前缀,/48是站点前缀,/64是子网前缀。

有一点很重要,IPv6中没有广播地址。

2.组播地址

IPv6组播地址的格式是FF00::/8,其作用与IPv4中的组播地址相同。
3.私有地址

IPv6中的私有地址和IPv4的私有地址意义相同,都是用作本地使用,只具有本地意义,IPv6中有两种私有地址:

链路本地地址(Link-local addresses):当两个支持IPv6特性的路由器直连时,直连的接口会自动给自己分配一
个链路本地地址,其主要作用是在没有管理员配置时设备就能互相通信。链路本地地址中的前10bit是FE80(转
换成二进制就是1111 1110 10,一共十位),后54bit全0,最后64bit是EUI-64地址(稍后会介绍到),也就是
说链路本地地址的前缀是FE80::/64。
站点本地地址(Site-local addresses):站点本地地址现在已经被废除。出于历史原因,这里还是简单的介绍一
下,站点本地地址的前10bit是FEC0,后54位是0,最后64位是EUI-64地址,因为IPv6地址空间很大,所以这种
类型的私有地址没有了存在的必要。

4.回环地址

IPv6中只有一个回环地址”0:0:0:0:0:0:0:1″,简写成”::1″,IPv6的回环地址功能和IPv4的127.0.0.0/8网段的回环地址功能
是一样的。

5.不确定地址

IPv4中的不确定地址是用”0.0.0.0″表示,在IPv6中不确定地址使用”0:0:0:0:0:0:0:0″表示,简写成”::”。

[*2*].Cisco路由器配置IPv6地址

* 手工静态配置

在GNS3中用一个小实例来简单演示一下的IPv6手工静态配置:

R1配置:

1 R1(config)#int s 0/0
2 /*
3 * 后面的/64代表子网掩码位,这是简写形式,这个地址的完整形式应该是:
4 * 2008:0012:0012:0012:0000:0000:0000:0001/64
5 */
6 R1(config-if)#ipv6 address 2008:12:12:12::1/64
7 R1(config-if)#no shut
8 R1(config-if)#end
9 R1#

R2配置:
1 R2(config)#int s 0/1
2 R2(config-if)#ipv6 address 2008:12:12:12::2/64
3 R2(config-if)#no shut
4 R2(config-if)#end
5
6 /*Ping测试,Ping一下R1*/
7 R2#ping 2008:12:12:12::1
8
9 Type escape sequence to abort.
10 Sending 5,100-byte ICMP Echos to 2008:12:12:12::1,timeout is 2seconds:
11 !!!!! /*成功Ping通*/
12
13 /*查看IPv6路由表*/
14 R2#show ipv6 route
15 IPv6 Routing Table - 4 entries
16 Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
17 U - Per-user Static route
18 ....
19 C 2008:12:12:12::/64 [0/0]
20 via ::, Serial0/1
21 L 2008:12:12:12::2/128 [0/0]
22 via ::, Serial0/1
23 L FE80::/10 [0/0]
24 via ::, Null0
25 L FF00::/8 [0/0]
26 via ::, Null0
27 R2#

* 静态EUI -64配置

首先还是通过一个实例来配置一下EUI-64,然后再介绍EUI-64是怎么得来的。

注意:在GNS3中配置EUI-64的时候,必须给两个路由添加上至少一个快速以太网接口。这是GNS3的一个小缺陷,因
为真实路由器默认都是存在以太网接口的,而EUI-64地址需要使用以太网接口的MAC地址。稍后会介绍为什么。

R1配置:

1 R1(config)#int s 0/0
2 /*
3 * 静态EUI-64的配置方法,前64位手工指定,
4 * 后64位地址使用eui-64地址来代替。
5 */
6 R1(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
7 R1(config-if)#no shut
8 R1(config-if)#end
9 R1#

R2配置:
1 R2(config)#int s 0/1
2 R2(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
3 R2(config-if)#no shut
4 R2(config-if)#end
5 R2#

配置完成后,查看一下R2的S0/1接口到底被分配了一个什么样的地址:

1 R2#show ipv6 interface s 0/1


2 Serial0/1 is up, line protocol is up
3 /*这里是这个接口的链路本地地址*/
4 IPv6 is enabled, link-local address is FE80::CE01:6FF:FE04:10
5
6 /*这个地方显示的就是我们配置的静态EUI-64地址*/
7 Global unicast address(es):
8 2008:12:12:12:CE01:6FF:FE04:10, subnet is 2008:12:12:12::/64 [EUI]
9 Joined group address(es):
10 FF02::1
11 FF02::2
12 FF02::1:FF04:10
13 MTU is 1500 bytes
14 ICMP error messages limited to one every 100 milliseconds
15 ICMP redirects are enabled
16 ND DAD is enabled, number of DAD attempts: 1
17 ND reachable time is 30000 milliseconds
18 R2#

从上面的输出中可以看到R2的S0/1接口的IPv6地址是:

2008:12:12:12:CE01:6FF:FE04:10/64

这个地址的前64位是我们静态指定的(2008:12:12:12),后面64位(CE01:6FF:FE04:10)是按照下面的方法得到的:

假设给路由器的fa1/0配置静态EUI-64地址,fa1/0接口的MAC地址是CE0106040010,前64位我们静态指定
了(2008:12:12:12),后面的64位会使用这个接口的MAC地址中间插入FFFE得出(CE0106 FFFE 040010),用冒号
按4位十六进制一组分隔就是(CE01:06FF:FE04:0010),写成简写形式就是(CE01:6FF:FE04:10),这就是上面的IPv6地址
的由来。

但是细心的朋友可能发现了,我们配置的R1和R2之间的连线是串行线路s0/0-s0/1,串行接口是没有MAC地址的,实
际上,串行接口上配置IPv6地址时,串行接口会使用路由器上最小的那个以太网接口的MAC地址来计算EUI-64地址
(这就是为什么我要在GNS3中给R1和R2分别添加一个fa1/0接口的原因,经过我的测试,如果不添加这个以太网接
口,两边的路由会出现”链路本地地址”冲突的情况。也就是说,在GNS3中路由器没有添加以太网接口时,默认情况下
会两边使用相同的MAC地址计算EUI-64地址,这种情况在真实环境是不会发生的)

[*3*].IPv6路由配置实例

* 如何配置IPV6静态路由

使用GNS3配置下面的拓扑(R1、R2、R3上面都必须添加一个以太网接口,这是GNS3的一个小缺陷,上面”静态EUI-
64配置”中已经解释过。):
图中,R1开启了一个回环接口,这个回环接口下配置了4个IPv6地址,和IPv4不同的是,IPv6在一个接口下配置多
个IP地址的时候不需要添加Secondary参数;R3也开启了一个回环接口;在R1和R3上使用默认路由指向R2,在R2上
使用路由汇聚,将去往R1回环接口的4个IPv6地址汇聚成一条静态路由,R2上另外一条静态路由去往R3的回环接
口。请看下面的配置:

R1配置:

1 /*路由默认不支持IPv6路由,需要用这条命令开启*/
2 R1(config)#ipv6 unicast-routing
3
4 /*配置与R2相连的串口IPv6地址*/
5 R1(config)#int s 0/0
6 R1(config-if)#ipv6 add 2008:12:12:12::1/64
7 R1(config-if)#no shut
8
9 /*在R1的lo0接口上配置了4个IPv6地址*/
10 R1(config)#int lo 0
11 R1(config-if)#ipv6 add 2008:1:1:8::1/64
12 R1(config-if)#ipv6 add 2008:1:1:9::1/64
13 R1(config-if)#ipv6 add 2008:1:1:A::1/64
14 R1(config-if)#ipv6 add 2008:1:1:B::1/64
15 R1(config-if)#no shut
16 R1(config-if)#exit
17
18 /*
19 * 使用默认路由指向R2,
20 * 其中的&quot;::/0&quot;等价于&quot;0:0:0:0:0:0:0:0/0&quot;。
21 */
22 R1(config)#ipv6 route ::/0 2008:12:12:12::2
23 R1(config)#end
24 R1#

R2配置:

1 R2(config)#ipv6 unicast-routing
2 R2(config)#int s 0/0
3 R2(config-if)#ipv6 add 2008:12:12:12::2/64
4 R2(config-if)#no shut
5 R2(config-if)#int s 0/1
6 R2(config-if)#ipv6 add 2008:23:23:23::2/64
7 R2(config-if)#no shut
8 R2(config-if)#exit
9
10 /*指向R3回环接口的静态路由*/
11 R2(config)#ipv6 route 2008:3:3:3::/64 2008:23:23:23::3
12
13 /*
14 * 指向R1回环接口的汇聚静态路由,路由的汇聚和IPv4是一样的,
15 * R1的回环接口上面的4个IPv6地址中的8、9、A、B都是十六进制数,
16 * 将他们转换成二进制就是:
17 * 8=10 00
18 * 9=10 01
19 * A=10 10
20 * B=10 11
21 * 二进制中前面两位是相同的,所以前缀长度64减去后面两位不同的,就是62了。
22 */
23 R2(config)#ipv6 route 2008:1:1:8::/62 2008:12:12:12::1
24 R2(config)#end
25 R2#

R2配置:

1 R3(config)#ipv6 unicast-routing
2 R3(config)#int s 0/1
3 R3(config-if)#ipv6 add 2008:23:23:23::3/64
4 R3(config-if)#no shut
5 R3(config-if)#int lo 0
6 R3(config-if)#ipv6 add 2008:3:3:3::1/64
7 R3(config-if)#no shut
8 R3(config-if)#exit
9 /*使用默认静态路由指向R2*/
10 R3(config)#ipv6 route ::/0 2008:23:23:23::2
11 R3(config)#end
12 R3#
13
14 /*测试Ping R1回环接口任意一个IP都可以通*/
15 R3#ping 2008:1:1:A::1
16
17 Type escape sequence to abort.
18 Sending 5, 100-byte ICMP Echos to 2008:1:1:A::1, timeout is 2 seconds:
19 !!!!!

配置完成后全网测试都能Ping通。不要关闭这个实验,我们在这个实验的基础上继续配置下面的RIPng动态路由。

* 如何配置IPV6 RIPNG

RIPng(Routing Information Protocol Next Generation,RIP下一代版本),是针对IPv6的RIP版本,和RIPv2非常相


似,是一个距离矢量的路由协议,最大跳数是15,使用水平分隔和毒性反转来阻止路由环路。RIPng使用多播地
址FF02::9作为目的更新地址,发送更新使用UDP协议的521端口。

在上面一个实例的基础上,删除R1、R2、R3上面配置的静态路由,然后配置RIPng。

R1配置:
1 /*删除上一个实例中配置的默认路由*/
2 R1(config)#no ipv6 route ::/0
3
4 /*启用RIPng协议,后面的&quot;test1&quot;是自定义的名称,只具有本地意义*/
5 R1(config)#ipv6 router rip test1
6 R1(config-rtr)#exit
7
8 R1(config)#int lo 0
9
10 /*和IPv4的RIP不同,RIPng是直接在接口下开启RIPng*/
11 R1(config-if)#ipv6 rip test1 enable
12 R1(config-if)#int s 0/0
13 R1(config-if)#ipv6 rip test1 enable
14 R1(config-if)#end
15 R1#

R2配置:

1 R2(config)#no ipv6 route 2008:1:1:8::/62


2 R2(config)#no ipv6 route 2008:3:3:3::/64
3 R2(config)#ipv6 router rip test2
4 R2(config-rtr)#int s 0/0
5 R2(config-if)#ipv6 rip test2 enable
6 R2(config-if)#int s 0/1
7 R2(config-if)#ipv6 rip test2 enable
8 R2(config-if)#end
9 R2#

R3配置:

1 R3(config)#no ipv6 route ::/0


2 R3(config)#ipv6 router rip test3
3 R3(config-rtr)#int s 0/1
4 R3(config-if)#ipv6 rip test3 enable
5 R3(config-if)#int lo 0
6 R3(config-if)#ipv6 rip test3 enable
7 R3(config-if)#end
8 R3#

网络收敛后,在R3上查看IPv6路由表:

1 R3#show ipv6 route


2 IPv6 Routing Table - 12 entries
3 Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
4 U - Per-user Static route
5 ....
6 /*这四条R开头的是R1的回环接口路由条目*/
7 R 2008:1:1:8::/64 [120/3]
8 via FE80::CE01:DFF:FE4C:10, Serial0/1
9 R 2008:1:1:9::/64 [120/3]
10 via FE80::CE01:DFF:FE4C:10, Serial0/1
11 R 2008:1:1:A::/64 [120/3]
12 via FE80::CE01:DFF:FE4C:10, Serial0/1
13 R 2008:1:1:B::/64 [120/3]
14 via FE80::CE01:DFF:FE4C:10, Serial0/1
15
16 C 2008:3:3:3::/64 [0/0]
17 via ::, Loopback0
18 L 2008:3:3:3::1/128 [0/0]
19 via ::, Loopback0
20
21 /*这里是R1和R2相连的那个网段的路由条目*/
22 R 2008:12:12:12::/64 [120/2]
23 via FE80::CE01:DFF:FE4C:10, Serial0/1
24 C 2008:23:23:23::/64 [0/0]
25 via ::, Serial0/1
26 L 2008:23:23:23::3/128 [0/0]
27 via ::, Serial0/1
28 L FE80::/10 [0/0]
29 via ::, Null0
30 L FF00::/8 [0/0]
31 via ::, Null0
32 R3#
33
34 /*
35 * RIPng的条目和RIP有很大不同,其中跳数比IPv4下运行RIP多1,
36 * 在默认情况下,进入路由表之前RIPng度量值就已经加了1。
37 *
38 * 另外可以看到,via也就是下一跳地址不是邻居的接口IPv6地址,
39 * 这个地址是邻居接口的&quot;本地链路地址&quot;,本地链路地址上面有介绍到,
40 * 是使用FE80::/64前缀加上EUI-64地址得到的。
41 */

[*4*].配置IPv6-Over-IPv4隧道实例

在下面这个拓扑图中,R1和R3上面开启了回环接口来模拟IPv6网络,R1-R2-R3相连的串行接口运行的是IPv4网络,
各设备的IP地址如图所示。

(同上面几个实例一样,一定不要忘记在GNS3中给各个路由添加一个以太网接口,虽然这里并没有使用这个以太网接
口,但是链路本地地址的EUI-64部分需要这个以太网接口的MAC地址)

对于这样的拓扑结构,两端运行的是IPv6网络,中间是IPv4网络,可以使用一种叫做Tunneling(隧道)的技术,来实现
两端的IPv6网络能够跨越IPv4网络进行通信:

R1配置:
1 /*开启IPv6支持*/
2 R1(config)#ipv6 unicast-routing
3 R1(config)#int lo 0
4 R1(config-if)#ipv6 add 2008:1:1:1::1/64
5 R1(config-if)#no shut
6 R1(config-if)#int s 0/0
7 R1(config-if)#ip add 12.1.1.1 255.255.255.0
8 R1(config-if)#no shut
9 R1(config-if)#exit
10
11 /*配置去往R2的IPv6默认路由*/
12 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
13
14 /*创建一个隧道接口*/
15 R1(config)#int tunnel 0
16
17 /*隧道的源IP地址是R1的s0/0*/
18 R1(config-if)#tunnel source 12.1.1.1
19
20 /*
21 * 隧道的目的IP地址是R3的s0/1,为了保证隧道两端能够正常通信,
22 * 隧道的源和目的必须是路由可达的(IPv4的路由要可达)。
23 */
24 R1(config-if)#tunnel destination 23.1.1.3
25
26 /*
27 * 配置隧道模式,ipv6ip就是&quot;IPv6-Over-IPv4&quot;模式,
28 * 也就是将IPv6的包封装在IPv4的包中。
29 */
30 R1(config-if)#tunnel mode ipv6ip
31
32 /*给隧道接口配置一个IPv6地址*/
33 R1(config-if)#ipv6 add 2008:13:13:13::1/64
34 R1(config-if)#exit
35
36 /*配置IPv6默认路由,指向R3上面的隧道接口地址*/
37 R1(config)#ipv6 route ::/0 2008:13:13:13::3
38 R1(config)#end
39 R1#

R2配置:

1 R2(config)#int s 0/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#no shut
4 R2(config-if)#int s 0/1
5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
6 R2(config-if)#no shut
7 R2(config-if)#end
8 R2#

R3配置:

1 R3(config)#ipv6 unicast-routing
2 R3(config)#int s 0/1
3 R3(config-if)#ip add 23.1.1.3 255.255.255.0
4 R3(config-if)#no shut
5 R3(config-if)#int lo 0
6 R3(config-if)#ipv6 add 2008:3:3:3::3/64
7 R3(config-if)#no shut
8 R3(config-if)#exit
9 R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
10 R3(config)#int tunnel 0
11 R3(config-if)#tunnel source 23.1.1.3
12 R3(config-if)#tunnel destination 12.1.1.1
13 R3(config-if)#tunnel mode ipv6ip
14 R3(config-if)#ipv6 add 2008:13:13:13::3/64
15 R3(config-if)#exit
16 R3(config)#ipv6 route ::/0 2008:13:13:13::1
17 R3(config)#end
18 R3#

配置完成后在R3上面Ping测试:

1 /*Ping R1的隧道地址,成功*/
2 R3#ping 2008:13:13:13::1
3
4 Type escape sequence to abort.
5 Sending 5, 100-byte ICMP Echos to 2008:13:13:13::1, timeout is 2 seconds:
6 !!!!!
7 Success rate is 100 percent (5/5), round-trip min/avg/max = 28/59/76 ms
8
9 /*Ping R1的回环接口地址,成功*/
10 R3#ping 2008:1:1:1::1
11
12 Type escape sequence to abort.
13 Sending 5, 100-byte ICMP Echos to 2008:1:1:1::1, timeout is 2 seconds:
14 !!!!!
15 Success rate is 100 percent (5/5), round-trip min/avg/max = 56/92/148 ms
16
17 /*Ping R1的串口地址,成功*/
18 R3#ping 12.1.1.1
19
20 Type escape sequence to abort.
21 Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
22 !!!!!
23 Success rate is 100 percent (5/5), round-trip min/avg/max = 48/91/140 ms
24 R3#

IPv6-Over-IPv4隧道实验完成,两端的IPv6网络可以穿越IPv4网络进行通信。

这篇文章所讲解的IPv6知识只是IPv6技术的冰山一角,希望可以起到一个抛砖引玉的作用。

————————————————————————————————————

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。


[CCNA图文笔记三十三]经典综合实验
发表于 2012 年 12 月 11 日 由 晴刃

这篇文章是这一系列笔记的综合篇,文章以一个综合实验将CCNA笔记中介绍的大部分知识串联起来;文中会涉及到
设备的远程管理、VLAN的划分、VTP协议的使用、STP协议的配置、动态和静态路由协议的使用、DHCP和NAT的配
置、PPP和ACL的应用等。

文章目录

[*1*].综合实验拓扑图
[*2*].实验要求
[*3*].实验配置

[*1*].综合实验拓扑图

实验环境是”Cisco Packet Tracer 5.3″,搭建下面的拓扑图,图中路由器型号是2811,给所有路由添加两块WIC-2T串


行接口模块;两台交换机型号是2960;图中有两台服务器,其中Server2模拟Internet中的一台服务器,Server1模拟
内网中的一台服务器。

根据这个拓扑,完成下面的实验要求。

[*2*].实验要求
1.在Cisco Packet Tracer 5.3中搭建上面的拓扑图,注意设备间线缆类型的选择。

2.给每台设备配置IP地址:

R1:
fa0/0 打开
fa0/0.1 192.168.1.1/24
fa0/0.2 192.168.2.1/24
fa0/0.3 192.168.3.1/24
s0/0/0 12.1.1.1/24

R2:
s0/0/0 12.1.1.2/24 DCE端需要配置时钟
s0/0/1 23.1.1.2/24 DCE端
s0/1/1 24.1.1.2/24 DCE端

R3:
s0/0/1 23.1.1.3/24
s0/0/0 34.1.1.3/24 DCE端

R4:
s0/1/1 24.1.1.4/24
s0/0/0 34.1.1.4/24
fa0/0 174.1.1.1/24

Server1:
IP地址 192.168.2.2
子网掩码 255.255.255.0
默认网关 192.168.2.1

Server2:
IP地址 174.1.1.2
子网掩码 255.255.255.0
默认网关 174.1.1.1

SW1:
VLAN1 192.168.1.2/24
默认网关 192.168.1.1

SW2:
VLAN1 192.168.1.3/24
默认网关 192.168.1.1
PC1、PC2、PC3使用DHCP自动获取IP。Server1和PC1属于VLAN2,VLAN2所在子网
是192.168.2.0/24。PC2和PC3属于VLAN3,VLAN3所在子网是192.168.3.0/24。

3.配置4台路由以及2台交换机,使他们都能支持远程Telnet登录;配置他们的特权密码和Console端口密码,所有的
密码统一配置成”ccna”,要求密码不能在配置文件中明文显示(使用加密)。

4.配置VTP协议,让SW1成为VTP Server,SW2为VTP Client,VTP配置中域名配置成”ccna”,密码同样是”ccna”。

5.在SW1上面配置VLAN2和VLAN3,让SW2可以通过VTP协议学习到SW1上面的这些VLAN信息。配置两台交换机上
面链接的4台终端设备到各自的VLAN中,配置SW1与R1相连的接口为主干。

6.配置STP协议,使SW1成为VLAN1、VLAN2和VLAN3的根交换机。

7.在R1上配置DHCP协议,使得PC1、PC2、PC3都能准确获取IP地址、网关,DNS服务器的地址是174.1.1.2。

8.配置R1使用默认路由指向R2,配置R2、R3、R4运行OSPF协议,配置完成后4台路由器能够互访。

9.R1和R2之间配置PPP封装,使用CHAP验证密码是”ccna”。

10.在R1上配置NAT,使得内网Server1、PC1、PC2、PC3能够通过PAT共享R1的s0/0/0接口IP地址访
问Internet(R2、R3、R4和Server2模拟的是Internet)。同时在R1上配置静态PAT,让Internet上的用户可以通
过R1的s0/0/0接口的80端口访问内网Server1的WWW服务。

11.在R1上配置ACL,拒绝VLAN3的主机访问Server2的WWW服务,其他服务不受影响。

[*3*].实验配置

这一部分按照上面的要求开始配置。

1.首先按照拓扑图给各设备连上线。

2.配置IP地址。

R1配置:

1 /*主接口只要打开即可*/
2 R1(config)#int fa 0/0
3 R1(config-if)#no shut
4
5 /*这是VLAN1的网关*/
6 R1(config-if)#int fa 0/0.1
7 R1(config-subif)#encapsulation dot1Q 1
8 R1(config-subif)#ip add 192.168.1.1 255.255.255.0
9 R1(config-subif)#no shut
10
11 /*这是VLAN2的网关*/
12 R1(config-subif)#int fa 0/0.2
13 R1(config-subif)#encapsulation dot1Q 2
14 R1(config-subif)#ip add 192.168.2.1 255.255.255.0
15 R1(config-subif)#no shut
16
17 /*这是VLAN3的网关*/
18 R1(config-subif)#int fa 0/0.3
19 R1(config-subif)#encapsulation dot1Q 3
20 R1(config-subif)#ip add 192.168.3.1 255.255.255.0
21 R1(config-subif)#no shut
22
23 /*和R2相连的接口,因为是DTE端所以不需要配置时钟*/
24 R1(config-subif)#int s 0/0/0
25 R1(config-if)#ip add 12.1.1.1 255.255.255.0
26 R1(config-if)#no shut
27 R1(config-if)#end
28 R1#

R2配置:

1 R2(config)#int s 0/0/0
2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
3 R2(config-if)#clock rate 64000
4 R2(config-if)#no shut
5 R2(config-if)#int s 0/0/1
6 R2(config-if)#ip add 23.1.1.2 255.255.255.0
7 R2(config-if)#clock rate 64000
8 R2(config-if)#no shut
9 R2(config-if)#int s 0/1/1
10 R2(config-if)#ip add 24.1.1.2 255.255.255.0
11 R2(config-if)#clock rate 64000
12 R2(config-if)#no shut
13 R2(config-if)#end
14 R2#

R3配置:

1 R3(config)#int s 0/0/1
2 R3(config-if)#ip add 23.1.1.3 255.255.255.0
3 R3(config-if)#no shut
4 R3(config-if)#int s 0/0/0
5 R3(config-if)#ip add 34.1.1.3 255.255.255.0
6 R3(config-if)#clock rate 64000
7 R3(config-if)#no shut
8 R3(config-if)#end
9 R3#

R4配置:

1 R4(config)#int s 0/0/0
2 R4(config-if)#ip add 34.1.1.4 255.255.255.0
3 R4(config-if)#no shut
4 R4(config-if)#int s 0/1/1
5 R4(config-if)#ip add 24.1.1.4 255.255.255.0
6 R4(config-if)#no shut
7 R4(config-if)#int fa 0/0
8 R4(config-if)#ip add 174.1.1.1 255.255.255.0
9 R4(config-if)#no shut
10 R4(config-if)#end
11 R4#
SW1配置:

1 /*给SW1配置一个网关,并配置一个可网管的IP地址*/
2 SW1(config)#ip default-gateway 192.168.1.1
3 SW1(config)#int vlan 1
4 SW1(config-if)#ip add 192.168.1.2 255.255.255.0
5 SW1(config-if)#no shut
6 SW1(config-if)#end
7 SW1#

SW2配置:

1 SW2(config)#ip default-gateway 192.168.1.1


2 SW2(config)#int vlan 1
3 SW2(config-if)#ip add 192.168.1.3 255.255.255.0
4 SW2(config-if)#no shut
5 SW2(config-if)#end
6 SW2#

Server1配置,在这里要关闭Server1的DHCP服务,否则PC1可能会从Server1去获取IP地址:

IP配置

关闭DHCP
Server2配置:

将PC设备的IP配置调整成DHCP自动获取。

3.配置设备远程登录以及管理密码。

R1配置:

1 /*配置特权密码*/
2 R1(config)#enable secret ccna
3
4 /*配置Console端口密码*/
5 R1(config)#line co 0
6 R1(config-line)#pass ccna
7 R1(config-line)#login
8
9 /*配置R1允许远程Telnet管理*/
10 R1(config-line)#line vty 0 4
11 R1(config-line)#pass ccna
12 R1(config-line)#login
13 R1(config-line)#exit
14
15 /*给所有保存在配置文件中的明文密码加密*/
16 R1(config)#service password-encryption
17 R1(config)#end
18 R1#

R2配置:

1 R2(config)#enable secret ccna


2 R2(config)#line co 0
3 R2(config-line)#pass ccna
4 R2(config-line)#login
5 R2(config-line)#line vty 0 4
6 R2(config-line)#pass ccna
7 R2(config-line)#login
8 R2(config-line)#exit
9 R2(config)#service password-encryption
10 R2(config)#end
11 R2#

R3、R4、SW1、SW2配置和R1、R2相同,这里就不贴出来了。

4.配置VTP协议。

SW1配置:

1 /*配置和SW2相连的端口为主干端口*/
2 SW1(config)#int fa 0/23
3 SW1(config-if)#swi mod trunk
4 SW1(config-if)#int fa 0/24
5 SW1(config-if)#swi mod trunk
6 SW1(config-if)#exit
7
8 /*配置VTP*/
9 SW1(config)#vtp domain ccna
10 Changing VTP domain name from NULL to ccna
11 SW1(config)#vtp pass ccna
12 Setting device VLAN database password to ccna
13 SW1(config)#vtp mode server
14 Device mode already VTP SERVER.
15 SW1(config)#end
16 SW1#

SW2配置:

1 SW2(config)#int fa 0/23
2 SW2(config-if)#swi mod trunk
3 SW2(config-if)#int fa 0/24
4 SW2(config-if)#swi mod trunk
5 SW2(config-if)#exit
6
7 SW2(config)#vtp domain ccna
8 Domain name already set to ccna.
9 SW2(config)#vtp pass ccna
10 Setting device VLAN database password to ccna
11
12 /*SW2配置成VTP Client*/
13 SW2(config)#vtp mode client
14 Setting device to VTP CLIENT mode.
15 SW2(config)#end
16 SW2#

5.配置VLAN。

SW1配置:

1 SW1(config)#vlan 2
2 SW1(config-vlan)#name vlan2
3 SW1(config-vlan)#vlan 3
4 SW1(config-vlan)#name vlan3
5 SW1(config-vlan)#exit
6 SW1(config)#int fa 0/1
7 SW1(config-if)#swi mod acc
8 SW1(config-if)#swi acc vlan 2
9 SW1(config-if)#int fa 0/2
10 SW1(config-if)#swi mod acc
11 SW1(config-if)#swi acc vlan 3
12 SW1(config-if)#int fa 0/22
13 SW1(config-if)#swi mod trunk
14 SW1(config-if)#end
15 SW1#

SW2配置:

1 SW2(config)#int fa 0/1
2 SW2(config-if)#swi mod acc
3 SW2(config-if)#swi acc vlan 2
4 SW2(config-if)#int fa 0/2
5 SW2(config-if)#swi mod acc
6 SW2(config-if)#swi acc vlan 3
7 SW2(config-if)#end
8 SW2#

6.配置STP。

SW1配置:

1 /*将SW1配置成VLAN1/2/3的根交换机*/
2 SW1(config)#spanning-tree vlan 1,2,3 root primary
3 SW1(config)#end
4 SW1#

7.配置DHCP。

R1配置:

1 R1(config)#ip dhcp excluded-address 192.168.2.1


2 R1(config)#ip dhcp excluded-address 192.168.3.1
3 R1(config)#ip dhcp pool pool-1
4 R1(dhcp-config)#network 192.168.2.0 255.255.255.0
5 R1(dhcp-config)#default-router 192.168.2.1
6 R1(dhcp-config)#dns-server 174.1.1.2
7 R1(dhcp-config)#exit
8 R1(config)#ip dhcp pool pool-2
9 R1(dhcp-config)#default-router 192.168.3.1
10 R1(dhcp-config)#network 192.168.3.0 255.255.255.0
11 R1(dhcp-config)#dns-server 174.1.1.2
12 R1(dhcp-config)#end
13 R1#

配置完成DHCP服务后,PC1、PC2、PC3都可以获得正确的IP地址。

8.配置静态路由和动态路由协议。

R1配置:

1 /*指向R2的默认路由*/
2 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
3 R1(config)#end
4 R1#

R2配置:

1 /*所有接口都宣告进OSPF进程*/
2 R2(config)#router ospf 1
3 R2(config-router)#net 0.0.0.0 255.255.255.255 area 0
4 R2(config-router)#end
5 R2#

R3配置:

1 R3(config)#router ospf 2
2 R3(config-router)#net 0.0.0.0 255.255.255.255 area 0
3 R3(config-router)#end
4 R3#

R4配置:

1 R4(config)#router ospf 3
2 R4(config-router)#net 0.0.0.0 255.255.255.255 area 0
3 R4(config-router)#end
4 R4#

9.配置PPP。

R1配置:

1 /*配置CHAP验证时需要使用的用户名和密码*/
2 R1(config)#username R2 pass ccna
3
4 /*配置PPP封装和CHAP验证*/
5 R1(config)#int s 0/0/0
6 R1(config-if)#encapsulation ppp
7 R1(config-if)#ppp authentication chap
8 R1(config-if)#end
9 R1#

R2配置:
1 R2(config)#username R1 password ccna
2 R2(config)#int s 0/0/0
3 R2(config-if)#encapsulation ppp
4 R2(config-if)#ppp authentication chap
5 R2(config-if)#end
6 R2#

10.配置NAT。

R1配置:

1 /*指定对内端口和对外端口*/
2 R1(config)#int fa 0/0.1
3 R1(config-subif)#ip nat inside
4 R1(config-subif)#int fa 0/0.2
5 R1(config-subif)#ip nat inside
6 R1(config-subif)#int fa 0/0.3
7 R1(config-subif)#ip nat inside
8 R1(config-subif)#int s0/0/0
9 R1(config-if)#ip nat outside
10 R1(config-if)#exit
11
12 /*配置允许内部那些地址进行NAT转换*/
13 R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
14 R1(config)#access-list 1 permit 192.168.2.0 0.0.0.255
15 R1(config)#access-list 1 permit 192.168.3.0 0.0.0.255
16
17 /*开启转换*/
18 R1(config)#ip nat inside source list 1 interface s 0/0/0 overload
19
20 /*
21 * 使用静态端口映射,
22 * 让外网可以通过R1的s0/0/0接口IP访问内网Server1的WWW服务。
23 */
24 R1(config)#ip nat inside source static tcp 192.168.2.2 80 12.1.1.1 80
25 R1(config)#end
26 R1#

开启静态映射后,可以在Server2上使用WEB浏览器输入12.1.1.1就能直接打开Server1的WWW服务默认页面。

11.配置ACL阻止VLAN3中的计算机访问Server2的WWW服务。

在没有配置ACL之前,PC2、PC3能够正常通过WEB浏览器访问174.1.1.2的WWW服务。

R1配置:

1 /*使用扩展ACL,仅阻止VLAN3去往Server2 TCP 80端口的流量。*/


2 R1(config)#access-list 100 deny tcp 192.168.3.0 0.0.0.255 host 174.1.1.2 eq 80
3 R1(config)#access-list 100 permit ip any any
4
5 /*在子接口上应用这个扩展ACL*/
6 R1(config)#int fa 0/0.3
7 R1(config-subif)#ip access-group 100 in
8 R1(config-subif)#end
9 R1#
10
11 /*这个ACL配置完成后PC2、PC3再使用WEB去浏览174.1.1.2就连接不上了。*/

实验完成。

为了方便大家学习,我将这个实验的完整配置和拓扑保存了下来,大家可以去百度网盘(下载地址)下载这个实验的配
置,用”Cisco Packet Tracer 5.3″打开即可。

[**] 注:如文中未特别声明转载请注明出自: QingSword.COM

此条目由 晴刃 发表在 CCNA、Cisco技术 分类目录,并贴了 网络技术 标签。将固定链接加入收藏夹。

You might also like