计算机网络-应用层
一、應(yīng)用層協(xié)議原理
????1.網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
????應(yīng)用程序的體系結(jié)構(gòu)明顯不同于網(wǎng)絡(luò)的體系結(jié)構(gòu)。從應(yīng)用程序研發(fā)者的角度看,網(wǎng)絡(luò)體系結(jié)構(gòu)是固定的,并為應(yīng)用程序提供了特定的服務(wù)集合。
????應(yīng)用程序體系結(jié)構(gòu)(application architecture)由應(yīng)用程序研發(fā)者設(shè)計(jì),規(guī)定了如何在各種端系統(tǒng)上組織該應(yīng)用程序。
????現(xiàn)代網(wǎng)絡(luò)應(yīng)用程序的兩種主流體系結(jié)構(gòu):客戶機(jī)/服務(wù)器體系結(jié)構(gòu)和對(duì)等(P2P)體系結(jié)構(gòu)。
????客戶機(jī)/服務(wù)器體系結(jié)構(gòu)(client-sever architecture):有一個(gè)總是打開的主機(jī)稱為服務(wù)器,它服務(wù)于來自許多其他稱為客戶機(jī)的主機(jī)請(qǐng)求??蛻魴C(jī)主機(jī)既可以有時(shí)打開,也可能總是打開。一個(gè)典型的例子是Web應(yīng)用程序,其中總是打開的Web服務(wù)器服務(wù)于運(yùn)行在客戶機(jī)主機(jī)上的瀏覽器的請(qǐng)求。當(dāng)Web服務(wù)器接收到來自某客戶機(jī)對(duì)某對(duì)象的請(qǐng)求時(shí),它向該客戶機(jī)發(fā)送所請(qǐng)求的對(duì)象作為響應(yīng)。注意到客戶機(jī)/服務(wù)器體系結(jié)構(gòu)中,客戶機(jī)相互之間不能直接通信,例如,在Web應(yīng)用中兩個(gè)瀏覽器不能直接通信。客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的另一個(gè)特征是服務(wù)器具有固定的、周知的地址,稱為IP地址。因?yàn)榉?wù)器具有固定的、周知的地址,并且總是處于打開狀態(tài),所以客戶機(jī)總是能夠通過向該服務(wù)器的地址發(fā)送分組來與其聯(lián)系。某些具有客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的更為著名的應(yīng)用程序包括Web、FTP、Telnet和電子郵件。
????在P2P體系結(jié)構(gòu)(P2P architecture)中,對(duì)總是打開的基礎(chǔ)設(shè)施服務(wù)器有最小的依賴。任意間斷連接的主機(jī)對(duì)稱為對(duì)等方,直接相互通信。對(duì)等方并不為服務(wù)提供商所有,而是為用戶控制的桌面機(jī)和膝上機(jī)所有,大多數(shù)對(duì)等方駐留在家庭、大學(xué)和辦公室。因?yàn)檫@種對(duì)等方通信不必通過專門的服務(wù)器所以體系結(jié)構(gòu)被稱為對(duì)等方到對(duì)等方(簡(jiǎn)稱為對(duì)等)。目前,大多數(shù)流行的流量密集型應(yīng)用程序都是P2P體系結(jié)構(gòu)的,包括文件分發(fā)、文件搜索/共享、因特網(wǎng)電話和IPTV(PPLive).某些應(yīng)用具有混合的體系結(jié)構(gòu),由客戶機(jī)/服務(wù)器和P2P元素結(jié)合而成。例如,對(duì)于許多即時(shí)通訊而言,服務(wù)器場(chǎng)用于跟蹤用戶的IP地址,但用戶到用戶的報(bào)文在用戶主機(jī)之間直接發(fā)送(無需通過中間服務(wù)器)。P2P體系結(jié)構(gòu)的最突出特性之一是它的自擴(kuò)展性(self-scalability)。例如,在一個(gè)P2P文件共享應(yīng)用中,盡管每個(gè)對(duì)等方都由請(qǐng)求文件產(chǎn)生負(fù)載,但每個(gè)對(duì)等方向其他對(duì)等方分發(fā)文件也為系統(tǒng)增加了服務(wù)能力。P2P體系結(jié)構(gòu)也是成本有效的,因?yàn)樗鼈兺ǔ2恍枰嫶蟮姆?wù)器基礎(chǔ)設(shè)施和服務(wù)器帶寬。為了降低成本,服務(wù)提供商(MSN、Yahoo等)對(duì)于P2P體系結(jié)構(gòu)用于系統(tǒng)的興趣越來越大。另一方面,由于P2P應(yīng)用程序具有高度分布和開放的性質(zhì),因此要格外關(guān)注系統(tǒng)的安全。
????2.進(jìn)程通信
????2.1?客戶機(jī)和服務(wù)器進(jìn)程:
????網(wǎng)絡(luò)應(yīng)用程序由成對(duì)的進(jìn)程組成,這些進(jìn)程通過網(wǎng)絡(luò)相互發(fā)送報(bào)文。例如,在Web應(yīng)用程序中,一個(gè)客戶機(jī)瀏覽器進(jìn)程與一臺(tái)Web服務(wù)器進(jìn)程交換報(bào)文。在一個(gè)P2P文件共享系統(tǒng)中,文件從一個(gè)對(duì)等方中的進(jìn)程傳輸?shù)搅硪粋€(gè)對(duì)等方中的進(jìn)程。對(duì)每對(duì)進(jìn)程通信,通常將這兩個(gè)進(jìn)程之一表示為客戶機(jī)(client),而另一個(gè)進(jìn)程表示為服務(wù)器(server)。在Web中,瀏覽器是一個(gè)客戶機(jī)進(jìn)程,Web服務(wù)器是一個(gè)服務(wù)器進(jìn)程。對(duì)于P2P文件共享,下載文件的對(duì)等方被標(biāo)示為客戶機(jī),上載文件的對(duì)等方的對(duì)等方稱為服務(wù)器。
????在給定的一對(duì)進(jìn)程之間的通信會(huì)話中,發(fā)起通信的進(jìn)程被標(biāo)示為客戶機(jī),在會(huì)話開始時(shí)等待聯(lián)系的進(jìn)程是服務(wù)器。
????2.2??進(jìn)程與計(jì)算機(jī)網(wǎng)絡(luò)之間的接口:
????多數(shù)應(yīng)用程序由通信進(jìn)程對(duì)組成,每對(duì)中的兩個(gè)進(jìn)程互相發(fā)送報(bào)文。從一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送的報(bào)文必須通過下面的網(wǎng)絡(luò)。進(jìn)程通過一個(gè)稱為套接字(socket)的軟件接口在網(wǎng)絡(luò)上發(fā)送和接收?qǐng)?bào)文。
????進(jìn)程類比于一座房子,而它的套接字可以類比于它的門。當(dāng)一個(gè)進(jìn)程想向位于另外一臺(tái)主機(jī)上的另一個(gè)進(jìn)程發(fā)送報(bào)文時(shí),它把報(bào)文推出門(socket)。該發(fā)送進(jìn)程假定門到另一側(cè)之間有運(yùn)輸?shù)幕A(chǔ)設(shè)施,該設(shè)施將把報(bào)文傳送到目的進(jìn)程的門口。一旦報(bào)文抵達(dá)目的主機(jī),它通過報(bào)文接收進(jìn)程的門(socket)傳遞,然后接收進(jìn)程對(duì)報(bào)文進(jìn)行相應(yīng)的處理。
????由于套接字是在網(wǎng)絡(luò)上建立網(wǎng)絡(luò)應(yīng)用程序的可編程接口,因此也將套接字稱為應(yīng)用程序和網(wǎng)絡(luò)之間的應(yīng)用程序編程接口(Application Programming Interface,API)。應(yīng)用程序開發(fā)者可以控制套接字在應(yīng)用層端的所有東西,但是對(duì)該套接字的運(yùn)輸層端幾乎沒有控制。
????應(yīng)用程序開發(fā)者對(duì)運(yùn)輸層的控制僅限于:選擇運(yùn)輸層協(xié)議 也許能設(shè)定及格運(yùn)輸層參數(shù),如最大緩存、最大報(bào)文長(zhǎng)度等。一旦應(yīng)用程序開發(fā)者選擇了一個(gè)運(yùn)輸層協(xié)議(若可供選擇),則應(yīng)用程序就建立在由該協(xié)議提供的運(yùn)輸層服務(wù)之上。
????2.3 ?可供應(yīng)用程序使用的運(yùn)輸服務(wù):
????套接字是應(yīng)用程序進(jìn)程和運(yùn)輸層協(xié)議之間的接口。發(fā)送端的應(yīng)用程序通過套接字發(fā)送報(bào)文。在套接字的另一側(cè),運(yùn)輸層協(xié)議負(fù)責(zé)將該報(bào)文傳輸?shù)浇邮仗捉幼值摹伴T”中。
????可從四個(gè)方面對(duì)應(yīng)用程序服務(wù)要求進(jìn)行分類:可靠數(shù)據(jù)傳輸、吞吐量、定時(shí)和安全性。
????可靠數(shù)據(jù)傳輸(reliable data transfer):分組能在計(jì)算機(jī)網(wǎng)絡(luò)中丟失。例如,分組能夠使路由器中的緩存溢出,或者當(dāng)分組中的某些比特?fù)p壞后可能被丟棄。像電子郵件、文件傳輸、遠(yuǎn)程主機(jī)訪問、Web文檔傳輸以及金融應(yīng)用等應(yīng)用,數(shù)據(jù)丟失可能會(huì)造成災(zāi)難性的后果。因此,對(duì)于這些應(yīng)用,必須確保由應(yīng)用程序的一端發(fā)送的數(shù)據(jù)正確地、完全地交付給該應(yīng)用程序的另一端。如果一個(gè)協(xié)議提供了這樣的確保數(shù)據(jù)交付服務(wù),就提供了可靠數(shù)據(jù)傳輸(reliable data transfer)。運(yùn)輸層協(xié)議能夠潛在地向應(yīng)用程序提供的一個(gè)重要服務(wù)是進(jìn)程到進(jìn)程的可靠數(shù)據(jù)傳輸。當(dāng)一個(gè)運(yùn)輸層協(xié)議提供這種服務(wù)時(shí),發(fā)送進(jìn)程只要將其數(shù)據(jù)傳遞到套接字,就可以相信該數(shù)據(jù)將能無差錯(cuò)地到達(dá)接收進(jìn)程。
????吞吐量:兩個(gè)進(jìn)程在一條網(wǎng)絡(luò)路徑上進(jìn)行通信會(huì)話時(shí),可用吞吐量就是發(fā)送進(jìn)程能夠向接收進(jìn)程交付比特的速率。因?yàn)槠渌麜?huì)話將共享沿著該網(wǎng)絡(luò)路徑上的帶寬,并且這些其他會(huì)話將會(huì)到達(dá)和離開,所以可用吞吐量將隨時(shí)間波動(dòng)。自然就有了另一種服務(wù),即運(yùn)輸層協(xié)議能夠以某種特定的速率提供確保的可用吞吐量。具有吞吐量要求的應(yīng)用程序稱為帶寬敏感的應(yīng)用(bandwidth-sensitive application)。
????定時(shí):運(yùn)輸層協(xié)議可以提供定時(shí)保證。例如,在多方游戲和虛擬互動(dòng)環(huán)境中,在做出動(dòng)作及看到來自環(huán)境的響應(yīng)之間,較長(zhǎng)的時(shí)延會(huì)時(shí)游戲失去真實(shí)感。在非實(shí)時(shí)的應(yīng)用中,較低的時(shí)延總要比較高的時(shí)延好,但對(duì)端到端的時(shí)延沒有嚴(yán)格的約束。
????安全性:運(yùn)輸層協(xié)議能夠?yàn)閼?yīng)用程序提供一種或多種安全性服務(wù)。例如,在發(fā)送主機(jī)中,運(yùn)輸層協(xié)議能夠加密由發(fā)送進(jìn)程傳輸?shù)乃袛?shù)據(jù);在接收主機(jī)中,運(yùn)輸層協(xié)議能夠在將數(shù)據(jù)交付給接收進(jìn)程之前解密這些數(shù)據(jù)。這種服務(wù)將對(duì)發(fā)送進(jìn)程和接收進(jìn)程保密,以防發(fā)送進(jìn)程和接收進(jìn)程以某種方式觀察到數(shù)據(jù)。運(yùn)輸層協(xié)議也提供除了機(jī)密性以外的其他安全性服務(wù),包括數(shù)據(jù)完整性和端點(diǎn)鑒別。
????2.4 ?因特網(wǎng)提供的運(yùn)輸服務(wù)
????TCP服務(wù):包括面向連接服務(wù)和可靠數(shù)據(jù)傳輸服務(wù)。
????面向連接服務(wù):使用TCP協(xié)議時(shí),在應(yīng)用層數(shù)據(jù)報(bào)文開始流動(dòng)之前,其客戶機(jī)程序和服務(wù)器程序之間相互交換運(yùn)輸層控制信息。這個(gè)所謂的握手過程提示客戶機(jī)和服務(wù)器做好傳輸分組的準(zhǔn)備。在握手階段后,就在兩個(gè)進(jìn)程的套接字之間建立了一個(gè)TCP連接(TCP connection)。這個(gè)連接是全雙工的,即連接雙方的進(jìn)程可以在此連接上同時(shí)進(jìn)行報(bào)文收發(fā)。當(dāng)應(yīng)用程序結(jié)束報(bào)文發(fā)送時(shí),必須拆除該連接。之所以稱之為“面向連接”的服務(wù),而不是“連接”服務(wù),是因?yàn)閮蓚€(gè)進(jìn)程之間是以一種非常松散的方式進(jìn)行連接的。
????可靠數(shù)據(jù)傳輸服務(wù):進(jìn)行通信的進(jìn)程依靠TCP協(xié)議,無差錯(cuò)、按適當(dāng)順序交付發(fā)送的數(shù)據(jù)。當(dāng)應(yīng)用程序的一端通過套接字傳送一個(gè)字節(jié)流時(shí),它能夠依靠TCP協(xié)議將相同的字節(jié)流交付給接收方的套接字,而沒有字節(jié)的丟失和冗余。
????TCP協(xié)議還具有擁塞控制機(jī)制,這種服務(wù)不一定能為通信進(jìn)程帶來直接好處,但能為因特網(wǎng)帶來整體好處。當(dāng)發(fā)送方和接收方之間的網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),TCP協(xié)議的擁塞控制機(jī)制會(huì)抑制發(fā)送進(jìn)程(客戶機(jī)或服務(wù)器)。TCP協(xié)議的擁塞控制試圖限制每個(gè)TCP連接,使它們達(dá)到公平共享網(wǎng)絡(luò)帶寬的目的。對(duì)有最低要求帶寬限制的實(shí)時(shí)音頻/視頻應(yīng)用而言,抑制傳輸速率具有非常有害的影響。況且,實(shí)時(shí)應(yīng)用是可以容忍數(shù)據(jù)丟失的,并不需要完全可靠的傳輸服務(wù)。出于這些原因,實(shí)時(shí)應(yīng)用的開發(fā)者們通常將他們的應(yīng)用放在UDP協(xié)議而不是TCP協(xié)議之上。
????UDP服務(wù):UDP是一種不提供不必要服務(wù)的輕量級(jí)運(yùn)輸層協(xié)議,它僅提供最小服務(wù)。UDP是無連接的,因此在兩個(gè)進(jìn)程通信前沒有握手過程。UDP協(xié)議提供的是不可靠數(shù)據(jù)傳輸服務(wù),也就是說,當(dāng)進(jìn)程通過UDP套接字發(fā)送報(bào)文時(shí),UDP協(xié)議并不保證該報(bào)文能夠被接收進(jìn)程接收到。不僅如此,接收進(jìn)程收到的報(bào)文也可能是亂序到達(dá)的。
????UDP沒有擁塞控制機(jī)制,所以發(fā)送端可以以任何速率向其下面的層(網(wǎng)絡(luò)層)注入數(shù)據(jù)。
????因特網(wǎng)運(yùn)輸層協(xié)議所不提供的服務(wù):可靠數(shù)據(jù)傳輸、吞吐量、定時(shí)和安全性是四種可能的運(yùn)輸層協(xié)議服務(wù)。TCP提供了可靠的端到端數(shù)據(jù)傳輸服務(wù),并且TCP在應(yīng)用層可以很容易通過SSL來提供安全服務(wù)。但在對(duì)TCP和UDP的描述中,缺少對(duì)吞吐量和定時(shí)保證的討論,即目前的因特網(wǎng)運(yùn)輸層協(xié)議并沒有提供這兩種服務(wù)。但是這并不意味著因特網(wǎng)電話等時(shí)間敏感應(yīng)用就不能運(yùn)行在今天的因特網(wǎng)上了,因?yàn)樵谝蛱鼐W(wǎng)上時(shí)間敏感應(yīng)用已經(jīng)存在多年了。這些應(yīng)用運(yùn)行的很好是因?yàn)樵O(shè)計(jì)時(shí)盡最大可能彌補(bǔ)了這些保證的缺乏。因特網(wǎng)通常能夠?yàn)闀r(shí)間敏感應(yīng)用提供使之滿意的服務(wù),但是不能提供任何有關(guān)定時(shí)或帶寬的保證。
????進(jìn)程尋址:兩個(gè)進(jìn)程之間進(jìn)行通信時(shí),一個(gè)發(fā)送進(jìn)程為了識(shí)別特定接收進(jìn)程,需要定義兩種信息:該主機(jī)的名稱或地址 ?用來指定目的主機(jī)上接收進(jìn)程的標(biāo)識(shí)。
????在因特網(wǎng)中,主機(jī)是用IP地址(IP address)進(jìn)行標(biāo)識(shí)的。IP地址是用來唯一標(biāo)識(shí)主機(jī)的32比特?cái)?shù)(然而,網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)的廣泛部署意味著實(shí)際中32比特的IP地址不僅僅唯一地用于尋址一臺(tái)主機(jī))。
????除了知道報(bào)文去往目的主機(jī)的IP地址外,發(fā)送程序也必須識(shí)別運(yùn)行在主機(jī)上的接收進(jìn)程。之所以需要該信息,是因?yàn)橥ǔT谝慌_(tái)主機(jī)上能夠運(yùn)行許多網(wǎng)絡(luò)應(yīng)用程序。目的地端口號(hào)(port number)就是服務(wù)于這個(gè)目的的。已經(jīng)給流行的應(yīng)用程序分配了特定的端口號(hào)。例如,Web服務(wù)進(jìn)程用的是80號(hào)端口。郵件服務(wù)進(jìn)程(使用SMTP協(xié)議)用的是25號(hào)端口。當(dāng)開發(fā)者創(chuàng)建了一個(gè)新的網(wǎng)絡(luò)應(yīng)用時(shí),必須為該應(yīng)用程序分配一個(gè)新的端口號(hào)。
????2.5 ?應(yīng)用層協(xié)議
? ? 應(yīng)用層協(xié)議(application-layer protocol)定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何相互傳遞報(bào)文。特別是應(yīng)用層協(xié)議定義了:
????交換的報(bào)文類型,如請(qǐng)求報(bào)文和相應(yīng)報(bào)文。
????各種報(bào)文類型的語法,如報(bào)文中的各個(gè)字段及其詳細(xì)描述。
????字段的語義,即包含在字段中的信息的含義。
????進(jìn)程何時(shí)、如何發(fā)送報(bào)文及對(duì)報(bào)文相應(yīng)的規(guī)則。
????注意區(qū)分網(wǎng)絡(luò)應(yīng)用和應(yīng)用層協(xié)議。應(yīng)用層協(xié)議知識(shí)網(wǎng)絡(luò)應(yīng)用的一部分。Web應(yīng)用是一種客戶機(jī)/服務(wù)器應(yīng)用程序,它允許客戶機(jī)按照需求從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)用的一部分。
二、Web應(yīng)用和HTTP協(xié)議
????1.HTTP概況
????Web的應(yīng)用層協(xié)議是超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP),它是Web的核心。HTTP協(xié)議由兩部分程序?qū)崿F(xiàn):一個(gè)客戶機(jī)程序和一個(gè)服務(wù)器程序,它們運(yùn)行在不同的端系統(tǒng)中,通過交換HTTP報(bào)文進(jìn)行會(huì)話。HTTP定義了這些報(bào)文的格式以及客戶機(jī)和服務(wù)器是如何進(jìn)行報(bào)文交換的。
????一些Web中的常用術(shù)語:
????Web頁面(Web page,也叫文檔)是由對(duì)象組成的。對(duì)象(object)簡(jiǎn)單來說就是文件,如HTML文件,JPEG圖形文件,Java小程序或視頻片段文件,這些文件可通過一個(gè)URL地址尋址,多數(shù)Web頁面含有一個(gè)基本HTML文件(base HTML file)以及幾個(gè)引用對(duì)象。例如,如果一個(gè)Web頁面包含HTML文本和5個(gè)JPEG圖形文件,那么這個(gè)Web頁面有6個(gè)對(duì)象:一個(gè)基本HTML文件加五個(gè)圖形。在基本HTML文件中通過對(duì)象的URL地址對(duì)對(duì)象進(jìn)行引用。每個(gè)URL地址由兩部分組成:存放對(duì)象的服務(wù)器主機(jī)名和對(duì)象的路徑名。例如,URL地址http://www.someSchool.edu/someDepartment/picture.gif中的www.someSchool.edu就是主機(jī)名,/someDepartment/picture.gif就是路徑名。因?yàn)?strong>Web瀏覽器(Web Browser)實(shí)現(xiàn)了HTTP的客戶機(jī)端,所以在Web環(huán)境中,我們經(jīng)常交替使用“瀏覽器”和“客戶機(jī)”這兩個(gè)術(shù)語。Web服務(wù)器(Web server)用于存儲(chǔ)Web對(duì)象,每個(gè)對(duì)象由URL尋址。Web服務(wù)器實(shí)現(xiàn)了HTTP服務(wù)器端。
????HTTP定義了Web客戶機(jī)是如何向Web服務(wù)器請(qǐng)求Web頁面,以及服務(wù)器如何將Web頁面?zhèn)魉徒o客戶機(jī)的。當(dāng)用戶請(qǐng)求一個(gè)Web頁面時(shí),瀏覽器向服務(wù)器發(fā)出對(duì)該頁面中所包含對(duì)象的HTTP請(qǐng)求報(bào)文,服務(wù)器接受請(qǐng)求并用包含這些對(duì)象的HTTP響應(yīng)報(bào)文進(jìn)行響應(yīng)。
????HTTP使用TCP(而不是UDP)作為它的支撐運(yùn)輸層協(xié)議。HTTP客戶機(jī)發(fā)起一個(gè)與服務(wù)器的TCP連接,一旦連接建立,瀏覽器和服務(wù)器進(jìn)程就可以通過套接字接口訪問TCP??蛻魴C(jī)從套接字接口發(fā)送HTTP請(qǐng)求報(bào)文和接收HTTP響應(yīng)報(bào)文。服務(wù)器從套接字接口接收HTTP請(qǐng)求報(bào)文和發(fā)送HTTP響應(yīng)報(bào)文。一旦客戶機(jī)發(fā)送了一個(gè)請(qǐng)求報(bào)文,該報(bào)文就“脫離客戶機(jī)控制”并“進(jìn)入TCP的控制”。TCP為HTTP提供可靠數(shù)據(jù)傳輸服務(wù)。這意味著,一個(gè)客戶機(jī)進(jìn)程發(fā)出的每個(gè)HTTP請(qǐng)求報(bào)文最終都能完整地到達(dá)服務(wù)器;服務(wù)器進(jìn)程發(fā)出的每個(gè)HTTP響應(yīng)報(bào)文最終也都能完整地到達(dá)客戶機(jī)。
????注意到一個(gè)重要的現(xiàn)象:服務(wù)器向客戶機(jī)發(fā)送被請(qǐng)求的文件時(shí),并不存儲(chǔ)任何關(guān)于該客戶機(jī)的狀態(tài)信息。假如某個(gè)特定的客戶機(jī)在短短的幾秒鐘內(nèi)兩次請(qǐng)求同一個(gè)對(duì)象,服務(wù)器并不會(huì)因?yàn)閯倓倿樵撚脩籼峁┝嗽搶?duì)象就不再做出反應(yīng),而是重新發(fā)送該對(duì)象,就像該服務(wù)器已經(jīng)完全忘記不久之前所做過的事一樣。因?yàn)橐粋€(gè)HTTP服務(wù)器并不保存關(guān)于客戶機(jī)的任何信息,所以我們說HTTP是一個(gè)無狀態(tài)協(xié)議(stateless protocol)。還注意到,Web使用了客戶機(jī)/服務(wù)器應(yīng)用程序體系結(jié)構(gòu)。Web服務(wù)總是打開的,具有一個(gè)固定的IP地址,它服務(wù)于數(shù)以百萬計(jì)的不同瀏覽器。
????2.非持久連接和持久連接
????在許多因特網(wǎng)應(yīng)用中,客戶機(jī)和服務(wù)器進(jìn)行長(zhǎng)時(shí)間通信,其中客戶機(jī)發(fā)出一系列請(qǐng)求,服務(wù)器對(duì)每個(gè)請(qǐng)求進(jìn)行響應(yīng)。根據(jù)不同的應(yīng)用程序以及應(yīng)用程序使用的方式,這一系列請(qǐng)求可以一個(gè)接一個(gè)發(fā)出,也可以間斷性地發(fā)出。當(dāng)這種客戶機(jī)/服務(wù)器的交互運(yùn)行于TCP協(xié)議之上時(shí),應(yīng)用程序的研制者需要確定每個(gè)請(qǐng)求/響應(yīng)對(duì)是經(jīng)一個(gè)單獨(dú)的TCP連接發(fā)送,還是所有的請(qǐng)求及響應(yīng)經(jīng)相同的TCP連接發(fā)送。如果采用前一種方法,該應(yīng)用程序被稱為使用非持久連接(non-persistent connection);如果采用后一種方法,該應(yīng)用程序被稱為使用持久連接(persistent connection)。HTTP既可以使用非持久連接,也可以使用持久連接,默認(rèn)方式下HTTP使用持久連接。
????2.1 ?非持久連接
????在非持久連接的情況下,從服務(wù)器向客戶機(jī)傳送一個(gè)Web頁面的步驟:
????假設(shè)該頁面含有一個(gè)基本HTML文件和10個(gè)JPEG圖形,并且這11個(gè)對(duì)象位于同一臺(tái)服務(wù)器上。該HTML文件的URL為:http://www.someSchool.edu/someDepartment/home.index。 ?
????HTTP客戶機(jī)進(jìn)程在端口號(hào)80發(fā)起一個(gè)到服務(wù)器www.someSchool.edu的TCP連接,該端口號(hào)是HTTP的默認(rèn)端口。客戶機(jī)和服務(wù)器上分別有一個(gè)套接字與該連接相關(guān)聯(lián)。
????HTTP客戶機(jī)經(jīng)它的套接字向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求報(bào)文。請(qǐng)求報(bào)文中包含了路徑名/someDepartment/home.index。
????HTTP服務(wù)器進(jìn)程經(jīng)它的套接字接收該請(qǐng)求報(bào)文,從其存儲(chǔ)器中檢索出對(duì)象someDepartment/home.index,在一個(gè)HTTP響應(yīng)報(bào)文中封裝對(duì)象,并通過其套接字向客戶機(jī)發(fā)送響應(yīng)報(bào)文。
????HTTP服務(wù)器進(jìn)程通知TCP斷開該TCP連接。(但是直到TCP確認(rèn)客戶機(jī)已經(jīng)完整地收到響應(yīng)報(bào)文為止,它才會(huì)真正中斷連接。)
????HTTP客戶機(jī)接收響應(yīng)報(bào)文,TCP連接關(guān)閉。報(bào)文中指出封裝的對(duì)象是一個(gè)HTML文件,客戶機(jī)從響應(yīng)報(bào)文中提取出該文件,檢查該文件,得到對(duì)10個(gè)JPEG圖形的引用。
????對(duì)每個(gè)引用的JPEG圖形對(duì)象重復(fù)前四步。
????當(dāng)瀏覽器收到Web頁面后,把它顯示給用戶。兩個(gè)不同的瀏覽器也許會(huì)以不同的方式解釋該頁面。HTTP協(xié)議并不管客戶機(jī)如何解釋一個(gè)Web頁面。HTTP規(guī)約僅定義了在HTTP客戶機(jī)程序與HTTP服務(wù)器程序之間的通信協(xié)議。
????每個(gè)TCP連接在服務(wù)器返回對(duì)象后關(guān)閉,該連接并不為其他的對(duì)象而持續(xù)下來。注意到每個(gè)TCP連接只傳輸一個(gè)請(qǐng)求報(bào)文和一個(gè)相應(yīng)報(bào)文。因此在本例中,用戶請(qǐng)求該Web頁面,要建立11個(gè)TCP連接。
????在上面描述的步驟中,我們有意沒有明確客戶機(jī)獲得這10個(gè)JPEG圖形對(duì)象,是使用10個(gè)串行的TCP連接還是使用并行的TCP連接。事實(shí)上,用戶可以設(shè)置瀏覽器以控制并行度。默認(rèn)方式下,大部分瀏覽器打開5到10個(gè)并行的TCP連接,而每個(gè)連接處理一個(gè)請(qǐng)求-響應(yīng)事務(wù)。還可以將最大并行連接數(shù)設(shè)置為1,這樣10個(gè)連接就會(huì)以串行方式建立。使用并行連接將會(huì)大大縮短響應(yīng)時(shí)間。
????往返時(shí)間(Round-Trip Time,RTT):一個(gè)小分組從客戶機(jī)到服務(wù)器再回到客戶機(jī)所花費(fèi)的時(shí)間。
????RTT包括分組傳播時(shí)延、分組在中間路由器和交換機(jī)上的排隊(duì)時(shí)延以及分組處理時(shí)延。
????當(dāng)用戶點(diǎn)擊超鏈接時(shí),瀏覽器在瀏覽器和Web服務(wù)器之間發(fā)起一個(gè)TCP連接,這涉及一個(gè)“三次握手”的過程,即客戶機(jī)向服務(wù)器發(fā)送一個(gè)小TCP報(bào)文段,服務(wù)器用一個(gè)小TCP報(bào)文段做出確認(rèn)和響應(yīng),最后,客戶機(jī)向服務(wù)器返回確認(rèn)。一個(gè)RTT等于三次握手中前兩個(gè)部分所耗的時(shí)間。完成了三次握手的前兩個(gè)部分后,客戶機(jī)將三次握手的第三部分(確認(rèn))與一個(gè)HTTP請(qǐng)求報(bào)文結(jié)合起來發(fā)送到該TCP連接。一旦請(qǐng)求報(bào)文到達(dá)服務(wù)器,服務(wù)器向該TCP連接發(fā)送HTML文件。該HTTP請(qǐng)求/響應(yīng)又耗掉一個(gè)RTT。因此,粗略地講,總的響應(yīng)時(shí)間就是兩個(gè)RTT加上服務(wù)器傳輸HTML文件的時(shí)間。
????2.2 ?持久連接
????非持久連接有一個(gè)缺點(diǎn)。首先,必須為每一個(gè)請(qǐng)求的對(duì)象建立和維護(hù)一個(gè)全新的連接。對(duì)于每個(gè)這樣的連接,在客戶機(jī)和服務(wù)器都要分配TCP的緩沖區(qū)和變量,這給服務(wù)器帶來了嚴(yán)重的負(fù)擔(dān),因?yàn)橐慌_(tái)Web服務(wù)器可能同時(shí)服務(wù)于數(shù)以百計(jì)的客戶機(jī)請(qǐng)求。其次,就像我們剛描述的那樣,每一個(gè)對(duì)象的傳輸時(shí)延為兩個(gè)RTT,即一個(gè)RTT用于建立TCP,另一個(gè)RTT用于請(qǐng)求和接收一個(gè)對(duì)象。
????在持久連接的情況下,服務(wù)器在發(fā)送響應(yīng)后保持該TCP連接打開。特別是一個(gè)完整的Web頁面(如上例中的基本HTML文件加上10個(gè)圖形)可以用單個(gè)持久TCP連接進(jìn)行傳送。更有甚者,位于同一臺(tái)服務(wù)器的多個(gè)Web頁面在從該服務(wù)器發(fā)送給同一個(gè)客戶機(jī)時(shí),可以在單個(gè)持久TCP連接上進(jìn)行??梢栽趩蝹€(gè)持久TCP連接上進(jìn)行。對(duì)這些對(duì)象的請(qǐng)求可以一個(gè)接一個(gè)地發(fā)出,而不必等待未決請(qǐng)求的回答(流水線)。一般來說,如果一個(gè)連接經(jīng)過一定時(shí)間間隔(一個(gè)可配置的超時(shí)間隔)仍未被使用,HTTP服務(wù)器就關(guān)閉該連接。HTTP默認(rèn)模式使用了流水線方式的持久連接。
????3.HTTP報(bào)文格式
????HTTP規(guī)約包含了對(duì)HTTP報(bào)文格式的定義。HTTP報(bào)文有兩種:請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
????3.1 ?HTTP請(qǐng)求報(bào)文
????一個(gè)典型的HTTP請(qǐng)求報(bào)文? ?
| 1 2 3 4 5 | GET?/somedir/page.html?HTTP/1.1 Host:?www.someschool.edu Connection:?close User-agent:?Mozilla/4.0 Accept-language:?fr |
????首先,我們看到該報(bào)文是用普通的ASCII文本書寫的,這樣有一定計(jì)算機(jī)知識(shí)的人就能夠閱讀它。其次,我們看到該報(bào)文含有5行,每行用一個(gè)回車換行符結(jié)束,最后一行后跟有附加的回車換行符。該報(bào)文只有5行,而實(shí)際的請(qǐng)求報(bào)文可以有更多的行或僅有一行。HTTP請(qǐng)求報(bào)文的第一行叫做請(qǐng)求行(request line)。請(qǐng)求行有三個(gè)字段:方法字段、URL字段和HTTP協(xié)議版本字段。方法字段可以取值GET、POST、HEAD、和DELETE。絕大部分的HTTP請(qǐng)求報(bào)文使用GET方法。當(dāng)瀏覽器請(qǐng)求一個(gè)對(duì)象時(shí),使用GET方法,在URL字段填寫該對(duì)象的URL地址。在本例中,瀏覽器請(qǐng)求對(duì)象/somedir/page.html。其版本字段是自解釋的,在本例中,瀏覽器實(shí)現(xiàn)的是HTTP/1.1版本。
????首部行Host:www.someschool.edu定義了目標(biāo)所在的主機(jī)。你也許認(rèn)為該首部行是不必要的,因?yàn)樵谠撝鳈C(jī)中已經(jīng)有一個(gè)TCP連接了。但是,該首部行提供的信息是Web代理高速緩存所要求的。通過包含Connection:?colse?首部行,瀏覽器告訴服務(wù)器不希望麻煩地使用持久連接,它要求服務(wù)器在發(fā)送完請(qǐng)求的對(duì)象后就關(guān)閉連接。User-agent:首部行用來定義用戶代理,即向服務(wù)器發(fā)送請(qǐng)求瀏覽器的類型。這里瀏覽器的類型是Mozilla/4.0,即Netscape瀏覽器。這個(gè)首部行是有用的,因?yàn)榉?wù)器可以正確地為不同類型的用戶代理實(shí)際發(fā)送相同對(duì)象的不同版本。(每個(gè)版本都由相同的URL處理。)最后,Accept-language:首部行表示用戶想得到對(duì)象的法語版本(如果服務(wù)器中有這樣的對(duì)象),否則,使用服務(wù)器的默認(rèn)版本。Accept-language:首部行僅是HTTP中眾多可選內(nèi)容協(xié)商首部之一。
????4.用戶與服務(wù)器的交互:cookie
????5.Web緩存
????6.條件GET方法
三、文件傳輸協(xié)議:FTP
四、因特網(wǎng)中的電子郵件
五、DNS:因特網(wǎng)的目錄服務(wù)
六、P2P應(yīng)用
七、TCP套接字編程
八、UDP套接字編程
本文轉(zhuǎn)自yeleven 51CTO博客,原文鏈接:http://blog.51cto.com/11317783/1783253
總結(jié)
- 上一篇: 2017-2018-1 20155229
- 下一篇: nginx自定义500、404错误页面