網絡技術入門 :HTTP報文和TCP/IP數據包

本章把HTTP報文和TCP/IP數據包放在一起。是因爲:
報文是一個完成的有意義的數據。
數據包可以理解爲組成報文的傳輸單元。

應用程序的數據一般都比較大,因此TCP會按照網絡包的大小對數據進行拆分。這些被拆分的數據塊,編上號,在經過傳輸層,網絡層,數據鏈路層後被拼接成數據包發送。接收端收到數據包後,將數據包按順序組裝起來,就是一個完整的數據報數據。

本系列文章
網絡技術入門(一):網絡技術基礎知識系統歸結
網絡技術入門(二):兩個主機(客戶端和服務器)通信過程(硬件轉發角度)
網絡技術入門(三):兩個主機(客戶端和服務器)通信過程(數據包交換角度)
網絡技術入門(四):兩個主機(客戶端和服務器)通信過程(TCP/IP通信角度)
網絡技術入門 :HTTP報文和TCP/IP數據包

.待更新
.
.


這裏添加一個拓展

完整的數據是在什麼時候被拆分成小的數據包的?
內核的網絡模塊會將緩衝區(write buffer)的消息進行分塊傳輸。是在傳輸層被拆分的。

爲了詳細說明數據被拆分。
1 簡單描述數據傳輸的整個流程
2 詳細描述數據被拆分

1 簡單描述一下數據的傳輸:

1 應用層當我們發出一個HTTP請求時,如果訪問的是域名,首先會向DNS服務器請求獲取域名對應的IP地址。
2 IP和數據會交給socket網絡組件(socket庫),socket庫相關API的實現實際是操作系統內部的協議棧的操作。
3 TCP/IP協議棧對數據處理(包括握手,分手,數據拆分等),然後數據會被送往網卡驅動程序,然後送往網卡,最後經過路由器在互聯網轉發找到目標主機所在子網絡。
4 在子網絡內廣播或者單播後數據會送達目標服務器(主機)。

2 數據被拆分詳細描述:

TCP網絡連接時。 UDP這裏不做描述。
1 服務器端創建socket套接字,bind綁定IP和端口號,listen監聽,accept等待連接,write和read 讀寫,close關閉套接字。
2 客戶端 創建socket套接字,bind綁定IP和端口號,connect發起連接(三次握手),write和read
讀寫,close關閉套接字。
3 實際數據被拆分就是在調用socket組件的write寫方法時。當write被調用,實際會向操作系統內核所維護的buffer中寫數據。然後數據會被線程送往網卡。如果數據包太大被差分就是在這個過程,操作系統來做。

關於詳細的基於TCP/IP協議棧的文章等後續文章更新。
網絡技術入門(四):兩個主機(客戶端和服務器)通信過程(TCP/IP通信角度)


一、HTTP報文結構

在這裏插入圖片描述

1 HTTP請求報文和HTTP響應報文

HTTP請求報文:
請求行:通過這一行可以大致瞭解請求的內容。請求方法post get等。
消息頭:每一行包含一個頭字段,用於表示請求的附加信息。消息頭的行數根據具體情況可變,一直延伸到空行爲止
消息體:包含客戶端向服務器發送的數據,例如POST方法向Web服務器發送的網頁表單數據

HTTP響應報文:
狀態行
消息頭:同上
消息體:包含服務器向客戶端發送的數據,例如從文件中讀取的數據,或者CGI應用程序輸出的數據等。消息體的內容作爲二進制數據來處理

2 查看HTTP請求報文和響應報文的方式。

無論在開發還是測試中,我們都可以藉助工具來查看HTTP報文,比如瀏覽器開發工具,fiddler,wireshark等,這些工具功能強大,關於如何使用這些工具,以及這些工具抓包的區別,請自行查閱。這裏只介紹HTTP報文查看。

1 chrome開發工具

在這裏插入圖片描述

2 fillder查看報文

在這裏插入圖片描述
上半部分是請求報文,下半部分是響應報文。通過Headers,TextView,WebForms,HexView等標籤也可以查看更多內容,可自行嘗試。

3 wireshark查看報文

請求報文:
在這裏插入圖片描述
響應報文:
在這裏插入圖片描述

wireshark抓包,請求和響應是分兩條記錄的,因爲wireshark是從網卡抓取數據包,所以OSI七層協議的詳細記錄都能獲取。(這裏非常建議結合OSI七層協議和wireshark分析一下,每個層次抓包數據,後面會單獨拿出兩章來分析wireshark抓取的七層協議記錄和抓取rtmp數據流

總結:
1 Fiddler主要來捕獲應用層的數據包,HTTP,HTTPS,websocket等,並且能夠解析HTTPS包數據。
2 Wireshark是從網卡抓取數據包,網絡七層的數據都能抓取。但是對於抓取本地迴環(127.x.x.x)和HTTPS的數據包需要額外的輔助配置才能分析(本地迴環的包可以配合RawCap分析)。
3 對於cookie和cache也被記錄在http消息頭(請求頭)。
4 這裏建議對於HTTPS和HTTP的包使用fiddler抓包。對於TCP,UDP,rtmpt,websocket等用wireshark抓包。

報文(message):是網路中交換與傳輸的數據單元,也是網絡傳輸的單元,報文包含了將要發送的完整的數據信息,其長短不一。報文在傳輸過程中會不斷地封裝成分組、包、幀來傳輸,封裝的方式就是添加一些控制信息組成的不受,那些就是報文頭


二、TCP/IP數據包

在這裏插入圖片描述
以太網幀報頭:以太網控制信息。
IP協報頭:IP控制信息。
TCP協議報頭和數據塊:包的內容。
FCS:幀校驗序列。
MSS:最大分段大小。除去頭部之後,一個網絡包所能容納的 TCP 數據的最大長度。
MTU:最大傳輸單元。一個網絡包的最大長度,以太網中一般爲 1500 字節。

關於數據包在網絡層次中的封裝過程,在後續章節會更新,等待貼鏈接…

數據包(packet):在TCP/IP協議通信傳輸中的數據單元,也稱爲“包”。指自包含的,帶有足夠尋址信息,可獨立地從源主機傳輸到目的主機,而不需要以來早期地源主機和目的主機之間交換信息以及傳輸網絡地數據包


附加:TCP,IP和以太網幀頭部格式表

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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