第二章 應用層
2.1 應用層協議原理
2.1.1 網絡應用程序體系結構
- 主流體系結構:客戶-服務器體系結構,對等(P2P)體系結構
–客戶-服務器體系結構:有一個總是打開的主機稱爲服務器,它服務於來自許多 其他稱爲客戶的主機的請求。客戶相互之間不直接通信
–對等(P2P)體系結構:應用程序在間斷連接的主機之間使用直接通信,這些主 機對被稱爲對等方。它有着自擴展性的特點
2.1.2 進程通信
- 客戶和服務器進程:網絡應用程序由成對的進程組成,這些進程通過網絡互相發送報 文。通常把進程之一稱爲客戶,另一個稱爲服務器
- 進程與計算機網絡之間的接口:進程通過一個稱爲套接字(socket)的軟件接口向網 絡發送報文和從網絡接收報文
- 進程尋址:爲了標識該接收進程,需要定義主機的地址(IP地址)和定義在目的主機 中的接收進程的標識符(端口號)
2.1.3 可供應用程序使用的運輸服務
- 可靠數據傳輸、吞吐量、定時、安全性
2.1.4 因特網提供的運輸服務
- TCP服務
–面向連接服務:在握手階段後,一個TCP連接在兩個進程的套接字之間建立了。 當應用程序結束報文發送時,必須拆除該連接
–可靠數據傳輸服務:無差錯、按適當順序交付所有發送的數據 - UDP服務
–不提供不必要服務的輕量級運輸協議
–無連接,無握手過程,提供不可靠數據傳送服務
2.1.5 應用層協議
- 定義了運行在不同端操作系統上的應用程序進程如何互相傳遞報文
2.2 Web和HTTP
2.2.1 HTTP概況
- Web的應用層協議是超文本傳輸協議(HTTP)
- Web界面組成元素:對象(一個文件,可以是HTML、JPEG等),用URL尋址
- URL地址的組成:存放對象的服務器主機名+對象的路徑名
- HTTP使用TCP作爲它的支撐運輸協議,因爲HTTP服務器並不保存關於客戶的任何信息,即它是一個無狀態的協議
2.2.2 非持續連接和持續連接
- 採取非持續連接的HTTP:每個請求/響應都是經過一個單獨的TCP連接發送
–往返時間(Round-Trip Time,RTT):指一個短分組從客戶到服務器然後再返回客戶所花費的時間
–響應時間:2個RTT+服務器傳輸HTML文件的時間
- 採取連續連接的HTTP:所有請求及其響應經相同的TCP連接發送
- HTTP的默認模式是使用帶流水線的持續連接
2.2.3 報文格式
-
HTTP請求報文
-
實體主體(Entity body):使用GET方法時實體主體爲空,使用POST方法時,實體主體包含用戶在表單中輸入的需要提交的內容
-
方法類型
–HTTP/1.0:GET、POST、HEAD(類似於GET,但不返回請求對象)
–HTTP/1.1:GET, POST, HEAD、PUT(將實體主體中的文件上載到URL字段中指定的路徑)、DELETE(刪除URL字段中指定的文件) -
HTTP響應報文
-
常見的狀態碼
–200 OK
–301 Moved Permanently
–400 Bad Request
–404 Not Found
–505 HTTP Version Not Supported
2.2.4 用戶與服務器的交互:cookie
- 四個組件
–HTTP響應消息的cookie首部行
–HTTP請求消息的cookie首部行
–cookie文件保存在用戶的主機上,由用戶的瀏覽器管理
–網站的後端數據庫
2.2.5 Web緩存(別名代理服務器)
- 它有着自己的磁盤存儲空間,並在存儲空間中保存最近請求過的對象的副本
- 它既是服務器,又是客戶端
- 作用:
–大大減少對客戶請求的響應時間
–大大減少一個機構的接入鏈路到因特網的通信量
2.2.6 條件GET方法
- 作用:解決代理服務器內容過舊的問題
- 例子
2.3 文件傳輸協議:FTP
- 與HTTP的區別
–HTTP協議在傳輸文件的同一個TCP連接中發送請求和響應首部行,即帶內(in-band)發送控制信息
–FTP使用了兩個並行的TCP連接來傳輸文件,一個用於控制連接(用於在兩主機之間傳輸控制信息),一個用於數據連接(實際發送文件),即帶外(out-of-band)傳輸控制信息
2.4 因特網的電子郵件
- 主要組成部分:用戶代理(user agent)、郵件服務器(mail server)、簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)
- 一些特性
–它不使用中間郵件服務器發送郵件,如果接受方服務器沒開機,待發送的報文會留在發送方服務器上,等待進行新的嘗試
–利用TCP將電子郵件從客戶端傳輸到服務器,使用端口25、 - 郵件訪問協議
–POP3
–IMAP
2.5 DNS(域名系統):因特網的目錄服務
2.5.1 DNS提供的服務
- 主要任務:進行主機名到IP地址轉換的目錄服務
- 定義:一個由分層的DNS服務器實現的分佈式數據庫;一個使得主機能夠查詢分佈式數據庫的應用層協議
- 端口號:53
- 重要服務
–主機別名(host aliasing)
–郵件服務器別名(mail server aliasing)
–負載分配(load distribution)
2.5.2 DNS工作機理概述
- 集中式DNS的缺點
–單點故障
–通信容量
–遠距離的集中式數據庫
–維護 - 分佈式、層次數據庫
- DNS緩存
–在一個請求鏈中。當某DNS服務器接收一個DNS回答時,它能將該回答中的信息緩存在本地存儲器中
2.5.3 DNS記錄和報文
–資源記錄(Resource Record,RR)
–DNS報文
–在DNS數據庫中插入數據
2.6 P2P應用
- 對比:
A)客戶-服務器體系結構
B)P2P
- 例子
A)BitTorrent
2.7 TCP套接字編程
- 套接字:應用程序進程和端到端傳輸協議(UDP或TCP)之間的一扇門
- TCP服務:從一個進程到另一個進程的可靠字節傳輸
2.7.1 TCP
- 客戶必須聯繫服務器:
–服務器進程必須首先運行
–服務器必須創建歡迎客戶聯繫的套接字(門) - 客戶聯繫服務器:
–創建客戶端本地TCP套接字
–指定服務器進程的IP地址,端口號
–當客戶端創建套接字時:客戶端TCP建立與服務器TCP的連接
–當客戶端聯繫時:服務器TCP爲服務器進程創建新的套接字以與客戶端通信
A)允許服務器與多個客戶端通信
B)用於區分客戶端的源端口號
2.7.2 UDP
- UDP:客戶端和服務器之間沒有“連接”
–沒有握手
–sender明確地將IP地址和目標端口附加到每個數據包
–服務器必須從收到的數據包中提取IP地址,發送端口 - UDP:發送的數據可能無序接收或丟失