1.應(yīng)用層協(xié)議原理
研發(fā)網(wǎng)絡(luò)應(yīng)用程序的核心是寫出能夠運(yùn)行在不同的端系統(tǒng)和通過(guò)網(wǎng)絡(luò)彼此通信的程序。
A.網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
a.客戶—服務(wù)器體系結(jié)構(gòu)
具有固定IP地址的服務(wù)器總是開啟以服務(wù)許多相互之間不直接通信的客戶。大型站點(diǎn)需要配備大量數(shù)據(jù)中心以滿足大量請(qǐng)求
b.對(duì)等(P2P)體系結(jié)構(gòu)
在該體系中,對(duì)位于數(shù)據(jù)中心的專用服務(wù)器有最小的(或者沒(méi)有)依賴。對(duì)等方可以直接通信。
自擴(kuò)展性:每個(gè)對(duì)等方都可以和其他對(duì)等方相互請(qǐng)求和分發(fā)文件,增加系統(tǒng)的服務(wù)能力。
B.進(jìn)程通信
在兩個(gè)不同端系統(tǒng)上的進(jìn)程,通過(guò)跨越計(jì)算機(jī)網(wǎng)絡(luò)交換報(bào)文而相互通信。
a.客戶和服務(wù)器進(jìn)程
網(wǎng)絡(luò)應(yīng)用程序由成對(duì)的進(jìn)程組成,這些進(jìn)程通過(guò)網(wǎng)絡(luò)相互發(fā)送報(bào)文。在給定的一對(duì)進(jìn)程之間的通信會(huì)話場(chǎng)景中,發(fā)起通信(即在該會(huì)話開始時(shí)發(fā)起與其他進(jìn)程的聯(lián)系)的進(jìn)程被標(biāo)識(shí)為客戶,在會(huì)話開始時(shí)等待聯(lián)系的進(jìn)程時(shí)服務(wù)器。
b.進(jìn)程與計(jì)算機(jī)網(wǎng)絡(luò)之間的接口
進(jìn)程通過(guò)一個(gè)稱為套接字的軟件接口向網(wǎng)絡(luò)發(fā)送報(bào)文和從網(wǎng)絡(luò)接收?qǐng)?bào)文。套接字是同一臺(tái)主機(jī)內(nèi)應(yīng)用層與運(yùn)輸層之間的接口
c.進(jìn)程尋址
接收進(jìn)程需要有一個(gè)地址才可以接收分組。為了標(biāo)識(shí)接收進(jìn)程,需要定義兩種信息:(1)主機(jī)的地址—IP地址(2)定義在目的主機(jī)中的接收進(jìn)程的標(biāo)識(shí)符—端口號(hào)
C.可供應(yīng)用程序使用的運(yùn)輸服務(wù)
通過(guò)研究可用運(yùn)輸層協(xié)議所提供的服務(wù),選擇滿足應(yīng)用需求的協(xié)議
a.可靠數(shù)據(jù)傳輸
數(shù)據(jù)能無(wú)差錯(cuò)地到達(dá)接收進(jìn)程。滿足電子郵件、文件傳輸?shù)葢?yīng)用。
b.吞吐量
以某種特定的速率提供確保的可用吞吐量。滿足帶寬敏感應(yīng)用。
c.定時(shí)
定時(shí)保證。滿足為了有效性而要求數(shù)據(jù)交付有嚴(yán)格的時(shí)間限制的應(yīng)用。
d.安全性
在發(fā)送和接收進(jìn)程之間提供機(jī)密性,數(shù)據(jù)完整性和端點(diǎn)鑒別。
D.因特網(wǎng)提供的運(yùn)輸服務(wù)
a.TCP服務(wù)
1.面向連接的服務(wù):
握手過(guò)程。在應(yīng)用層數(shù)據(jù)報(bào)文開始流動(dòng)之前,TCP讓客戶和服務(wù)器互相交換運(yùn)輸層控制信息。
2.可靠數(shù)據(jù)傳輸服務(wù):
通信進(jìn)程能夠依靠TCP,無(wú)差錯(cuò)、按適當(dāng)順序交付所有發(fā)送的數(shù)據(jù)。
3.擁塞控制機(jī)制
網(wǎng)絡(luò)擁塞時(shí)抑制發(fā)送進(jìn)程,緩解網(wǎng)絡(luò)的壓力
b.UDP服務(wù)
輕量級(jí)運(yùn)輸協(xié)議,僅提供最小服務(wù)。無(wú)連接、不可靠數(shù)據(jù)傳送、無(wú)擁塞控制。
c.運(yùn)輸協(xié)議所不提供的服務(wù)
不提供任何定時(shí)和帶寬保證
E.應(yīng)用層協(xié)議
定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何相互傳遞報(bào)文。公共的應(yīng)用層協(xié)議由RFC文檔定義,也有專用的應(yīng)用層協(xié)議。
應(yīng)用層協(xié)議只是網(wǎng)絡(luò)應(yīng)用的一部分
其定義了:
1.交換的報(bào)文類型,例如請(qǐng)求報(bào)文和響應(yīng)報(bào)文
2.各種報(bào)文類型的語(yǔ)法,例如報(bào)文中的各個(gè)字段及這些字段是如何描述的
3.字段的語(yǔ)義,即這些字段中包含的信息的含義
4.一個(gè)進(jìn)程何時(shí)以及如何發(fā)送報(bào)文,對(duì)報(bào)文進(jìn)行響應(yīng)的規(guī)則
2.Web和HTTP
web是一種網(wǎng)絡(luò)應(yīng)用。具有按需操作的特性,即當(dāng)用戶需要時(shí)就能得到所想要的內(nèi)容。
A.HTTP概況
Web的應(yīng)用層協(xié)議是HTTP(超文本傳輸協(xié)議),它是Web的核心
Web頁(yè)面由對(duì)象組成。一個(gè)對(duì)象只是一個(gè)文件,如HTML文件、JPEG圖形等。多數(shù)Web頁(yè)面含有一個(gè)HTML基本文件和多個(gè)引用對(duì)象。
a.HTTP定義了Web客戶與Web服務(wù)器之間 Web頁(yè)面的交互方式—HTTP請(qǐng)求報(bào)文與HTTP響應(yīng)報(bào)文,并定義了報(bào)文的結(jié)構(gòu)。
b.HTTP使用TCP作為它的支撐運(yùn)輸協(xié)議
c.HTTP是一個(gè)無(wú)狀態(tài)協(xié)議,因?yàn)榉?wù)器并不保存客戶的任何信息
B.非持續(xù)連接和持續(xù)連接
RTT(往返時(shí)間),指一個(gè)短分組從客戶到服務(wù)器然后再返回客戶所花費(fèi)的時(shí)間。
用戶點(diǎn)擊超鏈接后,客戶與服務(wù)器將會(huì)建立一個(gè)TCP連接,涉及三次握手:首先,客戶向服務(wù)器發(fā)送一個(gè)小TCP報(bào)文段,發(fā)起TCP連接;然后服務(wù)器返回一個(gè)小TCP報(bào)文段做出響應(yīng);接著客戶向該TCP連接發(fā)送一個(gè)HTTP請(qǐng)求報(bào)文;最后服務(wù)器在該TCP連接上發(fā)送HTML文件。所以總的響應(yīng)時(shí)間為兩個(gè)RTT+傳輸HTML所用的時(shí)間
a.非持續(xù)連接—每個(gè)請(qǐng)求/響應(yīng)對(duì)經(jīng)一個(gè)單獨(dú)的TCP連接發(fā)送。
每個(gè)TCP連接在服務(wù)器發(fā)送一個(gè)對(duì)象后就關(guān)閉,不為其他的對(duì)象持續(xù)下來(lái)。而且每個(gè)TCP連接只傳輸一個(gè)請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
所以,假設(shè)一個(gè)Web頁(yè)面由一個(gè)HTML基本文件和10個(gè)引用對(duì)象組成,則需要產(chǎn)生11個(gè)TCP連接。
b.持續(xù)連接(默認(rèn))—所有請(qǐng)求/響應(yīng)對(duì)經(jīng)相同的TCP連接發(fā)送
服務(wù)器在發(fā)送響應(yīng)后保持TCP連接打開,相同的客戶與服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)報(bào)文通過(guò)相同的TCP連接發(fā)送。只要超出一定時(shí)間間隔仍未被使用,則TCP連接被關(guān)閉
所以,假設(shè)一個(gè)Web頁(yè)面由一個(gè)HTML基本文件和10個(gè)引用對(duì)象組成,則只需要產(chǎn)生1個(gè)TCP連接。
HTTP的默認(rèn)模式是使用帶流水線的持續(xù)連接,即一個(gè)接一個(gè)地發(fā)出對(duì)對(duì)象的請(qǐng)求而不必等待服務(wù)器應(yīng)答
C.HTTP報(bào)文格式
a.請(qǐng)求報(bào)文
b.響應(yīng)報(bào)文
D.用戶與服務(wù)器的交互:cookie
cookie允許站點(diǎn)對(duì)用戶進(jìn)行跟蹤,用于標(biāo)識(shí)一個(gè)用戶
cookie技術(shù)4大組件:
1.在HTTP響應(yīng)報(bào)文中的一個(gè)cookie首部行
2.在HTTP請(qǐng)求報(bào)文中的一個(gè)cookie首部行
3.在用戶端系統(tǒng)中保留有一個(gè)cookie文件,并由用戶瀏覽器管理
4.位于Web站點(diǎn)的一個(gè)后端數(shù)據(jù)庫(kù)
E.Web緩存
Web緩存器也叫代理服務(wù)器,它是能夠代表初始Web服務(wù)器來(lái)滿足HTTP請(qǐng)求的網(wǎng)絡(luò)實(shí)體。Web緩存器有自己的磁盤存儲(chǔ)空間,并在存儲(chǔ)空間中保存最近請(qǐng)求過(guò)的對(duì)象的副本
部署Web緩存器的兩個(gè)原因:
1.Web緩存器可以大大減少對(duì)客戶請(qǐng)求的響應(yīng)時(shí)間。如果用戶請(qǐng)求的對(duì)象在Web緩存器上,則Web緩存器可以迅速將該對(duì)象交付給用戶
2.Web緩存器能夠大大減少一個(gè)機(jī)構(gòu)的接入鏈路到因特網(wǎng)的通信量。從整體上大大減低因特網(wǎng)上的Web流量,從而改善所有應(yīng)用的性能
F.條件GET方法
用于保持Web緩存器中的對(duì)象版本為最新版
3.文件傳輸協(xié)議FTP
FTP使用兩個(gè)并行的TCP連接來(lái)傳輸文件:
一個(gè)是控制連接(先),用于在兩個(gè)主機(jī)之間傳輸控制信息,如用戶標(biāo)識(shí)、口令、改變遠(yuǎn)程目錄的命令以及“存放”和“獲取”文件的命令。
一個(gè)是數(shù)據(jù)連接(后),用于實(shí)際發(fā)送一個(gè)文件
在FTP傳輸中,控制連接貫穿了整個(gè)用戶會(huì)話期間,但是每次文件傳輸都需要建立一個(gè)新的數(shù)據(jù)連接(即數(shù)據(jù)連接是非持續(xù)的)
4.電子郵件
三個(gè)主要組成部分:用戶代理(user agent),郵件服務(wù)器(mail server),簡(jiǎn)單郵件傳輸協(xié)議(SMTP)
A.SMTP
SMTP是Internet電子郵件應(yīng)用的核心
SMTP一般不使用中間郵件服務(wù)器發(fā)送郵件,而是直接在發(fā)送郵件服務(wù)器和接收郵件服務(wù)器之間建立持續(xù)TCP連接
B.與HTTP的對(duì)比
a.HTTP從Web服務(wù)器向Web客戶傳送文件(對(duì)象);SMTP從一個(gè)郵件服務(wù)器向另外一個(gè)服務(wù)器傳送文件(電子郵件報(bào)文)。
b.HTTP是一個(gè)拉協(xié)議,即從用戶從服務(wù)器中拉取已經(jīng)裝載的信息,TCP連接由接收方發(fā)起。;SMTP是一個(gè)推協(xié)議,即發(fā)送服務(wù)器將文件推向接收郵件服務(wù)器,TCP連接由發(fā)送方發(fā)起。
c.SMTP限制使用7位ASCII碼;HTTP無(wú)限制
d.如果一個(gè)文檔既包含文本又包含圖形。HTTP把每個(gè)對(duì)象封裝到自己的HTTP響應(yīng)報(bào)文中;SMTP把所有報(bào)文對(duì)象放在一個(gè)報(bào)文中。
C.郵件報(bào)文格式和MIME
格式:首部行+報(bào)文體(正文)
首部行必須含有FROM和TO
D.郵件訪問(wèn)協(xié)議
SMTP是一個(gè)推協(xié)議,不能用于從接收郵件服務(wù)器中拉取報(bào)文??捎肞OP3、IMAP、HTTP等訪問(wèn)郵件服務(wù)器中的郵件
a.POP3
可設(shè)置為下載并刪除或下載并保留的方式。并且不在POP3會(huì)話過(guò)程中攜帶狀態(tài)信息
b.IMAP
為用戶提供了創(chuàng)建文件夾以及將郵件從一個(gè)文件夾移動(dòng)到另一個(gè)文件夾的命令
為用戶提供了在遠(yuǎn)程文件夾中查詢郵件的命令,按指定條件去查詢匹配的郵件
維護(hù)了會(huì)話的用戶狀態(tài)信息
允許用戶代理獲取報(bào)文組件
c.基于Web的電子郵件
用戶代理和郵件服務(wù)器之間通過(guò)HTTP傳輸報(bào)文
5.DNS:Internet的目錄服務(wù)
主機(jī)的標(biāo)識(shí)方法:主機(jī)名或IP地址
A.DNS提供的服務(wù)
DNS的主要任務(wù):進(jìn)行主機(jī)名到IP地址轉(zhuǎn)換的目錄服務(wù)
a.DNS是什么:
1.一個(gè)由分層的DNS服務(wù)器實(shí)現(xiàn)的分布式數(shù)據(jù)庫(kù)
2.一個(gè)使得主機(jī)能夠查詢分布式數(shù)據(jù)庫(kù)的應(yīng)用層協(xié)議
b.DNS協(xié)議是應(yīng)用層協(xié)議,由其他應(yīng)用層協(xié)議(HTTP、SMTP、FTP)所使用,運(yùn)行在UDP上。
c.DNS還可以提供的服務(wù)
1.主機(jī)別名
應(yīng)用程序可以調(diào)用DNS來(lái)獲得主機(jī)別名對(duì)應(yīng)的規(guī)范主機(jī)名以及主機(jī)IP的地址
2.郵件服務(wù)器別名
電子應(yīng)用程序可以調(diào)用DNS,對(duì)提供的郵件服務(wù)器別名進(jìn)行解析,以獲得對(duì)應(yīng)的規(guī)范主機(jī)名以及主機(jī)IP的地址
3.負(fù)載分配
DNS也用于在冗余的服務(wù)器之間進(jìn)行負(fù)載分配。繁忙的站點(diǎn)被冗余分布在多臺(tái)服務(wù)器上,它們有著不同的IP地址。而DNS數(shù)據(jù)庫(kù)中存儲(chǔ)著這些可以映射到同一主機(jī)名的IP地址集合,因而DNS可以在這些冗余服務(wù)器之間循環(huán)分配負(fù)載。
B.DNS工作機(jī)理概述
假設(shè)應(yīng)用程序需要將主機(jī)名轉(zhuǎn)換為IP地址。將調(diào)用DNS的客戶端,并指明需要被轉(zhuǎn)換的主機(jī)名,用戶主機(jī)上的DNS接收到后,向網(wǎng)絡(luò)中發(fā)送一個(gè)DNS查詢報(bào)文。所有的DNS請(qǐng)求和回答報(bào)文使用UDP數(shù)據(jù)報(bào)經(jīng)端口53發(fā)送。經(jīng)過(guò)若干毫秒到若干秒的時(shí)延后,用戶主機(jī)上的DNS接收到一個(gè)提供所希望映射的DNS回答報(bào)文。這個(gè)映射結(jié)果則被傳遞到調(diào)用DNS的應(yīng)用程序。
要實(shí)現(xiàn)上述過(guò)程,DNS由分布于全球的大量DNS服務(wù)器以及定義了DNS與查詢主機(jī)通信方式的應(yīng)用層協(xié)議組成。
a.分布式、層次數(shù)據(jù)庫(kù)
DNS是在Internet中實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的精彩范例
為了處理擴(kuò)展性的問(wèn)題,DNS使用了大量的以層次方式組織的DNS服務(wù)器。沒(méi)有一臺(tái)DNS服務(wù)器擁有Internet中所有主機(jī)的映射
層級(jí)結(jié)構(gòu)更中有3種DNS服務(wù)器:根DNS服務(wù)器、頂級(jí)域DNS服務(wù)器、權(quán)威DNS服務(wù)器
還有一種本地DNS服務(wù)器
b.DNS緩存
本地DNS服務(wù)器緩存了主機(jī)/IP地址對(duì),當(dāng)再次接受相同請(qǐng)求時(shí)可以直接返回請(qǐng)求結(jié)果
C.DNS記錄和報(bào)文
a.DNS記錄
共同實(shí)現(xiàn)了DNS分布式數(shù)據(jù)庫(kù)的所有DNS服務(wù)器存儲(chǔ)了資源記錄(Resource Record,RR),RR提供了主機(jī)名到IP地址的映射
資源記錄包含了下列字段:(Name,Value,Type,TTL)
b.DNS報(bào)文
6.P2P應(yīng)用
A.P2P文件分發(fā)
a.P2P體系結(jié)構(gòu)的自擴(kuò)展性
單一服務(wù)器向大量主機(jī)(對(duì)等方)分發(fā)一個(gè)大文件時(shí),每個(gè)對(duì)等方能夠重新分發(fā)它所有的該文件的任何部分,從而在分發(fā)過(guò)程中協(xié)助該服務(wù)器
b.BitTorrent
參與一個(gè)特定文件分發(fā)的所有對(duì)等方集合被稱為“洪流(torrent)”。在一個(gè)洪流中的對(duì)等方彼此下載等長(zhǎng)度的文件塊,也為其他對(duì)等方上載了許多塊。
每個(gè)洪流具有一個(gè)基礎(chǔ)設(shè)施結(jié)點(diǎn),成為追蹤器。當(dāng)一個(gè)對(duì)等方加入某洪流時(shí),它向追蹤器注冊(cè)自己,并周期性地通知追蹤器它仍在該洪流中。
一些機(jī)制:
1.當(dāng)A請(qǐng)求文件塊的時(shí)候,采用最稀缺優(yōu)先的技術(shù)。優(yōu)先請(qǐng)求對(duì)等方中副本數(shù)量最少的文件塊
2.當(dāng)A分發(fā)文件塊的時(shí)候,采用對(duì)換算法,優(yōu)先分發(fā)給能夠以最高速率向A提供數(shù)據(jù)的對(duì)等方
B.分布式散列表
假設(shè)數(shù)據(jù)庫(kù)只包含(鍵,值)對(duì)。在P2P系統(tǒng)中,每個(gè)對(duì)等方將保持(鍵,值)對(duì)僅占總體的小子集。我們將允許任何對(duì)等方用一個(gè)特別的鍵來(lái)查詢?cè)摲植际綌?shù)據(jù)庫(kù)。分布式數(shù)據(jù)庫(kù)則將定位擁有該相應(yīng)(鍵,值)對(duì)的對(duì)等方,然后像查詢的對(duì)等方返回該(鍵,值)對(duì)。任何對(duì)等方也將允許在數(shù)據(jù)庫(kù)中插入新鍵-值對(duì)。這樣的分布式數(shù)據(jù)庫(kù)被稱為分布式散列表。
設(shè)計(jì)DHT:
1.環(huán)形DHT——處理規(guī)模問(wèn)題
2.對(duì)等方擾動(dòng)——維護(hù)DHT
7.套接字編程
編寫應(yīng)用程序時(shí)要考慮是運(yùn)行在UDP上還是TCP上