查IP位址/IP網路設計系列講座(一):基本原則
IP網路設計系列講座(一):基本原則
導言
一個優秀的網路設計是建立一切成功的網路應用的基礎。本文是四篇講座文章的第一篇,重點介紹基於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層的廣域網架構,你就不要增加另外一層而放棄基本的設計原則。無論是增加一層或者搭配其他一些層都是破壞原來的設計。如果為了“快速修復某些瑕疵”而頻繁修改基本的設計,原來設計的基本原則就會淡忘,網路設計也就不再不存在了。網路設計如果不全面地、準確地按照原來的設計計畫執行,網路設計就僅僅是一個學術研究活動。沒有設計這個網路的工程師的許可,原來的設計方案不應該做任何改動。
可預見性是一個優秀設計的品質證明。性能的可預見性和一致性,彈性和可升級性是一個設計良好的網路的特點。
一次設計好,否則就要設計一千次!如果一個網路開始的時候沒有好好設計,或者如果那個設計被改動了,那麼,對這個排除故障和增加新設備等日常的任務本身就會變成設計任務。這是因為,沒有一個一直被遵守的合法的設計,基本的網路變化就不是任何一個計畫的一部分。因此,這些變化必須被當作單獨的項目對待。沒有可預見性並且偏離了設計計畫,對這個網路進行的任何改變都必須要進行獨立的評估。這就是我說的“設計一千次網路!”。
設計需要一個有能力的一號人物負責,無論多有技術和多有經驗,設計網路需要一個人的絕對權威。設計一個網路包括一般地和詳細地平衡優先等級、權衡性能和解決廣泛的技術問題。一個設計團隊需要擁有不同專長和實力的人員。有些人負責解決一般的問題,有些人負責解決難題。然而,我強烈地強調指出,委員會不應該設計網路。一般事情歸管理層領導的一組有能力的工程師應該能夠解決網路設計過程中的細節問題。