理解網(wǎng)絡(luò)模型
網(wǎng)絡(luò)的設(shè)計(jì)大佬們想出了分層的設(shè)計(jì),將各個(gè)功能分開(kāi),交付給不同的層,這樣的好處是便于更新和維護(hù)(IPv6的到來(lái)并沒(méi)有使整個(gè)網(wǎng)絡(luò)重新設(shè)計(jì)),也便于我們的學(xué)習(xí)和理解.下面是各個(gè)版本的網(wǎng)絡(luò)體系的結(jié)構(gòu)圖:

讓我們明確下各層的工作職責(zé)(以五層協(xié)議為例):
- 應(yīng)用層,該層協(xié)議主要負(fù)責(zé)各個(gè)應(yīng)用程序之間交互的規(guī)則.如HTTP,DNS,其交互的數(shù)據(jù)單元可以稱為”報(bào)文”.運(yùn)輸層,為應(yīng)用層提供通用的數(shù)據(jù)傳輸服務(wù).為上層跑腿的.TCP,UDP均是運(yùn)輸層協(xié)議.
- 網(wǎng)絡(luò)層,為網(wǎng)絡(luò)中不同的主機(jī)提供通信服務(wù).IP協(xié)議工作在該層.
- 數(shù)據(jù)鏈路層,負(fù)責(zé)相鄰兩點(diǎn)的數(shù)據(jù)傳送.
- 物理層, 傳輸比特流, 0 或 1. 每一層將數(shù)據(jù)封裝成自己能理解的數(shù)據(jù)格式,交付給下一層,下一層將收到的作為自己的數(shù)據(jù)再次添加本層的必要數(shù)據(jù),向下交付,直到鏈路層,傳遞到目的地后,每層再將該層的必要數(shù)據(jù)去掉,交付給上層.如下圖:
?

理解IP協(xié)議
在理解了網(wǎng)絡(luò)模型和各層直接的配合之后,下面進(jìn)入今天的正題,網(wǎng)際協(xié)議(IP).
該節(jié)主要理解IP協(xié)議給我們提供的功能有哪些,說(shuō)白了就是它能干嘛.
- 為網(wǎng)絡(luò)中的主機(jī)(PC或路由或網(wǎng)關(guān))提供身份證.
- 定義了網(wǎng)絡(luò)主機(jī)的基本交流方式, 從IP數(shù)據(jù)報(bào)的格式可以看出.
為路由尋址提供方便, 從路由表結(jié)構(gòu)可以看出.
?
任何一個(gè)協(xié)議都可以由語(yǔ)法,語(yǔ)義和同步三部分組成.
- 語(yǔ)法,交換信息的格式,對(duì)于IP協(xié)議,就是IP報(bào)文的格式.
- 語(yǔ)義,即需要發(fā)出何種控制信息,以及接收到信息后如何響應(yīng).
- 同步,對(duì)事件順序的詳細(xì)說(shuō)明.
- 也就是定義了使用IP協(xié)議進(jìn)行交流的法則.
IPv4
IPv4是IP協(xié)議的第4個(gè)版本,就是我們現(xiàn)在使用的.下面從多個(gè)方面了解下該版本.
IP地址
網(wǎng)絡(luò)上的主機(jī)都需要一個(gè)IP地址,這樣才能知道彼此的位置.IPv4地址由32bit構(gòu)成,常使用點(diǎn)分十進(jìn)制表示(192.168.1.1).
分類
IP地址的分類就是把所有IP劃分為若干類別, 每一類都由固定長(zhǎng)度的字段組成.分別為網(wǎng)絡(luò)號(hào)和主機(jī)號(hào).下面是各類地址組成示意圖:

- A類地址,8位網(wǎng)絡(luò)號(hào),第一位固定為0,可用的網(wǎng)絡(luò)號(hào)只有126個(gè)(2^7-2),網(wǎng)絡(luò)號(hào)從0到127. 減去2是因?yàn)?IP地址全為0表示”本網(wǎng)絡(luò)”,保留; 網(wǎng)絡(luò)號(hào)為127作為軟件回環(huán)測(cè)試使用, 若主機(jī)發(fā)出目的地為127.0.0.1的數(shù)據(jù)時(shí),該數(shù)據(jù)不會(huì)向任何網(wǎng)絡(luò)上的主機(jī)發(fā)送.也就是說(shuō)127開(kāi)頭的地址不能使用. 對(duì)于A類地址中的每一個(gè)網(wǎng)絡(luò)號(hào),對(duì)應(yīng)的主機(jī)號(hào)有(2^24-2)個(gè): 主機(jī)號(hào)全0表示,其網(wǎng)絡(luò)號(hào)對(duì)應(yīng)的網(wǎng)絡(luò)地址, 全1表示所有主機(jī)的意思.
- B類地址網(wǎng)絡(luò)號(hào)為16位,但前面2位以固定為1 0.無(wú)論怎么取值,無(wú)法出現(xiàn)全0或全1的情況.128.0.0.0的網(wǎng)絡(luò)是不使用的,實(shí)際使用的最小B類網(wǎng)絡(luò)地址為128.1.0.0.所以B類的網(wǎng)絡(luò)地址有(2^14-1)個(gè).
- C類的地址有24位的網(wǎng)絡(luò)號(hào),最前面的3位固定為1 1 0.192.0.0.0的網(wǎng)絡(luò)地址也是不使用的,最小的C類地址為192.0.1.0
?
總結(jié)如下:

分類的好處:
- 方便管理,IP地址管理機(jī)構(gòu)只需管理網(wǎng)絡(luò)號(hào),剩下的可以由下級(jí)管理.
- 路由尋址時(shí)根據(jù)網(wǎng)絡(luò)地址轉(zhuǎn)發(fā)分組,減小路由表.
數(shù)據(jù)報(bào)格式
先看下IP數(shù)據(jù)報(bào)的基本格式:

可以看到IP數(shù)據(jù)報(bào)包含了首部和數(shù)據(jù)部分. 其中首部包含固定的20字節(jié)和可變的部分. 下面是各部分的解釋:
- 版本,占4位,IP協(xié)議的版本號(hào),通信雙方需要相同.
- 首部長(zhǎng)度,占4位, 單位4字節(jié).最大能表示(2^4-1) * 4 = 60字節(jié).當(dāng)IP分組的首部長(zhǎng)度不是4的整數(shù)倍時(shí),需要使用填充字段填充.
- 區(qū)分服務(wù),占8位, 表示服務(wù)類型,未使用.
- 總長(zhǎng)度, 占16位,表示首部和數(shù)據(jù)部分的總長(zhǎng)度(單位字節(jié)).因此數(shù)據(jù)報(bào)的最大總長(zhǎng)度為(2^16-1 = 65535)字節(jié).
- 標(biāo)識(shí)(identification), 占16位.當(dāng)數(shù)據(jù)報(bào)長(zhǎng)度超過(guò)下層的MTU時(shí),需要分片, 被分片的數(shù)據(jù)報(bào)的標(biāo)識(shí)一樣,這樣可以進(jìn)行重組.
- 標(biāo)志(Flag), 占3位, 目前只有2位有意義
- 最低位,MF(More Fragment) = 1 表示后面還有分片. MF = 0 表示分片中的最后一個(gè).
- 中間一位,DF(Don’t Fragment),不要分片,只有當(dāng)DF=0才允許分片.
- 片偏移, 占13位.較長(zhǎng)的分組在分片后, 某片在原分組的相對(duì)位置.必須是8字節(jié)的整數(shù)倍。
- 生存時(shí)間, 占8位, Time To Live(TTL),開(kāi)始指生存的秒數(shù),后來(lái)變?yōu)榻?jīng)過(guò)路由的跳數(shù),每經(jīng)過(guò)一個(gè)路由,TTL減小1,當(dāng)為0時(shí),丟棄該數(shù)據(jù).顯然,最大跳數(shù)為255, 為1時(shí)就只能在局域網(wǎng)中傳播了。
協(xié)議, 占8位.支出該數(shù)據(jù)報(bào)的數(shù)據(jù)是使用何種協(xié)議, 以便目的主機(jī)IP層知道將數(shù)據(jù)交付給哪個(gè)協(xié)議處理. 常用的協(xié)議及對(duì)應(yīng)數(shù)值:

- 首部校驗(yàn)和, 占16位.數(shù)據(jù)報(bào)的首部校驗(yàn)和,不包括數(shù)據(jù)部分.
- 源地址, 目的地址, 各占32位
IPV6
IPv6的出現(xiàn)是解決IPv4資源枯竭的問(wèn)題.其仍然支持無(wú)連接的傳送, 但傳送的是PDU分組,而不是IPv4的數(shù)據(jù)報(bào).
IP地址
IPv6的地址是128bit,在可預(yù)見(jiàn)的未來(lái)是夠用的.但和IPv4版本并不兼容, 若使用IPv4版本的主機(jī)A和使用IPv6版本的主機(jī)B之間通信是需要特殊處理的,在后面會(huì)介紹方法.
IPv6的地址表示
IPv6的地址采用冒號(hào)十六進(jìn)制記法 , 8組4個(gè)16進(jìn)制數(shù)字,中間使用冒號(hào)隔開(kāi).例如:
6845:8C64:FFFF:FFFF:0:1180:9000:FFFF
- 若一組中全是0,可以省略三個(gè).
- 若存在連續(xù)多組0,可以使用冒號(hào)取代,但只能壓縮一次 FF05:0:0:0:0:0:0:B3 可以壓縮為 FF05::B3 1090:0:0:0:8:800:200C:417A 可以壓縮為 1090::8:800:200C:417A 全零可記為 ::
- 最后的2組可以使用IPv4的點(diǎn)分十進(jìn)制表示 0:0:0:0:0:0:128.10.2.1 可表示為 ::128.10.2.1
?
數(shù)據(jù)報(bào)格式
IPv6數(shù)據(jù)報(bào)由兩大部分組成, 基本首部和有效載荷.有效載荷運(yùn)行有0個(gè)或多個(gè)擴(kuò)展首部.

可以看到,IPv6的首部是固定的40字節(jié),和IPv4不同;在組成上也有很大區(qū)別,下面看下各部分的意思.
- 版本, 占4位, 協(xié)議的版本,通信雙方需要相同
- 通信量類, 占8位.區(qū)分不同的IPv6的數(shù)據(jù)報(bào)或優(yōu)先級(jí).
- 流標(biāo)號(hào), 占20位. IPv6一個(gè)新機(jī)制就是支持資源預(yù)分配, 運(yùn)行路由把每個(gè)數(shù)據(jù)報(bào)與特定的資源分配和聯(lián)系.IPv6提出流的概念.指互聯(lián)網(wǎng)上從特定源點(diǎn)到特定終點(diǎn)的一系列數(shù)據(jù)報(bào)(如實(shí)時(shí)的音頻或視頻傳輸), 在這個(gè)流經(jīng)過(guò)的路徑上路由都保證指明的服務(wù)質(zhì)量.所有屬于同一個(gè)流的數(shù)據(jù)報(bào)具有相同的流標(biāo)號(hào).賦值為0即為關(guān)閉.
- 有效載荷長(zhǎng)度, 占16位.指明除基本首部以外的字節(jié)數(shù).最大64KB.
- 下一首部, 占8位.相當(dāng)于IPv4的協(xié)議字段或可選字段.
- 當(dāng)IPv6沒(méi)有擴(kuò)展首部時(shí), 該字段和IPv4的協(xié)議字段一樣.
- 有擴(kuò)展首部時(shí),表示第一個(gè)擴(kuò)展首部的類型.
- 跳數(shù)限制, 和IPv4的TTL一樣
- 源地址,目的地址, 各占128位
從IPv4向IPv6過(guò)渡
網(wǎng)絡(luò)如此龐大,從IPv4向IPv6的變換不可能一蹴而就.若要在兩個(gè)版本的協(xié)議下通信,有下面的2個(gè)方法
雙協(xié)議棧
簡(jiǎn)單的說(shuō)就是一個(gè)主機(jī)能夠理解兩個(gè)版本的內(nèi)容,這樣主機(jī)也要有2個(gè)版本對(duì)應(yīng)的IP地址.具有雙協(xié)議棧的主機(jī), 可以通過(guò)DNS系統(tǒng)知道目的主機(jī)使用的協(xié)議版本.
下面是兩臺(tái)使用IPv6的主機(jī)通信示意圖,它們之間需要通過(guò)IPv4網(wǎng)絡(luò), 在必要的時(shí)候經(jīng)過(guò)雙協(xié)議棧的主機(jī)進(jìn)行協(xié)議的轉(zhuǎn)換,當(dāng)然轉(zhuǎn)換的時(shí)候有些信息可能丟失,這也是不可避免的.

使用隧道技術(shù)
隧道技術(shù)的原理是,在IPv6的數(shù)據(jù)需要進(jìn)入IPv4網(wǎng)絡(luò)時(shí),將IPv6的數(shù)據(jù)報(bào)(準(zhǔn)確的說(shuō)是PDU)當(dāng)成IPv4數(shù)據(jù)報(bào)的數(shù)據(jù)部分,使用IPv4版本傳輸,在離開(kāi)IPv4網(wǎng)絡(luò)時(shí)在此組裝成IPv6的數(shù)據(jù),發(fā)往目的地.下面是一個(gè)示意圖:

結(jié)束語(yǔ)
關(guān)于IP協(xié)議,還有很多可以談的地方, 這里就不再深入了.讀完希望你能有一個(gè)”明鏡一樣”的感覺(jué)。
注:本文原作者為gopher blog,文內(nèi)觀點(diǎn)僅供參考。????
埃文科技——IP定位技術(shù)領(lǐng)域?qū)<遥钊妗⒆罹珳?zhǔn)的網(wǎng)絡(luò)空間地圖服務(wù)提供商。
公司成立于2012年,專注于網(wǎng)絡(luò)空間、地理空間和社會(huì)空間的相互映射,繪制三位一體的網(wǎng)絡(luò)空間地圖,對(duì)網(wǎng)絡(luò)空間資源的靜態(tài)屬性和動(dòng)態(tài)變化情況進(jìn)行探測(cè)。擁有27項(xiàng)軟件著作權(quán)及13項(xiàng)發(fā)明專利。