協議森林01 郵差與郵局 (網路通訊協定概觀)Linux進程基礎Linux處理序間通訊

來源:互聯網
上載者:User

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

訊號的傳輸總要符合一定的協議(protocol)。比如說長城上放狼煙,是因為人們已經預先設定好狼煙這個物理訊號代表了“敵人入侵”這一抽象訊號。這樣一個“狼煙=敵人入侵”就是一個簡單的協議。協議可以更複雜,比如摩爾斯碼(Morse Code),使用簡訊號和長訊號的組合,來代表不同的英文字母。比如SOS(***---***,  *代表簡訊號,-代表長訊號)。這樣"***= S, ---=O"就是摩爾斯碼規定的協議。然而更進一層,人們會知道SOS是求助資訊,原因是我們有“SOS=求救”這個協議存在在腦海裡。所以"***---***=SOS=求救"是一個由兩個協議組成的分層通訊系統。

使用Morse Code的電報機

電腦之間的通訊也要遵循不同層次的協議,來實現電腦的通訊。

 

物理層(physical layer)

所謂的物理層,是指光纖、電纜或者電磁波等真實存在的物理媒介。這些媒介可以傳送物理訊號,比如亮度、電壓或者振幅。對於數字應用來說,我們只需要兩種物理訊號來分別表示0和1,比如用高電壓表示1,低電壓表示0,就構成了簡單的物理層協議。針對某種媒介,電腦可以有相應的介面,用來接收物理訊號,並解讀成為0/1序列。

 串連層(link layer)

在串連層,資訊以幀(frame)為單位傳輸。所謂的幀,是一段有限的0/1序列。串連層協議的功能就是識別0/1序列中所包含的幀。比如說,根據一定的0/1組合識別出幀的起始和結束。在幀中,有收信地址(Source, SRC)和送信地址(Destination, DST),還有能夠探測錯誤的校正序列(Frame Check Sequence)。當然,幀中最重要的最重要是所要傳輸的資料 (payload)。這些資料往往符合更高層協議,供網路的上層使用。與資料相配套,幀中也有資料的類型(Type)資訊。串連層協議不關心資料中到底包含什麼。幀就像是一個信封,把資料包裹起來。

乙太網路(Ethernet)和WiFi是現在最常見的串連層協議。通過串連層協議,我們可以建立局域的乙太網路或者WiFi區域網路,並讓位於同一區域網路絡中的兩台電腦通訊。串連層就像是一個社區的郵差,他認識社區中的每一戶人。社區中的每個人都可以將一封信(幀)交給他,讓他送給同一社區的另一戶人家。

串連層:社區小郵差

 

網路層(network layer)

不同的社區之間該如何通訊呢? 換句話說,如何讓WiFi上的一台電腦和乙太網路上的另一台電腦通訊呢?我們需要一個“中間人”。這個“中間人”必須有以下功能: 1. 能從物理層上在兩個網路的接收和發送0/1序列,2. 能同時理解兩種網路的框架格式。路由器(router)就是為此而產生的“翻譯”。一個路由器有多個網卡(NIC,Network Interface Controller),每個NIC可以接入多個網路,並理解相應的串連層協議。在幀經過路由到達另一個網路的時候,路由會讀取幀的資訊,並改寫以發送到另一個網路。所以路由器就像是在兩個社區都有分支的郵局。一個社區的郵差將信送到本社區的郵局分支,而郵局會通過自己在另一個地區的分支將信轉交給另一個社區的郵差手中,並由另一個社區的郵差最終送到目的地。

通過路由串連的WiFi和乙太網路

整個通訊過程如下:

WiFi上的電腦1 -> 路由WiFi介面 ->  路由乙太網路介面 -> 乙太網路上的電腦2

(藍色表示WiFi網路,綠色表示乙太網路絡)

在串連層,我們的一個幀中只能記錄SRC和DST兩個地址。而上面的過程需要經過四個地址 (電腦1,WiFi介面,乙太網路介面,電腦2)。顯然,僅僅靠串連層協議無法滿足我們的需要。由於串連層協議開發在先,我們無法改動串連層協議,只能在串連層的資料(payload),也就是信紙內部下功夫了。IP協議應運而生。

電腦1,路由器和電腦2都要懂得IP協議。當電腦1寫信的時候,會在信紙的開頭寫上這封信的出發地址和最終到達地址 (而不是在信封上),而在信封上寫上要送往郵局。WiFi網的郵差將信送往郵局。在郵局,信被開啟,郵局工作人員看到最終地址,於是將信封裝在一個新的信封中,寫上出發地為郵局,到達地為電腦2,並交給乙太網路的郵差,由乙太網路的郵差送往電腦2。

(IP協議還要求寫如諸如校正等資訊,交通狀況等資訊,以保護通訊的穩定性。)

轉交給郵局

 

在串連層,郵差只負責在本社區送信,所以信封上的地址總是“第一條街第三座房子”或者說“中心十字路口拐角的小房子”這樣一些本地人才瞭解的地址描述,這給郵局的工作帶來不便。所以郵局要求,信紙上寫的地址必須是一個符合官方規定的“郵編”,也就是IP地址。這個地址為世界上的每一個房子編號(郵編)。當信件送到郵局的時候,郵局根據郵編,就能查到對應的地址描述,從而能順利改寫信封上的資訊。

每個郵局一般串連多個社區,而一個社區也可以有多個郵局,分別通往不同的社區。有時候一封信要通過多個郵局轉交,才能最終到達目的地,這個過程叫做route。郵局將分離的區域網路絡串連成了internet,並最終構成了覆蓋全球的互連網。

 

傳輸層(transport layer)

上面的三層協議讓不同的電腦之間可以通訊。但電腦中實際上有許多個進程,每個進程都可能有通訊的需求(參看Linux進程基礎和Linux處理序間通訊)。這就好像一所房子裡住了好幾個人(進程),如何讓信精確的送到某個人手裡呢?遵照之前相同的邏輯,我們需要在信紙上寫上新的資訊,比如收信人的姓名,才可能讓信送到。所以,傳輸層就是在信紙的空白上寫上新的“收信人”資訊。每一所房子會配備一個管理員(傳輸層協議)。管理員從郵差手中接過信,會根據“收信人”,將信送給房子中的某個人。

管理員

傳輸層協議,比如TCP和UDP,使用連接埠號碼(port number)來識別收信人(某個進程)。在寫信的時候,我們寫上目的地的連接埠。當信到達目的地的管理員手中,他會根據傳輸層協議,識別連接埠號碼,將信送給不同的人。

TCP和UDP協議是兩種不同的傳輸層協議。UDP協議類似於我們的信件交流過程。TCP協議則好像兩個情人間的頻繁通訊。一個小情人要表達的感情太多,以致於連續寫了好幾封信。而另一方必須將這些信按順序排列起來,才能看明白全部的意思。TCP協議還有控制網路交通等功能。

 應用程式層(application layer)

通過上面的幾層協議,我們已經可以在任意兩個人(進程)之間進行通訊。然而每個人實際上從事的是不同的行業。有的人是律師,有的人外交官。比如說律師之間的通訊,會用嚴格的律師術語,以免產生糾紛。再比如外交官之間的通訊,必須符合一定的外交格式,以免發生外交誤會。再比如間諜通過暗號來傳遞加密資訊。應用程式層協議是對信件內容進一步的用語規範。應用程式層的協議包括用於Web瀏覽的HTTP協議,用於傳輸檔案的FTP協議,用於Email的IMAP等等。

 外交通訊

總結

總過網路分層,我們從原始的0/1序列抽象出

本地地址(郵差)、郵編(郵局)、收信人(管理員)、收信人行業(用語規範)

這些概念。這些概念最終允許互連網上的分佈於兩台電腦的兩個進程相互連信。

寫信人必須按照各層的協議,封裝好整個信封 (encapsulation);而收信人則按照相反的順序,來拆開這個信封。整個過程是可讀資訊 -> 二進位 -> 可讀資訊。電腦只能理解和傳輸0/1序列,而電腦的使用者則總是輸入和輸出可讀資訊。網路通訊協定保證了可讀資訊在整個轉換和傳輸過程中的完整性。

電腦協議本身還有更多的細節需要深入。這篇文章只是從分層的角度描述各個層次所實現的功能。

 

歡迎繼續閱讀“協議森林”系列

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.