日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http报文格式_理解数据通信协议的报文格式有何用?

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http报文格式_理解数据通信协议的报文格式有何用? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們知道應用層的PDU是報文,最后變成物理層的比特流來傳播,那么一個協議的報文格式同這個報文本身是什么關系?理解一個協議的報文格式有什么作用?簡而言之,數據的發送方每層(從高層向底層下沉過程)做原始數據的封裝(Encapsulation)、編碼(Encode), 數據的接收方每層(從底層向高層上浮過程)做數據的解封裝(Decapsulation)、解碼(Decode),最終還原出原始數據,并理解原始數據的真正含義!為了使上文的文字有血有肉,還是以一個小故事做為例子。Alice訪問知乎網站(https://www.zhihu.com)假設Alice第一個報文已經層層封裝好了,到達網卡發送緩沖區,網卡并不需要理解這個報文是什么,代表什么含義,網卡眼中只是一串0、1組成的二進制位流。網卡需要將二進制流做封裝的工作,添加以太網頭、添加以太網尾(FCS)。

  • 以太網頭里的源MAC,代表自己的MAC地址,6個字節。

  • 以太網頭里的目的MAC,代表接收者的MAC地址,6個字節。

  • 以太網頭里的Ethetype,代表著封裝的是什么協議,這里為 0x0800,代表IP協議,2個字節。

  • 以太網尾的FCS,代表著幀校驗碼,一般為CRC校驗算法,4個字節。

網卡還需要將這些0、1二進制流進行編碼,什么樣電流波形代表0,什么代表1,然后0、1二進制流就變成了在網線里傳輸的電流波形。為了使得接收方提前做好接收的準備,還需要在發這些波形前,發送8個字節(64個二進制位)的同步信號。幀與幀之間還需要時間間隙(Inter-Frame Gap),以便于接收方識別每一個幀。Okay,將視角切換到接收方,接收方的檢測到完整的64位的同步信號,做好了接收的準備。忽略掉64同步位,開始接收第65位開始的信號,并按照解碼規范,將其解碼成0或者1,并放入接收緩沖區。在此過程中,一旦接收到完整的目的MAC地址,和自己的MAC地址相比較,如果不同,放棄接收過程。如果相同則繼續接收。接收過程一直持續到檢測到空的的時間間隙(Inter-Frame Gap),這個幀接收完畢。網卡首先將最末尾的32位(4個字節)提取出來,按照協議規范,這個是FCS校驗碼,對接收到的幀(FCS除外)計算FCS校驗碼,看是否與提取出的FCS校驗碼相同。
  • 如果相同,說明幀的是完好的,可以繼續處理。

  • 如果不同,說明幀出錯,丟棄處理。

然后,網卡根據Ethetype = 0x0800,檢索是哪個軟件模塊(回調函數)負責處理這個IP協議,IP模塊將緩沖數據取走,并釋放緩沖區。IP模塊

IP模塊就可以這個圖片中的格式,對接收到的數據做報文格式合法性檢查(Sanity Check)。只要有不合法的字段,丟棄處理。比如檢查到TTL= 0,丟棄,還需要給源IP對應的主機發送ICMP出錯消息。如果一切正常,IP模塊提取出“Source IP”字段并查找路由表,進行路由選擇,找到對應的出接口,將IP報文繼續下沉到物理出接口(Outgoing Interface),物理接口按照接口的數據鏈路層封裝類型(Ethernet /HDLC等),完成封裝和編碼,步驟雷同。經過N多中繼路由器的接力,報文最終到達知乎服務器的IP層。IP層查找路由,發現自己就是真正的接收者,IP層提取出“Protocol”協議字段,假定“Protocol= 0x06。IP層檢索為“Protocol= 0x06服務的模塊為TCP模塊。?IP層將IP頭完全剝離,并將剝離掉IP頭的數據提交給TCP模塊處理。TCP模塊

TCP模塊同樣要做報文合法性檢查(Sanity Check)以及Checksum的校驗工作。如果一切正常,TCP根據提取到的五元組{, , , , }來查找TCP Session ID。
  • 如果找到,將報文轉交到次Session ID處理

  • 如果沒有找到,且SYN = 1, 視為新建連接,創建一個新連接

  • 如果沒有找到,且SYN=0,視為非法鏈接,發Reset處理。

假設找到Session ID, 該Session ID負責該報文頭的讀取處理工作,更新滑動窗口,發送確認報文。同時依據“Destination Port”來檢索誰為該報文繼續處理。這里“Destination Port= 443, 由TLS協議來處理,TCP剝離掉TCP頭,將剩余部分提交給TLS處理。TLS模塊如下圖所示,TLS依據“Type”字段是“Hand Shake”、“Change_Spec”、“Alert”、“Application”其中之一,可以知道是握手報文、還是應用數據報文。

假設這里“Type” = “Application”,表示這是加密的上層數據,如灰色部分所示。TLS根據TLS Session ID檢索出解密的密鑰(Session Key)、HMAC Key ,將加密數據加密出來,然后完成數據的完整性校驗工作。如果一切正常,解密出明文數據,在明文數據的頭部,有一個字段名字叫“Application Protocol”,有HTTP 1.1,HTTP 1.2,SPDY等,TLS檢索為該類型負責的模塊。假定這里為HTTP 1.2。HTTP模塊如下圖所示,http也有自己的協議格式,規范每一個字段偏移量的意義,這通常是使用TLV(Type Length Value)來完成。HTTP模塊只要將每個字段的信息提取出來,并按照協議規范的意義理解之,并做出響應的動作即可。知乎服務器看到這原來是拉取用戶主頁的請求,由于請求頁面已經嵌入了用戶的“Access Token”,完成了用戶的身份認證工作,知乎服務器將用戶的主頁按照HTTP 1.2協議格式組織好,并返回給Alice。數據需要再次從高層下沉到底層,這個過程和上浮過程是逆向的,如果理解了上浮過程,那么這個下沉過程就非常好理解!

總結

以上是生活随笔為你收集整理的http报文格式_理解数据通信协议的报文格式有何用?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。