以太網(wǎng)上TCP/IP協(xié)議的分層結(jié)構(gòu)及其報(bào)文格式(轉(zhuǎn))TCP/IP協(xié)議是一個(gè)比較復(fù)雜的協(xié)議集,有很多專業(yè)書籍介紹。在此,我僅介紹其與編程密切相關(guān)的部分:以太網(wǎng)上TCP/IP協(xié)議的分層結(jié)構(gòu)及其報(bào)文格式。我們知道TCP/IP協(xié)議采用分層結(jié)構(gòu),其分層模型及協(xié)議如下表:
協(xié)議采用分層結(jié)構(gòu),因此,數(shù)據(jù)報(bào)文也采用分層封裝的方法。下面以應(yīng)用最廣泛的以太網(wǎng)為例說明其數(shù)據(jù)報(bào)文分層封裝,如下圖所示: 任何通訊協(xié)議都有獨(dú)特的報(bào)文格式,TCP/IP協(xié)議也不例外。對(duì)于通訊協(xié)議編程,我們首先要清楚其報(bào)文格式。由于TCP/IP協(xié)議采用分層模型,各層都有專用的報(bào)頭,以下就簡(jiǎn)單介紹以太網(wǎng)下TCP/IP各層報(bào)文格式。 以太網(wǎng)幀格式如下圖: 8字節(jié)的前導(dǎo)用于幀同步,CRC域用于幀校驗(yàn)。這些用戶不必關(guān)心其由網(wǎng)卡芯片自動(dòng)添加。目的地址和源地址是指網(wǎng)卡的物理地址,即MAC地址,具有唯一性。幀類型或協(xié)議類型是指數(shù)據(jù)包的高級(jí)協(xié)議,如 0x0806表示ARP協(xié)議,0x0800表示IP協(xié)議等。 ARP/RARP(地址解析/反向地址解析)報(bào)文格式如下圖: “硬件類型”域指發(fā)送者本機(jī)網(wǎng)絡(luò)接口類型(值“1”代表以太網(wǎng))。“協(xié)議類型”域指發(fā)送者所提供/請(qǐng)求的高級(jí)協(xié)議地址類型(“0x0800”代表IP協(xié)議)。“操作”域指出本報(bào)文的類型(“1”為ARP請(qǐng)求,“2”為ARP響應(yīng),“3”為RARP請(qǐng)求,“4”為RARP響應(yīng))。 IP數(shù)據(jù)報(bào)頭格式如下圖: 我們用單片機(jī)實(shí)現(xiàn)TCP/IP協(xié)議要作一些簡(jiǎn)化,不考慮數(shù)據(jù)分片和優(yōu)先權(quán)。因此,在此我們不討論服務(wù)類型和標(biāo)志偏移域,只需填“0” 即可。協(xié)議“版本”為4,“頭長度”單位為32Bit,“總長度”以字節(jié)為單位,表示整個(gè)IP數(shù)據(jù)報(bào)長度。“標(biāo)識(shí)”是數(shù)據(jù)包的ID號(hào),用于識(shí)別不同的IP數(shù)據(jù)包。“生存時(shí)間” TTL是個(gè)數(shù)量及的概念,防止無用數(shù)據(jù)包一直存在網(wǎng)絡(luò)中。一般每經(jīng)過路由器時(shí)減一,因此通過TTL 可以算出數(shù)據(jù)包到達(dá)目的地所經(jīng)過的路由器個(gè)數(shù)。“協(xié)議”域表示創(chuàng)建該數(shù)據(jù)包的高級(jí)協(xié)議類型。如 1表示ICMP協(xié)議,6表示TCP協(xié)議,17表示 UDP協(xié)議等。IP數(shù)據(jù)包為簡(jiǎn)化數(shù)據(jù)轉(zhuǎn)發(fā)時(shí)間,僅采用頭校驗(yàn)的方法,數(shù)據(jù)正確性由高層協(xié)議保證。 ICMP(網(wǎng)間網(wǎng)控制報(bào)文協(xié)議)協(xié)議應(yīng)用廣泛。在此僅給出最常見的回應(yīng)請(qǐng)求與應(yīng)答報(bào)文格式,用戶命令ping便是利用此報(bào)文來測(cè)試信宿機(jī)的可到達(dá)性。報(bào)文格式如下圖所示: 類型0 為回應(yīng)應(yīng)答報(bào)文,8 為回應(yīng)請(qǐng)求報(bào)文。整個(gè)數(shù)據(jù)包均參與檢驗(yàn)。注意ICMP封裝在IP數(shù)據(jù)包里傳送。 UDP報(bào)文格式如下圖: TCP報(bào)文格式如下圖: TCP 是面向連接的可靠數(shù)據(jù)傳輸協(xié)議,因此比較復(fù)雜,在此僅作簡(jiǎn)單介紹。“序號(hào)”指數(shù)據(jù)在發(fā)送端數(shù)據(jù)流中的位置。“確認(rèn)號(hào)”指出本機(jī)希望下一個(gè)接收的字節(jié)的序號(hào)。與IP校驗(yàn)不同的是TCP,UDP校驗(yàn)采用偽頭標(biāo)加整個(gè)報(bào)文一同校驗(yàn)的方法。TCP協(xié)議工作原理另行介紹。 |
|