#### 第8章:
#### 應用層
應用層是網絡體系結構的最高層。在傳輸層為應用進程提供端到端通信服務的基礎上,不同網絡應用的應用進程之間有著不同的通信規則,因此在傳輸層協議之上還需要設有應用層協議。`每一個應用層協議都是為了解決某類應用問題`,通過位于不同主機的多個進程之間的通信和協同工作來解決問題。
應用層協議有標準化和非標準化的,非標準化是定制的,可以理解為在標準化之上(標準化是基礎)。
#### 8.1 域名系統
只有應用層軟件才直接使用域名系統,用戶只是間接而不是直接使用域名系統。
因特網使用兩種地址:`IP地址`和`物理地址`。兩種地址使用不同的格式,處于不同的層次。
IP地址是因特網內的一種全局性通用地址,用于IP層及其以上層次的高層協議中,目的是屏蔽物理細節。由于采用了IP地址,因特網的任意一對主機的上層軟件才能通信。
由于IP地址32位(255,255,255,255。2的8次方,4個一共32位)太抽象,所以以一種字符型的主機命名機制`域名系統`來處理。
計算機網絡中主機標識符分為三大類:名字、地址、路徑。而計算機網絡需要把IP地址映射到一個域名上。
`DNS`域名系統是一個聯機分布式數據庫系統。是專門用來存儲、查找、相應這個映射關系的。
DNS將域名解析到IP地址的過程是:
1. 當主機A的一個進程需要把主機名解析為IP地址時,該應用進程作為DNS的一個用戶調用解析程序,以UDP用戶數據報的方式把帶解析的域名放在DNS請求報文中發送給本地域名服務器(運行DNS程序)。
2. 本地域名服務器在數據系統中查找到域名后,在回答報文中把對應的IP送回。
這樣主機A找到了需要請求的主機B的IP地址,向主機B繼續請求網絡通信。
##### 域名結構
[www.baidu.com](www.baidu.com)
www是三級域名
baidu是二級域名
com是頂級域名
1. 國家頂級域名:按照國家劃分。cn表示中國,us表示美國,uk表示英國。目前有296個頂級域名
2. 通用頂級域名:按照組織機構劃分,和地區無關。有20個
例如(但也不一定對應,比如com不一定是商業組織):
edu教育機構,cat使用加泰隆人的語言和文化團體
com商業組織, coop合作團體
gov政府部門, pro擁有證書的專業人員
.......
3. 國家二級域名由該國自行確定注冊。
4. 三級域名有公司個人自行確定注冊。
##### 域名服務器
1. 根服務器。它是最重要的域名服務器,是最高層次的域名服務器。根服務器知道所有頂級域名服務器的域名和IP地址。
2. 頂級域名服務器。它負責管理在該頂級域名服務器注冊的所有二級域名的域名服務器。
3. 權限域名服務器。它是負責一個區的域名服務器。
4. 本地域名服務器。主機A輸入某個域名想要請求主機B時候,第一個請求就是發往本地域名服務器。
##### 域名解析
域名解析包括域名到IP的正向解析和IP到域名的逆向解析。由分布在因特網上的許多域名服務器協同完成。
域名解析采用兩種方案查詢策略:`遞歸查詢`和`迭代查詢`
主機A希望知道主機B的IP地址或者域名
遞歸查詢:
1. 主機A向本地域名服務器發送查詢請求
2. 本地域名服務器向根服務器查詢
3. 根服務器向頂級域名服務器查詢
4. 頂級域名服務器向權限域名服務器查詢
5. 權限域名服務器返回給頂級域名服務器
6. 頂級域名服務器返回給根服務器
7. 根服務器返回給本地域名服務器
8. 本地域名服務器返回給主機A
迭代查詢:
1. 主機A向本地域名服務器發送查詢請求
2. 本地域名服務器向根服務器查詢
3. 根服務器返回頂級域名給本地域名服務器
4. 本地域名服務器向頂級域名服務器查詢
5. 頂級域名服務器返回二級域名給本地域名服務器
6. 本地域名服務器向權限域名服務器查詢
7. 權限域名服務器向本地域名服務器返回三級域名
8. 本地域名服務器返回給主機A
所有域名在域名服務器中都是有高速緩存的,而且是最新的。這樣才能保證快速響應給主機。
保持最新的技術:
1. 權限服務器為域名IP映射添加生存時間。
2. 為每一項內容設置一個計時器,保持定期更新。
#### 8.2 萬維網
萬維網是一個超媒體系統,是超文本系統的擴展。
`超文本`是一個包含指向其他文檔連接的文本。
萬維網一般采用瀏覽器/服務器模式(B/S),與用戶/服務器模式(C/S)比較
1. 將重心放到了服務器上,瀏覽器只負責解析
2. 隨時根據應用的變化更改服務器相關內容
3. 便于應用到英特網環境,擴大了應用范圍
4. 瀏覽器的普及程度高,削減了培訓開支
##### 統一資源定位符URL
因特網上`資源`是指可以訪問的任何對象。包括文字、圖片、視頻、目錄、文件、聲音等,以及與因特網相連的任何形式的數據。
URL是對因特網上資源的位置和訪問方法的一種簡潔的表示方法。相當于訪問因特網上任何資源文件的指針。
形式為:
://:/路徑
例如
[http://123.54.68.15:80/public/index.php](http://123.54.68.15:80/public/index.php) 訪問到了PHP文件
[http://123.54.68.15:80/images/picture1.jpg](http://123.54.68.15:80/images/picture1.jpg) 訪問到了圖片
ftp://192.168.1.3:2121 應用層ftp協議連接到這個主機
......
#### 8\. 3 超文本傳送協議HTTP
超文本傳送協議是萬維網的核心
HTTP的特點:
1. 面向事務。事務是指一系列不可分割的信息交換。
2. HTTP是無連接的,盡管使用了傳輸層面向連接的TCP。也就是說雖然使用TCP,但在交換HTTP報文之前,并不需要建立HTTP連接(應用層這一級不需要交換連接,試著理解下,傳輸層TCP有了連接,HTTP只需要想發送信息的時候發送信息,而不需要保持連接)。
3. HTTP是無狀態的。服務器無記憶功能,并不記得曾經為客戶服務的次數。這種無狀態特性簡化了服務器的設計,使得服務器更容易支持大量并發的HTTP請求。
另外HTTP協議還具有雙向傳輸、能力協商、支持高速緩存和代理服務器的特點。
HTTP采用立即交付,客戶發送給服務器的命令是嵌入在請求報文中,服務器返回的內容或其他信息則嵌入在響應報文中。報文格式受MIME類型影響(比如類型是jpg圖片,是txt、json類型文本文件,是MP3音頻等)。
假設用戶擬訪問Web服務器A上的一個頁面,其URL是
[http://www.mysamples.com/show/index.html](http://www.mysamples.com/show/index.html)
該頁面包含了指向Web服務器B上內容的一個超鏈接。
其過程是:
1)客戶端瀏覽器根據用戶輸入的URL向DNS查詢[www.mysamples.com](www.mysamples.com)的IP地址
2)瀏覽器根據DNS返回的IP地址,與服務器數熟知的端口80建立TCP連接
3)瀏覽器向服務器提交HTTP請求,內含取文件命令: GET/show/index.html
4)基于該請求的內容,服務器找到相應的文件,并根據文件的擴展名,形成一個MIME類型的HTTP回答報文,送回給瀏覽器,服務器釋放本次TCP連接
5)根據HTTP回答報文首部,瀏覽器按照某種方式顯示該文件內容。如果該文件種有之類,瀏覽器隨時發送新請求以獲得有關類容(面向事務特性)。
2-4步HTTP的一次操作,稱為HTTP的一次事務。HTTP的報文是在TCP三次握手的第三次的數據發送的(TCP連接的一二次握手為了建立連接,第三次確認建立連接時候伴隨HTTP數據)。顯然這是一種花費在TCP上的開銷。萬維網客戶與服務器每一次建立TCP連接都需要分配緩存和變量則是另一種開銷。尤其是服務器為多個客戶服務時,這種負擔更重。
為了解決這種負擔,HTTP1.1使用了`持續連接`概念。持續連接是指萬維網服務器在發送響應后仍在一段時間內保持這段連接,以使用同一用戶與該服務器可以在這條連接上傳送后續的HTTP請求報文和響應報文。HTTP1.1把持續連接作為默認連接。
HTTP1.1使用持續連接有兩種方式:
1. 非流水線
發送請求報文,等待響應報文后再發送下一個請求報文。
2. 流水線
發送請求報文,不用等待響應報文發送下一個請求報文。
##### HTTP報文格式
HTTP有請求報文和響應報文
請求報文:
1. 請求行(必須)
2. 首部(必須)
3. 主體(部分情況)
響應報文:
1. 狀態行(必須)
2. 首部(必須)
3. 主體(部分情況)
`請求行`:
由請求類型、URL和HTTP版本三個部分組成
常用請求類型:GET、POST、HEAD(讀取文檔首部)、PUT(由服務器向客戶發送一些信息)、TRACE(用于進行環測的報文回送)、CONNECT(用于代理服務器)、OPTION(詢問關于可用選項的信息)、DELETE(刪除URL所標識的資源)
`狀態行`:
由HTTP版本、狀態碼、狀態短語組成
狀態瑪由3位數字組成,五大類,供33種。1xx表示對請求的通知信息;2xx表示請求成功;3xx表示把客戶重定向到另一個URL;4xx表示客戶端出現異常;5xx表示服務端出現異常。
例如:
HTTP/1.1 202 Accepted (接受)
HTTP/1.1 400 Bad request (錯誤的請求)
HTTP/1.1 404 not found (找不到)
`首部`:
是客戶與服務器間交換的附加信息,用來給服務器,瀏覽器和報文主題加以說明。
首部可以包含多條首部行。
首部行有4種類型:`通用首部`、`請求首部`、`響應首部`、`主體首部`。
通用首部用來給出關于報文的通用信息。
請求首部指明客戶的配置和優先使用的文檔格式。
響應首部指明服務器的配置和相關請求的特殊信息。
主體首部給出文檔主題的信息。
請求報文可包含通用首部、請求首部、主體首部
響應報文可包含通用首部、響應首部、主體首部
`主體`(包含要發送或接收的文檔):
HTTP請求示例:
~~~
GET /download/index.html HTTP/1.0
Accept : text/plain
Accept : text/html
Accept : image/gif
空格(首部和主體間必須有空格)
沒有主體
~~~
第一行是請求類型、URL、HTTP版本號;后面幾行是可以接受的文檔類型
HTTP響應示例:
~~~
HTTP/1.0 200 Document follows
Server:CERN/3.0
Content-type:text/html
Content-length:3260
空格(首部和主體間必須有空格)
<head><title>welcom to network world</title></head>
.....
~~~
第一行顯示HTTP版本號、請求成功、返回信息;第二行表示服務器軟件是CERN/3.0;第三行表示文檔類型是text/html;第四行只是文檔長度是3260B;接著是空格和請求的文檔。
##### 代理服務器
代理服務器是一臺計算機,它把最近一些請求和響應的副本保存在高速緩存中。
在有代理服務器的情況下,客戶發送HTTP請求給代理服務器。代理服務器檢查它的高速緩存。如果發現這個請求和暫存在高速緩存的請求相同,就直接返回響應。如果沒有緩存所需的請求,代理服務器將請求發送給相應的服務器。最終代理服務器獲得所需的響應,把它存在高速緩存中以備后用。
代理服務器可在客戶端、服務端工作、也可以在中間系統中工作。
##### Cookie、Session萬維網站點識別功能
HTTP是無狀態的,但實際使用中卻希望萬維網站點具有識別用戶的功能。于是使用了Cookie或Session。
Cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那么Session機制就是通過檢查服務器上的“客戶明細表”來確認客戶身份。Session相當于程序在服務器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。
Cookie存儲在用戶端,Session存儲在服務端