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