電腦網路之應用層
應用層協議
應用層協議 (application-layer protocol) 定義了運行在不同端系統上的應用程式進程如何相互傳遞報文,特別是應用層協議定義了:
- 交換的報文類型,例如請求報文和響應報文
- 各種報文類型的語法,如報文中的各個欄位及這些欄位是如何描述的
- 欄位的語義,即這些欄位中包含的資訊的含義
- 一個進程何時以及如何發送報文,對報文進行響應的規則。
在本文中主要是講5種重要的應用: Web 、文件傳輸、電子郵件、目錄服務和P2P,我們首先討論 Web應用,不僅因為它是極為流行的應用,而且因為它的應用層協議 HTTP 相對比較簡單並且易於理解。討論完 Web ,我們簡要地討論FTP,因為它與 HTTP 形成了很好的對照 我們接下來討論電子郵件應用,這是網際網路上最早的招人喜愛的應用程式。說電子郵件比 Web更複雜,是因為它使用了多個而不是一個應用層協議。在電子郵件之後,我們討論DNS它為網際網路提供目錄服務,大多數用戶不直接與 DNS 打交道,而是通過其他的應用(包括Web 、文件傳輸和電子郵件)間接使用它,DNS 很好地說明了一種核心的網路功能(網路名字到網路地址的轉換)是怎樣在網際網路的應用層實現的。
HTTP概況
Web 的應用層協議是超文本傳輸協議 (HyperText Transfer Protocol , HTTP) ,它是Web的核心,HTTP 由兩個程式實現:一個客戶程式和一個伺服器程式。客戶程式和伺服器程式運行在不同的端系統中,通過交換HTTP報文進行會話。 HTTP 定義了這些報文的結構以及客戶和伺服器進行報文交換的方式。HTTP使用TCP作為它的支撐運輸協議(而不是在 UDP 上運行)。HTTP 客戶首先發起一個與伺服器的TCP連接,一旦連接建立,該瀏覽器和伺服器進程就可以通過套接字介面訪問TCP。
注意:伺服器向客戶發送被請求的文件,而不存儲任何關於該客戶的狀態資訊,假如某個特定的客戶在短短的幾秒鐘內兩次請求同一個對象,伺服器並不會因為剛剛為該客戶提供了該對象就不再做出反應,而是重新發送該對象,就像伺服器已經完全忘記不久之前所做過的事一樣,因為 HTTP 伺服器並不保存關於客戶的任何資訊,所以我們說HTTP是一個無狀態協議 (stateless protocol)
非持續連接和持續連接
在許多網際網路應用程式中,客戶和伺服器在一個相當長的時間範圍內通訊,其中客戶發出一系列請求並且伺服器對每個請求進行響應 依據應用程式以及該應用程式的使用方式,這一系列請求可以以規則的間隔周期性地或者間斷性地一個接一個發出。當這種客戶-伺服器的交互是經TCP進行的,應用程式的研製者就需要做一個重要決定,即每個請求/響應對是經一個單獨的 TCP 連接發送,還是所有的請求及其響應經相同的TCP連接發送呢?採用前一種方法,該應用程式被稱為使用非持續連接( non- persistent connection) ;採用後一種方法,該應用程式被稱為使用持續連接( persistent connection)。儘管 HTTP在其默認方式下使用持續連接, HTTP 客戶和伺服器也能配置成使用非持續連接。
非持續連接有一些缺點:首先,必須為每一個請求的對象建立和維護一個全新的連接。對於每個這樣的連接,在客戶和伺服器巾都要分配 TCP 的緩衝區和保持 TCP 變數。這給 Web 伺服器帶來了嚴重的負擔,因為一台 Web 伺服器可能同時服務於數以百計不同的客戶的請求。第二,每一個對象經受兩倍 RTT 的交付時延,即一個RTT 用於創建 TCP ,另一個 RTT 用於請求和接收一個對象。在採用持續連接的情況下,伺服器在發送響應後保持該 TCP 連接打開。在相同的客戶與伺服器之間的後續請求和響應報文能夠通過相同的連接進行傳送
HTTP報文格式
- 請求報文
GET /somedir/page.html HTTP/l.l
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
我們看到該報文由5行組成,每行由一個回車和換行符結束。最後一行後再附加一個回車換行。雖然這個特定的報文僅有5行,但一個請求報文能夠具有更多的行或者至少為一行。HTTP 請求報文的第一行叫做請求行 (request line) ,其後繼的行叫做首部行( headerline)。請求行有3個欄位:方法欄位、URL欄位和HTTP版本欄位。方法宇段可以取幾種不同的值,包括 GET、POST、HEAD、PUT和DELETE。絕大部分的 HTTP 請求報文使用GET方法,當瀏覽器請求一個對象時,使用 GET 方法,在 URL 欄位帶有請求對象的標識。在本例中,該瀏覽器正在請求對象/somedirl page. html 其版本欄位是自解釋的;在本例中,瀏覽器實現的是 HTTP/ l. 版本。
現在我們看看本例的首部行:首部行 Host: www. someschool. edu 指明了對象所在的主機。你也許認為該首部行是不必要的,因為在該主機中已經有一條 TCP 連接存在了,但是,該首部行提供的資訊是 Web 代理高速快取所要求的,通過包含 Connection: close 首部行,該瀏覽器告訴伺服器不希望麻煩地使用持續連接,它要求伺服器在發送完被請求的對象後就關閉這條連接。User- agent: 首部行用來指明用戶代理,即向伺服器發送請求的瀏覽器的類型。這裡瀏覽器類型是 Mozilla/5. 0,即Firefox 瀏覽器,這個首部行是有用的,因為伺服器可以有效地為不同類型的用戶代理,實際發送相同對象的不同版本 (每個版本都由相同的URL定址)。最後Accept-language:首部行表示用戶想得到該對象的法語版本(如果伺服器中有這樣的對象的話);否則,伺服器應當發送它的默認版本 Accept -language:首部行僅是 HTTP 中可用的眾多內容協商首部之一。
HEAD方法類似於GET方法,當伺服器收到使用HEAD方法的請求時,將會用一個HTTP報文進行響應,但是並不返回請求對象,應用程式開發者常用HEAD方法進行調試,跟蹤PUT方法常與Web發行工具聯合使用,它允許用戶上傳對象到指定的 Web 伺服器上指定的路徑(目錄)。PUT方法也被那些需要向 Web 伺服器上傳對象的應用程式使用。DELETE 方法允許用戶或者應用程式刪除 Web 伺服器上的對象
- HTTP響應報文
下面我們提供了一條典型的HTTP響應報文 該響應報文可以是對剛剛討論的例子中請求報文的響應:
HTTP/ 1. 1 200 OK
Connection: close
Date: Tue , 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue , 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
我們仔細看一下這個響應報文 它有三個部分:一個初始狀態行 (sLatus line) ,6個首部行 (header 1ine) ,然後是實體體 (enLity body) 實體體部分是報文的主要部分,即它包含了所請求的對象本身(表示為 dala dala data data …)。 狀態行有3個欄位:協議版本欄位、狀態碼和相應狀態資訊。在這個例子中,狀態行指示伺服器正在使用 HTTP/l.1,並且一切正常(即伺服器已經找到並正在發送所請求的對象)。
我們現在來看看首部行。伺服器用 Connection: close 首部行告訴客戶,發送完報文後將關閉該 TCP 連接。Date: 首部行指示伺服器產生並發送該響應報文的日期和時間。值得一提的是,這個時間不是指對象創建或者最後修改的時間;而是伺服器從它的文件系統中檢索到該對象,插入到響應報文,並發送該響應報文的時間。Server: 首部行指示該報文是由一台 Apache Web 伺服器產生的,它類似於 HTTP 請求報文中的 User- agent 首部行。Last- Modified: 首部行指示了對象創建或者最後修改的日期和時間。Lasl-Modified: 首部行對既可能在本地客戶也可能在網路快取伺服器上的對象快取來說非常重要。下面將會介紹快取伺服器(也叫代理伺服器)。Content- Length: 首部行指示了被發送對象中的位元組數;Conlent- Type: 首部行指示了實體體中的對象是 HTML 文本 (該對象類型應該正式地由 Conlent- Type: 首部行而不是用文件擴展名來指示。
Web 快取
Web快取器 (Web cache)也叫代理伺服器 (proxy server),它是能夠代表初始 Web 伺服器來滿足 HTTP 請求的網路實體。Web 快取器有自己的磁碟存儲空間,並在存儲空間中保存最近請求過的對象的副本 如圖 2-11 所示,可以配置用戶的瀏覽器,使得用戶的所有 HTTP請求首先指向 Web 快取器。一旦某瀏覽器被配置,每個對某對象的瀏覽器請求首先被定向到該 Web 快取器。舉例來說,假設瀏覽器正在請求對象 //www.someschool. edu/ campus.giI.將會發生如下情況:
- 瀏覽器建立一個到Web快取器的TCP連接,並向 Web 快取器中的對象發送一個HTTP請求
- Web 快取器進行檢查,看看本地是否存儲了該對象副本 如果有, Web 快取器就向客戶瀏覽器用 HTTP 響應報文返回該對象
- 如果 Web 快取器中沒有該對象,它就打開一個與該對象的初始伺服器(如www. someschool. edu),TCP 連接 Web 快取器則在這個快取器到伺服器的TCP連接上發送一個對該對象的 HTTP 請求,在收到該請求後,初始伺服器向該 Web快取器發送具有該對象的 HTTP響應
- 當 Web 快取器接收到該對象時,它在本地存儲空間存儲一份副本,並向客戶的瀏覽器用盯TP 響應報文發送該副本(通過現有的客戶瀏覽器和 Web 快取器之間的TCP連接)
DHCP協議
DHCP(Dynamic Host Configuration Protocol: 動態主機設置協議,DHCP是一個區域網協議,DHCP是應用UDP協議的應用層協議。使用UDP協議工作,主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給用戶或者內部網路管理員作為對所有電腦作中央管理的手段。
對於一個 臨時設備,是如何知道自己的IP地址的?
DHCP伺服器監聽默認埠:67,主機使用UDP協議廣播DHCP發現報文,DHCP伺服器發出DHCP提供報文,主機向DHCP伺服器發出DHCP請求報文,DHCP伺服器回應並提供IP地址。
HTTPS
由於HTTP是明文傳輸的,則HTTPS(Secure)是安全的HTTP協議,默認埠為443,http(s): //<主機>:<埠>/<路徑>
- A、B是擁有一定數學關係的一組秘鑰
- 私鑰:私鑰自己使用,不對外公開
- 公鑰:公鑰給大家使用,對外公開
使用公鑰加密,使用私鑰解密。
- 數字證書是可信任組織頒發給特定對象的認證
證書格式、版本號 |
證書序列號 |
簽名演算法 |
有效期 |
對象名稱 |
對象公開秘鑰 |
… |
- SSL(Secure Sockets Layer: 安全套接層)
- 數據安全和數據完整
- 對傳輸層數據進行加密後傳輸
HTTPS 原理
- 客戶端將它所支援的演算法列表和一個用作產生密鑰的隨機數發送給伺服器 ;
- 伺服器從演算法列表中選擇一種加密演算法,並將它和一份包含伺服器公用密鑰的證書發送給客戶端;該證書還包含了用於認證目的的伺服器標識,伺服器同時還提供了一個用作產生密鑰的隨機數;
- 客戶端對伺服器的證書進行驗證(有關驗證證書,可以參考數字簽名),並抽取伺服器的公用密鑰;然後,再產生一個稱作 pre_master_secret 的隨機密碼串,並使用伺服器的公用密鑰對其進行加密(參考非對稱加 / 解密),並將加密後的資訊發送給伺服器 ;
- 客戶端與伺服器端根據 pre_master_secret 以及客戶端與伺服器的隨機數值獨立計算出加密和 MAC密鑰(參考 DH密鑰交換演算法);
- 客戶端將所有握手消息的 MAC 值發送給伺服器;
- 伺服器將所有握手消息的 MAC 值發送給客戶端
文件傳輸協議:FTP
在一個典型的FTP會話中,用戶坐在一台主機(本地主機)前面,向一台遠程主機傳輸(或接收來自遠程主機的)文件 為使用戶能訪問它的遠程賬戶,用戶必須提供一個用戶標識和口令 在提供了這種授權資訊後,用戶就能從本地文件系統向遠程主機文件系統傳送文件,反之亦然 如圖 2-14 所示,用戶通過一個FTP用戶代理與FTP交互。該用戶首先提供遠程主機的主機名,使本地主機的FTP客戶進程建立一個到遠程主機FTP伺服器進程的 TCP 連接。該用戶接著提供用戶標識和口令,作為 FTP 命令的一部分在該 TCP連接上傳送。一旦該伺服器向該用戶授權,用戶可以將存放在本地文件系統中的一個或者多個文件複製到遠程文件系統(反之亦然)。
HTTP和FTP 都是文件傳輸協議,並且有很多共同的特點,例如,它們都運行在 TCP上,然而,這兩個應用層協議也有一些重要的區別 其中最顯著的就是FTP 使用了兩個並行的 TCP 連接來傳輸文件,一個是控制連接 (control connection) ,一個是數據連接( data connection) 。控制連接用於在兩主機之間傳輸控制資訊,如用戶標識、口令、改變遠程目錄的命令以及”存放 (put) “和”獲取 (get)”文件的命令。數據連接用於實際發送一個文件,因為FTP協議使用一個獨立的控制連接,所以我們也稱FTP的控制資訊是帶外(out-of-band)傳送的。如你所知,HTTP協議是在傳輸文件的同一個 TCP 連接中發送請求和響應首部行的 因此,HTTP也可以說是帶內 (in-band) 發送控制資訊的。FTP協議的控制連接和數據連接如圖二 15 所示:
當用戶主機與遠程主機開始一個FTP會話時,FTP的客戶(用戶)端首先在伺服器21號埠與伺服器(遠程主機)端發起一個用於控制的 TCP 連接。FTP的客戶端也通過該控制連接發送用戶的標識和口令,發送改變遠程目錄的命令,當FTP的伺服器端從該連接上收到一個文件傳輸的命令後(無論是向還是來自遠程主機) ,就發起一個到客戶端的 TCP 數據連接 FTP 在該數據連接上準確地傳送一個文件,然後關閉該連接。在同一個會話期間,如果用戶還需要傳輸另一個文件,FTP則打開另一個數據連接,因而對FTP傳輸而言,控制連接貫穿了整個用戶會話期間,但是對會話中的每一次文件傳輸都需要建立一個新的數據連接(即數據連接是非持續的)。
FTP伺服器必須在整個會話期間保留用戶的狀態(state) 特別是,伺服器必須把特定的用戶賬戶與控制連接聯繫起來,隨著用戶在遠程目錄樹上徘徊,伺服器必須追蹤用戶在遠程目錄樹上的當前位置,對每個進行中的用戶會話的狀態資訊進行追蹤,大大限制了FTP同時維持的會話總數。而另一方面,前面講過 HTTP 是無狀態的,即它不必對任何用戶狀態進行追蹤。
網際網路中的電子郵件
圖2-16 給出了網際網路電子郵件系統的總體情況,從該圖中我們可以看到它有3個主要組成部分: 用戶代理( user agenl) 、郵件伺服器 (mail server) 簡單郵件傳輸協議(Simple Mai] Transfer Prolocol , SMTP) 。
SMTP 是網際網路電子郵件中主要的應用層協議,它使用 TCP 可靠數據傳輸服務,從發送方的郵件伺服器向接收方的郵件伺服器發送郵件,像大多數應用層協議一樣, SMTP有兩個部分:運行在發送方郵件伺服器的客戶端和運行在接收方郵件伺服器的伺服器端,每台郵件伺服器上既運行 SMTP 的客戶端也運行 SMTP 的伺服器端 。當一個郵件伺服器向其他郵件伺服器發送郵件時,它就表現為 SMTP 的客戶;當郵件伺服器從其他郵件伺服器上接收郵件時,它就表現為SMTP的伺服器。目前有一些流行的郵件訪問協議,包括第三版的郵局協議 (POSl OfficeProtocol-Version 3 , POP3)、網際網路郵件訪問協議 (Intemet Mail Access Protocol , IMAP)以及 HTTP。
總結:應用層為作業系統或網路應用程式提供訪問網路服務的介面。數據傳輸基本單位為報文;包含的主要協議:FTP(文件傳送協議)、Telnet(遠程登錄協議)、DNS(域名解析協議)、SMTP(郵件傳送協議),POP3協議(郵局協議),HTTP協議(Hyper Text Transfer Protocol)。