IPv4

《Tcp/Ip協(xié)議族》筆記



網(wǎng)際協(xié)議版本4(IPv4)

IP分組由一個(gè)基本首部和一些選項(xiàng)構(gòu)成,這些選項(xiàng)有時(shí)用于促進(jìn)和控制分組的交付。

目標(biāo):

  • 解釋IP協(xié)議背后的總體思想,并說明IP與Tcp/Ip協(xié)議族中其他協(xié)議之間的位置關(guān)系;
  • 說明IPv4數(shù)據(jù)報(bào)的一般格式,并列出首部中各個(gè)字段;
  • 討論數(shù)據(jù)報(bào)的分片和重裝,以及如何從數(shù)據(jù)報(bào)的分片中恢復(fù)原始的數(shù)據(jù)報(bào);
  • 討論IPv4數(shù)據(jù)報(bào)中可能存在的一些選項(xiàng)以及它們的應(yīng)用;
  • 說明發(fā)送方站點(diǎn)如何為IPv4數(shù)據(jù)報(bào)的首部計(jì)算校驗(yàn)和,以及接受方站點(diǎn)有時(shí)如何檢查這個(gè)檢驗(yàn)和;
  • 討論IP在ATM上運(yùn)行,并與建立局域網(wǎng)或點(diǎn)對(duì)點(diǎn)廣域網(wǎng)之上的IP進(jìn)行比較;
  • 描述一個(gè)簡(jiǎn)化版本的IP軟件包,并給出某些模塊的偽碼。


引言

網(wǎng)際協(xié)議(Internet Protocol,IP)是TCP/IP協(xié)議族在網(wǎng)絡(luò)層使用的傳輸機(jī)制。

IP在TCP/IP協(xié)議族中的位置

IP是一種不可靠的無連接數(shù)據(jù)報(bào)協(xié)議——盡最大努力交付(best-effort delivery)的服務(wù)。盡最大努力是IP分組有可能損壞、丟失、失序或延遲到達(dá),并且可能會(huì)給網(wǎng)絡(luò)帶來擁塞。IP依靠更高層的協(xié)議來解決所有這些問題。
如果可靠性很重要,那么IP就必須與可靠的協(xié)議(如TCP)配合起來使用。


數(shù)據(jù)報(bào)

網(wǎng)絡(luò)(互聯(lián)網(wǎng))層的分組稱為數(shù)據(jù)報(bào)(datagram)。數(shù)據(jù)報(bào)是一個(gè)可變長度的分組,它由兩部分組成:首部和數(shù)據(jù)。
首部長度由 20字節(jié)基本首部+0-40字節(jié)可選部分構(gòu)成,包含有關(guān)路由選擇和交付的重要信息。

習(xí)慣上,在TCP/IP中都是以4字節(jié)為一段來表示首部。

IP數(shù)據(jù)報(bào)
  • 版本(VER):
    這個(gè)4位字段定義了IP協(xié)議的版本;
    如果機(jī)器使用其他版本的IP,那么這個(gè)數(shù)據(jù)報(bào)就會(huì)被丟棄,而不是錯(cuò)誤地進(jìn)行解釋。

  • 首部長度(HLEN):
    這個(gè)4位字段定義了數(shù)據(jù)報(bào)首部的總長度,以4字節(jié)(Byte)為單位計(jì)算;
    可變首部長度,5(0101)x4=20Byte — 15(1111)x4=60Byte。

  • 服務(wù)類型(TOS):
    type of service,它指明了應(yīng)當(dāng)如何處理數(shù)據(jù)報(bào);
    它定義了一組區(qū)分服務(wù)(differentiated services)。

服務(wù)類型
  • 總長度:
    這個(gè)16位字段定義了以字節(jié)為單位的數(shù)據(jù)報(bào)總長度(首部+數(shù)據(jù)),所以數(shù)據(jù)報(bào)長度限制在勒65535($2^16-1$)Byte;
    雖然65535字節(jié)的長度看起來好像很長,但是,隨著底層技術(shù)使得更大的吞吐量(高帶寬)成為可能,IP數(shù)據(jù)報(bào)的長度在不久的將來可能會(huì)大大增加;
    某些物理網(wǎng)絡(luò)不能把65535畢節(jié)的數(shù)據(jù)報(bào)封裝成它們的幀,要以需要對(duì)數(shù)據(jù)報(bào)進(jìn)行分片;
    但有些情況下,因?yàn)閿?shù)據(jù)報(bào)長度很小,需要對(duì)封裝的幀附加一些填充才行。
以太網(wǎng)幀中的填充
  • 標(biāo)識(shí):
    此16位字段用于分片。

  • 標(biāo)志:
    此3位字段用于分片。

  • 分片偏移:
    此13位字段用于分片。

  • 生存時(shí)間(TTL):
    此8位字段表示,數(shù)據(jù)報(bào)在互聯(lián)網(wǎng)中是有生存時(shí)間限制的;
    此字段之所以必要,是因?yàn)橐蛱鼐W(wǎng)中路由表很可能會(huì)損壞。一個(gè)數(shù)據(jù)報(bào)可能在兩個(gè)或多個(gè)路由器之間逗留了很長時(shí)間,也沒能夠交付到目的主機(jī);
    這個(gè)字段的另一個(gè)用途就是源主機(jī)想故意限制這個(gè)分組的行程。

  • 協(xié)議(Protocol):
    此8位字段定義了使用此IP服務(wù)的高層協(xié)議;
    有許多高層協(xié)議(如TCP,UDP,ICMP,IGMP等)的數(shù)據(jù)都能被封裝到IP數(shù)據(jù)報(bào)中;
    這個(gè)字段指明了IP數(shù)據(jù)報(bào)必須交付給哪個(gè)最終目的協(xié)議。

復(fù)用
協(xié)議
1 ICMP
2 IGMP
6 TCP
17 UDP
89 OSPF
  • 首部檢驗(yàn)和:

  • 源地址:

  • 目的地址:




分片

數(shù)據(jù)報(bào)可以穿越不同的網(wǎng)絡(luò)。每個(gè)數(shù)據(jù)報(bào)都會(huì)從收到的數(shù)據(jù)幀中拆解出IP數(shù)據(jù)報(bào),并對(duì)它進(jìn)行處理,然后再封裝成另一個(gè)幀;
接收到的幀格式與長度取決于這個(gè)幀剛剛經(jīng)過的物理網(wǎng)絡(luò)所使用的協(xié)議,而發(fā)送出去的幀格式與長度則取決于這個(gè)幀將要經(jīng)過的物理網(wǎng)絡(luò)所使用的協(xié)議。

例如,某臺(tái)路由器將一個(gè)以太網(wǎng)連接到一個(gè)廣域網(wǎng)。
那么它收到的幀是以太網(wǎng)格式的,而發(fā)送的幀是廣域網(wǎng)格式的。


最大傳輸單元(MTU)

每個(gè)數(shù)據(jù)鏈路層協(xié)議都有自己的幀格式,在這個(gè)格式中有一個(gè)字段是"數(shù)據(jù)字段最大長度"。

MTU

對(duì)于不同的物理網(wǎng)絡(luò)協(xié)議,MTU的值是不同的。

例如,以太網(wǎng)局域網(wǎng)的MTU是1500字節(jié),F(xiàn)DDI局域網(wǎng)的MTU是4352字節(jié),而PPP是296字節(jié)。

為了使IP協(xié)議與物理網(wǎng)絡(luò)無關(guān),協(xié)議設(shè)計(jì)者們決定讓IP數(shù)據(jù)報(bào)的最大長度等于65535字節(jié)。如果我們使用的協(xié)議的MTU正好等于這個(gè)數(shù)值,那么傳輸效率會(huì)很高;
但是對(duì)于其他物理網(wǎng)絡(luò),就要分割數(shù)據(jù)報(bào),使它們能夠通過這些網(wǎng)絡(luò),這稱為分片(fragmentation)。

當(dāng)數(shù)據(jù)報(bào)被分片時(shí),每一個(gè)數(shù)據(jù)報(bào)都有自己的首部,其中大部分的字段是重復(fù)的,但有些是變化的;
如果已經(jīng)分片的數(shù)據(jù)報(bào)遇到具有更小MTU的網(wǎng)絡(luò),那么這些已經(jīng)分片的數(shù)據(jù)報(bào)還可以再進(jìn)行分片;
換言之,數(shù)據(jù)報(bào)在到達(dá)最后終點(diǎn)之前可以經(jīng)過多次分片。

數(shù)據(jù)報(bào)可以被源主機(jī)或途中任何路由器分片,但數(shù)據(jù)報(bào)的重裝只能在目的主機(jī)上進(jìn)行,因?yàn)槊恳粋€(gè)分片都變成了獨(dú)立的數(shù)據(jù)報(bào);
一方面,分片的數(shù)據(jù)報(bào)可以各走不同的路由,我們永遠(yuǎn)無法控制或保證分片的數(shù)據(jù)報(bào)應(yīng)當(dāng)走哪一條路徑;
另一方面,屬于同一個(gè)數(shù)據(jù)報(bào)的所有數(shù)據(jù)報(bào)片最終是會(huì)到達(dá)它們的目的主機(jī);
所以,從邏輯上講,應(yīng)當(dāng)在最后的終點(diǎn)進(jìn)行重裝。
另外還有一個(gè)更有力的反對(duì)在傳輸期間進(jìn)行重裝的理由,那就是這樣做會(huì)嚴(yán)重影響效率。

當(dāng)數(shù)據(jù)報(bào)被分片時(shí),首部中一些必要的部分必須被復(fù)制到所有的分片中,其余的各字段必須被復(fù)制;
對(duì)數(shù)據(jù)報(bào)進(jìn)行分片的主機(jī)或路由器必須改變?nèi)齻€(gè)字段的值:標(biāo)志,分片偏移,總長度;
不管是否進(jìn)行分片,校驗(yàn)和的值總是要重新計(jì)算的;
只有數(shù)據(jù)報(bào)中的數(shù)據(jù)是分片的。


與分片有關(guān)的字段

與一個(gè)數(shù)據(jù)報(bào)的分片與重裝有關(guān)的字段是:標(biāo)識(shí)、標(biāo)志和分片偏移。

  • 標(biāo)識(shí):
    此16位字段標(biāo)志了從源主機(jī)發(fā)出的一個(gè)數(shù)據(jù)報(bào);
    在數(shù)據(jù)報(bào)分片時(shí),標(biāo)識(shí)字段的值要復(fù)制到所有的分區(qū)中。換言之,所有的分片中具有相同的標(biāo)識(shí)號(hào);
    這些標(biāo)識(shí)號(hào)在終點(diǎn)重裝數(shù)據(jù)報(bào)時(shí)很有用,終點(diǎn)知道所有具有相同標(biāo)識(shí)號(hào)的分片必須被組裝成一個(gè)數(shù)據(jù)報(bào)。

  • 標(biāo)志:
    此3位字段,第一位保留,第二位是“不分片”,第三位是“還有分片”。

標(biāo)志字段
  • 分片偏移:
    此13位字段表示分片在整個(gè)數(shù)據(jù)報(bào)中的相對(duì)位置;
    這是數(shù)據(jù)在原始數(shù)據(jù)報(bào)中的偏移量,以8字節(jié)為度量單位;
    要記住偏移量是以8字節(jié)為單位,除了最后一個(gè)分片外,所有分片的標(biāo)志字段中的“還有分片”為均應(yīng)為1.
分片栗子
詳細(xì)的分片

即使各個(gè)分片采取不同的路徑并失序到達(dá),最終的目的主機(jī)也能夠用收到的分片(假設(shè)沒有丟失)組裝成原始的數(shù)據(jù)報(bào)。




選項(xiàng)

選項(xiàng)對(duì)于數(shù)據(jù)報(bào)來說并不是必需的,但它可用于網(wǎng)絡(luò)的測(cè)試和排錯(cuò);
雖然選項(xiàng)并非IP首部的必要項(xiàng)目,但對(duì)選項(xiàng)的處理確是IP軟件的必要部分。


格式

選項(xiàng)的組成是:類型字段(1字節(jié))、長度字段(1字節(jié))和值字段(可變長度)。這三個(gè)字段常被稱為 TLV(type-length-value)。

選項(xiàng)格式


類型

類型字段(type field)長度為8位,包括了三個(gè)子字段:復(fù)制、類別和編號(hào)。

  • 復(fù)制, 這個(gè)1位子字段控制選項(xiàng)在分片中的出現(xiàn);
  • 類別, 這個(gè)2位子字段定義了該選項(xiàng)的一般用途;
  • 編號(hào), 這個(gè)5位子字段定義了選項(xiàng)的類型。

長度

長度字段(length field)定義選項(xiàng)的總長度,包括類型字段和長度字段本身。這個(gè)字段并不是在所有類型的選項(xiàng)中都會(huì)出現(xiàn)。

值字段(value field)包含的是某些特定選項(xiàng)所需的數(shù)據(jù)。這個(gè)字段并不是在所有類型的選項(xiàng)中都會(huì)出現(xiàn)。


選項(xiàng)類型

目前僅使用了六種選項(xiàng):

  • 兩種是單字節(jié)選項(xiàng),它們不需要長度字段和值字段,因?yàn)轭愋妥侄蝿偤?個(gè)字節(jié);
  • 四種是多字節(jié)選項(xiàng),它們需要長度字段和值字段。
選項(xiàng)種類
  • 無操作選項(xiàng)
    無操作選項(xiàng)(no-operation option),用作選項(xiàng)和選項(xiàng)之間的填充符。
    無操作選型
  • 選項(xiàng)結(jié)束項(xiàng)
    選項(xiàng)結(jié)束項(xiàng)(end-of-option option),用于選項(xiàng)字段結(jié)束時(shí)的填充。它只能用于最后一個(gè)選項(xiàng),且只能使用一次。
    選項(xiàng)結(jié)束項(xiàng)
  • 記錄路由選項(xiàng)
    記錄路由選項(xiàng)(record-route option),用來記錄處理數(shù)據(jù)報(bào)的因特網(wǎng)路由器。
    記錄路由選項(xiàng)
  • 嚴(yán)格源路由選項(xiàng)
    嚴(yán)格源路由選項(xiàng)(strict-source-route option),被源點(diǎn)用來預(yù)先指定數(shù)據(jù)報(bào)在因特網(wǎng)中傳送時(shí)的路由。
    嚴(yán)格源路由選項(xiàng)
  • 不嚴(yán)格源路由選項(xiàng)
    不嚴(yán)格的源路由選項(xiàng)(loose-source-route option),與嚴(yán)格路由相似,但條件寬松一些。
    不嚴(yán)格源路由選項(xiàng)
  • 時(shí)間戳
    時(shí)間戳選項(xiàng)(timestamp option),用來記錄路由器處理數(shù)據(jù)報(bào)的時(shí)間。時(shí)間是從午夜開始以毫秒計(jì)的全球通用時(shí)間。
    時(shí)間戳選項(xiàng)




校驗(yàn)和

絕大多數(shù)TCP/IP協(xié)議采用的差錯(cuò)檢測(cè)方法稱為 檢驗(yàn)和(checksum)。
校驗(yàn)和能夠防止分組在傳輸期間出現(xiàn)的損壞,校驗(yàn)和是附加在分組上的冗余信息。

發(fā)送端計(jì)算出校驗(yàn)和,并把得到的校驗(yàn)和與分組一起發(fā)送出去;接收端對(duì)整個(gè)分組重復(fù)同樣的計(jì)算。
若得到正確結(jié)果則接收此分組,否則丟棄。


在發(fā)送端計(jì)算校驗(yàn)和

發(fā)送端按以下步驟產(chǎn)生檢驗(yàn)和:

  1. 把分組劃分成k段,每段的長度都是 n 位;
  2. 用反碼算術(shù)運(yùn)算把這些所有段相加;
  3. 把最終結(jié)果取反碼就得到檢驗(yàn)和。


在接收端計(jì)算檢驗(yàn)和

接收端檢驗(yàn)步驟:

  1. 把收到的分組劃分為k段;
  2. 把所有段相加,取反碼;
  3. 若為0,則接收分組。否則丟棄分組。
校驗(yàn)和概念

假設(shè)發(fā)送端將所有段相加后得到的數(shù)為T,當(dāng)我們用反碼算術(shù)運(yùn)算把這個(gè)數(shù)取反碼時(shí),就得到了這個(gè)數(shù)的負(fù)值。這表示,若所有段之和為T,則校驗(yàn)和就是-T。
當(dāng)接收端收到這個(gè)分組時(shí),把所有段相加。這實(shí)際上就是把T與-T相加,二進(jìn)制反碼為-0,再取反碼為0。

計(jì)算校驗(yàn)和


IP分組中的校驗(yàn)和

在IP分組中,首先把“校驗(yàn)和”字段值置為0。然后把整個(gè)首部劃分為16位(ip首部校驗(yàn)和16位)的段,再將各段相加。把結(jié)果(和)取反碼,把插入到ip-header的校驗(yàn)和字段中。

IP分組中的校驗(yàn)和為首部校驗(yàn)和,不包括數(shù)據(jù)。

發(fā)送端計(jì)算校驗(yàn)和
接收端計(jì)算校驗(yàn)和




IP在ATM上運(yùn)行

在前面,我們都假設(shè)支持IP數(shù)據(jù)報(bào)在其上傳送的底層網(wǎng)絡(luò)是局域網(wǎng)或點(diǎn)對(duì)點(diǎn)廣域網(wǎng)。
我們希望了解IP數(shù)據(jù)報(bào)如何通過像ATM這樣的交換廣域網(wǎng)來傳送。

在ATM交換廣域網(wǎng)中,IP分組被封裝在信元中(不止一個(gè)),對(duì)于一個(gè)設(shè)備的物理地址,ATM網(wǎng)絡(luò)有它自己的定義。在IP地址和物理地址之間的綁定是通過一個(gè)稱為ATMARP的協(xié)議獲得的。


ATM廣域網(wǎng)

作為信元交換網(wǎng)絡(luò)的ATM可以稱為IP數(shù)據(jù)報(bào)的高速公路。

ATM廣域網(wǎng)

AAL層
能被因特網(wǎng)使用的AAL只有AAL5,有時(shí)它稱為 簡(jiǎn)單有效的適配層(simple and efficient adaptation layer,SEAL)。
AAL5假設(shè)從IP數(shù)據(jù)報(bào)中創(chuàng)建出來的所有信元都屬于同一個(gè)報(bào)文。因此,AAL5不提供地址、序列或其它的首部信息。
實(shí)際上,只有一些填充和一個(gè)四字段的尾部被附加在IP分組上。

IP協(xié)議使用的AAL層是AAL5,使用AAL5效率更高。


信元的路由選擇

ATM網(wǎng)絡(luò)在兩個(gè)路由器之間建立一條路由。我們稱這兩個(gè)路由器為 進(jìn)入點(diǎn)(entering-point)路由器離去點(diǎn)(exiting-point)路由器。

進(jìn)入點(diǎn)和離去點(diǎn)路由器

地址

把信元從一個(gè)特定的進(jìn)入路由器轉(zhuǎn)發(fā)到一個(gè)特定的離去路由器,需要3種類型的地址:IP地址、物理地址和虛電路標(biāo)識(shí)符。

  • IP地址
    IP地址在IP層指明了特定的路由器,但是它在ATM網(wǎng)絡(luò)中沒有任何作用。

  • 物理地址
    每個(gè)連接到ATM網(wǎng)絡(luò)上的路由器(或其他設(shè)備)都有一個(gè)物理地址。這個(gè)物理地址與ATM網(wǎng)絡(luò)相關(guān),但和因特網(wǎng)沒什么關(guān)系。
    ATM論壇為ATM網(wǎng)絡(luò)定義了20字節(jié)的地址。

  • 虛電路標(biāo)識(shí)符
    ATM網(wǎng)絡(luò)內(nèi)部的交換機(jī)根據(jù)虛電路標(biāo)識(shí)符(VPI和VCI)來為信元選路,這個(gè)虛電路標(biāo)識(shí)符在數(shù)據(jù)傳送時(shí)使用。

地址綁定

ATM網(wǎng)絡(luò)需要用虛電路標(biāo)識(shí)符為信元選路。在IP數(shù)據(jù)報(bào)中只包含了源IP地址和目的IP地址。必須根據(jù)目的IP地址來判斷其虛電路標(biāo)識(shí)符。

步驟如下:

  1. 進(jìn)入點(diǎn)路由器收到一個(gè)IP數(shù)據(jù)報(bào)。它用IP數(shù)據(jù)報(bào)的目的地址和自己的路由表來找出下一個(gè)路由器(即離去點(diǎn)路由器)的IP地址;
  2. 進(jìn)入點(diǎn)路由器使用了一個(gè)稱為ATMARP的協(xié)議服務(wù)找出離去點(diǎn)路由器的物理地址。ATMARP和ARP類似。
  3. 虛電路標(biāo)識(shí)符被綁定到相應(yīng)的物理地址。
IP在ATM上的地址綁定




安全性

與整個(gè)因特網(wǎng)一樣,IPv4協(xié)議在誕生之初,因特網(wǎng)上的用戶彼此之間都是互相信任的。IPv4沒有提供任何安全措施。但是,現(xiàn)如今的因特網(wǎng)已不再安全。


安全問題

有三個(gè)安全問題是特別應(yīng)用于IP協(xié)議的:

  • 分組竊?。╬acket sniffing)
  • 分組篡改(packet modification)
  • IP偽裝(IP spoofing)


IPSec

目前我們可以使用一種稱為 IPSec(IP安全性) 的協(xié)議來保護(hù)IP分組不受前面所提到的各種攻擊。
這個(gè)協(xié)議是與IP協(xié)議結(jié)合在一起使用的。
它在兩個(gè)實(shí)體之間創(chuàng)建了一種面向連接的服務(wù),使這兩個(gè)實(shí)體在交換IP分組時(shí)不用擔(dān)心會(huì)受到前面三種攻擊。

IPSec提供四中服務(wù):

  • 定義算法和密鑰
  • 分組加密
  • 數(shù)據(jù)完整行
  • 起源鑒別




IP軟件包

將給出一個(gè)假象的IP軟件包的栗子,目的是為了展示本章所討論的各種不同概念之間的相互關(guān)系。

IP的構(gòu)件

可以認(rèn)為IP軟件包包含了八個(gè)構(gòu)件:首部添加模塊、處理模塊、轉(zhuǎn)發(fā)模塊、分片模塊、重裝模塊、路由表、MTU表和重裝表。

  • 首部添加模塊(header-adding module)
    首部添加模塊,接收來自高層協(xié)議的數(shù)據(jù)及其目的IP地址。它通過添加IP首部,把數(shù)據(jù)封裝在一個(gè)IP數(shù)據(jù)報(bào)中。
IP_Adding_Module(數(shù)據(jù),目的地址)
{
    把數(shù)據(jù)封裝為IP數(shù)據(jù)報(bào)
    計(jì)算校驗(yàn)和,并將它插入到校驗(yàn)和字段
    把數(shù)據(jù)發(fā)送到相應(yīng)的輸入隊(duì)列
    返回
}
  • 處理模塊(processing module)
    處理模塊是IP軟件包的核心。
IP_Processing_Module(IP數(shù)據(jù)報(bào))
{
    從一個(gè)輸入隊(duì)列中取出一個(gè)數(shù)據(jù)報(bào)
    if(目的地址與本地地址中的一個(gè)相匹配) 
     {
        把數(shù)據(jù)報(bào)發(fā)送到重裝模塊
        返回
    }
    if(本機(jī)是路由器)
    {
        TTL-1
    }
    if(TTL<=0)
    {
        丟棄這個(gè)數(shù)據(jù)報(bào)
        發(fā)送ICMP差錯(cuò)報(bào)文
        返回
    }
    把數(shù)據(jù)報(bào)發(fā)送到轉(zhuǎn)發(fā)模塊
    返回
}
  • 隊(duì)列(queue)
    包括 輸入隊(duì)列(input queues)輸出隊(duì)列 。
    輸入隊(duì)列,存放的是來自數(shù)據(jù)鏈路層或高層協(xié)議的數(shù)據(jù)報(bào);
    輸出隊(duì)列,存放的是將要發(fā)送到數(shù)據(jù)鏈路層或高層協(xié)議的數(shù)據(jù);
    處理模塊從輸入隊(duì)列中取出數(shù)據(jù);
    分片和重裝模塊則向輸出隊(duì)列中添加數(shù)據(jù)報(bào)。
  • 路由表(router table)
  • 轉(zhuǎn)發(fā)模塊(forwarding module)
    轉(zhuǎn)發(fā)模塊接收來自處理模塊的IP分組,如果分組需要轉(zhuǎn)發(fā),則把分組傳遞給這個(gè)模塊;
    轉(zhuǎn)發(fā)模塊找出下一站的IP地址以及發(fā)送該分組的接口號(hào)。然后,轉(zhuǎn)發(fā)模塊把分組連同這些信息一起傳遞給分片模塊。
  • MTU表
    分片模塊使用MTU表找出特定接口的 最大傳送單元(MTU),MTU表包含 接口和MTU。
  • 分片模塊(fragmentation module)
    分片模塊,接收來自轉(zhuǎn)發(fā)模塊的IP數(shù)據(jù)報(bào)。
    轉(zhuǎn)發(fā)模塊給出IP數(shù)據(jù)報(bào)、下一站IP地址和接口號(hào)。
IP_Fragmentation_Module(IP數(shù)據(jù)報(bào))
{
    提取數(shù)據(jù)報(bào)的長度
    if(長度 > 相應(yīng)網(wǎng)絡(luò)的MTU)
    {
        if(D位 被置為1)#D位 為不分片
        {
            丟棄這個(gè)數(shù)據(jù)報(bào)
            發(fā)送ICMP報(bào)文
            返回
        }
        Else
        {
            計(jì)算最大長度
            把數(shù)據(jù)報(bào)劃分為分片
            給每個(gè)分片添加首部
            給每個(gè)分片添加需要的選項(xiàng)
            發(fā)送分片
            返回
        }
    }
    Else
    {
        發(fā)送這個(gè)數(shù)據(jù)報(bào)
    }
    返回
}
  • 重裝表(reassembly table)
    重裝表是重裝模塊在使用;
    重裝表有五個(gè)字段:狀態(tài)、源IP、數(shù)據(jù)報(bào)標(biāo)識(shí)、超時(shí)以及分片。
    重裝表

    狀態(tài)字段的值可以是 FREE 或 IN-USE;
    數(shù)據(jù)報(bào)標(biāo)識(shí)是一個(gè)數(shù)字,它唯一地定義了一個(gè)數(shù)據(jù)報(bào)以及該數(shù)據(jù)報(bào)的所有分片;
    超時(shí)是一個(gè)預(yù)定義的時(shí)間,在這段時(shí)間內(nèi)所有分片必須到達(dá);
    分片字段是執(zhí)行分片鏈表的指針。
  • 重裝模塊(reassembly module)
    重裝模塊,接收來自處理模塊且已到達(dá)最終目的地的數(shù)據(jù)報(bào)分片。
    重裝模塊把為分片的數(shù)據(jù)報(bào)也看成數(shù)據(jù)報(bào)分片,只不過這個(gè)數(shù)據(jù)報(bào)僅有一個(gè)分片。
IP_Reassembly_Module(IP數(shù)據(jù)報(bào))
{
    if(分片偏移值為0且M為為0)
    {
        把數(shù)據(jù)報(bào)發(fā)送到適當(dāng)?shù)年?duì)列
        返回  
    }
    查找重裝表中的相應(yīng)表項(xiàng)
    if(相應(yīng)表項(xiàng)未找到)
    {
        創(chuàng)建一個(gè)新的項(xiàng)目
    }
    在鏈表的適當(dāng)?shù)胤讲迦脒@個(gè)分片
    if(所有的分片都已到達(dá))
    {
        重裝這些分片
        把數(shù)據(jù)交付給相應(yīng)的高層協(xié)議
        返回
    }
    Else
    {
        if(超時(shí))
        {
            丟棄所有的分片
            發(fā)送ICMP差錯(cuò)報(bào)文      
        }
    }
    返回
}




小結(jié)

討論IPv4的RFC包括:RFC791、RFC815、RFC894、RFC1122、RFC2474和RFC2475.

重要術(shù)語

盡最大努力交付;        校驗(yàn)和;
碼點(diǎn);        輸出隊(duì)列;
數(shù)據(jù)報(bào);        指針字段;
區(qū)分服務(wù);        優(yōu)先級(jí);
選項(xiàng)結(jié)束選項(xiàng);        處理模塊;
進(jìn)入點(diǎn)路由器;        重裝模塊;
轉(zhuǎn)發(fā)模塊;        重裝表;
分片;        分片偏移;
分片模塊;        記錄路由選項(xiàng);
服務(wù)類型;        嚴(yán)格的源路由選項(xiàng);
首部添加模塊;        生存時(shí)間;
輸入隊(duì)列;       時(shí)間戳選項(xiàng);
網(wǎng)際協(xié)議(IP) ;        長度字段;
類型字段;        Traceroute;
不嚴(yán)格的源路由選項(xiàng);        服務(wù)類型(TOS);
最大傳輸單元(MTU);    值類型;
無操作選型;


  • IP是不可靠的無連接協(xié)議,負(fù)責(zé)源點(diǎn)到終點(diǎn)的交付。在IP層的分組稱為數(shù)據(jù)報(bào);
  • MTU是數(shù)據(jù)鏈路協(xié)議能夠封裝的最大字節(jié)數(shù)。MTU隨著協(xié)議的不同而不同。分片就是把一個(gè)數(shù)據(jù)報(bào)劃分為若干更小的單元,以便能夠適應(yīng)數(shù)據(jù)鏈路層協(xié)議的MTU;
  • IP數(shù)據(jù)報(bào)首部包括20字節(jié)的固定部分和最大長度為40字節(jié)的可變選項(xiàng)部分。IP首部中的選項(xiàng)部分用于網(wǎng)絡(luò)測(cè)試和排錯(cuò)。六個(gè)IP選項(xiàng)各有其特定功能;
  • IP使用的差錯(cuò)檢測(cè)方法是校驗(yàn)和。但是這個(gè)校驗(yàn)和只覆蓋分組的首部,不管數(shù)據(jù)部分。所以是首部校驗(yàn)和;
  • IP在ATM上運(yùn)行使用了ATM網(wǎng)絡(luò)的AAL5層。ATM網(wǎng)絡(luò)在進(jìn)入點(diǎn)路由器和離去點(diǎn)路由器之間建立了一條路由,通過ATMARP,IP分組的下一跳地址能夠被映射為離去點(diǎn)路由器的物理地址;
  • IP軟件包由以下構(gòu)件組成:首部添加模塊、處理模塊、轉(zhuǎn)發(fā)模塊、分片模塊、重裝模塊、路由表、MTU表以及重裝表。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 網(wǎng)絡(luò)層簡(jiǎn)介 1. 概念 為解決經(jīng)由多條鏈路的交付問題,從而設(shè)計(jì)了網(wǎng)絡(luò)層。其主要負(fù)責(zé)主機(jī)到主機(jī)的交付,并且在分組經(jīng)過...
    顧慎為閱讀 3,394評(píng)論 0 0
  • 11.1 引言 UDP是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào),并組裝成一...
    張芳濤閱讀 2,971評(píng)論 1 6
  • 第二章 物理層 頻分復(fù)用:頻分復(fù)用的用戶在同樣的時(shí)間占用不同的帶寬資源(頻率帶寬) 時(shí)分復(fù)用:時(shí)分復(fù)用的用戶在不同...
    PramaWells閱讀 4,028評(píng)論 1 3
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,377評(píng)論 6 174
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,196評(píng)論 0 8

友情鏈接更多精彩內(nèi)容