<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FDS's Blog &#187; 计算机网络</title>
	<atom:link href="http://blog.1xi.net/category/wangluo/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.1xi.net</link>
	<description>收藏和分享</description>
	<lastBuildDate>Thu, 12 May 2011 06:33:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>TCP协议深入理解</title>
		<link>http://blog.1xi.net/wangluo/tcp%e5%8d%8f%e8%ae%ae%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3</link>
		<comments>http://blog.1xi.net/wangluo/tcp%e5%8d%8f%e8%ae%ae%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:40 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/tcp%e5%8d%8f%e8%ae%ae%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3</guid>
		<description><![CDATA[&#160;&#160;&#160; TCP协议在能够发送数据之前就建立起了“连接”。要实现这个连接，启动TCP连接的那一方首先将发送一个SYN(回忆一下在上一篇文章中讲到的TCP包头格式)数据包。这只是一个不包含数据的数据包，然后，打开SYN标记。如果另一方同时在它收到SYN标记的端口通话，它将发回一个SYN+ACK:SYN和ACK标志位都被打开，并将ACK(确认)编号字段设定为刚收到的那个数据包的顺序号字段的值。接下来，连接发起方为了表示收到了这个SYN+ACK信息，会向发送方发送一个最终的确认信息（ACK包）。这种SYN、SYN+ACK、ACK的步骤被称为TCP连接建立时的“三次握手”。在这之后，连接就建立起来了。这个连接将一直保持活动状态，直到超时或者任何一方发出一个FIN(结束)信号。&#160;&#160;&#160;&#160;任何一方都可以关闭一个TCP连接，要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另一方之前关闭，或者双方同时关闭TCP连接。因此，当一方发送一个FIN信号时，另一方可发送“FIN+ACK”，开始关闭自己一方的通信并且确认收到了第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息，确认收到第二个FIN信号。另一方就知道这个连接已经关闭了，并且关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时器，防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说，这个状态会持续1至2分钟。&#160;&#160;&#160;&#160;现在，我们来讨论第一个问题。如果有人(假如一个黑客)在你的Web服务器上留下一个半开或者半关的连接，那就是一个坏消息。每一个连接都要消耗内存，打开数千个虚假的TCP连接可能导致服务器瘫痪。当然，你实际上不可能在不影响TCP正常工作的情况下调整TCP定时器。如果你听说过TCP SYN 攻击的话，那就是这个意思。为了防止出现这种情况，大多数操作系统都要限制半开连接的数量。例如，Linux默认的限制一般是256个。&#160;&#160;&#160;&#160;关于持续流控制问题，现在我们就来讨论这个问题。TCP中实现它的机制是TCP滑动窗口机制。TCP协议使用“重新发送与正向ACK”来保证数据传输的可靠性。发送方将等待一段时间，如果没有收到其发送的数据包的ACK确认信息，发送方就要重新发送。顺便说一下，TCP协议中有许多定时器。这只是其中一个定时器。ACK的概念对于流控制是非常重要的，因为TCP滑动窗口协议使TCP的往复确认变得更有效率。如果TCP要发送一个数据包并且等待每一个ACK确认信息，它实际上就把数据吞吐量削减了一半。&#160;&#160;&#160;&#160;理想的情况是，我们能够一次发送许多数据包，然后等待收到一个确认收到全部数据包的ACK信息，而不用对方发来更多的数据。但是，我们如何知道发送了多少个数据包呢?TCP窗口尺寸可以控制在“已发送但是没有确认”的状态下能够容纳多少个数据包。如果这个窗口尺寸很大，我们不必等待ACK信息就可以发送大量的数据包。这实际上就是流控制。&#160;&#160;&#160;&#160;接收方就是控制窗口大小的那一方。如果接收方将窗口大小设为“0”，那么，发送方根本就不能发送任何数据。如果这个窗口的尺寸是“1”，那么，我们就回到了简单的“发送和等待ACK”的协议。如果最后的窗口尺寸是“0”，发送者将发出一个探测信号以搞清这个窗口什么时间再次打开。如果发送方从来没有收到ACK信息，它就一直不断地重试，直到定时器过期。请记住，这个窗口尺寸在TCP头中是一个16位字段。如果你要一个窗口尺寸(按字节计算)大于16位可以表示的容量（2的16次方个字节），还可以使用一个名为“窗口缩放”的TCP协议选项。这个选项允许窗口尺寸乘以比例因子。如果没有极大的窗口尺寸，TCP协议就就无法充分利用GB级别的高速连接。这也是我们需要针对这些新的高速连接调整TCP参数的原因，&#160;&#160;&#160;&#160;关于TCP流控制的问题，我们不能不提一下Nagle算法。如果我们在一个telnet连接上使用一个大的TCP窗口会发生什么事情呢?你会输入一个指令（例如敲了一个字母），然后一直等待回应它却迟迟不出现在终端回显上。这对于实时通信来说是一个大问题。而且，telnet也会增加网络的阻塞度，因为一个字节的数据（例如我们的一次击键）需要40个字节的包头。于是RFC 896定义这个Nagle算法，用以消除小的数据包。这个思路是我们应该在数据发送之前给先把小数据集中起来然后一次性发送，以便提高效率。为了更有效率，它还限定只允许存在一个未经确认的数据段，你在得到确认信息之前不能发送更多的数据。Telnet和互动SSH连接使用TCP_NODELAY套接口选项启用这个功能，这样当你按下一个按键的时候，你能够立即得到一个回应。&#160;&#160;&#160;&#160;当然，我们仍是忽略了有关TCP协议的许多事情。然而，通过这两篇文章的了解，你应该能够理解其它一些更专业的TCP著作。阻塞控制与流控制不同，本文没有讨论。如果你真的对了解TCP协议的全部工作原理感兴趣，你可以详细阅读TCP RFC。&#160;&#160;&#160;&#160;小结&#160;&#160;&#160;&#160;TCP协议非常善于解决流控制问题，因此非常适应于许多应用程序。TCP协议中的流控制的含义是:“在收到对发送的数据的确认信息这前，我可以发送多少数据?”这就是TCP窗口。学习阻塞控制的问题可以留作读者的练习。需要指出的是，在TCP协议之下连接速度开始很慢，然后速度逐渐加快。这个做法并不总是最理想的。]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp; TCP协议在能够发送数据之前就建立起了“连接”。要实现这个连接，启动TCP连接的那一方首先将发送一个SYN(回忆一下在上一篇文章中讲到的TCP包头格式)数据包。这只是一个不包含数据的数据包，然后，打开SYN标记。如果另一方同时在它收到SYN标记的端口通话，它将发回一个SYN+ACK:SYN和ACK标志位都被打开，并将ACK(确认)编号字段设定为刚收到的那个数据包的顺序号字段的值。接下来，连接发起方为了表示收到了这个SYN+ACK信息，会向发送方发送一个最终的确认信息（ACK包）。这种SYN、SYN+ACK、ACK的步骤被称为TCP连接建立时的“三次握手”。在这之后，连接就建立起来了。这个连接将一直保持活动状态，直到超时或者任何一方发出一个FIN(结束)信号。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;任何一方都可以关闭一个TCP连接，要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另一方之前关闭，或者双方同时关闭TCP连接。因此，当一方发送一个FIN信号时，另一方可发送“FIN+ACK”，开始关闭自己一方的通信并且确认收到了第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息，确认收到第二个FIN信号。另一方就知道这个连接已经关闭了，并且关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时器，防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说，这个状态会持续1至2分钟。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;现在，我们来讨论第一个问题。如果有人(假如一个黑客)在你的Web服务器上留下一个半开或者半关的连接，那就是一个坏消息。每一个连接都要消耗内存，打开数千个虚假的TCP连接可能导致服务器瘫痪。当然，你实际上不可能在不影响TCP正常工作的情况下调整TCP定时器。如果你听说过TCP SYN 攻击的话，那就是这个意思。为了防止出现这种情况，大多数操作系统都要限制半开连接的数量。例如，Linux默认的限制一般是256个。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;关于持续流控制问题，现在我们就来讨论这个问题。TCP中实现它的机制是TCP滑动窗口机制。TCP协议使用“重新发送与正向ACK”来保证数据传输的可靠性。发送方将等待一段时间，如果没有收到其发送的数据包的ACK确认信息，发送方就要重新发送。顺便说一下，TCP协议中有许多定时器。这只是其中一个定时器。ACK的概念对于流控制是非常重要的，因为TCP滑动窗口协议使TCP的往复确认变得更有效率。如果TCP要发送一个数据包并且等待每一个ACK确认信息，它实际上就把数据吞吐量削减了一半。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;理想的情况是，我们能够一次发送许多数据包，然后等待收到一个确认收到全部数据包的ACK信息，而不用对方发来更多的数据。但是，我们如何知道发送了多少个数据包呢?TCP窗口尺寸可以控制在“已发送但是没有确认”的状态下能够容纳多少个数据包。如果这个窗口尺寸很大，我们不必等待ACK信息就可以发送大量的数据包。这实际上就是流控制。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;接收方就是控制窗口大小的那一方。如果接收方将窗口大小设为“0”，那么，发送方根本就不能发送任何数据。如果这个窗口的尺寸是“1”，那么，我们就回到了简单的“发送和等待ACK”的协议。如果最后的窗口尺寸是“0”，发送者将发出一个探测信号以搞清这个窗口什么时间再次打开。如果发送方从来没有收到ACK信息，它就一直不断地重试，直到定时器过期。请记住，这个窗口尺寸在TCP头中是一个16位字段。如果你要一个窗口尺寸(按字节计算)大于16位可以表示的容量（2的16次方个字节），还可以使用一个名为“窗口缩放”的TCP协议选项。这个选项允许窗口尺寸乘以比例因子。如果没有极大的窗口尺寸，TCP协议就就无法充分利用GB级别的高速连接。这也是我们需要针对这些新的高速连接调整TCP参数的原因，<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;关于TCP流控制的问题，我们不能不提一下Nagle算法。如果我们在一个telnet连接上使用一个大的TCP窗口会发生什么事情呢?你会输入一个指令（例如敲了一个字母），然后一直等待回应它却迟迟不出现在终端回显上。这对于实时通信来说是一个大问题。而且，telnet也会增加网络的阻塞度，因为一个字节的数据（例如我们的一次击键）需要40个字节的包头。于是RFC 896定义这个Nagle算法，用以消除小的数据包。这个思路是我们应该在数据发送之前给先把小数据集中起来然后一次性发送，以便提高效率。为了更有效率，它还限定只允许存在一个未经确认的数据段，你在得到确认信息之前不能发送更多的数据。Telnet和互动SSH连接使用TCP_NODELAY套接口选项启用这个功能，这样当你按下一个按键的时候，你能够立即得到一个回应。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;当然，我们仍是忽略了有关TCP协议的许多事情。然而，通过这两篇文章的了解，你应该能够理解其它一些更专业的TCP著作。阻塞控制与流控制不同，本文没有讨论。如果你真的对了解TCP协议的全部工作原理感兴趣，你可以详细阅读TCP RFC。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;小结<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;TCP协议非常善于解决流控制问题，因此非常适应于许多应用程序。TCP协议中的流控制的含义是:“在收到对发送的数据的确认信息这前，我可以发送多少数据?”这就是TCP窗口。学习阻塞控制的问题可以留作读者的练习。需要指出的是，在TCP协议之下连接速度开始很慢，然后速度逐渐加快。这个做法并不总是最理想的。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/tcp%e5%8d%8f%e8%ae%ae%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据通信基础</title>
		<link>http://blog.1xi.net/wangluo/%e6%95%b0%e6%8d%ae%e9%80%9a%e4%bf%a1%e5%9f%ba%e7%a1%80</link>
		<comments>http://blog.1xi.net/wangluo/%e6%95%b0%e6%8d%ae%e9%80%9a%e4%bf%a1%e5%9f%ba%e7%a1%80#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:40 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e6%95%b0%e6%8d%ae%e9%80%9a%e4%bf%a1%e5%9f%ba%e7%a1%80</guid>
		<description><![CDATA[2.1 数据通信的基本概念 　　1．通信的目的就是传递信息。 一次通信中产生和发送信息的一端叫信源，接收信息的一端叫信宿。通信线路称为信道，所以信源和信宿 之间的信息交换是通过信道进行的。（见P8图2.1）（填空、单选）　　2．模拟信号是随时间连续变化的信号。数字信号只取有限个离散值，而且数字信号之间的转换几乎是瞬时的。（判断）　　3．如果信源产生的是模拟数据并且以模拟信道传输则叫做模拟通信；如果信源发出的是模拟数据而以数字信号的形式进行传输，那么这种 通信方式叫做数字通信。（填空）　　4．如果信源发出的是数字数据，当然也可有两种传输方式。这时无论是用模拟信号传输或是用数字信号传输都叫做数据通信。（判断）　　5．在模拟传输方式中，数据进入信道之前要经过调制，变换为模拟的调制信号。由于调制信号的频谱较窄，因此信道的利用率较高。在数 字传输方式中，可以直接传输二进制数据或经过二进制编码的数据，也可传输数字化了的模拟信号。（判断）　　2.2 数字信号的频谱和信道带宽　　1．谐波的最高频率fh与最低频率fl之差（fh-fl）叫做信号的频带宽度，简称带宽。　　2．信号带宽与脉冲宽度成反比。（判断）　　3．信道的带宽是指信道频响应曲线上幅度取其频带中心处值的1/√2倍的两个频率之间的区间宽度。（判断、填空、选择）　　2.3 数字信道的特性 　　1．数字信道是一种离散信道，它只能传送取离散值的数字信号。数字信道的通频带（即带宽）决定了信道中能不失真地传输脉冲序列的最 高速率。一个数字脉冲称为一个码元，码元携带的信息量由码元取的离散值个数决定。总之一个码元携带的信息量n（比特）与码元取 的离散值个数N有如下关系：n = log2N 　　2．用码元速率表示单位时间内信号波形的变换次数，即通过信道传输的码元个数。若信号码元的宽度为T秒，则码元速率B=1/T，码元速率 的单位叫波特（Band）。若信道带宽为W，则尼奎斯特定理指出最大码元速率为 B=2W （Band）。　　3．单位时间内在信道上传送的信息量（比特数）称为数据速率R。 R =Blog2N=2Wlog2N (b/s)　　4．数据速率和波特率是两不同的概念。仅当码元取0和1两离散值时两者才相等（R=B）。对于普通电话线路，带宽为3000Hz，最高波特率 为6000Band。而最高数据速率可随编码方式的不同而有不同的取值。这些都是在无噪音的理想情况下的极限值，至于有噪声影响的实际 信道，则远远达不到这个极限。（判断)　　5．香农（Shannon）的研究表明，有噪声信道的极限数据速率可由下面公式计算： C = Wlog2(1+S/N) W为信道带宽，S为信号的平均功率 ，N为噪声平均功率，S/N叫做信噪比。　　6．在有噪声的信道中（实际中的信道都是有噪声的），数据速率的增加意味着传输中出现差错的概率增加。我们用误码率来表示传输二进 制位时出现差错的概率。误码率可用公式表示：Pc = Ne（出错的位数）/N（传送的总位数） 　　7．在电缆中的传播速度一般为光速的77%，即200m/us左右。 　　8．500米同轴电缆的时延大约是2.5 us，而卫星信道的时延大约是270ms。 本新闻共4页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;3&#160;&#160;4&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p>2.1 数据通信的基本概念 <BR><BR>　　1．通信的目的就是传递信息。 一次通信中产生和发送信息的一端叫信源，接收信息的一端叫信宿。通信线路称为信道，所以信源和信宿 之间的信息交换是通过信道进行的。（见P8图2.1）（填空、单选）<BR>　　2．模拟信号是随时间连续变化的信号。数字信号只取有限个离散值，而且数字信号之间的转换几乎是瞬时的。（判断）<BR>　　3．如果信源产生的是模拟数据并且以模拟信道传输则叫做模拟通信；如果信源发出的是模拟数据而以数字信号的形式进行传输，那么这种 通信方式叫做数字通信。（填空）<BR>　　4．如果信源发出的是数字数据，当然也可有两种传输方式。这时无论是用模拟信号传输或是用数字信号传输都叫做数据通信。（判断）<BR>　　5．在模拟传输方式中，数据进入信道之前要经过调制，变换为模拟的调制信号。由于调制信号的频谱较窄，因此信道的利用率较高。在数 字传输方式中，可以直接传输二进制数据或经过二进制编码的数据，也可传输数字化了的模拟信号。（判断）<BR><BR>　　2.2 数字信号的频谱和信道带宽<BR><BR>　　1．谐波的最高频率fh与最低频率fl之差（fh-fl）叫做信号的频带宽度，简称带宽。<BR>　　2．信号带宽与脉冲宽度成反比。（判断）<BR>　　3．信道的带宽是指信道频响应曲线上幅度取其频带中心处值的1/√2倍的两个频率之间的区间宽度。（判断、填空、选择）<BR><BR>　　2.3 数字信道的特性 <BR><BR>　　1．数字信道是一种离散信道，它只能传送取离散值的数字信号。数字信道的通频带（即带宽）决定了信道中能不失真地传输脉冲序列的最 高速率。一个数字脉冲称为一个码元，码元携带的信息量由码元取的离散值个数决定。总之一个码元携带的信息量n（比特）与码元取 的离散值个数N有如下关系：n = log2N <BR>　　2．用码元速率表示单位时间内信号波形的变换次数，即通过信道传输的码元个数。若信号码元的宽度为T秒，则码元速率B=1/T，码元速率 的单位叫波特（Band）。若信道带宽为W，则尼奎斯特定理指出最大码元速率为 B=2W （Band）。<BR>　　3．单位时间内在信道上传送的信息量（比特数）称为数据速率R。 R =Blog2N=2Wlog2N (b/s)<BR>　　4．数据速率和波特率是两不同的概念。仅当码元取0和1两离散值时两者才相等（R=B）。对于普通电话线路，带宽为3000Hz，最高波特率 为6000Band。而最高数据速率可随编码方式的不同而有不同的取值。这些都是在无噪音的理想情况下的极限值，至于有噪声影响的实际 信道，则远远达不到这个极限。（判断)<BR>　　5．香农（Shannon）的研究表明，有噪声信道的极限数据速率可由下面公式计算： C = Wlog2(1+S/N) W为信道带宽，S为信号的平均功率 ，N为噪声平均功率，S/N叫做信噪比。<BR>　　6．在有噪声的信道中（实际中的信道都是有噪声的），数据速率的增加意味着传输中出现差错的概率增加。我们用误码率来表示传输二进 制位时出现差错的概率。误码率可用公式表示：Pc = Ne（出错的位数）/N（传送的总位数） <BR>　　7．在电缆中的传播速度一般为光速的77%，即200m/us左右。 <BR>　　8．500米同轴电缆的时延大约是2.5 us，而卫星信道的时延大约是270ms。
<div align="right">本新闻共<font color=red>4</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_03_27_38067_2.htm">2</a>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_03_27_38067_3.htm">3</a>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_03_27_38067_4.htm">4</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e6%95%b0%e6%8d%ae%e9%80%9a%e4%bf%a1%e5%9f%ba%e7%a1%80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络技术发展趋势和策略（2）</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%882%ef%bc%89</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%882%ef%bc%89#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:40 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%882%ef%bc%89</guid>
		<description><![CDATA[4 IP技术关键问题 4.1 QoS问题 能否保证QoS是IP网络能否能成为未来统一平台的关键，目前基于分组承载网的各种QoS解决方案主要关注于承载网络设备的QoS处理能力，更多的是基于分组承载网络设备的实现技术（如CAR、整形、队列调度、优先级标记及DiffServ等），这些具体的技术是所有QoS实施的基础，IP QoS关注的重点。 IP网络需要从网管/资源方面实施相应的QoS控制策略，因此需要有一个全网的QoS解决方案。IP电信网的QoS方案是一种基于资源隔离和业务请求的IP　QoS框架及方法，把传统电信网的思路应用到IP网络中，将信令，DiffServ，MPLS，流量工程（TE）和策略控制（Policy）技术结合应用，能够严格保证每条业务流穿越IP骨干网时的QoS要求，使得IP网络可以支持各类需要电信级服务质量的新业务。 4.2 IP网络安全 IP网络没有UNI和NNI的区别，在承载层面是相互可见的。运营商网络设备、协议甚至拓扑对用户可见，用户侧产生的IP信息既有可能在用户侧终结，也可能在网络中终结，这就使得用户侧有机会与运营商网络交换非法路由信息，也可能攻击运营商网络的路由器和控制设备。另外，位于网络边缘的用户侧网络、业务和应用一般都使用TCP/UDP/IP技术，用户之间在承载层和应用层都相互可见。这种要在通信过程中才确定信任关系的不面向连接的工作方式为用户之间的相互攻击对方网络，攻击对方的应用和业务提供了方便。同时，在目前的IP网络上，安全性要求低的一般Internet业务与安全性要求高的电信级业务混杂在一起，没有进行很好的物理或逻辑上隔离，对业务的安全性产生很大影响。在一个安全的IP网络中，Internet业务和电信级业务的隔离是保证业务安全的重要前提之一。IP电信网安全技术方案就是在现有的IP网络上，将Internet业务和电信级业务作为两大业务区别对待，并在承载网中通过MPLS LSP技术隔离传送，并利用信令机制建立端到端之间的连接，使IP网络变成一个面向连接的安全的网络。。通过在边缘设备上实施流分类技术，识别出不同的电信级业务流和Internet业务流。通过在接入和边缘设备实施针对业务流的带宽管理机制，隔离和控制不同业务的资源使用，可以有效地防止业务盗用和恶意攻击，从而保证电信业务在IP承载网上的安全。 目前，ITU-T正在制订和开发IP网络安全体系架构，以提供最大的网络和端—用户资源保护，允许多网络技术共存，提供端到端的安全机制，提供应用于多个管理域的端到端安全解决方案，确保用户以安全方式接入到IP网络。 4.3 MPLS技术 多协议标签交换（MPLS）技术目前已成为IP网络QoS的基础技术，具有良好的可扩展性，适用于大规模核心网络。通过MPLS技术可以实施流量工程，区分服务和计费管理，增强电信IP网络的盈利能力。MPLS 快速重路由功能使得LSP上的节点或链路在出现故障时，能自动迂回或切换到新的LSP上，保证网络业务的不中断。MPLS通过路由受限—标记分配协议（CR-LDP）设置有关节点，通过流量的检测，决定有关流量分流的情况。IP网络也可以通过MPLS技术提供语音和电路仿真业务。 4.4 IPv6技术的应用与演进问题 对于IPv6协议，它的最大优势是提供了巨大的地址空间。IPv6适合于IP业务端到端的特性、巨大的用户数目、永远在线等特点。但一次性地以IPv6取代现有的IPv4网络是不可能，也是不现实的，IPv4和IPv6网络将共存相当长的时间。 IPv6网络的开始阶段要面临很多的问题： （1）从网络的构架上看，要关注IPv4与IPv6的转换，过渡和共存； （2）从技术角度看，目前的所有过渡技术中，没有一个能统一彻底地解决问题，需要根据不同的环境和不同的客户进行不同的适配和不同的技术组合； （3）从业务开展模式上看，首先要解决好用户的接入、认证、计费、管理等工作； （4）IPv6的真正大量应用应是在家庭网络、家居安保、传感器网络、3G、NGN等领域，我们应有效地开展上述IPv6应用，逐步平滑地升级IPv6的功能。]]></description>
			<content:encoded><![CDATA[<p><DIV><STRONG>4 IP技术关键问题</DESCRIPT></STRONG> <BR><BR><DESCRIPT><I>4.1 QoS问题</I></DESCRIPT> <BR><BR>能否保证QoS是IP网络能否能成为未来统一平台的关键，目前基于分组承载网的各种QoS解决方案主要关注于承载网络设备的QoS处理能力，更多的是基于分组承载网络设备的实现技术（如CAR、整形、队列调度、优先级标记及DiffServ等），这些具体的技术是所有QoS实施的基础，IP QoS关注的重点。 IP网络需要从网管/资源方面实施相应的QoS控制策略，因此需要有一个全网的QoS解决方案。IP电信网的QoS方案是一种基于资源隔离和业务请求的IP　QoS框架及方法，把传统电信网的思路应用到IP网络中，将信令，DiffServ，MPLS，流量工程（TE）和策略控制（Policy）技术结合应用，能够严格保证每条业务流穿越IP骨干网时的QoS要求，使得IP网络可以支持各类需要电信级服务质量的新业务。 <BR><BR><DESCRIPT><I>4.2 IP网络安全</I></DESCRIPT> <BR><BR>IP网络没有UNI和NNI的区别，在承载层面是相互可见的。运营商网络设备、协议甚至拓扑对用户可见，用户侧产生的IP信息既有可能在用户侧终结，也可能在网络中终结，这就使得用户侧有机会与运营商网络交换非法路由信息，也可能攻击运营商网络的路由器和控制设备。另外，位于网络边缘的用户侧网络、业务和应用一般都使用TCP/UDP/IP技术，用户之间在承载层和应用层都相互可见。这种要在通信过程中才确定信任关系的不面向连接的工作方式为用户之间的相互攻击对方网络，攻击对方的应用和业务提供了方便。同时，在目前的IP网络上，安全性要求低的一般Internet业务与安全性要求高的电信级业务混杂在一起，没有进行很好的物理或逻辑上隔离，对业务的安全性产生很大影响。在一个安全的IP网络中，Internet业务和电信级业务的隔离是保证业务安全的重要前提之一。IP电信网安全技术方案就是在现有的IP网络上，将Internet业务和电信级业务作为两大业务区别对待，并在承载网中通过MPLS LSP技术隔离传送，并利用信令机制建立端到端之间的连接，使IP网络变成一个面向连接的安全的网络。。通过在边缘设备上实施流分类技术，识别出不同的电信级业务流和Internet业务流。通过在接入和边缘设备实施针对业务流的带宽管理机制，隔离和控制不同业务的资源使用，可以有效地防止业务盗用和恶意攻击，从而保证电信业务在IP承载网上的安全。 <BR><BR>目前，ITU-T正在制订和开发IP网络安全体系架构，以提供最大的网络和端—用户资源保护，允许多网络技术共存，提供端到端的安全机制，提供应用于多个管理域的端到端安全解决方案，确保用户以安全方式接入到IP网络。 <BR><BR><DESCRIPT><I>4.3 MPLS技术</I></DESCRIPT> <BR><BR>多协议标签交换（MPLS）技术目前已成为IP网络QoS的基础技术，具有良好的可扩展性，适用于大规模核心网络。通过MPLS技术可以实施流量工程，区分服务和计费管理，增强电信IP网络的盈利能力。MPLS 快速重路由功能使得LSP上的节点或链路在出现故障时，能自动迂回或切换到新的LSP上，保证网络业务的不中断。MPLS通过路由受限—标记分配协议（CR-LDP）设置有关节点，通过流量的检测，决定有关流量分流的情况。IP网络也可以通过MPLS技术提供语音和电路仿真业务。 <BR><BR><DESCRIPT><I>4.4 IPv6技术的应用与演进问题</I></DESCRIPT> <BR><BR>对于IPv6协议，它的最大优势是提供了巨大的地址空间。IPv6适合于IP业务端到端的特性、巨大的用户数目、永远在线等特点。但一次性地以IPv6取代现有的IPv4网络是不可能，也是不现实的，IPv4和IPv6网络将共存相当长的时间。 <BR><BR>IPv6网络的开始阶段要面临很多的问题： <BR><BR>（1）从网络的构架上看，要关注IPv4与IPv6的转换，过渡和共存； <BR><BR>（2）从技术角度看，目前的所有过渡技术中，没有一个能统一彻底地解决问题，需要根据不同的环境和不同的客户进行不同的适配和不同的技术组合； <BR><BR>（3）从业务开展模式上看，首先要解决好用户的接入、认证、计费、管理等工作； <BR><BR>（4）IPv6的真正大量应用应是在家庭网络、家居安保、传感器网络、3G、NGN等领域，我们应有效地开展上述IPv6应用，逐步平滑地升级IPv6的功能。 </DIV></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%882%ef%bc%89/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络技术发展趋势和策略（1）</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%881%ef%bc%89</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%881%ef%bc%89#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:40 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%881%ef%bc%89</guid>
		<description><![CDATA[1 引言 互联网宽带用户的高速发展带动了数据业务的迅速普及和通信业务收入的快速增长。随着网络的分组化，IP业务已初步显现出替代话音通信的技术基础。宽带接入成为IP业务发展的核心拉动力，IP业务运营模式逐步成熟。 2 当前IP网络的主要问题 面对电信业由语音业务向数据业务进行战略性转变，面对网络IP化的必然趋势，各运营商纷纷进行IP数据网络的建设，目前已基本建成了具有一定规模，覆盖范围较广的IP数据网络。但是，现有的IP网络在业务承载和运营上还存有不足，各运营商对现有IP网是否能够承载各种电信级业务仍存有疑虑。 在业务承载方面，自从Internet进入到电信级商用领域，原有的尽力而为传送的技术已不能满足不同用户不同应用的不同要求。IP技术也在逐步地完善以满足不同的用户、不同的应用对网络的不同的要求。由于缺乏完整的系统考虑，现有的IP网在电信级业务承载上还存在不少问题。虽然IP网络在QoS上有了很大的进步，但现有的IP网络大都只是在单个节点上提供相对优先权的处理。如果没有在全网层面上特别是在接入网中解决业务感知和接入允许控制，就不可能真正解决端到端的业务质量问题。此外，现有IP网络在业务承载上的不足还体现在网络业务安全性和网络管理能力不足上。由于IP技术的开放性使得IP网络业务很容易受到攻击，黑客无处不在、业务不时受到攻击等，这些都导致用户业务体验无法提高，特别是商业用户对此存在较大顾虑。在网络管理问题上，传统IP网络没有定义和设计针对公众环境的管理维护体系，当网络发生故障时，对故障点无法定位或者定位不够迅速，影响网络业务的服务质量。 在业务运营模式方面，尽管数据通信业务的增长迅速，网络的IP化趋势已经达成共识，但到目前为止数据业务仍不是运营商的主要业务收入来源，数据业务在整个电信业务收入中的比重还是很小的，难以支撑下一代电信业务的发展，这也与IP网络的用户数和业务量不相称。目前，制约数据业务发展的主要因素一是服务和资费模式比较单一，不利于把各种层次的消费群都吸纳到网络上来；二是缺乏成熟的商业运营模式，没有建立比较完善的宽带产业链，把社会上的各种资源吸纳到网络上来，充实网络的内容，把客户留在网内；三是缺乏用户确实感兴趣的，同时又消费得起的业务。 业务模式是IP网络赢利的关键，现有的IP网络应在业务承载和运营手段上进行完善，提升网络对业务的承载能力，保证业务承载的质量，提升ARPU值，走出IP网络运营“增量不增收”的困境。 3 IP网络发展趋势 3.1 IP电信网 （1）作为主要承载网络的IP网络必须满足的要求 根据目前网络发展的趋势，下一代网络是能够提供各种业务的综合、开放的网络。IP网络作为支撑下一代电信业务的主要承载网络，必须满足如下要求： ●可运营可管理。下一代网络应能够提供营运商一套方便的网络业务运营的管理手段，包括对用户的管理、对网元设备的管理、对网络资源的管理、对业务的管理等。 ●提供多业务承载的能力。电信业的竞争是全业务的竞争，营运商希望在一个网络上提供对多种业务的承载，以降低基础网络建设开销和运营维护成本。IP承载网不仅要能够承载现有的Internet业务、承载语音、视频等多媒体业务、还要具备诸如NGN，3G等新业务承载的能力。 ●具有业务质量保证。IP承载网首先必须是一个高度稳定、高可用的网络，以保障业务的可靠运营。其次，它应能够保证向用户提供类似原来电信网相同甚至更好的服务质量，使业务在网络上的时延、时延抖动、丢包情况是可控的、可预测的。 ●业务安全。IP承载网必须要具有提供端到端服务的安全性。避免或减少黑客或其他恶意攻击对网络业务的影响。从网络设备抗攻击、用户业务保护、避免非法用户业务盗用等方式保护网络业务安全。 （2）IP电信网络的特征 IP电信网（IPTN）是建立在IP网络技术基础上，能够满足电信运营需求，使运营商减少投入、带来增值的通信网络解决方案。它可以承载传统的PSTN业务和数据专线业务，支持电信级服务质量的IP新业务。IP电信网不是否定现有的IP网络，而是对现有IP网络的改造，解决IP网络QoS、安全、管理等问题。IP电信网有以下几个特征： ●可以跟现有的IP网络共存，不影响传统的无QoS的业务； ●能够承载传统的电信业务，并且支持新的电信业务； ●业务使用前申请资源，使用中保证资源，使用后释放资源； ●基于分层的网络结构，包括逻辑承载层、承载控制层、业务控制层； ●承载层基于MPLS，跟传统IP业务从资源上分离开； ●承载控制层引入CM，实现对资源的统一管理。 （3）IPTN网络参考模型介绍 目前，业界对于IP电信网的概念、发展思路等逐步达到共识。图1所示的是IPTN的网络参考模型，从水平方向上看，IPTN包括IP接入网、IP端局、IP骨干网几个部分，其中： ●IP端局是用户进入运营商IP网络的第一个IP设备，这个设备在运营商网络的物理位置一般在运营商PSTN网络端局的位置，称之为IP端局，在设备形态上，是在现有BAS设备或MPLS VPN PE设备的基础上增加必要的功能而构成的设备。该设备还应提供带宽管理功能，提供防火墙、加密验证和VPN功能， 支持用户管理、业务管理以及配合承载网实现QoS管理等功能。 ●IP接入网是用户到IP端局属于运营商的一段网络，为了确保网络的可控性、可管理性和安全性，IP接入网必须是一个二层网络。 ●IP骨干网的建网模式可以有两种方式：一种是为IP电信业务单独建立一个物理IP网络，网络的安全性、可靠性要高一些，对IP端局设备的要求也可以低一些。另一种是IP电信业务和Internet业务共用一个物理网络，这时必须采用必要的技术手段将IP电信业务和Internet业务进行资源上的隔离，以防止Internet业务或各种网络攻击、突发事件等不确定因素对IP电信业务的影响，一般采用MPLS流量工程技术来实现两个逻辑业务网络的资源隔离。 ●为了给IP电信业务提供端到端、有严格QoS保证的承载通道，IP端局需要接受统一的资源管理控制。 ●IP接入网和IP骨干网有不同的QoS实现机制，IP接入网QoS的实现机制还和具体的接入手段有关。 ●IP电信网的计费模式是按业务收费，用户感知的是业务层面的服务质量而不是承载层面的QoS，用户业务获得QoS保证的方法是：用户申请业务，业务确定QoS，业务向网络申请QoS，用户根据所用业务向运营商交费。 本新闻共2页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;]]></description>
			<content:encoded><![CDATA[<div>1 引言</DESCRIPT></b> </p>
<p>互联网宽带用户的高速发展带动了数据业务的迅速普及和通信业务收入的快速增长。随着网络的分组化，IP业务已初步显现出替代话音通信的技术基础。宽带接入成为IP业务发展的核心拉动力，IP业务运营模式逐步成熟。 </p>
<p><DESCRIPT><B>2 当前IP网络的主要问题</B></DESCRIPT> </p>
<p>面对电信业由语音业务向数据业务进行战略性转变，面对网络IP化的必然趋势，各运营商纷纷进行IP数据网络的建设，目前已基本建成了具有一定规模，覆盖范围较广的IP数据网络。但是，现有的IP网络在业务承载和运营上还存有不足，各运营商对现有IP网是否能够承载各种电信级业务仍存有疑虑。 </p>
<p>在业务承载方面，自从Internet进入到电信级商用领域，原有的尽力而为传送的技术已不能满足不同用户不同应用的不同要求。IP技术也在逐步地完善以满足不同的用户、不同的应用对网络的不同的要求。由于缺乏完整的系统考虑，现有的IP网在电信级业务承载上还存在不少问题。虽然IP网络在QoS上有了很大的进步，但现有的IP网络大都只是在单个节点上提供相对优先权的处理。如果没有在全网层面上特别是在接入网中解决业务感知和接入允许控制，就不可能真正解决端到端的业务质量问题。此外，现有IP网络在业务承载上的不足还体现在网络业务安全性和网络管理能力不足上。由于IP技术的开放性使得IP网络业务很容易受到攻击，黑客无处不在、业务不时受到攻击等，这些都导致用户业务体验无法提高，特别是商业用户对此存在较大顾虑。在网络管理问题上，传统IP网络没有定义和设计针对公众环境的管理维护体系，当网络发生故障时，对故障点无法定位或者定位不够迅速，影响网络业务的服务质量。 </p>
<p>在业务运营模式方面，尽管数据通信业务的增长迅速，网络的IP化趋势已经达成共识，但到目前为止数据业务仍不是运营商的主要业务收入来源，数据业务在整个电信业务收入中的比重还是很小的，难以支撑下一代电信业务的发展，这也与IP网络的用户数和业务量不相称。目前，制约数据业务发展的主要因素一是服务和资费模式比较单一，不利于把各种层次的消费群都吸纳到网络上来；二是缺乏成熟的商业运营模式，没有建立比较完善的宽带产业链，把社会上的各种资源吸纳到网络上来，充实网络的内容，把客户留在网内；三是缺乏用户确实感兴趣的，同时又消费得起的业务。 </p>
<p>业务模式是IP网络赢利的关键，现有的IP网络应在业务承载和运营手段上进行完善，提升网络对业务的承载能力，保证业务承载的质量，提升ARPU值，走出IP网络运营“增量不增收”的困境。 </p>
<p><DESCRIPT><B>3 IP网络发展趋势</B></DESCRIPT> </p>
<p><DESCRIPT><I>3.1 IP电信网</I></DESCRIPT> </p>
<p>（1）作为主要承载网络的IP网络必须满足的要求 </p>
<p>根据目前网络发展的趋势，下一代网络是能够提供各种业务的综合、开放的网络。IP网络作为支撑下一代电信业务的主要承载网络，必须满足如下要求： </p>
<p>●可运营可管理。下一代网络应能够提供营运商一套方便的网络业务运营的管理手段，包括对用户的管理、对网元设备的管理、对网络资源的管理、对业务的管理等。 </p>
<p>●提供多业务承载的能力。电信业的竞争是全业务的竞争，营运商希望在一个网络上提供对多种业务的承载，以降低基础网络建设开销和运营维护成本。IP承载网不仅要能够承载现有的Internet业务、承载语音、视频等多媒体业务、还要具备诸如NGN，3G等新业务承载的能力。 </p>
<p>●具有业务质量保证。IP承载网首先必须是一个高度稳定、高可用的网络，以保障业务的可靠运营。其次，它应能够保证向用户提供类似原来电信网相同甚至更好的服务质量，使业务在网络上的时延、时延抖动、丢包情况是可控的、可预测的。 </p>
<p>●业务安全。IP承载网必须要具有提供端到端服务的安全性。避免或减少黑客或其他恶意攻击对网络业务的影响。从网络设备抗攻击、用户业务保护、避免非法用户业务盗用等方式保护网络业务安全。 </p>
<p>（2）IP电信网络的特征 </p>
<p>IP电信网（IPTN）是建立在IP网络技术基础上，能够满足电信运营需求，使运营商减少投入、带来增值的通信网络解决方案。它可以承载传统的PSTN业务和数据专线业务，支持电信级服务质量的IP新业务。IP电信网不是否定现有的IP网络，而是对现有IP网络的改造，解决IP网络QoS、安全、管理等问题。IP电信网有以下几个特征： </p>
<p>●可以跟现有的IP网络共存，不影响传统的无QoS的业务； </p>
<p>●能够承载传统的电信业务，并且支持新的电信业务； </p>
<p>●业务使用前申请资源，使用中保证资源，使用后释放资源； </p>
<p>●基于分层的网络结构，包括逻辑承载层、承载控制层、业务控制层； </p>
<p>●承载层基于MPLS，跟传统IP业务从资源上分离开； </p>
<p>●承载控制层引入CM，实现对资源的统一管理。 </p>
<p>（3）IPTN网络参考模型介绍 </p>
<p>目前，业界对于IP电信网的概念、发展思路等逐步达到共识。图1所示的是IPTN的网络参考模型，从水平方向上看，IPTN包括IP接入网、IP端局、IP骨干网几个部分，其中： </p>
<p><DESCRIPT></p>
<div><img src="/article/UploadPic/2006-7/2006724132035478.gif"></div>
<p></DESCRIPT></p>
<p>●IP端局是用户进入运营商IP网络的第一个IP设备，这个设备在运营商网络的物理位置一般在运营商PSTN网络端局的位置，称之为IP端局，在设备形态上，是在现有BAS设备或MPLS VPN PE设备的基础上增加必要的功能而构成的设备。该设备还应提供带宽管理功能，提供防火墙、加密验证和VPN功能， 支持用户管理、业务管理以及配合承载网实现QoS管理等功能。 </p>
<p>●IP接入网是用户到IP端局属于运营商的一段网络，为了确保网络的可控性、可管理性和安全性，IP接入网必须是一个二层网络。 </p>
<p>●IP骨干网的建网模式可以有两种方式：一种是为IP电信业务单独建立一个物理IP网络，网络的安全性、可靠性要高一些，对IP端局设备的要求也可以低一些。另一种是IP电信业务和Internet业务共用一个物理网络，这时必须采用必要的技术手段将IP电信业务和Internet业务进行资源上的隔离，以防止Internet业务或各种网络攻击、突发事件等不确定因素对IP电信业务的影响，一般采用MPLS流量工程技术来实现两个逻辑业务网络的资源隔离。 </p>
<p>●为了给IP电信业务提供端到端、有严格QoS保证的承载通道，IP端局需要接受统一的资源管理控制。 </p>
<p>●IP接入网和IP骨干网有不同的QoS实现机制，IP接入网QoS的实现机制还和具体的接入手段有关。 </p>
<p>●IP电信网的计费模式是按业务收费，用户感知的是业务层面的服务质量而不是承载层面的QoS，用户业务获得QoS保证的方法是：用户申请业务，业务确定QoS，业务向网络申请QoS，用户根据所用业务向运营商交费。 </p></div>
<p><P></p>
<div>本新闻共<font color=red>2</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color=red>1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_03_22_32011_2.htm">2</a>&nbsp;&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e5%8f%91%e5%b1%95%e8%b6%8b%e5%8a%bf%e5%92%8c%e7%ad%96%e7%95%a5%ef%bc%881%ef%bc%89/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>路由器原理及常用的路由协议、路由算法</title>
		<link>http://blog.1xi.net/wangluo/%e8%b7%af%e7%94%b1%e5%99%a8%e5%8e%9f%e7%90%86%e5%8f%8a%e5%b8%b8%e7%94%a8%e7%9a%84%e8%b7%af%e7%94%b1%e5%8d%8f%e8%ae%ae%e3%80%81%e8%b7%af%e7%94%b1%e7%ae%97%e6%b3%95</link>
		<comments>http://blog.1xi.net/wangluo/%e8%b7%af%e7%94%b1%e5%99%a8%e5%8e%9f%e7%90%86%e5%8f%8a%e5%b8%b8%e7%94%a8%e7%9a%84%e8%b7%af%e7%94%b1%e5%8d%8f%e8%ae%ae%e3%80%81%e8%b7%af%e7%94%b1%e7%ae%97%e6%b3%95#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e8%b7%af%e7%94%b1%e5%99%a8%e5%8e%9f%e7%90%86%e5%8f%8a%e5%b8%b8%e7%94%a8%e7%9a%84%e8%b7%af%e7%94%b1%e5%8d%8f%e8%ae%ae%e3%80%81%e8%b7%af%e7%94%b1%e7%ae%97%e6%b3%95</guid>
		<description><![CDATA[近十年来，随着计算机网络规模的不断扩大，大型互联网络（如Internet）的迅猛发展，路由技术在网络技术中已逐渐成为关键部分，路由器也随之成为最重要的网络设备。&#160; 用户的需求推动着路由技术的发展和路由器的普及，人们已经不满足于仅在本地网络上共享信息，而希望最大限度地利用全球各个地区、各种类型的网络资源。而在目前的情况下，任何一个有一定规模的计算机网络（如企业网、校园网、智能大厦等），无论采用的是快速以大网技术、FDDI技术，还是ATM技术，都离不开路由器，否则就无法正常运作和管理。 　　1 网络互连 　　把自己的网络同其它的网络互连起来，从网络中获取更多的信息和向网络发布自己的消息，是网络互连的最主要的动力。网络的互连有多种方式，其中使用最多的是网桥互连和路由器互连。 　　1.1 网桥互连的网络 　　网桥工作在OSI模型中的第二层，即链路层。完成数据帧（frame）的转发，主要目的是在连接的网络间提供透明的通信。网桥的转发是依据数据帧中的源地址和目的地址来判断一个帧是否应转发和转发到哪个端口。帧中的地址称为“MAC”地址或“硬件”地址，一般就是网卡所带的地址。 　　网桥的作用是把两个或多个网络互连起来，提供透明的通信。网络上的设备看不到网桥的存在，设备之间的通信就如同在一个网上一样方便。由于网桥是在数据帧上进行转发的，因此只能连接相同或相似的网络（相同或相似结构的数据帧），如以太网之间、以太网与令牌环（token ring）之间的互连，对于不同类型的网络（数据帧结构不同），如以太网与X.25之间，网桥就无能为力了。 　　网桥扩大了网络的规模，提高了网络的性能，给网络应用带来了方便，在以前的网络中，网桥的应用较为广泛。但网桥互连也带来了不少问题：一个是广播风暴，网桥不阻挡网络中广播消息，当网络的规模较大时（几个网桥，多个以太网段），有可能引起广播风暴（broadcasting storm），导致整个网络全被广播信息充满，直至完全瘫痪。第二个问题是，当与外部网络互连时，网桥会把内部和外部网络合二为一，成为一个网，双方都自动向对方完全开放自己的网络资源。这种互连方式在与外部网络互连时显然是难以接受的。问题的主要根源是网桥只是最大限度地把网络沟通，而不管传送的信息是什么。 　　1.2 路由器互连网络 　　路由器互连与网络的协议有关，我们讨论限于TCP／IP网络的情况。 　　路由器工作在OSI模型中的第三层，即网络层。路由器利用网络层定义的“逻辑”上的网络地址（即IP地址）来区别不同的网络，实现网络的互连和隔离，保持各个网络的独立性。路由器不转发广播消息，而把广播消息限制在各自的网络内部。发送到其他网络的数据茵先被送到路由器，再由路由器转发出去。 　　IP路由器只转发IP分组，把其余的部分挡在网内（包括广播），从而保持各个网络具有相对的独立性，这样可以组成具有许多网络（子网）互连的大型的网络。由于是在网络层的互连，路由器可方便地连接不同类型的网络，只要网络层运行的是IP协议，通过路由器就可互连起来。 　　网络中的设备用它们的网络地址（TCP／IP网络中为IP地址）互相通信。IP地址是与硬件地址无关的“逻辑”地址。路由器只根据IP地址来转发数据。IP地址的结构有两部分，一部分定义网络号，另一部分定义网络内的主机号。目前，在Internet网络中采用子网掩码来确定IP地址中网络地址和主机地址。子网掩码与IP地址一样也是32bit，并且两者是一一对应的，并规定，子网掩码中数字为“1”所对应的IP地址中的部分为网络号，为“0”所对应的则为主机号。网络号和主机号合起来，才构成一个完整的IP地址。同一个网络中的主机IP地址，其网络号必须是相同的，这个网络称为IP子网。 　　通信只能在具有相同网络号的IP地址之间进行，要与其它IP子网的主机进行通信，则必须经过同一网络上的某个路由器或网关（gateway）出去。不同网络号的IP地址不能直接通信，即使它们接在一起，也不能通信。 　　路由器有多个端口，用于连接多个IP子网。每个端口的IP地址的网络号要求与所连接的IP子网的网络号相同。不同的端口为不同的网络号，对应不同的IP子网，这样才能使各子网中的主机通过自己子网的IP地址把要求出去的IP分组送到路由器上。 　　2 路由原理 　　当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时，它将直接把IP分组送到网络上，对方就能收到。而要送给不同IP于网上的主机时，它要选择一个能到达目的子网上的路由器，把IP分组送给该路由器，由路由器负责把IP分组送到目的地。如果没有找到这样的路由器，主机就把IP分组送给一个称为“缺省网关（default gateway）”的路由器上。“缺省网关”是每台主机上的一个配置参数，它是接在同一个网络上的某个路由器端口的IP地址。 　　路由器转发IP分组时，只根据IP分组目的IP地址的网络号部分，选择合适的端口，把IP分组送出去。同主机一样，路由器也要判定端口所接的是否是目的子网，如果是，就直接把分组通过端口送到网络上，否则，也要选择下一个路由器来传送分组。路由器也有它的缺省网关，用来传送不知道往哪儿送的IP分组。这样，通过路由器把知道如何传送的IP分组正确转发出去，不知道的IP分组送给“缺省网关”路由器，这样一级级地传送，IP分组最终将送到目的地，送不到目的地的IP分组则被网络丢弃了。 　　目前TCP／IP网络，全部是通过路由器互连起来的，Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。这种网络称为以路由器为基础的网络（router based network），形成了以路由器为节点的“网间网”。在“网间网”中，路由器不仅负责对IP分组的转发，还要负责与别的路由器进行联络，共同确定“网间网”的路由选择和维护路由表。 　　路由动作包括两项基本内容：寻径和转发。寻径即判定到达目的地的最佳路径，由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法，要相对复杂一些。为了判定最佳路径，路由选择算法必须启动并维护包含路由信息的路由表，其中路由信息依赖于所用的路由选择算法而不尽相同。路由选择算法将收集到的不同信息填入路由表中，根据路由表可将目的网络与下一站（nexthop）的关系告诉路由器。路由器间互通信息进行路由更新，更新维护路由表使之正确反映网络的拓扑变化，并由路由器根据量度来决定最佳路径。这就是路由选择协议（routing protocol），例如路由信息协议（RIP）、开放式最短路径优先协议（OSPF）和边界网关协议（BGP）等。 　　转发即沿寻径好的最佳路径传送信息分组。路由器首先在路由表中查找，判明是否知道如何将分组发送到下一个站点（路由器或主机），如果路由器不知道如何发送分组，通常将该分组丢弃；否则就根据路由表的相应表项将分组发送到下一个站点，如果目的网络直接与路由器相连，路由器就把分组直接送到相应的端口上。这就是路由转发协议（routed protocol）。 　　路由转发协议和路由选择协议是相互配合又相互独立的概念，前者使用后者维护的路由表，同时后者要利用前者提供的功能来发布路由协议数据分组。下文中提到的路由协议，除非特别说明，都是指路由选择协议，这也是普遍的习惯。 本新闻共2页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p><P>近十年来，随着计算机网络规模的不断扩大，大型互联网络（如Internet）的迅猛发展，路由技术在网络技术中已逐渐成为关键部分，路由器也随之成为最重要的网络设备。&nbsp; <BR>用户的需求推动着路由技术的发展和路由器的普及，人们已经不满足于仅在本地网络上共享信息，而希望最大限度地利用全球各个地区、各种类型的网络资源。而在目前的情况下，任何一个有一定规模的计算机网络（如企业网、校园网、智能大厦等），无论采用的是快速以大网技术、FDDI技术，还是ATM技术，都离不开路由器，否则就无法正常运作和管理。 </P><P>　　1 网络互连 </P><P>　　把自己的网络同其它的网络互连起来，从网络中获取更多的信息和向网络发布自己的消息，是网络互连的最主要的动力。网络的互连有多种方式，其中使用最多的是网桥互连和路由器互连。 </P><P>　　1.1 网桥互连的网络 </P><P>　　网桥工作在OSI模型中的第二层，即链路层。完成数据帧（frame）的转发，主要目的是在连接的网络间提供透明的通信。网桥的转发是依据数据帧中的源地址和目的地址来判断一个帧是否应转发和转发到哪个端口。帧中的地址称为“MAC”地址或“硬件”地址，一般就是网卡所带的地址。 </P><P>　　网桥的作用是把两个或多个网络互连起来，提供透明的通信。网络上的设备看不到网桥的存在，设备之间的通信就如同在一个网上一样方便。由于网桥是在数据帧上进行转发的，因此只能连接相同或相似的网络（相同或相似结构的数据帧），如以太网之间、以太网与令牌环（token ring）之间的互连，对于不同类型的网络（数据帧结构不同），如以太网与X.25之间，网桥就无能为力了。 </P><P>　　网桥扩大了网络的规模，提高了网络的性能，给网络应用带来了方便，在以前的网络中，网桥的应用较为广泛。但网桥互连也带来了不少问题：一个是广播风暴，网桥不阻挡网络中广播消息，当网络的规模较大时（几个网桥，多个以太网段），有可能引起广播风暴（broadcasting storm），导致整个网络全被广播信息充满，直至完全瘫痪。第二个问题是，当与外部网络互连时，网桥会把内部和外部网络合二为一，成为一个网，双方都自动向对方完全开放自己的网络资源。这种互连方式在与外部网络互连时显然是难以接受的。问题的主要根源是网桥只是最大限度地把网络沟通，而不管传送的信息是什么。 </P><P>　　1.2 路由器互连网络 </P><P>　　路由器互连与网络的协议有关，我们讨论限于TCP／IP网络的情况。 </P><P>　　路由器工作在OSI模型中的第三层，即网络层。路由器利用网络层定义的“逻辑”上的网络地址（即IP地址）来区别不同的网络，实现网络的互连和隔离，保持各个网络的独立性。路由器不转发广播消息，而把广播消息限制在各自的网络内部。发送到其他网络的数据茵先被送到路由器，再由路由器转发出去。 </P><P>　　IP路由器只转发IP分组，把其余的部分挡在网内（包括广播），从而保持各个网络具有相对的独立性，这样可以组成具有许多网络（子网）互连的大型的网络。由于是在网络层的互连，路由器可方便地连接不同类型的网络，只要网络层运行的是IP协议，通过路由器就可互连起来。 </P><P>　　网络中的设备用它们的网络地址（TCP／IP网络中为IP地址）互相通信。IP地址是与硬件地址无关的“逻辑”地址。路由器只根据IP地址来转发数据。IP地址的结构有两部分，一部分定义网络号，另一部分定义网络内的主机号。目前，在Internet网络中采用子网掩码来确定IP地址中网络地址和主机地址。子网掩码与IP地址一样也是32bit，并且两者是一一对应的，并规定，子网掩码中数字为“1”所对应的IP地址中的部分为网络号，为“0”所对应的则为主机号。网络号和主机号合起来，才构成一个完整的IP地址。同一个网络中的主机IP地址，其网络号必须是相同的，这个网络称为IP子网。 </P><P>　　通信只能在具有相同网络号的IP地址之间进行，要与其它IP子网的主机进行通信，则必须经过同一网络上的某个路由器或网关（gateway）出去。不同网络号的IP地址不能直接通信，即使它们接在一起，也不能通信。 </P><P>　　路由器有多个端口，用于连接多个IP子网。每个端口的IP地址的网络号要求与所连接的IP子网的网络号相同。不同的端口为不同的网络号，对应不同的IP子网，这样才能使各子网中的主机通过自己子网的IP地址把要求出去的IP分组送到路由器上。 </P><P>　　2 路由原理 </P><P>　　当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时，它将直接把IP分组送到网络上，对方就能收到。而要送给不同IP于网上的主机时，它要选择一个能到达目的子网上的路由器，把IP分组送给该路由器，由路由器负责把IP分组送到目的地。如果没有找到这样的路由器，主机就把IP分组送给一个称为“缺省网关（default gateway）”的路由器上。“缺省网关”是每台主机上的一个配置参数，它是接在同一个网络上的某个路由器端口的IP地址。 </P><P>　　路由器转发IP分组时，只根据IP分组目的IP地址的网络号部分，选择合适的端口，把IP分组送出去。同主机一样，路由器也要判定端口所接的是否是目的子网，如果是，就直接把分组通过端口送到网络上，否则，也要选择下一个路由器来传送分组。路由器也有它的缺省网关，用来传送不知道往哪儿送的IP分组。这样，通过路由器把知道如何传送的IP分组正确转发出去，不知道的IP分组送给“缺省网关”路由器，这样一级级地传送，IP分组最终将送到目的地，送不到目的地的IP分组则被网络丢弃了。 </P><P>　　目前TCP／IP网络，全部是通过路由器互连起来的，Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。这种网络称为以路由器为基础的网络（router based network），形成了以路由器为节点的“网间网”。在“网间网”中，路由器不仅负责对IP分组的转发，还要负责与别的路由器进行联络，共同确定“网间网”的路由选择和维护路由表。 </P><P>　　路由动作包括两项基本内容：寻径和转发。寻径即判定到达目的地的最佳路径，由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法，要相对复杂一些。为了判定最佳路径，路由选择算法必须启动并维护包含路由信息的路由表，其中路由信息依赖于所用的路由选择算法而不尽相同。路由选择算法将收集到的不同信息填入路由表中，根据路由表可将目的网络与下一站（nexthop）的关系告诉路由器。路由器间互通信息进行路由更新，更新维护路由表使之正确反映网络的拓扑变化，并由路由器根据量度来决定最佳路径。这就是路由选择协议（routing protocol），例如路由信息协议（RIP）、开放式最短路径优先协议（OSPF）和边界网关协议（BGP）等。 </P><P>　　转发即沿寻径好的最佳路径传送信息分组。路由器首先在路由表中查找，判明是否知道如何将分组发送到下一个站点（路由器或主机），如果路由器不知道如何发送分组，通常将该分组丢弃；否则就根据路由表的相应表项将分组发送到下一个站点，如果目的网络直接与路由器相连，路由器就把分组直接送到相应的端口上。这就是路由转发协议（routed protocol）。 </P><P>　　路由转发协议和路由选择协议是相互配合又相互独立的概念，前者使用后者维护的路由表，同时后者要利用前者提供的功能来发布路由协议数据分组。下文中提到的路由协议，除非特别说明，都是指路由选择协议，这也是普遍的习惯。 </P>
<div align="right">本新闻共<font color=red>2</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_06_22_23779_2.htm">2</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e8%b7%af%e7%94%b1%e5%99%a8%e5%8e%9f%e7%90%86%e5%8f%8a%e5%b8%b8%e7%94%a8%e7%9a%84%e8%b7%af%e7%94%b1%e5%8d%8f%e8%ae%ae%e3%80%81%e8%b7%af%e7%94%b1%e7%ae%97%e6%b3%95/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>局域网数据链路层网络安全</title>
		<link>http://blog.1xi.net/wangluo/%e5%b1%80%e5%9f%9f%e7%bd%91%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8</link>
		<comments>http://blog.1xi.net/wangluo/%e5%b1%80%e5%9f%9f%e7%bd%91%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e5%b1%80%e5%9f%9f%e7%bd%91%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8</guid>
		<description><![CDATA[通信的每一层中都有自己独特的安全问题。数据链路层（第二协议层）的通信连接就安全而言，是较为薄弱的环节。网络安全的问题应该在多个协议层针对不同的弱点进行解决。在本篇文章中，我们将集中讨论与有线局域网相关的安全问题。无线局域网和广域网（WAN）的安全问题将在其它篇章中单独进行讨论。在第二协议层的通信中，交换机是关键的部件，它们也用于第三协议层的通信。对于相同的第三协议层的许多攻击和许多独特的网络攻击，它们和路由器都会很敏感，这些攻击包括：内容寻址存储器（CAM）表格淹没：交换机中的 CAM 表格包含了诸如在指定交换机的物理端口所提供的 MAC 地址和相关的 VLAN 参数之类的信息。一个典型的网络侵入者会向该交换机提供大量的无效 MAC 源地址，直到 CAM 表格被添满。当这种情况发生的时候，交换机会将传输进来的信息向所有的端口发送，因为这时交换机不能够从 CAM 表格中查找出特定的 MAC 地址的端口号。CAM 表格淹没只会导致交换机在本地 VLAN 范围内到处发送信息，所以侵入者只能够看到自己所连接到的本地 VLAN 中的信息。 VLAN 中继：VLAN 中继是一种网络攻击，由一终端系统发出以位于不同 VLAN 上的系统为目标地址的数据包，而该系统不可以采用常规的方法被连接。该信息被附加上不同于该终端系统所属网络 VLAN ID 的标签。或者发出攻击的系统伪装成交换机并对中继进行处理，以便于攻击者能够收发其它 VLAN 之间的通信。 操纵生成树协议：生成树协议可用于交换网络中以防止在以太网拓朴结构中产生桥接循环。通过攻击生成树协议，网络攻击者希望将自己的系统伪装成该拓朴结构中的根网桥。要达到此目的，网络攻击者需要向外广播生成树协议配置/拓朴结构改变网桥协议数据单元（BPDU），企图迫使生成树进行重新计算。网络攻击者系统发出的 BPDU 声称发出攻击的网桥优先权较低。如果获得成功，该网络攻击者能够获得各种各样的数据帧。 媒体存取控制地址（MAC）欺骗：在进行 MAC 欺骗攻击的过程中，已知某其它主机的 MAC 地址会被用来使目标交换机向攻击者转发以该主机为目的地址的数据帧。通过发送带有该主机以太网源地址的单个数据帧的办法，网络攻击者改写了 CAM 表格中的条目，使得交换机将以该主机为目的地址的数据包转发给该网络攻击者。除非该主机向外发送信息，否则它不会收到任何信息。当该主机向外发送信息的时候，CAM 表中对应的条目会被再次改写，以便它能恢复到原始的端口。 地址解析协议（ARP）攻击：ARP 协议的作用是在处于同一个子网中的主机所构成的局域网部分中将 IP 地址映射到 MAC 地址。当有人在未获得授权时就企图更改 MAC 和 IP 地址的 ARP 表格中的信息时，就发生了 ARP 攻击。通过这种方式，黑客们可以伪造 [...]]]></description>
			<content:encoded><![CDATA[<p>通信的每一层中都有自己独特的安全问题。数据链路层（第二协议层）的通信连接就安全而言，是较为薄弱的环节。网络安全的问题应该在多个协议层针对不同的弱点进行解决。在本篇文章中，我们将集中讨论与有线局域网相关的安全问题。无线局域网和广域网（WAN）的安全问题将在其它篇章中单独进行讨论。在第二协议层的通信中，交换机是关键的部件，它们也用于第三协议层的通信。对于相同的第三协议层的许多攻击和许多独特的网络攻击，它们和路由器都会很敏感，这些攻击包括：<BR><P>内容寻址存储器（CAM）表格淹没：交换机中的 CAM 表格包含了诸如在指定交换机的物理端口所提供的 MAC 地址和相关的 VLAN 参数之类的信息。一个典型的网络侵入者会向该交换机提供大量的无效 MAC 源地址，直到 CAM 表格被添满。当这种情况发生的时候，交换机会将传输进来的信息向所有的端口发送，因为这时交换机不能够从 CAM 表格中查找出特定的 MAC 地址的端口号。CAM 表格淹没只会导致交换机在本地 VLAN 范围内到处发送信息，所以侵入者只能够看到自己所连接到的本地 VLAN 中的信息。 <BR>VLAN 中继：VLAN 中继是一种网络攻击，由一终端系统发出以位于不同 VLAN 上的系统为目标地址的数据包，而该系统不可以采用常规的方法被连接。该信息被附加上不同于该终端系统所属网络 VLAN ID 的标签。或者发出攻击的系统伪装成交换机并对中继进行处理，以便于攻击者能够收发其它 VLAN 之间的通信。 <BR>操纵生成树协议：生成树协议可用于交换网络中以防止在以太网拓朴结构中产生桥接循环。通过攻击生成树协议，网络攻击者希望将自己的系统伪装成该拓朴结构中的根网桥。要达到此目的，网络攻击者需要向外广播生成树协议配置/拓朴结构改变网桥协议数据单元（BPDU），企图迫使生成树进行重新计算。网络攻击者系统发出的 BPDU 声称发出攻击的网桥优先权较低。如果获得成功，该网络攻击者能够获得各种各样的数据帧。 <BR>媒体存取控制地址（MAC）欺骗：在进行 MAC 欺骗攻击的过程中，已知某其它主机的 MAC 地址会被用来使目标交换机向攻击者转发以该主机为目的地址的数据帧。通过发送带有该主机以太网源地址的单个数据帧的办法，网络攻击者改写了 CAM 表格中的条目，使得交换机将以该主机为目的地址的数据包转发给该网络攻击者。除非该主机向外发送信息，否则它不会收到任何信息。当该主机向外发送信息的时候，CAM 表中对应的条目会被再次改写，以便它能恢复到原始的端口。 <BR>地址解析协议（ARP）攻击：ARP 协议的作用是在处于同一个子网中的主机所构成的局域网部分中将 IP 地址映射到 MAC 地址。当有人在未获得授权时就企图更改 MAC 和 IP 地址的 ARP 表格中的信息时，就发生了 ARP 攻击。通过这种方式，黑客们可以伪造 MAC 或 IP 地址，以便实施如下的两种攻击：服务拒绝和中间人攻击。 <BR>专用 VLAN：专用 VLAN 通过限制 VLAN 中能够与同 VLAN 中其它端口进行通信的端口的方式进行工作。VLAN 中的孤立端口只能和混合端口进行通信。混合端口能够和任何端口进行通信。能够绕过专用 VLAN 安全措施的攻击的实现要使用绕过专用 VLAN 访问限制的代理。 <BR>DHCP 耗竭：DHCP 耗竭的攻击通过利用伪造的 MAC 地址来广播 DHCP 请求的方式来进行。利用诸如 gobbler 之类的攻击工具就可以很容易地造成这种情况。如果所发出的请求足够多的话，网络攻击者就可以在一段时间内耗竭向 DHCP 服务器所提供的地址空间。这是一种比较简单的资源耗竭的攻击手段，就像 SYN 泛滥一样。然后网络攻击者可以在自己的系统中建立起虚假的 DHCP 服务器来对网络上客户发出的新 DHCP 请求作出反应。 <BR>　　降低局域网安全风险</P><P>　　在交换机上配置端口安全选项可以防止 CAM 表淹没攻击。该选择项要么可以提供特定交换机端口的 MAC 地址说明，要么可以提供一个交换机端口可以习得的 MAC 地址的数目方面的说明。当无效的 MAC 地址在该端口被检测出来之后，该交换机要么可以阻止所提供的 MAC 地址，要么可以关闭该端口。</P><P>　　对 VLAN 的设置稍作几处改动就可以防止 VLAN 中继攻击。这其中最大的要点在于所有中继端口上都要使用专门的 VLAN ID。同时也要禁用所有使用不到的交换机端口并将它们安排在使用不到的 VLAN 中。通过明确的办法，关闭掉所有用户端口上的 DTP，这样就可以将所有端口设置成非中继模式。</P><P>　　要防止操纵生成树协议的攻击，需要使用根目录保护和 BPDU 保护加强命令来保持网络中主网桥的位置不发生改变，同时也可以强化生成树协议的域边界。根目录保护功能可提供保持主网桥位置不变的方法。生成树协议 BPDU 保护使得网络设计者能够保持有源网络拓朴结构的可预测性。尽管 BPDU 保护也许看起来是没有必要的，因为管理员可以将网络优先权调至0，但仍然不能保证它将被选做主网桥，因为可能存在一个优先权为0但ID却更低的网桥。使用在面向用户的端口中，BPDU 保护能够发挥出最佳的用途，能够防止攻击者利用伪造交换机进行网络扩展。</P><P>　　使用端口安全命令可以防止 MAC 欺骗攻击。端口安全命令能够提供指定系统 MAC 地址连接到特定端口的功能。该命令在端口的安全遭到破坏时，还能够提供指定需要采取何种措施的能力。然而，如同防止 CAM 表淹没攻击一样，在每一个端口上都要指定一个 MAC 地址是一种难办的解决方案。在界面设置菜单中选择计时的功能，并设定一个条目在 ARP 缓存中可以持续的时长，能够达到防止 ARP 欺骗的目的。</P><P>　　对路由器端口访问控制列表（ACL）进行设置可以防止专用 VLAN 攻击。虚拟的 ACL 还可以用于消除专用 VLAN 攻击的影响。</P><P>　　通过限制交换机端口的 MAC 地址的数目，防止 CAM 表淹没的技术也可以防止 DHCP 耗竭。随着 RFC 3118，DHCP 消息验证的执行，DHCP 耗竭攻击将会变得越来越困难。</P><P>　　另外，IEEE802.1X 还能够在数据链路层对基本的网络访问进行监测，它本身是一种在有线网络和无线网络中传送可扩展验证协议（EAP）架构的标准。在未完成验证的情况下 801.1X 就拒绝对网络的访问，进而可以防止对网络基础设备实施的，并依赖基本 IP 连接的多种攻击。802.1X 的初始编写目标是用于拔号连接和远程访问网络中的点对点协议（PPP），它现在支持在局域网的环境中使用 EAP，包括无线局域网。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e5%b1%80%e5%9f%9f%e7%bd%91%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络设计系列之－－局域网设计</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b1%80%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b1%80%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b1%80%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1</guid>
		<description><![CDATA[【导读】这是IP网络设计系列讲座的最后一部分，讨论园区局域网设计中遇到的一些问题。以太网交换机优越于传统的集线器环境的好处将首先介绍一下。应用虚拟局域网的动机已经同规划和配置虚拟局域网遇到的问题一起进行了研究。本文还将讨论确保园区网络设计具有可伸缩性和弹性的一些技术。本文还将讨论生成树协议以及如何在大型交换的网络中优化这个协议。最后，在本文的结论部分将涉及到与推出IP电话有关的设计问题。以太网交换的好处传统的共享的以太网是一种基带介质。这就意味着在任何一个时间只能有一个站点能够向这个介质发送数据。多个信号不能像在宽带网介质中那样成为多路复用的信号。在一个共享的以太网集线器，各个站点通过监听一对儿接收的线路来检查是否有其它站点在发送数据，用这种方法来解决访问冲突问题。以太网交换的应用取代了共享的以太网，从而产生了如下改善的运行功能:专用的冲突域交换机的每一个端口都在自己的冲突域中，因此，一个站点通过一台交换机的端口连接到这个局域网，而不是通过一个集线器的端口。这样，这个站点就不需要在发送数据之前通过监听是否有冲突来竞争接入到线路的权限。这将提高局域网的有效带宽。通信过滤和转发一台交换机像一个多口网桥一样工作，并且通过监听实况通信来了解每一个站点的MAC地址的位置。对于交换机交换的每一帧，交换机仅把通信转发到目的地MAC地址所在的端口。这台交换机据说要过滤所有其它端口的帧。这将显著减少局域网中不必要的通信，提高带宽的利用率。然而，广播帧将涌向所有的端口，这样，一个交换机据说要创建多个冲突域，但是，所有的端口仍在同一个广播域中。这通常是一种理想工作方式，因为广播时必要的，通常是局域网中的一种有效的通信手段。这与广域网有些不同。微软的Windows就使用严重依赖广播的NetBios。另一个例子是地址解析协议(ARP)。根据地址解析协议，一个地址解析协议广播必须要达到IP子网的每一个站点以便把一个目的地的IP地址解析为MAC地址。全双工传输传统共享的以太网以半双工的模式工作。换句话说，各个站点不能同时发送和接收数据。由于以太网基带的性质，只有一个站点能够访问这个介质并且在任何一个时间发送数据。一个共享的以太网介质上的各个站点通过监听冲突来解决通信冲突。全双工传输意味着所有的站点都能够同时发送和接收数据。在以太网中，这并不是通过监视冲突来实现的。如果这个站点附加到自己专用的交换机端口，它只是合法地关闭了冲突检测功能。这就意味着在冲突域只有两个站点:这个站点本身和这台交换机的端口。然后，每个站点都可以相互收发数据，而不必监听冲突。这种方式称作点对点的以太网。同许多网络词汇一样，全双工一直被滥用而且有些说法是不真实的。交换机厂商之间的市场营销大战促使这些厂商声称全双工作业能够使数据吞吐量提高一倍。全双工作业确实能够显著改善数据吞吐量，但是，还不能说把数据吞吐量提高了一倍，因为同一个站点不可能以线速的速度同时发送和接收应用程序的通信。理解客户机-服务器通信流当实施一个交换的局域网设计时，获得对客户机-服务器通信流的详细了解大概是一项最大的挑战。一个网络正在进行重新设计，要把一个共享的局域网环境转变为一个交换的局域网，以满足日益增长的带宽需求。在这种情况下，有可能收集到详细的大量有关通信状况的信息。在一个全新的网络，在网络推出之前收集这些信息是不容易的。然而，没有严格数量的通信状况分析，对通信状况进行合理的质量分析也是应该达到的。获得下列信息的合理的预测是非常重要的:什么用户在与什么服务器进行通话，通话的时间有多长，现在消耗的带宽是多少，将来消耗的带宽是多少?所有的客户机和服务器的物理位置和逻辑位置是什么。换句话说，要清楚地了解每个应用程序的客户机与服务器之间数据通道。服务器之间的通信水平是什么?再次说明一下，这与了解整个网络的全部主要通信流的需求是一致的。如果不充分理解这些通信流，介绍局域网交换机的作用也是很有限的。举一个极端的例子，假设一台服务器在远方并且必须通过一个56K的广域网线路访问这台服务器。在这种情况下，一台局域网交换机将不能显著提高性能，因为瓶颈是在广域网而不是在局域网。高速内核一些专有的方法与802.3ad标准的存在允许把多个连接集成为一个逻辑的高速连接。两台交换机之间的多个物理连接必须被当作一个逻辑连接对待，否则，生成树将封锁多余的连接。这种功能可以用来提供核心交换机之间的高速连接并且向高带宽服务器提供高速连接。即使在应用万兆以太网之前，就存在最多把8个以太网端口集成在一起提供高速园区干线的功能。 本新闻共3页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;3&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p><P>【导读】这是IP网络设计系列讲座的最后一部分，讨论园区局域网设计中遇到的一些问题。<SPAN class=top11>以太网交换机优越于传统的集线器环境的好处将首先介绍一下。应用虚拟局域网的动机已经同规划和配置虚拟局域网遇到的问题一起进行了研究。本文还将讨论确保园区网络设计具有可伸缩性和弹性的一些技术。本文还将讨论生成树协议以及如何在大型交换的网络中优化这个协议。最后，在本文的结论部分将涉及到与推出IP电话有关的设计问题。</P><P><STRONG>以太网交换的好处</STRONG></P><P>传统的共享的以太网是一种基带介质。这就意味着在任何一个时间只能有一个站点能够向这个介质发送数据。多个信号不能像在宽带网介质中那样成为多路复用的信号。在一个共享的以太网集线器，各个站点通过监听一对儿接收的线路来检查是否有其它站点在发送数据，用这种方法来解决访问冲突问题。以太网交换的应用取代了共享的以太网，从而产生了如下改善的运行功能:</P><P><STRONG>专用的冲突域</STRONG></P><P>交换机的每一个端口都在自己的冲突域中，因此，一个站点通过一台交换机的端口连接到这个局域网，而不是通过一个集线器的端口。这样，这个站点就不需要在发送数据之前通过监听是否有冲突来竞争接入到线路的权限。这将提高局域网的有效带宽。</P><P><STRONG>通信过滤和转发</STRONG></P><P>一台交换机像一个多口网桥一样工作，并且通过监听实况通信来了解每一个站点的MAC地址的位置。对于交换机交换的每一帧，交换机仅把通信转发到目的地MAC地址所在的端口。这台交换机据说要过滤所有其它端口的帧。这将显著减少局域网中不必要的通信，提高带宽的利用率。然而，广播帧将涌向所有的端口，这样，一个交换机据说要创建多个冲突域，但是，所有的端口仍在同一个广播域中。这通常是一种理想工作方式，因为广播时必要的，通常是局域网中的一种有效的通信手段。这与广域网有些不同。微软的Windows就使用严重依赖广播的NetBios。另一个例子是地址解析协议(ARP)。根据地址解析协议，一个地址解析协议广播必须要达到IP子网的每一个站点以便把一个目的地的IP地址解析为MAC地址。</P><P><STRONG>全双工传输</STRONG></P><P>传统共享的以太网以半双工的模式工作。换句话说，各个站点不能同时发送和接收数据。由于以太网基带的性质，只有一个站点能够访问这个介质并且在任何一个时间发送数据。一个共享的以太网介质上的各个站点通过监听冲突来解决通信冲突。全双工传输意味着所有的站点都能够同时发送和接收数据。在以太网中，这并不是通过监视冲突来实现的。如果这个站点附加到自己专用的交换机端口，它只是合法地关闭了冲突检测功能。这就意味着在冲突域只有两个站点:这个站点本身和这台交换机的端口。然后，每个站点都可以相互收发数据，而不必监听冲突。这种方式称作点对点的以太网。同许多网络词汇一样，全双工一直被滥用而且有些说法是不真实的。交换机厂商之间的市场营销大战促使这些厂商声称全双工作业能够使数据吞吐量提高一倍。全双工作业确实能够显著改善数据吞吐量，但是，还不能说把数据吞吐量提高了一倍，因为同一个站点不可能以线速的速度同时发送和接收应用程序的通信。</P><P><STRONG>理解客户机-服务器通信流</STRONG></P><P>当实施一个交换的局域网设计时，获得对客户机-服务器通信流的详细了解大概是一项最大的挑战。一个网络正在进行重新设计，要把一个共享的局域网环境转变为一个交换的局域网，以满足日益增长的带宽需求。在这种情况下，有可能收集到详细的大量有关通信状况的信息。在一个全新的网络，在网络推出之前收集这些信息是不容易的。然而，没有严格数量的通信状况分析，对通信状况进行合理的质量分析也是应该达到的。获得下列信息的合理的预测是非常重要的:什么用户在与什么服务器进行通话，通话的时间有多长，现在消耗的带宽是多少，将来消耗的带宽是多少?所有的客户机和服务器的物理位置和逻辑位置是什么。换句话说，要清楚地了解每个应用程序的客户机与服务器之间数据通道。服务器之间的通信水平是什么?再次说明一下，这与了解整个网络的全部主要通信流的需求是一致的。如果不充分理解这些通信流，介绍局域网交换机的作用也是很有限的。举一个极端的例子，假设一台服务器在远方并且必须通过一个56K的广域网线路访问这台服务器。在这种情况下，一台局域网交换机将不能显著提高性能，因为瓶颈是在广域网而不是在局域网。</P><P><STRONG>高速内核</STRONG></P><P>一些专有的方法与802.3ad标准的存在允许把多个连接集成为一个逻辑的高速连接。两台交换机之间的多个物理连接必须被当作一个逻辑连接对待，否则，生成树将封锁多余的连接。这种功能可以用来提供核心交换机之间的高速连接并且向高带宽服务器提供高速连接。即使在应用万兆以太网之前，就存在最多把8个以太网端口集成在一起提供高速园区干线的功能。</P></SPAN>
<div align="right">本新闻共<font color=red>3</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_60107_2.htm">2</a>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_60107_3.htm">3</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b1%80%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络设计系列之－－广域网设计</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b9%bf%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b9%bf%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b9%bf%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1</guid>
		<description><![CDATA[&#160;广域网(WAN)对于企业的网络拥有成本是一个最大的单项开支。因此，强调得最多的和最重要的是有一个权衡性价比的区域。本文将探讨各种替代的方法。这些方法在选择和设计WAN基础设施的时候是必须要进行评估的。不同的拓扑的和技术的选择将从它们与基本的WAN设计目标的关系的角度进行讨论。包括同步串行线路、帧中继和ATM在内的传统的技术替代方法将同DSL和MPLS等更高级的技术一起讨论。同步串行线路清晰频道租赁线路是地理上分散的站点之间相互连接的最简单和最传统的方式，然而也是最昂贵的方式。同步租赁线路的主要优势在于其技术的简单性。这就意味着这种技术的安装和排除故障仅需要较少的专业知识，从而减少了技术支持的费用。点对点的串行连接的特点是需要的费用最少，因此提高了有效的数据吞吐量并且消除了额外的延迟和抖动的因素。充足带宽的串行连接的特点是具有极好的服务质量。在串行连接上造成信号延迟和抖动的主要原因是路由器上的队列和数据包串行化。当一个小数据包等待一个大数据包在这个连接上发送的时候可能会出现串行化延迟。这种类型的延迟最有可能发生在低速连接上。然而，带宽预算总是有上限的，并且总有更省钱的方法减少在串行连接上的延迟和抖动。高级的队列技术把大型数据包分割为小数据包，并且给小数据包更高的优先等级，从而保证在串行连接上的延迟分布的更统一。这对于数据包语音、视频和多媒体等对延迟非常敏感的实时应用是非常重要的。串行租赁线路最大的缺点是成本太高。因此，这个行业的许多部门都把串行租赁线路看作是不能有效地使用价格昂贵的带宽。这种情况促使人们从串行租赁线路技术向诸如帧中继或者用于更高带宽需求的ATM信元中继等包交换技术转移。帧中继帧中继协议是在客户的路由器或者帧中继接入设备(FRAD)之间运行的。本地帧中继交换机一般属于服务提供商。永久虚拟电路(PVC)用于站点之间的连接。永久虚拟电路之所以称作“永久”是因为端点总是与一个租赁线路时相同的。使用“虚拟”这个词是因为在运营商的网络上的整个线路中没有一个专用的物理连接。例如，不需要运营商编排其交换机来保证信号传输，从站点A进入帧中继网络的通信将在站点B退出这个运营商的网络。因此，在最基本的水平上，这看起来好像与使用一条租赁线路把站点A与站点B连接起来是一样的。不过，还有许多基本的和相当大的区别。帧中继实际上是通过一种包交换的技术收取传统的基本费用。事实是，整个线路上没有一个专用的物理电路使运营商能够提供一个灵活的带宽，向用户证明这种连接是节省费用的。一项帧中继服务需要为每一个永久虚拟电路购买一个承诺信息速率(CIR)。CIR是运营商担保的端对端的带宽。用户还可以购买额外的突发速率(Burst Rate)。突发速率是所有的永久虚拟电路都支持的最大速度的通信速率。显然，最大突发速率是用户接入帧中继服务提供商的线路的物理速度。然而，运营商不能保证通信将以超过CIR的速度传输。一旦超过了这个速率，所有随后的数据包都将在帧中继文件头上打上“DE”(符合丢弃条件)的标签。这将在本地帧中继交换机上完成。如果在帧中继网络的一个节点检测到阻塞的情况，有“DE”标记的数据包将被首先放弃。在检测到拥塞之后，帧中继交换机将向信息源发送一个后向拥塞通知(BECN)信息。如果发送这个信息的路由器或者FRAD有足够的智能来处理这个信息，那么，它就能够把发送的速率降低到CIR速率。因此，用户可以选择CIR速率或者最大突发速率，以便获得能够充分支持其应用需求的最划算的带宽。使用TCP协议的应用程序对于放弃的数据包更有弹性，因此同不太可靠的基于UDP的应用程序相比性能受到的影响要小一些。对于语音应用程序来说，被放弃的数据包超过一定的比例将影响语音的质量。当以超过CIR的速率进行语音通信时，还有一个需要注意的问题。除了在拥塞时放弃有“DE”标记的数据包之外，帧中继交换机还可能以较低的优先等级缓存这些数据包。这意味着这种通信将会达到目的地，但是，会有很大的延迟或者抖动，对于语音质量或者任何实时重放都会产生严重的影响。避免以超过CIR速率的速度运行实时通信程序应该被当作一项一般的原则。这是非常恰当的，因为帧中继服务会需要某些带宽的保证，不能保证出现任何延迟。因此，对于实时的和非实时的通信使用不同的永久虚拟电路是非常必要的。帧中继网络能够以节省成本的方式提供恢复能力。可以使用一些CIR速率低于主要的永久虚拟电路的备份的永久虚拟电路。这种备份的永久虚拟电路位于通向本地帧中继交换机的不同的电缆线中，因为不仅仅在理论上保证这种恢复能力是很重要的。异步传输模式异步传输模式(ATM)一种综合性技术，旨在把带宽的一致性和传统的清晰频道TDM技术有关的延迟与包交换技术的灵活性结合在一起。ATM的较高层使用专用网络接口(PNNI)支持交换式虚电路(SVC)的动态重新路由。ATM还适应突发通信状况。小的、固定的53个字节的信元可减少在WAN中出现的延迟或者抖动的变化。虽然ATM中使用的许多原则与帧中继相似，但是，交换较小的固定长度的信元以及ATM协议中固有的服务质量的特点使ATM更适合用于由不同成分组成的和实时的应用程序。ATM资源和服务质量参数用户能够受益于与帧中继相同的带宽的灵活性。使用ATM，用户可以从服务提供商那里购买可持续信元速率(SCR)和峰值信元速率(PCR)。这与帧中继中使用的CIR和EIR相同。因此，同使用帧中继一样，用户对于接入速度有一定的控制权，并且可以根据应用的需求调整接入速度。除了与信元速率有关的通信参数之外，ATM还采用了服务质量参数。这些参数可在用户网络接口提出申请，旨在为各种对延迟敏感的和对丢失数据包敏感的应用程序提供更好的服务。信元丢失率(CLR):这是整个连接中数据吞吐量中信元总数与放弃的信元数量的比例。CLR是一个参数，对于那些对丢失数据包非常敏感的应用程序可以把CLR设置为最大值，例如基于UDP数据的应用程序等。信元延迟变化(CDV):CDV是在特定时间间隔中整个ATM连接中延迟的平均变化。对于语音和视频等不能容忍大量延迟变化的应用程序，可以向ATM网络申请CDV的最大值。信元传送延迟(CTD):CTD是总的端对端的延迟或者在整个ATM连接中的延迟。对于那些对时间敏感的语音或者数据应用程序，可以设置这个值。 本新闻共3页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;3&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p><SPAN class=top11>&nbsp;广域网(WAN)对于企业的网络拥有成本是一个最大的单项开支。因此，强调得最多的和最重要的是有一个权衡性价比的区域。本文将探讨各种替代的方法。这些方法在选择和设计WAN基础设施的时候是必须要进行评估的。不同的拓扑的和技术的选择将从它们与基本的WAN设计目标的关系的角度进行讨论。包括同步串行线路、帧中继和ATM在内的传统的技术替代方法将同DSL和MPLS等更高级的技术一起讨论。<BR><BR><STRONG>同步串行线路</STRONG><P>清晰频道租赁线路是地理上分散的站点之间相互连接的最简单和最传统的方式，然而也是最昂贵的方式。同步租赁线路的主要优势在于其技术的简单性。这就意味着这种技术的安装和排除故障仅需要较少的专业知识，从而减少了技术支持的费用。点对点的串行连接的特点是需要的费用最少，因此提高了有效的数据吞吐量并且消除了额外的延迟和抖动的因素。</P><P>充足带宽的串行连接的特点是具有极好的服务质量。在串行连接上造成信号延迟和抖动的主要原因是路由器上的队列和数据包串行化。当一个小数据包等待一个大数据包在这个连接上发送的时候可能会出现串行化延迟。这种类型的延迟最有可能发生在低速连接上。然而，带宽预算总是有上限的，并且总有更省钱的方法减少在串行连接上的延迟和抖动。高级的队列技术把大型数据包分割为小数据包，并且给小数据包更高的优先等级，从而保证在串行连接上的延迟分布的更统一。<BR><BR>这对于数据包语音、视频和多媒体等对延迟非常敏感的实时应用是非常重要的。串行租赁线路最大的缺点是成本太高。因此，这个行业的许多部门都把串行租赁线路看作是不能有效地使用价格昂贵的带宽。这种情况促使人们从串行租赁线路技术向诸如帧中继或者用于更高带宽需求的ATM信元中继等包交换技术转移。</P><P><STRONG>帧中继</STRONG></P><P>帧中继协议是在客户的路由器或者帧中继接入设备(FRAD)之间运行的。本地帧中继交换机一般属于服务提供商。永久虚拟电路(PVC)用于站点之间的连接。永久虚拟电路之所以称作“永久”是因为端点总是与一个租赁线路时相同的。使用“虚拟”这个词是因为在运营商的网络上的整个线路中没有一个专用的物理连接。例如，不需要运营商编排其交换机来保证信号传输，从站点A进入帧中继网络的通信将在站点B退出这个运营商的网络。</P><P>因此，在最基本的水平上，这看起来好像与使用一条租赁线路把站点A与站点B连接起来是一样的。不过，还有许多基本的和相当大的区别。帧中继实际上是通过一种包交换的技术收取传统的基本费用。事实是，整个线路上没有一个专用的物理电路使运营商能够提供一个灵活的带宽，向用户证明这种连接是节省费用的。</P><P>一项帧中继服务需要为每一个永久虚拟电路购买一个承诺信息速率(CIR)。CIR是运营商担保的端对端的带宽。用户还可以购买额外的突发速率(Burst Rate)。突发速率是所有的永久虚拟电路都支持的最大速度的通信速率。显然，最大突发速率是用户接入帧中继服务提供商的线路的物理速度。然而，运营商不能保证通信将以超过CIR的速度传输。一旦超过了这个速率，所有随后的数据包都将在帧中继文件头上打上“DE”(符合丢弃条件)的标签。这将在本地帧中继交换机上完成。</P><P>如果在帧中继网络的一个节点检测到阻塞的情况，有“DE”标记的数据包将被首先放弃。在检测到拥塞之后，帧中继交换机将向信息源发送一个后向拥塞通知(BECN)信息。如果发送这个信息的路由器或者FRAD有足够的智能来处理这个信息，那么，它就能够把发送的速率降低到CIR速率。因此，用户可以选择CIR速率或者最大突发速率，以便获得能够充分支持其应用需求的最划算的带宽。</P><P>使用TCP协议的应用程序对于放弃的数据包更有弹性，因此同不太可靠的基于UDP的应用程序相比性能受到的影响要小一些。对于语音应用程序来说，被放弃的数据包超过一定的比例将影响语音的质量。当以超过CIR的速率进行语音通信时，还有一个需要注意的问题。除了在拥塞时放弃有“DE”标记的数据包之外，帧中继交换机还可能以较低的优先等级缓存这些数据包。这意味着这种通信将会达到目的地，但是，会有很大的延迟或者抖动，对于语音质量或者任何实时重放都会产生严重的影响。</P><P>避免以超过CIR速率的速度运行实时通信程序应该被当作一项一般的原则。这是非常恰当的，因为帧中继服务会需要某些带宽的保证，不能保证出现任何延迟。因此，对于实时的和非实时的通信使用不同的永久虚拟电路是非常必要的。帧中继网络能够以节省成本的方式提供恢复能力。可以使用一些CIR速率低于主要的永久虚拟电路的备份的永久虚拟电路。这种备份的永久虚拟电路位于通向本地帧中继交换机的不同的电缆线中，因为不仅仅在理论上保证这种恢复能力是很重要的。</P><P><STRONG>异步传输模式</STRONG></P><P>异步传输模式(ATM)一种综合性技术，旨在把带宽的一致性和传统的清晰频道TDM技术有关的延迟与包交换技术的灵活性结合在一起。ATM的较高层使用专用网络接口(PNNI)支持交换式虚电路(SVC)的动态重新路由。ATM还适应突发通信状况。小的、固定的53个字节的信元可减少在WAN中出现的延迟或者抖动的变化。虽然ATM中使用的许多原则与帧中继相似，但是，交换较小的固定长度的信元以及ATM协议中固有的服务质量的特点使ATM更适合用于由不同成分组成的和实时的应用程序。</P><P><STRONG>ATM资源和服务质量参数</STRONG></P><P>用户能够受益于与帧中继相同的带宽的灵活性。使用ATM，用户可以从服务提供商那里购买可持续信元速率(SCR)和峰值信元速率(PCR)。这与帧中继中使用的CIR和EIR相同。因此，同使用帧中继一样，用户对于接入速度有一定的控制权，并且可以根据应用的需求调整接入速度。</P><P>除了与信元速率有关的通信参数之外，ATM还采用了服务质量参数。这些参数可在用户网络接口提出申请，旨在为各种对延迟敏感的和对丢失数据包敏感的应用程序提供更好的服务。</P><P>信元丢失率(CLR):这是整个连接中数据吞吐量中信元总数与放弃的信元数量的比例。CLR是一个参数，对于那些对丢失数据包非常敏感的应用程序可以把CLR设置为最大值，例如基于UDP数据的应用程序等。</P><P>信元延迟变化(CDV):CDV是在特定时间间隔中整个ATM连接中延迟的平均变化。对于语音和视频等不能容忍大量延迟变化的应用程序，可以向ATM网络申请CDV的最大值。</P><P>信元传送延迟(CTD):CTD是总的端对端的延迟或者在整个ATM连接中的延迟。对于那些对时间敏感的语音或者数据应用程序，可以设置这个值。</P></SPAN>
<div align="right">本新闻共<font color=red>3</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_32520_2.htm">2</a>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_32520_3.htm">3</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%b9%bf%e5%9f%9f%e7%bd%91%e8%ae%be%e8%ae%a1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络设计系列之－－IP地址管理</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8dip%e5%9c%b0%e5%9d%80%e7%ae%a1%e7%90%86</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8dip%e5%9c%b0%e5%9d%80%e7%ae%a1%e7%90%86#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8dip%e5%9c%b0%e5%9d%80%e7%ae%a1%e7%90%86</guid>
		<description><![CDATA[&#160;IP地址管理是成功的逻辑设计的基础。本讲座的这一部分将介绍如何制定一个能够支持网络随时扩容的可伸缩性的IP地址管理计划。这部分还将介绍可变长度子网掩码和路由汇聚等关键工具的使用和重要性。选择适当的路由协议是同等重要的。用于评估一个路由协议的适宜性参数也在这里进行研究和讨论。IP路由协议的不同特点将与路由信息协议(RIP)和开放最短路径优先协议(OSPF)等行业标准协议的运行一起介绍。可变长度子网掩码可变长度子网掩码(VLSM)的含义是在一个网络的同一个主要类别中使用一个以上的子网掩码。它能够更有效率地在主机和子网中使用IP地址空间。在一个没有充裕的IP地址空间的网络中，VLSM是非常重要的。为了在同一个主要网络使用不同的子网掩码，需要一个支持VLSM的路由协议。这种路由协议称作无类路由协议。这些协议在路由广播中携带子网掩码信息，因此能够支持一个以上的子网掩码。无类路由协议的例子包括OSPF、RIP第二版、思科的EIGRP(增强型内部网关路由协议)、BGP(边界网关协议)和IS-IS(中间系统-中间系统协议)。考虑一个使用VLSM的例子。假设需要一个B类地址172.16.0.0支持一个总共拥有200个站点的网络。这个最繁忙的局域网可能最多支持100台主机，并且最多可以有400个点对点的广域网连接。因此，需要600个子网，每一个子网最多可以有100台主机。即使采用B类地址，在不使用VLSM的情况下也没有足够的地址空间来满足这种需求。在规划一个VLSM解决方案的时候，你应该首先使用最短的子网掩码。换句话说，你应该计划让这个子网支持最多的主机。这一般是用于大多数或者全部局域网网段中的子网掩码。在这个例子中，有200个局域网网段，每个网段最多可支持100台主机。虽然7个“host bits”(主机地址的二进制位数)或者一个25位掩码就能够满足这种需求，但是，从管理方面说，使用一个24位掩码会更方便。由于在这个例子中使用了VLSM，网络地址是非常充裕的。局域网网段可以使用172.16.1.0/24至172.16.200.0/24的地址。现在是进入VLSM第二个阶段的时候了。这个阶段包括选择可用的子网和进一步划分子网。这个阶段有时候称作“划分子网”。重要的是要记住，子网划分只能在一个或者更多的子网没有用尽的情况下才能实施。172.16.201.0这个地址范围是空闲的，可以使用30位掩码进行划分，在这个地址范围内创建一个额外的64个子网。同样，172.16.202.x/30地址范围可以创建适用于点对点连接的64个以上的子网。每一个最多可包含172.16.207.x/30的地址范围都可以为400个串行连接提供足够的子网地址空间。这就意味着满足了地址管理的要求，并且还有许多空闲的地址空间。如果有可能，应该使用连续的子网。虽然这并不重要，但是，选择一个连续范围的地址并且为这些地址分配一个特定的子网掩码是非常有意义的。正如下一节将要重点介绍的那样，在讨论路由汇聚的时候，高效率的IP地址分配不会仅仅是为了整洁而做的，这样做通常对于良好的网络设计是必不可少的。路由汇聚路由汇聚的含义是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸。这样将减少与每一个路由跳有关的延迟，因为由于减少了路由登录项数量，查询路由表的平均时间将加快。由于路由登录项广播的数量减少，路由协议的开销也将显著减少。随着整个网络(以及子网的数量)的扩大，路由汇聚将变得更加重要。除了缩小路由表的尺寸之外，路由汇聚还能通过在网络连接断开之后限制路由通信的传播来提高网络的稳定性。如果一台路由器仅向下一个下游的路由器发送汇聚的路由，那么，它就不会广播与汇聚的范围内包含的具体子网有关的变化。例如，如果一台路由器仅向其临近的路由器广播汇聚路由地址172.16.0.0/16，那么，如果它检测到172.16.10.0/24局域网网段中的一个故障，它将不更新临近的路由器。这个原则在网络拓扑结构发生变化之后能够显著减少任何不必要的路由更新。实际上，这将加快汇聚，使网络更加稳定。为了执行能够强制设置的路由汇聚，需要一个无类路由协议。不过，无类路由协议本身还是不够的。制定这个IP地址管理计划是必不可少的，这样就可以在网络的战略点实施没有冲突的路由汇聚。这些地址范围称作连续地址段。例如，一台把一组分支办公室连接到公司总部的路由器能够把这些分支办公室使用的全部子网汇聚为一个单个的路由广播。如果所有这些子网都在172.16.16.0/24至172.16.31.0/24的范围内，那么，这个地址范围就可以汇聚为172.16.16.0/20。这是一个与位边界(bit boundary)一致的连续地址范围，因此，可以保证这个地址范围能够汇聚为一个单一的声明。要实现路由汇聚的好处的最大化，制定细致的地址管理计划是必不可少的。选择路由协议选择正确的IP路由协议的重要性已经间接地提到了。现在，我介绍一下评估一个路由协议的具体问题。让我们考察一下判断一个路由协议所依据的一些特点。·稳定性路由协议必须具备防止出现路由环路问题的稳定性。路由环路是由网络拓扑结构发生变化之后立即出现的虚假路由信息广播引起的，可造成网络的崩溃。RIP等不太高级的协议使用保持计时器(holddown timer)来提高稳定性。如果一个子网性能下降，所有的路由器在保持计时器运行期间将忽略那个子网的任何更新。 本新闻共3页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;3&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p><SPAN class=top11>&nbsp;IP地址管理是成功的逻辑设计的基础。本讲座的这一部分将介绍如何制定一个能够支持网络随时扩容的可伸缩性的IP地址管理计划。这部分还将介绍可变长度子网掩码和路由汇聚等关键工具的使用和重要性。选择适当的路由协议是同等重要的。用于评估一个路由协议的适宜性参数也在这里进行研究和讨论。IP路由协议的不同特点将与路由信息协议(RIP)和开放最短路径优先协议(OSPF)等行业标准协议的运行一起介绍。<P><STRONG>可变长度子网掩码</STRONG></P><P>可变长度子网掩码(VLSM)的含义是在一个网络的同一个主要类别中使用一个以上的子网掩码。它能够更有效率地在主机和子网中使用IP地址空间。在一个没有充裕的IP地址空间的网络中，VLSM是非常重要的。</P><P>为了在同一个主要网络使用不同的子网掩码，需要一个支持VLSM的路由协议。这种路由协议称作无类路由协议。这些协议在路由广播中携带子网掩码信息，因此能够支持一个以上的子网掩码。无类路由协议的例子包括OSPF、RIP第二版、思科的EIGRP(增强型内部网关路由协议)、BGP(边界网关协议)和IS-IS(中间系统-中间系统协议)。</P><P>考虑一个使用VLSM的例子。假设需要一个B类地址172.16.0.0支持一个总共拥有200个站点的网络。这个最繁忙的局域网可能最多支持100台主机，并且最多可以有400个点对点的广域网连接。因此，需要600个子网，每一个子网最多可以有100台主机。即使采用B类地址，在不使用VLSM的情况下也没有足够的地址空间来满足这种需求。</P><P>在规划一个VLSM解决方案的时候，你应该首先使用最短的子网掩码。换句话说，你应该计划让这个子网支持最多的主机。这一般是用于大多数或者全部局域网网段中的子网掩码。在这个例子中，有200个局域网网段，每个网段最多可支持100台主机。虽然7个“host bits”(主机地址的二进制位数)或者一个25位掩码就能够满足这种需求，但是，从管理方面说，使用一个24位掩码会更方便。由于在这个例子中使用了VLSM，网络地址是非常充裕的。局域网网段可以使用172.16.1.0/24至172.16.200.0/24的地址。</P><P>现在是进入VLSM第二个阶段的时候了。这个阶段包括选择可用的子网和进一步划分子网。这个阶段有时候称作“划分子网”。重要的是要记住，子网划分只能在一个或者更多的子网没有用尽的情况下才能实施。</P><P>172.16.201.0这个地址范围是空闲的，可以使用30位掩码进行划分，在这个地址范围内创建一个额外的64个子网。同样，172.16.202.x/30地址范围可以创建适用于点对点连接的64个以上的子网。每一个最多可包含172.16.207.x/30的地址范围都可以为400个串行连接提供足够的子网地址空间。这就意味着满足了地址管理的要求，并且还有许多空闲的地址空间。</P><P>如果有可能，应该使用连续的子网。虽然这并不重要，但是，选择一个连续范围的地址并且为这些地址分配一个特定的子网掩码是非常有意义的。正如下一节将要重点介绍的那样，在讨论路由汇聚的时候，高效率的IP地址分配不会仅仅是为了整洁而做的，这样做通常对于良好的网络设计是必不可少的。</P><P><STRONG>路由汇聚</STRONG></P><P>路由汇聚的含义是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸。这样将减少与每一个路由跳有关的延迟，因为由于减少了路由登录项数量，查询路由表的平均时间将加快。由于路由登录项广播的数量减少，路由协议的开销也将显著减少。随着整个网络(以及子网的数量)的扩大，路由汇聚将变得更加重要。</P><P>除了缩小路由表的尺寸之外，路由汇聚还能通过在网络连接断开之后限制路由通信的传播来提高网络的稳定性。如果一台路由器仅向下一个下游的路由器发送汇聚的路由，那么，它就不会广播与汇聚的范围内包含的具体子网有关的变化。例如，如果一台路由器仅向其临近的路由器广播汇聚路由地址172.16.0.0/16，那么，如果它检测到172.16.10.0/24局域网网段中的一个故障，它将不更新临近的路由器。</P><P>这个原则在网络拓扑结构发生变化之后能够显著减少任何不必要的路由更新。实际上，这将加快汇聚，使网络更加稳定。为了执行能够强制设置的路由汇聚，需要一个无类路由协议。不过，无类路由协议本身还是不够的。制定这个IP地址管理计划是必不可少的，这样就可以在网络的战略点实施没有冲突的路由汇聚。</P><P>这些地址范围称作连续地址段。例如，一台把一组分支办公室连接到公司总部的路由器能够把这些分支办公室使用的全部子网汇聚为一个单个的路由广播。如果所有这些子网都在172.16.16.0/24至172.16.31.0/24的范围内，那么，这个地址范围就可以汇聚为172.16.16.0/20。这是一个与位边界(bit boundary)一致的连续地址范围，因此，可以保证这个地址范围能够汇聚为一个单一的声明。要实现路由汇聚的好处的最大化，制定细致的地址管理计划是必不可少的。</P><P><STRONG>选择路由协议</STRONG></P><P>选择正确的IP路由协议的重要性已经间接地提到了。现在，我介绍一下评估一个路由协议的具体问题。让我们考察一下判断一个路由协议所依据的一些特点。</P><P><STRONG>·稳定性</STRONG></P><P>路由协议必须具备防止出现路由环路问题的稳定性。路由环路是由网络拓扑结构发生变化之后立即出现的虚假路由信息广播引起的，可造成网络的崩溃。RIP等不太高级的协议使用保持计时器(holddown timer)来提高稳定性。如果一个子网性能下降，所有的路由器在保持计时器运行期间将忽略那个子网的任何更新。</P></SPAN>
<div align="right">本新闻共<font color=red>3</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_33341_2.htm">2</a>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_33341_3.htm">3</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8dip%e5%9c%b0%e5%9d%80%e7%ae%a1%e7%90%86/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP网络设计系列之－－基本原则</title>
		<link>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99</link>
		<comments>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99#comments</comments>
		<pubDate>Thu, 12 May 2011 06:32:39 +0000</pubDate>
		<dc:creator>fangds</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99</guid>
		<description><![CDATA[导言一个优秀的网络设计是建立一切成功的网络应用的基础。本文是四篇讲座文章的第一篇，重点介绍基于IP的网络设计，因为IP实际上已经成为标准的桌面协议。高级IP网络支持的应用在本质上已经日益变得多元化。IP已经同传统的数据应用一起成为语音、视频和多媒体等实时应用的一种传输机制。由于当前应用有许多不同的性质，IP互联网设计从来没有像现在这样具有挑战性。本文讨论在设计网络时应该遵循的一些基本原则。以后的文章将介绍用来熟练地进行网络设计的具体的局域网和广域网技术。需要一个设计计划大多数IP互联网络从设计方面说都属于两大类之中的一类。一类显然是设计非常好的网络，另一类只是临时批凑起来的网络。这两类网络明显的区别显示了良好的设计的重要性。一个设计良好的网络的特点是在下面的每一个领域都有可预见性和一致性:性能在主要网络性能参数方面能够保持不变的高水平性能。这些参数可能包括应用程序响应时间和响应时间的变化。弹性网络应该为其支持的应用程序提供一个有弹性的平台。一个高度专用的网络比需要满足所有的应用程序的99%的可用性目标，并且能够满足重要任务应用程序“零关机时间”的要求。理想的情况是，任何一个连接的失败或者客户机至服务器之间的任何一台网络设备的故障都不应该导致客户机与服务器之间通信进程的丢失。自动绕过故障启用备份线路的功能应该在极短的时间内完成，这个时间的间隙应该足以把当前通信进程的影响降低到最小的程度。这个间隔时间称作“收敛时间”，可根据网络拓扑结构变化的时间长度来确定(如一个连接的丢失)，直到网络上的每一台设备都知道这个变化。一个设计良好的网络总是一直保持较低的收敛时间。可伸缩性一个具有可伸缩性的网络能够充分支持网络的扩容，而不需要进行重大的重新设计。在用户数量的增长方面，网络节点或者站点的数量必须能够满足可能增加新的应用程序和这些应用程序可能消耗更多的带宽的需求。要获得对你的网络的伸缩性的认识，你需要回答下列问题:如果用户数量增加一倍、节点数量增加一倍、并且有需要一倍带宽的应用程序，你该怎么办?一个具有伸缩性的网络能够容纳这种增长和变化，而不需要对基础设置进行全面修改。基础的网络拓扑结构和使用的技术不必为了容纳这些变化而进行重新设计。新的用户和节点可以用一个简单的构建模块的方式添加到一个可伸缩的网络中。例如，新的节点应该简单地把新的网段或者模块与作为网络核心和骨干的现有的网络结构结合在一起。应该采用根据需要适当地增加局域网和广域网带宽的方式来容纳增加的带宽。在增加网络路由器和交换机的内存和处理能力等网络寿命周期之间，某些运营的升级也许还是必要的。然而，不应该做的事情是，在网络的寿命周期内，不应该为了支持计划之中的增长而对这个网络基础设施进行全面的修改。这就是一开始就要有一个网络计划的根本原因之一。运行成本成本是网络设计过程之中最基本的推动因素。这是一个不可回避的事实。网络不仅必须要满足某些技术规范，而且必须在设计和应用上更划算。拥有一个网络的主要成本通常是服务提供商提供的广域网的费用。那是帧中继、ATM、租赁线路或者ISDN技术的费用。网络设计的特点是权衡性能和可用性的成本。例如，要保证优化的应用程序平台可能需要更多的带宽，然而，这里有一个临界点，超过了这个限度去购买更多的带宽就不划算。同样，备份线路或者ISDN可以用来在客户机与服务器的通道之中保证网络的弹性，一旦主要数据通道出现故障，即可立即启用保证线路畅通。这种备份技术必须与主要连接线路的速度相同以避免在发生故障时降低服务质量。对于用户来说，在发生故障时降低服务质量是否可以容忍是一个经济性的决策。一个设计良好的网络不仅运行起来节省成本，而且还应该保持相对一致的运行成本。能够说明运行成本的一致性和可预见性的重要性的最佳例子之一是就是技术支持的成本问题。拥有网络的成本的第二大组成部分(仅次于广域网成本)就是技术支持的成本。这也是最容易忽略的一个成本要素，主要是因为技术支持的成本很难量化。例如，为了减少ATM服务提供商收取的广域网的费用，可以决定采用一种私人管理的应用ATM的方式。虽然这样做毫无疑问可以减少广域网成本，但是，这样做会导致技术支持费用的增加。要为一个专用ATM网络提供技术支持需要一个具有相当水平的技术人员。雇用和保留一个这样的技术人员是很昂贵的。然而，如果在公司内部没有这种技术人员，使用外部人员提供技术支持的费用将更高，例如使用外部的技术顾问或者使用第三方填补这个空缺以保证系统每天的顺利运行。设计目标在设计开始的时候制定一个明确的设计目标是必不可少的。这些目标与用来评估网络设计的一些参数有关。关键的性能参数必须要确定下来，并且为这些参数分配目标值。这些性能的目标最终是由应用程序的要求规定的。要以有意义的方式分配这些目标，应用程序必须知道数量和质量的水平。必须评估应用程序消耗的带宽以便提供必要的容量来满足性能目标。必须清楚地了应用程序包对数据包丢失、数据包延迟和各种延迟的敏感性。这在支持多种应用程序的现代网络中是特别重要的。数据包丢失对于使用UDP协议传输的数据应用程序的影响比对需要可靠连接的TCP协议应用程序的影响还要严重。相反，对于数据包丢失、数据包延迟和各种延迟来说，语音、视频、和多媒体等实时应用程序能够更容忍数据包丢失。因此，对于不同的网络应用程序应该采用优先等级不同的质量参数。目标值应该设置网络的可用性或者关机时间。同性能目标一样，这个目标在设计过程中将作为一个质量的标准。允许的网络关机时间的水平与商业应用程序本身有很大的关系。应用程序不能使用造成的影响在不同的行业有很大区别，在金融行业可能造成每小时数万美元的损失，在医疗行业有可能造成性命的损失。对于网络可能升级的规模应该提供一个预测。这种预测目标应该包括网络用户增加的数量、网络节点的增加数量，地理位置数量的增加、以及更重要的应用程序通信量的增加等。网络设计师的任务就是制定一个能够容纳这些增长的网络计划。如果一个网络不是一个成本低效率高的解决方案，设计这种具有性能、弹性和可伸缩性的网络就是没有用处的。设计师必须要非常清楚地了解预算的限制，以便对权衡成本和可用性做出聪明的决策。 本新闻共2页,当前在第1页&#160;&#160;1&#160;&#160;2&#160;&#160;]]></description>
			<content:encoded><![CDATA[<p><SPAN class=top11><STRONG>导言</STRONG><P>一个优秀的网络设计是建立一切成功的网络应用的基础。本文是四篇讲座文章的第一篇，重点介绍基于IP的网络设计，因为IP实际上已经成为标准的桌面协议。高级IP网络支持的应用在本质上已经日益变得多元化。IP已经同传统的数据应用一起成为语音、视频和多媒体等实时应用的一种传输机制。由于当前应用有许多不同的性质，IP互联网设计从来没有像现在这样具有挑战性。本文讨论在设计网络时应该遵循的一些基本原则。以后的文章将介绍用来熟练地进行网络设计的具体的局域网和广域网技术。</P><P><STRONG>需要一个设计计划</STRONG></P><P>大多数IP互联网络从设计方面说都属于两大类之中的一类。一类显然是设计非常好的网络，另一类只是临时批凑起来的网络。这两类网络明显的区别显示了良好的设计的重要性。一个设计良好的网络的特点是在下面的每一个领域都有可预见性和一致性:</P><P><STRONG>性能</STRONG></P><P>在主要网络性能参数方面能够保持不变的高水平性能。这些参数可能包括应用程序响应时间和响应时间的变化。</P><P><STRONG>弹性</STRONG></P><P>网络应该为其支持的应用程序提供一个有弹性的平台。一个高度专用的网络比需要满足所有的应用程序的99%的可用性目标，并且能够满足重要任务应用程序“零关机时间”的要求。理想的情况是，任何一个连接的失败或者客户机至服务器之间的任何一台网络设备的故障都不应该导致客户机与服务器之间通信进程的丢失。自动绕过故障启用备份线路的功能应该在极短的时间内完成，这个时间的间隙应该足以把当前通信进程的影响降低到最小的程度。这个间隔时间称作“收敛时间”，可根据网络拓扑结构变化的时间长度来确定(如一个连接的丢失)，直到网络上的每一台设备都知道这个变化。一个设计良好的网络总是一直保持较低的收敛时间。</P><P><STRONG>可伸缩性</STRONG></P><P>一个具有可伸缩性的网络能够充分支持网络的扩容，而不需要进行重大的重新设计。在用户数量的增长方面，网络节点或者站点的数量必须能够满足可能增加新的应用程序和这些应用程序可能消耗更多的带宽的需求。要获得对你的网络的伸缩性的认识，你需要回答下列问题:如果用户数量增加一倍、节点数量增加一倍、并且有需要一倍带宽的应用程序，你该怎么办?一个具有伸缩性的网络能够容纳这种增长和变化，而不需要对基础设置进行全面修改。基础的网络拓扑结构和使用的技术不必为了容纳这些变化而进行重新设计。新的用户和节点可以用一个简单的构建模块的方式添加到一个可伸缩的网络中。例如，新的节点应该简单地把新的网段或者模块与作为网络核心和骨干的现有的网络结构结合在一起。应该采用根据需要适当地增加局域网和广域网带宽的方式来容纳增加的带宽。在增加网络路由器和交换机的内存和处理能力等网络寿命周期之间，某些运营的升级也许还是必要的。然而，不应该做的事情是，在网络的寿命周期内，不应该为了支持计划之中的增长而对这个网络基础设施进行全面的修改。这就是一开始就要有一个网络计划的根本原因之一。</P><P><STRONG>运行成本</STRONG></P><P>成本是网络设计过程之中最基本的推动因素。这是一个不可回避的事实。网络不仅必须要满足某些技术规范，而且必须在设计和应用上更划算。拥有一个网络的主要成本通常是服务提供商提供的广域网的费用。那是帧中继、ATM、租赁线路或者ISDN技术的费用。</P><P>网络设计的特点是权衡性能和可用性的成本。例如，要保证优化的应用程序平台可能需要更多的带宽，然而，这里有一个临界点，超过了这个限度去购买更多的带宽就不划算。</P><P>同样，备份线路或者ISDN可以用来在客户机与服务器的通道之中保证网络的弹性，一旦主要数据通道出现故障，即可立即启用保证线路畅通。这种备份技术必须与主要连接线路的速度相同以避免在发生故障时降低服务质量。对于用户来说，在发生故障时降低服务质量是否可以容忍是一个经济性的决策。</P><P>一个设计良好的网络不仅运行起来节省成本，而且还应该保持相对一致的运行成本。能够说明运行成本的一致性和可预见性的重要性的最佳例子之一是就是技术支持的成本问题。拥有网络的成本的第二大组成部分(仅次于广域网成本)就是技术支持的成本。这也是最容易忽略的一个成本要素，主要是因为技术支持的成本很难量化。</P><P>例如，为了减少ATM服务提供商收取的广域网的费用，可以决定采用一种私人管理的应用ATM的方式。虽然这样做毫无疑问可以减少广域网成本，但是，这样做会导致技术支持费用的增加。要为一个专用ATM网络提供技术支持需要一个具有相当水平的技术人员。雇用和保留一个这样的技术人员是很昂贵的。然而，如果在公司内部没有这种技术人员，使用外部人员提供技术支持的费用将更高，例如使用外部的技术顾问或者使用第三方填补这个空缺以保证系统每天的顺利运行。</P><P><STRONG>设计目标</STRONG></P><P>在设计开始的时候制定一个明确的设计目标是必不可少的。这些目标与用来评估网络设计的一些参数有关。关键的性能参数必须要确定下来，并且为这些参数分配目标值。这些性能的目标最终是由应用程序的要求规定的。</P><P>要以有意义的方式分配这些目标，应用程序必须知道数量和质量的水平。必须评估应用程序消耗的带宽以便提供必要的容量来满足性能目标。必须清楚地了应用程序包对数据包丢失、数据包延迟和各种延迟的敏感性。这在支持多种应用程序的现代网络中是特别重要的。数据包丢失对于使用UDP协议传输的数据应用程序的影响比对需要可靠连接的TCP协议应用程序的影响还要严重。</P><P>相反，对于数据包丢失、数据包延迟和各种延迟来说，语音、视频、和多媒体等实时应用程序能够更容忍数据包丢失。因此，对于不同的网络应用程序应该采用优先等级不同的质量参数。目标值应该设置网络的可用性或者关机时间。同性能目标一样，这个目标在设计过程中将作为一个质量的标准。</P><P>允许的网络关机时间的水平与商业应用程序本身有很大的关系。应用程序不能使用造成的影响在不同的行业有很大区别，在金融行业可能造成每小时数万美元的损失，在医疗行业有可能造成性命的损失。</P><P>对于网络可能升级的规模应该提供一个预测。这种预测目标应该包括网络用户增加的数量、网络节点的增加数量，地理位置数量的增加、以及更重要的应用程序通信量的增加等。网络设计师的任务就是制定一个能够容纳这些增长的网络计划。<BR><BR>如果一个网络不是一个成本低效率高的解决方案，设计这种具有性能、弹性和可伸缩性的网络就是没有用处的。设计师必须要非常清楚地了解预算的限制，以便对权衡成本和可用性做出聪明的决策。</P></SPAN>
<div align="right">本新闻共<font color=red>2</font>页,当前在第<font color=red>1</font>页&nbsp;&nbsp;<font color="red">1</font>&nbsp;&nbsp;<a href="/CMS/Pub/softlevel/softlevel_networkengineer/2006_05_11_18342_2.htm">2</a>&nbsp;&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/ip%e7%bd%91%e7%bb%9c%e8%ae%be%e8%ae%a1%e7%b3%bb%e5%88%97%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网络基础知识讲座之四：理解数据链路层</title>
		<link>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e8%ae%b2%e5%ba%a7%e4%b9%8b%e5%9b%9b%ef%bc%9a%e7%90%86%e8%a7%a3%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82</link>
		<comments>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e8%ae%b2%e5%ba%a7%e4%b9%8b%e5%9b%9b%ef%bc%9a%e7%90%86%e8%a7%a3%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e8%ae%b2%e5%ba%a7%e4%b9%8b%e5%9b%9b%ef%bc%9a%e7%90%86%e8%a7%a3%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82</guid>
		<description><![CDATA[　　2层是数据链路层，是以太网所在的层。在这一层我们将讨论网桥、交换和虚拟局域网，要让一个网络运行起来，你实际上不需要学习以太网内部的工作原理，当然，如果你愿意学习的话，你可以利用其它的时间学习这方面的知识。　　以太网交换机是一种“网桥”设备。传统的网桥是这样工作的，一开始它接收以太网帧，然后，把它们发送到除接收端口之外的全部其它端口。以太网交换机具允许允许双绞线连接的能力。它渐学习哪一个端口连接了哪些MAC地址。这时候，网桥就变成了一台学习设备，能够存储在一个端口上看到的全部的MAC地址表。当一个帧需要发出时，网桥将查看在网桥表中的目标MAC地址，并且知道应该在哪一个端口发送这个帧。这种仅向正确的主机发送数据的能力是交换技术中的一个巨大的进步，因为这可能显著减少通信冲突。如果在网桥表中没有目标MAC地址，交换机就简单地把数据发送到全部端口。这是首次发现主机到底在什么地方的惟一方法，因此，正如你看到的那样，把数据发送到全部端口是交换技术中的一个重要原则。这个原则在路由中也非常必要。　　2层相关的重要词汇包括：　　单播分段（Unicast segmentation）：网桥能够限制哪些主机能够收到单播帧（仅发送给一个MAC地址的帧）。集线器只是简单地把一切数据发送给所有的端口，因此，单播分段本身可以节省大量的带宽。　　冲突域（Collision Domain）：冲突域是能够发生冲突的网段。由于交换机采用了直通发送技术以及网卡全部采用双工技术，冲突已经不再发生了。如果你在一个端口看到冲突，这就意味着有人意外地使用半双工的设备，或者是出现了其它的故障。　　广播域：发送和接收广播帧的网段。　　在交换机产品几年后，网桥运行所采用的老式的存储和发送方式改变了。新的交换机仅查看帧的目标MAC地址，然后立即把这个帧发送出去。这种技术称作“直通发送”可以帧更快地直接通过交换机，因为这种方式对帧很少进行处理。这种方式也暗示了一件重要的事情：一台交换机不再检查CRC（循环冗余校验）以便查看数据包是否损坏。这还暗示着不可能发生冲突。　　另外，为了解决广播网段的问题，我们引入了虚拟局域网技术。如果你不能向另一台机器发送广播帧，那些机器就不在你的本地网络中，你要把全部数据包发送给一台路由器，接着由路由器发送这些数据包。实际上，这就是虚拟局域网做的事情：虚拟局域网将网络划分为更多的子网。　　你可以在一台交换机上设置虚拟局域网，然后向一个虚拟局域网分配端口。如果主机A是虚拟局域网1，这台主机就不能与虚拟局域网2中的任何人通话，就像它们生活在完全没有网络连接的设备中一样。不过需要注意，这毕竟只是虚拟的，如果交换机的MAC地址表空间已经被数据填满从而无法继续维护这个交换MAC地址表，为了继续维持通讯交换机将会把收到的所有数据转发到所有端口。很多人将VLAN视为一种很好的安全措施，实际上任何一个半吊子黑客使用合适的工具都可以很快的攻克交换机的VLAN限制，事实上，当交换机出现MAC地址表溢出的情况时，它会变成一台单纯的HUB.　　正如我们已经知道的那样，如果你无法使用ARP协议获得目标的MAC地址，那你必须要使用一台路由器。这是不是意味着你必须在每个VLAN之间物理的连入一台路由器呢？不需要，因为我们现在拥有3层交换机！设想一个例子，如果你愿意，一台交换机可以配置48个端口。这台交换机有两个虚拟局域网，虚拟局域网1采用1至24端口，虚拟局域网2采用25至48端口。要把这两个虚拟局域网连接起来，你基本上有三种选择。第一，使用一台路由器分别连接这两个虚拟局域网中的一个端口，并且分为VLAN中的主机配置正确的默认路由。第二种方法是你还可以简单地在每个虚拟局域网中各自建立一个虚拟路由器接口（virtual interfaces）。在思科的设备，这种虚拟路由器接口可能称作“vlan1”和“vlan2”。它们拥有自己的IP地址，而VLAN中的主机使用这些虚拟路由器接口作为自己的路由器。　　在第三种方法使我们回到了2层概述的最终话题。如果你拥有多台需要包含同样的虚拟局域网的交换机，你可以通过端口汇聚（trunk）的方式它们都连接起来。这样，交换机A中的虚拟局域网1和交换机B中的虚拟局域网1就完全是一样的了。这是采用802.1q标准完成的。802.1q标准为将离开第一台交换机的数据包打上一个虚拟局域网的标识符。思科把这些交换机间的链路称作“主干端口（trunk ports）”，你可以拥有交换机允许的最多数量的虚拟局域网（目前大多数硬件允许4096个虚拟局域网）。因此，在虚拟局域网之间建立联系的第三种方法（也是最后一种方法）是把以trunk方式连接一台路由器，并且为每一个虚拟局域网建立一个虚拟路由器接口。虚拟局域网1上的主机（无论是在交换机A和交换机B上）都能够访问这个路由器接口（这个接口可以在另一台设备上），因为他们全部都连接在了一起，并且共享一个广播域。关于trunk与802.1q的更多信息请参见这篇文章。　　在这里我们没有采用“这是2层协议，记住以太网数据包头”这种标准的教学模式。要成为一个真正的专家，你必须要知道这些知识。但是，要成为一个有用的操作人员，简单地知道2层是如何工作的就可以了。下一讲我们将介绍网络领域最有趣的协议生成树协议。　　小结：　　●网桥（又名交换机）存储MAC地址表以实现单播网段功能。也就是说它们仅向需要这个数据的主机发送单播数据。　　●虚拟局域网并不能提供可靠的安全。　　●一台3层交换机能够通过trunk提供多个虚拟局域网，并且为这些虚拟局域网提供路由。这可以完全在同一条线路上实现。]]></description>
			<content:encoded><![CDATA[<p><P>　　2层是数据链路层，是以太网所在的层。在这一层我们将讨论网桥、交换和虚拟局域网，要让一个网络运行起来，你实际上不需要学习以太网内部的工作原理，当然，如果你愿意学习的话，你可以利用其它的时间学习这方面的知识。</P><P>　　以太网交换机是一种“网桥”设备。传统的网桥是这样工作的，一开始它接收以太网帧，然后，把它们发送到除接收端口之外的全部其它端口。以太网交换机具允许允许双绞线连接的能力。它渐学习哪一个端口连接了哪些MAC地址。这时候，网桥就变成了一台学习设备，能够存储在一个端口上看到的全部的MAC地址表。当一个帧需要发出时，网桥将查看在网桥表中的目标MAC地址，并且知道应该在哪一个端口发送这个帧。这种仅向正确的主机发送数据的能力是交换技术中的一个巨大的进步，因为这可能显著减少通信冲突。如果在网桥表中没有目标MAC地址，交换机就简单地把数据发送到全部端口。这是首次发现主机到底在什么地方的惟一方法，因此，正如你看到的那样，把数据发送到全部端口是交换技术中的一个重要原则。这个原则在路由中也非常必要。</P><P><STRONG>　　2层相关的重要词汇包括：</STRONG></P><P>　　单播分段（Unicast segmentation）：网桥能够限制哪些主机能够收到单播帧（仅发送给一个MAC地址的帧）。集线器只是简单地把一切数据发送给所有的端口，因此，单播分段本身可以节省大量的带宽。</P><P>　　冲突域（Collision Domain）：冲突域是能够发生冲突的网段。由于交换机采用了直通发送技术以及网卡全部采用双工技术，冲突已经不再发生了。如果你在一个端口看到冲突，这就意味着有人意外地使用半双工的设备，或者是出现了其它的故障。</P><P>　　<STRONG>广播域：发送和接收广播帧的网段。</STRONG></P><P>　　在交换机产品几年后，网桥运行所采用的老式的存储和发送方式改变了。新的交换机仅查看帧的目标MAC地址，然后立即把这个帧发送出去。这种技术称作“直通发送”可以帧更快地直接通过交换机，因为这种方式对帧很少进行处理。这种方式也暗示了一件重要的事情：一台交换机不再检查CRC（循环冗余校验）以便查看数据包是否损坏。这还暗示着不可能发生冲突。</P><P>　　另外，为了解决广播网段的问题，我们引入了虚拟局域网技术。如果你不能向另一台机器发送广播帧，那些机器就不在你的本地网络中，你要把全部数据包发送给一台路由器，接着由路由器发送这些数据包。实际上，这就是虚拟局域网做的事情：虚拟局域网将网络划分为更多的子网。</P><P>　　你可以在一台交换机上设置虚拟局域网，然后向一个虚拟局域网分配端口。如果主机A是虚拟局域网1，这台主机就不能与虚拟局域网2中的任何人通话，就像它们生活在完全没有网络连接的设备中一样。不过需要注意，这毕竟只是虚拟的，如果交换机的MAC地址表空间已经被数据填满从而无法继续维护这个交换MAC地址表，为了继续维持通讯交换机将会把收到的所有数据转发到所有端口。很多人将VLAN视为一种很好的安全措施，实际上任何一个半吊子黑客使用合适的工具都可以很快的攻克交换机的VLAN限制，事实上，当交换机出现MAC地址表溢出的情况时，它会变成一台单纯的HUB.</P><P>　　正如我们已经知道的那样，如果你无法使用ARP协议获得目标的MAC地址，那你必须要使用一台路由器。这是不是意味着你必须在每个VLAN之间物理的连入一台路由器呢？不需要，因为我们现在拥有3层交换机！设想一个例子，如果你愿意，一台交换机可以配置48个端口。这台交换机有两个虚拟局域网，虚拟局域网1采用1至24端口，虚拟局域网2采用25至48端口。要把这两个虚拟局域网连接起来，你基本上有三种选择。第一，使用一台路由器分别连接这两个虚拟局域网中的一个端口，并且分为VLAN中的主机配置正确的默认路由。第二种方法是你还可以简单地在每个虚拟局域网中各自建立一个虚拟路由器接口（virtual interfaces）。在思科的设备，这种虚拟路由器接口可能称作“vlan1”和“vlan2”。它们拥有自己的IP地址，而VLAN中的主机使用这些虚拟路由器接口作为自己的路由器。</P><P>　　在第三种方法使我们回到了2层概述的最终话题。如果你拥有多台需要包含同样的虚拟局域网的交换机，你可以通过端口汇聚（trunk）的方式它们都连接起来。这样，交换机A中的虚拟局域网1和交换机B中的虚拟局域网1就完全是一样的了。这是采用802.1q标准完成的。802.1q标准为将离开第一台交换机的数据包打上一个虚拟局域网的标识符。思科把这些交换机间的链路称作“主干端口（trunk ports）”，你可以拥有交换机允许的最多数量的虚拟局域网（目前大多数硬件允许4096个虚拟局域网）。因此，在虚拟局域网之间建立联系的第三种方法（也是最后一种方法）是把以trunk方式连接一台路由器，并且为每一个虚拟局域网建立一个虚拟路由器接口。虚拟局域网1上的主机（无论是在交换机A和交换机B上）都能够访问这个路由器接口（这个接口可以在另一台设备上），因为他们全部都连接在了一起，并且共享一个广播域。关于trunk与802.1q的更多信息请参见这篇文章。</P><P>　　在这里我们没有采用“这是2层协议，记住以太网数据包头”这种标准的教学模式。要成为一个真正的专家，你必须要知道这些知识。但是，要成为一个有用的操作人员，简单地知道2层是如何工作的就可以了。下一讲我们将介绍网络领域最有趣的协议生成树协议。</P><P>　　<STRONG>小结：</STRONG></P><P>　　●网桥（又名交换机）存储MAC地址表以实现单播网段功能。也就是说它们仅向需要这个数据的主机发送单播数据。</P><P>　　●虚拟局域网并不能提供可靠的安全。</P><P>　　●一台3层交换机能够通过trunk提供多个虚拟局域网，并且为这些虚拟局域网提供路由。这可以完全在同一条线路上实现。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e8%ae%b2%e5%ba%a7%e4%b9%8b%e5%9b%9b%ef%bc%9a%e7%90%86%e8%a7%a3%e6%95%b0%e6%8d%ae%e9%93%be%e8%b7%af%e5%b1%82/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMM综述</title>
		<link>http://blog.1xi.net/wangluo/cmm%e7%bb%bc%e8%bf%b0</link>
		<comments>http://blog.1xi.net/wangluo/cmm%e7%bb%bc%e8%bf%b0#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/cmm%e7%bb%bc%e8%bf%b0</guid>
		<description><![CDATA[CMM(Capability Maturity Model能力成熟度模型)的本质是软件管理工程的一个部分。它是对于软件组织在定义，实现，度量，控制和改善其软件过程的进程中各个发展阶段的描述。他通过5个不断进化的层次来评定软件生产的历史与现状。　　CMM的诞生　　信息时代，软件质量的重要性越来越为人们所认识。软件是产品、是装备、是工具，其质量使得顾客满意，是产品市场开拓、事业得以发展的关键。而软件工程领域在1992年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。　　软件管理工程引起广泛注意源于20世纪70年代中期。当时美国国防部曾立题专门研究软件项目做不好的原因，发现70%的项目是因为管理不善而引起，而并不是因为技术实力不够，进而得出一个结论，即管理是影响软件研发项目全局的因素，而技术只影响局部。到了20世纪90年代中期，软件管理工程不善的问题仍然存在，大约只有10%的项目能够在预定的费用和进度下交付。软件项目失败的主要原因有：需求定义不明确；缺乏一个好的软件开发过程；没有一个统一领导的产品研发小组；子合同管理不严格；没有经常注意改善软件过程；对软件构架很不重视；软件界面定义不善且缺乏合适的控制；软件升级暴露了硬件的缺点；关心创新而不关心费用和风险；军用标准太少且不够完善等等。在关系到软件项目成功与否的众多因素中，软件度量、工作量估计、项目规划、进展控制、需求变化和风险管理等都是与工程管理直接相关的因素。由此可见，软件管理工程的意义至关重要。　　软件管理工程和其它工程管理相比有其特殊性。首先，软件是知识产品，进度和质量都难以度量，生产效率也难以保证。其次，软件系统复杂程度也是超乎想象的。因为软件复杂和难以度量，软件管理工程的发展还很不成熟。　　软件管理工程的发展，在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代，到90年代中期，以CMM模型的成熟模型和日益为市场接受为标志，已经进入以过程成熟模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以过程为中心的时代，而软件发展第三个时代，及软件工业化生产时代，从90年代中期软件过程技术的成熟和面向对象技术、构件技术的发展为基础，已经渐露端倪，估计到2005年，可以实现真正的软件工业化生产，这个趋势应该引起软件企业界和有关部门的高度重视，及早采取措施，跟上世界软件发展的脚步。软件生产转向以改善软件过程为中心，是世界各国软件产业或迟或早都要走的道路。　　软件过程改善是当前软件管理工程的核心问题。50多年来计算事业的发展使人们认识到要高效率、高质量和低成本地开发软件，必须改善软件生产过程。软件管理工程走过了一条从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试到90年代中期以过程成熟模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以过程为中心向着软件过程技术的成熟和面向对象技术、构件技术的发展为基础的真正软件工业化生产的道路。软件生产转向以改善软件过程为中心，是世界各国软件产业或迟或早都要走的道路。软件工业已经或正在经历着&#8221;软件过程的成熟化&#8221;，并向&#8221;软件的工业化&#8221;渐进过渡。规范的软件过程是软件工业化的必要条件。　　软件过程研究的是如何将人员、技术和工具等组织起来，通过有效的管理手段，提高软件生产的效率，保证软件产品的质量。由此诞生了软件过程的三个流派：CMU-SEI的CMM/PSP/TSP；ISO 9000质量标准体系；ISO/IEC 15504（SPICE）。　　CMM/PSP/TSP即软件能力成熟度模型/ 个体软件过程/群组软件过程，是1987年美国 Carnegie Mellon 大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首的研究组发表的研究成果&#8221;承制方软件工程能力的评估方法&#8221;；SO 9000质量标准体系是在70年代由欧洲首先采用的，其后在美国和世界其他地区也迅速地发展起来。目前，欧洲联合会积极促进软件质量的制度化，提出了如下ISO9000软件标准系列：ISO9001、ISO9000-3、ISO9004-2、ISO9004-4、ISO9002；ISO/IEC 15504（SPICE）是1991年国际标准化组织采纳了一项动议，开展调查研究，按照CMU-SEI的基本思路，产生的技术报告ISO/IEC 15504&#8211;信息技术软件过程评估　　目前，学术界和工业界公认美国 Carnegie Mellon 大学软件工程研究所(CMU/SEI) 以W.S.Humphrey为首主持研究与开发的软件能力成熟度模型CMM是当前最好的软件过程，已成为业界事实上的软件过程的工业标准。]]></description>
			<content:encoded><![CDATA[<p><FONT size=2>CMM(Capability Maturity Model能力成熟度模型)的本质是软件管理工程的一个部分。它是对于软件组织在定义，实现，度量，控制和改善其软件过程的进程中各个发展阶段的描述。他通过5个不断进化的层次来评定软件生产的历史与现状。<BR><BR>　　<B><FONT color=#ac000>CMM的诞生</FONT></B><BR>　　信息时代，软件质量的重要性越来越为人们所认识。软件是产品、是装备、是工具，其质量使得顾客满意，是产品市场开拓、事业得以发展的关键。而软件工程领域在1992年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。<BR>　　软件管理工程引起广泛注意源于20世纪70年代中期。当时美国国防部曾立题专门研究软件项目做不好的原因，发现70%的项目是因为管理不善而引起，而并不是因为技术实力不够，进而得出一个结论，即管理是影响软件研发项目全局的因素，而技术只影响局部。到了20世纪90年代中期，软件管理工程不善的问题仍然存在，大约只有10%的项目能够在预定的费用和进度下交付。软件项目失败的主要原因有：需求定义不明确；缺乏一个好的软件开发过程；没有一个统一领导的产品研发小组；子合同管理不严格；没有经常注意改善软件过程；对软件构架很不重视；软件界面定义不善且缺乏合适的控制；软件升级暴露了硬件的缺点；关心创新而不关心费用和风险；军用标准太少且不够完善等等。在关系到软件项目成功与否的众多因素中，软件度量、工作量估计、项目规划、进展控制、需求变化和风险管理等都是与工程管理直接相关的因素。由此可见，软件管理工程的意义至关重要。<BR>　　软件管理工程和其它工程管理相比有其特殊性。首先，软件是知识产品，进度和质量都难以度量，生产效率也难以保证。其次，软件系统复杂程度也是超乎想象的。因为软件复杂和难以度量，软件管理工程的发展还很不成熟。<BR>　　软件管理工程的发展，在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代，到90年代中期，以CMM模型的成熟模型和日益为市场接受为标志，已经进入以过程成熟模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以过程为中心的时代，而软件发展第三个时代，及软件工业化生产时代，从90年代中期软件过程技术的成熟和面向对象技术、构件技术的发展为基础，已经渐露端倪，估计到2005年，可以实现真正的软件工业化生产，这个趋势应该引起软件企业界和有关部门的高度重视，及早采取措施，跟上世界软件发展的脚步。软件生产转向以改善软件过程为中心，是世界各国软件产业或迟或早都要走的道路。<BR>　　软件过程改善是当前软件管理工程的核心问题。50多年来计算事业的发展使人们认识到要高效率、高质量和低成本地开发软件，必须改善软件生产过程。软件管理工程走过了一条从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试到90年代中期以过程成熟模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以过程为中心向着软件过程技术的成熟和面向对象技术、构件技术的发展为基础的真正软件工业化生产的道路。软件生产转向以改善软件过程为中心，是世界各国软件产业或迟或早都要走的道路。软件工业已经或正在经历着&#8221;软件过程的成熟化&#8221;，并向&#8221;软件的工业化&#8221;渐进过渡。规范的软件过程是软件工业化的必要条件。<BR>　　软件过程研究的是如何将人员、技术和工具等组织起来，通过有效的管理手段，提高软件生产的效率，保证软件产品的质量。由此诞生了软件过程的三个流派：CMU-SEI的CMM/PSP/TSP；ISO 9000质量标准体系；ISO/IEC 15504（SPICE）。<BR>　　CMM/PSP/TSP即软件能力成熟度模型/ 个体软件过程/群组软件过程，是1987年美国 Carnegie Mellon 大学软件工程研究所(CMU/SEI)以W.S.Humphrey为首的研究组发表的研究成果&#8221;承制方软件工程能力的评估方法&#8221;；SO 9000质量标准体系是在70年代由欧洲首先采用的，其后在美国和世界其他地区也迅速地发展起来。目前，欧洲联合会积极促进软件质量的制度化，提出了如下ISO9000软件标准系列：ISO9001、ISO9000-3、ISO9004-2、ISO9004-4、ISO9002；ISO/IEC 15504（SPICE）是1991年国际标准化组织采纳了一项动议，开展调查研究，按照CMU-SEI的基本思路，产生的技术报告ISO/IEC 15504&#8211;信息技术软件过程评估<BR>　　目前，学术界和工业界公认美国 Carnegie Mellon 大学软件工程研究所(CMU/SEI) 以W.S.Humphrey为首主持研究与开发的软件能力成熟度模型CMM是当前最好的软件过程，已成为业界事实上的软件过程的工业标准。</FONT> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/cmm%e7%bb%bc%e8%bf%b0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>系统流程图简介</title>
		<link>http://blog.1xi.net/wangluo/%e7%b3%bb%e7%bb%9f%e6%b5%81%e7%a8%8b%e5%9b%be%e7%ae%80%e4%bb%8b</link>
		<comments>http://blog.1xi.net/wangluo/%e7%b3%bb%e7%bb%9f%e6%b5%81%e7%a8%8b%e5%9b%be%e7%ae%80%e4%bb%8b#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e7%b3%bb%e7%bb%9f%e6%b5%81%e7%a8%8b%e5%9b%be%e7%ae%80%e4%bb%8b</guid>
		<description><![CDATA[系统流程图又叫事务流程图，是在计算机事务处理应用进行系统分析时常用的一种描述方法（另一个是数据流图），它描述了计算机事务处理中从数据输入开始到获得输出为止，各个处理工序的逻辑过程。在高级程序员下午试卷中，每年都有一道系统流程图的试题。一、系统流程图所用的基本元素符号：输入单据磁盘文件,或其它介质文件处理（表示各种处理功能）输出单据二、基本处理工序1、变换把输入单据变换成磁盘文件，或把磁盘文件变换成输出单据，或把某一磁盘文件的内容由一个介质文件传送到另一介质文件：变换处理工序一般在在进行输入变换同时，还可进行形式性的逻辑检查，如输入单据的数据范围，录入错误等等。2、合并把多个文件合并为一个文件，如：输入文件1：2379输入文件2：14581012合并后的输出文件：1234578910123、划分是合并的逆操作，将合并工序的输入文件与输出文件对调即可：4、分类（排序）按指定的键（关键字）以升序或降序改变原文件的记录排列顺序。例如，将如下记录排列的旧文件，按关键字升序，依次进行分类，得到新文件：旧文件9371511082612514新文件1235678910121415分类也可和输入或输出操作一起进行：5、更新将多个文件作为输入根据关键项目进行对照，对文件进行内容修正、删除、增加等改写工作，一般更新的内容先要写入一个临时文件：三、用系统流程图设计管理系统应该注意的问题1、尽量缩短处理时间。2、尽量减少空闲时间。为了减少操作人员的工作量，如果具有多重处理能力，要尽量利用它。如何对发生的错误采取措施的作法进行系统化，则对处理时间和空闲时间有很大影响。3、要考虑便于完成程序的调试。工序数和系统的类型，由于存储容量和中间介质的使用如何，使用几台机器问题，也要受到影响。因此在这个阶段，可对存储容量和机器结构进行预测。四、系统流程图实例——库存处理]]></description>
			<content:encoded><![CDATA[<p><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">系统流程图又叫事务流程图，是在计算机事务处理应用进行系统分析时常用的一种描述方法（另一个是数据流图），它描述了计算机事务处理中从数据输入开始到获得输出为止，各个处理工序的逻辑过程。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">在高级程序员下午试卷中，每年都有一道系统流程图的试题。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">一、系统流程图所用的基本元素符号：</P><DIV align=center><CENTER><TABLE borderColor=#000000 height=388 cellSpacing=0 borderColorDark=#000000 cellPadding=0 width="73%" borderColorLight=#000000 border=0><TR><TD width="15%" height=386 rowSpan=4><IMG height=451 src="http://www.net130.com/Fsmanage/RoUpimages/200482516251.gif" width=119 border=0></TD><TD width="85%" height=106><P style="TEXT-INDENT: 36px">输入单据</P></TD></TR><TR><TD width="85%" height=65><P style="TEXT-INDENT: 36px">磁盘文件,或其它介质文件</P></TD></TR><TR><TD width="85%" height=69><P style="TEXT-INDENT: 36px">处理（表示各种处理功能）</P></TD></TR><TR><TD width="85%" height=140><P style="TEXT-INDENT: 36px">输出单据</P></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">二、基本处理工序</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">1、变换</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">把输入单据变换成磁盘文件，或把磁盘文件变换成输出单据，或把某一磁盘文件的内容由一个介质文件传送到另一介质文件：</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="63%" border=0><TR><TD align=middle width="100%"><IMG height=257 src="http://www.net130.com/Fsmanage/RoUpimages/200482516252.gif" width=413 border=0></TD></TR><TR><TD width="100%"><P align=center>变换处理工序</P></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-BOTTOM: 0px" align=left>一般在在进行输入变换同时，还可进行形式性的逻辑检查，如输入单据的数据范围，录入错误等等。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px" align=left>2、合并</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px" align=left>把多个文件合并为一个文件，如：</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="91%" border=0><TR><TD width="23%">输入文件1：</TD><TD width="77%"><TABLE cellSpacing=0 borderColorDark=#000000 cellPadding=0 width="26%" borderColorLight=#000000 border=1><TR><TD align=middle width="25%">2</TD><TD align=middle width="25%">3</TD><TD align=middle width="25%">7</TD><TD align=middle width="25%">9</TD></TR></TABLE></TD></TR><TR><TD width="23%">输入文件2：</TD><TD width="77%"><TABLE cellSpacing=0 borderColorDark=#000000 cellPadding=0 width="40%" borderColorLight=#000000 border=1><TR><TD align=middle width="16%">1</TD><TD align=middle width="16%">4</TD><TD align=middle width="17%">5</TD><TD align=middle width="17%">8</TD><TD align=middle width="17%">10</TD><TD align=middle width="17%">12</TD></TR></TABLE></TD></TR><TR><TD width="23%">合并后的输出文件：</TD><TD width="77%"><TABLE cellSpacing=0 borderColorDark=#000000 cellPadding=0 width="66%" borderColorLight=#000000 border=1><TR><TD align=middle width="10%">1</TD><TD align=middle width="10%">2</TD><TD align=middle width="10%">3</TD><TD align=middle width="10%">4</TD><TD align=middle width="10%">5</TD><TD align=middle width="10%">7</TD><TD align=middle width="10%">8</TD><TD align=middle width="10%">9</TD><TD align=middle width="10%">10</TD><TD align=middle width="10%">12</TD></TR></TABLE></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px" align=left>3、划分</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px" align=left>是合并的逆操作，将合并工序的输入文件与输出文件对调即可：</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="54%" border=0><TR><TD width="100%"><IMG height=233 src="http://www.net130.com/Fsmanage/RoUpimages/200482516252.gif" width=337 border=0></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-TOP: 9px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">4、分类（排序）</P><P style="MARGIN-TOP: 4px; MARGIN-BOTTOM: 6px; TEXT-INDENT: 36px">按指定的键（关键字）以升序或降序改变原文件的记录排列顺序。</P><P style="MARGIN-TOP: 4px; MARGIN-BOTTOM: 6px; TEXT-INDENT: 36px">例如，将如下记录排列的旧文件，按关键字升序，依次进行分类，得到新文件：</P><DIV align=center><CENTER><TABLE borderColor=#c0c0c0 cellSpacing=0 borderColorDark=#c0c0c0 cellPadding=0 width="44%" borderColorLight=#c0c0c0 border=1><TR><TD align=middle width="100%" colSpan=12>旧文件</TD></TR><TR><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>9</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>3</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>7</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>15</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>1</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>10</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>8</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>2</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>6</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>12</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>5</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>14</TD></TR><TR><TD align=middle width="100%" colSpan=12>新文件</TD></TR><TR><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>1</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>2</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>3</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>5</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>6</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>7</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>8</TD><TD borderColorLight=#000000 align=middle width="8%" borderColorDark=#000000>9</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>10</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>12</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>14</TD><TD borderColorLight=#000000 align=middle width="9%" borderColorDark=#000000>15</TD></TR></TABLE></CENTER></DIV><P style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">分类也可和输入或输出操作一起进行：</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="54%" border=0><TR><TD width="100%"><IMG height=223 src="http://www.net130.com/Fsmanage/RoUpimages/200482516252.gif" width=385 border=0></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">5、更新</P><P style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; TEXT-INDENT: 36px">将多个文件作为输入根据关键项目进行对照，对文件进行内容修正、删除、增加等改写工作，一般更新的内容先要写入一个临时文件：</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="51%" border=0><TR><TD width="100%"><IMG height=216 src="http://www.net130.com/Fsmanage/RoUpimages/200482516252.gif" width=387 border=0></TD></TR></TABLE></CENTER></DIV><P style="MARGIN-BOTTOM: 0px">三、用系统流程图设计管理系统应该注意的问题</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">1、尽量缩短处理时间。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">2、尽量减少空闲时间。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">为了减少操作人员的工作量，如果具有多重处理能力，要尽量利用它。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">如何对发生的错误采取措施的作法进行系统化，则对处理时间和空闲时间有很大影响。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">3、要考虑便于完成程序的调试。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">工序数和系统的类型，由于存储容量和中间介质的使用如何，使用几台机器问题，也要受到影响。因此在这个阶段，可对存储容量和机器结构进行预测。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">四、系统流程图实例——库存处理</P><DIV align=center><CENTER><TABLE cellSpacing=1 width="49%" border=0><TR><TD width="100%"><IMG height=672 src="http://www.net130.com/Fsmanage/RoUpimages/200482516252.gif" width=241 border=0></TD></TR></TABLE></CENTER></DIV></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e7%b3%bb%e7%bb%9f%e6%b5%81%e7%a8%8b%e5%9b%be%e7%ae%80%e4%bb%8b/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>轻松应对高程软件设计题</title>
		<link>http://blog.1xi.net/wangluo/%e8%bd%bb%e6%9d%be%e5%ba%94%e5%af%b9%e9%ab%98%e7%a8%8b%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%e9%a2%98</link>
		<comments>http://blog.1xi.net/wangluo/%e8%bd%bb%e6%9d%be%e5%ba%94%e5%af%b9%e9%ab%98%e7%a8%8b%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%e9%a2%98#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e8%bd%bb%e6%9d%be%e5%ba%94%e5%af%b9%e9%ab%98%e7%a8%8b%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%e9%a2%98</guid>
		<description><![CDATA[根据软件水平与资格考试大纲的要求，高级程序员不仅要具备高水平的程序编制能力，而且要熟练掌握软件设计的方法和技术，具备一定的软件设计能力。软件设计题是下午试题的难点，本文针对软件设计题，给出了解答的一般方法，并且给出了解答实例，最后对历年试题进行了分析，希望能够给广大考生提供帮助。&#160;解题的一般方法　　一、软件设计题要点　　综观1990年到2002年的高程下午设计题，主要包括以下考点：　　1. 完善处理流程，或指出处理内容，或指出处理结果。　　2. 指出流程图中错误，或为避免错误应在某处添加处理项目。　　3. 为达到某目的，需要改动哪些处理，或改变处理方法会引起什么后果。　　4. 指出错误清单内容。　　5. 文件的记录应包含哪些内容。　　6. 完成处理需要什么样的文件，或文件有什么特征，或引入某文件有什么好处。　　7. 文件怎样分类，或指出关键字。　　8. 某处理的频度。　　9. 输入数据的格式。　　10. 题意中的分类有何好处。　　11. 为实现某目的适当修改文件的记录内容。　　12. 指出图中数据流名，或指出哪些位置数据可增加或删去。考点最集中的部分是关于文件记录的内容，其次是文件的分类排序，再次是当目的改变应该改动哪些。　　二、答题注意事项　　事务处理流程图一般由若干处理与若干数据组成，在评估流程图并回答试题的问题时，应该注意下面一些问题。　　从“处理”的角度来说，必须注意：　　1. 每个事务处理均有一个特定目标，这一目标往往都是文字说明的。与此对应的处理应能覆盖所设定的目标。对于说明处理要求，都应从问题目标进行考虑。　　2. 除覆盖问题目标的处理外，还有两类处理应予考虑：一是为了保证处理的正确性，设计一些处理框，以检查输入数据的数据项及数据的值域；另一种是检查数据会合时数据的一致性。二是为了处理的效率，如速度、次数、减少处理访问等而引进了一些处理。　　3. 在一个流程图内，在一条流程上的各个处理不能有功能上的重复。如有重复，不是有错，就是流程还可优化。　　4. 每个处理都是由“处理的依据”到“使用数据”，以及从“处理结果”到“产生数据”。“使用数据”或者“产生数据”与处理相互匹配是十分重要的。&#160;&#160;&#160;&#160; 从“数据”的角度来说，必须注意：　　1. 注意流程图最初的输入数据与最终输出数据，考虑从输入到输出之间数据演变的情况。根据数据的演变与流程，关于从输入到输出应有哪些数据就比较清楚了，其作用也可以从演变方面了解。　　2. 考虑数据流程中，哪些数据应作为文件形式出现，哪些是中间使用的临时数据。在数据演变中，一些数据经多个“处理”加工后得到结果，每加工一次就产生一个新数据，对这些数据分析，就能得出各数据的存储要求。　　3. 对数据按问题要求设计数据结构。输入（输出）数据的结构与问题有关，而中间数据的结构除与输入（输出）数据有关外，还与处理有关。　　4. 为减少数据冗余，要保证数据一致性，数据文件设计中应考虑关系，亦即各种文件的记录之间的联系。我们对高级程序员软件设计题的解题方法做了分析，现在我们来分析一道例题。 　　★解答实例　　2000年试题3：阅读以下说明和流程图，回答问题1和问题2。【说明】　　某供销系统接受顾客的订货单。当库存中某配件的数量小于订购量或库存量低于一定数量时，向供应商发出采购单；当某配件的库存量大于或等于订购量时，或者收到供应商的送货单并更新了库存后，向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。该供销系统的分层数据流图中部分数据流和文件的组成如下：文件　　配件库存＝配件号＋配件名＋规格＋数量＋允许的最低率库存量数据流　　订货单＝配件号＋配件名＋规格＋数量＋顾客名＋地址　　提货单＝订货单＋金额　　采货单＝配件号＋配件名＋规格＋数量＋供应商名＋地址　　送货单＝配件号＋配件名＋规格＋数量＋金额　　假定顶层图是正确的，“供应商”文件已由其他系统生成。[问题1] &#160;&#160;&#160; 指出哪张图中的哪些文件可不必画出。[问题2]&#160;&#160;&#160; 指出在哪些图中遗漏了哪些数据流。回答时用如下形式之一。&#160;&#160;&#160; (1) X X 图中遗漏了 X X 加工 (或文件) 流向 X X 加工 (或文件) 的 x x 数据流；&#160;&#160;&#160; (2) X X 图中 X X 加工遗漏了 X X 输入 (或输出) 数据流。[流程图]顶层图 [...]]]></description>
			<content:encoded><![CDATA[<p><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 36px">根据软件水平与资格考试大纲的要求，高级程序员不仅要具备高水平的程序编制能力，而且要熟练掌握软件设计的方法和技术，具备一定的软件设计能力。软件设计题是下午试题的难点，本文针对软件设计题，给出了解答的一般方法，并且给出了解答实例，最后对历年试题进行了分析，希望能够给广大考生提供帮助。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">&nbsp;解题的一般方法</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　一、软件设计题要点</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　综观1990年到2002年的高程下午设计题，主要包括以下考点：</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　1. 完善处理流程，或指出处理内容，或指出处理结果。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　2. 指出流程图中错误，或为避免错误应在某处添加处理项目。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　3. 为达到某目的，需要改动哪些处理，或改变处理方法会引起什么后果。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　4. 指出错误清单内容。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　5. 文件的记录应包含哪些内容。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　6. 完成处理需要什么样的文件，或文件有什么特征，或引入某文件有什么好处。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　7. 文件怎样分类，或指出关键字。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　8. 某处理的频度。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　9. 输入数据的格式。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　10. 题意中的分类有何好处。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　11. 为实现某目的适当修改文件的记录内容。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　12. 指出图中数据流名，或指出哪些位置数据可增加或删去。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">考点最集中的部分是关于文件记录的内容，其次是文件的分类排序，再次是当目的改变应该改动哪些。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　二、答题注意事项</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　事务处理流程图一般由若干处理与若干数据组成，在评估流程图并回答试题的问题时，应该注意下面一些问题。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　从“处理”的角度来说，必须注意：</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　1. 每个事务处理均有一个特定目标，这一目标往往都是文字说明的。与此对应的处理应能覆盖所设定的目标。对于说明处理要求，都应从问题目标进行考虑。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　2. 除覆盖问题目标的处理外，还有两类处理应予考虑：一是为了保证处理的正确性，设计一些处理框，以检查输入数据的数据项及数据的值域；另一种是检查数据会合时数据的一致性。二是为了处理的效率，如速度、次数、减少处理访问等而引进了一些处理。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　3. 在一个流程图内，在一条流程上的各个处理不能有功能上的重复。如有重复，不是有错，就是流程还可优化。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　4. 每个处理都是由“处理的依据”到“使用数据”，以及从“处理结果”到“产生数据”。“使用数据”或者“产生数据”与处理相互匹配是十分重要的。&nbsp;</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">&nbsp;&nbsp;&nbsp; 从“数据”的角度来说，必须注意：</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　1. 注意流程图最初的输入数据与最终输出数据，考虑从输入到输出之间数据演变的情况。根据数据的演变与流程，关于从输入到输出应有哪些数据就比较清楚了，其作用也可以从演变方面了解。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　2. 考虑数据流程中，哪些数据应作为文件形式出现，哪些是中间使用的临时数据。在数据演变中，一些数据经多个“处理”加工后得到结果，每加工一次就产生一个新数据，对这些数据分析，就能得出各数据的存储要求。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　3. 对数据按问题要求设计数据结构。输入（输出）数据的结构与问题有关，而中间数据的结构除与输入（输出）数据有关外，还与处理有关。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　4. 为减少数据冗余，要保证数据一致性，数据文件设计中应考虑关系，亦即各种文件的记录之间的联系。<BR>我们对高级程序员软件设计题的解题方法做了分析，现在我们来分析一道例题。 </P><P>　　★解答实例</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　2000年试题3：阅读以下说明和流程图，回答问题1和问题2。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">【说明】</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　某供销系统接受顾客的订货单。当库存中某配件的数量小于订购量或库存量低于一定数量时，向供应商发出采购单；当某配件的库存量大于或等于订购量时，或者收到供应商的送货单并更新了库存后，向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。该供销系统的分层数据流图中部分数据流和文件的组成如下：</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">文件</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　配件库存＝配件号＋配件名＋规格＋数量＋允许的最低率库存量</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">数据流</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　订货单＝配件号＋配件名＋规格＋数量＋顾客名＋地址</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　提货单＝订货单＋金额</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　采货单＝配件号＋配件名＋规格＋数量＋供应商名＋地址</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　送货单＝配件号＋配件名＋规格＋数量＋金额</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">　　假定顶层图是正确的，“供应商”文件已由其他系统生成。</P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px">[问题1] </P><P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"><FONT size=3>&nbsp;</FONT>&nbsp;&nbsp; 指出哪张图中的哪些文件可不必画出。<BR><FONT size=3>[问题2]<BR>&nbsp;&nbsp;&nbsp; 指出在哪些图中遗漏了哪些数据流。回答时用如下形式之一。<BR>&nbsp;&nbsp;&nbsp; (1) X X 图中遗漏了 X X 加工 (或文件) 流向 X X 加工 (或文件) 的 x x 数据流；<BR>&nbsp;&nbsp;&nbsp; (2) X X 图中 X X 加工遗漏了 X X 输入 (或输出) 数据流。<BR>[流程图]<BR></FONT>顶层图 </P><P align=center><IMG style="WIDTH: 468px; HEIGHT: 250px" height=344 src="http://www.net130.com/Fsmanage/RoUpimages/2004825162355.gif" width=700 border=0></P><P align=center><IMG style="WIDTH: 469px; HEIGHT: 272px" height=344 src="http://www.net130.com/Fsmanage/RoUpimages/2004825162357.gif" width=661 border=0></P><P>　　<IMG style="WIDTH: 485px; HEIGHT: 220px" height=356 src="http://www.net130.com/Fsmanage/RoUpimages/2004825162357.gif" width=675 border=0></P><P align=center><IMG style="WIDTH: 486px; HEIGHT: 365px" height=379 src="http://www.net130.com/Fsmanage/RoUpimages/2004825162357.gif" width=538 border=0></P><P>&nbsp;&nbsp;&nbsp; 在顶层图中，供销系统的3个输入数据流（订货单、送货单与销售及库存情况）和5个输出数据流（不合法的订货单、不合法的送货单、提货单、采购单与销售及库存情况表）在0层图中都得到反映。考查0层图中所有的输入数据流和输出数据流，是否有遗漏的加工呢？在顶层图中总经理的查询是单独的加工，但在0层图中却给包括到加工1中去了，成为加工1.3，其输入或输出数据流也都包括在该加工中。考查加工1子图，加工1.3包含在加工1中是科学的，因为该加工需要来自加工1数据支持，且事务简单，包含在加工1中可以大大减小系统分析和设计的复杂程度。因此不能说0层图遗漏了加工。至于文件，在0层图中凡是需要文件的地方都是从文件输入的，未发生遗漏现象。</P><P>　　仔细研究0层图，大体上确定加工1有3个输入数据流（订货单、到货通知和查询销售及库存情况），加工1子图中只有订货单与查询销售及库存情况两个数据流，显然遗漏了输入数据到货通知，该数据流应该从哪个子加工输入呢？看试题中的说明“收到供应商的送货单并更新了库存后，向顾客发出了提货单”。据此至少可以判定输入数据流到货通知是子加工1.4更新库存的前提条件，没有到货通知，就无法更新库存。是直接输入加工1.4吗？再看子加工1.4与其他子加工的关系。子加工1.5输出数据流的去向是子加工1.4。而子加工1.5需要到货通知的支持，但从子加工1.4到子加工1.5却没有数据流。综合以上分析，应该在子加工1.5处输入数据流到货通知。</P><P align=left>&nbsp;&nbsp;&nbsp; 首先看配件库存文件。在加工1子图（图3）中，配件库存文件经过加工1.4更新库存而修改，然后还要为加工1.1和加工1.2提供数据支持，在加工1.1中，通过检查订货单中订购的配件在配件库存中是否有记录，来确定该配件是否属于经销范围，然后以此来确定订货单是否合法。其次，还要在加工1.2中比较合法订货单的数量与库存数量，以此确定是否需要发出采购请求。再次，在发出提货单后，如果库存量低于允许的最低库存量，也要发出采购单。可以看出，在该加工图中，未发现对配件库存文件的不适当的使用。</P><P>　　在加工2子图（图4）中，在加工2.4核对送货单后要更新库存文件然后加工2.3计算增量提供数据支持，计算出需要采购的配件的数量。应该说这里对配件库存文件的使用是正确的。因此我们可以确定配件库存文件在加工1和加工2中都有应用，画在0层图中是合适的。</P><P>　　缺货订单文件在试题说明中没有提到，具体的应用需要我们自己分析。0层图中显示该文件被加工1和加工2使用。现在的任务就是确定两个加工中对该文件的使用是正确的。在加工1中缺货订单的数据来自加工1.2和加工1.4，在加工1.2中，接受合法的订货单后，如果订货单上数量大于配件库存文件的数量，将产生缺货订单文件。在加工1.4中，在有货订单送达后，需要交出提货单，然后更新库存。如果库存量低于允许的最低库存量，应该将缺货信息反映到缺货订单中。在加工2中，缺货订单为加工2.3提供部分数据支持，在计算配件增量以明确需要增加的配件的清单时，需要参照缺货订单。结合以上对使用缺货订单文件的分析，可以认为，因此将该文件画在0层图中是有必要的。</P><P>&nbsp;&nbsp;&nbsp; 我们分析了配件库存文件和缺货订单文件，再来看采购清单。</P><P>　　0层图显示该文件只应用于加工2。采购清单如果只应用在加工1中，最有可能的地方是加工1.2及其后的采购请求数据流，但在这里采购清单是有必要的吗？从加工2中可以看出，采购清单是按供应商对采购单进行汇总来产生的，对采购单进行汇总，显然已经属于加工2的工作，不应在加工1中予以反映。由此可以断定在加工1中不应该有采购单文件。所以在0层图中画采购清单是不合适的。</P><P>　　以上考查了0层图、加工1子图和加工2子图中缺货订单、配件库存及采购清单的使用，下面研究加工1中的销售历史文件。如果没有该文件支持，加工1.3是无法制作销售及库存情况表的；而且该文件由加工1.4更新库存产生，其输入数据流和输出数据流均在加工1中，在加工1中使用该文件是合适的。</P><P>　　问题2要求指出哪些图中遗漏了哪些元素。一般来说，这类题目的解答首先要考虑各层次图的数据平衡，其次要考虑加工的输入数据流和输出数据流要平衡，即保证加工的输出数据流都有其对应的输入数据流。所谓数据平衡，就是在多层次数据流程图中，父图和子图之间的数据流必须保持一致，比如说在父图中某加工有2个输入数据流和一个输出数据流，那么在该加工的子图中的输入（输出）数据流必须在数目上和内容上与父图保持一致。</P><P align=left>&nbsp;&nbsp;&nbsp; 考查0层图，加工1有不合格订货单、销售及库存情况表、提货单与采购请求4个输出数据流。但在加工1子图中，却没有输出数据流提货单，这显然是不符合数据平衡原则的。但该数据流应从何处输出呢？根据试题说明，在更新库存后应向顾客发出提货单。显然这里合适的位置是子加工1.4。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e8%bd%bb%e6%9d%be%e5%ba%94%e5%af%b9%e9%ab%98%e7%a8%8b%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%e9%a2%98/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>八皇后问题的高效解法-递归版</title>
		<link>http://blog.1xi.net/wangluo/%e5%85%ab%e7%9a%87%e5%90%8e%e9%97%ae%e9%a2%98%e7%9a%84%e9%ab%98%e6%95%88%e8%a7%a3%e6%b3%95-%e9%80%92%e5%bd%92%e7%89%88</link>
		<comments>http://blog.1xi.net/wangluo/%e5%85%ab%e7%9a%87%e5%90%8e%e9%97%ae%e9%a2%98%e7%9a%84%e9%ab%98%e6%95%88%e8%a7%a3%e6%b3%95-%e9%80%92%e5%bd%92%e7%89%88#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e5%85%ab%e7%9a%87%e5%90%8e%e9%97%ae%e9%a2%98%e7%9a%84%e9%ab%98%e6%95%88%e8%a7%a3%e6%b3%95-%e9%80%92%e5%bd%92%e7%89%88</guid>
		<description><![CDATA[// Yifi&#160; 2003&#160; have fun!&#160; : )//8 Queen 递归算法//如果有一个Q 为 chess[i]=j;//则不安全的地方是 k行&#160; j位置,j+k-i位置,j-k+i位置class Queen8{&#160; static final int QueenMax = 8;&#160; static int oktimes = 0;&#160; static int chess[] = new int[QueenMax];//每一个Queen的放置位置&#160; public static void main(String args[]){&#160;&#160;&#160; for (int i=0;i&#60;QueenMax;i++)chess[i]=-1;&#160;&#160;&#160;&#160; placequeen(0);&#160;&#160;&#160; System.out.println(&#8220;\n\n\n八皇后共有&#8221;+oktimes+&#8221;个解法&#160;made by yifi 2003&#8243;);&#160; }&#160; public static void placequeen(int num){ //num 为现在要放置的行数&#160;&#160;&#160; int i=0;&#160;&#160;&#160; boolean [...]]]></description>
			<content:encoded><![CDATA[<p><P><FONT face=新宋体 size=4>// Yifi&nbsp; 2003&nbsp; have fun!&nbsp; : )</FONT></P><P><FONT face=新宋体 size=4>//8 Queen 递归算法<BR>//如果有一个Q 为 chess[i]=j;<BR>//则不安全的地方是 k行&nbsp; j位置,j+k-i位置,j-k+i位置</FONT></P><P><FONT face=新宋体 size=4>class Queen8{</FONT></P><FONT face=新宋体 size=4><P>&nbsp; static final int QueenMax = 8;<BR>&nbsp; static int oktimes = 0;<BR>&nbsp; static int chess[] = new int[QueenMax];//每一个Queen的放置位置</P><P><BR>&nbsp; public static void main(String args[]){<BR>&nbsp;&nbsp;&nbsp; for (int i=0;i&lt;QueenMax;i++)chess[i]=-1;&nbsp;<BR>&nbsp;&nbsp;&nbsp; placequeen(0);<BR>&nbsp;&nbsp;&nbsp; System.out.println(&#8220;\n\n\n八皇后共有&#8221;+oktimes+&#8221;个解法&nbsp;made by yifi 2003&#8243;);<BR>&nbsp; }</P><P><BR>&nbsp; public static void placequeen(int num){ //num 为现在要放置的行数<BR>&nbsp;&nbsp;&nbsp; int i=0;<BR>&nbsp;&nbsp;&nbsp; boolean qsave[] = new boolean[QueenMax];<BR>&nbsp;&nbsp;&nbsp; for(;i&lt;QueenMax;i++) qsave[i]=true;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; //下面先把安全位数组完成<BR>&nbsp;&nbsp;&nbsp; i=0;//i 是现在要检查的数组值<BR>&nbsp;&nbsp;&nbsp; while (i&lt;num){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qsave[chess[i]]=false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k=num-i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( (chess[i]+k &gt;= 0) &amp;&amp; (chess[i]+k &lt; QueenMax) ) qsave[chess[i]+k]=false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( (chess[i]-k &gt;= 0) &amp;&amp; (chess[i]-k &lt; QueenMax) ) qsave[chess[i]-k]=false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; //下面历遍安全位<BR>&nbsp;&nbsp;&nbsp; for(i=0;i&lt;QueenMax;i++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (qsave[i]==false)continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (num&lt;QueenMax-1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chess[num]=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; placequeen(num+1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{ //num is last one<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chess[num]=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oktimes++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;这是第&#8221;+oktimes+&#8221;个解法 如下:&#8221;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;第n行:&nbsp; 1 2 3 4 5 6 7 8&#8243;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=0;i&lt;QueenMax;i++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;String row=&#8221;第&#8221;+(i+1)+&#8221;行:&nbsp; &#8220;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if (chess[i]==0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;else <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=0;j&lt;chess[i];j++) row+=&#8221;&#8211;&#8221;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row+=&#8221;++&#8221;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j = chess[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(j&lt;QueenMax-1){row+=&#8221;&#8211;&#8221;;j++;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;System.out.println(row);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; //历遍完成就停止<BR>&nbsp; }</FONT></P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e5%85%ab%e7%9a%87%e5%90%8e%e9%97%ae%e9%a2%98%e7%9a%84%e9%ab%98%e6%95%88%e8%a7%a3%e6%b3%95-%e9%80%92%e5%bd%92%e7%89%88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>异 常 处 理</title>
		<link>http://blog.1xi.net/wangluo/%e5%bc%82-%e5%b8%b8-%e5%a4%84-%e7%90%86</link>
		<comments>http://blog.1xi.net/wangluo/%e5%bc%82-%e5%b8%b8-%e5%a4%84-%e7%90%86#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e5%bc%82-%e5%b8%b8-%e5%a4%84-%e7%90%86</guid>
		<description><![CDATA[简介大型应用软件往往是分层构建的。在最底层你会发现库函数，API函数，和私有的底层函数。然而在最高层则是用户接口组件，比如一个电子制表软件让用户填写数据表单。下面来看一种普通的航空订票系统：它的最高端是由一些GUI组件所组成，用来在用户的屏幕上显示内容。这些高端组件与那些封装了数据库API的数据存取对象相互作用。再往底层一些，那些数据库API与数据库引擎相交互，然而数据库引擎自己又会调用系统服务来处理底层的硬件资源，比如物理内存，文件系统和安全模型。一般情况下，及其严格的运行期错误会在这些底层代码中被检测出来，但是它们不能&#8212;&#8211;或者说不应该&#8212;-试图自己处理这些错误。解决这些严格的运行期错误的责任应该由高端组件来承担。为了解决一个错误，高端组件必须得到错误发生的通知。本质上，错误处理包括错误检测和通知高端组件。这些组件依次处理错误并且试图从错误中恢复。传统的错误处理方法在早些时期，C++本身并没有处理运行期错误的能力。取而代之的是那些传统的C方法。这些方法可以被归为三类设计策略：返回一个状态码来表明成功或失败把错误码赋值给一个全局标记并且让其他的函数来检测终止整个程序上述的任何一个方法在面向对象环境下都有明显的缺点和限制。其中的一些根本就不可接受，尤其是在大型应用程序中。接下来的部分将会仔细检查一下这些方法，目的是发现他们与生俱来的限制和危险性。返回一个错误码在某种程度上这个方法是有用的，比如一个小型程序有着一致而且有限的错误码存在，并且严格的报告错误和检查一个函数返回值的策略被应用。然而，这种方法也有着显著的局限性；例如，错误类型和它们的列举值必须标准化。因为一个库的实现者可能选择返回值0来代表一个错误，然而另一个实现者却选择0来代表成功并且用那些非0值代表出现错误。通常，那些返回码会在一个公共头文件中以符号常量的形式存在，从而在整个软件的开发过程中或者在一个开发团队里达成一致。但是，这些码并不是标准的。不用说，在结合那些不兼容的软件库的时候，如何处理非标准的错误码将会是一件极其头疼的事。另外一个缺点是对于每一个返回码都必须查阅和解释&#8212;&#8212;一个乏味并且昂贵的操作。这个策略的实现需要调用者在每一次调用的时候对返回值进行检查，如果没有这样做将会导致运行期错误。当一个错误码被检测，就会终止正常的执行流程并且把错误码传递给调用者。那些附加的包裹每一个函数调用的代码会很轻易的使程序的大小翻倍并且引起软件维护和程序可读性的降低。更糟的是，有时要想返回一个error value是不可能的。例如，构造函数没有返回值，所以就不能应用这种方法在对象构造失败的情况下报告错误。求助于全局标记一个可以选择的用来报告运行期错误的途径是使用全局标记，它表明了最后的操作是否成功。不像返回码策略，这个方法是标准化的。C 的&#60;errno.h&#62;头文件中定义了一种机制用来检查和给一个全局整型标记errno赋值。这种策略固有的缺陷也是不能被忽视的。在一个多线程环境中，被一个线程赋予了一个错误码的errno有可能不经意的被另一个线程所改写，而调用者还未对errno进行检查。另外，对错误码而不是一个更为可读的信息的使用是很不利的，因为那些错误码可能会在不同的环境中不兼容。最终，这种方法需要严格的良好的编程样式，也就是不断的对errno的当前值进行检查。全局标记策略和函数返回值策略是相似的：二者都提供一种机制来报告错误，但是二者却都不能保证错误被处理。例如，一个函数没有成功打开一个文件可以通过给errno赋予一个合适的值来表明错误的发生。然而，它不能阻止另一个函数试图写入和关闭那个文件。更进一步，如果errno表明一个错误并且程序员检测到而且按照预期处理了它，那么errno还应该被显式的复位。如果一个程序员忘记了做这件事，那么将会引起其他函数误以为错误还没有被处理，从而去校正那个问题，引起不可预知的结果。终止程序最为残酷的处理运行期错误的方法是简单的终止程序。这种解决方案去除了上面两种方法的一些缺点；例如，没有必要反复的检查每个函数返回值的状态，而且程序员也不必赋值给一个全局标记，反复的测试和清除它的值。在标准C的函数库中有两个函数用来终止一个程序：exit()和abort()。exit()被调用能够表明程序被成功终止，或者它可以在遇到运行期错误的时候被调用。在把控制权交还给运行环境之前，exit()首先会清空流和关闭打开的文件。abort()却不一样，它表示程序被意外终止，不会清空流和关闭打开的文件。关键性的程序不应该在任何运行期错误存在的情况下突然终止。如果一个生命支持系统突然停止工作仅仅是因为它的控制器检测到0做除数，那么将是一种灾难。同样，一个控制由人驾驶的航天飞机自动运行的计算机系统也不应该因为暂时的和地面控制系统失去联系就停止工作。类似的，电话公司的账目系统或者银行系统都不应该在运行期错误出现的时候就中止。健壮的真实世界的应用程序应该做的更好。程序终止甚至对于应用程序都是有问题的。一个检测到错误的函数通常都没有必要的信息来衡量错误的严重性。例如一个内存分配函数并不能说出内存分配失败是由于用户正在使用调试器，网页浏览器，电子制表软件，文字处理软件，还是由于系统因为硬件错误变得不稳定。在第一种情况下，系统可以简单的显示一条信息来告诉用户关闭不必要的应用程序。第二种情况下，就需要一种更为残酷的措施了。然而，在终止程序的策略下，那个内存分配函数就会简单的终止程序，而不考虑错误的严重性。这种方法在一些关键性应用程序中是无法应用的。好的系统设计应该保证运行期错误被检测和报告，但是它也应该确保最小限度的容错水平。终止程序在极限环境下或者在调试阶段是可以被接受的。然而，abort()和exit()却不应该在面向对象环境中使用，甚至即使在调试阶段，因为他们并没有意识到C++对象模型的存在。exit()和abort()不销毁对象对象可以持有从构造函数或者某个成员函数中获得的资源：从free store中分配的内存，文件句柄，通信端口，I/O设备等等。这些资源必须在适当时候被释放。通常，资源都是由析构函数来释放。这种设计方法被称为resource initialization is acquisition。在栈上建立的局部对象会自动销毁。然而abort() 和exit()并不调用这些局部对象的析构函数。因此，程序的意外终止将会引起无法挽回的损害：数据库被破坏，文件可能丢失，并且一些有价值的数据可能丢失。基于这个原因，请不要在面向对象环境中使用abort()和exit()。进入异常处理正如你所见，传统C的错误处理方法并不适合C++，C++的一个设计目标就是让用C++进行大规模软件开发比C更好更安全。C++的设计者们已经意识到缺乏合适的错误处理机制使得实现这一目标相当的困难。他们试图寻找一种完全摆脱C的错误处理缺陷的解决方案。其中的一种想法就是建立在当异常被触发的时候程序自动把控制权传递给系统。机制必须简单，并且它能够使程序员从不断的检查一个全局标记或者返回值的苦差事中解脱出来。另外，它还必须保证异常处理程序能够自动获得异常信息。最终它还要确保当一个异常没有在本地处理的时候，本地对象能够被适当的销毁，并且把它所持有的资源释放。 1989年，在多年的研究和多方建议下，异常处理进入C++。C++并不是第一个对结构化运行期错误处理进行支持的语言。早在20世纪60年代，PL/1就提供了一种内建的异常处理机制；Ada也在20世纪80年代提供了自己的异常处理，另外还有几种语言也做到了这一点。但是这些异常处理模型没有一个适合C++对象模型和程序结构。因此，被提议的C++异常处理是独一无二的，并且它已经作为了一种模型出现在一些新产生的语言之中。异常处理机制的实现被证明是一种挑战。第一个C++编译器，cfront，在UNIX环境下运行。和许多UNIX编译器一样，它首先是作为一个翻译器把C++代码转换成C，接着再编译C代码。Cfront 4.0计划引入异常处理，然而，异常处理机制的实现是如此的复杂，以至于cfront 4.0的开发团队在用了一年时间设计它之后完全的放弃了这个项目。Cfront 4.0再也没有出台。然而，异常处理却成为了标准C++的有机组成部分。后来出现的一些编译器都支持了它。在接下来的部分里将会解释为什么在cfront以及任何编译器下实现异常处理是如此的困难。 实现异常处理所面临的挑战实现异常处理所遇到的困难主要来自于以下几个因素：第一，实现必须保证对于某一异常的合适的handler被找到。第二，异常对象必须是多态的；这样，当实现无法通过派生类对象定位handler的时候可以考虑基类的handler。这种需要表明必须引入运行期类型检测。然而那时C++还没有任何运行期类型检测的能力。因此这种能力必须首先被实现。作为一个附加的复杂性，实现必须能够调用所有局部对象的析构函数。这个过程被称为stack unwinding 。因为早期的C++编译器首先要把C++源文件转换为纯C，然后再把C代码编译成机器码。异常处理的实现者们不得不用C来实现运行期类型鉴别和stack unwinding。幸运的是，这些障碍已经被克服。应用异常处理异常处理是一种灵活并且精巧的工具。它克服了C的传统错误处理方法的缺点并且能够被用来解决一系列运行期错误。但是，异常处理也像其他语言特性一样，很容易被误用。为了能够有效的使用这一特性，理解运行期机制是如何工作的以及相关的性能花费是非常重要的。接下来的部分里将会进入异常处理的内部并且论证如何使用这一工具来建立安全的应用系统。异常处理要素异常处理是一种把控制权从异常发生的地点转移到一个匹配的handler的机制。异常是内建数据类型变量或者是对象。异常处理机制包括四个部分：a try block，一个或多个和try block相关的handler，throw表达式，以及异常自己。Try block包含可能抛出异常的代码。例如：try {int * p = new int[1000000]; //may throw std::bad_alloc}一个try block后面将跟有一个或多个catch语句或者说是handlers， 每一个handler 处理不同类型的异常。例如：try{int * p = new int[1000000]; //may throw std::bad_alloc//&#8230;}catch(std::bad_alloc&#38; ) {}catch (std::bad_cast&#38;){}handler仅仅被在try block中的throw表达式以及函数所调用。throw表达式包括一个关键字throw以及assignment expression。例如：try{throw 5; // 5 is assigned to n in the following [...]]]></description>
			<content:encoded><![CDATA[<p><P>简介<BR>大型应用软件往往是分层构建的。在最底层你会发现库函数，API函数，和私有的底层函数。然而在最高层则是用户接口组件，比如一个电子制表软件让用户填写数据表单。下面来看一种普通的航空订票系统：它的最高端是由一些GUI组件所组成，用来在用户的屏幕上显示内容。这些高端组件与那些封装了数据库API的数据存取对象相互作用。再往底层一些，那些数据库API与数据库引擎相交互，然而数据库引擎自己又会调用系统服务来处理底层的硬件资源，比如物理内存，文件系统和安全模型。一般情况下，及其严格的运行期错误会在这些底层代码中被检测出来，但是它们不能&#8212;&#8211;或者说不应该&#8212;-试图自己处理这些错误。解决这些严格的运行期错误的责任应该由高端组件来承担。为了解决一个错误，高端组件必须得到错误发生的通知。本质上，错误处理包括错误检测和通知高端组件。这些组件依次处理错误并且试图从错误中恢复。</P><P>传统的错误处理方法<BR>在早些时期，C++本身并没有处理运行期错误的能力。取而代之的是那些传统的C方法。这些方法可以被归为三类设计策略：<BR>返回一个状态码来表明成功或失败<BR>把错误码赋值给一个全局标记并且让其他的函数来检测<BR>终止整个程序<BR>上述的任何一个方法在面向对象环境下都有明显的缺点和限制。其中的一些根本就不可接受，尤其是在大型应用程序中。接下来的部分将会仔细检查一下这些方法，目的是发现他们与生俱来的限制和危险性。</P><P>返回一个错误码<BR>在某种程度上这个方法是有用的，比如一个小型程序有着一致而且有限的错误码存在，并且严格的报告错误和检查一个函数返回值的策略被应用。然而，这种方法也有着显著的局限性；例如，错误类型和它们的列举值必须标准化。因为一个库的实现者可能选择返回值0来代表一个错误，然而另一个实现者却选择0来代表成功并且用那些非0值代表出现错误。通常，那些返回码会在一个公共头文件中以符号常量的形式存在，从而在整个软件的开发过程中或者在一个开发团队里达成一致。但是，这些码并不是标准的。<BR>不用说，在结合那些不兼容的软件库的时候，如何处理非标准的错误码将会是一件极其头疼的事。另外一个缺点是对于每一个返回码都必须查阅和解释&#8212;&#8212;一个乏味并且昂贵的操作。这个策略的实现需要调用者在每一次调用的时候对返回值进行检查，如果没有这样做将会导致运行期错误。当一个错误码被检测，就会终止正常的执行流程并且把错误码传递给调用者。那些附加的包裹每一个函数调用的代码会很轻易的使程序的大小翻倍并且引起软件维护和程序可读性的降低。更糟的是，有时要想返回一个error value是不可能的。例如，构造函数没有返回值，所以就不能应用这种方法在对象构造失败的情况下报告错误。</P><P>求助于全局标记<BR>一个可以选择的用来报告运行期错误的途径是使用全局标记，它表明了最后的操作是否成功。不像返回码策略，这个方法是标准化的。C 的&lt;errno.h&gt;头文件中定义了一种机制用来检查和给一个全局整型标记errno赋值。这种策略固有的缺陷也是不能被忽视的。在一个多线程环境中，被一个线程赋予了一个错误码的errno有可能不经意的被另一个线程所改写，而调用者还未对errno进行检查。另外，对错误码而不是一个更为可读的信息的使用是很不利的，因为那些错误码可能会在不同的环境中不兼容。最终，这种方法需要严格的良好的编程样式，也就是不断的对errno的当前值进行检查。<BR>全局标记策略和函数返回值策略是相似的：二者都提供一种机制来报告错误，但是二者却都不能保证错误被处理。例如，一个函数没有成功打开一个文件可以通过给errno赋予一个合适的值来表明错误的发生。然而，它不能阻止另一个函数试图写入和关闭那个文件。更进一步，如果errno表明一个错误并且程序员检测到而且按照预期处理了它，那么errno还应该被显式的复位。如果一个程序员忘记了做这件事，那么将会引起其他函数误以为错误还没有被处理，从而去校正那个问题，引起不可预知的结果。</P><P>终止程序<BR>最为残酷的处理运行期错误的方法是简单的终止程序。这种解决方案去除了上面两种方法的一些缺点；例如，没有必要反复的检查每个函数返回值的状态，而且程序员也不必赋值给一个全局标记，反复的测试和清除它的值。在标准C的函数库中有两个函数用来终止一个程序：exit()和abort()。exit()被调用能够表明程序被成功终止，或者它可以在遇到运行期错误的时候被调用。在把控制权交还给运行环境之前，exit()首先会清空流和关闭打开的文件。abort()却不一样，它表示程序被意外终止，不会清空流和关闭打开的文件。<BR>关键性的程序不应该在任何运行期错误存在的情况下突然终止。如果一个生命支持系统突然停止工作仅仅是因为它的控制器检测到0做除数，那么将是一种灾难。同样，一个控制由人驾驶的航天飞机自动运行的计算机系统也不应该因为暂时的和地面控制系统失去联系就停止工作。类似的，电话公司的账目系统或者银行系统都不应该在运行期错误出现的时候就中止。健壮的真实世界的应用程序应该做的更好。<BR>程序终止甚至对于应用程序都是有问题的。一个检测到错误的函数通常都没有必要的信息来衡量错误的严重性。例如一个内存分配函数并不能说出内存分配失败是由于用户正在使用调试器，网页浏览器，电子制表软件，文字处理软件，还是由于系统因为硬件错误变得不稳定。在第一种情况下，系统可以简单的显示一条信息来告诉用户关闭不必要的应用程序。第二种情况下，就需要一种更为残酷的措施了。然而，在终止程序的策略下，那个内存分配函数就会简单的终止程序，而不考虑错误的严重性。这种方法在一些关键性应用程序中是无法应用的。好的系统设计应该保证运行期错误被检测和报告，但是它也应该确保最小限度的容错水平。<BR>终止程序在极限环境下或者在调试阶段是可以被接受的。然而，abort()和exit()却不应该在面向对象环境中使用，甚至即使在调试阶段，因为他们并没有意识到C++对象模型的存在。</P><P>exit()和abort()不销毁对象<BR>对象可以持有从构造函数或者某个成员函数中获得的资源：从free store中分配的内存，文件句柄，通信端口，I/O设备等等。这些资源必须在适当时候被释放。通常，资源都是由析构函数来释放。这种设计方法被称为resource initialization is acquisition。在栈上建立的局部对象会自动销毁。然而abort() 和exit()并不调用这些局部对象的析构函数。因此，程序的意外终止将会引起无法挽回的损害：数据库被破坏，文件可能丢失，并且一些有价值的数据可能丢失。基于这个原因，请不要在面向对象环境中使用abort()和exit()。</P><P>进入异常处理<BR>正如你所见，传统C的错误处理方法并不适合C++，C++的一个设计目标就是让用C++进行大规模软件开发比C更好更安全。<BR>C++的设计者们已经意识到缺乏合适的错误处理机制使得实现这一目标相当的困难。他们试图寻找一种完全摆脱C的错误处理缺陷的解决方案。其中的一种想法就是建立在当异常被触发的时候程序自动把控制权传递给系统。机制必须简单，并且它能够使程序员从不断的检查一个全局标记或者返回值的苦差事中解脱出来。另外，它还必须保证异常处理程序能够自动获得异常信息。最终它还要确保当一个异常没有在本地处理的时候，本地对象能够被适当的销毁，并且把它所持有的资源释放。 <BR>1989年，在多年的研究和多方建议下，异常处理进入C++。C++并不是第一个对结构化运行期错误处理进行支持的语言。早在20世纪60年代，PL/1就提供了一种内建的异常处理机制；Ada也在20世纪80年代提供了自己的异常处理，另外还有几种语言也做到了这一点。但是这些异常处理模型没有一个适合C++对象模型和程序结构。因此，被提议的C++异常处理是独一无二的，并且它已经作为了一种模型出现在一些新产生的语言之中。<BR>异常处理机制的实现被证明是一种挑战。第一个C++编译器，cfront，在UNIX环境下运行。和许多UNIX编译器一样，它首先是作为一个翻译器把C++代码转换成C，接着再编译C代码。Cfront 4.0计划引入异常处理，然而，异常处理机制的实现是如此的复杂，以至于cfront 4.0的开发团队在用了一年时间设计它之后完全的放弃了这个项目。Cfront 4.0再也没有出台。然而，异常处理却成为了标准C++的有机组成部分。后来出现的一些编译器都支持了它。在接下来的部分里将会解释为什么在cfront以及任何编译器下实现异常处理是如此的困难。 实现异常处理所面临的挑战<BR>实现异常处理所遇到的困难主要来自于以下几个因素：第一，实现必须保证对于某一异常的合适的handler被找到。<BR>第二，异常对象必须是多态的；这样，当实现无法通过派生类对象定位handler的时候可以考虑基类的handler。这种需要表明必须引入运行期类型检测。然而那时C++还没有任何运行期类型检测的能力。因此这种能力必须首先被实现。<BR>作为一个附加的复杂性，实现必须能够调用所有局部对象的析构函数。这个过程被称为stack unwinding 。因为早期的C++编译器首先要把C++源文件转换为纯C，然后再把C代码编译成机器码。异常处理的实现者们不得不用C来实现运行期类型鉴别和stack unwinding。幸运的是，这些障碍已经被克服。</P><P>应用异常处理<BR>异常处理是一种灵活并且精巧的工具。它克服了C的传统错误处理方法的缺点并且能够被用来解决一系列运行期错误。但是，异常处理也像其他语言特性一样，很容易被误用。为了能够有效的使用这一特性，理解运行期机制是如何工作的以及相关的性能花费是非常重要的。接下来的部分里将会进入异常处理的内部并且论证如何使用这一工具来建立安全的应用系统。</P><P>异常处理要素<BR>异常处理是一种把控制权从异常发生的地点转移到一个匹配的handler的机制。异常是内建数据类型变量或者是对象。异常处理机制包括四个部分：a try block，一个或多个和try block相关的handler，throw表达式，以及异常自己。Try block包含可能抛出异常的代码。例如：<BR>try <BR>{<BR>int * p = new int[1000000]; //may throw std::bad_alloc<BR>}<BR>一个try block后面将跟有一个或多个catch语句或者说是handlers， 每一个handler 处理不同类型的异常。例如：<BR>try<BR>{<BR>int * p = new int[1000000]; //may throw std::bad_alloc<BR>//&#8230;<BR>}<BR>catch(std::bad_alloc&amp; ) <BR>{<BR>}<BR>catch (std::bad_cast&amp;)<BR>{<BR>}<BR>handler仅仅被在try block中的throw表达式以及函数所调用。throw表达式包括一个关键字throw以及assignment expression。例如：<BR>try<BR>{<BR>throw 5; // 5 is assigned to n in the following catch statement<BR>}<BR>catch(int n) <BR>{<BR>}<BR>throw表达式和返回语句很相似。empty throw是没有操作数的throw语句。例如：</P><P>throw;</P><P>在handler中的empty throw表明它在重新抛出异常，后面我们会讨论到它。另外，如果目前没有异常被处理，那么执行一个empty throw将会调用terminate()。</P><P>Stack Unwinding <BR>当一个异常被抛出，运行时机制首先在当前的作用域寻找合适的handler。如果不存在这样一个handler，那么将会离开当前的作用域，进入更外围的一层继续寻找。这个过程不断的进行下去直到合适的handler被找到为止。此时堆栈已经被解开，并且所有的局部对象被销毁。如果始终都没有找到合适的handler，那么程序将会终止。注意，C++保证局部对象被适当的销毁仅仅是在抛出的异常被处理的情况下。一个未被扑获得异常是否引起局部对象的销毁由实现决定的。为了保证局部对象的析构函数在异常未被捕获情况下也能够被正常调用，你应该在main()里加入捕获任何异常的catch语句。例如：<BR>int main()<BR>{<BR>try<BR>{<BR>//&#8230;<BR>}<BR>catch(std::exception&amp; stdexc) // handle expected exceptions<BR>{<BR>//&#8230;<BR>}<BR>catch(&#8230;) // ensure proper cleanup in the case of an uncaught exception<BR>{<BR>}<BR>return 0;<BR>}<BR>stack unwinding的过程就好比一个返回语句序列，每一个都返回相同的对象给它的调用者。</P><P>传递异常对象给handler<BR>一个异常能够按值或者按引用的方式传递给它的handler。为异常对象分配的内存是通过一种未被定义的途径（但是并没有在自由存储区）。一些实现使用专门的异常堆栈，在那里，异常对象被创建。当一个异常按引用的方式传递，handler获得是在异常堆栈上建立的对象的引用。通过引用方式传递异常保证了它的多态行为。按值传递的异常被建立在调用者的堆栈上。例如：<BR>#include &lt;cstdio&gt;<BR>class ExBase {/*&#8230;*/};<BR>class FileEx: public ExBase {/*&#8230;*/};<BR>void Write(FILE *pf)<BR>{<BR>if (pf == NULL) throw FileEx();<BR>//&#8230; process pf normally<BR>}<BR>int main ()<BR>{<BR>try<BR>{<BR>Write(NULL); //will cause a FileEx exception to be thrown<BR>}<BR>catch(ExBase&amp; exception) //catch ExBase or any object derived from it<BR>{<BR>//diagnostics and remedies }<BR>}<BR>按值传递异常将会造成反复的复制对象，并且它的花费是昂贵的，因为异常对象在匹配的handler被找到以前会被构造和销毁许多次。然而，在比较罕见的情况下也会发生按值传递，由于为了保持应用系统的整体性，性能考虑往往被放在了第二位。 异常类型匹配<BR>异常的类型决定了哪个handler能够捕获它。异常的匹配规则比函数重载的匹配规则更为严格。考虑下面这种情况：<BR>try<BR>{<BR>throw int();<BR>}<BR>catch (unsigned int) //will not catch the exception from the previous try-block<BR>{ <BR>}<BR>抛出异常的类型是int型，然而handler却期待一个unsigned int。异常处理机制不认为二者是能够匹配的类型；结果，抛出的异常没有被捕获。异常匹配规则仅仅允许一个非常有限的转换集。对于一个异常E和一个带有T或T&amp;参数的handler，符合下面的条件可以进行匹配：<BR>T和E是同一类型（const 和volatile被忽略）<BR>T是E的没有歧义的公共基类<BR>如果E和T都是指针类型，当二者的类型相同时可以进行匹配或者E所指向对象的类型公有无歧义的继承自T指向对象的类型。</P><P>作为对象的异常<BR>正如你所发现的，传统的通过返回一个整型错误码的方法在OOP中已经不再适用。C++异常处理机制提供了更多的弹性，安全性和稳固性。一个异常既可以是int 或char等基本类型，也可以是更为丰满的对象，有着数据成员和成员函数。这样一个对象可以为handler提供更多的选择进行恢复。一个聪明的异常对象，可以通过成员函数返回错误的详细描述，而不是让handler查阅某个表或文件。它也可以拥有在错误被适当处理之后使程序从运行期错误中恢复的成员函数。考虑有这样一个日志类想要添加新的纪录到一个已存在的日志文件中：如果打开日志文件失败，它会抛出一个异常。当它被匹配的handler所捕获，异常对象能够拥有一个成员函数，这个成员函数建立一个对话框。操作者可以从对话框中选择恢复方法，包括建立一个新的日志文件，选择另一个日志文件，或者是允许系统在没有日志的情形下运行。</P><P>Exception Specification<BR>一个函数可以通过指定一个它所能抛出的异常列表来提醒它的用户。Exception specifications在用户只能看到函数的原型但是却无法获得它的源文件的时候将会十分的有用。下面是一个指定异常的例子：</P><P>class Zerodivide{/*..*/};<BR>int divide (int, int) throw(Zerodivide); // function may throw an exception<BR>// of type Zerodivide, but no other</P><P>如果你的函数永远不会抛出任何异常，它可以像下面这样声明：<BR>bool equals (int, int) throw(); //no exception is thrown from this function</P><P>注意一个函数被声明为没有exception specification例如：<BR>bool equals (int, int);</P><P>Exception specification在运行期生效<BR>一个exception specification不会在编译期被检查，而是在运行期。当一个函数试图抛出一个在exception specification中未被指定的异常的时候，异常处理机制将会检测到这种违规并且调用标准函数unexpected()。unexpected()的默认行为是调用terminate()终止程序。违背exception specification就好比是一个bug，不应该发生，这就是为什么默认行为是终止程序。不过默认的行为也可以被改变，通过使用函数set_unexpected()。<BR>因为exception specifications在运行期才有效，所以编译期可能会故意忽略那些违背exception specifications的代码。好比下面：<BR>int f(); // no exception specification, f can throw any type of exception<BR>void g(int j) throw() // g promises not to throw any exception at all<BR>{<BR>int result = f(); // if f throws an exception, g will violate its guarantee<BR>//not to throw an exception. still, this code is legal<BR>}<BR>在上面这个例子中，函数g()并不允许抛出任何异常。它调用函数f()，然而f()却可能抛出任何异常因为它没有exception specification。如果f()抛出一个异常，它将会通过g()传播出去，但是这却破坏了g()不会抛出任何异常的保证。这也许看起来会很奇怪，有一些违背在编译期就应该被发现报错的，为什么一定要等到运行期呢？然而许多问题并不像想象的那么简单，以下几个原因就要求必须采用运行期检测策略。在前面的那个程序中，f()可能是一个被遗留下来的C函数。我们不可能强迫每个C函数有exception specification。并且因为这个原因就强迫程序员在g()中写不必要的try和catch(…)块也是不实际的。通过强迫exception specification只在运行期才有效，C++采取了“信任程序员”的策略而不是强加负担给程序员和实现。</P><P>Exception specification的一致性<BR>C++需要派生类中的exception specification与基类保持一致。这意味着派生类的virtual function重载函数的exception specification必须是基类的限制性子集，例如：<BR>// various exception classes<BR>class BaseEx{};<BR>class DerivedEx: public BaseEx{};<BR>class OtherEx {};<BR>class A<BR>{<BR>public:<BR>virtual void f() throw (BaseEx);<BR>virtual void g() throw (BaseEx);<BR>virtual void h() throw (DerivedEx);<BR>virtual void i() throw (DerivedEx);<BR>virtual void j() throw(BaseEx);<BR>};<BR>class D: public A<BR>{<BR>public: <BR>void f() throw (DerivedEx); //OK, DerivedEx is derived from BaseEx<BR>class D: public A<BR>{<BR>public: <BR>void f() throw (DerivedEx); //OK, DerivedEx is derived from BaseEx<BR>void g() throw (OtherEx); //error; exception specification is <BR>//incompatible with A&#8217;s<BR>void h() throw (DerivedEx); //OK, identical to the exception <BR>//specification in base<BR>void i() throw (BaseEx); //error, BaseEx is not a DerivedEx nor is it<BR>//derived from DerivedEx<BR>void j() throw (BaseEx,OtherEx); //error, less restrictive than the<BR>//specification of A::j<BR>};<BR>};<BR>相同的一致性限制也应用于函数指针。一个拥有exception specification函数指针只能被赋予一个有着相同或更为局限的exception specification的函数。这说明一个没有exception specification的函数指针不能被赋予一个有exception specification的函数。注意，因为exception specification不能被认为是函数类型的一部分，因此你不能声明两个仅仅是exception specification不同的函数。例如：<BR>void f(int) throw (Y);<BR>void f(int) throw (Z); //error; redefinition of &#8216;void f(int)&#8217;<BR>同样的原因，声明一个包含exception specification的typedef也是错误的：<BR>typedef void (*PF) (int) throw(Exception); // error</P><P>在对象构造和销毁时出现异常<BR>构造函数和析构函数被自动调用，并且它们不能够利用返回值来表明发生运行期错误。从表面上看，在对象构造和销毁时抛出一个异常似乎是报告运行期错误的最好方法。但事实上你还必须考虑一些额外的因素。你尤其应该对从析构函数中抛出异常保持警惕。</P><P>从析构函数中抛出异常是危险的<BR>从析构函数中抛出异常是不应该被推荐的，这是因为一个析构函数可能会在另一个异常进行stack unwinding的时候被调用，在这种情况下，异常处理机制就会调用terminate()终止程序。如果你真的想从一个析构函数中抛出异常的话，一种可取的做法是首先检查一下是否还有未被捕获的异常存在。</P><P>检查未被捕获的异常<BR>一个异常被捕获是在它相应的handler被找到的情况下。为了检查一个异常是否被捕获，你可以使用标准函数uncaught_exception()（它被定义在标准头文件&lt;stdexcept&gt;）。例如：<BR>class FileException{};<BR>File::~File() throw (FileException)<BR>{<BR>if ( close(file_handle) != success) // failed to close current file?<BR>{<BR>if (uncaught_exception() == true ) // is there any uncaught exception <BR>//being processed currently?<BR>return; // if so, do not throw an exception<BR>throw FileException(); // otherwise, it is safe to throw an exception<BR>// to signal an error<BR>}<BR>return; // success<BR>}<BR>然而，一个更好的选择是直接在析构函数内部处理异常，而不是让他们扩散到外面。例如：<BR>void cleanup() throw (int);<BR>class C <BR>{<BR>public:<BR>~C();<BR>};<BR>C::~C() <BR>{<BR>try <BR>{<BR>cleanup();<BR>}<BR>catch(int) <BR>{<BR>//handle the exception within the destructor<BR>}<BR>}<BR>如果一个异常被函数cleanup()抛出，那么它在析构函数内部就被处理。否则，被抛出的异常就会传播到析构函数的外部，并且如果这个析构函数是在stack unwinding 的过程中被调用，那么程序将会通过terminate()的调用而终止。</P><P>全局对象：构造和销毁<BR>我们都知道，全局对象的构造发生在程序开始之前。因此，任何从全局对象的构造函数中抛出的异常将不会被捕获。这一点对于全局对象的析构函数也是一样的&#8212;&#8211;全局对象的析构函数在程序结束之后被运行。因此，一个从全局对象的析构函数中抛出的异常也不会被捕获。 高级异常处理技术<BR>简单的try-throw-catch模型可以被扩展来处理更为复杂的运行期错误。这一节将会讨论一些更为高级的异常处理技术，包括异常层次，重新抛出异常，function try blocks以及auto_ptr 类。</P><P>标准异常<BR>C++定义了一个标准异常层次，当在运行时发生反常情形时抛出。标准异常类从std::exception（在&lt;stdexcept&gt;头文件中定义）派生。这一层次使得应用程序能够在单一的catch语句中捕获这些异常：<BR>catch (std::exception&amp; exc)<BR>{<BR>// handle exception of type std::exception as well as <BR>//any exception derived from it<BR>}<BR>那些通过语言内建操作符抛出的标准异常是：<BR>std::bad_alloc //by operator new<BR>std::bad_cast //by operator dynamic_cast &lt; &gt;<BR>std::bad_typeid //by operator typeid<BR>std::bad_exception //thrown when an exception specification of <BR>所有的标准异常都提供了成员函数what()，它返回一个用来描述异常细节的字符串。注意，标准库还有另外一个被它的组件抛出的的异常集合。</P><P>异常处理层次<BR>异常在一个自下向上的层次中捕获：派生层次越深的异常越先被处理，例如：<BR>#include &lt;stdexcept&gt; <BR>#include &lt;iostream&gt;<BR>using namespace std;<BR>int main()<BR>{<BR>try<BR>{<BR>char * buff = new char[100000000];<BR>//&#8230;use buff<BR>}<BR>catch(bad_alloc&amp; alloc_failure) // bad_alloc is <BR>//derived from exception<BR>{<BR>cout&lt;&lt;&#8221;memory allocation failure&#8221;;<BR>//&#8230; handle exception thrown by operator new<BR>}<BR>catch(exception&amp; std_ex) <BR>{<BR>cout&lt;&lt; std_ex.what() &lt;&lt;endl; <BR>}<BR>catch(&#8230;) // exceptions that are not handled elsewhere are caught here<BR>{<BR>cout&lt;&lt;&#8221;unrecognized exception&#8221;&lt;&lt;endl;<BR>}<BR>return 0;<BR>}<BR>派生层次越深的handler必须出现在其基类的前面。这是因为handler的匹配过程是按照出现的顺序进行的。因此有可能某个handler永远不会被执行，例如，把一个处理派生类异常的handler放在处理基类异常的handler的后面。例如：<BR>catch(std::exception&amp; std_ex) //bad_alloc exception is always handled here <BR>{<BR>//&#8230;handle the exception <BR>}<BR>catch(std::bad_alloc&amp; alloc_failure) //unreachable <BR>{<BR>cout&lt;&lt;&#8221;memory allocation failure&#8221;;<BR>}</P><P>重新抛出异常<BR>异常的抛出表明了一种反常的状态。先捕获到异常的handler试图解决这个问题，但是它如果没有成功或者只完成了部分恢复，那么它可以重新抛出这个异常，让更高一层的try block来处理它。基于这种目的，try blocks可以在一个分等级的顺序上进行嵌套，使得一个从低层重新抛出的异常能够被重新捕获。重新抛出用一个没有操作数的throw语句来表示。例如：<BR>#include &lt;iostream&gt;<BR>#include &lt;string&gt;<BR>using namespace std;<BR>enum {SUCCESS, FAILURE};<BR>class File<BR>{<BR>public: File (const char *) {}<BR>public: bool IsValid() const {return false; }<BR>public: int OpenNew() const {return FAILURE; }<BR>};<BR>class Exception {/*..*/}; //general base class for exceptions<BR>class FileException: public Exception<BR>{<BR>public: FileException(const char *p) : s(p) {}<BR>public: const char * Error() const { return s.c_str(); }<BR>private: string s;<BR>};<BR>void func(File&amp; );<BR>int main()<BR>{<BR>try //outer try<BR>{<BR>File f (&#8220;db.dat&#8221;);<BR>func; // 1<BR>}<BR>catch(&#8230;) // 7<BR>//this handler will catch the re-thrown exception; <BR>//note: the same exception type is required<BR>{<BR>cout&lt;&lt;&#8221;re-thrown exception caught&#8221;;<BR>}<BR>return 0;<BR>}<BR>void func(File &amp; f)<BR>{<BR>try //inner try<BR>{<BR>if (f.IsValid() == false )<BR>throw FileException(&#8220;db.dat&#8221;); // 2<BR>}<BR>catch(FileException &amp;fe) // 3<BR>//first chance to cope with the exception<BR>{<BR>cout&lt;&lt;&#8221;invalid file specification&#8221; &lt;&lt;fe.Error()&lt;&lt;endl;<BR>if (f.OpenNew() != SUCCESS) (5)<BR>//re-throw the original exception and let a higher handler deal with it<BR>throw; // 6<BR>}<BR>}<BR>在上面的例子中，函数func()在main()中的try block里被调用（1）。第二个在func()中的try block抛出一个FileException类型的异常（2）。这个异常被func()内的catch block所捕获（3）。那个catch block试图通过打开一个新文件进行补救，但是失败了（5），并且FileException异常被重新抛出（6）。最终，那个重新抛出的异常被main()中的catch(…)所捕获（7）。</P><P>Function try Blocks<BR>Function try blocks是一个函数体本身就含有一个try block以及它的相关handler的函数。比如：<BR>class Bad{};<BR>void foo()try<BR>{<BR>throw Bad();<BR>}<BR>catch(&#8230;)<BR>{<BR>std::cout&lt;&lt;&#8221;error catch!!&#8221;;<BR>}<BR>function try block使得一个handler能够捕获构造函数中以及初始化列表中发生的异常。然而，它并不像普通异常的handler，function try block很少能够捕获异常继续对象的构建。这是因为被部分构造的对象要被销毁。另外，一个function try block的handler不能执行返回语句（或者说，handler必须通过一个throw离开）。那么究竟function try block的用处是什么呢？handler使得你可以抛出另一个异常而不是你刚才捕获的那个，这样可以阻止一个违背exception specification的情况发生。例如：<BR>class X{}; <BR>C::C(const std::string&amp; s) throw (X) // allowed to throw X only <BR>try<BR>: str(s) // str&#8217;s constructor might throw a bad_alloc exception, <BR>// might violate C&#8217;s exception specification<BR>{<BR>// constructor function body<BR>}<BR>catch (&#8230;) //handle any exception thrown from ctor initializer or ctor body<BR>{<BR>//&#8230; <BR>throw X(); //replace bad_alloc exception with an exception of type X<BR>}<BR>在这个例子中，一个string对象首先被创建作为class c 的一个成员。String在它的创建过程中可能抛出一个bad_alloc异常。那个function try block能够捕获bad_alloc异常并且抛出类型为x的异常使得它满足c的构造函数的exception specification的需要。</P><P>异常处理的性能分析<BR>异常处理机制主要取决于运行期类型检查，当一个异常被抛出，实现必须确定异常是不是从try block中抛出。如果异常是从try block中抛出的话，实现就需要比较异常的类型，试图从当前的作用域中找到匹配的handler。如果找到控制权将会传递给handler。然而这些都是乐观的情况。如果实现没有找到一个匹配的handler的话，或者异常不是从try block中抛出，那么就会进行stack unwinding，这个过程会一直进行下去直到一个匹配的handler被找到为止。当匹配的handler未被找到，terminate()就会被调用，终止程序。</P><P>额外的运行期类型信息<BR>异常处理机制为了完成异常和它的handler之间的运行期匹配，它必须储存关于每个异常对象的类型以及每个catch语句的额外信息。因为异常可以是任何类型，并且也可以是多态的，所以它的动态类型信息必须被获得通过使用runtime type information(RTTI)，RTTI给程序在速度和大小上增加了额外的负担。并且只有RTTI还不够，实现也需要运行期代码信息，关于每个函数的结构。这些信息需要拿来确定一个异常是不是从try block中抛出。这个信息可以通过编译器以下面的方式产生：编译器把每个函数体划分为三个部分：第一个部分在try block之外并且没有活动的对象，第二个部分也在try block之外但是有活动的对象而且要通过stack unwinding来进行销毁，第三部分在try block中。</P><P>抓住对异常处理的支持<BR>异常处理技术的实现在不同的编译器以及平台下是不一样的。但是它们都会强加额外的负担给程序，即使没有异常被抛出。一些编译器可以选择是否对异常处理进行支持。当异常处理被关掉的时候，那些额外的数据结构，查找表，以及一些附加的代码都不会被生成。然而，关闭异常处理往往很少被选择，因为即使你不直接使用异常，你也会隐含的使用它们：例如operator new,会抛出std::bad_alloc异常；STL容器可能会抛出他们自己的异常；第三方代码库也可能使用异常。因此，只有在你导入纯C代码的时候，才应该考虑关闭异常处理来避免额外的负担。</P><P>异常的误用<BR>异常处理并不是用来限制出现错误，一些程序员可能会简单的使用它来作为循环的选择控制结构。例如，一个简单的应用程序让用户输入数据直到一个特定的条件满足：<BR>#include &lt;iostream&gt;<BR>using namespace std;<BR>class Exit{}; //used as exception object<BR>int main()<BR>{<BR>int num;<BR>cout&lt;&lt; &#8220;enter a number; 99 to exit&#8221; &lt;&lt;endl;<BR>try<BR>{<BR>while (true) //infinitely<BR>{<BR>cin&gt;&gt;num;<BR>if (num == 99)<BR>throw Exit(); //exit the loop<BR>cout&lt;&lt; &#8220;you entered: &#8221; &lt;&lt; num &lt;&lt; &#8220;enter another number &#8221; &lt;&lt;endl;<BR>}<BR>}<BR>catch (Exit&amp; )<BR>{<BR>cout&lt;&lt; &#8220;game over&#8221; &lt;&lt;endl;<BR>}<BR>return 0;<BR>}<BR>在上面的例子中，程序员把一个无限循环放在了try block中，throw语句终止循环并且把控制权传递给后面的catch语句。这种编程样式不应该被推荐。它的效率会非常低下因为异常处理存在。在上面小的演示程序中，或许仅仅是程序样式的差异，但是在大规模的应用系统中，使用异常处理来作为控制选择控制结构的话，那么将会带来显著的效率损失。</P><P>结论<BR>C++的异常处理机制克服了传统方法所带来的问题。它使得程序员从检查函数的返回状态的乏味的代码中解放出来。另外一个重要的优点是自动的stack unwinding，它保证了局部活动对象被正确销毁以及他们的资源被安全释放。<BR>实现异常处理机制并不是一项简单的工作。对获取异常的动态类型的需要使得RTTI被引入C++。异常可以按照种类进行分组，标准异常就是一个很好的例子。在最近几年里，一些异常处理机制已经得到了修正。第一个就是把exception specifications加入到了函数原型中。另一个是function try block的引入，它使得程序能够处理从构造函数体或初始化列表中抛出的异常。<BR>异常处理是一个用来有效的处理运行期错误的非常强大并且灵活的工具。然而使用它也是有代价的。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e5%bc%82-%e5%b8%b8-%e5%a4%84-%e7%90%86/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>哲学家就餐问题</title>
		<link>http://blog.1xi.net/wangluo/%e5%93%b2%e5%ad%a6%e5%ae%b6%e5%b0%b1%e9%a4%90%e9%97%ae%e9%a2%98</link>
		<comments>http://blog.1xi.net/wangluo/%e5%93%b2%e5%ad%a6%e5%ae%b6%e5%b0%b1%e9%a4%90%e9%97%ae%e9%a2%98#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:56 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e5%93%b2%e5%ad%a6%e5%ae%b6%e5%b0%b1%e9%a4%90%e9%97%ae%e9%a2%98</guid>
		<description><![CDATA[有五个哲学家围坐在一圆桌旁，桌中央有一盘通心粉，每人面前有一只空盘子，每两人之间放一只筷子每个哲学家的行为是思考，感到饥饿，然后吃通心粉.为了吃通心粉，每个哲学家必须拿到两只筷子，并且每个人只能直接从自己的左边或右边去取筷子#define&#160;&#160;N&#160;&#160;5&#160;void&#160;philosopher&#160;(int&#160;i)&#160;&#160;{&#160;&#160;&#160;&#160;while&#160;(true)&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;&#160;思考；&#160;&#160;&#160;&#160;取fork[i];&#160;取fork[(i+1)&#160;%&#160;5]；&#160;&#160;&#160;&#160;进食；&#160;&#160;&#160;&#160;放fork[i];&#160;放fork[(i+1)&#160;%&#160;5]；&#160;&#160;&#160;&#160;}}为防止死锁发生可采取的措施：最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时，才允许他拿筷子（&#38;#61654;）给所有哲学家编号，奇数号的哲学家必须首先拿左边的筷子，偶数号的哲学家则反之&#160;为了避免死锁，把哲学家分为三种状态，思考，饥饿，进食，并且一次拿到两只筷子，否则不拿.　哲学家就餐问题解法（1）#define&#160;&#160;N&#160;&#160;5&#160;void&#160;philosopher&#160;(int&#160;i)&#160;&#160;{&#160;&#160;&#160;&#160;while&#160;(true)&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;&#160;思考；&#160;&#160;&#160;&#160;取fork[i];&#160;取fork[(i+1)&#160;%&#160;5]；&#160;&#160;&#160;&#160;进食；&#160;&#160;&#160;&#160;放fork[i];&#160;放fork[(i+1)&#160;%&#160;5]；&#160;&#160;&#160;&#160;}}哲学家就餐问题解法（2）#define&#160;&#160;N&#160;&#160;5#define&#160;&#160;THINKING&#160;&#160;0#define&#160;&#160;HUNGRY&#160;&#160;&#160;&#160;1#define&#160;&#160;EATING&#160;&#160;&#160;&#160;2#typedef&#160;&#160;int&#160;semaphore;int&#160;state[N];semaphore&#160;mutex=1;semaphore&#160;s[N];void&#160;test(int&#160;i){&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(state[&#160;i&#160;]&#160;==&#160;HUNGRY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#38;&#38;&#160;(state&#160;[&#160;(i-1)&#160;%&#160;5]&#160;!=&#160;EATING)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#38;&#38;&#160;(state&#160;[&#160;(i+1)&#160;%&#160;5]&#160;!=&#160;EATING)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state[&#160;i&#160;]&#160;=&#160;EATING;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;V(&#38;s[&#160;i&#160;]);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;}void&#160;&#160;philosopher&#160;(int&#160;i)&#160;{&#160;&#160;&#160;while&#160;(true)&#160;&#160;&#160;&#160;&#160;&#160;&#160;{&#160;&#160;&#160;&#160;&#160;&#160;思考;&#160;&#160;&#160;&#160;&#160;&#160;&#160;P(&#38;mutex);&#160;&#160;&#160;&#160;&#160;&#160;&#160;state[i]&#160;=&#160;HUNGRY;&#160;&#160;&#160;&#160;&#160;&#160;&#160;test(i);&#160;&#160;&#160;&#160;&#160;&#160;&#160;V(&#38;mutex);&#160;&#160;&#160;&#160;&#160;&#160;&#160;P(&#38;s[i]);&#160;&#160;&#160;&#160;&#160;&#160;拿左筷子；&#160;&#160;&#160;&#160;&#160;&#160;拿右筷子；&#160;&#160;&#160;&#160;&#160;&#160;&#160;进食；&#160;&#160;&#160;&#160;&#160;&#160;放左筷子；&#160;&#160;&#160;&#160;&#160;&#160;放右筷子；&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;P(&#38;mutex)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state[&#160;i&#160;]&#160;=&#160;THINKING；&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;test([i-1]&#160;%&#160;5);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;test([i+1]&#160;%&#160;5);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;V(&#38;mutex);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}}state[&#160;i&#160;]&#160;=&#160;THINKINGs[&#160;i&#160;]&#160;=&#160;0]]></description>
			<content:encoded><![CDATA[<p><P>有五个哲学家围坐在一圆桌旁，桌中央有一盘通心粉，每人面前有一只空盘子，每两人之间放一只筷子每个哲学家的行为是思考，感到饥饿，然后吃通心粉.为了吃通心粉，每个哲学家必须拿到两只筷子，并且每个人只能直接从自己的左边或右边去取筷子<BR>#define&nbsp;&nbsp;N&nbsp;&nbsp;5<BR>&nbsp;void&nbsp;philosopher&nbsp;(int&nbsp;i)&nbsp;&nbsp;<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(true)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;思考；<BR>&nbsp;&nbsp;&nbsp;&nbsp;取fork[i];&nbsp;取fork[(i+1)&nbsp;%&nbsp;5]；<BR>&nbsp;&nbsp;&nbsp;&nbsp;进食；<BR>&nbsp;&nbsp;&nbsp;&nbsp;放fork[i];&nbsp;放fork[(i+1)&nbsp;%&nbsp;5]；<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>为防止死锁发生可采取的措施：<BR>最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时，才允许他拿筷子（<I>&amp;#</I>61654;）给所有哲学家编号，奇数号的哲学家必须首先拿左边的筷子，偶数号的哲学家则反之&nbsp;为了避免死锁，把哲学家分为三种状态，思考，饥饿，进食，并且一次拿到两只筷子，否则不拿.</P><P>　</P><P>哲学家就餐问题解法（1）<BR>#define&nbsp;&nbsp;N&nbsp;&nbsp;5<BR>&nbsp;void&nbsp;philosopher&nbsp;(int&nbsp;i)&nbsp;&nbsp;<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(true)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;思考；<BR>&nbsp;&nbsp;&nbsp;&nbsp;取fork[i];&nbsp;取fork[(i+1)&nbsp;%&nbsp;5]；<BR>&nbsp;&nbsp;&nbsp;&nbsp;进食；<BR>&nbsp;&nbsp;&nbsp;&nbsp;放fork[i];&nbsp;放fork[(i+1)&nbsp;%&nbsp;5]；<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>哲学家就餐问题解法（2）<BR>#define&nbsp;&nbsp;N&nbsp;&nbsp;5<BR>#define&nbsp;&nbsp;THINKING&nbsp;&nbsp;0<BR>#define&nbsp;&nbsp;HUNGRY&nbsp;&nbsp;&nbsp;&nbsp;1<BR>#define&nbsp;&nbsp;EATING&nbsp;&nbsp;&nbsp;&nbsp;2<BR>#typedef&nbsp;&nbsp;int&nbsp;semaphore;<BR>int&nbsp;state[N];<BR>semaphore&nbsp;mutex=1;<BR>semaphore&nbsp;s[N];<BR>void&nbsp;test(int&nbsp;i)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(state[&nbsp;i&nbsp;]&nbsp;==&nbsp;HUNGRY)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;(state&nbsp;[&nbsp;(i-1)&nbsp;%&nbsp;5]&nbsp;!=&nbsp;EATING)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;(state&nbsp;[&nbsp;(i+1)&nbsp;%&nbsp;5]&nbsp;!=&nbsp;EATING)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state[&nbsp;i&nbsp;]&nbsp;=&nbsp;EATING;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V(&amp;s[&nbsp;i&nbsp;]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;}<BR>void&nbsp;&nbsp;philosopher&nbsp;(int&nbsp;i)&nbsp;<BR>{&nbsp;&nbsp;&nbsp;while&nbsp;(true)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;思考;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P(&amp;mutex);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state[i]&nbsp;=&nbsp;HUNGRY;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V(&amp;mutex);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P(&amp;s[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拿左筷子；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拿右筷子；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进食；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;放左筷子；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;放右筷子；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P(&amp;mutex)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state[&nbsp;i&nbsp;]&nbsp;=&nbsp;THINKING；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test([i-1]&nbsp;%&nbsp;5);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test([i+1]&nbsp;%&nbsp;5);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V(&amp;mutex);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR>state[&nbsp;i&nbsp;]&nbsp;=&nbsp;THINKING<BR>s[&nbsp;i&nbsp;]&nbsp;=&nbsp;0</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e5%93%b2%e5%ad%a6%e5%ae%b6%e5%b0%b1%e9%a4%90%e9%97%ae%e9%a2%98/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网络管理员的职业生涯与规划</title>
		<link>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86%e5%91%98%e7%9a%84%e8%81%8c%e4%b8%9a%e7%94%9f%e6%b6%af%e4%b8%8e%e8%a7%84%e5%88%92</link>
		<comments>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86%e5%91%98%e7%9a%84%e8%81%8c%e4%b8%9a%e7%94%9f%e6%b6%af%e4%b8%8e%e8%a7%84%e5%88%92#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:55 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86%e5%91%98%e7%9a%84%e8%81%8c%e4%b8%9a%e7%94%9f%e6%b6%af%e4%b8%8e%e8%a7%84%e5%88%92</guid>
		<description><![CDATA[中国目前注册网吧12～13万家，加上其它网吧估计总数会有20万家左右，这样庞大的就业通道，是其它任何行业都无法比拟的。随着政府部门对网吧行业管理的放开，关于网吧经营管理经验、网吧技术提升、网吧生意经等等一系列的行业问题都受到了相关人士的关注。但作为产业化、标准化、品牌化发展脚步加快的网吧业，此行业中的一个很重要的个体—网络管理员（也就是我们常说的网管）的职业生涯规划却很少有人关注。 相较一般在机关单位的网络管理人员的工作性质上，又有着更高的复杂度。在机关单位的网络及计算机的使用上，通常是专人专机使用，而且使用的都是一些较单纯的办公软件或是稳定的应用程序，使用的人员在计算机知识的水平也较高，因特网运用的纪律与规范也比较好要求，所以维护起整个网络系统及计算机的妥善率比较容易；但在网吧内网络以及计算机的使用情形就大大的不同，每一部计算机每天可能就得供数十人来使用，而每一个人使用的习惯都有很大的差异，从网络黑客、游戏高手到连输入法都不会计算机新手都有，使用的软件从近千款的游戏、上万部的电影到聊天工具…等，还有一大堆危险性极高的游戏外挂、私服、下载工具，所以维护一个网吧网络安全及计算机妥善率的工作真是非常艰苦。更令人烦的是，到网吧的每一个玩家可都是花钱的大爷，每一个也都得罪不起，他们才不会管你什么「网络安全使用规定」，让网吧的维护工作更是难上加难。 谈到生涯规划，我们就不得不再拿机关单位的网络管理人员跟网吧网管再来做一次比较。网络管理人员每天穿着整齐洁白的衣服，在有着恒温空调的办公室上班，可以跟气质高雅的OL朝夕相处，朝九晚五工作时间固定，薪资至少3000起跳，有空的时候还可以考考证照、炒炒股票，如果命好还可以随着公司上市坐领股票，发一笔小财。我们的网吧网管呢！网吧里烟雾弥漫，不但工作时间长还得24小时待命处理突发状况，薪资低，还没有三金保险，每天还得应付水平不高的玩家，一不小心还得挨过受罚，命不好的话还会碰到一个无心经营的老板，不知道哪天网吧关门还得落个失业的下场。所以，君不见北大、清华的高材生在网吧当网管的。 跟众多的网吧网管兄弟们接触后，我们可以大致了解到大家会来担任这样的工作，通常会有以下两类心态的驱使所致： 第一类的网吧网管是热爱游戏，沉迷于虚幻的网络世界中，心想着到网吧担任网管可以继续玩游戏还免机时费，又有薪水领，真是一举数得。通常这一类的网管兄弟，很少留心技术上的改变及店内经营上的状况。我们必须语重心长奉劝这些网管兄弟们，随着年龄渐长，技术水准并没有因为工作而提高，相对却不断失去了学习进取的时机与兴趣。躲藏于虚幻的网络世界中，终有一天必须回头面对现实生存压力。 第二类的网吧网管通常学历不高但深爱计算机、网络知识的钻研，所以只能选择到网吧来磨练技术。这类网管工作态度比较积极，随时都在学习并储备专业知识，也深受网吧经营者的欢迎，两者的关系真是如同伯乐与良马。但是在网吧这样一个工作环境理，计算机、网络专业知识只是一个网吧经营成功的因素之一，还有很多方面的专业知识可以学习，包括：财务管理、服务的理念、库存的管理，连锁经营…..等等，都是可以从你的老板身上学习的，或是可以透过你的用心去提升倚重你的老板。 不论你是怀抱着什么样的态度选择了担任这个工作，我们希望大家应有以下的态度来经营自己的未来： 热爱自己投身的网吧产业 今天我们提供了全国最大众化兼具教育与休闲的娱乐模式，在政府的重视与辅导下，他即将成为一个具影响力的产业，而遍布全国的网吧未来的影响力将不可限量，这是笔者再看过世界各地的网吧，深深觉得在中国这个市场里网吧将是最独特的一个产业，我们应该很有幸能够早别人一步投入这一个产业，把自己所在的网吧当作是自己的事业来经营，我们也应该自许这个产业因为我们的投入而将傲视全球。 终身学习的目标与方法 想要成为一位老板倚重的技术网管，首要的当然是技术要过硬，但现今技术发展的速度快速，以一个个人的学习速度都有所追赶不急，更不用说到对新技术的应用与创造。所以，在学习的目标上应该针对未来网吧运用上的相关技术来做个界定，例如：游戏内容的更新技术、各式各样功能的服务器架设与规划、安全性较高的LINUX系统、各种网络设备的调校与设定…等等。我们常说在巨人的肩膀上看世界，可以看得更高更远，所以在学习的方法上可以利用一些课程来学习，以提升学习的速度。像笔者任职的竞网数码就精心规划了一系列的网管提升课程，这些都是网管兄弟们可以好好利用的。另外还有就是可以团体学习的方法来加快成长的速度，组织网吧内、外的同好大家一起分头学习，定期交流，发挥整合的综效。最后，学习有时是需要经过一段苦涩枯燥的过程，才能尝到甜美有成就的果实，唯有毅力与坚持才能达到成长的境界。 新技术的时间价值 随着网络时代的来临，笔者发现一项新的科技技术它的生命周期是越来越短，也就是它的科技价值随着后续科技技术发展的推陈出新，导致他贬值的速度变的非常的快。所以，身为网管当你努力学习所得的成果应该尽速无私的跟你自己的团队和老板分享，共同思考如何创造出价值来提升网吧的服务质量、改善网吧的经营现况，而不是孤芳自赏，还深怕同侪学会后自己丧失优势地位，我们也常看到一些技术人员抱着这样的心态，到最后这一些人唯一存在的价值就是还记得一堆服务器的账号跟密码。所以，希望我们在了解了技术价值与时间的关联性以后，我们能好好利用新技术来创造自己的价值。 深刻去体认管理的价值 我们前面提过一个网吧经营成功的科技技术只因素之一，相对的是需要成本的投入，这意味着只要愿意投入成本，也就能获得相应的竞争条件，所以，在网吧的经营上最低阶的竞争就是「比配备」，配备比输人家以后就开始「比价格」，坦率的说，这种竞争很无趣也很幼稚，对产业的提升一点帮助也没有。所以透过适切管理方式去提升服务质量才是提升竞争优势的最佳方法。举一个简单的例子，要让网吧的厕所干净清香，会有人说只要请一个阿姨每天定时打扫即可，但我们认为只要有一张每日定期清洁值班表就可以了。其实管理也没有什么大道理，只要用心去观察网吧经营的每一个细节，再用心的去思考如何让每一个细节都能让玩家对我们的服务满意、员工们工作愉快、老板们都能赚钱开心。台湾的经营之神王永庆、香港的首富李嘉诚他们也都学历不高而能成功之道也就不外乎「用心」二字。我们衷心的希望我们的网管兄弟们，千万别再定位自己只是网吧的「网络管理者」甚至只是「机修」，应该提升自己眼界与心境去成为一个「网吧管理者」。 改变自己建立自信 我们常见到的网管兄弟们常常个性比较内向保守缺乏自信，其实很多的道理大家都明白，但就是没办法改变自己实践它，所以明白越多的道理心中的包袱越重，就越没自信，最后干脆躲到网络游戏的虚拟世界中，还自圆其说是因为工作需要才沉迷于游戏世界中，如果陈天桥、丁磊也跟各位一样相信绝不会造就今天的盛大跟网易。要了解游戏的趋势你可以走近店里的玩家，去跟他们聊一聊，玩家们会觉得你很亲切，你也可以节省很多时间跟精力。自己喜欢的道理或者自己觉得最需要的道理，先挑一两条改变自己确实去实践它，你的老板、你的同侪会看到你的改变、你的成长，老板们会给你更大的发挥空间，同侪们会给你更多的支持，信心会从而建立，人生会因此而不同。 最后，想给网吧的经营者一点友情的提示，我们辛苦的网管的兄弟们不舍昼夜地为网吧的正常营运而付出精力与青春，他们的生涯规划实质上已经与你的网吧与整个产业的发展紧紧的结合在一起，基于我们自身的收益与社会责任，让我们一起努力让「网管」所代表的不仅仅是「网络管理者」而能真正成为位业者赚钱为产业付出贡献的「网吧管理者」。 作者简介:高振修,台湾新竹交通大学MBA毕业,曾任巨盛资讯总经理、智冠电子市场总监、竞网数码总经理，在电子商务、网络游戏运营、网吧经营管理等领域有着多年的丰富经验。]]></description>
			<content:encoded><![CDATA[<p><P style="TEXT-INDENT: 2em">中国目前注册网吧12～13万家，加上其它网吧估计总数会有20万家左右，这样庞大的就业通道，是其它任何行业都无法比拟的。随着政府部门对网吧行业管理的放开，关于网吧经营管理经验、网吧技术提升、网吧生意经等等一系列的行业问题都受到了相关人士的关注。但作为产业化、标准化、品牌化发展脚步加快的网吧业，此行业中的一个很重要的个体—网络管理员（也就是我们常说的网管）的职业生涯规划却很少有人关注。 <P style="TEXT-INDENT: 2em">相较一般在机关单位的网络管理人员的工作性质上，又有着更高的复杂度。在机关单位的网络及计算机的使用上，通常是专人专机使用，而且使用的都是一些较单纯的办公软件或是稳定的应用程序，使用的人员在计算机知识的水平也较高，因特网运用的纪律与规范也比较好要求，所以维护起整个网络系统及计算机的妥善率比较容易；但在网吧内网络以及计算机的使用情形就大大的不同，每一部计算机每天可能就得供数十人来使用，而每一个人使用的习惯都有很大的差异，从网络黑客、游戏高手到连输入法都不会计算机新手都有，使用的软件从近千款的游戏、上万部的电影到聊天工具…等，还有一大堆危险性极高的游戏外挂、私服、下载工具，所以维护一个网吧网络安全及计算机妥善率的工作真是非常艰苦。更令人烦的是，到网吧的每一个玩家可都是花钱的大爷，每一个也都得罪不起，他们才不会管你什么「网络安全使用规定」，让网吧的维护工作更是难上加难。 <P style="TEXT-INDENT: 2em">谈到生涯规划，我们就不得不再拿机关单位的网络管理人员跟网吧网管再来做一次比较。网络管理人员每天穿着整齐洁白的衣服，在有着恒温空调的办公室上班，可以跟气质高雅的OL朝夕相处，朝九晚五工作时间固定，薪资至少3000起跳，有空的时候还可以考考证照、炒炒股票，如果命好还可以随着公司上市坐领股票，发一笔小财。我们的网吧网管呢！网吧里烟雾弥漫，不但工作时间长还得24小时待命处理突发状况，薪资低，还没有三金保险，每天还得应付水平不高的玩家，一不小心还得挨过受罚，命不好的话还会碰到一个无心经营的老板，不知道哪天网吧关门还得落个失业的下场。所以，君不见北大、清华的高材生在网吧当网管的。 </P><P style="TEXT-INDENT: 2em">跟众多的网吧网管兄弟们接触后，我们可以大致了解到大家会来担任这样的工作，通常会有以下两类心态的驱使所致： <P style="TEXT-INDENT: 2em">第一类的网吧网管是热爱游戏，沉迷于虚幻的网络世界中，心想着到网吧担任网管可以继续玩游戏还免机时费，又有薪水领，真是一举数得。通常这一类的网管兄弟，很少留心技术上的改变及店内经营上的状况。我们必须语重心长奉劝这些网管兄弟们，随着年龄渐长，技术水准并没有因为工作而提高，相对却不断失去了学习进取的时机与兴趣。躲藏于虚幻的网络世界中，终有一天必须回头面对现实生存压力。 <P style="TEXT-INDENT: 2em">第二类的网吧网管通常学历不高但深爱计算机、网络知识的钻研，所以只能选择到网吧来磨练技术。这类网管工作态度比较积极，随时都在学习并储备专业知识，也深受网吧经营者的欢迎，两者的关系真是如同伯乐与良马。但是在网吧这样一个工作环境理，计算机、网络专业知识只是一个网吧经营成功的因素之一，还有很多方面的专业知识可以学习，包括：财务管理、服务的理念、库存的管理，连锁经营…..等等，都是可以从你的老板身上学习的，或是可以透过你的用心去提升倚重你的老板。 <P style="TEXT-INDENT: 2em">不论你是怀抱着什么样的态度选择了担任这个工作，我们希望大家应有以下的态度来经营自己的未来： <P style="TEXT-INDENT: 2em"><B>热爱自己投身的网吧产业</B> <P style="TEXT-INDENT: 2em">今天我们提供了全国最大众化兼具教育与休闲的娱乐模式，在政府的重视与辅导下，他即将成为一个具影响力的产业，而遍布全国的网吧未来的影响力将不可限量，这是笔者再看过世界各地的网吧，深深觉得在中国这个市场里网吧将是最独特的一个产业，我们应该很有幸能够早别人一步投入这一个产业，把自己所在的网吧当作是自己的事业来经营，我们也应该自许这个产业因为我们的投入而将傲视全球。 </P><P style="TEXT-INDENT: 2em"><B>终身学习的目标与方法</B> <P style="TEXT-INDENT: 2em">想要成为一位老板倚重的技术网管，首要的当然是技术要过硬，但现今技术发展的速度快速，以一个个人的学习速度都有所追赶不急，更不用说到对新技术的应用与创造。所以，在学习的目标上应该针对未来网吧运用上的相关技术来做个界定，例如：游戏内容的更新技术、各式各样功能的服务器架设与规划、安全性较高的LINUX系统、各种网络设备的调校与设定…等等。我们常说在巨人的肩膀上看世界，可以看得更高更远，所以在学习的方法上可以利用一些课程来学习，以提升学习的速度。像笔者任职的竞网数码就精心规划了一系列的网管提升课程，这些都是网管兄弟们可以好好利用的。另外还有就是可以团体学习的方法来加快成长的速度，组织网吧内、外的同好大家一起分头学习，定期交流，发挥整合的综效。最后，学习有时是需要经过一段苦涩枯燥的过程，才能尝到甜美有成就的果实，唯有毅力与坚持才能达到成长的境界。 <P style="TEXT-INDENT: 2em"><B>新技术的时间价值 </B><P style="TEXT-INDENT: 2em">随着网络时代的来临，笔者发现一项新的科技技术它的生命周期是越来越短，也就是它的科技价值随着后续科技技术发展的推陈出新，导致他贬值的速度变的非常的快。所以，身为网管当你努力学习所得的成果应该尽速无私的跟你自己的团队和老板分享，共同思考如何创造出价值来提升网吧的服务质量、改善网吧的经营现况，而不是孤芳自赏，还深怕同侪学会后自己丧失优势地位，我们也常看到一些技术人员抱着这样的心态，到最后这一些人唯一存在的价值就是还记得一堆服务器的账号跟密码。所以，希望我们在了解了技术价值与时间的关联性以后，我们能好好利用新技术来创造自己的价值。 <P style="TEXT-INDENT: 2em"><B>深刻去体认管理的价值 </B><P style="TEXT-INDENT: 2em">我们前面提过一个网吧经营成功的科技技术只因素之一，相对的是需要成本的投入，这意味着只要愿意投入成本，也就能获得相应的竞争条件，所以，在网吧的经营上最低阶的竞争就是「比配备」，配备比输人家以后就开始「比价格」，坦率的说，这种竞争很无趣也很幼稚，对产业的提升一点帮助也没有。所以透过适切管理方式去提升服务质量才是提升竞争优势的最佳方法。举一个简单的例子，要让网吧的厕所干净清香，会有人说只要请一个阿姨每天定时打扫即可，但我们认为只要有一张每日定期清洁值班表就可以了。其实管理也没有什么大道理，只要用心去观察网吧经营的每一个细节，再用心的去思考如何让每一个细节都能让玩家对我们的服务满意、员工们工作愉快、老板们都能赚钱开心。台湾的经营之神王永庆、香港的首富李嘉诚他们也都学历不高而能成功之道也就不外乎「用心」二字。我们衷心的希望我们的网管兄弟们，千万别再定位自己只是网吧的「网络管理者」甚至只是「机修」，应该提升自己眼界与心境去成为一个「网吧管理者」。 </P><P style="TEXT-INDENT: 2em"><B>改变自己建立自信 </B><P style="TEXT-INDENT: 2em">我们常见到的网管兄弟们常常个性比较内向保守缺乏自信，其实很多的道理大家都明白，但就是没办法改变自己实践它，所以明白越多的道理心中的包袱越重，就越没自信，最后干脆躲到网络游戏的虚拟世界中，还自圆其说是因为工作需要才沉迷于游戏世界中，如果陈天桥、丁磊也跟各位一样相信绝不会造就今天的盛大跟网易。要了解游戏的趋势你可以走近店里的玩家，去跟他们聊一聊，玩家们会觉得你很亲切，你也可以节省很多时间跟精力。自己喜欢的道理或者自己觉得最需要的道理，先挑一两条改变自己确实去实践它，你的老板、你的同侪会看到你的改变、你的成长，老板们会给你更大的发挥空间，同侪们会给你更多的支持，信心会从而建立，人生会因此而不同。 <P style="TEXT-INDENT: 2em">最后，想给网吧的经营者一点友情的提示，我们辛苦的网管的兄弟们不舍昼夜地为网吧的正常营运而付出精力与青春，他们的生涯规划实质上已经与你的网吧与整个产业的发展紧紧的结合在一起，基于我们自身的收益与社会责任，让我们一起努力让「网管」所代表的不仅仅是「网络管理者」而能真正成为位业者赚钱为产业付出贡献的「网吧管理者」。 <P style="TEXT-INDENT: 2em">作者简介:高振修,台湾新竹交通大学MBA毕业,曾任巨盛资讯总经理、智冠电子市场总监、竞网数码总经理，在电子商务、网络游戏运营、网吧经营管理等领域有着多年的丰富经验。 </P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86%e5%91%98%e7%9a%84%e8%81%8c%e4%b8%9a%e7%94%9f%e6%b6%af%e4%b8%8e%e8%a7%84%e5%88%92/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>交换机配置物理连接技术操作与图例</title>
		<link>http://blog.1xi.net/wangluo/%e4%ba%a4%e6%8d%a2%e6%9c%ba%e9%85%8d%e7%bd%ae%e7%89%a9%e7%90%86%e8%bf%9e%e6%8e%a5%e6%8a%80%e6%9c%af%e6%93%8d%e4%bd%9c%e4%b8%8e%e5%9b%be%e4%be%8b</link>
		<comments>http://blog.1xi.net/wangluo/%e4%ba%a4%e6%8d%a2%e6%9c%ba%e9%85%8d%e7%bd%ae%e7%89%a9%e7%90%86%e8%bf%9e%e6%8e%a5%e6%8a%80%e6%9c%af%e6%93%8d%e4%bd%9c%e4%b8%8e%e5%9b%be%e4%be%8b#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:55 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e4%ba%a4%e6%8d%a2%e6%9c%ba%e9%85%8d%e7%bd%ae%e7%89%a9%e7%90%86%e8%bf%9e%e6%8e%a5%e6%8a%80%e6%9c%af%e6%93%8d%e4%bd%9c%e4%b8%8e%e5%9b%be%e4%be%8b</guid>
		<description><![CDATA[　由于笔记本电脑携带方便，所以配置交换机通常是采用笔记本电脑来进行的，实在没有笔记本的情况下，也可以采用台式机，但移动起来麻烦些。&#160; 交换机的本地配置方式是通过计算机与交换机的“Console”端口直接连接的方式进行通信的，它的连接图如图1所示。 　　可进行网络管理的交换机上一般都有一个“Console”端口（这个在前面介绍集线器时已作介绍，交换机也一样），它是专门用于对交换机进行配置和管理的。通过Console端口连接并配置交换机，是配置和管理交换机必须经过的步骤。虽然除此之外还有其他若干种配置和管理交换机的方式（如Web方式、Telnet方式等），但是，这些方式必须依靠通过Console端口进行基本配置后才能进行。因为其他方式往往需要借助于IP地址、域名或设备名称才可以实现，而新购买的交换机显然不可能内置有这些参数，所以通过Console端口连接并配置交换机是最常用、最基本也是网络管理员必须掌握的管理和配置方式。 图1 　　不同类型的交换机Console端口所处的位置并不相同，有的位于前面板（如Catalyst 3200和Catalyst 4006），而有的则位于后面板（如Catalyst 1900和Catalyst 2900XL）。通常是模块化交换机大多位于前面板，而固定配置交换机则大多位于后面板。不过，倒不用担心无法找到Console端口，在该端口的上方或侧方都会有类似“CONSOLE”字样的标识，如图2所示。 图2 　　除位置不同之外，Console端口的类型也有所不同，绝大多数（如Catalyst 1900和Catalyst 4006）都采用RJ－45端口（如图2所示），但也有少数采用DB－9串口端口（如Catalyst 3200）或DB－25串口端口（如Catalyst 2900）。 　　无论交换机采用DB－9或DB－25串行接口，还是采用RJ－45接口，都需要通过专门的Console线连接至配置用计算机（通常称作终端）的串行口。与交换机不同的Console端口相对应，Console线也分为两种：一种是串行线，即两端均为串行接口（两端均为母头），两端可以分别插入至计算机的串口和交换机的Console端口；另一种是两端均为RJ－45接头（RJ－45－to－RJ－45）的扁平线。由于扁平线两端均为RJ－45接口，无法直接与计算机串口进行连接，因此，还必须同时使用一个如图3所示的RJ－45－to－DB－9（或RJ－45－to－DB－25）的适配器。通常情况下，在交换机的包装箱中都会随机赠送这么一条Console线和相应的DB－9或DB－25适配器。]]></description>
			<content:encoded><![CDATA[<p><P>　由于笔记本电脑携带方便，所以配置交换机通常是采用笔记本电脑来进行的，实在没有笔记本的情况下，也可以采用台式机，但移动起来麻烦些。&nbsp; <br />交换机的本地配置方式是通过计算机与交换机的“Console”端口直接连接的方式进行通信的，它的连接图如图1所示。 </P><br />
<P>　　可进行网络管理的交换机上一般都有一个“Console”端口（这个在前面介绍集线器时已作介绍，交换机也一样），它是专门用于对交换机进行配置和管理的。通过Console端口连接并配置交换机，是配置和管理交换机必须经过的步骤。虽然除此之外还有其他若干种配置和管理交换机的方式（如Web方式、Telnet方式等），但是，这些方式必须依靠通过Console端口进行基本配置后才能进行。因为其他方式往往需要借助于IP地址、域名或设备名称才可以实现，而新购买的交换机显然不可能内置有这些参数，所以通过Console端口连接并配置交换机是最常用、最基本也是网络管理员必须掌握的管理和配置方式。 </P><br />
<P><img src="/article/UploadPic/2006-7/2006724133214692.jpg"></P><br />
<P>图1</P><br />
<P><br />　　不同类型的交换机Console端口所处的位置并不相同，有的位于前面板（如Catalyst 3200和Catalyst 4006），而有的则位于后面板（如Catalyst 1900和Catalyst 2900XL）。通常是模块化交换机大多位于前面板，而固定配置交换机则大多位于后面板。不过，倒不用担心无法找到Console端口，在该端口的上方或侧方都会有类似“CONSOLE”字样的标识，如图2所示。 </P><br />
<P><img src="/article/UploadPic/2006-7/2006724133214505.jpg"></P><br />
<P>图2</P><br />
<P><br />　　除位置不同之外，Console端口的类型也有所不同，绝大多数（如Catalyst 1900和Catalyst 4006）都采用RJ－45端口（如图2所示），但也有少数采用DB－9串口端口（如Catalyst 3200）或DB－25串口端口（如Catalyst 2900）。 </P><br />
<P>　　无论交换机采用DB－9或DB－25串行接口，还是采用RJ－45接口，都需要通过专门的Console线连接至配置用计算机（通常称作终端）的串行口。与交换机不同的Console端口相对应，Console线也分为两种：一种是串行线，即两端均为串行接口（两端均为母头），两端可以分别插入至计算机的串口和交换机的Console端口；另一种是两端均为RJ－45接头（RJ－45－to－RJ－45）的扁平线。由于扁平线两端均为RJ－45接口，无法直接与计算机串口进行连接，因此，还必须同时使用一个如图3所示的RJ－45－to－DB－9（或RJ－45－to－DB－25）的适配器。通常情况下，在交换机的包装箱中都会随机赠送这么一条Console线和相应的DB－9或DB－25适配器。 </P><br />
<P><img src="/article/UploadPic/2006-7/2006724133214251.jpg"></P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e4%ba%a4%e6%8d%a2%e6%9c%ba%e9%85%8d%e7%bd%ae%e7%89%a9%e7%90%86%e8%bf%9e%e6%8e%a5%e6%8a%80%e6%9c%af%e6%93%8d%e4%bd%9c%e4%b8%8e%e5%9b%be%e4%be%8b/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>了解路由器中的管理间距和量度参数</title>
		<link>http://blog.1xi.net/wangluo/%e4%ba%86%e8%a7%a3%e8%b7%af%e7%94%b1%e5%99%a8%e4%b8%ad%e7%9a%84%e7%ae%a1%e7%90%86%e9%97%b4%e8%b7%9d%e5%92%8c%e9%87%8f%e5%ba%a6%e5%8f%82%e6%95%b0</link>
		<comments>http://blog.1xi.net/wangluo/%e4%ba%86%e8%a7%a3%e8%b7%af%e7%94%b1%e5%99%a8%e4%b8%ad%e7%9a%84%e7%ae%a1%e7%90%86%e9%97%b4%e8%b7%9d%e5%92%8c%e9%87%8f%e5%ba%a6%e5%8f%82%e6%95%b0#comments</comments>
		<pubDate>Thu, 12 May 2011 06:29:55 +0000</pubDate>
		<dc:creator>liaowei</dc:creator>
				<category><![CDATA[计算机网络]]></category>

		<guid isPermaLink="false">http://blog.1xi.net/wangluo/%e4%ba%86%e8%a7%a3%e8%b7%af%e7%94%b1%e5%99%a8%e4%b8%ad%e7%9a%84%e7%ae%a1%e7%90%86%e9%97%b4%e8%b7%9d%e5%92%8c%e9%87%8f%e5%ba%a6%e5%8f%82%e6%95%b0</guid>
		<description><![CDATA[谈到路由协议和路由器时，管理间距(administrative distance)和量度(Metrics)是两组重要的参数。这两组参数真正的意思是什么呢？David Davis将向你介绍这两组参数，并解释了使用Cisco路由器需要了解管理参数重要性的原因。 当提到路由协议和路由器使用哪条通道时，管理间距和量度是两组重要参数。充分熟悉这两组参数对了解网络性能、可靠性以及回路选择等各个部分具有非常重要的作用。 如果你对管理间距和量度不太熟悉，你即便是看到了这些参数，也不会重视它们。如果你输入一条show ip route命令，你就会注意到在路由器后面的括弧里出现这两个参数。这里为一个例子： O 10.1.103.0/24 [110/791] via 10.1.100.2, 00:39:44, Serial1/0:0.21在这一例子中，110表示管理间距，791代表量度。通过输入相同的show ip route命令并指定路由器的方式，你可以看到更详细的信息，这有一个例子： Router# show ip route 10.1.103.0Routing entry for 10.1.103.0/24 Known via &#8220;ospf 100&#8243;, distance 110, metric 791, type intra area Last update from 10.1.100.2 on Serial1/0:0.21, 01:09:25 ago Routing Descriptor Blocks: * 10.1.100.2, from 172.16.1.1, 01:09:25 ago, via Serial1/0:0.21 Route [...]]]></description>
			<content:encoded><![CDATA[<p><P style="TEXT-INDENT: 2em">谈到路由协议和路由器时，管理间距(administrative distance)和量度(Metrics)是两组重要的参数。这两组参数真正的意思是什么呢？David Davis将向你介绍这两组参数，并解释了使用Cisco路由器需要了解管理参数重要性的原因。 <P style="TEXT-INDENT: 2em">当提到路由协议和路由器使用哪条通道时，管理间距和量度是两组重要参数。充分熟悉这两组参数对了解网络性能、可靠性以及回路选择等各个部分具有非常重要的作用。 <P style="TEXT-INDENT: 2em">如果你对管理间距和量度不太熟悉，你即便是看到了这些参数，也不会重视它们。如果你输入一条show ip route命令，你就会注意到在路由器后面的括弧里出现这两个参数。这里为一个例子： <P style="TEXT-INDENT: 2em"><CENTER><CCID_NOBR><TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1><TR><TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>O 10.1.103.0/24 [110/791] via 10.1.100.2, 00:39:44, Serial1/0:0.21</CCID_CODE></PRE></TD></TR></TABLE></CCID_NOBR></CENTER><P style="TEXT-INDENT: 2em">在这一例子中，110表示管理间距，791代表量度。通过输入相同的show ip route命令并指定路由器的方式，你可以看到更详细的信息，这有一个例子： <P style="TEXT-INDENT: 2em"><CENTER><CCID_NOBR><TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1><TR><TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Router# show ip route 10.1.103.0Routing entry for 10.1.103.0/24 Known via &#8220;ospf 100&#8243;, distance 110, metric 791, type intra area Last update from 10.1.100.2 on Serial1/0:0.21, 01:09:25 ago Routing Descriptor Blocks: * 10.1.100.2, from 172.16.1.1, 01:09:25 ago, via Serial1/0:0.21 Route metric is 791, traffic share count is 1</CCID_CODE></PRE></TD></TR></TABLE></CCID_NOBR></CENTER><P style="TEXT-INDENT: 2em">但是，这些数字真正的意思是什么呢？让我们详细了解每一个参数的含义。 <BR></P><P style="TEXT-INDENT: 2em"><B>管理间距</B> <P style="TEXT-INDENT: 2em">管理间距（简称AD）即为路由器面对不同来源的两路相同通道时决定对哪路通道的选择。也就是说，如果路由器收到来自不同来源但是内容相同的信息的时候，路由器信任哪一条通道。一个比较好的办法是，由于要尽力选择局部信息，而全局信息多少有些重复事件，所以局部信息更值得信任。 <P style="TEXT-INDENT: 2em">如果你的路由器只有一个路由协议和一条WAN回路，或者如果你只使用静态路由，管理间距不会对你产生影响。但是这并不表示你不需要了解管理间距的作用。 <P style="TEXT-INDENT: 2em">但是如果你有一个比较复杂的网络系统，比如有两条WAN回路，或者你使用了两个路由协议（即使其中有一个是静态路由），你就更应该了解管理间距的重要性。 <P style="TEXT-INDENT: 2em">路由资源不只是诸如RIP、OSPF或者BGP这样一些路由协议，另外可能还有一些与路由器相连接的资源（比如路由器的界面）和静态路由（你作为管理服务器使用的路由器）。 <P style="TEXT-INDENT: 2em">路由器根据管理间距来选择信任哪路资源。管理间距越小，其路由资源就越值得信任。 <P style="TEXT-INDENT: 2em">为了便于作出这一决定，路由器安装了一个在所有可能资源和默认管理间距中展示的预程序安排表。表A提供了这一表格的示范。（虽然通过使用路由器配置模式中的distance命令，使管理器改变默认的管理间距，但这通常是一种不可取的方法。） <P style="TEXT-INDENT: 2em">例如，如果路由器收到一个来自OSPF的路由和一个来自RIP的路由，它就会选择OSPF路由。因为OSPF的管理间距是110，而RIP的管理间距是120。 <P style="TEXT-INDENT: 2em">这里有另外一个例子：比如说，你的路由器收到一个来自EIGRP Internal路由，它的管理间距是90，但是你不小心把一个静态路由输入到一个IP地址中，这个IP地址的间距管理地址是1。那么路由器将使用静态路由而不会使用EIGRP路由。 <P style="TEXT-INDENT: 2em">最后强调一点：管理间距是CCNA考试中的重点。如果你正准备参加这场考试的话，一定要知道一般路由协议的管理间距。 <P style="TEXT-INDENT: 2em"><B>量度</B> <P style="TEXT-INDENT: 2em">路由协议使用量度来确定当有两路有效路由可以送往同一目标文件时，把路由表放入哪个路由中。路由器把路由表放入量度最小的路由中，因为它认为这个路由是最近的因此是最好的。 <P style="TEXT-INDENT: 2em">与管理间距相反，量度只有一个路由协议。他们不能处理多个资源库中路由。 <P style="TEXT-INDENT: 2em">例如：输入一个show ip eigrp topology命令： <P style="TEXT-INDENT: 2em"><CENTER><CCID_NOBR><TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1><TR><TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>P 10.55.103.0/24, 1 successors, FD is 6049536 via 10.220.100.1 (6049536/5537536), Serial3/0 via 10.55.100.14 (52825600/281600), Tunnel55</CCID_CODE></PRE></TD></TR></TABLE></CCID_NOBR></CENTER><P style="TEXT-INDENT: 2em">注意这个EIGRP路由协议有两路路由输送给这个网络。但是，这个路由器只接受路由表中量度最短的其中一个路由。这有一个关于路由表条目的例子： <P style="TEXT-INDENT: 2em"><CENTER><CCID_NOBR><TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1><TR><TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Router# show ip route 10.55.103.0Routing entry for 10.55.103.0/24 Known via &#8220;eigrp 100&#8243;, distance 120, metric 6049536, type internal Redistributing via eigrp 100 Last update from 10.220.100.1 on Serial3/0, 00:56:12 ago Routing Descriptor Blocks: * 10.220.100.1, from 10.220.100.1, 00:56:12 ago, via Serial3/0 Route metric is 6049536, traffic share count is 1 Total delay is 41000 microseconds, minimum bandwidth is 512 Kbit Reliability 226/255, minimum MTU 1500 bytes Loading 1/255, Hops 2</CCID_CODE></PRE></TD></TR></TABLE></CCID_NOBR></CENTER><P style="TEXT-INDENT: 2em">不同的路由协议对量度有不同的算法。RIP的算法是基于跳数的，OSPF是基于带宽，而EIGRP根据带宽、延滞时间、负荷和可靠度来决定的。 <P style="TEXT-INDENT: 2em">David Davis从事IT业已长达12年之久，而且获得了包括CCIE，MCSE+I, CISSP, CCNA, CCDA和CCNP在内的一系列证书。目前，他在一家私有零售公司担任系统/网络管理员职务，并担任网络系统的兼职顾问。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.1xi.net/wangluo/%e4%ba%86%e8%a7%a3%e8%b7%af%e7%94%b1%e5%99%a8%e4%b8%ad%e7%9a%84%e7%ae%a1%e7%90%86%e9%97%b4%e8%b7%9d%e5%92%8c%e9%87%8f%e5%ba%a6%e5%8f%82%e6%95%b0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

