本系列是學習感想和總結,如有錯誤,懇請評論區留言指正
網路應用是計算機網路存在的理由。
網路核心裝置並不在應用層上起作用,網路應用被限制在端系統上。這樣的設計方法促進了網路應用程式的迅速研發和部署。
應用程式體系結構(application architecture)由應用程式設計者決定那個如何在各種端系統上組織該應用程式。目前兩種主流的應用程式體系結構是:客戶 - 伺服器體系結構和對等體系結構。
客戶 - 伺服器體系結構(client-server architecture)中有一個總是開啟的主機伺服器,它服務於來自稱為客戶主機的請求。
在該體系結構中,不同的客戶之間不會直接通訊。伺服器具有一個固定的地址,該地址被稱作IP地址。
使用客戶 - 伺服器體系結構的常見的應用有:全球廣域網、檔案傳輸、遠端登陸(Web、FTP、Telnet)和電子郵件等。
在這個體系結構的應用中,常常會有伺服器跟不上它所有客戶的請求的情況,此時常常會配備大量主機的資料中心來作為伺服器。
在P2P體系結構(P2P architecture)中,對位於資料中心的專用伺服器具有最小(或者沒有)依賴。應用程式在間斷連線的主機對之間直接通訊,這些主機對稱作對等方(peer)。對等方不所屬於服務提供商,不通過專門的伺服器。伺服器用於跟蹤使用者的IP地址,但是使用者和使用者之間的報文不經過伺服器。
常見的P2P應用有:檔案共用、對等方協助下載、因特網電話和視訊會議等。
P2P協定最大的特性是自擴充套件性(self-scalability)。在P2P應用程式中,對等方的增加雖然會產生更多的工作負載,但是由於對等方會向其他對等方分發檔案,所以也會提高整個系統的服務能力。
進行通訊的實際上是程序(process)。一個程序被認為是端系統內的一個程式。當一個端系統中執行多個不同的程序時,它們使用程序間通訊機制相互通訊。在兩個不同端系統上的程序,通過跨越計算機網路交換報文(message)相互通訊。
每對通訊的程序,將其中之一記作伺服器(server),將另一個記作客戶(client)。
我們定義伺服器和客戶如下:在一對程序通訊中,發起通訊的程序被標記做客戶,在對談開始時等待的聯絡的程序是伺服器。
對於Web應用,瀏覽器是客戶程式,Web伺服器是一臺伺服器程序。對於P2P而言,下載檔案的對等方記作客戶,上傳檔案的對等方記作伺服器。
程序通過稱作通訊端(socket)的軟體介面向網路傳送報文和從網路接受報文。通訊端也稱作應用程式和網路之間的應用程式程式設計介面(Application Programming Interface, API)。
應用程式開發者對於運輸層的控制僅有:選擇運輸層協定、設定部分引數(例如最大報文段長度)。
為了向特定主機傳送分組,需要目的程序的兩類資訊:主機地址,在目的主機中程序的識別符號。
主機由IP地址(IP address)標識,而程序在主機上的識別符號為目的埠號(port number)。目前許多流行的應用已經分配了特定的埠號,例如Web埠號是80,郵件伺服器的埠號是25。
我們需要根據可靠資料傳輸、吞吐量、定時和安全性幾類來選擇資料運輸服務。
部分應用程式要求不能存在資料丟失,因此對於這些應用需要確保傳送方的資料正確完全地交付給接收方。如果一個協定可以提供這樣的資料傳輸,那麼認為它提供了可靠資料傳輸(reliable data transfer)。
當一個運輸層協定不提供可靠資料傳輸時,傳送端的某些資料可能會丟失,這些協定可能被容忍丟失的應用(loss-tolerant application)使用。比如多媒體應用能夠承受一定程度上的資料丟失。
在程序通訊的過程中,可用吞吐量就是傳送程序能夠向接收程序交付位元的速率。可用的吞吐量是隨時間而波動的,於是某些協定能夠確保應用程式以某一吞吐量執行。
具有吞吐量有要求的應用被稱作頻寬敏感應用(bandwidth-sensitive application),隊淘汰了沒有特定要求的是彈性應用(elastic application)。
運輸層協定可以夠提供定時保證,定時保證以多種形式實現。這種服務比較適用於互動式實時應用程式,例如網路電話、多方遊戲等。對於非實時應用,低時延比高時延好,但是對端到端的時延沒有要求。
運輸協定能夠為應用程式提供一種或者多種安全性服務。例如能夠對報文加密傳送,在交付給接收程序時解密。
因特網為應用程式提供兩個運輸層協定:TCP、UDP。選擇哪一個要根據應用程式的特點來決定。
應用 | 資料丟失 | 頻寬 | 時間敏感 |
---|---|---|---|
檔案傳輸 | 不能丟失 | 彈性 | 不 |
電子郵件 | 不能丟失 | 彈性 | 不 |
Web檔案 | 不能丟失 | 彈性(幾 kbps) | 不 |
因特網電話 / 視訊會議 | 容忍丟失 | 音訊(幾 kbps ~ 1Mbps) 視訊(10kbps ~ 5Mbps) | 是, 100ms |
流式儲存音訊 / 視訊 | 容忍丟失 | 同上 | 是, 幾秒 |
互動式遊戲 | 容忍丟失 | 幾 kbps ~ 10kbps | 是, 100ms |
智慧手機訊息 | 不能丟失 | 彈性 | 是和不是 |
當某個應用程式呼叫TCP作為其運輸協定的時候,它能夠獲得TCP提供的兩種服務。
面向連線的服務
在應用層資料包流動之前,TCP讓客戶和伺服器交換運輸層控制資訊(握手),以做好大量分組傳輸的準備。握手之後應該TCP連線在兩個程序的通訊端之間建立了。結束報文傳送後,需要拆除連線。
這個連線是全雙工的,雙方可以同時進行報文收發。
可靠資料傳輸服務
通訊的程序能夠無差錯、以適當順序交付所有資料,沒有資料的丟失和冗餘。
TCP協定還具有擁塞控制等,能夠排程程序以避免因特網整體的擁塞。
UDP服務不通過不必要的服務,沒有握手,提供不可靠資料傳輸。UDP也沒有擁塞控制。
應用層協定(application-layer protocol)定義了執行在不同端系統上的應用層程式如何傳遞報文,具體定義了:報文型別、各種報文的語法、欄位的語意、何時和如何傳送報文。
有些應用層協定是由RFC定義的,是公共的。也有一些是專用的協定。
未完待續