計算機網絡之應用層

應用層協議

應用層協議 (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報文格式

  1. 請求報文
      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 服務器上的對象

  1. 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 緩存器。舉例來說,假設瀏覽器正在請求對象 http://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 原理

  1. 客戶端將它所支持的算法列表和一個用作產生密鑰的隨機數發送給服務器 ;
  2. 服務器從算法列表中選擇一種加密算法,並將它和一份包含服務器公用密鑰的證書發送給客戶端;該證書還包含了用於認證目的的服務器標識,服務器同時還提供了一個用作產生密鑰的隨機數;
  3. 客戶端對服務器的證書進行驗證(有關驗證證書,可以參考数字簽名),並抽取服務器的公用密鑰;然後,再產生一個稱作 pre_master_secret 的隨機密碼串,並使用服務器的公用密鑰對其進行加密(參考非對稱加 / 解密),並將加密后的信息發送給服務器 ;
  4. 客戶端與服務器端根據 pre_master_secret 以及客戶端與服務器的隨機數值獨立計算出加密和 MAC密鑰(參考 DH密鑰交換算法);
  5. 客戶端將所有握手消息的 MAC 值發送給服務器;
  6. 服務器將所有握手消息的 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)。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!