| 應 用 層 (Application) | HTTP、Telnet、FTP、SMTP、SNMP |
| 傳 輸 層 (Transport) | TCP、UDP |
| 網(wǎng) 間 網(wǎng)層 (Internet) | IP【ARP、RARP、ICMP】 |
| 網(wǎng)絡(luò )接口層 (Network) | Ethernet、X.25、SLIP、PPP |
協(xié)議采用分層結構,因此,數據報文也采用分層封裝的方法。下面以應用最廣泛的以太網(wǎng)為例說(shuō)明其數據報文分層封裝,如下圖所示:

任何通訊協(xié)議都有獨特的報文格式,TCP/IP協(xié)議也不例外。對于通訊協(xié)議編程,我們首先要清楚其報文格式。由于TCP/IP協(xié)議采用分層模型,各層都有專(zhuān)用的報頭,以下就簡(jiǎn)單介紹以太網(wǎng)下TCP/IP各層報文格式。
以太網(wǎng)幀格式如下圖:

8字節的前導用于幀同步,CRC域用于幀校驗。這些用戶(hù)不必關(guān)心其由網(wǎng)卡芯片自動(dòng)添加。目的地址和源地址是指網(wǎng)卡的物理地址,即MAC地址,具有唯一性。幀類(lèi)型或協(xié)議類(lèi)型是指數據包的高級協(xié)議,如 0x0806表示ARP協(xié)議,0x0800表示IP協(xié)議等。
ARP/RARP(地址解析/反向地址解析)報文格式如下圖:

“硬件類(lèi)型”域指發(fā)送者本機網(wǎng)絡(luò )接口類(lèi)型(值“1”代表以太網(wǎng))。“協(xié)議類(lèi)型”域指發(fā)送者所提供/請求的高級協(xié)議地址類(lèi)型(“0x0800”代表IP協(xié)議)。“操作”域指出本報文的類(lèi)型(“1”為ARP請求,“2”為ARP響應,“3”為RARP請求,“4”為RARP響應)。
IP數據報頭格式如下圖:

我們用單片機實(shí)現TCP/IP協(xié)議要作一些簡(jiǎn)化,不考慮數據分片和優(yōu)先權。因此,在此我們不討論服務(wù)類(lèi)型和標志偏移域,只需填“0” 即可。協(xié)議“版本”為4,“頭長(cháng)度”單位為32Bit,“總長(cháng)度”以字節為單位,表示整個(gè)IP數據報長(cháng)度。“標識”是數據包的ID號,用于識別不同的IP數據包。“生存時(shí)間” TTL是個(gè)數量及的概念,防止無(wú)用數據包一直存在網(wǎng)絡(luò )中。一般每經(jīng)過(guò)路由器時(shí)減一,因此通過(guò)TTL 可以算出數據包到達目的地所經(jīng)過(guò)的路由器個(gè)數。“協(xié)議”域表示創(chuàng )建該數據包的高級協(xié)議類(lèi)型。如 1表示ICMP協(xié)議,6表示TCP協(xié)議,17表示 UDP協(xié)議等。IP數據包為簡(jiǎn)化數據轉發(fā)時(shí)間,僅采用頭校驗的方法,數據正確性由高層協(xié)議保證。
ICMP(網(wǎng)間網(wǎng)控制報文協(xié)議)協(xié)議應用廣泛。在此僅給出最常見(jiàn)的回應請求與應答報文格式,用戶(hù)命令ping便是利用此報文來(lái)測試信宿機的可到達性。報文格式如下圖所示:

類(lèi)型0 為回應應答報文,8 為回應請求報文。整個(gè)數據包均參與檢驗。注意ICMP封裝在IP數據包里傳送。
UDP報文格式如下圖:

TCP報文格式如下圖:

TCP 是面向連接的可靠數據傳輸協(xié)議,因此比較復雜,在此僅作簡(jiǎn)單介紹。“序號”指數據在發(fā)送端數據流中的位置。“確認號”指出本機希望下一個(gè)接收的字節的序號。與IP校驗不同的是TCP,UDP校驗采用偽頭標加整個(gè)報文一同校驗的方法。TCP協(xié)議工作原理另行介紹。
聯(lián)系客服