本章學(xué)習(xí)應(yīng)用層
網(wǎng)絡(luò)應(yīng)用是計算機(jī)網(wǎng)絡(luò)存在的理由。
網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
現(xiàn)代網(wǎng)絡(luò)應(yīng)用程序有兩種主流體系結(jié)構(gòu):客戶—服務(wù)器體系結(jié)構(gòu)和對等(P2P)體系結(jié)構(gòu)
客戶—服務(wù)器體系結(jié)構(gòu)(client-server ),在這個結(jié)構(gòu)中,有一個總是打開的主機(jī)稱為服務(wù)器,它服務(wù)于來自許多其他稱為客戶的主機(jī)的請求。
(一個典型的例子是Web應(yīng)用程序,其中總是打開的Web服務(wù)器服務(wù)于來自瀏覽器(運(yùn)行在客戶主機(jī))的請求。當(dāng)它接收到請求后,它向該客戶發(fā)送所請求的對象作為響應(yīng))
這種結(jié)構(gòu)有幾個特點:客戶相互之間不直接通信;服務(wù)器具有固定的、周知的地址(IP地址)
具有這種結(jié)構(gòu)的著名的應(yīng)用程序包括Web、FTP、Telnet、和電子郵件
P2P體系結(jié)構(gòu),在這個結(jié)構(gòu)中對位于數(shù)據(jù)中心的專用服務(wù)器有最小的(或者沒有)依賴,相反,應(yīng)用程序在間斷連接的主機(jī)對之間使用直接通信,這些主機(jī)對被稱為對等方。這種對等通信不必通過專門的服務(wù)器,因此該結(jié)構(gòu)被稱為對等方到對等方的。
這種結(jié)構(gòu)最引人入勝的特征之一是它的自擴(kuò)展性。
(例如,在一個P2P文件共享應(yīng)用中,盡管每個對等方都由于請求文件產(chǎn)生工作負(fù)載。但每個對等方通過向其他對等方分發(fā)文件也為系統(tǒng)增加服務(wù)能力)
進(jìn)程通信
用操作系統(tǒng)的術(shù)語來說,進(jìn)行通信的實際上是進(jìn)程(process)而不是程序。一個進(jìn)程可以被認(rèn)為是運(yùn)行在端系統(tǒng)中的一個程序。在兩個不同端系統(tǒng)上的進(jìn)程,通過跨越計算機(jī)網(wǎng)絡(luò)交換報文而相互通信。發(fā)送進(jìn)程生成并向網(wǎng)絡(luò)中發(fā)送報文,接收進(jìn)程接收這些報文并可能通過回送報文進(jìn)行響應(yīng)。
客戶和服務(wù)器進(jìn)程
網(wǎng)絡(luò)應(yīng)用程序由成對的進(jìn)程組成,這些進(jìn)程通過網(wǎng)絡(luò)相互發(fā)送報文。
(在Web應(yīng)用程序中,一個客戶瀏覽器進(jìn)程與一臺Web服務(wù)器進(jìn)程交換報文;在一個P2P系統(tǒng)中,文件從一個對等方中的進(jìn)程傳輸?shù)搅硪粋€對等方中的進(jìn)程)。對于每對通信進(jìn)程,常將這兩個進(jìn)程之一標(biāo)識為客戶(client),而另一進(jìn)程標(biāo)識為服務(wù)器(server),
具體來說就是:在一對進(jìn)程之間之間的通信會話場景中,發(fā)起通信的進(jìn)程被標(biāo)識為客戶,在會話開始時等待聯(lián)系的進(jìn)程是服務(wù)器。
進(jìn)程與計算機(jī)網(wǎng)絡(luò)之間的接口
多數(shù)程序是由通信進(jìn)程對組成,每對中的兩個進(jìn)程相互發(fā)送報文。從一個進(jìn)程向另一個進(jìn)程發(fā)送的報文必須通過下面的網(wǎng)絡(luò),進(jìn)程通過一個稱為套接字(socket)的軟件接口向網(wǎng)絡(luò)發(fā)送報文和從網(wǎng)絡(luò)接收報文。
?套接字是同一臺主機(jī)內(nèi)應(yīng)用層與運(yùn)輸層之間的接口。由于該套接字是建立網(wǎng)絡(luò)應(yīng)用程序的可編程接口,因此套接字也稱為應(yīng)用程序和網(wǎng)絡(luò)之間的應(yīng)用程序編程接口(Application Programming Interface,API),應(yīng)用程序開發(fā)者可以控制套接字在應(yīng)用層端的一切,但是對該套接字的運(yùn)輸層幾乎沒有控制權(quán)。
進(jìn)程尋址
在一臺主機(jī)上運(yùn)行的進(jìn)程為了向在另一臺主機(jī)上運(yùn)行的進(jìn)程發(fā)送分組,接收進(jìn)程需要有一個地址,為了標(biāo)識該接收進(jìn)程,需要定義兩種信息:①主機(jī)的地址②在目的主機(jī)中指定接收進(jìn)程的標(biāo)識符。在因特網(wǎng)中,主機(jī)由其IP地址標(biāo)識(IP地址是一個32比特的量且它能夠唯一地標(biāo)識該主機(jī))。接收主機(jī)用端口號(port number)來標(biāo)識接收進(jìn)程。
因特網(wǎng)提供的運(yùn)輸服務(wù)
因特網(wǎng)為應(yīng)用程序提供兩個運(yùn)輸層協(xié)議,UDP和TCP, 當(dāng)軟件開發(fā)者為因特網(wǎng)創(chuàng)建一個新的應(yīng)用時,首先要做出的決定是選擇UDP還是TCP,每個協(xié)議為第哦啊用它們的應(yīng)用程序提供不同的服務(wù)集合。
TCP服務(wù)?
TCP服務(wù)模型包括面向連接服務(wù)和可靠數(shù)據(jù)傳輸服務(wù)。當(dāng)某個應(yīng)用程序調(diào)用TCP作為其運(yùn)輸協(xié)議,該應(yīng)用程序就能獲得來自TCP地這兩種服務(wù)。
- 面向連接的服務(wù):在應(yīng)用層數(shù)據(jù)報文開始流動之前,TCP讓客戶和服務(wù)器互相交換運(yùn)輸層控制信息,這個握手過程提醒客戶和服務(wù)器,讓它們?yōu)榇罅糠纸M的到來做好準(zhǔn)備,在握手階段后,一個TCP連接就在兩個進(jìn)程的套接字之間建立了,這條連接是全雙工的,即連接雙方的進(jìn)程可以在此連接上同時進(jìn)行報文收發(fā)。當(dāng)應(yīng)用程序結(jié)束報文發(fā)送時,必須拆除該連接
- 可靠的數(shù)據(jù)傳送服務(wù):通信進(jìn)程能夠依靠TCP,無差錯、按適當(dāng)?shù)捻樞蚪桓端邪l(fā)送的數(shù)據(jù)。當(dāng)應(yīng)用程序的一端將字節(jié)流傳進(jìn)套接字時,它能夠依靠TCP將相同的字節(jié)流交付給接收方的套接字,沒有字節(jié)的丟失和冗余
TCP協(xié)議還具有擁塞控制機(jī)制,這種服務(wù)不一定能為通信進(jìn)程帶來直接好處,但能為因特網(wǎng)帶來整體好處。當(dāng)發(fā)送方和接收方之間的網(wǎng)絡(luò)出現(xiàn)擁塞時,TCP的擁塞控制機(jī)制會抑制發(fā)送進(jìn)程。
UDP服務(wù)?
UDP是一種不提供不必要服務(wù)的輕量級運(yùn)輸協(xié)議,它僅提供最小服務(wù)。
- UDP是無連接的,因此在兩個進(jìn)程通信前沒有握手過程。
- UDP協(xié)議提供一種不可靠數(shù)據(jù)傳輸服務(wù),當(dāng)進(jìn)程將一個報文發(fā)送進(jìn)UDP套接字時,UDP協(xié)議并不保證該報文將到達(dá)接收進(jìn)程,而且到達(dá)接收進(jìn)程的報文也有可能是亂序到達(dá)的。
UDP沒有包括擁塞控制機(jī)制,所以UDP的發(fā)送端可以用它選定的任何速率向其下層(網(wǎng)絡(luò)層)注入數(shù)據(jù)
這里需要注意的是無論是TCP還是UDP,都沒有提供任何加密機(jī)制。發(fā)送進(jìn)程傳進(jìn)其套接字的數(shù)據(jù)與經(jīng)網(wǎng)絡(luò)傳送到目的端進(jìn)程的數(shù)據(jù)相同,明文方式傳送,這就可能使得信息在任何中間鏈路被發(fā)現(xiàn)。因此研制了TCP的加強(qiáng)版本——安全套接字(Secure Sockets Layer,SSL)。用SSL加強(qiáng)后的TCP不僅能夠做傳統(tǒng)TCP所能做的一切,而且提供了關(guān)鍵的進(jìn)程到進(jìn)程的安全性服務(wù),包括加密、數(shù)據(jù)完整性和端點鑒別。
應(yīng)用層協(xié)議
應(yīng)用層協(xié)議定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何相互傳遞報文,特別是應(yīng)用層協(xié)議定義了:
- 交換的報文類型,例如請求報文和響應(yīng)報文
- 各種報文類型的語法,如報文中的各個字段及這些字段是如何描述的
- 字段的語義,即這些字段中的信息的含義
- 確定一個進(jìn)程何時以及如何發(fā)送報文,對報文進(jìn)行響應(yīng)的規(guī)則?
Web和HTTP
HTTP概況?
Web的應(yīng)用層協(xié)議是超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP),它是Web的核心。HTTP由兩個程序?qū)崿F(xiàn):一個客戶程序和一個服務(wù)器程序??蛻舫绦蚝头?wù)器程序運(yùn)行在不同的端系統(tǒng)中,通過交換HTTP報文進(jìn)行會話,HTTP定義了這些報文的結(jié)構(gòu)以及客戶和服務(wù)器進(jìn)行報文交換的方式。
{Web頁面是由對象組成的,一個對象只是一個文件,如HTML文件、JEPG圖形、Java小程序這樣的文件,且它們可以通過一個URL地址尋址,每個URL地址由兩部分組成:存放對象的服務(wù)器主機(jī)名和對象的路徑名}
HTTP定義了Web客戶向Web服務(wù)器請求Web頁面的方式,以及服務(wù)器向客戶傳送Web頁面的方式。當(dāng)用戶請求一個Web頁面(如點擊一個超鏈接)時,瀏覽器向服務(wù)器發(fā)出對該頁面中所包含對象的HTTP請求報文,服務(wù)器接收到請求并用包含這些對象的HTTP響應(yīng)報文進(jìn)行響應(yīng),如下圖所示。
HTTP使用TCP作為它的支撐運(yùn)輸協(xié)議(而不是UDP)。HTTP客戶首先發(fā)起一個與服務(wù)器的TCP連接,一旦連接建立,該瀏覽器和服務(wù)器進(jìn)程就可以通過套接字接口訪問TCP(客戶端的套接字接口是客戶進(jìn)程與TCP連接之間的門,服務(wù)器端的套接字接口則是服務(wù)器進(jìn)程與TCP連接之間的門。客戶向它的套接字接口發(fā)送HTTP請求報文并從它的套接字接口接收HTTP響應(yīng)報文,類似的服務(wù)器端也是如此,?一旦客戶向它的套接字接口發(fā)送一個請求報文,該報文就脫離客戶控制并進(jìn)入TCP的控制,而TCP為HTTP提供可靠的數(shù)據(jù)傳輸服務(wù))
服務(wù)器向客戶發(fā)送被請求的文件,而不存儲任何關(guān)于該客戶的狀態(tài)信息,假如客戶在短時間內(nèi)連續(xù)請求同一個對象,服務(wù)器會依次對每一個請求做出回應(yīng),不會因為之前的反應(yīng)而不再提供服務(wù)。因為HTTP服務(wù)器不保存關(guān)于客戶的任何信息,所以說HTTP協(xié)議是一個無狀態(tài)協(xié)議(stateless protocol)
非持續(xù)連接和持續(xù)連接
?客戶和服務(wù)器再一個相當(dāng)長的時間范圍內(nèi)通信,其中客戶發(fā)出一系列請求并且服務(wù)器對每個請求進(jìn)行響應(yīng),每個請求/響應(yīng)對是經(jīng)一個單獨的TCP連接發(fā)送(非持續(xù)連接),或者所有的請求和響應(yīng)經(jīng)過相同的TCP連接發(fā)送(持續(xù)連接)。
- 非持續(xù)連接的HTTP的過程
在非持續(xù)連接情況下,從服務(wù)器向客戶傳送一個Web頁面(假設(shè)該頁面含有一個HTML基本文件和10個JEPG圖形,并且這11個對象位于同一臺服務(wù)器上)
(1)HTTP客戶進(jìn)程在端口號80發(fā)起一個到服務(wù)器的TCP連接,該端口號是HTTP的默認(rèn)端口。在客戶和服務(wù)器上分別有一個套接字與該連接相關(guān)聯(lián)
(2)HTTP客戶經(jīng)它的套接字向該服務(wù)器發(fā)送一個HTTP請求報文
(3)HTTP服務(wù)器進(jìn)程經(jīng)它的套接字接收該請求報文,并向客戶發(fā)送封裝了對象的HTTP響應(yīng)報文
(4)HTTP服務(wù)器進(jìn)程通知TCP斷開TCP連接
(5)HTTP客戶接收響應(yīng)報文,TCP連接關(guān)閉
上面的舉例步驟說明了非持續(xù)連接的使用,其中每個TCP連接在服務(wù)器發(fā)送一個對象后關(guān)閉,即該連接并不為其他的對象而持續(xù)下來。每個TCP連接只傳輸一個請求報文和一個響應(yīng)報文。
往返時間(Round-Trip Time,RTT)是指一個短分組從客戶到服務(wù)器然后再返回所花費的時間。RTT包含分組傳播時延、分組在中間路由器和交換機(jī)上的排隊時延以及分組處理時延
估算一下從客戶請求HTML基本文件到客戶收到整個文件所花費的時間?
當(dāng)用戶點擊鏈接時,引起瀏覽器在它和Web服務(wù)器之間發(fā)起一個TCP連接;這涉及一次”三次握手“過程,即客戶向服務(wù)器發(fā)送一個小TCP報文段,服務(wù)器用一個小TCP報文段做出確認(rèn)和響應(yīng),最后客戶向服務(wù)器返回確認(rèn)。
三次握手中前兩部分耗費的時間占用了一個RTT,完成后客戶向TCP連接發(fā)送一個HTTP請求報文,服務(wù)器對此HTTP請求做出HTTP響應(yīng),這樣又耗費一個RTT,因此?
總的響應(yīng)時間就是兩個RTT加上服務(wù)器傳輸HTML文件的時間。?
- 持續(xù)連接的HTTP
非持續(xù)連接有一些缺點。第一,必須為每一個請求的對象建立和維護(hù)一個全新的連接,對于每一個這樣的連接,在客戶和服務(wù)器中都要分配TCP的緩沖區(qū)和保持TCP變量,給Web服務(wù)器帶來嚴(yán)重負(fù)擔(dān);第二,每一個對象經(jīng)受兩倍RTT的交付時延,一個RTT用于創(chuàng)建TCP,另一個用于請求和接收對象。
在采用持續(xù)連接情況下,服務(wù)器在發(fā)送響應(yīng)后保持該TCP連接打開。在相同的客戶和服務(wù)器之間,后續(xù)的請求和響應(yīng)報文能夠通過相同的連接進(jìn)行傳送。HTTP的默認(rèn)模式是使用帶流水線的持續(xù)連接。
用戶與服務(wù)器的交互:cookie
我們已經(jīng)知道HTTP服務(wù)器是無狀態(tài)的,然而一個Web站點通常希望能夠識別用戶,為此HTTP使用了cookie。
如圖,cookie技術(shù)有4個組件:①在HTTP響應(yīng)報文中的一個cookie首部行;②在HTTP請求報文中的一個cookie首部行;③在用戶端系統(tǒng)保留有一個cookie文件,由用戶的瀏覽器進(jìn)行管理;④位于Web站點的一個后端數(shù)據(jù)庫。
cookie可用于標(biāo)識一個用戶。用戶首次訪問一個站點時,可能需要提供一個用戶標(biāo)識。在后繼會話中,瀏覽器向服務(wù)器傳遞一個cookie首部,從而向該服務(wù)器標(biāo)識了用戶。因此cookie可以在無狀態(tài)的HTTP之上建立一個用戶會話層。但是cookie的使用仍有爭議,因為它們被認(rèn)為是對用戶隱私的一種侵害。
Web緩存?
Web緩存也叫代理服務(wù)器,它是能夠代表初始Web服務(wù)器來滿足HTTP請求的網(wǎng)絡(luò)實體。??
?
可以配置用戶的瀏覽器,使得用戶的所有HTTP請求首先指向Web緩存器,一旦某瀏覽器被配置,每個對某對象的瀏覽器請求首先被定向到該Web緩存器。
假設(shè)瀏覽器正在請求對象,會發(fā)生如下情況:
(1)瀏覽器創(chuàng)建一個到Web緩存器的TCP連接,并向Web緩存器中的對象發(fā)送一個HTTP請求
(2)Web緩存器進(jìn)行檢查,看看本地是否存儲了該對象副本,如果有,Web緩存器就向客戶瀏覽器用HTTP響應(yīng)報文返回該對象
(3)如果Web緩存器中沒有該對象,它就打開一個與該對象的初始服務(wù)器的TCP連接。Web緩存器則在這個緩存器到服務(wù)器的TCP連接上發(fā)送一個該對象的HTTP請求,在收到該請求后,初始服務(wù)器向該Web緩存器發(fā)送具有該對象的HTTP響應(yīng)?。
(4)當(dāng)Web緩存器接收到該對象時,它在本地存儲空間存儲一份副本,并向客戶的瀏覽器用HTTP響應(yīng)報文發(fā)送該副本(通過現(xiàn)有的客戶瀏覽器和Web緩存器之間的TCP連接)
需要注意的是Web緩存器既是服務(wù)器又是客戶。當(dāng)它接收瀏覽器的請求并發(fā)回響應(yīng)時,它是一個服務(wù)器,當(dāng)它向初始服務(wù)器發(fā)出請求并接收響應(yīng)時,它是一個客戶。
在因特網(wǎng)上部署Web緩存器有兩個原因。首先,Web緩存器可以大大減少對客戶請求的響應(yīng)時間;其次,Web緩存器能夠大大減少一個機(jī)構(gòu)的接入鏈路到因特網(wǎng)的通信量。
因特網(wǎng)中的電子郵件
電子郵件是一種異步通信媒介。
下圖給出因特網(wǎng)電子郵件系統(tǒng)的總體情況。
?它有三個主要組成部分:用戶代理(user agent)、郵件服務(wù)器(mail server)、簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol,SMTP)。
一個典型的郵件發(fā)送過程:從發(fā)送方的用戶代理開始,傳輸?shù)桨l(fā)送方的郵件服務(wù)器,再傳輸?shù)浇邮辗降泥]件服務(wù)器,然后在這里被分發(fā)到接收方的郵箱中。
SMTP是因特網(wǎng)電子郵件中主要的應(yīng)用層協(xié)議。它使用TCP可靠數(shù)據(jù)傳輸服務(wù),從發(fā)送方的郵件服務(wù)器向接收方的郵件服務(wù)器發(fā)送郵件。
假設(shè)Alice想給Bob發(fā)送一封簡單的報文,
(1)Alice調(diào)用她的郵件代理程序并提供Bob的郵件地址,撰寫報文,然后指示用戶代理發(fā)送該報文。
(2)Alice的用戶代理把報文發(fā)給她的郵件服務(wù)器,在那里該報文被放在報文隊列中。
(3)運(yùn)行在Alice的郵件服務(wù)器上的SMTP客戶端發(fā)現(xiàn)了報文隊列中的這個報文,它就創(chuàng)建一個到運(yùn)行在Bob的郵件服務(wù)器上的SMTP服務(wù)器的TCP連接。
(4)在經(jīng)過一些初始SMTP握手后,SMTP客戶端通過該TCP連接發(fā)送Alice的報文。
(5)在Bob的郵件服務(wù)器上,SMTP的服務(wù)器端接收該報文。Bob的郵件服務(wù)器然后將該報文放入Bob的郵箱中。
(6)在Bob方便的時候,他調(diào)用用戶代理閱讀該報文。
?
SMTP一般不使用中間郵件服務(wù)器發(fā)送郵件,即使這兩個郵件服務(wù)器位于地球兩端也是這樣。如果Bob的郵件服務(wù)器沒有開機(jī),該報文回保留在Alice的郵件服務(wù)器上并等待進(jìn)行新的嘗試,這意味著郵件并不在中間的某個郵件服務(wù)器存留。
SMTP與HTTP的對比
這兩個協(xié)議都是用于從一臺主機(jī)向另一臺主機(jī)傳送文件:HTTP從Web服務(wù)器向Web客戶(通常是一個瀏覽器)傳送文件;SMTP從一個郵件服務(wù)器向另一個郵件服務(wù)器傳送文件(電子郵件報文),當(dāng)進(jìn)行文件傳送時,持續(xù)的HTTP和SMTP都使用持續(xù)連接。
兩者之間的區(qū)別:
(1) HTTP主要是一個拉協(xié)議(pull protocol),用戶使用HTTP從該服務(wù)器拉取這些信息。這個TCP連接是由想接收文件的機(jī)器發(fā)起的;另一方面,SMTP基本上是一個推協(xié)議(push protocol),即發(fā)送郵件服務(wù)器把文件推向接收郵件服務(wù)器,這個TCP連接是由要發(fā)送該文件的及其發(fā)起的。
(2)SMTP要求每個報文(包括他們的體)采用7比特ASCII碼格式。如果某報文包含了非7比特ASCII字符或二進(jìn)制數(shù)據(jù),則該報文必須按照7比特ASCII碼進(jìn)行編碼。HTTP數(shù)據(jù)則不受這種限制。
(3)第三個重要區(qū)別是如何處理一個既包含文本又包含圖形(也可能是其他媒體類型)的文檔,HTTP把每個對象封裝到它自己的HTTP響應(yīng)報文中,而SMTP則把所有報文對象放在一個報文之中。
郵件訪問協(xié)議
一旦SMTP將郵件報文從Alice的郵件服務(wù)器交付給Bob的郵件服務(wù)器?,該報文就被放入Bob的郵箱。如下圖所示,Alice的用戶代理用SMTP將電子郵件報文推入她的郵件服務(wù)器,接著她的郵件服務(wù)器(作為一個SMTP客戶)再用SMTP將該郵件中繼到Bob的郵件服務(wù)器。這里為什么要分為兩步?主要是因為不通過Alice的郵件服務(wù)器進(jìn)行中繼,Alice的用戶代理沒有辦法到達(dá)一個不可達(dá)的目的地接收服務(wù)器。
Bob是如何通過運(yùn)行其本地PC上的用戶代理,獲得位于他的某ISP的郵件服務(wù)器上的郵件呢?
Bob的用戶代理不能使用SMTP得到報文,因為取報文是一個拉操作,而SMTP協(xié)議是一個推協(xié)議。通過引入一個特殊的郵件訪問協(xié)議來解決這個難題,該協(xié)議將Bob郵件服務(wù)器上的報文傳送給他的本地PC。目前有一些流行的郵件訪問協(xié)議包括第三版的郵局協(xié)議(PostOffice Protocol——Version3,POP3),因特網(wǎng)郵件訪問協(xié)議(Internet Mail Access Protocol,IMAP)以及HTTP?
如上圖(圖2-16),SMTP用來將郵件從發(fā)送方的郵件服務(wù)器傳輸?shù)浇邮辗降泥]件服務(wù)器 ,也用來將郵件從發(fā)送方的用戶代理傳送到發(fā)送方的郵件服務(wù)器,POP3這樣的郵件訪問協(xié)議用來將郵件從接收方的郵件服務(wù)器傳送到接收方的用戶代理。
?POP3
POP3是一個極為簡單的郵件訪問協(xié)議,由RFC1939進(jìn)行定義。當(dāng)用戶代理(客戶)打開了一個到郵件服務(wù)器(服務(wù)器)端口110上的TCP連接后,POP3就開始工作了,隨著建立TCP連接,POP3按照三個階段進(jìn)行工作:特許、事務(wù)處理以及更新。?
?IMAP
基于Web的電子郵件
DNS:因特網(wǎng)的目錄服務(wù)?
因特網(wǎng)的主機(jī)和人類一樣,可以使用多種方式進(jìn)行標(biāo)識,主機(jī)的一種標(biāo)識方法是用它的主機(jī)名(hostname)?,也可以使用IP地址進(jìn)行標(biāo)識。
DNS提供的服務(wù)
識別主機(jī)有兩種方式,通過主機(jī)名或者IP地址。人們喜歡便于記憶的主機(jī)名標(biāo)識方式,而路由器則喜歡定長的、有著層次結(jié)構(gòu)的IP地址,為了折中,我們需要一種能進(jìn)行主機(jī)名到IP地址轉(zhuǎn)換的目錄服務(wù),這就是域名系統(tǒng)(Domain Name System,DNS)的主要任務(wù)。DNS是:①一個由分層的DNS服務(wù)器(DNS server)實現(xiàn)的分布式數(shù)據(jù)庫;②一個使得主機(jī)能夠查詢分布式數(shù)據(jù)庫的應(yīng)用層協(xié)議DNS協(xié)議運(yùn)行在UDP上,使用53號端口。
DNS通常是由其他應(yīng)用層協(xié)議所使用的,包括HTTP、SMTP和FTP,將用戶提供的主機(jī)名解析為IP地址。
舉一個例子,考慮運(yùn)行在某用戶主機(jī)上的一個瀏覽器(即一個HTTP客戶)請求URL www.someschool.edu/index.html頁面時會發(fā)生什么現(xiàn)象。為了使用戶的主機(jī)能夠?qū)⒁粋€HTTP請求報文發(fā)送到Web服務(wù)器www.someschool.edu,該用戶主機(jī)必須獲得www.someschool.edu的IP地址。其做法如下
(1)同一臺用戶主機(jī)上運(yùn)行著DNS應(yīng)用的客戶端
(2)瀏覽器從上述URL中抽取出主機(jī)名www.someschool.edu,并將這臺主機(jī)名傳給DNS應(yīng)用的客戶端
(3)DNS客戶向DNS服務(wù)器發(fā)送一個包含主機(jī)名的請求
(4)DNS客戶最終會收到一份響應(yīng)報文,其中含有對應(yīng)于該主機(jī)名的IP地址
(5)一旦瀏覽器接收到來自DNS的該IP地址,它能夠向位于該IP地址80端口的HTTP服務(wù)器進(jìn)程發(fā)起一個TCP連接
除了進(jìn)行主機(jī)名到IP地址的轉(zhuǎn)換外,DNS還提供了一些重要的服務(wù):
- 主機(jī)別名 有著復(fù)雜主機(jī)名的主機(jī)能擁有一個或多個別名,應(yīng)用程序可以調(diào)用DNS來獲得主機(jī)別名對應(yīng)的規(guī)范主機(jī)名以及主機(jī)的IP地址
- 郵件服務(wù)器別名??
- 負(fù)載分配? DNS也用在冗余的服務(wù)器之間進(jìn)行負(fù)載分配
DNS工作機(jī)理概述
假設(shè)運(yùn)行在用戶主機(jī)上的某些應(yīng)用需要將主機(jī)名轉(zhuǎn)換為IP地址。這些應(yīng)用程序?qū)⒄{(diào)用DNS的客戶端,并指明需要被轉(zhuǎn)換的主機(jī)名。用戶主機(jī)上的DNS接收到后,向網(wǎng)絡(luò)中發(fā)送一個DNS查詢報文。所有的DNS請求和回答報文使用UDP數(shù)據(jù)報經(jīng)端口53發(fā)送 。經(jīng)過若干時間的時延后,用戶主機(jī)上的DNS接收到一個提供所希望映射的DNS回答報文,這個映射結(jié)果則被傳遞到調(diào)用DNS的應(yīng)用程序。因此從用戶主機(jī)上調(diào)用應(yīng)用程序的角度看 ,DNS是一個提供簡單、直接的轉(zhuǎn)換服務(wù)的黑盒子。
DNS的一種簡單設(shè)計是在因特網(wǎng)上只使用一個DNS服務(wù)器,該服務(wù)器包含所有的映射。在這種集中式設(shè)計中,客戶直接將所有查詢直接發(fā)往單一的DNS服務(wù)器,同時該DNS服務(wù)器直接對所有的查詢客戶做出響應(yīng),但是這種集中式設(shè)計的問題包括:
(1)單點故障 如果該DNS服務(wù)器崩潰,整個因特網(wǎng)隨之癱瘓
(2)通信容量 單個DNS不得不處理所有的DNS查詢
(3)遠(yuǎn)距離的集中式數(shù)據(jù)庫 單個DNS服務(wù)器不可能”鄰近“所有查詢客戶,所以可能會導(dǎo)致嚴(yán)重的時延
(4)維護(hù) 單個DNS服務(wù)器不得不為所有的因特網(wǎng)主機(jī)保留記錄,這將使這個中央數(shù)據(jù)庫龐大。
因此DNS采用了分布式的設(shè)計方案
(1)分布式、層次結(jié)構(gòu)
為了處理擴(kuò)展性問題,DNS使用了大量的DNS服務(wù)器,它們以層次方式組織,并且分布在全世界范圍內(nèi)。沒有一臺DNS服務(wù)器擁有因特網(wǎng)上所有主機(jī)的映射,相反這些映射分布在所有的DNS服務(wù)器上,大致來說有三種類型的DNS服務(wù)器:根DNS服務(wù)器、頂級域(Top-Level Domain,TLD)DNS服務(wù)器和權(quán)威DNS服務(wù)器?
- 根服務(wù)器 有400多個根服務(wù)器遍及全世界,這些根服務(wù)器由13個不同的組織管理,根服務(wù)器提供TLD服務(wù)器的IP地址
- 頂級域DNS服務(wù)器? 對于每個頂級域和所有國家的頂級域,都有TLD服務(wù)器。TLD服務(wù)器提供了權(quán)威DNS服務(wù)器的IP地址
- 權(quán)威DNS服務(wù)器 在因特網(wǎng)上具有公共可訪問主機(jī)的每個組織機(jī)構(gòu)必須提供公共可訪問的DNS記錄,這些記錄將這些主機(jī)的名字映射為IP地址
根、TLD、和權(quán)威DNS服務(wù)器都處在該DNS服務(wù)器的層次結(jié)構(gòu)中,還有另一類重要的DNS服務(wù)器,稱為本地DNS服務(wù)器(local DNS server),嚴(yán)格來說一個本地DNS服務(wù)器并不屬于該服務(wù)器的層次結(jié)構(gòu),但他對DNS層次結(jié)構(gòu)是至關(guān)重要的。每個ISP都有一臺本地DNS服務(wù)器,當(dāng)主機(jī)與某個ISP連接時,該ISP提供一臺主機(jī)的IP地址,該主機(jī)具有一臺或多臺其本地DNS服務(wù)器的IP地址
?DNS緩存
?為了改善時延性能并減少在因特網(wǎng)上到處傳輸?shù)腄NS報文數(shù)量,DNS廣泛使用了緩存技術(shù)。DNS緩存的原理非常簡單,在一個請求鏈中,當(dāng)某DNS服務(wù)器接收一個DNS回答時,它能將映射緩存在本地存儲器中,事實上因為緩存,除了少數(shù)DNS查詢以外,根服務(wù)器被繞過了。
P2P文件分發(fā)
截至目前我們所描述的應(yīng)用都采用了客戶——服務(wù)器模式,極大地依賴總是打開的基礎(chǔ)設(shè)施服務(wù)器,而使用p2p體系,對總是打開的基礎(chǔ)設(shè)施服務(wù)器有最小的(或者沒有)依賴,成對間歇連接的主機(jī)(稱為對等方)彼此直接通信,這些對等方并不為服務(wù)提供商所擁有。
在客戶——服務(wù)器模式下進(jìn)行文件分發(fā),該服務(wù)器必須向每個對等方發(fā)送該文件的一個副本,即服務(wù)器承受了極大的負(fù)擔(dān),并且消耗了大量的服務(wù)器帶寬。在P2P文件分發(fā)中,每個對等方能夠向任何其他對等方重新發(fā)送它已經(jīng)收到的該文件的任何部分,從而在分發(fā)過程中協(xié)助該服務(wù)器。
具有P2P體系結(jié)構(gòu)的應(yīng)用程序能夠是自擴(kuò)展的。這種擴(kuò)展性的直接成因是:對等方除了是比特的消費者外還是它們的重新分發(fā)者。
?文章來源:http://www.zghlxwxcb.cn/news/detail-494512.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-494512.html
到了這里,關(guān)于計算機(jī)網(wǎng)絡(luò)——自頂向下方法(第二章學(xué)習(xí)記錄)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!