导言
一个优秀的网络设计是建立一切成功的网络应用的基础本文是四篇讲座文章的第一篇重点介绍基于IP的网络设计因为IP实际上已经成为标准的桌面协议高级IP网络支持的应用在本质上已经日益变得多元化IP已经同传统的数据应用一起成为语音视频和多媒体等实时应用的一种传输机制由于当前应用有许多不同的性质IP互联网设计从来没有像现在这样具有挑战性本文讨论在设计网络时应该遵循的一些基本原则以后的文章将介绍用来熟练地进行网络设计的具体的局域网和广域网技术
需要一个设计计划
大多数IP互联网络从设计方面说都属于两大类之中的一类一类显然是设计非常好的网络另一类只是临时批凑起来的网络这两类网络明显的区别显示了良好的设计的重要性一个设计良好的网络的特点是在下面的每一个领域都有可预见性和一致性:
性能
在主要网络性能参数方面能够保持不变的高水平性能这些参数可能包括应用程序响应时间和响应时间的变化
弹性
网络应该为其支持的应用程序提供一个有弹性的平台一个高度专用的网络比需要满足所有的应用程序的%的可用性目标并且能够满足重要任务应用程序零关机时间的要求理想的情况是任何一个连接的失败或者客户机至服务器之间的任何一台网络设备的故障都不应该导致客户机与服务器之间通信进程的丢失自动绕过故障启用备份线路的功能应该在极短的时间内完成这个时间的间隙应该足以把当前通信进程的影响降低到最小的程度这个间隔时间称作收敛时间可根据网络拓扑结构变化的时间长度来确定(如一个连接的丢失)直到网络上的每一台设备都知道这个变化一个设计良好的网络总是一直保持较低的收敛时间
可伸缩性
一个具有可伸缩性的网络能够充分支持网络的扩容而不需要进行重大的重新设计在用户数量的增长方面网络节点或者站点的数量必须能够满足可能增加新的应用程序和这些应用程序可能消耗更多的带宽的需求要获得对你的网络的伸缩性的认识你需要回答下列问题:如果用户数量增加一倍节点数量增加一倍并且有需要一倍带宽的应用程序你该怎么办?一个具有伸缩性的网络能够容纳这种增长和变化而不需要对基础设置进行全面修改基础的网络拓扑结构和使用的技术不必为了容纳这些变化而进行重新设计新的用户和节点可以用一个简单的构建模块的方式添加到一个可伸缩的网络中例如新的节点应该简单地把新的网段或者模块与作为网络核心和骨干的现有的网络结构结合在一起应该采用根据需要适当地增加局域网和广域网带宽的方式来容纳增加的带宽在增加网络路由器和交换机的内存和处理能力等网络寿命周期之间某些运营的升级也许还是必要的然而不应该做的事情是在网络的寿命周期内不应该为了支持计划之中的增长而对这个网络基础设施进行全面的修改这就是一开始就要有一个网络计划的根本原因之一
运行成本
成本是网络设计过程之中最基本的推动因素这是一个不可回避的事实网络不仅必须要满足某些技术规范而且必须在设计和应用上更划算拥有一个网络的主要成本通常是服务提供商提供的广域网的费用那是帧中继ATM租赁线路或者ISDN技术的费用
网络设计的特点是权衡性能和可用性的成本例如要保证优化的应用程序平台可能需要更多的带宽然而这里有一个临界点超过了这个限度去购买更多的带宽就不划算
同样备份线路或者ISDN可以用来在客户机与服务器的通道之中保证网络的弹性一旦主要数据通道出现故障即可立即启用保证线路畅通这种备份技术必须与主要连接线路的速度相同以避免在发生故障时降低服务质量对于用户来说在发生故障时降低服务质量是否可以容忍是一个经济性的决策
一个设计良好的网络不仅运行起来节省成本而且还应该保持相对一致的运行成本能够说明运行成本的一致性和可预见性的重要性的最佳例子之一是就是技术支持的成本问题拥有网络的成本的第二大组成部分(仅次于广域网成本)就是技术支持的成本这也是最容易忽略的一个成本要素主要是因为技术支持的成本很难量化
例如为了减少ATM服务提供商收取的广域网的费用可以决定采用一种私人管理的应用ATM的方式虽然这样做毫无疑问可以减少广域网成本但是这样做会导致技术支持费用的增加要为一个专用ATM网络提供技术支持需要一个具有相当水平的技术人员雇用和保留一个这样的技术人员是很昂贵的然而如果在公司内部没有这种技术人员使用外部人员提供技术支持的费用将更高例如使用外部的技术顾问或者使用第三方填补这个空缺以保证系统每天的顺利运行
设计目标
在设计开始的时候制定一个明确的设计目标是必不可少的这些目标与用来评估网络设计的一些参数有关关键的性能参数必须要确定下来并且为这些参数分配目标值这些性能的目标最终是由应用程序的要求规定的
要以有意义的方式分配这些目标应用程序必须知道数量和质量的水平必须评估应用程序消耗的带宽以便提供必要的容量来满足性能目标必须清楚地了应用程序包对数据包丢失数据包延迟和各种延迟的敏感性这在支持多种应用程序的现代网络中是特别重要的数据包丢失对于使用UDP协议传输的数据应用程序的影响比对需要可靠连接的TCP协议应用程序的影响还要严重
相反对于数据包丢失数据包延迟和各种延迟来说语音视频和多媒体等实时应用程序能够更容忍数据包丢失因此对于不同的网络应用程序应该采用优先等级不同的质量参数目标值应该设置网络的可用性或者关机时间同性能目标一样这个目标在设计过程中将作为一个质量的标准
允许的网络关机时间的水平与商业应用程序本身有很大的关系应用程序不能使用造成的影响在不同的行业有很大区别在金融行业可能造成每小时数万美元的损失在医疗行业有可能造成性命的损失
对于网络可能升级的规模应该提供一个预测这种预测目标应该包括网络用户增加的数量网络节点的增加数量地理位置数量的增加以及更重要的应用程序通信量的增加等网络设计师的任务就是制定一个能够容纳这些增长的网络计划
如果一个网络不是一个成本低效率高的解决方案设计这种具有性能弹性和可伸缩性的网络就是没有用处的设计师必须要非常清楚地了解预算的限制以便对权衡成本和可用性做出聪明的决策
存档设计目标
网络设计需要把对技术以及各种技术之间的关系等方面的理论知识与广泛的实践经验结合起来实践经验是特别重要的并且常常被人们忽略按照我的观点一个没有丰富的网络技术支持经验的网络工程师不能进行网络设计工作能够让你达到设计目标的工具包含在技术本身你需要有很好的这方面的知识和了解
例如具有可伸缩性的路由协议成本低效率高的广域网传输技术网络管理等知识都需要掌握我一直建议实验室的工作是进行概念证明测试设计必须在实验室中进行而不是理论上的纸上谈兵这样多的技术一起使用和交叉使用太复杂了在真正的测试平台以外的任何东西上都是不能验证的
下面这些步骤提供一个大概的指南在设计过程中遵循这些步骤可以完成基本的设计任务:
确定性能参数具体说明每一个设计目标例如应用程序响应时间数据包损失百分比延迟和应用程序可用性等
找出任何设计的局限性最明显的局限性是预算其它局限性可能包括实施的时间表老式设备的技术支持以及结合需要独特的网络规范和政策的专业部门
在考虑到系统规定参数之后制定相关网络参数的目标
开始进行高水平的设计这是要解决一些主要的问题如选择广域网技术和设备IP地址计划使用路由而不使用交换的程度等等
这种高水平设计应该与系统规定参数是一样的如果这种系统规定参数不能满足迭代步骤的要求就需要向下兼容在满足系统规定参数的要求时设计过程可以继续进行
现在具体的网络设计计划可以开始形成了这要解决设计的全部技术细节和替代方法
技术解决方案的每一个重要方面都要在实验室进行测试应用程序的响应时间和可用性等特点要在实验室测试这有助于逐步地精细调整这个技术解决方案
在技术设计完全进行精细调整之后这个设计就完成了在某些情况下最终的实验室测试结果可能表明基本的性能目标或者系统规定参数是不切合实际的必须要进行修改和采取折衷的方案然而这些参数最好在高水平设计阶段临时确定下来
网络设计原则
现在总结一下成功的网络设计必须要遵循的一些关键的原则我看到过的最糟糕的网络应用的根本原因都是由于没有遵守这些网络设计原则
应用程序推动设计的需求网络是保证应用程序顺利运行的结构不了解应用程序的特点及其要求网络就不能设计
网络设计需要有经验的人网络设计工程师需要广泛的实践经验同时从理论上了解技术和各种技术之间的相互关系广泛的实践经验应该被认为是完成设计任务的先决条件你不了解网络是如何工作的你就不能设计网络
网络是在实验室设计的而不是在纸上设计的实验室是一个最重要的设计工具考虑到更高级的网络设计的复杂性一个设计方案没有经过实验室的验证就不是有效的设计网络模型软件也是可以信赖的互连网络包含了多种复杂的技术这些技术必须能够成功地相互交流按照我的观点一个大型的或者复杂的网络设计采用模型是不可靠的这种模型仅适用于高级设计当解决具体的技术细节问题时就需要实验室
网络设计通常包含许多权衡成本与性能和可用性通常是最基本的设计权衡因素
不要设法借鑒公司结构网络设计和拓扑结构经常反应了一个机构的公司结构虽然没有必要阻止设法借鑒公司结构的方法但是网络设计师一定不要受这种结构的束缚这种方法将导致网络设计出现最基本的错误要记住设计目标才是推动设计的惟一因素
不依赖于厂商不鼓励采用专有的解决方案应该自动避免出现上述情况有很多例子表明站主导地位的厂商能够提供最佳的解决方案
简单地说不必要地增加复杂性可能会提高技术支持成本使网络更难管理而且每一次不必要地采用复杂的解决方案都可能增加使用有瑕疵的软件应该永远采用最简单和最可行的解决方案只有在有好处或者有要求的情况下增加网络的复杂性才是合理的
根据每一个网络本身的优点设计网络不要使用一套严格的和可能过于全面的设计规则和模板考虑到每一个网络都有自己的优点避免因为表面上相似就简单模仿现有的解决方案避免采用最高级的技术对于网络上所有的设备都要采用成熟的和经过测试的软件和硬件
基本的设计计划必须要坚决执行这个设计也许必须显示出某种程度的灵活性并且随着网络一起发展这与具有可伸缩性的设计有关但是基本的设计方案一定不能妥协例如如果你应用一个层的广域网架构你就不要增加另外一层而放弃基本的设计原则无论是增加一层或者搭配其它一些层都是破坏原来的设计如果为了快速修复某些瑕疵而频繁修改基本的设计原来设计的基本原则就会淡忘网络设计也就不再不存在了网络设计如果不全面地准确地按照原来的设计计划执行网络设计就仅仅是一个学术研究活动没有设计这个网络的工程师的许可原来的设计方案不应该做任何改动
可预见性是一个优秀设计的质量证明性能的可预见性和一致性弹性和可升级性是一个设计良好的网络的特点
一次设计好否则就要设计一千次!如果一个网络开始的时候没有好好设计或者如果那个设计被改动了那么对这个排除故障和增加新设备等日常的任务本身就会变成设计任务这是因为没有一个一直被遵守的合法的设计基本的网络变化就不是任何一个计划的一部分因此这些变化必须被当作单独的项目对待没有可预见性并且偏离了设计计划对这个网络进行的任何改变都必须要进行独立的评估这就是我说的设计一千次网络!
设计需要一个有能力的一号人物负责无论多有技术和多有经验设计网络需要一个人的绝对权威设计一个网络包括一般地和详细地平衡优先等级权衡性能和解决广泛的技术问题一个设计团队需要拥有不同专长和实力的人员有些人负责解决一般的问题有些人负责解决难题然而我强烈地强调指出委员会不应该设计网络一般事情归管理层领导的一组有能力的工程师应该能够解决网络设计过程中的细节问题