一、應用層協(xié)議原理
網(wǎng)絡應用的核心部件是軟件抱虐,網(wǎng)絡的應用軟件分布于兩個或以上的端系統(tǒng)中昌阿。(例如Web應用:運行在用戶主機的瀏覽器軟件和運行在Web服務器的Web服務器軟件)。彼此通信的并不是軟件部件本身恳邀,而是進程懦冰。運行在不同端系統(tǒng)的進程通過網(wǎng)絡交換消息彼此通信。
1.應用層協(xié)議
1.應用層協(xié)議僅僅是網(wǎng)絡應用的一部分谣沸。
Web應用:一個文檔格式的標準(HTML)/Web瀏覽器軟件(如IE瀏覽器)/Web服務器軟件(如Microsoft服務器)/一個應用層協(xié)議(HTTP) ?
電子郵件應用:郵件服務器/郵件閱讀器/電子郵件消息結構標準/一個應用層協(xié)議(SMTP)
應用層協(xié)議定義運行在不同端系統(tǒng)上的應用程序進程如何彼此傳遞消息刷钢。
具體定義了:(1)所傳遞消息的類型(請求消息和響應消息);(2)各種消息類型的語法(消息中的各個字段以及如何定界)鳄抒;(3)各個字段的語義闯捎;(4)確定一個進程何時以及如何發(fā)出消息或響應所收到消息的規(guī)則。
2.客戶和服務器
一個網(wǎng)絡應用協(xié)議通常由客戶端和服務器端兩個對等的“端”或?qū)嶓w许溅,他們分別對應運行客戶程序的客戶進程和運行服務器程序的服務器進程瓤鼻。處于一個端系統(tǒng)中的客戶端和處于另一個端系統(tǒng)中的服務器端彼此通信。(例如Web瀏覽器實現(xiàn)的是HTTP客戶端贤重,Web服務器實現(xiàn)的是HTTP服務器端)我們把發(fā)起會話的主機標記為客戶茬祷。
3.進程間跨網(wǎng)絡的通信
一個網(wǎng)絡應用涉及兩臺不同主機中跨網(wǎng)絡彼此通信的兩個進程,這兩個進程通過各自的套接字(socket)發(fā)送和接收消息彼此通信并蝗。(可以把套接字看作相應進程上的“門”)
套接字是單臺主機內(nèi)應用層和傳輸層之間的接口祭犯。
應用程序開發(fā)人員可以完全控制套接字的應用層一側,對于傳輸層一側卻只能控制:(1)傳輸協(xié)議的選擇滚停;(2)諸如最大緩沖區(qū)大小和最大片段大小等有限幾個傳輸層參數(shù)的調(diào)整沃粗。
4.進程尋址
為了讓發(fā)送進程能夠識別接收進程键畴,用于標識接收進程的消息有兩個:(1)接收主機的主機名或主機地址最盅;(2)在接收主機內(nèi)部識別接收進程的標識符(接收進程的端口號)
5.用戶代理(user agent)
用戶代理是一個位于用戶和網(wǎng)絡應用之間的接口突雪。
例如Web應用的用戶代理是瀏覽器,瀏覽器使得用戶可以看web頁面涡贱,提供表單輸入咏删,與Java小程序交互等等。
2.應用所需的服務
1.可靠性(無數(shù)據(jù)丟失)
2.帶寬(以特定的持續(xù)速率傳送數(shù)據(jù))
3.實時性
3.由因特網(wǎng)傳輸協(xié)議提供的服務
1.TCP服務
TCP服務模型包括面向連接的服務和可靠的數(shù)據(jù)傳輸服務问词。TCP還包括一個擁塞控制機制督函。
面向連接的服務指客戶端和服務器端的TCP在開始傳輸應用層消息之前,先交換傳輸層控制信息激挪。(TCP連接:全雙工連接/松散方式)
可靠的傳輸服務指的是彼此通信的進程可以依賴TCP無錯地順序遞送所有數(shù)據(jù)辰狡。
TCP沒有提供的服務:(1)不保證最小傳輸率,不允許發(fā)送進程以想要的任意速率發(fā)送垄分;(2)不提供任何延遲保證
2.UDP服務
不提供非必要服務/輕量級傳輸協(xié)議/無連接的/沒有握手過程/提供不可靠數(shù)據(jù)傳輸服務/不保證消息最終到達接收套接字的順序/不包含擁塞控制機制/不提供定時保證
二搓译、Web:HTTP
1.HTTP概貌
Web頁面由多個對象構成,對象是可由單個URL尋址的文件如HTML文件锋喜、JPEG圖像等。大多數(shù)Web頁面由單個基本HTML文件和若干個所引用的對象構成豌鸡『侔悖基本HTML文件使用相應的URL來引用本頁面的其他對象。每個URL由存放該對象的服務器主機名和該對象的路徑名兩部分構成涯冠。
HTTP定義Web客戶如何從Web服務器請求頁面炉奴,以及服務器如何把Web頁面?zhèn)魉徒o客戶。
(1)1997年底蛇更,實現(xiàn)了RFC 1945中定義的HTTP/1.0版本
(2)1998年底瞻赶,實現(xiàn)了RFC 2616中定義的HTTP/1.1版本
HTTP把TCP作為底層傳輸協(xié)議。
HTTP是一個無狀態(tài)的協(xié)議(stateless protocol),HTTP服務器不維護客戶的狀態(tài)信息派任。
2.非持久連接和持久連接
非持久連接:每次服務器發(fā)出一個對象后砸逊,相應的TCP連接就被關閉,也就是說每個連接都沒有持續(xù)到可用于傳送其他對象掌逛。每個TCP連接只用于傳輸一個請求消息和一個響應消息师逸。
非持久連接每個對象都有2個RTT(round-trip time)的響應延長,每個對象都遭受TCP緩啟動(slow start)豆混。
持久連接:服務器在發(fā)出響應后讓TCP連接繼續(xù)打開著篓像,同一對客戶/服務器之間的后續(xù)請求和響應可以通過這個連接發(fā)送。通常皿伺,HTTP服務器在某個連接閑置一段特定時間后關閉它员辩。(緩啟動延遲比較小)
不帶流水線(without pipelining)的持久連接:客戶只在收到前一個請求的響應后才發(fā)出新的請求鸵鸥。(每個對象都有1個RTT的響應延長奠滑、空等請求)
帶流水線(with pipelining)的持久連接(HTTP/1.1默認):HTTP客戶每碰見一個引用就立即發(fā)出一個請求。(所有引用對象一共只經(jīng)歷1個RTT的延遲)
3.HTTP消息格式
HTTP請求消息
HTTP響應消息
4.用戶-服務器交互:身份認證和cookie
HTTP提供了兩種幫助服務器標識用戶的機制:身份認證和cookie。
用戶認證:Web站點要求用戶提供一個用戶名-口令對才能訪問存放在其服務器中的文檔养叛。HTTP提供特殊的狀態(tài)碼和頭部來幫助Web站點執(zhí)行身份認證种呐。
cookie:cookies是一種可由Web站點用來跟蹤用戶的候選機制。
一個客戶首次聯(lián)系一個使用cookie的Web站點弃甥。服務器會在其響應中吧phan一個Set-Cookie:頭部爽室。客戶收到這個響應消息淆攻,往存放在客戶主機中的某個特殊的cookie文件中添加一行阔墩,這一行一般包含服務器主機的主機名和這個與用戶關聯(lián)的標識數(shù)。一段時間后請求同一個服務器時瓶珊,由同一個用戶啟動的新客戶會在請求消息中包含一個Cookie:頭部啸箫,其值為早先由該服務器產(chǎn)生的標識數(shù)。
目的:用戶認證時不用每次都輸入用戶名和口令/記住用戶偏好以便投放廣告/建立虛擬購物車
5.帶條件的GET
在允許客戶進行高速緩存的同時伞芹,仍確保傳遞給瀏覽器的所有對象都是最新的忘苛。
滿足(1)使用GET方法(2)包含If-Modified-Since:頭部的HTTP請求消息就是所謂的帶條件的GET消息。
6.Web高速緩存服務器
Web高速緩存服務器是具有高速緩存功能的Web代理服務器唱较,它們在代表客戶執(zhí)行HTTP請求的同時扎唾,在自己的硬盤空間中保存進來請求到的對象的一個拷貝。
優(yōu)勢:(1)可以充分縮短客戶請求的響應時間(特別是在客戶與目標服務器之間的瓶頸帶寬比它與高速緩存服務器之間的瓶頸帶寬小得多時)南缓;(2)顯著降低因特網(wǎng)得總體Web流量胸遇;(3)可提供一個用于迅速散布內(nèi)容得基礎設施。
三汉形、文件傳送:FTP
FTP也運行在TCP之上纸镊。FTP使用兩個并行得TCP連接來傳送文件,(1)控制連接概疆,用于在客戶主機和服務器主機之間發(fā)送控制信息逗威,如用戶名和口令、改變遠程目錄得命令届案、取或放文件的命令庵楷;(2)數(shù)據(jù)連接用于真正發(fā)送文件。
帶外(out-of-band)發(fā)送控制信息:FTP/RTSP
帶內(nèi)(in-band)發(fā)送控制信息:HTTP/SMTP
在整個會話期間楣颠,控制連接一直打開著尽纽,F(xiàn)TP服務器必須維護關于用戶的狀態(tài),必須把控制連接與特定的用戶關聯(lián)起來童漩,必須隨用戶在遠程目錄樹中的游動跟蹤其當前目錄弄贿。而數(shù)據(jù)連接則有可能為每次文件傳送請求重新打開一次。
FTP命令:由4個大寫的ASCII字符構成(如USER/PASS/LIST/RETR/STOR)
FTP應答:一個3位數(shù)值(如331/125/425/452)
4.電子郵件
1.SMTP
郵件服務器構成了電子郵件系統(tǒng)的核心矫膨。每個收信人都有一個位于某個郵件服務器上的郵箱差凹,用于管理和維護已經(jīng)發(fā)送給他的郵件消息期奔。
SMTP通常不使用中間的郵件服務器主機中轉郵件,即便源端和目的端郵件服務器主機位于地球上相反的位置也一樣危尿。
SMTP命令:HELO 呐萌, ? ? ?MAIL FROM ?, ?RCPT TO ?谊娇, ?DATA 肺孤, ?QUIT
2.與HTTP的比較
相同:(1)都用于一臺主機向另一臺主機傳送文件(2)都使用持久連接
不同:(1)HTTP是內(nèi)拉式協(xié)議(pull protocol)---TCP連接是想接收文件的主機發(fā)起的(拉過來);SMTP是外推式協(xié)議(push protocol)---TCP連接是想發(fā)送文件的主機發(fā)起的(推出去)(2)SMTP要求包括信體部分在內(nèi)的每個郵件信息都是7位ASCII文本格式(二進制數(shù)據(jù)應以一定的方式先編碼成ASCII文本)(3)處理包含文本和圖像或其他媒體類型的文檔:HTTP是把每個對象封裝在各自的HTTP響應消息中济欢,SMTP則是把同一個郵件內(nèi)的各個對象置于同一個郵件消息中赠堵。
3.郵件消息格式和MIME
郵件消息的每個信頭必須有一個From:頭部和一個To:頭部,還可以有一個Subject:頭部和其他頭部法褥。
SMTP命令是SMTP握手協(xié)議的一部分茫叭,郵件消息頭部則屬于郵件消息的一部分。
非ASCII數(shù)據(jù)的MIME擴展(Multipurpose Internet Mail Extensions)
支持多媒體的兩個關鍵MIME頭部是Content-Type:和Content-Transfer-Encoding:半等。
Received:頭部(由SMTP接收服務器插到每個郵件消息的頂端)揍愁,給出了發(fā)出本消息的SMTP服務器的主機名(“from”)、收取本消息的SMTP服務器的主機名(“by”)以及接收服務器收取本消息的時間杀饵。
4.郵件訪問協(xié)議
用戶代理不可能使用SMTP從郵件服務器獲取郵件消息吗垮,因為郵件消息的獲取是一個內(nèi)拉操作,SMTP是一個外推協(xié)議凹髓。
POP3
POP3服務器與郵件服務器運行在相同的服務器主機上,前者從用戶的郵箱中讀取并可能刪除郵件消息怯屉,后者往用戶的郵箱中寫入郵件消息蔚舀。
TCP連接建立好之后,POP3依次經(jīng)歷授權認證、處理和更新3個階段锨络。
授權階段兩個基本命令:user <用戶名> 和 pass<口令>
處理階段有兩種模式:(1)下載并刪除(2)下載并保留 ? list,retr赌躺,dele,quit 命令
在POP3會話期間,用戶代理發(fā)出命令羡儿,POP3服務器則對每個命令響應一個應答礼患。
在用戶代理和郵件服務器之間的POP3會話期間,POP3服務器維護一定的狀態(tài)信息掠归,不過POP3服務器不會跨會話保存狀態(tài)信息缅叠。
IMAP
為用戶提供了在自己的郵件服務器主機中創(chuàng)建文件夾以及將郵件從一個文件夾移動到另一個文件夾的命令
為用戶提供了在遠程文件夾中查詢郵件的命令,按指定條件去查詢匹配的郵件
維護了會話的用戶狀態(tài)信息
允許用戶代理獲取郵件消息部件
基于Web的電子郵件
通過HTTP傳輸郵件
五虏冻、DNS--因特網(wǎng)的目錄服務
1.DNS提供的服務
DNS既是一個在由名稱服務器主機構成的層次結構中實現(xiàn)的分布式數(shù)據(jù)庫肤粱,又是一個允許客戶主機和名稱服務器主機通信以使用域名轉換服務的應用層協(xié)議。
DNS協(xié)議是應用層協(xié)議厨相,由其他應用層協(xié)議(HTTP领曼、SMTP鸥鹉、FTP)所使用,運行在UDP上庶骄。
DNS提供的服務:(1)主機名到IP地址的轉換(2)主機別名(3)郵件服務器別名(4)負載分擔
2.DNS工作機理
集中式設計的問題:單點故障/巨大訪問量/遠距離集中式數(shù)據(jù)庫/維護
DNS是一個在因特網(wǎng)中實現(xiàn)分布式數(shù)據(jù)庫的范例毁渗。
為了處理擴展性的問題,DNS使用了大量的以層次方式組織的DNS服務器单刁。沒有一臺DNS服務器擁有Internet中所有主機的映射灸异。層級結構中有3種DNS服務器:根DNS服務器、頂級域DNS服務器幻碱、權威DNS服務器
遞歸查詢和迭代查詢
DNS caching:本地DNS服務器緩存了主機/IP地址對绎狭,當再次接受相同請求時可以直接返回請求結果
3.DNS記錄
共同實現(xiàn)了DNS分布式數(shù)據(jù)庫的所有DNS服務器存儲了資源記錄(Resource Record,RR)褥傍,每個DNS應答消息攜帶一個或多個資源記錄
資源記錄包含了下列字段:(Name儡嘶,Value,Type恍风,TTL)