网际协议:数据报格式和分片以及IPv4编址
一、報(bào)文格式和分片
因特網(wǎng)網(wǎng)絡(luò)層協(xié)議的內(nèi)部視圖如下:
包括路由協(xié)議、IP協(xié)議和ICMP協(xié)議。
(1)路由協(xié)議的主要功能是路徑選擇,計(jì)算出用于在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)分組的轉(zhuǎn)發(fā)表。
(2)IP協(xié)議用于規(guī)定編址規(guī)則、數(shù)據(jù)報(bào)格式以及數(shù)據(jù)處理規(guī)則。
(3)ICMP協(xié)議主要復(fù)雜報(bào)告數(shù)據(jù)報(bào)中的差錯(cuò)和對(duì)某些網(wǎng)絡(luò)層信息請求進(jìn)行響應(yīng)。
1、IP數(shù)據(jù)報(bào)格式
網(wǎng)絡(luò)層的分組被稱為數(shù)據(jù)報(bào)。
(1)版本號(hào):這4比特規(guī)定了數(shù)據(jù)報(bào)的IP協(xié)議版本。通過查看版本號(hào),路由器能夠確定如何解釋數(shù)據(jù)報(bào)的剩余部分。不同的IP版本使用不同的數(shù)據(jù)報(bào)格式。上圖是IPv4版本的數(shù)據(jù)報(bào)格式。
(2)首部長度:4比特,IPv4數(shù)據(jù)報(bào)中的一些可變數(shù)量的選項(xiàng)包含在首部,首部長度用來確定IP數(shù)據(jù)報(bào)中數(shù)據(jù)部分實(shí)際從哪里開始。大多數(shù)IP數(shù)據(jù)報(bào)不包含此項(xiàng)。
(3)服務(wù)類型:8比特。區(qū)別不同類型的數(shù)據(jù)報(bào)如區(qū)別實(shí)時(shí)數(shù)據(jù)報(bào)與非實(shí)時(shí)數(shù)據(jù)報(bào)。服務(wù)類型比特包含在IPv4首部中。
(4)數(shù)據(jù)報(bào)長度:這是IP數(shù)據(jù)報(bào)的總長度即首部加上數(shù)據(jù)。為16比特。
(5)標(biāo)識(shí)、標(biāo)志、片偏移:這三個(gè)字段與所謂的IP分片有關(guān)。新版本的IP即IPv6不允許在路由器上對(duì)分組分片。
(6)壽命:用來確保數(shù)據(jù)報(bào)不會(huì)永遠(yuǎn)在網(wǎng)絡(luò)中循環(huán)。每當(dāng)數(shù)據(jù)報(bào)由一臺(tái)路由器處理時(shí),該字段的值減1。若壽命字段減為0,則該數(shù)據(jù)報(bào)必須丟棄。
(7)高層:也就是上層協(xié)議,指示了IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分應(yīng)交給哪個(gè)特定的運(yùn)輸層協(xié)議。值為6表示上層協(xié)議是TCP協(xié)議,值為17表示上層協(xié)議是UDP協(xié)議。該字段僅在一個(gè)IP數(shù)據(jù)報(bào)到達(dá)其最終目的地才會(huì)有用。
(8)首部校驗(yàn)和:該字段用于幫助路由器檢測收到的IP數(shù)據(jù)報(bào)中的比特錯(cuò)誤。校驗(yàn)和計(jì)算方法在之前的文章中提到過。
(9)源和目的IP地址。當(dāng)生成一個(gè)數(shù)據(jù)報(bào)時(shí),它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最終目的地的地址。
(10)選項(xiàng):選項(xiàng)字段允許IP首部被擴(kuò)展。
(11)數(shù)據(jù):交付給目的地的運(yùn)輸層報(bào)文段。
2、IP數(shù)據(jù)報(bào)分片和重組
2.1、分片原因
因?yàn)槟壳暗囊蛱鼐W(wǎng)中并非所有鏈路層協(xié)議都能承載相同長度的網(wǎng)絡(luò)層分組。有的協(xié)議能承載大數(shù)據(jù)報(bào),而有的協(xié)議只能承載小分組。例如以太網(wǎng)幀能夠承載不超過1500字節(jié)的數(shù)據(jù),而某些廣域網(wǎng)鏈路的幀可承載不超過576字節(jié)的數(shù)據(jù)。在因特網(wǎng)中,允許數(shù)據(jù)報(bào)在從發(fā)送主機(jī)到接收主機(jī)的傳送過程中經(jīng)過不同的鏈路。因此當(dāng)一個(gè)大的數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到一條只能承載小數(shù)據(jù)報(bào)的鏈路時(shí)就需要進(jìn)行分片。如下圖所示:一個(gè)大的數(shù)據(jù)報(bào)在中間路由器被分為三個(gè)小的數(shù)據(jù)報(bào),而這些小的數(shù)據(jù)報(bào)將在網(wǎng)絡(luò)中繼續(xù)轉(zhuǎn)發(fā),后續(xù)路由器將每個(gè)數(shù)據(jù)報(bào)作為一個(gè)獨(dú)立的報(bào)文進(jìn)行轉(zhuǎn)發(fā),直到到達(dá)接收方主機(jī),接收方主機(jī)根據(jù)分片相關(guān)的標(biāo)識(shí)符、標(biāo)志位和片偏移等字段對(duì)這些報(bào)文進(jìn)行重組。
2.2、分片方法
那么如何進(jìn)行分片呢?分片方法需要保證在接收方能準(zhǔn)確無誤的重新組裝。因此首先需要分析組裝要考慮的因素。
(1)接收方怎么確定一個(gè)收到的數(shù)據(jù)報(bào)是一個(gè)大的報(bào)文的分片?
(2)如果是分片的話,接收方怎么知道大報(bào)文最后一個(gè)分片是哪個(gè)數(shù)據(jù)報(bào)呢?
(3)如何將收到的分片重新組裝成初始的數(shù)據(jù)報(bào)?
為了解決上述問題,設(shè)計(jì)者將標(biāo)識(shí)符、標(biāo)志位、片偏移字段放在IP數(shù)據(jù)報(bào)的首部中。通過IP首部中的字段來解決。通過實(shí)例來學(xué)習(xí)具體分片方法。
如上圖所示,示例如下:一個(gè)4000字節(jié)的數(shù)據(jù)報(bào)(包括了20字節(jié)的IP首部和3980字節(jié)的IP有效載荷)到達(dá)一臺(tái)路由器,且必須被轉(zhuǎn)發(fā)到一條MTU為1500字節(jié)的鏈路上。這就意味著初始數(shù)據(jù)報(bào)中的3980字節(jié)數(shù)據(jù)必須被分配為3個(gè)獨(dú)立的片,其中的每個(gè)片也是一個(gè)IP數(shù)據(jù)報(bào)。
MTU:最大傳送單元,一個(gè)鏈路層幀能承載的最大數(shù)據(jù)量。
第一個(gè)分片是1480個(gè)字節(jié)的數(shù)據(jù)加20字節(jié)的IP頭部,第二個(gè)分片也是1480個(gè)字節(jié)的數(shù)據(jù)加20字節(jié)的IP頭部。第三個(gè)分片是1020的數(shù)據(jù)加20字節(jié)的IP頭部。因此三個(gè)分片的長度分別為1500字節(jié)、1500字節(jié)、1040字節(jié)。需要注意的是在后續(xù)的路由器轉(zhuǎn)發(fā)中將作為獨(dú)立的報(bào)文進(jìn)行轉(zhuǎn)發(fā)。直到三個(gè)分片都到達(dá)接收方主機(jī),由接收方主機(jī)重新組裝。
分片情況如下:
標(biāo)識(shí)符通過ID號(hào)來表示原始數(shù)據(jù)報(bào),ID號(hào)相同的分組都屬于一個(gè)原始數(shù)據(jù)報(bào),假設(shè)數(shù)據(jù)報(bào)的標(biāo)識(shí)符為777,也就是圖中的x是777。
通過標(biāo)志位(fragflag)來表示數(shù)據(jù)報(bào)進(jìn)行的分片,如果標(biāo)志位為1,則表示后面還有數(shù)據(jù)。標(biāo)志位為0表示這是最后一個(gè)分片,后面沒有數(shù)據(jù)了。
偏移位為0表示插入的數(shù)據(jù)開始于字節(jié)0;偏移185表示插入的數(shù)據(jù)開始于字節(jié)1480(1858=1480);偏移370表示插入的數(shù)據(jù)開始于字節(jié)2960(3708=2960)。
二、IP地址即IPv4的編址規(guī)則
1、IP地址簡單介紹
IP地址:分配給主機(jī)或路由器接口的32比特的標(biāo)識(shí)符。
接口:主機(jī)/路由器與物理鏈路之間的邊界。
因?yàn)槁酚善鞯娜蝿?wù)是從鏈路上接收數(shù)據(jù)報(bào)并從某些其它鏈路轉(zhuǎn)發(fā)出去,所以路由器必須擁有兩條或更多鏈路與它連接,因此路由器通常有多個(gè)接口;因?yàn)槊颗_(tái)主機(jī)與路由器都能發(fā)送和接收IP數(shù)據(jù)報(bào),IP要求每臺(tái)主機(jī)和路由器接口擁有自己的IP地址,因此一個(gè)IP地址技術(shù)上是與一個(gè)接口相關(guān)聯(lián)的,而不是與包括該接口的主機(jī)或路由器相關(guān)聯(lián)的。主機(jī)也可以有多個(gè)接口,例如筆記本通常會(huì)有無線網(wǎng)卡接口,也會(huì)有有線網(wǎng)卡的以太網(wǎng)接口。每個(gè)接口有一個(gè)IP地址。在因特網(wǎng)中設(shè)備通過IP地址進(jìn)行尋址。
上圖每臺(tái)計(jì)算機(jī)都有一個(gè)IP地址,路由器有三個(gè)端口,每個(gè)端口都有一個(gè)IP地址。
2、IPv4編址
2.1、兩種書寫方法
首先IPv4地址有兩種書寫方法:
(1)32比特的二進(jìn)制表示法:例如11011111 00000001 00000001 00000001這樣直接寫。
(2)點(diǎn)分十進(jìn)制表示法:是將32比特按照每8比特劃分為一個(gè)字節(jié),每個(gè)字節(jié)用10進(jìn)制數(shù)來表示,十進(jìn)制數(shù)之間用”.“號(hào)分隔。例如:
2.2、IP地址類型
根據(jù)不同的取值范圍,早期將IP地址分為五類。IP地址中前5位用于標(biāo)識(shí)IP地址的類別,A類地址的第一位為”0“,B類地址的前兩位為”10“,C類地址的前三位為”110“,D類地址的前四位為”1110“,E類地址的前五位為”11110“。其中,A類、B類與C類地址為基本的IP地址。
如上圖所示,IP地址由兩部分組成:
(1)網(wǎng)絡(luò)號(hào):指明主機(jī)所在的物理網(wǎng)絡(luò)的編號(hào)。
(2)主機(jī)號(hào):主機(jī)在物理網(wǎng)絡(luò)中的編號(hào)。
每個(gè)IP地址有32比特。
一個(gè)A類地址其網(wǎng)絡(luò)號(hào)最高的8比特,后24比特可以作為主機(jī)號(hào)。因此可以分配的主機(jī)數(shù)為224^{24}24,但是一個(gè)家庭或者組織往往不需要這么多的地址空間,造成浪費(fèi)。
而一個(gè)C類地址網(wǎng)絡(luò)號(hào)為最高的24比特,主機(jī)號(hào)只有8比特用于分配主機(jī)地址,因此可分配的主機(jī)數(shù)為28^88即256臺(tái)主機(jī),可分配的數(shù)量較少,又不太夠用。
因此,逐漸按類別進(jìn)行地址分配被CIDR技術(shù)取代。
2.3、一些常用的特殊IP地址
(1)127.0.0.1-127.255.255.254
這是預(yù)留的一組IP地址,主要是用來識(shí)別主機(jī)本身的地址。也叫做”localhost“,一半用來測試使用的,做開發(fā)的人比較熟悉。
(2)10.x.x.x ;172.16.x.x-172.31.x.x ;198.168.x.x
這三個(gè)地址段主要是我們私有的內(nèi)網(wǎng)地址。也就是我們平時(shí)企業(yè)或者家里局域網(wǎng)所使用的地址段,我們比較熟悉的應(yīng)該就是192.168.x.x這個(gè)地址段了。
注意:內(nèi)部私有地址是不能夠進(jìn)行全網(wǎng)尋址的。
2.4、子網(wǎng)
上面說過IP地址由網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)構(gòu)成,網(wǎng)絡(luò)號(hào)就是子網(wǎng)。
從IP地址的觀點(diǎn)來看,子網(wǎng)是一組設(shè)備,這些設(shè)備接口的IP地址具有同樣的網(wǎng)絡(luò)部分。這些設(shè)備通過鏈路相連,當(dāng)沒有路由器接入時(shí),在物理上能夠相互到達(dá)。
上圖有三個(gè)子網(wǎng),分別為223.1.1子網(wǎng)、223.2.1子網(wǎng)和223.1.3子網(wǎng)。
從另一個(gè)觀點(diǎn)來看子網(wǎng):為了確定子網(wǎng),分開主機(jī)和路由器的每個(gè)接口,從而產(chǎn)生了幾個(gè)分離的網(wǎng)絡(luò)島,這寫?yīng)毩⒕W(wǎng)絡(luò)中的每一個(gè)叫做一個(gè)子網(wǎng)。如下圖所示:
2.5、CIDR技術(shù)
這是一種新的IP地址表示方法,其中網(wǎng)絡(luò)部分可以任意長度,不同于早期的分類IP地址,網(wǎng)絡(luò)部分是固定長度。在CIDR中地址的寫法為a.b.c.d/x,這里x是地址網(wǎng)絡(luò)部分的比特?cái)?shù)。
如上圖所示,這里的/23表示前23位是網(wǎng)絡(luò)部分,后面的9比特表示主機(jī)部分。
最高位23位是網(wǎng)絡(luò)部分可以用/23來表示,也可以用子網(wǎng)掩碼來表示,在子網(wǎng)掩碼中,IP地址的網(wǎng)絡(luò)部分用全1表示,主機(jī)部分用全0表示。
因此這里的/23等價(jià)于11111111 11111111 11111110 00000000,對(duì)應(yīng)的點(diǎn)分十進(jìn)制寫法為255.255.254.0。
總結(jié)
以上是生活随笔為你收集整理的网际协议:数据报格式和分片以及IPv4编址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之系统编程篇:使用条件变量
- 下一篇: 协议的概念