網(wǎng)絡應用程序的兩種主流體系結構
1、客戶-服務器
例子:Web贪薪、FTP、Telnet眠副、電子郵件等画切。
這種體系結構中,有一個總是打開的主機稱為服務器囱怕,它服務于來自許多其他稱為客戶的主機的請求霍弹。在Web應用程序的例子中,總是打開的Web服務器服務于來自瀏覽器(運行在客戶主機上)的請求娃弓。
這種體系結構庞萍,客戶相互之間不直接通信。如忘闻,在Web應用中兩個瀏覽器并不直接通信钝计。
在客戶-服務器應用中,常常會出現(xiàn)一臺單獨的服務器主機跟不上它所有客戶請求的情況齐佳。例如私恬,一個流行的社交網(wǎng)絡站點如果僅有一臺服務器來處理所有請求,很快就會變得不堪重負炼吴。為此本鸣,配備大量主機的數(shù)據(jù)中心常被用于創(chuàng)建強大的虛擬服務器。最為流行的因特網(wǎng)服務——如搜索引擎(Google和Bing)硅蹦、因特網(wǎng)商務(亞馬遜和e-Bay)荣德、基于Web的電子郵件(如Gmail何雅虎郵件)、社交網(wǎng)絡(Facebook和Twitter)等童芹,就應用了一個或多個數(shù)據(jù)中心涮瞻。
2、對等(P2P)
例子:文件共享(BitTorrent)假褪、對等方協(xié)助下載加速器(迅雷)署咽、因特網(wǎng)電話(Skype)、IPTV(迅雷看看、PPstream)宁否。
應用程序在間斷連接的主機對之間使用直接通信窒升,這些主機對被稱為對等方。因為這種對等方通信不必通過專門的服務器慕匠,所以被稱為對等方到對等方的饱须。目前許多流行的、流量密集型應用都是P2P體系結構台谊。如上面列出的一些例子蓉媳。
某些應用具有以上兩者混合的結構體系。如即時訊息應用青伤,服務器被用于跟蹤用戶的IP地址督怜,但用戶到用戶的報文在用戶主機之間(無需通過中間服務器)直接發(fā)送殴瘦。
進程通信
進行通信的主體實際上是進程狠角,而不是程序。
- 運行在同一個端系統(tǒng)中的進程間通信蚪腋,其規(guī)則由該端系統(tǒng)上的操作系統(tǒng)確定丰歌。
- 運行在不同端系統(tǒng)中(可能這些端系統(tǒng)還是不同的操作系統(tǒng))的進程間通信,其規(guī)則由網(wǎng)絡協(xié)議確定屉凯。
客戶和服務器進程
網(wǎng)絡應用程序由成對的進程組成立帖,這些進程通過網(wǎng)絡相互發(fā)送報文。
在給定的一對進行之間的通信會話場景中悠砚,發(fā)起通信的進程被標識為客戶晓勇,在會話開始時等待聯(lián)系的進程是服務器。
套接字(socket)
?進程與套接字關系的類比:進程是一座房子灌旧,它的套接字是它的門绑咱。
套接字是同一臺主機內應用層與運輸層之間的接口。由于該套接字是建立網(wǎng)絡應用程序的可編程接口枢泰,因此套接字也稱為應用程序和網(wǎng)絡之間的應用程序編程接口(Application Programming Interface描融,API)
應用程序開發(fā)者可以控制套接字在應用層端的一切,但是對該套接字的運輸層端幾乎沒有控制權衡蚂。應用程序開發(fā)者對運輸層的控制僅限于
1窿克、 選擇運輸層協(xié)議
2、設定幾個運輸層參數(shù)毛甲,如最大緩存和最大報文段長度
進程尋址
在一臺主機上運行的進程為了可以向在另一臺主機上運行的進程發(fā)送分組年叮,接收進程需要有一個地址。為了標識接收進程玻募,需要定義2種信息
1谋右、 目的主機的地址(IP地址)
2、 定義在目的主機中的接收進程的標識符(端口號)
因為一臺主機能夠運行許多網(wǎng)絡應用补箍,我要知道是這臺主機的哪個應用程序需要接收信息改执,端口號就是用來區(qū)分應用程序的啸蜜。類比于送信,收件地址(家庭住址)相當于目的主機的IP地址辈挂,收件人相當于端口號(一個家里面往往不止一個人)衬横。
因特網(wǎng)提供的運輸層服務
1、 TCP服務
- 面向連接的服務:需要執(zhí)行“3次握手”建立兩個進程的套接字之間的TCP連接终蒂。這條連接是全雙工的蜂林,即連接雙方的進程可以在此連接上同時進行報文收發(fā)。當應用程序結束報文發(fā)送時拇泣,必須拆除該連接噪叙。
- 可靠的數(shù)據(jù)傳送服務:通信進程能依靠TCP,無差錯霉翔、按適當順序交付所有發(fā)送的數(shù)據(jù)睁蕾,沒有字節(jié)的丟失和冗余。
- 擁塞控制機制:為因特網(wǎng)帶來整體好處债朵。當發(fā)送方和接收方之間的網(wǎng)絡出現(xiàn)擁塞時子眶,TCP擁塞控制機制會抑制發(fā)送進程。該機制也會試圖限制每個TCP連接序芦,使它們達到公平共享網(wǎng)絡帶寬的目的臭杰。
2、 UDP服務
- 無連接的服務:進程通信前不需要建立連接
- 不可靠的數(shù)據(jù)傳送服務:當進程將一個報文發(fā)送進UDP套接字時谚中,UDP協(xié)議不保證該報文將到達接收進程渴杆,而且到達接收進程的報文也可能是亂序到達的。
- 沒有擁塞控制機制:所以UDP的發(fā)送端可以用它選定的任何速率向其下層(網(wǎng)絡層)注入數(shù)據(jù)宪塔。(實際端到端吞吐量可能小于這種速率磁奖,可能是因為中間鏈路的帶寬受限或因為擁塞而造成。)
不同網(wǎng)絡應用對因特網(wǎng)的運輸層服務的要求
- 不能丟失的數(shù)據(jù)要采用可靠數(shù)據(jù)傳輸蝌麸,即要用TCP協(xié)議点寥;容忍丟失的可采用UDP協(xié)議。
- 帶寬是彈性的来吩,表明是彈性應用敢辩,它能夠根據(jù)情況或多或少利用可供使用的吞吐量;非彈性的應用——帶寬敏感應用弟疆,對吞吐量會有一定要求戚长。
- 時間敏感的應用,要求時延較低怠苔。
流行的因特網(wǎng)應用及其應用層協(xié)議和支撐的運輸層協(xié)議
</br>
安全套接字層(Secure Sockets Layer同廉,SSL)
被稱為TCP的加強版,能做TCP所能做的一切,還提供了進程到進程的安全性服務迫肖,包括加密锅劝、數(shù)據(jù)完整性和端點鑒別。
1蟆湖、SSL不是與TCP和UDP在相同層次上的第三種因特網(wǎng)運輸層協(xié)議故爵,而是一種對TCP的加強,這種強化是在應用層上實現(xiàn)的隅津。
2诬垂、SSL有自己的套接字API,區(qū)別于TCP的套接字API伦仍。
</br>
應用層協(xié)議
應用層協(xié)議定義了運行在不同端系統(tǒng)上的應用程序進程如何相互傳遞報文结窘。應用層協(xié)議定義了:
- 交換的報文類型,如請求報文和響應報文
- 各種報文類型的語法充蓝,如報文中的各個字段及這些字段是如何描述的
- 字段的語義隧枫,即這些字段中包含的信息的含義
- 一個進程何時以及如何發(fā)送報文,對報文進行響應的規(guī)則
應用層協(xié)議是網(wǎng)絡應用的重要組成部分棺克。
Web應用的應用層協(xié)議是HTTP
HTTP服務器不保存關于客戶的任何信息悠垛,所以說HTTP是一個無狀態(tài)協(xié)議线定。
非持續(xù)連接:每個請求/響應對是經(jīng)一個單獨的TCP連接發(fā)送娜谊。
持續(xù)連接:所有請求及其響應經(jīng)相同的TCP連接發(fā)送。
HTTP可以采用非持續(xù)連接和持續(xù)連接斤讥,默認情況下使用持續(xù)連接纱皆,性能更好。
HTTP使用非持續(xù)連接的缺點
- 需要為每一個請求的對象建立和維護一個全新的連接芭商。對于每個這樣的連接派草,在客戶和服務器中都要分配TCP的緩沖區(qū)和保持TCP變量,這給Web服務器帶來嚴重負擔铛楣。
- 每一個對象要經(jīng)受兩倍的RTT(往返時間近迁,Round-Trip Time)交付延遲。
HTTP請求報文的通用格式
- 方法:可填入GET簸州、POST鉴竭、HEAD、PUT岸浑、DELETE等搏存,絕大部分HTTP請求報文使用GET方法
- URL:如www.baidu.com
- 版本:HTTP版本
- 首部字段名:有好幾種首部字段名,如Host矢洲、Connection璧眠、User-agent
- 值:首部字段名對應的值
- sp:空格
- cr:回車(carriage return)
- lf:換行(line feed)
(關于回車和換行的區(qū)別,不?太清楚的同學請點擊回車與換行的區(qū)別) - 實體主體:使用GET方法時,實體主體為空责静;使用POST方法才會有實體主體袁滥。
一個使用GET方法的HTTP請求報文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
</br>
HTTP響應報文的通用格式
- 版本:HTTP版本
- 狀態(tài)碼:
200(OK,請求成功灾螃,信息在返回的響應報文中)
301(Moved Permanently呻拌,請求對象已被永久轉移,新的URL定義在響應報文的Location:首部行中睦焕∶晡眨客戶軟件將自動獲取新的URL——自動跳轉到新URL)
400(Bad Request,一個通用差錯代碼垃喊,指示該請求不能被服務器理解)
404(Not Found猾普,被請求的文檔不在服務器上)
505(HTTP Version Not Supported,服務器不支持請求使用的HTTP協(xié)議版本) - 短語:提示信息
上一例中本谜,使用GET方法的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 ...)
</br>
Cookie
前文說HTTP服務器是無狀態(tài)的初家,不保存客戶信息。但是有時候一個Web站點希望能夠識別用戶乌助,可能是出于服務器希望限制用戶的訪問溜在,或者是出于希望把內容與用戶身份聯(lián)系起來。
為此HTTP可以使用cookie他托。它允許站點對用戶進行跟蹤掖肋。目前大多數(shù)商務Web站點都使用了cookie。
cookie技術的4個組件
- 在HTTP響應報文中的一個cookie首部行赏参。如Set-cookie: 1678
- 在HTTP請求報文中的一個cookie首部行志笼。如Cookie: 1678
- 在用戶端系統(tǒng)中保留有一個cookie文件,并由用戶的瀏覽器進行管理
- 位于Web站點的一個后端數(shù)據(jù)庫把篓。用于保存cookie纫溃。
Web緩存器 = 代理服務器
顧名思義就是服務器的代理了,它同樣可以處理客戶發(fā)送的HTTP請求報文韧掩,如果它緩存著請求報文所需對象的副本的話紊浩。如果沒有,Web緩存器會先向本體Web服務器獲取所需對象的副本疗锐,再提供服務給客戶坊谁。
通過“條件GET方法”,保證緩存器的對象是最新的窒悔。
采用Web緩存器的好處
- 大大減少對客戶請求的響應時間
- 大大減少一個機構的接入鏈路到因特網(wǎng)的通信量呜袁。通過減少通信量,該機構就不必急于增加帶寬简珠,從而降低費用
- 能從整體上大大減低因特網(wǎng)上的Web流量阶界,從而改善所有應用的性能
</br>
文件傳輸協(xié)議 FTP
事實上虹钮,HTTP和FTP都屬于文件傳輸協(xié)議,所以有許多共同特點膘融。如都運行在TCP上芙粱。
最顯著的區(qū)別是FTP使用兩個并行的TCP連接來傳輸文件,一個是控制連接氧映,一個是數(shù)據(jù)連接春畔。所以也需要兩個端口。
1岛都、 控制連接用于在兩主機之間傳輸控制信息律姨。
2、 數(shù)據(jù)連接用于實際發(fā)送一個文件
先建立控制連接臼疫,再建立數(shù)據(jù)連接择份。
在同一個會話期間,如果用戶還需要傳輸另一個文件烫堤,F(xiàn)TP則打開另一個數(shù)據(jù)連接(TCP連接)荣赶。所以對FTP而言,控制連接貫穿了整個用戶會話期間鸽斟,但是對會話中的每一次文件傳輸都需要建立一個新的數(shù)據(jù)連接拔创,所以FTP的數(shù)據(jù)連接是非持續(xù)連接。
FTP服務器必須在整個會話期間保留用戶的狀態(tài)富蓄,對每個進行中的用戶會話的狀態(tài)信息進行追蹤剩燥,大大限制了FTP同時維持的會話總數(shù)。
</br>
簡單郵件協(xié)議 SMTP
電子郵件系統(tǒng)的3個主要組成部分
- 用戶代理
- 郵件服務器
- STMP
STMP是運用在郵件服務器之間傳輸?shù)膮f(xié)議格粪。
用戶代理負責把用戶發(fā)送的報文發(fā)送給郵件服務器躏吊,以及接收郵件服務器發(fā)送給用戶的報文氛改。
STMP一般不適用中間郵件服務器發(fā)送郵件帐萎,即使這兩個郵件服務器位于地球的兩端。如Alice的郵件服務器在中國香港胜卤,而Bob的服務器在美國圣路易斯疆导,那么這個TCP連接也是從香港服務器到圣路易斯服務器之間的直接相連。特別是葛躏,如果Bob的郵件服務器沒有開機澈段,該報文會保留在Alice的郵件服務器上并等待進行新的嘗試,這意味著郵件并不在中間的某個郵件服務器存留舰攒。
SMTP與HTTP的對比
1败富、兩者都用于從一臺主機向另一臺主機傳送文件,都使用持續(xù)連接摩窃。HTTP從Web服務器向Web客戶傳送文件兽叮;SMTP從一個郵件服務器向另一個郵件服務器傳送文件芬骄。
2、HTTP是一個拉協(xié)議(pull protocol)鹦聪。即在方便時账阻,用戶使用HTTP從服務器拉取信息;SMTP是一個推協(xié)議(push protocol)泽本,發(fā)送郵件服務器把文件推向接收郵件服務器淘太。
3、SMTP要求每個報文(包括它們的體)使用7比特ASCII碼格式规丽。如果報文包含非7比特ASCII字符(如有重音的法文字符)或二進制數(shù)據(jù)(如圖形文件)蒲牧,則報文必須按照7特比ASCII碼進行編碼。HTTP數(shù)據(jù)不受這種限制赌莺。
4造成、處理一個既包含文本又包含圖形的文檔的方式不同。SMTP把所有報文對象放在一個報文中雄嚣;HTTP把每個對象封裝到它自己的HTTP響應報文中晒屎。
</br>
DNS協(xié)議
因特網(wǎng)上的主機的標識有2種方式
1、 主機名缓升,如www.baidu.com
2鼓鲁、 IP地址,如xxx.xxx.xxx.xxx
這兩種標識其實指代的是同一樣東西港谊,就如你父親叫你全名和叫你兒子是一樣的一個道理骇吭。那為什么需要2種標識呢?
因為我們人類喜歡主機名這種便于記憶的標識歧寺,而對路由器來說燥狰,它更喜歡定長的、有層次結構的IP地址斜筐。我們在瀏覽器的地址上輸入網(wǎng)址時都是輸入其主機號龙致。
所以我們需要一種能進行主機名到IP地址轉換的服務,也就是域名系統(tǒng)(Domain Name System顷链,DNS)目代。DNS協(xié)議運行在UDP上,使用53號端口嗤练。
DNS也是應用層協(xié)議榛了,它通常會被其他應用層協(xié)議所使用,包括HTTP煞抬、SMTP和FTP霜大。
DNS除了將主機名轉換為IP地址,還有以下服務
1革答、識別主機別名(用于HTTP战坤、FTP)
2遮婶、識別郵件服務器別名(用于SMTP)
3、負載分配
DNS服務器采用分布式湖笨、層次數(shù)據(jù)庫
DNS緩存
與Web緩存器一樣旗扑,DNS服務器同樣有緩存器。
P2P體系結構
相比于客戶-服務器體系結構慈省,P2P具有自擴展性臀防,表現(xiàn)在對等方N越大,最小分發(fā)時間也趨于平緩边败。這種自擴展性的直接成因是:對等方除了是比特的消費者外還是它們的重新分發(fā)者袱衷。