3.因特網(wǎng)運(yùn)輸協(xié)議所不提供的服務(wù)
我們已經(jīng)從四個(gè)方面組織了運(yùn)輸協(xié)議服務(wù):可靠數(shù)據(jù)傳輸、吞吐量、定時(shí)、安全性。TCP和UDP提供了這些服務(wù)中的哪些呢?TCP提供了可靠的端到端數(shù)據(jù)傳送,TCP在應(yīng)用層可以很容易地用SSL來加強(qiáng)以提供安全服務(wù),但我們?cè)趯?duì)TCP和UDP的簡(jiǎn)要描述中,明顯的缺少了對(duì)吞吐量或者定時(shí)保證的討論,即這些服務(wù)目前的因特網(wǎng)運(yùn)輸協(xié)議并沒有提供。今天的因特網(wǎng)通常能夠?yàn)闀r(shí)間敏感應(yīng)用提供滿意的服務(wù),但它不能提供任何定時(shí)或者帶寬的保證。
2.1.5應(yīng)用層協(xié)議
我們剛剛學(xué)習(xí)了通過把報(bào)文發(fā)送進(jìn)套接字使用網(wǎng)絡(luò)進(jìn)程間實(shí)現(xiàn)相互通信。但是如何構(gòu)造這些報(bào)文?在這些報(bào)文中的各個(gè)字段的含義是什么?進(jìn)程何時(shí)發(fā)送這些報(bào)文?這些問題都將我們帶進(jìn)應(yīng)用層協(xié)議的范圍。應(yīng)用層協(xié)議定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何互相傳遞報(bào)文,特別是應(yīng)用層協(xié)議定義了:
1.交換的報(bào)文類型,例如請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
2.各種報(bào)文類型的語法,如報(bào)文中的各個(gè)字段及這些字段是如何描述的。
3.字段的語義,即這些字段中包含的信息的含義。
4.一個(gè)進(jìn)程何時(shí)以及如何發(fā)送報(bào)文。對(duì)報(bào)文進(jìn)行響應(yīng)的規(guī)則。
有些應(yīng)用層協(xié)議是由RFC文檔定義的,因此它們位于公共域中,例如,web的應(yīng)用層協(xié)議HTTP,就作為一個(gè)RFC可供使用。如果瀏覽器開發(fā)者尊從HTTP RFC規(guī)則,所開發(fā)的瀏覽器就能訪問任何尊從該文檔標(biāo)準(zhǔn)的web服務(wù)器并獲取相應(yīng)web頁面。還有很多別的應(yīng)用層協(xié)議是專用的,有意不為公共域使用,例如Skype使用了專用的應(yīng)用層協(xié)議。
區(qū)分網(wǎng)絡(luò)應(yīng)用和應(yīng)用層協(xié)議是很重要的,應(yīng)用層協(xié)議只是網(wǎng)絡(luò)應(yīng)用的一部分。我們來看一些例子,Web是一種客戶--服務(wù)器應(yīng)用,它允許客戶按照需求從web服務(wù)器獲得文檔,該web應(yīng)用有很多組成部分。包括文檔格式的標(biāo)準(zhǔn)(即HTML)、Web瀏覽器、web服務(wù)器,以及一個(gè)應(yīng)用層協(xié)議。web的應(yīng)用層協(xié)議是HTTP,它定義了在瀏覽器和web服務(wù)器之間傳輸?shù)膱?bào)文格式和序列。因此,HTTP只是web應(yīng)用的一個(gè)部分。舉另外一個(gè)例子,因特網(wǎng)電子郵件應(yīng)用也有很多組成部分,包括能容納用戶郵箱的郵件服務(wù)器,允許用戶讀取和生產(chǎn)郵件的郵件客戶程序、定義郵件報(bào)文結(jié)構(gòu)的標(biāo)準(zhǔn)、定義報(bào)文如何在服務(wù)區(qū)之間以及如何在服務(wù)器與郵件客戶程序之間的傳遞的應(yīng)用層協(xié)議,定義如何對(duì)報(bào)文收不的內(nèi)容進(jìn)行解釋的應(yīng)用層協(xié)議,用于電子郵件的主要應(yīng)用層協(xié)議就是SMTP。因此,電子郵件的首要應(yīng)用層協(xié)議SMTP也只是電子郵件應(yīng)用的一個(gè)部分。
2.2Web和HTTP
2.2.1HTTP概況
Web的應(yīng)用層協(xié)議是超文本傳輸協(xié)議,它是web的核心。在【RFC 1945】和【RFC2919】中進(jìn)行了定義,HTTP由兩個(gè)程序?qū)崿F(xiàn):一個(gè)客戶程序和一個(gè)服務(wù)器程序,客戶程序和服務(wù)器程序運(yùn)行在不同的端系統(tǒng)中,通過交換HTTP報(bào)文進(jìn)行會(huì)話。
Web頁面(web page)是由對(duì)象組成的。一個(gè)對(duì)象只是一個(gè)文件,例如HTML文件,一個(gè)JPGE圖片,一個(gè)Java小程序或一個(gè)視頻片段這樣的文件,且它們可以通過一個(gè)url地址尋址,多是Web頁面含有一個(gè)HTML基本文件以及幾個(gè)引用對(duì)象。
HTTP定義了web客戶向web服務(wù)器請(qǐng)求web頁面的方式,以及服務(wù)器向客戶傳送web頁面的方式,我們稍后詳細(xì)討論了客戶和服務(wù)器的交互過程。
HTTP使用TCP作為他的運(yùn)輸協(xié)議。(不是在UDP上運(yùn)行)HTTP客戶首先發(fā)起了一個(gè)與服務(wù)器的TCP連接,一旦連接建立,該瀏覽器和服務(wù)器進(jìn)程就可以通過套接字接口訪問TCP,如同之前描述的那樣,客戶端的套接字接口是客戶進(jìn)程與TCP連接之間的門,在服務(wù)器端的套接字接口則是服務(wù)器進(jìn)程與TCP連接之間的門,客戶向他的套接字接口發(fā)送HTTP請(qǐng)求報(bào)文并從他的套接字接口接受HTTP響應(yīng)報(bào)文。類似地,服務(wù)器從它的套接字接口接受HTTP請(qǐng)求和向他的套接字接口發(fā)送HTTP響應(yīng)報(bào)文。一旦客戶向他的套接字接口發(fā)送了一個(gè)請(qǐng)求報(bào)文,該報(bào)文就脫離了客戶控制并進(jìn)入TCP控制。TCP是面向連接,以及可靠的,這里我們看到了分層體系結(jié)構(gòu)的最大優(yōu)點(diǎn),即HTTP協(xié)議不用擔(dān)心數(shù)據(jù)丟失,也不關(guān)注TCP從網(wǎng)絡(luò)的數(shù)據(jù)丟失和亂序故障中恢復(fù)的細(xì)節(jié),那是TCP以及協(xié)議棧較低層的協(xié)議工作。
注意到下列現(xiàn)象很重要:服務(wù)器向客戶發(fā)送請(qǐng)求的文件,而不存儲(chǔ)任何關(guān)于該客戶的狀態(tài)信息,假如某個(gè)特定的客戶在短短幾秒鐘兩次請(qǐng)求同一個(gè)對(duì)象,服務(wù)器并不會(huì)因?yàn)閯倓倿樵摽蛻籼峁┝嗽搶?duì)象就不再作出反應(yīng),而是重新發(fā)送該對(duì)象,就像服務(wù)器已經(jīng)完全忘記不久之前做過因?yàn)镠TTP服務(wù)器并不保存關(guān)于客戶的任何信息,所以說我們說HTTP是一個(gè)無狀態(tài)協(xié)議,我們同時(shí)也注意到Web使用了客戶-服務(wù)器應(yīng)用程序體系結(jié)構(gòu)。Web服務(wù)器總是打開的,具有一個(gè)固定的IP地址,且他服務(wù)于可能來自數(shù)以百萬計(jì)的不同瀏覽器的請(qǐng)求。
2.2.2非持續(xù)連接和持續(xù)連接
在許多因特網(wǎng)應(yīng)用程序中,客戶和服務(wù)器在一個(gè)相當(dāng)長(zhǎng)的時(shí)間范圍內(nèi)通信,其中客戶發(fā)出一系列請(qǐng)求并且服務(wù)器對(duì)每個(gè)請(qǐng)求進(jìn)行響應(yīng),依據(jù)應(yīng)用程序以及該應(yīng)用程序的使用方式,這一系列請(qǐng)求可以以規(guī)則的間隔周期性低或者間斷性的一個(gè)接一個(gè)發(fā)出。當(dāng)這種客戶
-服務(wù)器的交互式經(jīng)TCP連接進(jìn)行的,應(yīng)用程序的研制者就需要做一個(gè)重要決定,即每個(gè)請(qǐng)求/響應(yīng)對(duì)是經(jīng)一個(gè)單獨(dú)的TCP連接發(fā)送。還是所有的請(qǐng)求及其響應(yīng)經(jīng)相同的TCP連接發(fā)送呢?采用前一種方法,該應(yīng)用程序被稱為使用非連續(xù)連接;采用后一種方法,該應(yīng)用程序被稱為連續(xù)連接。為了深入的理解該設(shè)計(jì)問題,我們研究在特定的應(yīng)用長(zhǎng)袖即HTTP的情況下持續(xù)連接的優(yōu)點(diǎn)和缺點(diǎn)。HTTP既能夠使用非持續(xù)連接,也能使用持續(xù)連接,盡管HTTP在其默認(rèn)方式下使用持續(xù)連接,HTTP客戶和服務(wù)器也能配置稱使用非持續(xù)連接。
2.2.2.1采用非持續(xù)連接的HTTP
我們看看在非持續(xù)連接情況下,從服務(wù)器像客戶傳送一個(gè)web頁面的步驟。假設(shè)該頁面含有一個(gè)HTML基本文件和10哥JPEG圖形,并且這11個(gè)對(duì)象位于同一臺(tái)服務(wù)器上。
該HTML文件URL為:http://www.someSchool.edu/someDepartment/home.index
讓我們看看發(fā)生了什么?
1.HTTp客戶進(jìn)程在端口號(hào)80發(fā)起一個(gè)到服務(wù)器www.someSchool.edu 的TCP連接,該端口號(hào)是HTTP的默認(rèn)端口。在客戶和服務(wù)器上分別有一個(gè)套接字與該連接相關(guān)聯(lián)。
2.HTTP客戶經(jīng)它的套接字向該服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求報(bào)文,請(qǐng)求報(bào)文中包含了路徑名/someDepartment/home.index
3.HTTP服務(wù)器進(jìn)程經(jīng)它的套接字接受該請(qǐng)求報(bào)文,從其存儲(chǔ)器中檢索出對(duì)象,在一個(gè)HTTP響應(yīng)報(bào)文中封裝對(duì)象,并通過其套接字向客戶發(fā)送響應(yīng)報(bào)文。
4.HTTP服務(wù)器進(jìn)程通知TCP斷開該TCP連接(但是直到TCP確認(rèn)客戶已經(jīng)完整的收到響應(yīng)報(bào)文位置,它才會(huì)實(shí)際中斷連接
5.HTTP客戶接受響應(yīng)報(bào)文,TCP連接關(guān)閉,該報(bào)文指出封裝的對(duì)象是一個(gè)HTML文件,客戶從響應(yīng)報(bào)文中提取出該文件,檢查該HTML文件,得到對(duì)10個(gè)JPEG圖形的引用)
6.對(duì)每個(gè)引用的JPEG圖形對(duì)象重復(fù)前4個(gè)步驟。
當(dāng)瀏覽器收到web頁面后,顯示給用戶,兩個(gè)不同的瀏覽器也許會(huì)以不同的方式解釋該頁面。HTTP與客戶如何解釋一個(gè)Web頁面毫無滾襲,僅定義了在HTTP客戶程序與HTTP服務(wù)器程序之間的通信協(xié)議。
上面的步驟詳細(xì)說明了非持續(xù)連接的步驟。其中每個(gè)TCP連接在服務(wù)器發(fā)送一個(gè)對(duì)象后關(guān)閉,即該連接并不為其他對(duì)象而持續(xù)下來,值得注意的是每個(gè)TCP連接只傳輸一個(gè)請(qǐng)求報(bào)文和響應(yīng)報(bào)文,因此在本例中,一共要產(chǎn)生11個(gè)TCP連接。
在上面的描述中,我們有意沒有明確客戶獲得這10個(gè)JPEG圖形對(duì)象是使用10個(gè)串行的TCP連接,還是某些JPEG對(duì)象使用了一些并行的TCP連接。實(shí)際上,用戶能夠配置瀏覽器以控制并行度。使用并行連接可以縮短響應(yīng)時(shí)間。
2.2.2.2采用持續(xù)連接的HTTP
非持續(xù)連接有一些特點(diǎn)。首先,必須為每一個(gè)請(qǐng)求的對(duì)象建立和維護(hù)一個(gè)全新的連接。對(duì)于每一個(gè)這樣的連接,在客戶和服務(wù)器中都要分配TCP的緩沖區(qū)和保持TCP變量,這就給Web服務(wù)器帶來了嚴(yán)重的負(fù)擔(dān),因?yàn)橐慌_(tái)web服務(wù)器可能同時(shí)服務(wù)于數(shù)以百計(jì)不同的客戶的請(qǐng)求,第二,就像我們剛剛描述的那樣,每一個(gè)對(duì)象經(jīng)受兩倍RTT的交付延時(shí)。即一個(gè)RTT用于創(chuàng)建TCP,另一個(gè)RTT用于請(qǐng)求接收一個(gè)對(duì)象。
在采用持續(xù)連接的情況下,服務(wù)器在發(fā)生響應(yīng)后保持該TCP連接打開,在相同的客戶與服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)報(bào)文能夠通過相同的連接進(jìn)行傳送。特別是,一個(gè)完整的TCP連接進(jìn)行傳送,更有甚者,位于同一臺(tái)服務(wù)器的多個(gè)web頁面在從該服務(wù)器發(fā)送給同一個(gè)客戶時(shí),可以在單個(gè)持續(xù)TCP連接上進(jìn)行。可以一個(gè)接一個(gè)地發(fā)出對(duì)對(duì)象的這些請(qǐng)求,而不必等待對(duì)未決請(qǐng)求的回答。
2.2.3HTTP報(bào)文格式
2.2.3.1請(qǐng)求報(bào)文
下面提供了一個(gè)典型的HTTP請(qǐng)求報(bào)文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
報(bào)文時(shí)用普通的ASCII文本書寫的,這樣有一定計(jì)算機(jī)知識(shí)的人都能夠閱讀它,其次,我們看懂該報(bào)文由5行組成。美航由一個(gè)回撤和換行符結(jié)束,最后一行后再附加一個(gè)回車換行符
2.2.3.2HTTP響應(yīng)報(bào)文
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-Typr: text/html
(data data data data data)
2.2.3.3狀態(tài)碼
200 OK:請(qǐng)求成功,信息在返回的響應(yīng)報(bào)文中
301 Moved Permanently:請(qǐng)求的對(duì)象已經(jīng)被永久轉(zhuǎn)移了,新的URL定義在響應(yīng)報(bào)文中的Location:首部行中,客戶軟件將自動(dòng)獲取新的URL。
400 Bad Request: 一個(gè)通用的差錯(cuò)代碼,指示該請(qǐng)求不能被服務(wù)器理解。
404 Not Found: 被請(qǐng)求的文檔不再服務(wù)器上,
505 HTTP Version Not Supported: 服務(wù)器不支持請(qǐng)求報(bào)文使用的HTTP協(xié)議版本。
2.2.4 用戶與服務(wù)器的交互:cookie
我們前面提到了HTTP服務(wù)器時(shí)無狀態(tài)的,這簡(jiǎn)化了服務(wù)器的設(shè)計(jì),并且允許工程師們?nèi)ラ_發(fā)可以同時(shí)處理數(shù)以千計(jì)的TCP連接的高性能Web服務(wù)器,然而一個(gè)Web站點(diǎn)通常希望能夠識(shí)別用戶,可能是因?yàn)榉?wù)器希望限制用戶的訪問,或者因?yàn)樗M褍?nèi)容與用戶身份聯(lián)系起來,為此,HTTP使用了cookie。
cookie技術(shù)有四個(gè)組件:1.在HTTP響應(yīng)報(bào)文中的一個(gè)cookie首部行;2.在HTTP請(qǐng)求報(bào)文中的一個(gè)cookie首部行;3.在用戶端系統(tǒng)中保留有一個(gè)cookie文件,并由用戶的瀏覽器進(jìn)行管理;4.位于Web站點(diǎn)的一個(gè)后端數(shù)據(jù)庫。
2.2.5Web緩存
web緩存器,也叫代服務(wù)器,它是能夠代表初始Web服務(wù)器來滿足HTTP請(qǐng)求的網(wǎng)絡(luò)實(shí)體,Web緩存器有自己的磁盤存儲(chǔ)空間。并在存儲(chǔ)空間保存最近請(qǐng)求過的對(duì)象的副本。
假設(shè)瀏覽器正在請(qǐng)求對(duì)象。將會(huì)發(fā)生如下情況:
1.瀏覽器建立一個(gè)到Web緩存器的TCP連接,并向Web緩存器中的對(duì)象發(fā)送HTTP請(qǐng)求。
2.Web緩存器進(jìn)行檢查,看看本地是否存儲(chǔ)了該對(duì)象副本。如果有,web緩存器就像客戶瀏覽器用HTTP響應(yīng)報(bào)文返回該對(duì)象。
3.如果Web緩存器中沒有該對(duì)象,他就打開一個(gè)與該對(duì)象的初始服務(wù)器的TCP連接。web緩存器則在這個(gè)緩存器到服務(wù)器的TCP連接上發(fā)送一個(gè)對(duì)該對(duì)象的HTTP請(qǐng)求,在收到該請(qǐng)求后,初始服務(wù)器向該Web緩存器發(fā)送具有該對(duì)象的HTTP響應(yīng)。
4.當(dāng)Web緩存器接收到該對(duì)象時(shí),他在本地存儲(chǔ)空間存儲(chǔ)一份副本,并向客戶的瀏覽器用HTTP響應(yīng)報(bào)文發(fā)送該副本。
page = 76