一個關于計算機網絡的有趣的知乎問答 https://www.zhihu.com/question/19718686
該文摘自 百度百科的“計算機網絡”專題
要想讓兩台計算機進行通信,必須使它們采用相同的資訊交換規則。我們把在計算機網絡中用于規定資訊的格式以及如何發送和接收資訊的一套規則稱為網絡協定(network protocol)或通信協定(communication protocol)。
為了減少網絡協定設計的複雜性,網絡設計者并不是設計一個單一、巨大的協定來為所有形式的通信規定完整的細節,而是采用把通信問題劃分為許多個小問題,然後為每個小問題設計一個單獨的協定的方法。這樣做使得每個協定的設計、分析、編碼和測試都比較容易。分層模型(layering model)是一種用于開發網絡協定的設計方法。本質上,分層模型描述了把通信問題分為幾個小問題(稱為層次)的方法,每個小問題對應于一層。
在計算機網絡中要做到有條不紊地交換資料,就必須遵守一些事先約定好的規則。這些規則明确規定了所交換的資料格式以及有關的同步問題。這裡所說的同步不是狹義的(即同頻或同頻同相)而是廣義的,即在一定的條件下應當發生什麼事件(如發送一個應答資訊),因而同步含有時序的意思。這些為進行網絡中的資料交換而建立的規則、标準或約定稱為網絡協定,網絡協定也可簡稱為協定。網絡協定主要由以下三個要素組成。
① 文法,即資料與控制資訊的結構或格式。
② 語義,即需要發出何種控制資訊,完成何種動作以及做出何種響應。
③ 同步,即事件實作順序的詳細說明。
網絡協定是計算機網絡的不可缺少的組成部分。
協定通常有兩種不同的形式。一種是使用便于人來閱讀和了解的文字描述,另一種是使用計算機能夠了解的程式代碼。
對于非常複雜的計算機網絡協定,其結構應該是層次式的。分層可以帶來許多好處。
① 各層之間是獨立的。某一層并不需要知道它的下一層是如何實作的,而僅僅需要知道該層通過層間的接口(即界面)所提供的服務。由于每一層隻實作一種相對獨立的功能,因而可将一個難以處理的複雜問題分解為若幹個較容易處理的更小一些的問題。這樣,整個問題的複雜程度就下降了。
② 靈活性好。當任何一層發生變化時(例如由于技術的變化),隻要層間接口關系保持不變,則在這層以上或以下各層均不受影響。此外,對某一層提供的服務還可進行修改。當某層提供的服務不再需要時,甚至可以将這層取消。
③ 結構上可分割開。各層都可以采用最合适的技術來實作。
④ 易于實作和維護。這種結構使得實作和調試一個龐大而又複雜的系統變得易于處理,因為整個的系統已被分解為若幹個相對獨立的子系統。
⑤ 能促進标準化工作。因為每一層的功能及其所提供的服務都已有了精确的說明。
分層時應注意使每一層的功能非常明确。若層數太少,就會使每一層的協定太複雜。但層數太多又會在描述和綜合各層功能的系統工程任務時遇到較多的困難。
我們把計算機網絡的各層及其協定的集合,稱為網絡的體系結構。換種說法,計算機網絡的體系結構就是這個計算機網絡及其構件所應完成的功能的精确定義。需要強調的是:這些功能究竟是用何種硬體或軟體完成的,則是一個遵循這種體系結構的實作的問題。體系結構的英文名詞architecture的原意是建築學或建築的設計和風格。但是它和一個具體的建築物的概念很不相同。我們也不能把一個具體的計算機網絡說成是一個抽象的網絡體系結構。總之,體系結構是抽象的,而實作則是具體的,是真正在運作的計算機硬體和軟體。
圖5.8所示是計算機網絡體系結構示意圖。
圖5.8 計算機網絡體系結構表示圖
其中圖5.8(a)是OSI的七層協定體系結構圖、圖5.8(b)是TCP/IP四層體系結構、圖5.8(c)是五層協定的體系結構。五層協定的體系結構綜合了前兩種體系結構的優點,既簡潔又能将概念闡述清楚。
為了減少網絡設計的複雜性,絕大多數網絡采用分層設計方法。所謂分層設計方法,就是按照資訊的流動過
網絡協定分層示意圖
程将網絡的整體功能分解為一個個的功能層,不同機器上的同等功能層之間采用相同的協定,同一機器上的相鄰功能層之間通過接口進行資訊傳遞。為了便于了解接口和協定的概念,我們首先以郵政通信系統為例進行說明。人們平常寫信時,都有個約定,這就是信件的格式和内容。首先,我們寫信時必須采用雙方都懂的語言文字和文體,開頭是對方稱謂,最後是落款等。這樣,對方收到信後,才可以看懂信中的内容,知道是誰寫的,什麼時候寫的等。當然還可以有其他的一些特殊約定,如書信的編号、間諜的密寫等。信寫好之後,必須将信封裝并交由郵局寄發,這樣寄信人和郵局之間也要有約定,這就是規定信封寫法并貼郵票。在中國寄信必須先寫收信人位址、姓名,然後才寫寄信人的位址和姓名。郵局收到信後,首先進行信件的分揀和分類,然後傳遞有關運輸部門進行運輸,如航空信交民航,平信交鐵路或公路運輸部門等。這時,郵局和運輸部門也有約定,如到站地點、時間、包裹形式等等。信件運送到目的地後進行相反的過程,最終将信件送到收信人手中,收信人依照約定的格式才能讀懂信件。如圖所示,在整個過程中,主要涉及到了三個子系統、即使用者子系統,郵政子系統和運輸子系統。各種約定都是為了達到将信件從一個源點送到某一個目的點這個目标而設計的,這就是說,它們是因資訊的流動而産生的。可以将這些約定分為同等機構間的約定,如使用者之間的約定、郵政局之間的約定和運輸部門之間的約定,以及不同機構間的約定,如使用者與郵政局之間的約定、郵政局與運輸部門之間的約定。雖然兩個使用者、兩個郵政局、兩個運輸部門分處甲、乙兩地,但它們都分别對應同等機構,同屬一個子系統;而同處一地的不同機構則不在一個子系統内,而且它們之間的關系是服務與被服務的關系。很顯然,這兩種約定是不同的,前者為部門内部的約定,而後者是不同部門之間的約定。
在計算機網絡環境中,兩台計算機中兩個程序之間進行通信的過程與郵政通信的過程十分相似。使用者程序對應于使用者,計算機中進行通信的程序(也可以是專門的通信處理機〕對應于郵局,通信設施對應于運輸部門。為了減少計算機網絡設計的複雜性,人們往往按功能将計算機網絡劃分為多個不同的功能層。網絡中同等層之間的通信規則就是該層使用的協定,如有關第N層的通信規則的集合,就是第N層的協定。而同一計算機的不同功能層之間的通信規則稱為接口( i n t e r f a c e),在第N層和第(N+ 1)層之間的接口稱為N /(N+ 1)層接口。總的來說,協定是不同機器同等層之間的通信約定,而接口是同一機器相鄰層之間的通信約定。不同的網絡,分層數量、各層的名稱和功能以及協定都各不相同。然而,在所有的網絡中,每一層的目的都是向它的上一層提供一定的服務。協定階層化不同于程式設計中子產品化的概念。在程式設計中,各子產品可以互相獨立,任意拼裝或者并行,而層次則一定有上下之分,它是依資料流的流動而産生的。組成不同計算機同等層的實體稱為對等程序( peer process)。對等程序不一定非是相同的程式,但其功能必須完全一緻,且采用相同的協定。分層設計方法将整個網絡通信功能劃分為垂直的層次集合後,在通信過程中下層将向上層隐蔽下層的實作細節。但層次的劃分應首先确定層次的集合及每層應完成的任務。劃分時應按邏輯組合功能,并具有足夠的層次,以使每層小到易于處理。同時層次也不能太多,以免産生難以負擔的處理開銷。計算機網絡體系結構是網絡中分層模型以及各層功能的精确定義。對網絡體系結構的描述必須包括足夠的資訊,使實作者可以為每一功能層進行硬體設計或編寫程式,并使之符合相關協定。但我們要注意的是,網絡協定實作的細節不屬于網絡體系結構的内容,因為它們隐含在機器内部,對外部說來是不可見的。現在我們來考查一個具體的例子:在圖1 - 11所示的5層網絡中如何向其最上層提供通信。在第5層運作的某應用程序産生了消息M,并把它交給第4層進行發送。第4層在消息M前加上一個資訊頭(h e a d e r),資訊頭主要包括控制資訊(如序号)以便目标機器上的第4層在低層不能保持消息順序時,把亂序的消息按原序裝配好。在有些層中,資訊頭還包括長度、時間和其他控制字段。在很多網絡中,第4層對接收的消息長度沒有限制,但在第3層通常存在一個限度。是以,第3層必須将接收的入境消息分成較小的單元如封包分組( p a c k e t),并在每個封包分組前加上一個報頭。在本執行個體中,消息M被分成兩部分:M 1和M 2。第3層确定使用哪一條輸出線路,并将封包傳給第2層。第2層不僅給每段消息加上頭部資訊,而且還要加上尾部資訊,構成新的資料單元,通常稱為幀( f r a m e),然後将其傳給第1層進行實體傳輸。在接收方,封包每向上遞交一層,該層的報頭就被剝掉,決不可能出現帶有N層以下報頭的封包交給接收方第N層實體的情況。要了解圖1 - 11示意圖,關鍵要了解虛拟通信與實體通信之間的關系,以及協定與接口之間的差別。比如,第4層的對等程序,在概念上認為它們的通信是水準方向地應用第四層協定。每一方都好像有一個叫做“發送到另一方去”的過程和一個叫做“從另一方接收”的過程,盡管實際上這些過程是跨過3 / 4層接口與下層通信而不是直接同另一方通信。抽象出對等程序這一概念,對網絡設計是至關重要的。有了這種抽象技術,網絡設計者就可以把設計完整的網絡這種難以處理的大問題,劃分成設計幾個較小的且易于處理的問題,即分别設計各層。
服務(s e r v i c e)這個極普通的術語在計算機網絡中無疑是一個極重要的概念。在網絡體系結構中,服務就是網絡中各層向其相鄰上層提供的一組操作,是相鄰兩層之間的界面。由于網絡分層結構中的單向依賴關系,使得網絡中相鄰層之間的界面也是單向性的:下層是服務提供者,上層是服務使用者。而服務的表現形式是原語( p r i m i t i v e),比如庫函數或系統調用。為了更好地讨論網絡服務,我們先解釋幾個術語。在網絡中,每一層中至少有一個實體( e n t i t y)。實體既可是軟體實體(比如一個程序),也可以是硬體實體(比如一塊網卡)。在不同機器上同一層内的實體叫做對等實體(peerentity)。N層實體實作的服務為N+ 1層所利用,而N層則要利用N-1層所提供的服務。N層實體可能向N+1層提供幾類服務,如快速而昂貴的通信或慢速而便宜的通信。N+1層實體是通過N層的服務通路點(Service Access Point,SAP)來使用N層所提供的服務。N層SAP就是N+ 1層可以通路N層服務的地方。每一個SAP都有一個唯一位址。為了使讀者更清楚,我們可以把電話系統中的SAP看成标準電話插孔,而SAP位址是這些插孔的電話号碼。要想和他人通話,必須知道他的SAP位址(電話号碼)。在伯克利版本的U n i x系統中,SAP是“S o c k e t”,SAP位址是S o c k e t号。鄰層間通過接口要交換資訊。N+1層實體通過S A P把一個接口資料單元(Interface Data Unit,IDU)傳遞給N層實體,如圖1 - 1 2所示。I D U由服務資料單元(Service Data Unit,SDU)和一些控制資訊組成。為了傳送S D U,N層實體可以将S D U分成幾段,每一段加上一個報頭後作為獨立的協定資料單元(Protocol Data Unit,PDU)送出,如“分組”就是P D U。P D U報頭被同層實體用來執行它們的同層協定,用于辨識哪些P D U包含資料,哪些包含控制資訊,并提供序号和計數值等。在網絡中,下層向上層提供的服務分為兩大類:面向連接配接服務( connection-oriented service)和無連接配接服務(connectionless service)。面向連接配接服務是電話系統服務模式的抽象。每一次完整的資料傳輸都必須經過建立連接配接、資料傳輸和終止連接配接三個過程。在資料傳輸過程中,各資料包位址不需要攜帶目的位址,而是使用連接配接号。連接配接本質上類似于一個管道,發送者在管道的一端放入資料,接收者在另一端取出資料。其特點是接收到的資料與發送方發出的資料在内容和順序上是一緻的。無連接配接服務是郵政系統服務模式的抽象。其中每個封包帶有完整的目的位址,每個封包在系統中獨立傳送。無連接配接服務不能保證封包到達的先後順序,原因是不同的封包可能經不同的路徑去往目的地,是以先發送的封包不一定先到。無連接配接服務一般也不對出錯封包進行恢複和重傳。換句話說,無連接配接服務不保證封包傳輸的可靠性。在計算機網絡中,可靠性一般通過确認和重傳(acknowledgement and retransmission)機制實作。大多數面向連接配接服務都支援确認重傳機制,但确認和重傳将帶來額外的延遲。有些對可靠性要求不高的面向連接配接服務(如數字電話網)不支援重傳;因為電話使用者甯可聽到帶有雜音的通話,也不喜歡等待确認所造成的延遲。大多數無連接配接服務不支援确認重傳機制,是以無連接配接傳輸服務往往可靠性不高。