網路協議系列之三 IP

2021-09-23 23:11:06 字數 3973 閱讀 7572

前言

這篇部落格主要對ip協議中一些基礎知識點加以總結,並將書中一些晦澀難懂的部分去除了。ip位址協議是網路層中最重要的協議,ip位址協議可以對網際網路上的所有裝置進行唯一標識,也正因為有了ip協議,我們的計算機才能實現與全球任意一台裝置進行通訊。 同時這也是網路層存在的意義,我將對部分的內容分為兩個部分加以總結:一、首先對ip協議部分的知識加以總結;二、對網路層其他的協議加以總結,包括icmp、igmp、arp等協議。

這個概念很好理解,如果乙個協議用a位(a個bit)表示,那麼其位址空間就是2^a。我們要講的ipv4位址協議(簡稱ip協議)使用32位表示乙個位址,所以其位址空間是2^32(超過40億)

基256:也叫點分十進位制記法,也是最常用的記法,在每8個位元組用隔開,共有4個十進位制數

基16:乙個16進製制等於4位二進位制數。而乙個ip位址有32個二進位制數,所以使用基16進製表示的時候有8個二進位制數

基2:採用01串的方式表示

分類編址是最早出現的編址體系,在分類編址中一共分為五類:a、b、c、d、e。每一類占用位址空間的一部分。其中a類位址有2^31個位址,佔50%,b類有2^30個位址,佔25%,c類有2^29個位址,佔12.5%,d類和e類各有2^28個位址,各佔6.25%。那麼如何辨別這5類位址呢?

如果是使用點分十進位制記法,只要看左邊第乙個數,如果小於128,那麼就是a類,如果小於192,那麼就是b類,如果小於224,那麼就是c類,如果小於240,那麼就是d類,如果不在上面的範圍,那麼就是e類。

例如對於ip位址73.22.17.25,其位址數n=2^32-8=2^24,首位址為73.0.0.0,末位址為73.255.255.255

通過ip位址,我們與另外一台計算機的通訊需要到達其所在的網路,才找到該網路下的特定的主機。隨著計算機裝置的增多,32位的ip位址幾乎被分配完畢,後來出現把乙個網路劃分為乙個個子網路的思想,這樣每個子網都有自己的網路位址(被劃分的網路是擁有原來a類或者b類位址的網路)。那麼問題來了,劃分的子網的網路位址怎麼表示呢?這裡使用了子網掩碼來解決這個問題,子網掩碼是左邊n位全為1,右邊32-n位為0的ip位址,那麼把原ip位址與子網掩碼進行與運算就可以得到子網位址

無分類編址使用可變長度的位址塊,這些位址塊不屬於任何類,不過規定每個位址塊中的位址數必須是2的乘方。要注意的是在無分類編址中,使用的仍然是兩級編址,使用左邊n位(也叫字首長度)標識網路,右邊32-n位(也叫字尾長度)標識主機號。字首長度可以在1~32之間。同時,在無分類編址中會使用斜線記法來表示ip位址,如230.8.24.56/12。

通過斜線記法表示的位址,我們可以得到該位址塊表示的位址數、首位址和末位址。這點和分類編址是一樣的。可以發現,當n分別等於8、16和24的時候剛好就是分類編址的情況,所以分類編址是無分類編址的乙個特例。在無分類編址中,計算上述三個資訊有一點點出入,看計算方法:

1)位址數n=2^32-n

2)首位址= (任意位址) and (子網掩碼)

3)末位址= (任意位址) or (not (子網掩碼))

在無分類編址中,最常見的應用就是子網劃分了。子網劃分就是把isp分配的乙個位址塊進一步劃分為若干子網,每個子網還可以繼續劃分為子網的子網,沒有任何限制。如果有乙個位址塊的位址數是n,字首長度為n,要劃分為s個子網,每個子網的字首長度是n2,每個子網的可用位址數是n2。那麼有如下計算公式:

n2 = n + log2(n/n2)
1) 可用的位址數n=2^32-26=64

2) 首位址=130.34.12.64/26,末位址=130.34.12.127/26

3) 每個子網的位址數n2=64/4=16

4) n2 = 26 + log2(64/16) = 28

1)全0位址

即0.0.0.0/32,該位址被保留用於主機傳送乙個分組而又不知道自己位址的情況下

2)全1位址

即255.255.255.255/32,被設計為當前網路的受限廣播位址,乙個主機如果想把報文發給網路上的所有主機,就可以把這個位址作為目的位址

在這部分的內容中,將對ip報文的格式做乙個詳細的了解,同時為學習tcp傳輸層做鋪墊。

有一點很重要,ip協議是不可靠的無連線資料報協議————一種盡最大努力交付的服務。就是說ip協議不保證資料的完整性和安全性,資料報有可能丟失、亂序、損壞或者延遲到達

網路層的分組稱為資料報,,也可以簡單理解為網路中傳輸的資料

下圖是乙個完整的ip資料報格式:

ip資料報由兩部分組成:首部和資料。首部長度可以是20~60位元組。下面對ip資料報中的各個字段加以說明:

版本(ver):這個4位版本定義了ip協議的版本,目前的版本是4(ipv4)

首部長度(hlen):定義了ip資料報首部的長度,以4位元組的字為單位計算,若為20位元組,則值為5

服務型別(tos):指明了如何處理資料報,了解即可

總長度:定義了包括首部在內的資料報總長度

標識:分片時有用

標誌:分片時有用

分片偏移:分片時有用

生存時間(ttl):指明資料報的生存時間

協議:定義了使用ip層服務的高層協議

源位址:傳送主機的ip位址

目的位址:接收主機的ip位址

所謂ip分片就是把資料量過大的資料拆分成較小的資料報進行傳輸,這裡涉及乙個概念:mtu(最大傳輸單元),這個欄位的意思就是拆分後的資料報的長度不能超過這個值,對於乙太網來說,這個欄位的值是1500位元組。

ip分片要修改ip資料報中的標誌、分片偏移和總長度的值,其他的不變。注意:分片的只是資料報中的資料,首部並不會被分片

下面我們來看看分片的時候,上述三個字段(總長度需要根據分片的資料長度確定,再加上首部長度)發生了什麼變化:

此欄位雖然沒有改變,每個分片要複製這個欄位的值。這個欄位與源主機的ip唯一確定乙個資料報。當目的主機收到所有分片後,可以根據這個標識重灌資料報,因為目的主機認為標識號相同的是屬於同乙個資料報的。

這是乙個3位的字段,第1位保留不用,第2位稱為不分片位,就是說當其值是1的時候,不會對資料報進行分片。第3位是還有分片位,就是說如果其值是1就說明這個分片後面還有分片,如果是0,則說明是最後乙個分片或者第乙個分片(因為當只有乙個分片的時候,第乙個也是最後乙個)

這個字段表示的是分片在正個資料報中的相對位置,以8位元組為單位。通過這個字段,目的主機可以根據分片偏移的值從第乙個分片開始組裝到最後乙個分片,直至形成乙個完整的ip資料報。那麼目的主機是如何重灌分片的呢?

1) 分片偏移為0的分片是第乙個分片

2) 把第乙個分片的長度除以8得到第二個分片的偏移值,於是目的主機從接收到的分片中尋找該分片偏移值的分片,組裝第二個分片

3) 把第乙個分片和第二個分片的長度除以8得到第三個分片的偏移值,於是目的主機從接收到的分片中找到該分片,這樣就把前三個分片組裝好了

4) 繼續以上過程,直到最後的乙個分片的還有分片的值為0

選項字段主要用於網路測試與排錯,前面提到ip資料報首部的長度是20位元組~60位元組。其中20位元組是固定部分,剩餘的位元組數是選項部分多出來的。

選項部分的格式可分為:乙個位元組的型別字段、乙個位元組的長度字段以及可變長度的值的字段。其中選項的型別可以分為六種:無操作、選項結束、記錄路由、嚴格的源路由、不嚴格的源路由、時間戳。前兩種是單位元組的,後四種是多位元組的

絕大多數tcp/ip協議採用差錯控制的方法稱為校驗和。校驗和能夠防止分組在傳輸期間出現損壞。下面說一下ip分組中的校驗和:

首先把校驗和字段置為0,然後把整個首部劃分為16位的段,再將各段相加,把結果取反碼插入到校驗和字段中。要注意的是,ip分組中校驗和只覆蓋首部,不包括資料。這個字段了解即可

TCP IP系列之網路層IP協議

當資料要在網際直接傳輸的時候,路由器根據ip資料報進行路由.當一台主機要傳送資料的時候,其目的主機一般為區域網內的主機或者網外的主機.如果是區域網內的主機,主機傳送的乙太網幀的頭部目的mac位址為目的主機的mac位址,不需要路由.如果是網外的主機,則將資料發到預設的閘道器,由閘道器路由器進行路由到目...

網路協議 IP

資料鏈路層的主要作用是在互連同一種資料鏈路的節點之間程序包 幀 傳遞,一旦跨越多種資料鏈路,就需要借助網路層。網路層可以跨越不同的資料鏈路,即使是在不同的資料鏈路上也能實現兩端節點之間的資料報傳輸。如何抵達目的地,網路層的路由技術,主要實現路徑的選擇與優化 不可靠 丟了就丟了 無連線 不維護狀態,不...

網路層協議 IP協議

重點掌握 1.版本 ip協議的版本,通訊雙方使用過的ip協議的版本必須一致,目前使用最廣泛的ip協議版本號為4 ipv4 2.首部長度 單位是 32位 4個位元組 比如首部長度為 24個 位元組,這裡就是 6 3.服務型別 一般不適用,取值為0 4.總長度 指首部加上資料 的總長度,單位為 位元組 ...