HTTP協議簡介/數據包封裝/三次握手/DNS解析

1.瀏覽器背後的故事

在這裏插入圖片描述解釋:
打給小紅,由姓名的代號來記錄, 小紅就是域名,電話號就是IP地址,共同語言(比如英語,漢語這些)就是HTTP協議
渲染:
瀏覽器收到的是莫名其妙的報文,所以瀏覽器要進行渲染再給用戶。 根據html文件描述相對應的數學模型 ,要用我們瀏覽器的各個零部件,從而將網頁的源代碼js,css,這些轉爲圖像和文字。

2.HTTP

◆超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器
是用來在網頁之間傳遞html的規則

傳輸超文本的協議
A按照協議把超文本遞給B,A和B遵守着這種規則
超文本:超級文本,在文本內容中有鏈接,點擊鏈接就可以跳轉到其他頁面。

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展
在這裏插入圖片描述歷史:
1990底,tim發明了url, http, 表達信息的語言html,通過這些實現了一個服務器和瀏覽器
然後萬維網經歷了發展快速又混亂的幾年,很多公司做了擴展但是都不能兼容,有一個團隊結合多方發表了HTTP1.0,在0.9的基礎上做了大量的改進。

特點:
0.9版本:只有get技能,只能傳遞html格式的字符串,每個http請求都是短鏈接
1.0版本:post,狀態碼,緩存,重定向等都有了
1.1版本:connect,持久連接,管道機制,是目前最常用的版本

QUIC協議:傳輸層的協議,谷歌在2013年提出,減少TCP通信的延遲和開銷,採用了UDP這種不大可靠的做基礎,做了大量改進,想把TCP,UDP二者合一

Web與HTTP
◆WEB是一種基於超文本和HTTP的、全球性的、動態交互的、跨平臺的分佈式圖形信息系統
◆建立在Internet 上的一種網絡服務,爲瀏覽者在Internet上查找和瀏覽信息提供了圖形化的、易於訪問的直觀界面,其中的文檔及超級鏈接將Internet.上的信息節點組織成一個互爲關聯的網狀結構

3.透過TCP/IP看HTTP

◆HTTP協議是構建在TCP/IP協議之上的,是TCP/IP協議的一個子集
◆爲了更好的理解HTTP協議,我們先了解一下 TCP/IP的相關知識。

TCP/IP協議族
◆TCP/IP協議其實是一系列與互聯網相關聯的協議集合起來的總稱(規則)
◆封層管理是TCP/IP協議的特徵
在這裏插入圖片描述應用層
◆應用層一般是我們編寫的應用程序,決定了向用戶提供的應
用服務。應用層可以通過系統調用與傳輸層進行通信。
如: FTP、DNS、HTTP等。

傳輸層.
◆傳輸層通過系統調用嚮應用層提供處於網絡連接中的兩臺計算機
之間的數據傳輸功能。
◆在傳輸層有兩個性質不同的協議:TCP(面向連接, 可靠效率低)和UDP(無連接,不可靠效率高)。

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

鏈路層(又名數據鏈路層,網絡接口層)

用來處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅動、NIC( Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。

4.數據包的封裝過程

在這裏插入圖片描述應用程序的數據在發佈到網絡之前,從上往下傳遞,每層協議都會在上層協議的基礎上加上自己的頭部信息。鏈路層還會加上尾部信息,實現封裝。
發送端發送數據時,數據會從上層傳輸到下層,且每經過一層都會被打上該層的頭部信息。而接收端接收數據時,數據會從下層傳輸到上層,傳輸前會把下層的頭部信息刪除
在這裏插入圖片描述
利用 TCP/IP 協議族進行網絡通信時,會通過分層順序與對方進行通信。
發送端從應用層往下走,接收端則往應用層往上走。
我們用 HTTP 舉例來說明:
1.首先作爲發送端的客戶端在應用層(通過HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。
2.接着,爲了傳輸方便,在傳輸層(TCP 協議)把從應用層處收到的數據(就是HTTP 請求報文)進行分割,並在各個報文上打上標記序號及端口號後轉發給網絡層。
3.在網絡層(通過IP 協議),增加作爲通信目的地的 MAC 地址後轉發給鏈路層。這樣一來,發往網絡的通信請求就準備齊全了。
4.接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的 HTTP請求

發送端在層與層之間傳輸數據時,每經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。
這種把數據信息包裝起來的做法稱爲封裝(encapsulate)

5.傳輸層–TCP三次握手

使用TCP協議進行通信的雙方必須先建立連接,然後才能開始傳輸數據。爲了確保連接雙方可靠性,在雙方建立連接時,TCP協議採用了三次握手策略。
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述完成三次握手就可以進行數據傳輸

爲什麼非要進行三次握手?
客戶端和通訊端要進行連接,要確認雙方的收發能力都是正常,
第一次握手, 客戶端發送給服務器,服務器能收到,那麼這個時候服務端能確定客戶端的發送能力正常,服務端的接受能力正常。
第二次握手, 客戶端確認服務端的接受能力正常(服務端接收到了我的包),發送能力也是正常的(服務端發來了新的),也知道了自己的發送能力是正常的(服務端接收到了我的包)
第三次握手, 因爲服務端只知道客戶端的發送能力和自己的接受能力正常,通過第三次握手,服務端知道客戶端的接收能力正常(客戶端對服務端有了第二次的迴應),服務端的發送能力正常(發出去了)

爲什麼建鏈接要3次握手,斷鏈接需要4次揮手?

對於建鏈接的3次握手: 主要是要初始化Sequence Number 的初始值。通信的雙方要互相通知對方自己的初始化的Sequence Number(縮寫爲ISN:Inital Sequence Number)——所以叫SYN,全稱Synchronize Sequence Numbers。也就上圖中的 x 和 y。這個號要作爲以後的數據通信的序號,以保證應用層接收到的數據不會因爲網絡上的傳輸的問題而亂序(TCP會用這個序號來拼接數據)。

對於4次揮手: 因爲TCP是全雙工的,所以,發送方和接收方都需要Fin和Ack。只不過,有一方是被動的,所以看上去就成了所謂的4次揮手。如果兩邊同時斷連接,那就會就進入到CLOSING狀態,然後到達TIME_WAIT狀態。

當Server端收到Client端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。

6.DNS域名解析

DNS: 域名解析協議(將域名轉化爲相對應的IP地址 www.baidu.com)

www.baide.com 通過 DNS 協議解析對應的 IP 地址 + 80(端口號)— 》web服務器

◆已經介紹了與HTTP協議有着密切關係的TCP/IP協議(使用DNS解析的),接下來介紹的DNS服務也是與HTTP協議有着密不可分的關係。
◆通常我們訪問一個網站,使用的是主機名或者域名來進行訪問的。因爲**相對於IP地址(一 組純數字), 域名更容易讓人記住。但TCP/IP協議使用的是IP地址進行訪問的,所以必須有個機制或服務把域名轉換成IP地址。**DNS服務就是用來解決這個問題的,它提供域名到IP地址之間的解析服務。
在這裏插入圖片描述
爲了提高效率,DNS服務解析是有層次的,原則是就近原則,首先本地電腦會將一些經常使用的域名和ip地址形成映射保存到本地host文件,所以搜尋的時候,系統會從本地的host文件先去找,沒有的話再去本地的DNS服務器(在tcp/ip的參數裏,配置網絡的時候會配置一個DNS服務器,會找首選DNS服務器即本地DNS服務器), 如果本地dns找不到,會一層層上傳(前提是設置了轉發模式),直到根服務器,找到了再回傳。

host:比如訪問谷歌,可以修改host 將谷歌的地址指向映像或者 別的地址

很久沒見過的同學叫小白,想不到電話號碼,在腦子裏想一下,想到了就撥出去(本地host查詢),想不起來就看看手機通訊錄(本地NDS),沒有的話我家樓下有個營業廳,讓她們幫忙查查,問問總公司(沒有轉發模式的情況),有轉發模式的話,就是一層層向上

DNS 域名解析協議的工作原理 遞歸式 迭代式

見以下鏈接
http://blog.chinaunix.net/uid-26275986-id-4110819.html

遞歸式和迭代式

  • 遞歸與迭代的區別 所謂 遞歸查詢過程 就是 “查詢的遞交者” 更替, 而 迭代查詢過程 則是 “查詢的遞交者”不變。
    舉個例子來說,你想知道某個一起上法律課的女孩的電話,並且你偷偷拍了她的照片,回到寢室告訴一個很仗義的哥們兒,這個哥們兒二話沒說,拍着胸脯告訴你,甭急,我替你查(此處完成了一次遞歸查詢,即,問詢者的角色更替)。然後他拿着照片問了學院大四學長,學長告訴他,這姑娘是xx系的;然後這哥們兒馬不停蹄又問了xx系的辦公室主任助理同學,助理同學說是xx系yy班的,然後很仗義的哥們兒去xx系yy班的班長那裏取到了該女孩兒電話。(此處完成若干次迭代查詢,即,問詢者角色不變,但反覆更替問詢對象)最後,他把號碼交到了你手裏。完成整個查詢過程。

遞歸查詢是以本地名稱服務器爲中心查詢,
遞歸查詢是默認方式,迭代查詢是以DNS客戶端,也就是客戶機器爲中心查詢。其實DNS客戶端和本地名稱服務器是遞歸,而本地名稱服務器和其他名稱服務器之間是迭代。
在這裏插入圖片描述DNS 和 CDN

A在上海,B在新疆,C在西安, 大家都想看一個視頻,但是這個視頻資源掛在上海服務器,其他人都會訪問比較慢,把CDN掛在DNS上,用CDN來進行內容的分發,根據自己的區域來決定應該訪問哪一邊的服務器。

7.HTTP事務處理過程

在這裏插入圖片描述在這裏插入圖片描述HTTP工作過程

1.地址解析
如用客戶端瀏覽器請求這個頁面:

localhost.com:8080/index.htm

從中分解出協議名、主機名、端口、對象路徑等部分,對於我們的這個地址,解析得到的結果如下:

  • 協議名:http
  • 主機名:localhost.com
  • 端口:8080
  • 對象路徑:/index.htm

在這一步,需要域名系統DNS解析域名,得主機的IP地址。

2,封裝HTTP請求數據包
把以上部分結合本機自己的信息,封裝成一個HTTP請求數據包

3,封裝成TCP包,建立TCP連接(TCP的三次握手)
在HTTP工作開始之前,客戶機(Web瀏覽器)首先要通過網絡與服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更高層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。這裏是8080端口。

4,客戶端向服務器發送請求命令
建立TCP連接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可內容。

5,服務器響應
服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
實體消息是服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據.

6,服務器關閉TCP連接
一般情況下,一旦服務器向客戶端返回了請求數據,它就要關閉 TCP 連接,即把鏈接釋放掉,然後如果客戶端或者服務器在其頭信息加入了這行代碼 Connection:keep-alive ,TCP 連接在發送後將仍然保持打開狀態,於是,客戶端可以繼續通過相同的連接發送請求。保持連接節省了爲每個請求建立新連接所需的時間,還節約了網絡帶寬。

實驗—對於瀏覽器來說HTTP請求到底是什麼樣子

1.下載WIRESHARK進行抓包,要下載最穩定的版本
在這裏插入圖片描述
2.打開以後選擇所要抓取的網絡,這裏選擇的是wlan
在這裏插入圖片描述
3.找一個網站
在這裏插入圖片描述
4.然後去WIRESHARK裏面看一下
在這裏插入圖片描述在這裏插入圖片描述
5.可以通過瀏覽器的開發者工具看到一些請求的簡單狀況

在這裏插入圖片描述
在這裏插入圖片描述包括請求時間,緩存等等,都會展示出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章