以太網上TCP/IP協議的分層結構及其報文格式

http://service.hy.blog.163.com/blog/static/673649042008614114453413/

TCP/IP協議是一個比較複雜的協議集,有很多專業書籍介紹。在此,我僅介紹其與編程密切相關的部分:以太網上TCP/IP協議的分層結構及其報文格式。我們知道TCP/IP協議採用分層結構,其分層模型及協議如下表:

應 用 層
(Application)
HTTP、Telnet、FTP、SMTP、SNMP
傳 輸 層
(Transport)
TCP、UDP
網 間 網層
(Internet)
IP【ARP、RARP、ICMP】
網絡接口層
(Network)
Ethernet、X.25、SLIP、PPP

  協議採用分層結構,因此,數據報文也採用分層封裝的方法。下面以應用最廣泛的以太網爲例說明其數據報文分層封裝,如下圖所示:

  任何通訊協議都有獨特的報文格式,TCP/IP協議也不例外。對於通訊協議編程,我們首先要清楚其報文格式。由於TCP/IP協議採用分層模型,各層都有專用的報頭,以下就簡單介紹以太網下TCP/IP各層報文格式。

  以太網幀格式如下圖:

  8字節的前導用於幀同步,CRC域用於幀校驗。這些用戶不必關心其由網卡芯片自動添加。目的地址和源地址是指網卡的物理地址,即MAC地址,具有唯一性。幀類型或協議類型是指數據包的高級協議,如 0x0806表示ARP協議,0x0800表示IP協議等。

  ARP/RARP(地址解析/反向地址解析)報文格式如下圖:

  “硬件類型”域指發送者本機網絡接口類型(值“1”代表以太網)。“協議類型”域指發送者所提供/請求的高級協議地址類型(“0x0800”代表IP協議)。“操作”域指出本報文的類型(“1”爲ARP請求,“2”爲ARP響應,“3”爲RARP請求,“4”爲RARP響應)。

  IP數據報頭格式如下圖:

  我們用單片機實現TCP/IP協議要作一些簡化,不考慮數據分片和優先權。因此,在此我們不討論服務類型和標誌偏移域,只需填“0” 即可。協議“版本”爲4,“頭長度”單位爲32Bit,“總長度”以字節爲單位,表示整個IP數據報長度。“標識”是數據包的ID號,用於識別不同的IP數據包。“生存時間” TTL是個數量及的概念,防止無用數據包一直存在網絡中。一般每經過路由器時減一,因此通過TTL 可以算出數據包到達目的地所經過的路由器個數。“協議”域表示創建該數據包的高級協議類型。如 1表示ICMP協議,6表示TCP協議,17表示 UDP協議等。IP數據包爲簡化數據轉發時間,僅採用頭校驗的方法,數據正確性由高層協議保證。

  ICMP(網間網控制報文協議)協議應用廣泛。在此僅給出最常見的迴應請求與應答報文格式,用戶命令ping便是利用此報文來測試信宿機的可到達性。報文格式如下圖所示:

  類型0 爲迴應應答報文,8 爲迴應請求報文。整個數據包均參與檢驗。注意ICMP封裝在IP數據包裏傳送。

  UDP報文格式如下圖:

  TCP報文格式如下圖:

  TCP 是面向連接的可靠數據傳輸協議,因此比較複雜,在此僅作簡單介紹。“序號”指數據在發送端數據流中的位置。“確認號”指出本機希望下一個接收的字節的序號。與IP校驗不同的是TCP,UDP校驗採用僞頭標加整個報文一同校驗的方法。TCP協議工作原理另行介紹。


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