交換機、路由器、網橋和區域網/引言
| 此頁面或部分內容為未完成的草稿或提綱。 您可以幫助完善作品,或者您可以在專案室尋求幫助。 |
使用者對計算機網路有著非常高的期望:即使在跨越全球通訊時,我們也期望網路延遲最小且可靠性高。但是提供這種通訊的硬體有時會發生故障,或者需要升級。網際網路也不是一個靜態的系統:每天都會連線新的網路,並且一些舊的網路會暫時或永久停止工作。用於計算機網路的系統需要檢測並解決錯誤,並且自動執行此操作,而無需等待人工干預。錯誤可能發生在任何級別,從可能改變電線上單個資訊位的少量電干擾或宇宙射線,到一條橫跨大西洋的網路主幹電纜被船錨切斷。
在理論上,編寫一個可以處理所有這些意外情況的單一協議是可行的,但在實踐中,處理所有可能的錯誤源的需求會很快使其變得難以管理。此外,部署一個單一的整體協議存在政治問題:每個人都必須使用相同的協議,並且每個人都必須同時採用它。
發展出的解決方案在軟體工程中很常見:使用抽象。網路是根據一系列層實現的,每一層只解決網路通訊整個問題的一小部分。但是,每一層都可以依靠其下層提供的服務,以便整個堆疊協同工作可以解決任何單個層都無法解決的問題。此外,分層模型意味著網路的不同部分可以透過不同的方式解決較低層的問題,只要它們都實現較高層依賴的相同介面即可。
1978 年,國際標準化組織 (ISO) 發起的開放系統互連 (OSI) 專案首次嘗試標準化網路層。該小組的成果描述了 7 個網路層,並指定了一套在每個層上執行的協議。儘管指定的協議並未流行,並被 TCP/IP 取代,但 7 層的概念仍然存在,至今仍用於描述網路協議。協議沒有嚴格必要遵守 OSI 7 層模型,事實上,許多協議模糊了邊界或將幾個層的函式合併到一個協議中,但層號對於非正式通訊仍然有用。
堆疊的最低層處理從一個地方到另一個地方傳送訊號的物理細節。通常,此資訊以電訊號或雷射光編碼的形式傳輸,但原則上可以使用任何通訊方式。例如,如果您有辦法將二進位制資料編碼成從揚聲器到麥克風的音訊(使用第二個揚聲器和麥克風以相反方向傳送資料),那麼您可以在此物理層之上使用其餘的標準協議,而無需更改它們。
物理層不必提供完全可靠的傳輸:上層負責檢測錯誤並在必要時重新發送資料。物理層僅提供某種將資料從一個節點傳播到另一個節點的方式。
除其他事項外,物理層協議的規範需要指定電訊號的電壓或雷射的頻率和功率、聯結器的尺寸和形狀、訊號調製以及多個節點共享同一鏈路的方式。
資料鏈路層負責提供在兩個節點之間傳輸資料的方法,如果可能,檢測或糾正物理層中的錯誤。第 2 層引入了唯一地址的概念,這些地址標識正在通訊的節點。與第 3 層不同,資料鏈路層地址使用扁平結構,即地址的結構不會提供任何有關節點相對位置或流量應在它們之間採取的路由的資訊。
最熟悉的資料鏈路層協議是乙太網,儘管乙太網標準也指定了物理層的詳細資訊。
網路層建立在較低層的基礎上,以支援跨互連網路(而不是單個網路內)路由資料。網路層中的定址利用分層結構,以便可以將數千或數百萬個主機的路由彙總為單個資訊。通常,彼此位於同一網路上的節點將在其第 3 層地址上共享一個共同的字首。第 3 層通訊不包含持續連線的概念:在通訊主機對之間傳送的每個資料包都分別處理,並且不知道之前傳送的資料包。第 3 層協議可能能夠糾正物理層或資料鏈路層引入的資料包中的錯誤,但不能保證不會丟失任何資料包。
傳輸層允許通訊主機在其之間建立持續連線。第 4 層協議可能會檢測丟失的資料包並透過重新傳輸資料包來進行補償,但並非所有協議都這樣做:最明顯的是,TCP 提供可靠的傳輸,但 UDP 不提供。提供可靠的傳輸會產生開銷,並且某些資料在稍微延遲後就會變得過時(例如,即時電話或視訊會議的資料),因此在某些情況下,不可靠的傳輸是可取的。
OSI 模型允許第五層提供建立、維護和銷燬終端使用者應用程式之間半永久性會話的機制。例如,它可能使檢查點和恢復通訊會話成為可能,或者使來自不同來源的多個流同步。在實踐中,儘管有一些協議提供了此類功能,但第 5 層很少被視為一個通用概念。
第 6 層是將對應用程式有意義的資料結構對映到位元組流的層,其細節不需要關注較低層。理論上,這使應用程式層不必擔心一個計算機平臺與另一個計算機平臺之間的差異,例如,使用 ASCII 編碼其文字檔案的計算機與使用 EBCDIC 的計算機進行通訊。在實踐中,協議很少費心將此層與最高層(應用程式層)區分開來,將兩者組合視為一層。
應用層包含描述通訊應用程式特定細節的協議。FTP、HTTP和SMTP都是應用層協議。
每個協議層限制的通訊方面的區別,起初可能看起來不重要或武斷。對於最簡單的網路(僅由兩臺透過一根電纜連線的計算機組成)來說確實如此。但是,隨著網路節點數量的增加,明確區分每一層的職責變得越來越有用。
兩臺計算機可以共享一根物理電纜,但如果我們想將第三臺計算機新增到這個微型網路中,該如何連線呢?我們是否嘗試透過切割電纜並在電纜上接入分支來共享同一根物理電纜?理論上這可能行得通,但在實踐中會缺乏靈活性:除了切割和拼接電纜所需的時間外,在不中斷現有網路使用者網路的情況下,很難將節點新增到網路中。更易於維護的解決方案是將每臺計算機插入一個通用的集線器。集線器上將有網路插座,我們的網路電纜可以插入其中,集線器內的電路將確保只要電纜插入,它就能與任何其他已連線的電纜傳送和接收訊號。
集線器是一個純粹的物理層裝置。它不知道它傳輸的任何訊號的含義,也不會對哪些訊號應該去哪裡或資料是否損壞做出任何決策。每根電纜上的每個訊號都會複製到所有其他電纜上。
使用物理層集線器的替代方案是使用2層交換機連線主機。與集線器不同,交換機嘗試處理它接收到的資料,以便了解有關正在傳輸的資料包的一些資訊。交換機只會解析資料包的2層內容,將所有更高層的資料視為可以傳輸而無需理解的資料塊。解析2層包裝器的優點是它包含資料包的源地址和目標地址。如果交換機知道資料包傳送的方向(基於目標地址及其對網路的瞭解),它可以僅將資料包傳送到網路上的一個鏈路,從而節省頻寬。如果交換機不知道將資料包傳送到哪裡,它會將其傳送到除接收資料包的介面之外的所有介面:這稱為泛洪。
使用交換機代替集線器可以節省頻寬(透過僅在需要接收資料包的鏈路上傳送資料包),唯一的缺點是交換機是更復雜的裝置,可能成本更高或需要額外的配置。實際上,簡單的交換機不需要任何配置,並且早已變得與集線器一樣便宜(甚至更便宜,因為現在對物理層集線器的需求很少)。
此討論忽略了交換機如何準確知道將特定資料包傳送到哪裡。當交換機首次連線到網路時,它對網路一無所知。在沒有任何知識的情況下,它必須將其接收到的每個資料包泛洪到每個埠,其行為與集線器幾乎相同。但是,交換機可以從它看到的每個資料包中學習,這意味著它可以做出更好的決策。例如,如果交換機在介面2上接收一個源地址為A、目標地址為B的資料包,它可以得出結論:源地址A可以透過介面2訪問。下次它接收到目標地址為A的資料包時(無論它是否來自地址B),它都可以直接將其轉發到介面2,從而節省其他鏈路上的頻寬。
因此,每個交換機內部都有一個將2層地址對映到埠號的表。此表的尺寸受可用記憶體的限制,以及在表中查詢地址的速度(為了能夠在沒有太多延遲的情況下轉發資料包,必須非常快速地查詢資料包)。啟用此快速查詢的專業硬體非常昂貴,因此,在實踐中,如果您希望您的交換機具有更大的2層地址容量,則必須準備為此額外付費。家庭網路交換機可能能夠儲存幾千個地址,而高階資料中心交換機可以處理數萬或數十萬個地址。
無論您在交換機上花費多少,它都永遠無法處理其查詢表中網際網路上數十億個主機中的每一個的條目。處理此問題的唯一合理方法是將網路分解成多個部分,並一次儲存有關一部分的資訊。這就是路由(在第3層進行)與交換(在第2層進行)的不同之處。
