﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-chlclan-随笔分类-交换与路由</title><link>http://www.cnitblog.com/chlclan/category/3231.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 08:29:22 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 08:29:22 GMT</pubDate><ttl>60</ttl><item><title>linux下查看路由的方法</title><link>http://www.cnitblog.com/chlclan/archive/2006/08/21/15658.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Mon, 21 Aug 2006 09:03:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/08/21/15658.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/15658.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/08/21/15658.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/15658.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/15658.html</trackback:ping><description><![CDATA[ipv4：<br />   ip route ：显示比较快<br />   route    : 显示较慢<br />ipv6<br /> ip -6 route ；较快<br />route --inet6 :较慢<img src ="http://www.cnitblog.com/chlclan/aggbug/15658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-08-21 17:03 <a href="http://www.cnitblog.com/chlclan/archive/2006/08/21/15658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tcpdump 的用法</title><link>http://www.cnitblog.com/chlclan/archive/2006/07/24/14125.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Mon, 24 Jul 2006 09:15:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/24/14125.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/14125.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/24/14125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/14125.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/14125.html</trackback:ping><description><![CDATA[
		<span class="smalltxt">
				<span class="bold">超级详细Tcpdump 的用法</span>
		</span>
		<br />
		<br />
		<div style="FONT-SIZE: 12px">第一种是关于类型的关键字，主要包括host，net，port, 例如 host 210.27.48.2，指明 210.27.48.2是一台主机，net 202.0.0.0 指明 202.0.0.0是一个网络地址，port 23 指明端口号是23。如果没有指定类型，缺省的类型是host. <br /><br />第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明，src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字，则缺省是src or dst关键字。 <br /><br />第三种是协议的关键字，主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议，实际上它是"ether"的别名，fddi和ether具有类似的源地址和目的地址，所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议，则<u><b><font color="#ff0000">tcpdump</font></b></u>将会监听所有协议的信息包。 <br />    除了这三种类型的关键字之外，其他重要的关键字如下：gateway, broadcast,less,greater,还有三种逻辑运算，取非运算是 'not ' '! ', 与运算是'and','&amp;&amp;';或运算 是'or' ,'││'；这些关键字可以组合起来构成强大的组合条件来满足人们的需要，下面举几个例子来说明。 <br />    普通情况下，直接启动<u><b><font color="#ff0000">tcpdump</font></b></u>将监视第一个网络界面上所有流过的数据包。 <br /># <u><b><font color="#ff0000">tcpdump</font></b></u><br /><u><b><font color="#ff0000">tcpdump</font></b></u>: listening on fxp0 <br />11:58:47.873028 202.102.245.40.netbios-ns &gt; 202.102.245.127.netbios-ns: udp 50 <br />11:58:47.974331 0:10:7b:8:3a:56 &gt; 1:80:c2:0:0:0 802.1d ui/C len=43 <br />                         0000 0000 0080 0000 1007 cf08 0900 0000 <br />                         0e80 0000 902b 4695 0980 8701 0014 0002 <br />                         000f 0000 902b 4695 0008 00 <br />11:58:48.373134 0:0:e8:5b:6d:85 &gt; Broadcast sap e0 ui/C len=97 <br />                         ffff 0060 0004 ffff ffff ffff ffff ffff <br />                         0452 ffff ffff 0000 e85b 6d85 4008 0002 <br />                         0640 4d41 5354 4552 5f57 4542 0000 0000 <br />                         0000 00 <br />使用-i参数指定<u><b><font color="#ff0000">tcpdump</font></b></u>监听的网络界面，这在计算机具有多个网络界面时非常有用， <br />使用-c参数指定要监听的数据包数量， <br />使用-w参数指定将监听到的数据包写入文件中保存 <br /><br />   A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包： <br />#tcpdump host 210.27.48.1 <br /><br />B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信，使用命令：（在命令行中适用　　　括号时，一定要 <br />#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) <br /><br />C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包，使用命令： <br />#tcpdump ip host 210.27.48.1 and ! 210.27.48.2 <br /><br />D如果想要获取主机210.27.48.1接收或发出的telnet包，使用如下命令： <br />#tcpdump tcp port 23 host 210.27.48.1 <br /><br />E 对本机的udp 123 端口进行监视 123 为ntp的服务端口 <br /># <u><b><font color="#ff0000">tcpdump</font></b></u> udp port 123 <br />   <br />F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机，也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据： <br />#tcpdump -i eth0 src host hostname <br /><br />G 下面的命令可以监视所有送到主机hostname的数据包： <br />#tcpdump -i eth0 dst host hostname <br /><br />H  我们还可以监视通过指定网关的数据包： <br />#tcpdump -i eth0 gateway Gatewayname <br /><br />I 如果你还想监视编址到指定端口的TCP或UDP数据包，那么执行以下命令： <br />#tcpdump -i eth0 host hostname and port 80 <br /><br />J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 <br />，使用命令： <br />#tcpdump ip host 210.27.48.1 and ! 210.27.48.2 <br /><br />K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信，使用命令 <br />：（在命令行中适用　　　括号时，一定要 <br />#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) <br /><br />L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包，使用命令： <br />　　　#tcpdump ip host 210.27.48.1 and ! 210.27.48.2 <br /><br />M 如果想要获取主机210.27.48.1接收或发出的telnet包，使用如下命令： <br />　　　#tcpdump tcp port 23 host 210.27.48.1 <br /><br /><br />第三种是协议的关键字，主要包括fddi,ip ,arp,rarp,tcp,udp等类型 <br />除了这三种类型的关键字之外，其他重要的关键字如下：gateway, broadcast,less, <br />greater,还有三种逻辑运算，取非运算是 'not ' '! ', 与运算是'and','&amp;&amp;';或运算 是'o <br />r' ,'||'； <br />第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src , <br />如果我们只需要列出送到80端口的数据包，用dst port；如果我们只希望看到返回80端口的数据包，用src port。 <br />#tcpdump –i eth0 host hostname and dst port 80  目的端口是80 <br />或者 <br />#tcpdump –i eth0 host hostname and src port 80  源端口是80  一般是提供http的服务的主机 <br />如果条件很多的话  要在条件之前加and 或 or 或 not <br />#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80 <br /><br /><br /><br />如果在ethernet 使用混杂模式 系统的日志将会记录 <br /><br />May  7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled. <br />May  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode <br />May  7 20:03:57 localhost kernel: device eth0 left promiscuous mode <br /><br /><br /><u><b><font color="#ff0000">tcpdump</font></b></u>对截获的数据并没有进行彻底解码，数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障，通常的解决办法是先使用带-w参数的<u><b><font color="#ff0000">tcpdump</font></b></u> 截获数据并保存到文件中，然后再使用其他程序进行解码分析。当然也应该定义过滤规则，以避免捕获的数据包填满整个硬盘。</div>
<img src ="http://www.cnitblog.com/chlclan/aggbug/14125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-24 17:15 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/24/14125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zebra基本配置 </title><link>http://www.cnitblog.com/chlclan/archive/2006/07/04/13246.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Tue, 04 Jul 2006 14:11:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/04/13246.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/13246.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/04/13246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/13246.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/13246.html</trackback:ping><description><![CDATA[
		<!-- / controls above postbits -->
		<!-- toolbar -->
		<table class="tborder" style="BORDER-BOTTOM-WIDTH: 0px" cellspacing="1" cellpadding="4" width="100%" align="center" border="0">
				<tbody>
						<tr>
								<td class="tcat" width="100%">
										<div class="smallfont">                         	
<div dir="ltr" style="TEXT-ALIGN: left">前言<br /><br />Zebra是一个路由软件包，提供基于TCP/IP路由服务，支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4, <br /><br />和 BGP-4+等众多路由协议。Zebra还支持BGP特性路由反射器（Route Reflector）。除了传统的 IPv4路由协议<br /><br />，Zebra也支持IPv6路由协议。如果运行的SNMP守护进程（需要ucd-snmp）支持SMUX协 议，Zebra还能支持路由<br /><br />协议MIBs。<br /><br />由以上可见，Zebra的确是一个很不错的路由系统，但比起真正的路由器就简直是小儿科，所以网络高手 就当<br /><br />这文章是小孩子过家家吧，而对于象我这样的初学者（特别是没有真实设备或足够设备进行实验） 也不失为一<br /><br />个学习和熟悉路由配置、路由协议的好工具。我没有实际的配置经验，对路由的技术细节也 不是十分清晰，完<br /><br />全是在扔破砖头。希望路由高手指正概念错误。<br /><br />安装<br /><br />Zebra目前最新的版本是0.92a，它的安装非常简单，我们只需从<a href="http://www.zebra.org/下载zebra-" target="_blank"><font color="#000000">http://www.zebra.org/下载zebra-</font></a><br /><br />0.92a.tar.gz，然后执行以下命令安装（本文环境是RedHat7.2）：<br /><br />shell&gt; tar xzf zebra-0.92a.tar.gz<br />shell&gt; cd zebra-0.92a<br />shell&gt; ./configure<br />shell&gt; make<br />shell&gt; make install<br /><br />这样Zebra就安装好了，安装的执行文件：<br /><br />shell&gt; ls /usr/local/sbin<br />bgpd  ospfd  ripd  zebra<br /><br />配置文件：<br /><br />shell&gt; ls /usr/local/etc<br />bgpd.conf.sample   ospfd.conf.sample  zebra.conf.sample<br />bgpd.conf.sample2  ripd.conf.sample<br /><br />运行<br /><br />编译安装完Zebra后，可以看到有4个可执行文件和5个配置样本文件，我们就使用它的配置样本文件：<br /><br />shell&gt; cd /usr/local/etc<br />shell&gt; cp zebra.conf.sample zebra.conf<br /><br />Zebra的各进程有各自的终端接口或VTY，如果我们需要给连接到它们的端口设置别名的话，在/etc/ services<br /><br />文件添加如下内容：<br /><br />zebrasrv      2600/tcp   # zebra service<br />zebra         2601/tcp   # zebra vty<br />ripd          2602/tcp   # RIPd vty<br />ripngd        2603/tcp   # RIPngd vty<br />ospfd         2604/tcp   # OSPFd vty<br />bgpd          2605/tcp   # BGPd vty<br />ospf6d        2606/tcp   # OSPF6d vty<br /><br />然后就可以启动Zebra了：<br /><br />shell&gt; zebra -d<br /><br />这样，Zebra就以守护进程启动了，其它的参数请参考zebra -h。<br /><br />基本路由配置命令<br /><br />直接用telnet连接：<br /><br />shell&gt; telnet localhost 2601<br />Trying 127.0.0.1...<br />Connected to localhost.<br />Escape character is '^]'.<br /><br />Hello, this is zebra (version 0.92a).<br />Copyright 1996-2001 Kunihiro Ishiguro.<br /><br /><br />User Access Verification<br /><br />Password:<br /><br />Zebra会提示输入口令，我们通过/usr/local/etc/zebra.conf可以看到口令是zebra，enable口令也是zebra。<br /><br />输 入口令zebra，得到路由器用户模式提示符：<br /><br />Router&gt;<br /><br />进入特权模式：<br /><br />Router&gt; en<br />Password:<br />Router#<br /><br />输入一个问号，看看Zebra提供了多少路由命令：<br /><br />Router# ?<br />  configure  Configuration from vty interface<br />  copy       Copy configuration<br />  debug      Debugging functions (see also 'undebug')<br />  disable    Turn off privileged mode command<br />  end        End current mode and change to enable mode.<br />  exit       Exit current mode and down to previous mode<br />  help       Description of the interactive help system<br />  list       Print command list<br />  no         Negate a command or set its defaults<br />  quit       Exit current mode and down to previous mode<br />  show       Show running system information<br />  terminal   Set terminal line parameters<br />  who        Display who is on vty<br />  write      Write running configuration to memory, network, or terminal<br /><br />提供的命令很少，实际路由器好多命令都没有，我们只能用有限的命令投入到无限的实验中去。<br /><br />Router# sh run<br /><br />Current configuration:<br />!<br />hostname Router<br />password zebra<br />enable password zebra<br />!<br />interface lo<br />!<br />interface eth0<br />!<br />line vty<br />!<br />end<br /><br />Zebra把操作系统的网络接口当做路由器的接口，所以在做比较复杂的路由实验，会需要比较多的网卡。<br /><br />进入全局模式，尽可能把实际可用的配置命令都实验一遍：<br /><br />Router# conf t<br />Router(config)#<br /><br />自己取一个路由器名字：<br /><br />Router(config)# hostname r1<br />r1(config)#<br /><br />Zebra比较简单，登陆口令不是在line下修改，而是直接在全局模式下用password修改<br /><br />r1(config)# password {password}<br /><br />Zebra不支持enable secret {password}这种MD5加密口令，只能使用enable password {password}来修改 <br /><br />enable口令：<br /><br />r1# conf t<br />r1(config)# enable password {password}<br /><br />在路由器配置中加密所有的口令：<br /><br />r1(config)# service password-encryption<br /><br />回到特权模式：<br /><br />r1(config)# exit<br />r1# sh run<br /><br />Current configuration:<br />!<br />hostname r1<br />password 8 alA5.vcyMAwXQ<br />enable password 8 ksbxOFN8xcFMc<br />service password-encryption<br />!<br />interface lo<br />!<br />interface eth0<br />!<br />line vty<br />!<br />end<br /><br />我们看到刚才的明文密码都进行加密了，给我们的实验机也提高安全性。Zebra有一点比较恶心，如果我 们先<br /><br />设置了service password-encryption，然后再修改口令，sh run就发现口令又都是明文的了，但是由 于有<br /><br />service password-encryption，所以就无法登陆了。<br /><br />去掉会话超时，免得10分钟没有动作，就把我们给踢了。但是在实际的路由器配置中，为安全起见我们 最好还<br /><br />是设上会话超时。<br /><br />r1# conf t<br />r1(config)# line vty<br />r1(config-line)# exec-timeout 0 0<br /><br />设置日志记录，Zebra可以把日志记录到标准输出、syslog、以及指定输出文件：<br /><br />r1(config-line)# exit<br />r1(config)# log stdout<br />r1(config)# no log stdout<br />r1(config)# log syslog<br />r1(config)# no log syslog<br />r1(config)# log file /usr/local/etc/zebra.log<br /><br />配置接口IP地址：<br /><br />r1(config)# int lo<br />r1(config-if)# ip address 127.0.0.1/8<br />r1(config-if)# exit<br />r1(config)# int eth0<br />r1(config-if)# ip address 192.168.5.121/24<br /><br />Zebra比较奇怪，不能使用ip address 192.168.5.121 255.255.255.0这种形式设置IP。测试一下，就设置成 <br /><br />和Linux中使用的一样。<br /><br />保存我们刚才的配置：<br /><br />r1(config-if)# exit<br />r1(config)# exit<br />r1# copy run start<br />Configuration saved to /usr/local/etc/zebra.conf<br />r1#<br /><br /><br />2、用Zebra做简单的RIP实验<br /><br />RIP是应用较早、使用较普遍的IGP，适用于小型同类网络，是典型的距离向量(distance-vector)协 议。RIP通<br /><br />过广播UDP报文来交换路由信息，每30秒发送一次路由信息更新。RIP提供跳跃计数(hop count)作为尺度来衡量<br /><br />路由距离，跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同 目标有二个不等速或不同带宽<br /><br />的路由器，但跳跃计数相同，则RIP认为两个路由是等距离的。RIP最多支 持的跳数为15，即在源和目的网间所<br /><br />要经过的最多路由器的数目为15，跳数16表示不可达。RIPv2支持 验证、密钥管理、路由汇总、无类域间路由<br /><br />(CIDR)和变长子网掩码(VLSMs)。<br /><br />Zebra支持RIPv2，使用ripd程序实现RIP路由功能，但ripd程序需要在zebra程序读取接口信息，所以zebra 一<br /><br />定要在ripd之前启动。由于条件所限，下面的RIP实验是在两台单网卡的RedHat7.2下做的，所以只是 最简单的<br /><br />演示。<br /><br />按照上面基本配置的方法初始化第一台机器：<br /><br />shell_1&gt; cd /usr/local/etc<br />shell_1&gt; cp zebra.conf.sample zebra.conf<br />shell_1&gt; cp ripd.conf.sample ripd.conf<br />shell_1&gt; zebra -d<br /><br />进入zebra设置IP<br /><br />shell_1&gt; telnet localhost 2601<br />Password:<br />Router&gt; en<br />Password:<br />Router# conf t<br />Router(config)# hostname r1<br />r1(config)# int eth0<br />r1(config-if)# ip address 192.168.5.121/24<br />r1(config-if)# ctrl+z<br />r1# copy run start<br /><br />进入第一台机器的rip设置<br /><br />shell_1&gt; ripd -d<br />shell_1&gt; telnet localhost 2602<br />Password:<br />ripd&gt; en<br />ripd# conf t<br />ripd(config)# hostname r1_ripd !改个名字好辨认<br />r1_ripd(config)# router rip !启动rip<br />r1_ripd(config-router)# network 192.168.5.0/24 !RIPv1是有类别路由协议，RIPv2是无类别路由协议，<br /><br />Zebra 默认支持RIPv2，指定网络需要子网掩码。<br /><br />r1的RIP简单配置这样就可用了，下面来检验一下：<br /><br />r1_ripd# sh ip protocols<br />Routing Protocol is "rip"<br />  Sending updates every 30 seconds with +/-50%, next due in 3 seconds<br />  Timeout after 180 seconds, garbage collect after 120 seconds<br />  Outgoing update filter list for all interface is not set<br />  Incoming update filter list for all interface is not set<br />  Default redistribution metric is 1<br />  Redistributing:<br />  Default version control: send version 2, receive version 2<br />    Interface        Send  Recv   Key-chain<br />    eth0             2     2<br />  Routing for Networks:<br />    192.168.5.0/24<br />  Routing Information Sources:<br />    Gateway          BadPackets BadRoutes  Distance Last Update<br />  Distance: (default is 120)<br /><br />我们看到RIP已经起来了，是RIPv2。<br /><br />r1_ripd# sh ip rip<br />Codes: R - RIP, C - connected, O - OSPF, B - BGP<br /><br />   Network            Next Hop         Metric From            Time<br /><br />由于就两个接口直连，没有其它网络，所以sh ip rip看不到什么。<br /><br />Zebra对log处理可能有些问题，使用log stdout不能显示各种debug信息，所以只能记录到文件，在shell下 用<br /><br />tail命令查看。<br /><br />r1_ripd# debug rip events<br />r1_ripd# debug rip packet<br />r1_ripd(config)# log file /usr/local/etc/ripd.log<br /><br />然后我们在shell下查看debug信息<br /><br />shell_1&gt; tail -f /usr/local/etc/ripd.log<br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 22:17:44 RIP: update timer fire!<br />2002/04/28 22:17:44 RIP: SEND UPDATE to eth0 ifindex 2<br />2002/04/28 22:17:44 RIP: multicast announce on eth0<br />2002/04/28 22:17:44 RIP: update routes on interface eth0 ifindex 2<br />2002/04/28 22:18:23 RIP: update timer fire!<br />2002/04/28 22:18:23 RIP: SEND UPDATE to eth0 ifindex 2<br />2002/04/28 22:18:23 RIP: multicast announce on eth0<br />2002/04/28 22:18:23 RIP: update routes on interface eth0 ifindex 2<br />2002/04/28 22:19:04 RIP: update timer fire!<br />2002/04/28 22:19:04 RIP: SEND UPDATE to eth0 ifindex 2<br />2002/04/28 22:19:04 RIP: multicast announce on eth0<br />2002/04/28 22:19:04 RIP: update routes on interface eth0 ifindex 2<br />--------------------------------8&lt;---------------------------------------<br /><br />RIP每隔30秒发送一次更新，在sh ip prot可以看到Sending updates every 30 seconds with +/-50%<br /><br />第二台机器的设置<br /><br />前面的初始化和第一台一样，不过这里名字设成r2便于辨认，IP设成了192.168.5.123/24。<br /><br />进入第二台机器的rip设置<br /><br />shell_2&gt; ripd -d<br />shell_2&gt; telnet localhost 2602<br />Password:<br />ripd&gt; en<br />ripd# conf t<br />ripd(config)# hostname r2_ripd<br />r2_ripd(config)# router rip<br />r2_ripd(config-router)# network 192.168.5.0/24<br /><br />执行完network命令，我们看到第一台机器的tail -f /usr/local/etc/ripd.log输出下面的信息：<br /><br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 22:19:15 RIP: RECV packet from 192.168.5.123 port 520 on eth0<br />2002/04/28 22:19:15 RIP: RECV REQUEST version 2 packet size 24<br />2002/04/28 22:19:15 RIP:   0.0.0.0/0 -&gt; 0.0.0.0 family 0 tag 0 metric 16<br />2002/04/28 22:19:15 RIP: update routes to neighbor 192.168.5.123<br />2002/04/28 22:19:35 RIP: update timer fire!<br />2002/04/28 22:19:35 RIP: SEND UPDATE to eth0 ifindex 2<br />2002/04/28 22:19:35 RIP: multicast announce on eth0<br />2002/04/28 22:19:35 RIP: update routes on interface eth0 ifindex 2<br />--------------------------------8&lt;---------------------------------------<br /><br />r1通过UDP广播接收到192.168.5.123的更新包，并且把192.168.5.123设为neighbor。<br /><br />保存一下配置<br /><br />r1_ripd# copy run start<br />Configuration saved to /usr/local/etc/ripd.conf<br />r2_ripd# copy run start<br />Configuration saved to /usr/local/etc/ripd.conf<br /><br />Zebra还支持很多RIP功能，如果Filtering RIP Routes, RIP route-map, RIP Authentication等，有条件有时<br /><br />间 的话可以做更复杂的实验。<br /><br />3、用Zebra做OSPF实验<br /><br />OSPF（开放最短路径优先）路由协议是一项链路状态型技术，是目前IGP中应用最广、性能最优的一个 协议，<br /><br />解决了RIP不能解决的大型、可扩展的网络需求而写的，适用于大规模的网络。<br /><br />Zebra支持OSPFv2和OSPFv3（用于IPv6的OSPF，CISCO还未对其封装），由于条件所限，下面的OSPF实 验同样是<br /><br />在两台单网卡的RedHat7.2下做的。<br /><br />Zebra使用ospfd程序实现OSPF路由功能，但ospfd需要从zebra程序获得接口信息，所以zebra程序必须在 ospfd<br /><br />程序之前运行。ospfd不支持多个OSPF进程，我们不能指定OSPF进程号。<br /><br />初始化第一台机器：<br /><br />shell_1&gt; cd /usr/local/etc<br />shell_1&gt; cp zebra.conf.sample zebra.conf<br />shell_1&gt; cp ospfd.conf.sample ospfd.conf<br />shell_1&gt; zebra -d<br /><br />进入zebra设置IP<br /><br />shell_1&gt; telnet localhost 2601<br />Password:<br />Router&gt; en<br />Password:<br />Router# conf t<br />Router(config)# hostname r1<br />r1(config)# int eth0<br />r1(config-if)# ip address 192.168.5.121/24<br />r1(config-if)# ctrl+z<br />r1# copy run start<br /><br />进入第一台机器的ospf设置<br /><br />shell_1&gt; ospfd -d<br />shell_1&gt; telnet localhost 2604<br />Password:<br />ospfd&gt; en<br />ospfd# conf t<br />ospfd(config)# hostname r1_ospfd !改个名字好辨认<br />r1_ospfd(config)# router ospf !启动ospf<br />r1_ospfd(config-router)# ospf router-id 192.168.5.121 !设置router-id<br />r1_ospfd(config-router)# network 192.168.5.0/24 area 0<br />!最关键的，来标识路由器上哪些IP网络号是OSPF的一部分，对于每个网络，我们必须标识该网络所属 的区域<br /><br />。由于我们只有两台机器，当然只有一个网络，所以只需执行一个network命令就够了。<br /><br />对于我们的小网络，ospf就算配好了，下面来检验一下：<br /><br />r1_ospfd(config-router)# ctrl+z<br />r1_ospfd# sh ip ospf route<br />============ OSPF network routing table ============<br />N    192.168.5.0/24        [10] area: 0.0.0.0<br />                           directly attached to eth0<br /><br />============ OSPF router routing table =============<br /><br />============ OSPF external routing table ===========<br /><br />r1_ospfd# sh ip ospf database<br /><br />       OSPF Router with ID (192.168.5.121)<br /><br />                Router Link States (Area 0.0.0.0)<br /><br />Link ID         ADV Router      Age  Seq#       CkSum  Link count<br />192.168.5.121   192.168.5.121    126 0x80000002 0x8584 1<br /><br />r1_ospfd# sh ip ospf int eth0<br />eth0 is up, line protocol is up<br /><br />  Internet Address 192.168.5.121/24, Area 0.0.0.0<br />  Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10<br />  Transmit Delay is 1 sec, State DR, Priority 1<br />  Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121<br />  No backup designated router on this network<br />  Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5<br />    Hello due in 00:00:07<br />  Neighbor Count is 0, Adjacent neighbor count is 0<br /><br />由于网络里没有其它的路由器，r1就把自己选为DR（指定路由器）了。Zebra对log处理可能有些问题，使 用<br /><br />log stdout不能显示各种debug信息，所以只能记录到文件，在shell下用tail命令查看。而且debug命令和 实<br /><br />际路由器也有不同。<br /><br />r1_ospfd# debug ospf event<br />r1_ospfd(config)# log file /usr/local/etc/ospfd.log<br /><br />然后我们在shell下查看debug信息<br /><br />shell_1&gt; tail -f /usr/local/etc/ospfd.log<br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 14:24:27 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 14:24:37 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 14:24:47 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 14:24:57 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 14:25:07 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />--------------------------------8&lt;---------------------------------------<br /><br />我们错过了最开始的信息，看到路由器每隔10秒发送一个hello数据包。hello数据包通过多目组播地址 <br /><br />224.0.0.5被发送出去，如果我们打开debug ospf packet all就能很清楚的看到。<br /><br />第二台机器的设置<br /><br />前面的初始化和第一台一样，不过这里名字设成r2便于辨认，IP设成了192.168.5.123/24。<br /><br />进入第二台机器的ospf设置<br /><br />shell_2&gt; ospfd -d<br />shell_2&gt; telnet localhost 2604<br />Password:<br />ospfd&gt; en<br />ospfd# conf t<br />ospfd(config)# hostname r2_ospfd<br />r2_ospfd(config)# router ospf<br />r2_ospfd(config-router)# ospf router-id 192.168.5.123<br />r2_ospfd(config-router)# network 192.168.5.0/24 area 0<br /><br />执行完network命令，我们看到第一台机器的tail -f /usr/local/etc/ospfd.log输出下面的信息：<br /><br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 14:25:51 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*<br />2002/04/28 14:25:51 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start<br />2002/04/28 14:25:52 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 14:25:52 OSPF: couldn't find any VL to associate the packet with<br />2002/04/28 14:25:52 OSPF: DR-Election[1st]: Backup 192.168.5.123<br />2002/04/28 14:25:52 OSPF: DR-Election[1st]: DR     192.168.5.121<br />2002/04/28 14:25:52 OSPF: Packet[DD]: Negotiation done (Slave).<br />--------------------------------8&lt;---------------------------------------<br /><br />r1收到r2(192.168.5.123)发过来的hello数据包，交换信息后选举DR，由于本身192.168.5.121是DR了，所以 <br /><br />只选举了BDR就好了。这时在r1上就能看到r2了。<br /><br />r1_ospfd# sh ip ospf neig<br /><br />Neighbor ID     Pri   State           Dead Time   Address         Interface              RXmtL <br /><br />RqstL DBsmL<br />192.168.5.123     1   Full/Backup     00:00:37    192.168.5.123   eth0:192.168.5.121     0     0  <br /><br />   0<br /><br />检验其它信息<br /><br />r1_ospfd# sh ip ospf database<br /><br />       OSPF Router with ID (192.168.5.121)<br /><br />                Router Link States (Area 0.0.0.0)<br /><br />Link ID         ADV Router      Age  Seq#       CkSum  Link count<br />192.168.5.121   192.168.5.121   1259 0x80000008 0x534e 1<br />192.168.5.123   192.168.5.123   1265 0x80000006 0x534a 1<br /><br />                Net Link States (Area 0.0.0.0)<br /><br />Link ID         ADV Router      Age  Seq#       CkSum<br />192.168.5.123   192.168.5.123   1265 0x80000001 0x5a5a<br /><br />r1_ospfd# sh ip ospf int eth0<br />eth0 is up, line protocol is up<br /><br />  Internet Address 192.168.5.121/24, Area 0.0.0.0<br />  Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10<br />  Transmit Delay is 1 sec, State DR, Priority 1<br />  Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121<br />  Backup Designated Router (ID) 192.168.5.123, Interface Address 192.168.5.123<br />  Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5<br />    Hello due in 00:00:01<br />  Neighbor Count is 1, Adjacent neighbor count is 1<br /><br />和前面的输出信息相比，发生了很多变化，两台路由器已经相互识别了。OSPF不象RIP一样，每隔30秒 给所有<br /><br />的邻居广播一次完整的路由表，而是通过IP多目组播地址224.0.0.5每隔10秒发送一个很小的hello 数据包来维<br /><br />护邻居关系，当链路发生变化的时候，才重新计算。<br /><br />拔掉两台机器连接的网线，看ospfd.log的记录：<br /><br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 16:25:53 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 16:25:57 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*<br />2002/04/28 16:26:03 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 16:26:13 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 16:26:23 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 16:26:33 OSPF: make_hello: options: 2, int: eth0:192.168.5.121<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1<br />2002/04/28 16:26:37 OSPF: nsm_change_status(): scheduling new router-LSA origination<br />2002/04/28 16:26:37 OSPF: DR-Election[1nd]: Backup 0.0.0.0<br />2002/04/28 16:26:37 OSPF: DR-Election[1nd]: DR     192.168.5.121<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1<br />2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1<br />2002/04/28 16:26:37 OSPF: Timer[router-LSA]: (router-LSA Refresh expire)<br />2002/04/28 16:26:37 OSPF: counting fully adjacent virtual neighbors in area 0.0.0.0<br />2002/04/28 16:26:37 OSPF: there are 0 of them<br />2002/04/28 16:26:37 OSPF: SPF: calculation timer scheduled<br />2002/04/28 16:26:37 OSPF: SPF: calculation timer delay = 5<br />2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering int eth0:192.168.5.121<br />2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering nbr 192.168.5.121<br />2002/04/28 16:26:42 OSPF: SPF: Timer (SPF calculation expire)<br />2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Start<br />2002/04/28 16:26:42 OSPF: ospf_spf_calculate: running Dijkstra for area 0.0.0.0<br />2002/04/28 16:26:42 OSPF: SPF Result: 0 [R] 192.168.5.121<br />2002/04/28 16:26:42 OSPF: ========== OSPF routing table ==========<br />2002/04/28 16:26:42 OSPF: ========================================<br />2002/04/28 16:26:42 OSPF: ospf_process_stub():processing stubs for area 0.0.0.0<br />2002/04/28 16:26:42 OSPF: ospf_process_stub():processing router LSA, id: 192.168.5.121<br />2002/04/28 16:26:42 OSPF: ospf_process_stub(): we have 1 links to process<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Start<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): processing route to 192.168.5.0/24<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): calculated cost is 0 + 10 = 10<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): installing new route<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): this network is on this router<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): the interface is eth0:192.168.5.121<br />2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Stop<br />2002/04/28 16:26:42 OSPF: children of V:<br />2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Stop<br />2002/04/28 16:26:42 OSPF: ospf_ia_routing():start<br />2002/04/28 16:26:42 OSPF: ospf_ia_routing():not ABR, considering all areas<br />2002/04/28 16:26:42 OSPF: Pruning unreachable networks<br />2002/04/28 16:26:42 OSPF: Pruning unreachable routers<br />2002/04/28 16:26:42 OSPF: Route: Router Routing Table free<br />2002/04/28 16:26:42 OSPF: SPF: calculation complete<br />--------------------------------8&lt;---------------------------------------<br /><br />我们看到r1生成一个LSA包，通知其它路由器，由于网络里只有自己了，又选自己为DR。r2也是一样。 我们再<br /><br />插上网线，查看ospfd.log：<br /><br />--------------------------------8&lt;---------------------------------------<br />2002/04/28 16:52:08 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*<br />2002/04/28 16:52:08 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start<br />2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 192.168.5.123<br />2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR     192.168.5.121<br />2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 0.0.0.0<br />2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR     192.168.5.123<br />2002/04/28 16:52:08 OSPF: DR-Election[2nd]: Backup 192.168.5.121<br />2002/04/28 16:52:08 OSPF: DR-Election[2nd]: DR     192.168.5.123<br />--------------------------------8&lt;---------------------------------------<br /><br />由于拔了网线，r1和r2都把自己选为DR，一个网络只能有一个DR，所以恢复连接后它们重新进行了DR选 举，由<br /><br />于192.168.5.123的router id大，所以它被选为DR。<br /><br />保存一下配置<br /><br />r1_ospfd# copy run start<br />Configuration saved to /usr/local/etc/ospfd.conf<br />r2_ospfd# copy run start<br />Configuration saved to /usr/local/etc/ospfd.conf<br /><br />以上只是演示了最简单的OSPF的配置，而OSPF在大型网络才广泛的使用，配置也复杂多很多。即使是 Zebra，<br /><br />也还可用做复杂的多的OSPF实验。<br /><br />4、用Zebra做BGP实验<br /><br />RIP和OSPF都是内部网关协议（IGP），BGP属于外部网关协议（EGP）。BGP广泛用于Internet以连接 ISP，并将<br /><br />企业与ISP互连。<br /><br />当BGP的影响被完全了解，并且至少下列情况之一存在时，在AS中使用BGP才是最恰当的：<br />  1 AS允许数据包穿过它到达其它自治系统（例如，某个服务提供商）。<br />  2 AS有到其它自治系统的多条连接。<br />  3 必须对进入和离开AS的数据流进行控制。<br /><br />对于互连的自治系统来说，BGP并不总是恰当的解决方案，如果有如下情况中的一个或多个时，不要使 用BGP：<br />  1 只有到Internet或另一AS的单一连接。<br />  2 无需考虑路由策略或路由选择。<br />  3 路由器缺乏经常性的BGP更新的内存或处理器。<br />  4 对路由过滤和BGP路径选择过程的了解十分有限。<br />  5 在自治系统间的带宽较低。<br />在这些情况下，应该使用静态路由。<br /><br />Zebra支持BGP-4和BGP-4+，下面实验只是演示BGP的基本命令，以及debug的一些信息。一个比较复杂 的用<br /><br />Zebra做BGP实验见http://www.unixreview.com/print/documentID=15977，有条件可以做一下。<br /><br />Zebra使用bgpd程序实现BGP路由功能，但bgpd需要从zebra程序获得接口信息，所以zebra程序必须在 bgpd程序<br /><br />之前运行。<br /><br />初始化第一台机器：<br /><br />shell_1&gt; cd /usr/local/etc<br />shell_1&gt; cp zebra.conf.sample zebra.conf<br />shell_1&gt; cp bgpd.conf.sample bgpd.conf<br />shell_1&gt; zebra -d<br /><br />还有一个bgpd.conf.sample2配置样例是用于IPv6的。<br /><br />进入zebra设置IP<br /><br />shell_1&gt; telnet localhost 2601<br />Password:<br />Router&gt; en<br />Password:<br />Router# conf t<br />Router(config)# hostname r1<br />r1(config)# int eth0<br />r1(config-if)# ip address 192.168.5.121/24<br />r1(config-if)# ctrl+z<br />r1# copy run start<br /><br />进入第一台机器的bgp设置<br /><br />shell_1&gt; bgpd -d<br /><br />启动bgpd，我们看到TCP端口179已经打开。两台BGP路由器相互间建立一条TCP连接，交换消息以打开 和确认连<br /><br />接参数。这两台路由器被称为对等路由器，或者邻居。<br /><br />shell_1&gt; telnet localhost 2605<br />Password:<br />bgpd&gt; en<br />bgpd# conf t<br />bgpd(config)# hostname r1_bgpd<br />r1_bgpd(config)# router bgp 7675<br /><br />配置样例里已经指定了AS为7675，我们懒的改就拿来用。AS是一个16bit的数字，其范围从1到 65535。RFC <br /><br />1930给出了AS编号使用指南。从64512到65535的AS编号范围是留作私用的，类似私有IP。<br /><br />r1_bgpd(config-router)# network 192.168.5.0/24<br />r1_bgpd(config-router)# neighbor 192.168.5.121 remote-as 7676<br /><br />查看bgp信息：<br /><br />r1_bgpd# sh ip bgp<br />BGP table version is 0, local router ID is 192.168.5.123<br />Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal<br />Origin codes: i - IGP, e - EGP, ? - incomplete<br /><br />   Network          Next Hop            Metric LocPrf Weight Path<br />*&gt; 192.168.5.0      0.0.0.0                            32768 i<br /><br />Total number of prefixes 1<br /><br />把log记录到文件：<br /><br />r1_bgpd# conf t<br />r1_bgpd(config)# log file /usr/local/etc/bgpd.log<br /><br />打开debug选项：<br /><br />r1_bgpd(config)# exit<br />r1_bgpd debug bgp events<br />r1_bgpd debug bgp keepalives<br />r1_bgpd debug bgp updates<br /><br />然后在shell下用tail查看log记录：<br /><br />shell_1&gt; tail -f /usr/local/etc/bgpd.log<br />--------------------------------8&lt;---------------------------------------<br />2002/04/29 19:13:08 BGP: 192.168.5.121 [Event] Connect start to 192.168.5.121 fd 10<br />2002/04/29 19:13:11 BGP: 192.168.5.121 [Event] Connect failed (Operation now in progress)<br />--------------------------------8&lt;---------------------------------------<br /><br />r1不能连接邻居192.168.5.121。<br /><br />第二台机器的设置<br /><br />前面的初始化和第一台一样，不过这里名字设成r2便于辨认，IP设成了192.168.5.123/24。<br /><br />进入第二台机器的bgp设置<br /><br />shell_2&gt; bgpd -d<br />shell_2&gt; telnet localhost 2605<br />Password:<br />bgpd&gt; en<br />bgpd# conf t<br />bgpd(config)# hostname r2_bgpd<br /><br />AS要设成不一样，所以修改一下：<br /><br />r2_bgpd(config)# no router bgp 7675<br />r2_bgpd(config)# router bgp 7676<br />r2_bgpd(config-router)# network 192.168.5.0/24<br />r2_bgpd(config-router)# neighbor 192.168.5.123 remote-as 7675<br /><br />这时第一台机器的log出现如下信息：<br /><br />--------------------------------8&lt;---------------------------------------<br />2002/04/29 19:16:35 BGP: [Event] BGP connection from host 192.168.5.121<br />2002/04/29 19:16:35 BGP: [Event] Make dummy peer structure until read Open packet<br />2002/04/29 19:16:35 BGP: 192.168.5.121 [Event] Transfer temporary BGP peer to existing one<br />2002/04/29 19:16:35 BGP: 192.168.5.121 [Event] Accepting BGP peer delete<br />2002/04/29 19:16:35 BGP: 192.168.5.121 send UPDATE 192.168.5.0/24 nexthop 192.168.5.123, origin <br /><br />i, path<br />2002/04/29 19:16:35 BGP: 192.168.5.121 rcvd UPDATE w/ attr: nexthop 192.168.5.121, origin i, path <br /><br />7676<br />2002/04/29 19:16:35 BGP: 192.168.5.121 rcvd 192.168.5.0/24<br />--------------------------------8&lt;---------------------------------------<br /><br />两台bgp已经互连了。再看一下第一台机器的bgp信息：<br /><br />r1_bgpd# sh ip bgp<br />BGP table version is 0, local router ID is 192.168.5.123<br />Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal<br />Origin codes: i - IGP, e - EGP, ? - incomplete<br /><br />   Network          Next Hop            Metric LocPrf Weight Path<br />*  192.168.5.0      192.168.5.121                          0 7676 i<br />*&gt;                  0.0.0.0                            32768 i<br /><br />Total number of prefixes 1<br /><br />r1_bgpd# sh ip bgp neighbors<br />BGP neighbor is 192.168.5.121, remote AS 7676, local AS 7675, external link<br />  BGP version 4, remote router ID 192.168.5.121<br />  BGP state = Established, up for 00:01:13<br />  Last read 00:00:13, hold time is 180, keepalive interval is 60 seconds<br />  Neighbor capabilities:<br />    Route refresh: advertised and received (old and new)<br />    Address family IPv4 Unicast: advertised and received<br />  Received 98 messages, 0 notifications, 0 in queue<br />  Sent 103 messages, 0 notifications, 0 in queue<br />  Route refresh request: received 0, sent 0<br />  Minimum time between advertisement runs is 0 seconds<br /><br />For address family: IPv4 Unicast<br />  Community attribute sent to this neighbor (both)<br />  1 accepted prefixes<br /><br />  Connections established 2; dropped 1<br />Local host: 192.168.5.123, Local port: 179<br />Foreign host: 192.168.5.121, Foreign port: 1029<br />Nexthop: 192.168.5.123<br />Read thread: on  Write thread: off<br /><br />Zebra还支持很多BGP的特性，请参考GNU Zebra Manual，有条件的可以做一下那些实验。<br /><br />Zebra的Mailing List比较活跃，有许多人在那里讨论Zebra的开发和配置等等，有问题的话，在那里应该 能得<br /><br />到解答。<br /><br />Reference<br /><br />GNU Zebra Manual<br />http://www.pointless.net/~jasper/zebra-html/zebra_toc.html#SEC_Contents<br />组建可扩展的Cisco网络<br />http://www.unixreview.com/print/documentID=15977]</div><br />                       	</div>
								</td>
								<td class="vbmenu_control" id="threadtools" nowrap="">
								</td>
						</tr>
				</tbody>
		</table>
		<!-- / toolbar -->
		<!-- end content table -->
		<!-- / close content container -->
		<!-- / end content table -->
		<div id="posts">
				<!-- post #792716 -->
				<!-- open content container -->
				<div align="center"> </div>
		</div>
<img src ="http://www.cnitblog.com/chlclan/aggbug/13246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-04 22:11 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/04/13246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RIP/RIPng 相关</title><link>http://www.cnitblog.com/chlclan/archive/2006/07/03/13167.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Mon, 03 Jul 2006 02:40:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/03/13167.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/13167.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/03/13167.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/13167.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/13167.html</trackback:ping><description><![CDATA[
		<p>RIPv1/RIPv2  UDP <font color="#cc3333">port 520</font></p>
		<p>RIPng              UDP <font color="#ff3333">port 521</font><br /><br />RIPv1有类别路由查找，通过数据包目的地址与路由表中的表项进行A/B/C类地址的匹配来选路<br />RIPv2无类别路由查找，通告数据包的目的地址与路由表中的表项进行一位一位的最佳匹配，而不管是何种类别的地址（A/B/C）<br /><br />非请求的ripng消息绝不会经由路由器传播<br />ripng中的下一跳地址或者为0::0(表示下一跳应该是通告该ripng消息的源地址)，或者是<font color="#ff0000">链路本地地址</font>（必须是链路本地地址），若不是，则当作0::0处理。<br /><br />发送ripng消息的的数据包的源地址必须是链路本地地址的ipv6地址，定期通告将跳数设置为255以保证路由更新报文只发送给邻节点，而不被路由器转发。<br /><br />在周期更新和触发更新（路由表的变化会引起路由器的触发更新操作）中，消息的源地址必须是本地链路地址，目的地址必须是多播地址，源地址作为下一跳放在收到这个响应的路由器的路由表中。与对请求的响应不同，在应答一个单播请球时，源地址必须时一个有效的全局单播地址，且目的地址必须是请求信息的源地址。对响应消息设置ripng各内容，并启动RTE表项。<br /><br />ripv1 <font color="#ff3366">没有下一跳的信息</font>，接收端路由器把报文的源IP地址作为目的网络路由的下一跳。不含验证信息，不安全。广播方式发送报文<br /><font color="#cc3366">ripv2中明确包含下一跳的信息</font>。设计了验证报文来增强安全性，多播方式<br /><font color="#ff3366">ripng中的下一跳字段是作为一个单独的RTE存在的</font>。最多只能携带25个RTE，ipv6本身具有较好的安全策略，所以不需要单独设计安全性验证报文。多播<br /><br />RIPv1使用广播方式通告路由<br />RIPv2使用组播方式通告路由，组播地址224.0.0.9<br /><br /></p>
<img src ="http://www.cnitblog.com/chlclan/aggbug/13167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-03 10:40 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/03/13167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 中有关路由方面的一些命令</title><link>http://www.cnitblog.com/chlclan/archive/2006/07/02/13155.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Sun, 02 Jul 2006 13:08:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/02/13155.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/13155.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/02/13155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/13155.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/13155.html</trackback:ping><description><![CDATA[Linux 中有关路由方面的一些命令<br />显示地址：<br />ip address show<br />ifconfig<br /><br />显示路由：<br />ip route show<br />route -n<br /><br />查看ARP缓存表：<br />ip neigh show<br />删除ARP缓存表：<br />ip neigh delete 9.3.76.43 dev eth0<br /><br />IPv4隧道的配置（IP-IN-IP隧道）<br />A－10.0.1.0/24     }－172.19.20.21（中间网络）172.16.17.18－－{10.0.2.0/24－B<br />A上做如下配置：<br />ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21<br />route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0<br />B上做如下配置：<br />ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18<br />route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0<br />中止隧道<br />ifconfig tunl0 down<br /><br />IPv6隧道的配置：<br />我们假设你有如下的IPv6网络，你想把它连接到6bone或者一个朋友那里。<br />Network 3ffe:406:5:1:5:a:2:1/96<br />你的IPv4地址是172.16.17.18，6bone 路由器的IPv4地址是172.22.23.24。<br />ip tunnel add sixbone mode sit remote 172.22.23.24 local 172.16.17.18 ttl 255<br />ip link set sixbone up<br />ip addr add 3ffe:406:5:1:5:a:2:1/96 dev sixbone<br />ip route add 3ffe::/15 dev sixbone<br />让我们来讨论一下。我们创建了一个叫做sixbone的隧道设备。我们设置它的模式是sit(也就是在IPv4隧道中使用IPv6)并且告诉它对端(remote)和本端 (local)在哪里。TTL设置为最大，255。接着，我们激活了这个设备(up)。然后，我们添加了我们自己的网络地址，并添加了一条通过隧道去往3ffe::/15 (现在全部属于6bone)的路由。<br />GRE隧道是现在最受欢迎的隧道技术。它也广泛地应用于Linux世界之外并成为一个标准，是个好东西。<img src ="http://www.cnitblog.com/chlclan/aggbug/13155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-02 21:08 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/02/13155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以太网交换原理</title><link>http://www.cnitblog.com/chlclan/archive/2006/07/02/13147.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Sun, 02 Jul 2006 09:00:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/02/13147.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/13147.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/02/13147.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/13147.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/13147.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以太网交换原理																																																																														本文力求阐明以太网交换原理，并对相关知识作以介绍。																																										...&nbsp;&nbsp;<a href='http://www.cnitblog.com/chlclan/archive/2006/07/02/13147.html'>阅读全文</a><img src ="http://www.cnitblog.com/chlclan/aggbug/13147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-02 17:00 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/02/13147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二层交换机,三层交换机,四层交换机的区别</title><link>http://www.cnitblog.com/chlclan/archive/2006/07/02/13146.html</link><dc:creator>Enjoy Life</dc:creator><author>Enjoy Life</author><pubDate>Sun, 02 Jul 2006 08:36:00 GMT</pubDate><guid>http://www.cnitblog.com/chlclan/archive/2006/07/02/13146.html</guid><wfw:comment>http://www.cnitblog.com/chlclan/comments/13146.html</wfw:comment><comments>http://www.cnitblog.com/chlclan/archive/2006/07/02/13146.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chlclan/comments/commentRss/13146.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chlclan/services/trackbacks/13146.html</trackback:ping><description><![CDATA[
		<br />二层交换技术是发展比较成熟，二层交换机属数据链路层设备，可以识别数据包中的MAC地<br />址信息，根据MAC地址进行转发，并将这些MAC地址与对应的端口记录在自己内部的一个地<br />址表中。具体的工作流程如下： 
<p></p><p>（1） 当交换机从某个端口收到一个数据包，它先读取包头中的源MAC地址，这样它就知道<br />源MAC地址的机器是连在哪个端口上的；</p><p>（2） 再去读取包头中的目的MAC地址，并在地址表中查找相应的端口；</p><p>（3） 如表中有与这目的MAC地址对应的端口，把数据包直接复制到这端口上；</p><p>（4） 如表中找不到相应的端口则把数据包广播到所有端口上，当目的机器对源机器回应<br />时，交换机又可以学习一目的MAC地址与哪个端口对应，在下次传送数据时就不再需要对所<br />有端口进行广播了。</p><p>不断的循环这个过程，对于全网的MAC地址信息都可以学习到，二层交换机就是这样建立和<br />维护它自己的地址表。</p><p>从二层交换机的工作原理可以推知以下三点：</p><p>（1） 由于交换机对多数端口的数据进行同时交换，这就要求具有很宽的交换总线带宽，<br />如果二层交换机有N个端口，每个端口的带宽是M，交换机总线带宽超过N×M，那么这交换<br />机就可以实现线速交换；</p><p>（2） 学习端口连接的机器的MAC地址，写入地址表，地址表的大小（一般两种表示方式：<br />一为BEFFER RAM，一为MAC表项数值），地址表大小影响交换机的接入容量；</p><p>（3） 还有一个就是二层交换机一般都含有专门用于处理数据包转发的ASIC （Applicati<br />on specific Integrated Circuit）芯片，因此转发速度可以做到非常快。由于各个厂家<br />采用ASIC不同，直接影响产品性能。</p><p>以上三点也是评判二三层交换机性能优劣的主要技术参数，这一点请大家在考虑设备选型<br />时注意比较。</p><p>（二）路由技术</p><p>路由器工作在OSI模型的第三层---网络层操作，其工作模式与二层交换相似，但路由器工<br />作在第三层，这个区别决定了路由和交换在传递包时使用不同的控制信息，实现功能的方<br />式就不同。工作原理是在路由器的内部也有一个表，这个表所标示的是如果要去某一个地<br />方，下一步应该向那里走，如果能从路由表中找到数据包下一步往那里走，把链路层信息<br />加上转发出去；如果不能知道下一步走向那里，则将此包丢弃，然后返回一个信息交给源<br />地址。</p><p>路由技术实质上来说不过两种功能：决定最优路由和转发数据包。路由表中写入各种信息<br />，由路由算法计算出到达目的地址的最佳路径，然后由相对简单直接的转发机制发送数据<br />包。接受数据的下一台路由器依照相同的工作方式继续转发，依次类推，直到数据包到达<br />目的路由器。</p><p>而路由表的维护，也有两种不同的方式。一种是路由信息的更新，将部分或者全部的路由<br />信息公布出去，路由器通过互相学习路由信息，就掌握了全网的拓扑结构，这一类的路由<br />协议称为距离矢量路由协议；另一种是路由器将自己的链路状态信息进行广播，通过互相<br />学习掌握全网的路由信息，进而计算出最佳的转发路径，这类路由协议称为链路状态路由<br />协议。</p><p>由于路由器需要做大量的路径计算工作，一般处理器的工作能力直接决定其性能的优劣。<br />当然这一判断还是对中低端路由器而言，因为高端路由器往往采用分布式处理系统体系设<br />计。</p><p>（三）三层交换技术</p><p>近年来的对三层技术的宣传，耳朵都能起茧子，到处都在喊三层技术，有人说这是个非常<br />新的技术，也有人说，三层交换嘛，不就是路由器和二层交换机的堆叠，也没有什么新的<br />玩意，事实果真如此吗？下面先来通过一个简单的网络来看看三层交换机的工作过程。</p><p><br />组网比较简单</p><p>使用IP的设备A------------------------三层交换机------------------------使用IP的<br />设备B</p><p>比如A要给B发送数据，已知目的IP，那么A就用子网掩码取得网络地址，判断目的IP是否与<br />自己在同一网段。</p><p>如果在同一网段，但不知道转发数据所需的MAC地址，A就发送一个ARP请求，B返回其MAC地<br />址，A用此MAC封装数据包并发送给交换机，交换机起用二层交换模块，查找MAC地址表，将<br />数据包转发到相应的端口。</p><p>如果目的IP地址显示不是同一网段的，那么A要实现和B的通讯，在流缓存条目中没有对应<br />MAC地址条目，就将第一个正常数据包发送向一个缺省网关，这个缺省网关一般在操作系统<br />中已经设好，对应第三层路由模块，所以可见对于不是同一子网的数据，最先在MAC表中放<br />的是缺省网关的MAC地址；然后就由三层模块接收到此数据包，查询路由表以确定到达B的<br />路由，将构造一个新的帧头，其中以缺省网关的MAC地址为源MAC地址，以主机B的MAC地址<br />为目的MAC地址。通过一定的识别触发机制，确立主机A与B的MAC地址及转发端口的对应关<br />系，并记录进流缓存条目表，以后的A到B的数据，就直接交由二层交换模块完成。这就通<br />常所说的一次路由多次转发。</p><p>以上就是三层交换机工作过程的简单概括，可以看出三层交换的特点：</p><p>由硬件结合实现数据的高速转发。</p><p>这就不是简单的二层交换机和路由器的叠加，三层路由模块直接叠加在二层交换的高速背<br />板总线上，突破了传统路由器的接口速率限制，速率可达几十Gbit/s。算上背板带宽，这<br />些是三层交换机性能的两个重要参数。</p><p>简洁的路由软件使路由过程简化。</p><p>大部分的数据转发，除了必要的路由选择交由路由软件处理，都是又二层模块高速转发，<br />路由软件大多都是经过处理的高效优化软件，并不是简单照搬路由器中的软件。</p><p>结论</p><p>二层交换机用于小型的局域网络。这个就不用多言了，在小型局域网中，广播包影响不大<br />，二层交换机的快速交换功能、多个接入端口和低谦价格为小型网络用户提供了很完善的<br />解决方案。</p><p>路由器的优点在于接口类型丰富，支持的三层功能强大，路由能力强大，适合用于大型的<br />网络间的路由，它的优势在于选择最佳路由，负荷分担，链路备份及和其他网络进行路由<br />信息的交换等等路由器所具有功能。</p><p>三层交换机的最重要的功能是加快大型局域网络内部的数据的快速转发，加入路由功能也<br />是为这个目的服务的。如果把大型网络按照部门，地域等等因素划分成一个个小局域网，<br />这将导致大量的网际互访，单纯的使用二层交换机不能实现网际互访；如单纯的使用路由<br />器，由于接口数量有限和路由转发速度慢，将限制网络的速度和网络规模，采用具有路由<br />功能的快速转发的三层交换机就成为首选。</p><p>一般来说，在内网数据流量大，要求快速转发响应的网络中，如全部由三层交换机来做这<br />个工作，会造成三层交换机负担过重，响应速度受影响，将网间的路由交由路由器去完成<br />，充分发挥不同设备的优点，不失为一种好的组网策略，当然，前提是客户的腰包很鼓，<br />不然就退而求其次，让三层交换机也兼为网际互连。</p><p>第四层交换的一个简单定义是：它是一种功能，它决定传输不仅仅依据MAC地址(第二层网<br />桥)或源/目标IP地址(第三层路由),而且依据TCP/UDP(第四层) 应用端口号。第四层交换功<br />能就象是虚IP，指向物理服务器。它传输的业务服从的协议多种多样，有HTTP、FTP、NFS<br />、Telnet或其他协议。这些业务在物理服务器基础上，需要复杂的载量平衡算法。在IP世<br />界，业务类型由终端TCP或UDP端口地址来决定，在第四层交换中的应用区间则由源端和终<br />端IP地址、TCP和UDP端口共同决定。 <br />　 在第四层交换中为每个供搜寻使用的服务器组设立虚IP地址（VIP），每组服务器支持<br />某种应用。在域名服务器（DNS）中存储的每个应用服务器地址是VIP，而不是真实的服务<br />器地址。 <br />　 当某用户申请应用时，一个带有目标服务器组的VIP连接请求（例如一个TCP SYN包）发<br />给服务器交换机。服务器交换机在组中选取最好的服务器，将终端地址中的VIP用实际服务<br />器的IP取代，并将连接请求传给服务器。这样，同一区间所有的包由服务器交换机进行映<br />射，在用户和同一服务器间进行传输。 <br />第四层交换的原理 <br />　 OSI模型的第四层是传输层。传输层负责端对端通信，即在网络源和目标系统之间协调<br />通信。在IP协议栈中这是TCP（一种传输协议）和UDP（用户数据包协议）所在的协议层。</p><p>　 在第四层中，TCP和UDP标题包含端口号（portnumber），它们可以唯一区分每个数据包<br />包含哪些应用协议（例如HTTP、FTP等）。端点系统利用这种信息来区分包中的数据，尤其<br />是端口号使一个接收端计算机系统能够确定它所收到的IP包类型，并把它交给合适的高层<br />软件。端口号和设备IP地址的组合通常称作“插口（socket）”。 <br />　 1和255之间的端口号被保留，他们称为“熟知”端口，也就是说，在所有主机TCP/I </p><p>P协议栈实现中，这些端口号是相同的。除了“熟知”端口外，标准UNIX服务分配在256到<br />1024端口范围，定制的应用一般在1024以上分配端口号. <br />　　分配端口号的最近清单可以在RFc1700”Assigned Numbers”上找到。TCP／UDP端 </p><p>口号提供的附加信息可以为网络交换机所利用，这是第4层交换的基础。 <br />　　"熟知"端口号举例: <br />　　 <br />　　　　　　应用协议　　　　 端口号 <br />　　　　　　 FTP　　　　　　　 20（数据） <br />　　　　　　　　　　　　　　　　　 21（控制） <br />　　　　　　 TELNET　　　　23 <br />　　　　　　 SMTP　　　　　 25 <br />　　　　　　 HTTP　　　　　　 80 <br />　　　　　　 NNTP　　　　　 119 <br />　　　　　　 NNMP　　　　　 16 <br />　　　　　　　　　　　　　　　　　 162（SNMP traps） <br />　 TCP/UDP端口号提供的附加信息可以为网络交换机所利用，这是第四层交换的基础。 </p><p>　 具有第四层功能的交换机能够起到与服务器相连接的“虚拟IP”(VIP)前端的作用。 </p><p>每台服务器和支持单一或通用应用的服务器组都配置一个VIP地址。这个VIP地址被发送出<br />去并在域名系统上注册。 <br />　 在发出一个服务请求时，第四层交换机通过判定TCP开始，来识别一次会话的开始。然<br />后它利用复杂的算法来确定处理这个请求的最佳服务器。一旦做出这种决定，交换机就将<br />会话与一个具体的IP地址联系在一起，并用该服务器真正的IP地址来代替服务器上的VIP地<br />址。 </p><p>　 每台第四层交换机都保存一个与被选择的服务器相配的源IP地址以及源TCP 端口相 </p><p>关联的连接表。然后第四层交换机向这台服务器转发连接请求。所有后续包在客户机与服<br />务器之间重新影射和转发，直到交换机发现会话为止。 <br />　 在使用第四层交换的情况下，接入可以与真正的服务器连接在一起来满足用户制定的规<br />则，诸如使每台服务器上有相等数量的接入或根据不同服务器的容量来分配传输流。 </p><p><br />如何选用合适的第四层交换 <br />　　a,速度 <br />　 为了在企业网中行之有效，第四层交换必须提供与第三层线速路由器可比拟的性能。也<br />就是说，第四层交换必须在所有端口以全介质速度操作，即使在多个千兆以太网连接上亦<br />如此。千兆以太网速度等于以每秒1488000 个数据包的最大速度路由(假定最坏的情形,即<br />所有包为以及网定义的最小尺寸,长64字节)。 <br />　　b,服务器容量平衡算法 <br />　　 <br />　 依据所希望的容量平衡间隔尺寸，第四层交换机将应用分配给服务器的算法有很多种，<br />有简单的检测环路最近的连接、检测环路时延或检测服务器本身的闭环反馈。在所有的预<br />测中，闭环反馈提供反映服务器现有业务量的最精确的检测。 <br />　　c,表容量 <br />　 应注意的是，进行第四层交换的交换机需要有区分和存贮大量发送表项的能力。交换机<br />在一个企业网的核心时尤其如此。许多第二/ 三层交换机倾向发送表的大小与网络设备的<br />数量成正比。对第四层交换机，这个数量必须乘以网络中使用的不同应用协议和会话的数<br />量。因而发送表的大小随端点设备和应用类型数量的增长而迅速增长。第四层交换机设计<br />者在设计其产品时需要考虑表的这种增长。大的表容量对制造支持线速发送第四层流量的<br />高性能交换机至关重要. <br />　　d,冗余 <br />　 第四层交换机内部有支持冗余拓扑结构的功能。在具有双链路的网卡容错连接时，就可<br />能建立从一个服务器到网卡，链路和服务器交换器的完全冗余系统。</p><p></p><img src ="http://www.cnitblog.com/chlclan/aggbug/13146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chlclan/" target="_blank">Enjoy Life</a> 2006-07-02 16:36 <a href="http://www.cnitblog.com/chlclan/archive/2006/07/02/13146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>