http協議詳細介紹

1.1 HTTP協議簡介
咱們平常生活中常常會使用瀏覽器訪問Web站點,可是你們有思考過在這個過程當中到底發生了什麼嗎?爲何咱們在瀏覽器地址欄上面輸入要訪問的URL後就能夠訪問到Web頁面呢?瀏覽器

1.1.1 瀏覽器背後的故事
當咱們在瀏覽器地址欄上輸入要訪問的URL後,瀏覽器會分析出URL上面的域名,而後經過DNS服務器查詢出域名映射的IP地址,瀏覽器根據查詢到的IP地址與Web服務器進行通訊,而通訊的協議就是HTTP協議。服務器

咱們能夠把這個過程類比成一個電話對話的過程。當咱們要打電話給某我的,首先要知道對方的電話號碼,而後進行撥號。打通電話後咱們會進行對話,固然要對話確定須要共同的語言,若是一我的說國語,而另外一我的說英語,那確定不能進行溝通的。在本例中,電話號碼至關於上面的IP地址,而共同語言至關於HTTP協議。網絡

咱們經過一個簡單的圖來闡述這個過程:

瀏覽器與Web服務器使用HTTP協議進行通訊,那麼什麼是HTTP協議呢?接下來咱們會詳細介紹HTTP協議的相關知識。併發

1.1.2 TCP/IP協議
HTTP協議是構建在TCP/IP協議之上的,是TCP/IP協議的一個子集,因此要理解HTTP協議,有必要先了解下TCP/IP協議相關的知識。網站

因爲TCP/IP協議族包含衆多的協議,在這裏咱們沒法一一討論。接下來,咱們僅介紹理解HTTP協議須要掌握的TCP/IP協議族的一些相關知識點。若是想深刻理解TCP/IP協議,能夠參考經典書籍《TCP/IP詳解》。操作系統

TCP/IP協議族分層3d

TCP/IP協議族是由一個四層協議組成的系統,這四層分別爲:應用層、傳輸層、網絡層和數據鏈路層。如圖所示blog


分層的好處是把各個相對獨立的功能解耦,層與層之間經過規定好的接口來通訊。若是之後須要修改或者重寫某一個層的實現,只要接口保持不變也不會影響到其餘層的功能。接下來,咱們將會介紹各個層的主要做用。接口

1) 應用層域名

應用層通常是咱們編寫的應用程序,其決定了向用戶提供的應用服務。應用層能夠經過系統調用與傳輸層進行通訊。

處於應用層的協議很是多,好比:FTP(File Transfer Protocol,文件傳輸協議)、DNS(Domain Name System,域名系統)和咱們本章討論的HTTP(HyperText Transfer Protocol,超文本傳輸協議)等。

2) 傳輸層

傳輸層經過系統調用嚮應用層提供處於網絡鏈接中的兩臺計算機之間的數據傳輸功能。

在傳輸層有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議)。

3) 網絡層

網絡層用來處理在網絡上流動的數據包,數據包是網絡傳輸的最小數據單位。該層規定了經過怎樣的路徑(傳輸路線)到達對方計算機,並把數據包傳輸給對方。

4) 鏈路層

鏈路層用來處理鏈接網絡的硬件部分,包括控制操做系統、硬件設備驅動、NIC(Network Interface Card,網絡適配器)以及光纖等物理可見部分。硬件上的範疇均在鏈路層的做用範圍以內。

數據包封裝

上層協議數據是如何轉變爲下層協議數據的呢?這是經過封裝(encapsulate)來實現的。應用程序數據在發送到物理網絡以前,會沿着協議棧從上往下傳遞。每層協議都將在上層協議數據的基礎上加上本身的頭部信息(鏈路層還會加上尾部信息),覺得實現該層功能提供必要的信息。如圖所示:

發送端發送數據時,數據會從上層傳輸到下層,且每通過一層都會被打上該層的頭部信息。而接收端接收數據時,數據會從下層傳輸到上層,傳輸前會把下層的頭部信息刪除。過程如圖所示:

數據傳輸過程

因爲下層協議的頭部信息對上層協議是沒有實際的用途,因此在下層協議傳輸數據給上層協議的時候會把該層的頭部信息去掉,這個封裝過程對於上層協議來講是徹底透明的。這樣作的好處是,應用層只須要關心應用服務的實現,而不用管底層的實現。

TCP三次握手

從上面的介紹可知,傳輸層協議主要有兩個:TCP協議和UDP協議。TCP協議相對於UDP協議的特色是:TCP協議提供面向鏈接、字節流和可靠的傳輸。

使用TCP協議進行通訊的雙方必須先創建鏈接,而後才能開始傳輸數據。TCP鏈接是全雙工的,也就是說雙方的數據讀寫能夠經過一個鏈接進行。爲了確保鏈接雙方可靠性,在雙方創建鏈接時,TCP協議採用了三次握手(Three-way handshaking)策略。
過程如圖所示:

TCP協議三次握手的描述以下:

第一次握手:客戶端發送帶有SYN標誌的鏈接請求報文段,而後進入SYN_SEND狀態,等待服務端的確認。

第二次握手:服務端接收到客戶端的SYN報文段後,須要發送ACK信息對這個SYN報文段進行確認。同時,還要發送本身的SYN請求信息。服務端會將上述的信息放到一個報文段(SYN+ACK報文段)中,一併發送給客戶端,此時服務端將會進入SYN_RECV狀態。

第三次握手:客戶端接收到服務端的SYN+ACK報文段後,會想服務端發送ACK確認報文段,這個報文段發送完畢後,客戶端和服務端都進入ESTABLISHED狀態,完成TCP三次握手。

當三次握手完成後,TCP協議會爲鏈接雙方維持鏈接狀態。爲了保證數據傳輸成功,接收端在接收到數據包後必須發送ACK報文做爲確認。若是在指定的時間內(這個時間稱爲從新發送超時時間),發送端沒有接收到接收端的ACK報文,那麼就會重發超時的數據。

1.1.3 DNS服務
前面介紹了與HTTP協議有着密切關係的TCP/IP協議,接下來介紹的DNS服務也是與HTTP協議有着密不可分的關係。

一般咱們訪問一個網站,使用的是主機名或者域名來進行訪問的。由於相對於IP地址(一組純數字),域名更容易讓人記住。但TCP/IP協議使用的是IP地址進行訪問的,因此必須有個機制或服務把域名轉換成IP地址。DNS服務就是用來解決這個問題的,它提供域名到IP地址之間的解析服務。

以下圖所示,展現了DNS服務把域名解析成IP地址的過程:

DNS服務是經過DNS協議進行通訊的,而DNS協議跟HTTP協議同樣也是應用層協議。因爲咱們的重點是HTTP協議,因此這裏不打算對DNS協議進行詳細的分析,咱們只須要知道能夠經過DNS服務把域名解析成IP地址便可。

1.1.4 HTTP與TCP/IP、DNS的關係
到如今,咱們介紹了與HTTP協議有密切關係的TCP/IP協議和DNS服務,接下來咱們經過下圖來整理一下HTTP協議與它們之間的關係:

HTTP與TCP/IP、DNS的關係 從上圖中能夠知道,當客戶端訪問Web站點時,首先會經過DNS服務查詢到域名的IP地址。而後瀏覽器生成HTTP請求,並經過TCP/IP協議發送給Web服務器。Web服務器接收到請求後會根據請求生成響應內容,並經過TCP/IP協議返回給客戶端。

相關文章
相關標籤/搜索