2009年1月10日星期六

DHCP中继代理

运行Cisco IOS软件的路由器包括DHCP服务器和中继代理软件。任何可以在客户端和服务器之间转发DHCP包的主机都可以称为DHCP中继代理。默认情况下,Cisco IOS DHCP服务器和中继代理都是开启的。可以通过检查配置文件,查看它们是否被禁用。如果它们被禁用,会在配置文件看到no service dhcp命令。使用servcie dhcp 命令可以重新启用这个功能。
只有配置了ip helper-address 命令,Cisco IOS DHCP relay 代理功能才能在某个端口被启用(中继代理是配置在端口上的,这个端口是与DHCP客户端直接相连的路由器的端口)。这个命令可以使DHCP广播转发到配置好的DHCP服务器。
当DHCP服务器和客户端不在同一个物理网段的时候,使用DHCP中继代理来在客户端和服务器之间转发DHCP请求和回复。中继代理的转发与普通的IP路由转发是有区别的。IP数据包能够在网络之间透明的转发。中继代理收到DHCP消息然后重新生成一个新的DHCP消息,然后从另一个端口转发出去。中继代理会设置网关地址(在DHCP包的giaddr字段),如果被配置了,还可以在包中增加中继代理信息选项(选项82),然后将包转发到DHCP服务器。在移除了选项82后,从服务器返回的数据包会被转发回客户端。
注:这个网关地址是指与客户端直接相连的路由器的接口地址,即客户端所在网段的网关。
另外,移除选项82是在服务器上移除。
一、配置DHCP中继代理将包转发给DHCP服务器
因为DHCP客户端不知道他们与那个网络相连,DHCP客户端会使用UDP广播来发送他们的初始化DHCPDISCOVER信息。如果在一个物理网段(在一个广播域中)上的客户端中不包括一个DHCP服务器,UDP广播通常是不会被转发的,因为路由器默认不会转发广播流量。
我们可以通过配置接收广播的路由器接口,使它将特定类型的广播转发给一个helper地址。我们可以在一个端口上设置多个helper地址。
当一个路由器转发这些地址分配/参数请求信息时,它就是一个DHCP中继代理。Cisco路由器通过在接口配置模式下,使用ip helper-address命令,能够完成DHCP中继代理的功能。
DHCP客户端在本地LAN上广播请求IP地址和其他配置属性,DHCP中继代理接收到这个广播,重新生成一个新的DHCP消息,然后从另一个端口发送出去。中继代理会将配置了ip helper-address命令的接口的IP地址,填充到DHCP数据包中giaddr(IP地址网关)区域。giaddr区域包含的这个IP地址,会帮助DHCP决定那个子网应该接收这个请求,以及标识合适的IP地址串(即帮助DHCP服务器决定应该使用那个子网池中的IP地址来响应这个请求,这个子网池是giaddr区域中的IP地址所在的子网)。DHCP中继代理通过IP单播,发送本地广播给DHCP服务器,这个DHCP服务器是端口配置模式下,由ip helper-address指定的IP地址。
注:DHCP服务器会优先选择DHCP中继代理所在的子网的IP地址,分配给客户端,此外,DHCP中继代理是配置在端口上的。
router(config)#interface type number
router(config-if)#ip helper-address address

注:当采用ip helper-address命令的时候,需要确认在UDP广播数据包需要经历的任何外出接口上都没有配置ip directed-broadcast命令。通过使用no ip directed-broadcast命令,可以使得路由器和交换机能够防止将定向广播转换为物理广播。自从Cisco IOS版本12.0以来,禁用定向广播是一种默认启用的安全措施。
(这个命令是必需的)转发UDP广播,包括BOOTP和DHCP的UDP广播。这里address参数,可以指定一个DHCP服务器地址。如果其他DHCP服务器都在目的网段上,也可以使用该网段的网络地址作为address,使用网络地址能够使其他DHCP服务器回应DHCP请求。
如果有多个DHCP服务器,可以为每个服务器配置一个helper地址
二、为DHCP中继代理配置支持中继代理信息选项
DHCP自动分配地址是基于IP地址的,这个IP地址可能是网关IP地址(DHCP数据包giaddr区域),也可能是入口的IP地址。在某些网络中,需要用其他的信息,来进一步决定应该分配那个IP地址。通过使用中继代理信息选项(选项82),当把来自客户端的DHCP包转发给DHCP服务器时,Cisco IOS中继代理可以将关于它自己的额外信息包括到中继代理信息中。
通过使用ip dhcp relay information option命令,Cisco IOS可以支持这个功能。中继代理会自动地将电路标识子选项(circuit identifier suboption)和远程IP子选项添加到中继代理信息选项中,然后将包含中继代理信息的DHCP包转发给DHCP服务器。、
DHCP服务器能够使用这些信息来为每个服务器提供网络中的服务提供者(subscriber)分配IP地址,进行访问控制,设置QoS以及安全策略(或者其他属性分配策略)。
注:当从DHCP服务器回复的DHCP包转发回DHCP客户端时,在中继代理(这里的中继代理就是指客户端所在网段的中继代理端口,因为后面中继代理直接用单播将DHCP包发送给DHCP服务器,途中经过的其它中继代理时,其他中继代理所采取的策略,在下面设置)那里,将中继代理选项(选项82)剥除(不是在DHCP服务器端剥除),完成策略,将DHCP包转发给主机,最后完成IP地址分配。
1、中继代理信息重新转发策略
一个中继代理可能会收到从其他DHCP中继代理那里发送的已经包含中继信息的消息。默认情况下,从前一个中继代理那里收到的中继信息会被替换。如果这个设置不适合我们的网络,我们可以在全局配置模式下,使用命令:ip dhcp relay information policy {drop | keep | replace}来修改。
为了使重新转发策略能够正确执行,必须要先禁用中继代理信息检查。可以在全局配置模式下,使用ni ip dhcp relay information check命令。
配置步骤:
router(config)#ip dhcp relay information option
启用系统插入DHCP中继代理信息选项(选项82)的功能,在把BOOTREQUEST消息的过程中。者功能默认是禁用的。
router(config)#ip dhcp relay information check
这个配置是可选的。配置这个命令可以使该路由器,检查包含在转发的BOOTREPLY信息中的中继代理信息选项,是否可用。
默认情况下,如果从DHCP服务器哪里接收到可用的DHCP回复包,DHCP中继代理就检查选项82区域。如果收到一个不可用的消息,中继代理就丢弃它。当中继代理收到一个可用的消息的时候,中继移除选项82区域,然后转发这个DHCP包。如果被禁用,可以使用ip dhcp relay information check命令来重新启用这个功能。
router(config)#ip dhcp relay information policy {drop | keep | replace}
这个配置也是可选的,这个命令可以为中继代理制定转发策略(即,当一个消息中已经包含中继信息时,中继代理应该怎么做)。
router(config)#ip dhcp relay information trust-all
这个配置是可选的,将路由器上所有的接口,配置为信任DHCP中继信息选项的源。默认情况下,如果网关地址被设置为0,而且包汇总的中继代理信息选项已经存在,这种情况下,中继代理就会丢弃这个包。可以使用ip dhcp relay information trust-all命令来跳过这个行为,接受这种包。
如果在客户端和中继代理之间有交换机,而且这个交换机可能会插入选项82。这个时候,这个命令就相当有用。可以使用这个命令来保证这些包不会被丢弃。
此外,我们还可以配置中继代理信息选项的贡献者标识符子选项:
1、enable
2、configure terminal
3、ip dhcp relay information option
4、interface type number
5、ip dhcp relay information option subscriber-id string
配置DHCP中继代理支持MPLS VPNs:
1、enable
2、configure terminal
3、ip dhcp relay information option vpn
4、interface type number
这里的接口指的是VPN连入的接口。
5、ip helper-address vrf vrf-name [global] address
使用Smart中继代理转发,将DHCP广播的网关地址配置一个备用地址
1、enable
2、configure terminal
3、ip dhcp smart-relay
要使得这个功能有作用,首先要保证中继代理接口上有两个IP地址。在请求IP地址时,首先使用主要IP地址,填充DHCP包的giaddr区域,然后发送请求,如果请求没有回应,则使用备用IP地址填充DHCP包的giaddr区域,然后继续发送请求。
注:如果中继端口的主IP地址为192.168.1.0段,则DHCP服务器返回的IP地址也为192.168.1.0段。同样的,如果备用IP地址为10.0.0.0段,则返回的是10.0.0.0段的IP地址(giaddr的作用)。


三、DHCP中继代理排错
show ip route dhcp
显示被Cisco IOS DHCP服务器和中继代理添加的所有路由
show ip route dhcp ip-address
显示被Cisco IOS DHCP服务器和中继代理添加的某个IP地址的路由
show ip route vrf vrf-name dhcp
显示被Cisco IOS DHCP服务器和中继代理添加的名字为vrf-name的vrf路由
clear ip route [vrf vrf-name] dhcp [ip-address]
移除为在unnumbered端口上的DHCP客户端添加的路由表上的路由。

2009年1月9日星期五

DHCP服务器配置(二)

五、配置手动绑定
地址绑定是在主机MAC地址和IP地址的映射。客户端的IP地址可以手动分配,也可以通过DHCP服务器的地址池自动分配。
手动绑定就是指:手动将IP地址映射到DHCP数据库中的主机的MAC地址。这些手动绑定的信息,存储在DHCP服务器的NVRAM中。手动绑定是特殊的地址池。手动绑定没有数量的限制,但是我们只能给每个主机池配置一个手工绑定(手动绑定是一个特殊的地址池,只有一个IP地址)。
自动绑定是将IP地址自动映射到在DHCP数据库中存储的主机的MAC地址。自动绑定存储在一个远端主机,数据库代理中。为了便于管理,这个绑定以TXT文本的形式保存(绑定与自动分配是有区别的,所有的绑定,不管是自动绑定还是手动绑定,都需要统计所有主机的MAC地址,只有当主机的MAC地址在数据库中存在时,DHCP服务器才会给它分配IP地址。而自动分配不需要统计MAC地址,就可以获取IP地址)。
所有的DHCP客户端会在DHCP数据包中发送客户端标识符(DHCP选项61)。为了配置手动绑定,我们必须在DHCP池配置模式下,使用client-identifier命令,用合适的十六数标识DHCP客户端。
配置手动绑定,首先要创建主机池,然后指定客户端的IP地址和客户端标识或者硬件地址。
按照下列步骤,配置手动绑定:

1、创建DHCP服务器上的地址池,并指定一个名字
router(config)#ip dhcp pool name
输入这个命令后,会进入DHCP池配置模式,提示符变为:dhcp-config
2、指定客户端的IP地址以及子网掩码
router(dhcp-config)#host address [mask /prefix-length]
3、指定具有哪些唯一标识符的客户端可以使用这个池。这个命令用于DHCP请求
router(dhcp-config)#client-identifier unique-identifier
DHCP客户端需要客户端标识符。客户端标识符是以点分十六进制的形式指定。比如01b7.0813.8811.66,其中01表示以太网媒体类型。
4、指定具有哪些硬件地址的客户端可以使用这个池。这个命令用于BOOTP请求(可选)

router(dhcp-config)#hardware-address hardware-address type
这里的type值用于确定硬件平台所用的协议。可以使用字符串,也可以使用数值。字符串的选项有:ethernet和ieee802;值的选项有:1标识10mb Ethernet,6标识IEEE802。如果没有指定类型,默认类型是Ethernet
5、指定具有那些名称的客户端可以使用这个池
router(dhcp-config)#client-name name
用任意的标准ASCII码字符串来指定客户端的名字。这里的客户端的名字不能包含域名。比如如果一个客户端的名字为mark,它所在的域为cisco.com,这里输入的名字应该为mark,而不应该是mark.cisco.com
6、我们可以使用debug ip dhcp server packet命令来查看,客户端是否被正确指定了IP地址。
注:这里的地址池,可以只有一个IP地址,并且给它指定一个客户端标识,此时,这个就是手动绑定。如果地址池是一个地址段,而且指定了多个客户端标识,那么这个就是自动绑定。
注:主机标识大部分情况下使用的是硬件地址,也可以修改,根据客户端操作系统不同,修改方式也不同。
六、配置DHCP服务器引导文件

引导文件用于为客户端存储引导镜像。这里的引导镜像就是客户端用来装载的操作系统。在DHCP池配置模式下,使用下列命令可以为DHCP客户端指定一个引导镜像:
router(dhcp-config)#bootfile filename
指定用作引导镜像的文件的名字,这个用于客户端从网络启动系统(无盘工作站?)。
七、配置Ping包的数量
默认情况下,在将池中的某个IP地址分配给发出请求的客户端的时候,DHCP服务器会Ping两次这个IP地址。如果Ping没有响应,DHCP服务器就会假定这个IP地址没有被使用(有极大的可能),因此将这个地址分配给发出请求的客户端。在全局配置模式下,可以使用下列命令,来改变在分配某个IP地址之前,Ping这个IP地址的次数:
router(config)#ip dhcp ping packets number
默认情况是Ping两次,可以将count这个参数设为0来彻底关闭DHCP服务器的Ping操作
八、配置Ping包的Timeout值
默认的timeout值为500毫秒,在全局模式下,使用下面的命令:
router(config)#ip dhcp ping timeout milliseconds
来修改timeout的值
九、激活某个端口的DHCP客户端功能
在端口配置模式下,使用下面的命令:
router(config-if)#ip address dhcp [client-id interface_name ] [hostname host_name]
指定该端口通过DHCP来获取IP地址(acquire 获取)
十、配置DHCP服务器选项输入和自动配置
Cisco IOS DHCP服务器能够自动的配置选项,来回应用户设备(customer premises equipment CPE)后面的本地主机的DHCP请求。这些自动配置的选项比如有:DNS或者WINS地址等。(例如当用户使用路由器做NAT时,这个路由器同时也会有DHCP的功能,如果不使用自动配置,则每次改变DNS的地址,都需要在做了NAT的路由器上重新配置分配给DNS地址。此外,客户端设备不会自动通过DHCP请求获取到DNS等的信息,大概可以这么理解)
以前,网络管理员需要在每个启用了这个功能的设备上手动配置Cisco IOS DHCP服务器。Cisco IOS DHCP服务器能够允许配置信息自动更新。网络管理员可以指定一个或多个中央DHCP服务器来更新地址池中特定的DHCP选项爱那个。远端服务器可以从中央服务器那里请求或者输入这些选项属性。
注:输入的这些信息,不是路由器配置的一部分,不会存储在NVRAM中,类比VTP中的客户端,接收到的VLAN信息不会存储在NVRAM中,重新开机时会丢失这些信息。
1、配置中央路由器,指定更新DHCP地址池中特定的DHCP选项:
router(config)#ip dhcp pool name
为DHCP服务器地址池创建一个名字,进入DHCP池配置模式。
router(dhcp-config)#network network-number [mask /prefix-length]
router(dhcp-config)#dns-server address [address2 ... address8]
2、配置需要在DHCP服务器数据库中输入DHCP选项的远端路由器
router(config)#ip dhcp pool name
这里的名字,指的是:这个路由器用于分配IP地址的地址池的名字,它分配给它后面的设备IP地址
router(dhcp-config)#network network-number [mask /prefix-length]
这里的IP地址也是用于分配给本地的设备的IP地址。与主DHCP服务器无关
router(dhcp-config)#import all
将DHCP选项参数插入到DHCP服务器数据库
router(dhcp-config)#exit
router(config)#interface type number
进入端口配置模式,这个端口是与中央DHCP服务器相连的端口(即接收中央DHCP服务器更新的端口)
router(config-if)#ip address dhcp [client-id interface name] [hostname host-name]
指定这个端口通过DHCP接收IP地址
这样配置完成之后,只需要在中央服务器上修改DNS等的配置,远端路由器下面的客户端通过DHCP服务器所获取的DNS地址也会自动改变。不然的话,我们需要的在每个路由器上都要修改DNS地址。
十一、配置DHCP服务器确认在BOOTREPLY信息中的中继代理信息选项生效
在全局配置模式下使用命令:
router(config)#ip dhcp relay information check
来指定DHCP路由器检查在被转发的BOOTREPLY信息中的中继代理信息是否可用
十二、配置中继代理信息的转发策略
即当DHCP服务器发现,一个被转发的信息中已经包含了中继信息时,它应该怎么做。
在全局配置模式下,使用命令:
router(config)#ip dhcp relay information policy {drop |keep |replace}
决定一个电缆调制解调器终端系统上的中继信息转发策略
十三、启用DHCP Smart-Relay功能
默认情况下,DHCP Smart-Relay功能是禁用的,在全局配置模式下使用命令:
router(config)#ip dhcp smart-relay
来允许DHCP中继代理将网关地址(DHCP包的giaddr字段)改变为备用地址,当从DHCP服务器那里接收不到DHCPOFFER时。
十四、DHCP服务器的监视和管理
1、router#clear ip dhcp binding {address *}
删除DHCP数据库中的自动地址绑定。使用address参数,删除指定地址的自动绑定。使用*则清除所有的自动绑定
2、router#clear ip dhcp confilct {address *}
清除来自DHCP数据库的一个地址冲突
3、router#clear ip dhcp server statics 将所有DHCP服务器的计数器置为0
4、router#clear ip route [vrf vrf-name] dhcp [ip-address]
vrf虚拟路由和转发技术
移除由Cisco IOS DHCP服务器添加到路由器表中的路由,或者是移除在unnumbered端口上的中继代理
启用DHCP服务器debug
router#debug ip dhcp server {events |packets | linkage}
显示DHCP服务器信息:
1、router#show ip dhcp binding [address]显示所有由这个DHCP服务器创建的所有绑定的列表。使用show ip dhcp binding命令可以显示主机IP地址的租约释放时间和日期,也可以用这个命令来显示已经分配了的IP地址
2、router#show ip dhcp conflict [address]显示由这个DHCP服务器所记录的所有地址冲突的列表
3、router#show ip dhcp database [url] 显示DHCP数据库中最近的活动情况
4、router#show ip dhcp server statistics 显示服务器统计信息和消息的发送接收情况
5、router#show ip dhcp import 显示我们输入到DHCP服务器数据中的选项参数。被插入的选项参数不是路由器配置的一部分,不会被保存在NVRAM中(类似VTP中的客户端,接收到的VLAN信息不会存储在NVRAM中)
6、router#show ip route [vrf vrf-name] dhcp [ip-address] 显示被Cisco IOS DHCP服务器添加到路由表中的路由和中继代理

2009年1月8日星期四

DHCP服务器配置(一)

DHCP服务器数据库是以树的形式组织的。树的根是为实际网络设置的地址池,树干是子网地址池,叶是人工绑定给客户端的地址。子网继承父网络的属性,客户端继承子网的属性。因此,像域名一类的普通属性,应该配置在树的最高层次(比如父网络,或者子网)。
注:继承属性可以被覆盖。例如,如果一个属性在实际网络和一个子网中被同时定义,那个实际使用的是子网中定义的属性。
地址租约是不会继承的,如果一个IP地址的租约没有没特别设定,默认情况下,DHCP服务器会为这个IP地址分配一个一天的租约。
配置Cisco IOS DHCP服务器功能,一般包括下面这些任务:
1、配置数据库代理或者禁用冲突记录
2、确定DHCP服务器可以分配和不可以分配给客户端的IP地址
一、启用Cisco IOS DHCP服务器和中继代理功能
默认情况下,Cisco IOS DHCP服务器和中继代理功能在路由器上是启用的,如果它们被禁用了,需要重新启用,在全局配置模式下使用下面的命令:
router(config)#service dhcp
在路由器上,启用Cisco IOS DHCP服务器和中继功能。使用no命令可以禁用Cisco IOS DHCP服务器和中继功能
注:这个命令是可选的,因为默认是启用的。
二、配置DHCP数据库代理或者禁用DHCP冲突记录
DHCP数据库代理可以是任何用于存储DHCP捆绑数据库的主机(可以理解为用来存储那些IP被使用一类的信息)(例如:FTP、TFTP或者RCP服务器)。我们可以配置多个DHCP服务器代理。也可以配置每个代理之间同步数据库更新和传输。可以在全局配置模式下,使用下面的命令来配置数据库代理和数据库代理的属性:
router(config)#ip dhcp database url [timeout seconds write-relay seconds]
配置数据库代理以及配置数据库更新和数据库转移之间的间隔
如果选择不配置DHCP数据库代理,需要在DHCP服务器上配置禁用DHCP地址冲突记录。可以使用下列命令禁用DHCP地址冲突记录:
router(config)#no ip dhcp conflict logging
禁用DHCP地址冲突记录,默认情况下,Cisco IOS DHCP服务器会在一个日志文件中记录DHCP地址冲突。
三、排除IP地址
DHCP服务器会假定DHCP地址池中的所有IP地址都是可以分配给DHCP客户端的。我们必须将某些不分配给客户端的IP地址排除,可以在全局配置模式下,使用下面的命令来排除IP地址:
router(config)#ip dhcp excluded-address low-address [high-address]
排除那些不分配给客户端的IP地址
四、配置DHCP地址池
我们可以使用一个字符串或者一个整数来命名DHCP地址池。配置DHCP地址池会使你进入DHCP池配置模式。在这个模式下,可以配置池的相关属性,比如:IP子网号和默认路由器列表等。通过下列步骤,配置DHCP地址池:
1、配置DHCP地址池名称,并且进入DHCP池配置模式:
使用下列命令,配置DHCP地址池名称,进入DHCP池配置模式:
router(config)#ip dhcp pool name
为DHCP服务器地址池创建一个名字,并使你进入DHCP池配置模式(提示符变为:dhcp-config#)
2、配置DHCP地址池子网和掩码
为新创建的DHCP地址池配置一个子网和掩码,这里包含了DHCP服务器可以分配给客户端的可用的IP地址序列。在DHCP池配置模式下,使用下列命令:
router(dhcp-config)#network network-number [mask /prefix-length]
例如:router(dhcp-config)#network 192.168.0.0 /24
确定DHCP地址池的子网网络号和掩码
注:在配置了network命令的地址池,不能再使用人工绑定命令。
3、配置域名
DHCP客户端的域名将这个客户端配置在组成这个域的一系列网络中。在DHCP池配置模式下,可以为客户端配额制一个域名字符串:
router(dhcp-config)#domain-name domain
为客户端确定域名
4、配置DNS服务器地址
DHCP客户端用于请求DNS解析的服务器。在DHCP池配置模式下,使用下面的命令配置:
router(dhcp-config)#dns-server address [address2 ... address8]
指定DHCP客户端可用的DNS服务器,至少要设置一个,但是在一个命令中可以最多指定8个IP地址。
5、配置NetBIOS WINS服务器
WINS(Windows Ineternet Naming Service)是在网络中,微软DHCP客户端用来将主机名和IP地址进行关联的一个名字解析服务。在DHCP池配置模式下,配置NetBIOS WINS服务器,使微软DHCP客户端可以使用WINS服务:
router(dhcp-config)#netbios-name-server address [address2 ... address8]
指定微软DHCP客户端可以使用的NetBIOS WINS服务器。至少要指定一个地址,但是在一条命令中,最多可以指定八个地址。
6、配置NetBIOS节点类型
为微软DHCP客户端配置的NetBIOS节点类型可以是这四种的一种:broadcast、peer-to-peer、mixed或者hybrid。在DHCP池配置模式下,可以使用下列命令为微软DHCP客户端配置NetBIOS节点类型:
router(dhcp-config)#netbios-node-type type
为微软DHCP客户端指定NetBIOS节点类型
7、配置客户端的默认路由器(即,默认网关)
在DHCP客户端引导完成以后,客户端开始将数据包发送给它的默认路由器。默认路由器的IP地址必须与客户端在同一子网中。在DHCP池配置模式下,为DHCP客户端指定默认路由器:
router(dhcp-config)#default-router address [address2 ... address8]
为DHCP客户端指定默认路由器的IP地址。至少要指定一个IP地址,在一条命令中,最多可以指定八个地址。
8、配置地址租期
默认情况下,DHCP服务器分配的IP地址都是一天的租期。在这个期间内,这个IP地址可用。在DHCP池配置模式下,使用下列命令,可以改变IP地址的默认租期:
router(dhcp-config)#lease {days [hours] [minutes] infinite}
指定租约的持续时间,默认是一天。可以使用show ip dhcp binding来显示主机IP地址的租约失效时间和日期。

2009年1月7日星期三

DHCP简介

DHCP:Dynamic Host Configuration Protocol 动态主机配置协议。DHCP是由RFC2131来进行定义的。DHCP为网络主机提供配置参数。DHCP包括两个要素:一个是用来将每个主机的配置属性从DHCP服务器传递到主机的协议;一个是将IP地址分配给主机的机制。DHCP采用的是客户端/服务器的模式,指定的DHCP服务器提供网络地址并将配置属性提供给动态配置的主机。默认情况下,运行思科IOS的路由器包括DHCP服务器和中继代理的功能。
DHCP支持三种IP地址的分配机制:
1、自动分配:DHCP将一个IP地址永久的分配给一个主机
2、动态分配:DHCP将一个IP地址分配给一个主机,但是这个分配是有时间限制的(或者直到主机释放这个IP)。
3、手动分配:网络管理员将一个IP地址分配给一个主机,DHCP仅仅用于简单的将IP地址传递给主机。
DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息的格式的,这保证了DHCP消息可以被BOOTP中继代理支持,从而可以使BOOTP客户端和DHCP服务器之间进行交互。BOOTP中继代理可以使得我们不必为每个物理网段配置一个DHCP服务器。BOOTP在RFC951(Bootstrap Protocol)和RFC1542(Clarifications and Extensions for the Bootstrap Protocol BooTP的澄清和扩展)中被解释。
一、DHCP服务器
Cisco IOS DHCP服务器具有DHCP服务器的全部功能。可以将路由器中指定的地址池中IP地址分配给DHCP客户端,并且能够管理这些IP地址。如果Cisco IOS DHCP服务器自己的数据库无法满足一个DHCP请求,那么它会将这个请求转发给一个或多个网络管理员定义的DHCP服务器。
当一个DHCP客户端从一个DHCP服务器哪里请求IP地址时基本的步骤:
1、客户端发送DHCPDISCOVER广播信息来发现一个Cisco DHCP 服务器。
2、DHCP服务器使用DHCPOFFER单播信息,将配置属性,比如IP地址、MAC地址、域名、以及租期,发送给客户端。
3、客户端使用DHCPREQUEST广播消息,作为正式的请求,来请求前面DHCP服务器分配的IP地址等。
4、DHCP服务器返回一个DHCPACK单播信息给客户端,确认分配给客户端的IP地址信息。
注:DHCP客户端可以从多个DHCP服务器哪里接收回复,并且可以接收其中任意一个回复。但是,客户端通常接受它收到的第一个回复。此外,从DHCP服务器哪里收到回复,并不保证这个IP地址就被分配给了这个客户端,服务器通常会保留这个地址,直到客户端正式地请求这个地址。
注:对DHCP服务器提供的IP地址的正式请求(即DHCPREQUEST信息)通常被客户端以广播的形式发送,这样网络上的所有其他DHCP服务器都能将它们提供给客户端的IP地址回收(这些其他服务器就是先前收到了客户端的DHCPDISCOVER消息的服务器,这些服务器给客户端提供了IP地址,但是没有被客户端采用)。
如果在DHCP服务器发送给客户端的DHCPOFFER单播消息中存在错误的配置属性,从而导致该配置不可用,那么这个客户端就会将一个DHCPDECLINE广播消息返回给DHCP客户端。
如果在属性协商的过程中发生了错误,或者客户端对DHCP服务器的DHCPOFFER消息反应很慢,从而导致DHCP服务器已经将这些属性分配给了另一个客户端,这个时候DHCP服务器就会给客户端发送一个DHCPNAK否认广播消息,这个消息意味着先前提供的配置属性还没有被分派。
DHCP还定义了一个进程,通过这个进程,DHCP服务器能够知道DHCP客户端所在的IP子网。并且能够从由那个子网中可用IP地址组成的池中,选取一个IP地址,分配给客户端。
DHCP服务器使用下面的步骤,来确定使用那个DHCP地址池,来响应客户端请求:
1、如果客户端不是直接与DHCP服务器连接(即,DHCPDISCOVER广播消息的giaddr区域是非零的。giaddr为gateway ip address),DHCP服务器会根据在DHCPDISCOVER消息的giaddr区域中包含的IP地址,来选择一个地址池(这个地址池包含giaddr包含的IP地址所在的子网),DHCP会从这个地址池中选择一个IP地址,并将这个地址包含在DHCPOFFER中,分配给这个客户端。
2、如果客户端是直接连到DHCP服务器上的(即giaddr区域是0),DHCP服务器会使用接收到DHCPDISCOVER消息的端口,用这个端口所在的子网,来匹配DHCP地址池。如果这个端口有备用IP地址,那么只会在这个端口上的主要IP地址所在的子网耗尽的情况下,才会使用这个备用IP地址所在的子网,用于分配IP地址。
Cisco IOS DHCP服务器功能提供了以下的好处:
1、降低了网络访问花费:在每个远端站点使用自动IP地址分配本质上来说缩减了网络访问花费。静态IP地址是更加昂贵的,比动态分配IP地址来说。
2、减少了客户端配置的任务和花费:因为DHCP很容易配置,它减少了设备配置的任务和花费,甚至可以让非技术用户都可以轻松配置。
3、便于集中管理:因为DHCP服务器可以管理多个子网。当配置属性改变的时候,管理员只需要更新一个中心服务器。
在配置Cisco IOS DHCP服务器以前,要完成下面的任务:
1、确定一个外部的FTP(File Transport Protocol)、TFTP(Trivial File Transport Protocol)或者RCP(Remote Copy Protocol)服务器,用于存储DHCP捆绑数据库(这个捆绑数据库用于DHCP 监控,DHCP snoop,用于存储IP地址、MAC地址等信息)。
2、确定DHCP服务器可以分配的IP地址,以及那些你想要排除的IP地址。
3、为需要的设备确定DHCP选项,包括:默认引导镜像名、默认路由器、DNS服务器、NetBIOS服务器
4、决定NetBIOS节点类型(b、p、m、or h)(节点类型决定客户端使用何种方式,来将NetBIOS名解析为IP地址)
5、决定DNS域名
二、DHCP客户端
Cisco IOS DHCP客户端(可以使用DHCP协议给运行Cisco IOS的设备分配IP地址,在路由器上可以支持到端口的IP地址分配?)可以使你从DHCP服务器哪里动态获取一个IP地址。在Cisco IOS Release 12.2中,只有ethernet端口能够支持DHCP客户端,随着改进,现在所有的端口类型都能支持DHCP客户端。Cisco IOS DHCP客户端有以下优点:
1、减少了配置和部署(deploy)时间
2、减少了配置错误的数量
3、可以使用户集中管理分配给Cisco IOS 路由器的IP地址
三、DHCP中继代理
DHCP中继代理可以是任何能够在DHCP服务器和客户端之间转发DHCP包的主机。当DHCP服务器和客户端不在一个物理网段的时候,DHCP中继代理被用于转发DHCP请求和回复。DHCP中继代理的转发与IP路由器的转发是明显不同的。IP路由器在网络之间透明的转发IP数据报。而中继代理接收DHCP消息然后重新生成一个新的DHCP消息,再将DHCP消息从另一个端口发送出去。
Cisco IOS DHCP中继代理支持未编号端口的使用,DHCP中继代理可以自动将未编号端口标记为外部端口,并增加一个静态主机路由。
注:未编号端口:主要是为了减少IP的占用,将两个端口使用同一个IP地址。例如:在端口e1的端口配置模式下使用命令ip unnumbered ethernet 0,那么e1会同时使用e0的IP地址。两个端口共享e0的IP地址。

VLAN间路由

VLAN间的路由可以是用外部路由器(即单臂路由的模式)或者使用层三交换机的路由模块进行路由。
一、层三交换机的三层路由模块(使用SVI):
注:SVI:交换机虚拟接口是一种第3层接口,它是为在Catalyst多层交换机上完成VLAN间路由选择而配置的接口。SVI是一种与VLAN-ID相关联的虚拟VLAN接口,其目的在于启用该VLAN上的路由选择能力。为了配置VLAN之间的通信,就必须为每个SVI配置IP地址和子网掩码,并且要求SVI属于为子网所选择的地址范围。与SVI相关联的IP地址是该网段主机的默认网关。
这里以在Catalyst 6500系列交换机上,使用MSFC(Multilayer Switched Feature Card)模块进行了VLAN间路由:
1、创建和配置交换机上的VLAN,并将交换机的端口添加到VLAN中。
2、创建和配置在MSFC上,用于VLAN间路由的VLAN端口。需要为每个想要进行路由的VLAN都要创建一个VLAN接口。
MSFC上的VLAN接口是虚拟接口,但是它的配置方式与物理接口相同。
注:MSFC3、MSFC2和MSFC2A可以支持1000个VLAN接口,MSFC支持256个VLAN接口。
在MSFC上配置VLAN间的IP路由:
1、在路由器上启用IP路由(可选):
router(config)#ip routing
2、指定IP路由协议(可选):
router(config)#router ip_routing_protocol
3、指定MSFC上的VLAN接口:
router(config)#interface vlan_id
4、给VLAN指定IP地址:
router(config-if)#ip address n.n.n.n mask
5、退出配置模式:
router(config-if)#Ctrl-z
注:如果网络中有多个路由器,那么1是必须配置的。如果在第一步中启用了IP路由,那么第二步也是必须的(用于指定使用那个路由协议,RIP还是OSPF等等)。第二步可以包含其他命令,比如使用network路由配置命令来指定路由某个网段。

二、使用单臂路由(使用外部路由器)
单臂路由器的特性要求在外部路由器和交换机之间使用ISL或802.1Q协议封装Trunk。单个Trunk能够承载多个VLAN的流量,这样就不用为每个VLAN使用一条物理链接。
注:在使用802.1QTrunk的时候,要注意确认交换机上Trunk端口的Native VLAN与对应的路由器上Trunk端口的Native VLAN是相同的。
为了执行VLAN间路由选择的功能,路由器必须知道如何才能到达所有互联的VLAN。基于上述原因,对于单个物理连接上的每个使用ISL或802.1QTrunk的VLAN,路由器必须具有独立的逻辑连接(也可以为每个VLAN使用单独的物理连接,但是这样比较浪费接口)。
路由器能够以以下方式来执行VLAN间路由选择:
1、每台主机将去往其他子网的流量发向默认网关,默认网关是一台路由器,它能够为交换机上配置的每个VLAN提供路由选择功能
2、交换机接受各VLAN的数据报,并且根据相应VLAN进行封装或标记,然后将这些数据包转发给路由器
3、因为已经将路由器配置为在VLAN之间路由流量,所以路由器将接受来自每个VLAN的数据包
4、路由器根据第3层网络地址来确定外出的接口和VLAN
5、路由器重写第2层源MAC地址、第2层目标MAC地址、第2层CRC,并且采用标记或封装数据包的方法来识别相应的VLAN
6、为了将数据包传送给交换机,路由器将数据包放到适当的外出接口的输出队列中,然后交换机将数据包转发给适当的主机外出端口
注:当主机在单臂路由器配置中向其他子网发送流量的时候,它将把流量发送给默认网关,它是在外部路由器(单臂路由器)上所配置子接口的IP地址。这种情况与在外部路由器或第3层交换机上配置使用SVI的情况相同。
使用单臂路由器来配置VLAN间路由选择:
1、在连接到路由器的交换机端口上启用链路Trunk:
switch(config)#interface {fastethernet gigabitethernet} slot/port
switch(config-if)#switchport mode trunk
switch(config-if)#switchport trunk encapsulation {dot1q isl }
2、通过在路由器上使用接口命令no shutdown,来启用路由器接口:
router(config)#interface {fastethernet gigabitethernet} slot/port
router(config-if)#no shutdown
3、创建要求完成VLAN间路由的各个VLAN的子接口:
router(config)#interface {fastethernet gigabitethernet} slot/port.subinterface
4、在对应于VLAN的子接口上配置Trunk封装和IP地址:
router(config-subif)#encapsulation {dot1q isl} vlan-id {native}
router(config-subif)#ip address ip_address subnet_mask
注:native表示Native VLAN,Cisco交换机和路由器不对Native VLAN进行标记。配置Native VLAN的替换方法是在主接口(注意:不是子接口)上配置第3层属性,例如IP地址(这里指的是可以不使用native,而是将路由器的这个主接口配置一个IP地址,这样从交换机来的没有VLAN标记的流量将会通过这个IP地址作为默认网关,转发出去)。
注:这里的VLAN ID用于标识该子接口承载的是那个VLAN的流量。
注:slot/port的编号配置的子接口编号可以任意选择,并且不必与封装配置相匹配。虽然如此,但是为了增加配置的可读性,建议将子接口编号配置为VLAN ID编号。

2009年1月6日星期二

配置STP

除了那些被配置了no switchport命令的端口外,下面的这些命令可以被配置到任何接口上(这里是以运行CiscoIOS的Catalyst 4000系列交换机为例,具体型号的交换机配置方式可能不同)。
一、激活STP
默认情况下,在所有VLAN中,STP是被激活的。
我们可以针对某个VLAN激活STP。交换机为每个单独的VLAN管理一个单独的生成树实例(除了那些禁用了STP的VLAN)。
在某个VLAN上激活STP:
1、激活某个VLAN的STP,VLAN_ID可以取从1到1005之间的值:
switch(config)#spanning-tree vlan vlan_ID
2、退出配置模式:
switch(config)#end
3、确认VLAN中的STP是否被激活:
switch#show spanning-tree vlan vlan_ID
注:因为STP默认是被配置了的,所以使用show running命令的时候,不会看到前面用于激活STP的命令。
二、配置根交换机
使用Supervisor Engine III的Catalyst 4006交换机能够为交换机上每个激活的VLAN管理一个生成树实例。交换机在每个实例中都有一个桥ID。桥ID是由桥优先级和桥MAC地址组成的。对每个VLAN而言,拥有最小的桥ID的交换机会称为根交换机。一旦桥优先级改变,桥ID也会跟着改变。这种改变会导致VLAN中根桥的重新计算。
为了将某个交换机配置为某个VLAN的根桥,我们可以使用spanning-tree vlan valn_ID root 命令,来将桥优先级从默认的32768,修改成一个比较低的值。如果将桥优先级设定为8192,会导致这个交换机称为该VLAN的根桥,那么桥优先级就会设定为8192。如果VLAN中,还有别的交换机的桥ID比8192小,那么配置了该命令的交换机就会将自己的桥优先级设定一个值,这个值比网络中桥优先级最小的交换机小1的值(即:如果最小的桥优先级为8000,那么就将自己的桥优先级设定为7999)。
例如,我们假定网络中VLAN100中,所有交换机的桥优先级设定为默认值32768,当我们在一个交换机中输入spanning-tree vlan 100 root primary命令,这个命令会使得该交换机在VLAN100中的桥优先级设定为8192,这会使得这个交换机变成VLAN100的根桥。
注:每个生成树实例的根交换机必须是骨干交换机或者是分布层交换机。一定注意不要将接入层的交换机设定为生成树的主根交换机。
配置步骤:
1、将一个交换机配置为根交换机,可以使用no命令来恢复默认设置:
switch(config)#[no] spanning-tree vlan vlan_id root primary [diameter hops [hello-time seconds]]
2、退出配置模式:
switch(config)#end
注:可以使用diameter来指定层二网络的直径(即,网络中,两个终端之间经过了多少个网桥)。当我们指定了网络直径的时候,交换机能够自动为网络直径选择一个最佳的hello时间、转发延迟时间和最大老化时间。配置diameter可以减少生成树的收敛时间。
可以使用hello-time来重写自动计算出来的hello时间。
注:在将一个交换机配置为根交换机后,尽量不要自己手动配置hello时间、转发延迟时间以及最大老化时间
三、配置一个备用的根交换机
当我们将一个交换机配置为备用根交换机的时候,这个交换机的的生成树桥优先级就被从默认的32768修改为16384。这意味着,如果这个VLAN的主根交换机失效以后,这个交换机就会成为该VLAN的根交换机(假定网络中其他的交换机的桥优先级为32768)。
我们可以在多个交换机上运行这个命令,来配置多个备用根交换机。在配置备用交换机的时候,要注意,设置的网络直径以及hello时间值要与主根交换机相同(同样,在配置完根桥以后,最好不要手动配置hello时间、转发延迟时间以及最大老化时间)。
配置步骤:
1、将某个交换机配置为备用根桥,可以使用no来取消这个命令,恢复成默认值:
switch(config)#[no] spanning-tree vlan vlan_ID root secondary [diameter hops [hello-time seconds]]
2、退出配置模式
switch(config)#end
四、配置STP端口优先级
在出现环路的时候,生成树会通过比较端口优先级来选择一个端口,并将这个端口置为转发状态。交换机会优先选择端口优先级高(lower numberical value)的端口作为转发端口。如果所有的端口的优先级相同,那么生成树就会将端口号低的端口置为转发状态,阻塞其他端口。可能的优先级为0到240,配置时以16递增(默认是128)。
当端口被配置为访问端口的时候,IOS使用端口优先级(配置命令为:spanning-tree port-priority value)。当端口被配置为Trunk端口的时候,IOS使用VLAN端口优先级(配置命令为:spanning-tree vlan vlan_ID port-priority vlaue)。对Trunk端口配置端口优先级时,一定要注意针对使用这个Trunk的每个VLAN都要配置端口优先级。
配置步骤:
1、选择要配置的端口:
switch(config)#interface {{fastethernet gigabitethernet} slot/port} {port-channel port_channel_number}
2、在端口上配置端口优先级。优先级取值从0到240,以16递增。可以使用no来恢复默认设置:
switch(config-if)#[no] spanning-tree port-priority port_priority
3、为端口配置VLAN端口优先级。优先级取值从0到240,以16递增。可以使用no来恢复默认配置:
switch(config-if)#[no] spanning-tree vlan vlan_ID port-priority port_priority
4、退出配置模式:
switch(config-if)#end
5、检查配置:
switch#show spanning-tree interface {{fastethernet gigabitethernet} slot/port} {port-channel port_channel_number}
show spanning-tree vlan vlan_ID
注:show spanning-tree port-priority命令只能显示激活链路(active)的端口信息。如果端口没有激活,使用这个命令是看不到未激活链路的端口的端口优先级的。此时我们可以使用show running-config interface命令来检查配置。
五、配置STP端口花费
生成树端口花费的默认值源自端口的介质速率。当发生环路的时候,生成树会比较端口花费,然后将端口置于转发状态。端口开销低的端口,会被首先选择为转发端口。如果所有端口的花费相同,生成树就会将端口号低的端口置于转发状态,阻塞其他端口。端口开销取值为1至200000000(默认根据介质不同而不同)。
当端口被配置为访问端口时,生成树使用端口花费。当端口被配置为Trunk端口时,生成树使用VLAN端口开销(即针对使用该Trunk的每个VLAN,配置一个端口花费值)。
配置步骤如下:
1、选择要配置端口花费的端口:
switch(config)#interface {{fastethernet gigabitethernet} slot/port} {port-channel port_channle_number}
2、为该端口配置端口花费,端口花费的值可以取从1到200000000。可以使用no来恢复到默认值:
switch(config-if)#[no] spanning-tree cost port_cost
3、配置VLAN端口花费,端口花费的值可以取从1到200000000。可以使用no来恢复到默认值:
switch(config-if)#[no] spanning-tree vlan vlan_ID cost port_cost
4、退出配置模式:
switch(config-if)#end
5、检查配置:
switch#show spanning-tree interface {{fastethernet gigabitethernet} slot/port} {port-channel port_channel_number}
show spanning-tree vlan vlan_ID
注:show spanning-tree命令只显示激活链路(active link)的端口(即绿灯亮)的信息。如果不符合这些情况的话,只能使用show running-config命令来检查这些配置。
六、其他配置命令
一般不建议使用下面这些命令,在大多数情况下,建议使用spanning-tree vlan vlan_ID root primary命令和spanning-tree vlan vlan_ID root secondary命令来修改桥的优先级、Hello时间、最大老化时间以及转发延迟时间(主要针对某个VLAN)。
配置桥优先级:
1、配置一个VLAN中的桥优先级。桥优先级取值从1到65535,可以使用no来恢复默认设置:
switch(config)#[no] spanning-tree vlan vlan_ID priority bridge_priority
2、退出配置模式:switch(config)#end
3、检查配置:switch#show spanning-tree vlan vlan_ID birdge [brief]
配置Hello时间:
1、配置某个VLAN的hello时间,hello时间的取值为从1到10秒。可以使用no来恢复默认设置:
switch(config)#[no] spanning-tree vlan vlan_ID hello-time hello_time
2、退出配置模式:switch(config)#end
3、检查配置:switch#show spanning-tree vlan vlan_ID bridge [brief]
配置某个VLAN的最大老化时间:
1、配置某个VLAN的最大老化时间,最大老化时间的值可以取从6至40秒。可以使用no来恢复至默认设置:switch(config)#[no] spanning-tree vlan vlan_ID max-age max_age
2、退出配置模式:switch(config)#end
3、检查配置:switch#show spanning-tree vlan vlan_ID bridge [brief]
配置某个VLAN的转发延迟时间:
1、配置某个VLAN的转发延迟时间,转发延迟时间可以取值从4到30秒。可以使用no来恢复默认配置:
switch(config)#[no] spanning-tree vlan vlan_ID forwarding-time forward_time
2、退出配置模式:switch(config)#end
3、检查配置:switch#show spanning-tree vlan vlan_ID bridge [brief]
七、禁用STP
禁用基于每个VLAN的生成树协议,如下步骤:
1、禁用基于每个VLAN的生成树:
switch(config)#no spanning-tree vlan vlan_ID
2、退出配置模式:switch(config)#end
3、检查生成树是否被禁用:
switch#show spanning-tree vlan vlan_ID

2009年1月4日星期日

STP简介

生成树协议(Spanning Tree Protocol STP)是一个运行在网桥和交换机上的层二的协议。STP也被定义为IEEE 802.1D。STP的主要目的是确保在网络中使用冗余链路的时候不会产生环路。环路对网络来说是致命的。

有好几种STP,但是802.1D是最流行的,应用也是最广泛的。我们在交换机和网桥上使用STP以防止网络中环路的产生,我们一般在配置冗余链路并且不希望产生环路的情况下,才会使用STP。冗余链路与备用链路一样重要,以防网络的中断。主链路的失效能够激活备用链路以使得用户能够继续使用网络。如果网桥和交换机上没有运行STP,使用冗余链路会导致环路的产生。如果两个连接到一起的交换机运行不同的STP,它们会需要不同的时间来达到收敛。当交换机上使用不同的STP时,这会导致在blocking和Forwarding状态的时间不相同,这会产生很大的问题。因此,我们需要使用相同的STP。

为了满足冗余链路的需求同时又要避免环路,STP定义了一个在可扩展的,延伸到网络中所有交换机上的树。STP强制某条冗余链路成为备用状态(blocked)堵塞,保留另一条链路处于转发状态(forwarding)。如果处于转发状态的链路变得不可用,STP会重新配置网络,将某个合适的备用链路激活,使得数据能够通过这个重新选择的路径进行转发。

一、STP技术简介
STP的关键是为网络中的所有交换机选举一个根桥,根桥是整个网络的焦点。网络中的所有其他决定,比如那个端口要被堵塞,那个端口用于转发数据,都是由根桥来决定的。在一个交换环境中(与桥接环境区别),大部分都有多个VLAN。当你使交换网络中的一个根桥生效的时候,我们通常将根桥指定为根交换机。每个VLAN必须有它自己的根桥,因为每个VLAN是一个独立的广播域。不同VLAN的根桥,可以在同一交换机上也可以在不同的交换机上。
注:某一个VLAN的根桥的选择是非常重要的,你可以自己选择根桥,或者可以让交换机自己决定。BPDU负责承载这些信息。每个交换机会将交换机发送给邻居的BPDU中的参数与从邻居那里接收到的BPDU中的参数作比较。
在STP根桥选举的过程中,越小越好。如果交换机A通告的根ID比交换机B通告的根ID要低,从交换机A那里通告的信息更好。交换机B停止通告它的根ID,并且接收交换机A的根ID。
此外还有其他的一些可选的STP功能,比如:PortFast、Root guard、Loop guard、BPDU guard


二、STP 的运行
1、首要条件(Prerequisites)
在配置STP,首先要选择一个交换机作为生成树的根,根交换机不需要是性能最好的交换机,但是必须选择网络的中心。所有通过网络的数据流都是通过根桥来看整个网络的,并且选择网络中干扰最少的交换机(即通过根桥的视角来看网络,从根桥那里获得到达目的地的哪条路径是最好的;与OSPF区别,OSPF是以自己为根,生成到达所有路由器的最短路径的树)。骨干交换机经常作为生成树的根,因为这些交换机一般不会连接到终端,通常,网络的移动和改变一般不会影响到这些骨干交换机。
在决定了根交换机以后,通过设置合适的参数将某个交换机指定为根交换机。我们必须设置的参数是桥优先级。如果某个交换机的优先级比所有其他的交换机要低(即交换机的优先级的数比其它交换机的优先级的数要低),那么其他交换机就自动将这个交换机选举为根交换机。
2、交换机端口上的终端
我们也可以在基于单端口的情况下,使用portfast(即只有一个端口连接到到上一级交换机)。当我们在端口是启用portfast属性时,这个端口能够立刻从阻塞状态转换为转发状态。使用portfast可以防止诸如:使用DHCP获取IP地址或者使用Novell Netware的客户端由于等待收敛,而超时。但是在交换机之间连接的时候,不要使用portfast属性,在这种情况下,这个属性可能会导致环路。当我们连接两个交换机的时候,端口从堵塞状态转变成转发状态会有30-60秒的延迟,这个延迟能够防止可能出现的环路。

三、STP的运行规则
当交换机第一次被启动的时候,他们首先启动根交换机选举进程。每个交换机都会给直接相连的交换机发送BPDU(这个过程是基于VLAN的,只发送给每个VLAN中直接相连的交换机)。
在BPDU通过整个网络的过程中,每个交换机会把自己发送的BPDU与从邻居那里接收到的BPDU进行比较。然后,网络中的交换机会就哪个交换机作为根交换机这个问题达成一致。最终,网络中,具有最小的桥ID的交换机会赢得这场选举。
注:每个VLAN都必须确定一个根交换机。在根交换机确定以后,交换机会遵守下面这些规则:
1、根交换机上的所有端口都必须处于转发状态
注:在某些特殊情况下,比如有自环路端口存在的交换机,是这个规则的一个例外
此外,每隔交换机会决定到达根交换机的最好的路径。交换机通过比较它在所有端口上收到的BPDU中包含的信息,来决定这个最佳路径。交换机使用BPDU中信息量最少的端口,作为根端口,向根桥传递数据。在一个交换机确定自己的根端口以后,交换机会应用规则2
2、根端口必须处于转发状态
此外,处于同一LAN分段上的两个交换机(比如连接到一个HUB上的两台交换机,该HUB上还可能连接许多主机),会彼此通信以决定那个交换机,是这个分段用于同根交换机通信的最优的交换机。这个最优的交换机被称为指定交换机
3、在一个LAN分段中,连接到LAN分段的指定交换机的端口,必须处于转发状态
4、所有交换机的其他端口(就每个VLAN而言),必须被置为阻塞状态。这个规则只适用于连接到其他网桥或者交换机的端口。STP不会影响那些连接到PC或工作站的端口,这些端口仍然处于转发状态。
注:当STP运行在单VLAN生成树(PVST/PVST+)模式下的时候,VLAN的增加或者删除会触发那个VLAN的生成树的重新计算,而且只有那个VLAN的流量会受到影响,同一Trunk链路上的其他VLAN流量还会被正常转发。当STP运行在多VLAN生成树(MST)模式下的时候,VLAN的增加或者删除也会触发生成树的重计算,但是这个会影响到这个MST例子中所有VLAN中的流量。
注:默认情况下,在每个端口上都会运行生成树。在交换机上,基于单个端口(per-port basis),生成树功能不能被关闭。虽然这个不提倡,但是在基于单个VLAN的情况下或者在交换机的全局模式下,可以将STP关闭。不管什么时候,在关闭STP之前都必须非常谨慎,因为这可能会在网络中导致层二环路的产生。

运行Cisco IOS Software的交换机的VLAN配置排错

这部分主要是我们在运行Cisco IOS Software的Catalyst交换机上创建VLAN的时候,常见的一些错误以及相应的解决方法。
在运行Cisco IOS Software的交换机上,我们可以用交换机本身进行VLAN间路由,而不用额外使用路由器。当创建了一个SVI的时候,并不会自动在层二数据库中创建VLAN。必须在VLAN database模式或者全局配置模式中创建VLAN,才可以使SVI处于UP状态。为了使SVI完全激活(即管理性UP并且链路协议也是UP状态),必须保证VLAN中至少有一个端口作为成员,而且有一个活动状态的设备连接到这个端口上。
当我们从别的交换机中拷贝VLAN配置或者恢复在VLAN数据库模式中创建的VLAN配置的时候,也可能发生类似的事情。我们需要同时也将VLAN database文件(即vlan.dat)拷贝过去。或者我们不从另一个交换机上拷贝VLAN数据库,而是自己创建VLAN。
如果在交换机上没有创建层二VLAN,当将配置输入到交换机中时,在show ip interface brief命令的输出中,SVI端口状态是up/down。我们必须确认:在将配置拷贝到交换机中后,所有先前在VLAN database模式或全局配置模式中先前创建的VLAN仍然存在。
一、在交换机IOS中,TLB值不一致错误(inconsistent TLB Value Error on IOS Switches)
当我们在一个使用Cisco IOS的交换机上创建VLAN的时候(这个交换机刚从一个运行CatOS的交换机上收到一个VTP更新或者这个交换机的OS是从CatOS换到Cisco IOS的),TLB值不一致错误可能会出现。这是因为CatOS和CiscoIOS在转换桥接VLAN(Translation Bridge VLAN)的时候有不同的默认值。转换VLAN能够将FDDI或者Token Ring转换成Ethernet。在CiscoIOS的交换机中VLAN1、1002和1003的翻译桥接(TB)VLAN默认与CatOS交换机是不同的,在CatOS中默认为0。下面是Cisco IOS交换机的默认翻译VLAN:
Vlan ID TB1 TB2
1 1002 1003
1002 1 1003
1003 1 1002
注:1002为FDDI-default,1003为TokenRing-Default
当一个CiscoIOS交换机刚刚收到一个从CatOS发送的VTP更新或者该交换机是从重写了默认TB值的CatOS转换来的。此时我们在创建VLAN的时候,就会出现下面这个错误信息:
VLAN 1002 TBL 1 VLAN 1 has inconsistent TLB values (0/0)
这个问题的解决方法是:将CiscoIOS交换机,Vlan1、1002和1003的默认TB值修改为0,以匹配CatOS的值。
switch#vlan database
switch(vlan)#no vlan 1002 tb-vlan1 tb-vlan2
switch(vlan)#no vlan 1003 tb-vlan1 tb-vlan2
switch(vlan)#apply
二、恢复IOS交换机上的vlan.dat文件
对于运行CiscoIOS的交换机而言,VLAN信息存储在一个叫vlan.dat的单独的文件中。如果这个文件被意外的删除,并且交换机被重新引导,这个时候,交换机上所有可用的VLAN都会丢失。但是只要交换机没有重启,交换机上所有的VLAN信息还是存在的。
使用以下步骤可以回复vlan.dat文件:
1、首先使用show vlan 命令来确认可用的VLAN信息
2、如果交换机是VTP服务器模式或者是透明模式,对VLAN数据库进行任何一个改动。例如:创建一个VLAN;删除一个VLAN;修改一个已经存在的VLAN的属性(比如给某个VLAN添加名字)。
如果交换机是VTP客户端模式,在同一域内的VTP服务器上进行任意的对VLAN数据库的改动。
注:一旦VLAN数据库发生任意改动,交换机会自动产生vlan.dat文件
3、使用show flash:命令来确认是否产生vlan.dat文件

三、从启动配置中配置VLAN失败
错误信息:SW-VLAN-4-BAD-STARTUP-VLAN-CONFIG-FILE:Failed to configure VLAN from startup-config. Fallback to use VLAN cofiguration file from non-volatile memory
这个信息标明:VLAN软件从启动配置文件中使用VLAN配置失败。VLAN配置存储在vlan.dat文件中。vlan.dat文件存储在非易失存储器中。当超级模块被替换后,vlan.dat是空的。在启动的时候,交换机比较启动配置文件中的VTP域名和VTP模式以及vlan.dat文件。如果三者的值不匹配,交换机就会使用在vlan.dat文件中的配置。
为了得到一个完整的配置备份,我们必须也将vlan.dat文件一起备份。网络管理员必须将vlan.dat文件和配置文件一起上传到交换机中,以恢复完整的配置。
三、备份和恢复CiscoIOS交换机上的vlan.dat文件
为了备份vlan.dat文件,可以使用以下步骤:
1、将vlan.dat文件从设备的nvram拷贝到TFTP服务器或这一个外扩的PCMCIA卡中:copy const_nvram:vlan.dat tftp:
注:vlan.dat文件的存储位置根据设备的不同而不同:Cisco Catalyst 6500/6000系列的交换机存储在const_nvram:中;对Catalyst 6500/4000而言,存储在cat4000_flash:中;在使用copy命令时,注意参考具体的设备文档。
恢复vlan.dat:
1、将vlan.dat文件从TFTP服务器或者外设的PCMCIA卡拷贝到设备的NVRAM中:copy tftp: const.nvram:
2、重新引导交换机,因为vlan.dat只有在启动的时候,才会读取vlan.dat

四、创建VLAN失败,提示:vlan 1003 parent vlan missing
交换机的误配置会导致VTP的配置更新失败。在大多数情况下,这个问题是VTP服务器交换机上新创建的VLAN还没有传播到VTP客户端交换机上。这导致了主机连接性问题。
导致这个问题的一般原因是:VTP域内VTP版本的不匹配,在同一VTP域内,VTP版本1和VTP版本2是不能协同工作的。如果一个支持VTP版本2的网络设备能够与运行VTP版本1的网络设备进行协同工作,那说明在这个支持VTP版本2的网络设备上VTP版本2没有被启用。默认情况下,VTP版本2是不可用的。在VTP域中的所有网络设备必须使用相同的VTP版本。确认交换机上运行的VTP的版本,如果是版本2,那就禁用版本2,以解决这个问题。
确认交换机上其他VTP参数是否被正确配置:
1、确认交换机之间使用Trunk相互连接,因为VTP更新只能通过Trunk进行交换
2、确认VTP域名在域内的交换机上被正确的配置,域名是大小写敏感的,VTP更新只能在相同的VTP域内的交换机之间进行交换
3、确认域中所有交换机的VTP密码是相同的,密码也是大小写敏感的,如果配置了密码,必须在域内所有的交换机上进行配置而且密码也必须相同
万一出现VTP收敛问题:某个VTP客户端没有更新VLAN信息,我们应该做的是:通过创建然后删除一个VTP服务器上的虚假的VLAN来强制VTP进行收敛。通过这样做,可以增加修订号,以强制所有的VTP客户端更新它们的VLAN数据库。