《TCP IP 詳解卷1:協議》閱讀筆記 - 第二章
閱讀須知:筆記為閱讀《TCP IP 詳解卷1:協議》後摘抄的一些知識點,其間也有加入一些根據英文原版的自己翻譯和結合網上知識後的理解,所以有些段落之間並不能夠串聯上或者知識點與書上略有差別(基本差別不大,參考的資料屬RFC官方文檔)。
第二章:Internet地址結構
連接到Internet中的每臺設備至少都有一個IP地址,IP地址表示了流量的來源(好比別人要找你玩,需要知道你家的地址;網絡中別人需要和你通信,也需要知道IP地址),且Internet中的IP地址必須是唯一的。對於全球性的Internet地址,一個分層結構管理實體幫助用戶和服務商來提供分配地址;個人用戶通常由Internet服務提供商(ISP)分配地址,通過支付費用來獲得地址和執行路由。
IP地址表示
IPv4地址長度32位,通常采用點分四組(點分十進制)表示法,如165.195.130.107。點分四組表示法由四個點分隔的十進制數組成,每個數字是一個非負整數,範圍是[0~255]。IP地址的點分四組表示只是簡單方式,它也支持二進制來表示,對比如下:
0.0.0.0 00000000 00000000 00000000 00000000 165.195.130.107 10100101 11000011 10000010 01101011 255.255.255.255 11111111 11111111 11111111 11111111
IPv6地址長度是128位,采用冒分十六進制表示法來表示,由冒號來分隔十六進制的塊或字段,格式X:X:X:X:X:X:X:X,如
5f05:2000:80ad:5800:0058:0800:2023:1d71
IPv6也有一些已經達到共識的簡化表示規則,如下:
· 一個塊中前導的零不必書寫,如 5f05:2000:80ad:5800:0058:0800:2023:1d71 -> 5f05:2000:80ad:5800:58:800:2023:1d71
· 全零塊可以省略,並用::代替(註意:為避免歧義,::在一個IPv6地址中只能使用一次),如 2001:0db8:0000:0000:0000:0302:0003:2020 -> 2001:db8::302:3:2020
· IPv6中嵌入IPv4,格式 X:X:X:X:X:X:d.d.d.d,如 ::ffff:130.113.232.83(IPv6) -> 130.113.232.83(IPv4)
· IPv6的低32位通常采用點分四組表示法,比如::0102:f001相當於::1.2.240.1
在簡化過程中需要註意:
· IPv6中的a~f應該小寫表示;
· :: 只能用於壓縮影響最大的地方(最多零的位置);
· IPv6也可轉換為二進制形式,與上述IPv4規則相同(4以點分,6以冒號分)。
IPv6的地址表示在URL中訪問應該用 [ ] 符號包圍,如: 協議://[X:X:X:X:X:X:X:X]:端口號
IP地址結構
在大量的IP地址情況下,可以方便的將地址空間劃分成塊,大多數地址塊最終又被細分為一個地址,用於識別連接Internet或某些專用的互聯網的計算機網絡接口,這些地址稱為單播地址。除了單播地址以外,還有廣播、組播、任播地址以及一些特殊地址。
分類尋址(IPv4)
IPv4地址被分為兩個部分:網絡部分(網絡號),用於識別接口使用的IP地址在哪個網絡中可被發現;主機部分(主機號),用於識別由網絡部分給出的網絡中特定的主機,而通過這種方式的尋址稱為分類尋址。
在Internet中,IP地址的劃分分為五大類,由地址中的頭幾位來定義,如下:
類 地址範圍 高序位 用途 百分比 網絡數 主機數 A 0.0.0.0~127.255.255.255 0 單播/特殊 1/2 128 16777216 B 128.0.0.0~191.255.255.255 10 單播/特殊 1/4 16384 65536 C 192.0.0.0~223.255.255.255 110 單播/特殊 1/8 2097152 256 D 224.0.0.0~239.255.255.255 1110 組播 1/16 N/A N/A E 240.0.0.0~255.255.255.255 1111 保留 1/16 N/A N/A
子網尋址(IPv4)
上述的分類尋址的範圍(如A類B類的主機號空間)依然很大,為了進一步的縮小IP地址查找的範圍,子網尋址允許將地址分類後的主機號再分為子網(某類地址可分為多個子網)號和主機號(子網中的主機地址)兩個部分。
子網尋址提供額外的靈活性的代價是增加成本,子網和主機字段由站點指定,一個站點中所有路由器和主機需要一種方式來確定地址中的子網部分和主機部分。除網絡號外,之後的8位作為子網號,提供256個子網和每個子網中254臺主機。
格式大致如下(以B類為例):
比如上圖中,B類網絡的後16位為子網(站點)的管理員按需分配,8位子網號,8位主機號,允許256個子網,每個子網又包含254個主機地址(第一個和最後一個規定使用)。
子網的大致應用如下圖:
來自Internet的流量想要與子網內某個主機通信,首先得經過站點邊界路由器,因為該站點邊界路由器內包含著站點內子網的分配信息,也包含了由Internet集中分配的網絡號。
子網掩碼、可變長度子網掩碼(IPv4)
子網掩碼是主機或路由器使用的分配位,以確定如何從一臺主機對應的IP地址中獲得網絡號和子網信息,子網掩碼一旦設置,網絡地址和主機地址就固定了。
IP地址的點分四組表示只是簡單方式,它也支持二進制來表示。
IP 137.12.2.120 掩碼 255.255.255.240 # 轉換為二進制計算 10001001 00001100 00000010 01111000 IP 11111111 11111111 11111111 11110000 掩碼 10001001 00001100 00000010 01110000 結果
結果轉換後得出子網:137.12.2.112(/28),每個網段含1+2+4+8=15臺主機。
通過上面的子網掩碼將一個分配給站點的網絡號進一步細分為多個可分配的大小相同的子網。接下來將通過同一站點的不同部分設置不同長度的子網掩碼來提高子網結構的靈活性,同時也增加了管理的復雜性。這便是可變長度子網掩碼。
不同的子網掩碼被用於站點中的子網128.32.0.0/16: /24、/25、/26。每個子網可提供不同數量的主機: /24前綴的允許有256位;/25前綴的允許有128臺;/26前綴的允許有64臺。
廣播地址(IPv4)
在每個子網中,一個特殊的地址被保留作為子網的廣播地址,子網廣播地址由子網掩碼首先取反,然後與IPv4地址進行`或`運算構建而成,除了子網廣播地址,特殊用途地址255.255.255.255被保留為本地網絡廣播。
如上述的子網137.12.2.112(/28),則廣播地址計算為:
10001001 00001100 00000010 01111000 IP 00000000 00000000 00000000 00001111 掩碼 10001001 00001100 00000010 01111111 結果
結果轉換後得出廣播地址:137.12.2.127。
廣播用於同時向所在子網中所有主機發生數據報,廣播地址可用於IPv4中,IPv6僅使用組播地址。
IPv6地址、接口標識符
IPv6地址使用特殊前綴表示一個地址範圍。
一個IPv6地址範圍是指它可用的網絡規模,有關範圍的重要例子包括節點本地(只用於同一計算機中通信)、鏈路本地(只用於同一網絡鏈路或IPv6前綴中的節點)或全球性(Internet範圍)。在IPv6中,無論是單播地址還是組播地址,都需要明確指出地址的有效範圍。
鏈路本地IPv6地址(和一些全球性IPv6地址)使用接口標識符(IID)作為一個單播IPv6地址的分配基礎。IID作為IPv6地址的低序位長度為64位,直接由一個網絡接日相關的鏈路層MAC地址形成。
在IEEE標準中, EUI表示擴展唯一標識符。EU1-64標識符開始於一個24位的組織唯一標識符(OUI),接著是一個由組織分配的40位擴展標識符,它由前面24位識別。OUI的長度是24位,並占據EU1-48和EU1-64地址的前3個字節。這些地址的第一個字節的低兩位分別是u位和g位。當u位被設置時,表示該地址是本地管理;當g位被設置時,表示該地址是一組或組播類型的地址。
當一個IPv6接口標識符需要一種接口,並且該接口沒有由制造商提供EUI-48地址,但是有其他類型的基本地址時(例如AppleTalk),基本地址可用0從左側填充形成接口標識符。
CIDR
CIDR-無類別域間路由一個用於給用戶分配IP地址以及在互聯網上有效地路由IP數據包的對IP地址進行歸類的方法,CIDR是基於前綴的,用於解釋IP地址的標準。在IPv4中前綴範圍0~32;IPv6中前綴範圍0~128,前綴越短就能匹配越多的地址,越長就匹配得越少,前綴帶來的好處是可能更細粒度的分配IP地址範圍。
使用CIDR,未經過預定義的任何地址範圍可作為一個類的一部分,但需要一個類似於子網掩碼的掩碼(CIDR掩碼)。由於CIDR掩碼不再局限於一個站點,而是針對全球路由系統,所以核心Internet路由器必須能夠解釋和處理掩碼。
CIDR的另一個好處就是可以進行前綴路由聚合,路由分層的思想便是通過路由聚合的過程來實現,這樣能夠在達到通信最短路徑的同時又有效的控制路由表的條目數。
例如,16個原來的C類(/24)網絡現在可以聚合在一起,對外顯示了一個/20的網絡了(如果這些網絡的的地址前20位都相同)。兩個對齊的/20網絡又可進一步聚合為/19,依此類推。這有效地減少了要對外顯示的網絡數,防止了`路由表爆炸`。
特殊用途地址
IPv4特殊地址表
前綴 特殊用途、參考文獻 0.0.0.0/8 本地網絡中的主機,僅作為源IP地址使用[RFC1122] 10.0.0.0/8 專用網絡(內聯網)的地址。這種地址不會出現在公共Internet中[RFC1918] 127.0.0.0/8 Internet主機回送地址(同一計算機),通常只用127.0.0.1[RFC1122] 169.254.0.0/16 “鏈路本地”地址,只用於一條鏈路,通常自動分配[RFC3927] 172.16.0.0/12 專用網絡(內聯網)的地址[RFC1918] 192.0.0.0/24 IETF協議分配(IANA保留)[RFC5736] 192.0.2.0/24 批準用於文檔中的TEST-NET-1地址[RFC5737] 192.88.99.0/24 用於6to4中繼(任播地址)[RFC3068] 192.168.0.0/16 專用網絡(內聯網)的地址[RFC1918] 198.18.0.0/15 用於基準和性能測試[RFC2544] 198.51.100.0/24 TEST-NET-2地址[RFC5737] 203.0.113.0/24 TEST-NET-3地址[RFC5737] 224.0.0.0/4 IPv4組播地址(D類),僅作為目的IP地址使用[RFC5771] 240.0.0.0/4 保留空間(E類),除255.255.255.255[RFC1122] 255.255.255.255/32 本地網絡(受限的)廣播地址[RFC0919][RFC0922]
IPv6特殊地址表
前綴 特殊用途、參考文獻 ::/0 默認路由條目,不用於尋址[RFC5156] ::/128 未指定地址,可作為源IP地址使用[RFC4291] ::1/128 IPv6主機回送地址,不用於發送出本地主機的數據報中[RFC4291] ::ffff:0:0/96 IPv4映射地址,不出現在分組頭部,只用於內部主機[RFC4291] ::{ipv4-address}/96 IPv4兼容地址,已過時,未使用[RFC4291] 2001::/32 Teredo地址[RFC4380] 2001:10::/28 ORCHI 覆蓋可路由加密散列標識符[RFC4843] 2001:db8::/32 用於文檔和實例的地址範圍[RFC3849] 2002::/16 6to4隧道中繼的6to4地址[RFC3056] 3ffe::/16 用於6bone實驗,已過時,未使用[RFC3701] 5f00::/16 用於6bone實驗,已過時,未使用[RFC3701] fc00::/7 唯一的本地單播地址,不用於全球性的Internet[RFC4193] fe80::/10 鏈路本地單播地址[RFC4291] Ff00::/8 IPv6組播地址,僅作為目的IP地址使用[RFC4291]
IPv4和IPv6之間的轉換使用一種被稱為"嵌入IPv4的IPv6地址"方法。該方法規則如下圖:
IP地址分配
IP地址空間通常被分配為大的塊,這由一些分層次組織的權威機構完成。對於單播IPv4和IPv6的地址空間,IANA將分配權限主要委托給幾個地區性Internet註冊機構(RIR)。RIR之間通過一個組織互相協作,即2003年創建的號碼資源組織(NRO)[NRO]。
加入NRO的地區性Internet註冊機構:
· AfriNIC - 非洲網絡信息中心 (http://www.afrinic.net)
· APNIC - 亞洲太平洋地區網絡信息中心 (http://www.apnic.net)
· ARIN - 美洲Internet號碼註冊機構 (http://www.arin.net)
· LACNIC - 拉丁美洲和加勒比地區的IP地址註冊 (http://lacnic.net/en/index.html)
· RIPE NCC - 歐洲網絡協調中心 (http://www.ripe.net)
以上機構為對於地區的國家運營的小型註冊機構和大型ISP分配地址空間,然後ISP又向客戶提供地址空間。
PA - 供應商聚合地址空間,用戶登記Internet服務時,他們通常以地址前綴形式使用ISP地址空間的一部分(通常很小),它們包含一個或多個前綴,並可與ISP的其他前綴實現聚合。
PI - 應商獨立地址空間,從PI空間分配的地址可以直接分配給用戶,並且可以由任何ISP來使用。它們不能聚合。
小結
IP地址用於識別和定位整個Internet系統(單播地址)中設備的網絡接口,也用於識別多個接口(組播、廣播或任播地址)。
IPv4和IPv6都支持同時指向多個網絡接口的地址格式。IPv4支持廣播地址和組播地址;IPv6只支持組播地址。
IDR的開發和部署是Internet核心路由系統的一個根本性變化。CIDR成功地為分配地址空間提供更多靈活性,並通過聚合提升路由的可擴展性。
《TCP IP 詳解卷1:協議》閱讀筆記 - 第二章