本篇結構:
- 前言
- IP地址
一、前言
網際協議IP是TCP/IP協議中最重要的兩個協議之一,也是最重要的互聯網標準協議之一。與ip協議配套的協議有:
- 地址解析協議ARP(Address Resolution Protocol)
- 網際控制報文協議ICMP(Internet Control Message Protocol)
- 網際組管理協議IGMP(Internet Group Management Protocol)
逆地址解析協議RARP(Reverse Address Resolution Protocol)(已被淘汰)
上圖顯示了網際協議IP同其三個配套協議的關系,它們都屬于TCP/IP協議中的網絡層。ARP在最下面,因為IP要經常使用這個協議。ICMP和IGMP在最上面,因為它們要使用IP協議,其報文作為IP數據報的數據部分。
二、IP地址
2.1、什么是IP
整個互聯網是一個單一的、抽象的網絡。IP地址就是給互聯網的每一臺主機(路由器)的每一個接口分配的一個在全世界范圍內唯一的32位標識符。IP地址現在是由互聯網名字和數字分配機構ICANN進行分配。
2.2、IP地址的表示
IP地址是一個32位的二進制標識符(10000000000010110000001100011111),這樣的表示對我們來說可讀性很低,為了提高可讀性,往往把32位的IP地址分為4段,每段8位,中間插入空格(10000000 00001011 00000011 00011111),這只是顯示方便,計算機中并沒有真實轉變,為了更利于我們的記憶和識別,往往用等效的十進制數表示每段,并且每段之間加上一個點(128.11.3.31)。這是點分十進制記法。
2.3、分類的IP地址
分類的IP地址是指將固定的IP地址劃分為若干個固定的類,每一類都有兩個固定長度的字段組成。
IP地址::={<網絡號>,<主機號>} (::=意為“定義為”)
1.其中第一個字段是網絡號,標志著主機(路由器)所連接的網絡,網絡號是全網唯一的;
2.第二個字段是主機號,標志網絡號所指的網絡內的主機(路由器)。
分類的IP地址根據網絡號所占比特位個數不同,分為5類:A類、B類、C類、D類、E類,其中A、B、C類為單播地址,D類為多播地址,E類為保留地址。
2.4、劃分IP的原因
把IP地址分類,是這樣考慮的。各種網絡差異很大,有些網絡擁有很多主機,有些網絡擁有的主機相對較少,把IP地址劃分為A類、B類、C類能更好的滿足需求,當某個單位申請了一個IP地址時,實際是獲得了同樣網絡號的一個IP地址塊,其中的各臺主機號則由單位自行分配。
2.5、常用的3類IP地址
1.A類IP地址
- 網絡號
A類地址的網絡號字段占1個字節,但前面的1位(0)已經固定,只剩下7位可以進行分配,即可指派的網絡號是126個(即2^7-2)。
減去2是因為:
網絡號字段為全0的IP地址是個保留地址,意思是“本網絡”;
網絡號為127(即01111111)保留作為本地軟件環回測試(loopback test)本主機的進程之間的通信只用。
若主機發送一個目的地址為環回地址(例如 127.0.0.1)的IP數據報,則本主機中的協議軟件就處理數據報中的數據,而不會把數據報發送到任何網絡。目的地址為環回地址的IP數據報永遠不會出現在任何網絡上,因為網絡號為127的地址根本不是一個網絡地址。
- 主機號
A類地址的主機號占3個字節,因此每一個A類網絡中的最大主機數是2^24-2,即16777214。
減去2是因為:
全0的主機號字段表示該IP地址是“本主機”所連接到的單個網絡地址(例如,一主機的IP地址為5.6.7.8,則該主機所在的網絡地址就是5.0.0.0)。
全1的主機號字段表示該IP地址是“所有的”,即該網絡上的所有主機。
2.B類地址
- 網絡號
B類地址的網絡號字段占2個字節,但前面的2位(1 0)已經固定,只剩下14位可以進行分配。
B類網絡地址128.0.0.0是不指派的,而可以指派的B類最小網絡地址是128.1.0.0(128.0.0.0是保留地址)。因此B類地址可指派的網絡數是2^14-1,即16383。
- 主機號
B類地址的主機號占2個字節,每一個網絡上的最大主機數是2^16-2,即65534,這里需要減2是因為要扣除全0和全1的主機號。
整個B類地址空間共約2^30個地址,占有整個IP地址空間的25%。
3.C類IP地址
- 網絡號
C類地址的網絡號字段占3個字節,但前面的3位(1 1 0)已經固定,只剩下21位可以進行分配。
C類網絡地址192.0.0.0是不指派的,而可以指派的C類最小網絡地址是192.0.1.0。因此B類地址可指派的網絡數是2^21-1,即2097151。
- 主機號
C類地址的每一個網絡上的最大主機數是2^8-2,即254,這里需要減2是因為要扣除全0和全1的主機號。
2.6、IPv4私有地址空間
人們對IPv4單播地址空間的某些地址塊進行了預留,并將其指定為私有地址。私有地址空間專為不與公網(Internet)相連的網絡而預留。RFC 1918將下列地址塊定義為IPv4私有地址:
10.0.0.0~10.255.255.255;
172.16.0.0~172.31.255.255;
192.168.0.0~192.168.255.255。
RFC 1700載有已預留及已分配(Internet相關)參數的通用信息,包括已預留的IP地址信息[1]。使用網絡地址轉換(Network Address Translation,NAT)技術,啟用了IPv4私有地址空間的私有網絡仍然可以連接到公網(Internet)。
2.7、IP數據報的格式
IP數據報的格式能夠說明IP協議具有什么功能。下圖是IP數據報的完整格式。
- 版本
占4位,指IP協議的版本。通信雙方使用的IP協議版本必須一致。目前廣泛使用的IP協議版本號為4(即IPv4)。
- 首部長度
占4位,可表示的最大十進制數值是15,請注意,首部長度字段所表示數的單位是32字(1個32位字長是4字節),因此,首部長度字段的最小值是5(即0101),相當于IP首部長度為5×4=20字節,而當首部長度為1111時(即十進制15),即達到60個字節,當 IP 分組的首部長度不是4字節的整數倍時,必須利用最后的填充字段加以填充。因此數據部分永遠在 4字節的整數倍開始,這樣在實現 IP協議時較為方便。首部長度限制為 60字節的缺點是有時可能不夠用。這樣做的目的是希望用戶盡量減少開銷。最常用的首部長度就是 20 字節 (即首部長度為 0101),這時不使用任何選項。
- 區分服務
占8位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個字段改名為區分服務DS(Differentiated Services)。只有在使用區分服務時,這個字段才起作用。
- 總長度
總長度指首部和數據之和的長度,單位為字節。總長度字段為16位,因此數據報的最大長度為216-1=65535字節。在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據字段的最大長度,即最大傳送單元 MTU (Maximum Transfer Unit)。當一個數據報封裝成鏈路層的幀時,此數據報的總長度 (即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。若傳送的數據報長度超過MTU,就需把過長的數據報做分片處理。
- 標識
占 16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加 1,并將此值賦給標識字段。但這個“標識”并不是序號,因為 IP是無連接的服務,數據報不存在按序接收的問題。當數據報由于長度超過網絡的 MTU 而必須分片時,這個標識字段的值就被復制到所有的數據報的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報。
- 標志(flag)
占3位,但目前只有2位有意義。
標志字段中的最低位記為MF(More Fragment)。MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。
標志字段中間的一位記為DF(Don’t Fragment),意思是“不能分片”。只有當DF=0時才允許分片。
- 片偏移
占13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對用戶數據字段的起點,該片從何處開始。片偏移以8個字節為偏移單位。這就是說,每個分片的長度一定是8字節(64位)的整數倍。
- 生存時間
占 8位,生存時間字段常用的英文縮寫是TTL (Time To Live),其表明數據報在網絡中的壽命。由發出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在因特網中兜圍子,因而白白消耗網絡資源。最初的設計是以秒作為 TTL的單位。每經過一個路由器時,就把TTL減去數據報在路由器消耗掉的一段時間。若數據報在路由器消耗的時間小于 1 秒,就把TTL值減 1。當 TTL值為 0時,就丟棄這個數據報。
- 協議
占 8 位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。
- 首部檢驗和
占 16位。這個字段只檢驗數據報的首部,但不包括數據部分。這是因為數據報每經過一個路由器,都要重新計算一下首都檢驗和 (一些字段,如生存時間、標志、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。
- 源地址
占32位。
- 目的地址
占32位。
- P數據報首部的可變部分
IP首部的可變部分就是一個可選字段。選項字段用來支持排錯、測量以及安全等措施,內容很豐富。此字段的長度可變,從1個字節到40個字節不等,取決于所選擇的項目。某些選項項目只需要1個字節,它只包括1個字節的選項代碼。但還有些選項需要多個字節,這些選項一個個拼接起來,中間不需要有分隔符,最后用全0的填充字段補齊成為4字節的整數倍。
增加首部的可變部分是為了增加IP數據報的功能,但這同時也使得IP數據報的首部長度成為可變的。這就增加了每一個路由器處理數據報的開銷。實際上這些選項很少被使用。新的IP版本IPv6就將IP數據報的首部長度做成固定的。