IPv4数据报格式及其语义
一、IP數(shù)據(jù)報的格式如下圖所示
| 版本 | 首部長度 | 服務(wù)類型 | 數(shù)據(jù)報長度 | |
| 16比特標(biāo)識 | 標(biāo)志 | 13比特片偏移 | ||
| 壽命 | 上層協(xié)議 | 首部檢驗和 | ||
| 32比特源IP地址 | ||||
| 32比特目的IP地址 | ||||
| 選項(如果有的話) | ||||
| 數(shù)據(jù) | ||||
IPv4數(shù)據(jù)報格式
二、各部分語義
1)版本(號):4bit,規(guī)定了數(shù)據(jù)包的IP協(xié)議版本;通過查看版本號,路由器能夠確定如何解釋IP數(shù)據(jù)報的剩余部分
2)首部長度:因為IPV4數(shù)據(jù)報可包含一些可變數(shù)量的選項,所以需要用這4bit來確定首部的長度,以確定IP數(shù)據(jù)報的數(shù)據(jù)部分實際從哪里開始。大多數(shù)IP數(shù)據(jù)報不包含選項,所以一般IP數(shù)據(jù)報具有20字節(jié)的首部
3)服務(wù)類型:8bit,服務(wù)類型包含在首部中以使不同類型的IP數(shù)據(jù)報能相互區(qū)分開來,例如,將實時數(shù)據(jù)報(如用于IP電話應(yīng)用)與非實時流量(如FTP)區(qū)分開來也許是有用,提供特定等級的服務(wù)是一個由路由器管理員決定的策略問題
4)數(shù)據(jù)報長度:這是IP數(shù)據(jù)報的總長度(首部加上數(shù)據(jù)),以字節(jié)計,因為該字段長為16bit,所以IP數(shù)據(jù)報的理論最大長度為65535字節(jié),然而數(shù)據(jù)報很少有超過1500字節(jié)的(因為IP數(shù)據(jù)還要靠數(shù)據(jù)鏈路層運輸?shù)?#xff0c;而鏈路層幀能承載的最大數(shù)據(jù)量為叫做最大運輸單元(Maximum Transmission Unit,MTU))
5)標(biāo)識、標(biāo)志、片偏移:
要理解這三個內(nèi)容,要先理解一些其他知識
(1)分片:把IP數(shù)據(jù)報中的數(shù)據(jù)分成兩個或者更多個較小的IP數(shù)據(jù)報,用單獨的鏈路層幀封裝成較小的IP數(shù)據(jù)報,每個這些較小的數(shù)據(jù)報稱為片
(2)為什么要分片:因為每個IP數(shù)據(jù)報封裝在鏈路層幀中從一臺路由器傳輸?shù)较乱慌_路由器,而鏈路層幀能承載的最大數(shù)據(jù)量(最大運輸單? 元(Maximum Transmission Unit,MTU)是一定的,故鏈路層幀嚴(yán)格限制著IP數(shù)據(jù)報的長度;而且發(fā)送方和與目的路徑上的每段鏈路可能使用不同的鏈路層協(xié)議,且每種協(xié)議可能具有不同的MTU,所以就更有可能需要分片了,以便能夠使得數(shù)據(jù)報能夠順利的傳遞數(shù)據(jù)報
(3)組裝:目的主機(jī)從相同源收到一系列數(shù)據(jù)報時,需要確定哪些數(shù)據(jù)報是分片,如果是分片的話,還要進(jìn)一步指導(dǎo)何時收到最后一個分片,如何將接收到的分片拼接起來以形成初始的數(shù)據(jù)報,故IPV4的設(shè)計者將標(biāo)識、標(biāo)志和片偏移字段放在IP數(shù)據(jù)報首部中,當(dāng)生成一個數(shù)據(jù)報時,發(fā)送主機(jī)為該數(shù)據(jù)報設(shè)置源和目的地址的同時,再填上標(biāo)識號
標(biāo)識:16bit,源主機(jī)發(fā)送IP數(shù)據(jù)報的時候,通常為它發(fā)送的每個數(shù)據(jù)報的標(biāo)識號加1,所以當(dāng)某個路由器需要對某一個數(shù)據(jù)報分片時,形成的每個數(shù)據(jù)報(分片)具有初始數(shù)據(jù)報的源地址、目的地址、與標(biāo)識號,這樣目的主機(jī)就可以判別哪些分片是屬于一個初始數(shù)據(jù)報的
標(biāo)志:3bit,由于IP是一種不可靠服務(wù),一個或者多個片可能永遠(yuǎn)到不了目的地,所以為了讓目的主機(jī)絕對的相信它已經(jīng)收到了初始數(shù)據(jù)報的最后一個片,最后一個片的標(biāo)志比特被設(shè)置為0,而所有其他片的標(biāo)志比特被設(shè)置為1
片偏移:13bit,標(biāo)示數(shù)據(jù)相對于初始數(shù)據(jù)報的偏移值,并且偏移值應(yīng)當(dāng)被規(guī)定以8字節(jié)塊為單位。所以除了最后一個片的所有初始有效載荷數(shù)據(jù)的數(shù)量應(yīng)當(dāng)是8字節(jié)的倍數(shù)
6)壽命:8bit,壽命(Time-To_Live ,TTL )字段是用來確保數(shù)據(jù)報不會永遠(yuǎn)(如由于長時間的路由選擇環(huán)路)在網(wǎng)絡(luò)中循環(huán),每當(dāng)數(shù)據(jù)報由一臺路由器處理時,該字段的值減1。若TTL字段減為0,則該數(shù)據(jù)報必須丟棄。
7)協(xié)議:8 bit,該字段僅當(dāng)一個IP數(shù)據(jù)報到達(dá)其最終目的地才會有用,改字段指示了IP數(shù)據(jù)報的數(shù)據(jù)部分應(yīng)交給哪個特定的運輸層協(xié)議,如:值為6應(yīng)該交給TCP,而值為17表示數(shù)據(jù)部分要交給UDP ,其他可能值查看? ?https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
8)首部檢驗和: 16bit,首部檢驗和用于幫助路由器檢測收到的IP數(shù)據(jù)報中的比特錯誤。首部檢驗和是這樣計算的:將首部中的每2個字節(jié)當(dāng)做一個數(shù),用反碼運算對這些數(shù)求和;具體到發(fā)送方或接收方計算如下:
在發(fā)送數(shù)據(jù)時,為了計算IP數(shù)據(jù)包的校驗和。應(yīng)該按如下步驟:
(1)把IP數(shù)據(jù)包的校驗和字段置為0;
(2)把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制反碼求和;
(3)把得到的結(jié)果存入校驗和字段中。
? ? 在接收數(shù)據(jù)時,計算數(shù)據(jù)包的校驗和相對簡單,按如下步驟:
(1)把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制反碼求和,包括校驗和字段;
(2)檢查計算出的校驗和的結(jié)果是否等于零(反碼應(yīng)為16個0);
(3)如果等于零,說明被整除,校驗和正確。否則,校驗和就是錯誤的,協(xié)議棧要拋棄這個數(shù)據(jù)包。
路由器要對每個收到的IP數(shù)據(jù)報計算其首部檢驗和,如果數(shù)據(jù)報首部中攜帶的檢驗和與計算得到的檢驗和不一致,則檢驗出是個差錯,路由器一般會丟棄檢測出錯誤的數(shù)據(jù)報
9)源和目的IP地址:32bit,當(dāng)某源生成一個數(shù)據(jù)報時,在這兩個字段中插入發(fā)送主機(jī)的IP地址和目的地的IP地址,通常源主機(jī)DNS查找來決定目的地址
10)選項:32bit,選項字段允許IP首部被擴(kuò)展。首部選項意味著很少使用,因此決定對每個數(shù)據(jù)報首部不包括選項字段的信息,這樣能夠節(jié)約開銷,但是因為有些數(shù)據(jù)報有選項,有些數(shù)據(jù)報沒有選項,故導(dǎo)致一臺路由器處理一個IP數(shù)據(jù)報所需的時間變化很大。
11)數(shù)據(jù)(有效荷載):32bit,這是數(shù)據(jù)報存在的首要理由!大多數(shù)情況下,IP數(shù)據(jù)報中的數(shù)據(jù)字段包含要交付給目的地運輸層報文段(UDP或TCP)
注:注意到一個IP數(shù)據(jù)報有總長為20字節(jié)的首部(假設(shè)無選項)如果一個數(shù)據(jù)報承載一個TCP報文,則每個(無分片的)數(shù)據(jù)報共承載了總長40字節(jié)的首部(20字節(jié)的IP數(shù)據(jù)報加上20字節(jié)的TCP首部)以及應(yīng)用文報文
三、關(guān)于標(biāo)識、標(biāo)志、片偏移的例子
假設(shè)一個4000字節(jié)的數(shù)據(jù)報(20字節(jié)加上3980字節(jié)IP數(shù)據(jù)有效荷載)到達(dá)路由器,且必須被轉(zhuǎn)發(fā)到一條MTU為1500字節(jié)鏈路上,該如何進(jìn)行分片?
答:初始數(shù)據(jù)報會被分為3個片,其中的每個片也是一個IP數(shù)據(jù)報,假定該數(shù)據(jù)報的發(fā)送時,主機(jī)給予的標(biāo)識號為777,三個片的特點如下:
| 片 | 字節(jié) | ID | 偏移 | 標(biāo)志 |
| 第一片 | 1480 ? | ID=777 | Offset=0 | Flag=1 |
| 第二片 | 1480 ? | ID=777 | Offset=185 | Flag=1 |
| 第三片 | 1020(3980-1480*2) | ID=777 | Offset=370 | Flag=0 |
注:此時就需要4040個字節(jié)來運輸初始數(shù)據(jù)報,所以分片是需要開銷的
?
?
?
?
?
?
?
?
?
?
posted on 2019-06-24 22:20?初妍 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/alphabetical/p/11079902.html
總結(jié)
以上是生活随笔為你收集整理的IPv4数据报格式及其语义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斐讯K2路由器怎么刷机 如何刷机路由器
- 下一篇: 使用js将后台返回的数据转换成树形结构