嘛。。。沒什么可說的Orz既然上次開了SQL的坑,這次就說說計算機網絡好了(之前的坑快去填啊喂!)Orz那么名字也延續上次的嗯。“范老濕從不會計算機網絡”,參考書籍是James F. Kurose和Keith W. Ross的《計算機網絡:自頂向下方法》。
說到網絡就不得不說TCP/IP協議,即傳輸控制協議(Transmission Control Protocol)和網際協議(Internet Protocol)。我們也知道TCP/IP協議分為五層,那么就一層一層說吧。
一、應用層
應用層,顧名思義,和網絡應用的原理與實現有關。我們在這一章中主要會了解Web、電子郵件、DNS和對等郵件分發等網絡應用。同時,我們也會接觸一些TCP/UDP的網絡應用開發與運行。Socket這個詞你可能并不陌生,它就可以用來實現一些客戶端——服務端應用程序。
1.1原理
1.1.1 網絡應用程序體系結構
主要分兩種:客戶端——服務端體系結構(client-server architecture)和P2P體系結構(Peer to Peer architecture)。
客戶端——服務端體系結構中,用于產生請求(request)的被稱為客戶端(client),用于處理請求,產生響應(response)的被稱為服務端。例如用戶在瀏覽器中點擊了一個鏈接,即向服務器請求了一個頁面;web服務器接收到請求后,返回所請求的對象作為相應。
客戶端——服務端體系結構有兩個特點:
- 客戶端之間不直接通信;
- 服務端具有固定、周知的地址(被稱為IP地址)。
按照常識,如果客戶端請求過多,服務端必然不堪重負。因此,一些壓力比較大的網絡服務常常在全球各地建立數據中心,既分散了壓力,又加快了不同地區的訪問速度。
而P2P體系結構對于數據中心的專用服務器依賴很小,或者說沒有依賴;相反,應用程序在間斷連接的主機對之間直接通信。這些主機對之前被稱為對等方。這些對等方也不為服務提供商所有,而是臺式機、筆記本、手機等個人設備。P2P體系結構最顯著的優點就是它的自擴展性(self-scalability),即在一個P2P文件共享服務中,每個對等方都由于請求產生工作量, 但是每個對等方也向其他對等方分發文件,從而提高了整個系統的服務能力。
而P2P體系結構也面臨三大挑戰:
- ISP友好:由于ISP的本地優化,下載速度一般比上傳速度要小得多,從而影響了系統整體性能;
- 安全性:由于P2P的高度分布性,P2P應用會給安全帶來挑戰;
- 激勵:如何說服用戶為P2P應用提供存儲、帶寬、計算等資源。
1.1.2 進程通信
我們都知道,在操作系統中,進行通信的實際上是進程(process)。兩個不同端系統上的進程通過報文(message)相互通信。
對于每一對通信進程,我們通常將這兩個進程之一標示為客戶端(client),而另一個標示為服務端(server)。對于P2P文件共享系統中,一個進程可以既上傳文件,又下載文件;但是對于某一個通信場景,仍可以將一個進程表示為客戶端,一個進程標示為服務端,定義如下:
- 在給定的一對進程之間的通信會話場景中,發起通信的進程被標識為客戶端,在會話開始時等待聯系的進程是服務端
進程之間通過socket作為API發送或者接收報文,通過IP地址和端口號來尋址。IP地址來確定主機,而端口號用來標識不同的服務。如web服務器用80端口,郵件服務器進程用25端口,ssh服務用22端口等等。
1.1.3 可供應用程序使用的運輸服務
對于服務來說,必然面對各種各樣的需求。衡量一個需求通常有以下幾個維度:
- 可靠數據傳輸
例如電子郵件、文件傳輸、遠程主機訪問等應用,數據丟失可能導致災難性的后果。確保數據正確、完全的傳輸的數據交付服務被稱為可靠數據傳輸。
相對的,也存在容忍丟失的應用,如民用交談式音頻/視頻等。 - 吞吐量
在一些網絡應用,如流媒體播放、大規模分布式計算中,如果處理不好的話,網絡帶寬可能成為影響整體系統性能的短板。具有數據吞吐量要求的應用被稱為帶寬敏感的應用。而彈性應用能根據情況或多或少地利用可供使用的吞吐量,如電子郵件、文件傳輸、web傳送等。 - 定時
運輸層協議也能提供定時保證。在一些線上交互場景,如網絡游戲、網絡電話會議等場合,若不能保證報文在一定時間內(如100ms)到達,則可能出現卡頓的情況。 - 安全性
主要指防止在傳送過程中被第三方抓包兒導致的信息泄漏。可采取加密等措施。
1.1.4 因特網提供的的運輸服務
主要是TCP和UDP兩種。
TCP服務模型包括面向連接的服務和可靠數據傳輸服務。
- 面向連接的服務:在應用層報文開始流動之前,TCP讓客戶端和服務端互相交換運輸曾控制信息,即“握手”。在這個階段后,一個TCP連接就在兩個進程的socket之前建立了。TCP連接是全雙工的,連接雙方的進程可以在此連接上同時進行報文的收發。應用程序結束報文連接后,必須拆除該連接;
- 可靠的數據傳輸服務:通信進程能夠通過TCP,無差錯,按適當順序交付所有發送的數據。
TCP協議還具有擁塞控制機制。
為了解決傳送過程中的安全問題,SSL(Secure Socket Layer)技術將TCP“升級”,有自己的API,但是SSL不是同TCP、UDP同一層次的傳輸協議,而是對TCP的“加強”。
UDP是一種不提供不必要服務的輕量級運輸協議。UDP是無連接的,沒沒有握手過程。UDP協議提供一種不可靠數據傳送服務,即不保證報文到達接收進程,也不保證到達順序。
UDP協議也不具有擁塞控制機制。
然而,目前任何一種協議都無法提供定時或帶寬保證。
1.1.5 應用層協議
應用層協議主要解決報文的結構的定義,例如:
- 交換的報文類型,例如請求報文和響應報文;
- 各種報文類型的語法,即報文中字段及其描述方式;
- 字段的定義;
- 一個進程何時以及如何發送報文,對報文進行響應的規則。