- 網絡層位于數據鏈路層與傳輸層之間。網絡層中包含了許多協議,其中最為重要的協議就是IP協議。網絡層提供了IP路由功能。理解IP路由除了要熟悉IP協議的工作機制之外,還必須理解IP編址以及如何合理地使用IP地址來設計網絡。
上層協議類型
- ?以太網幀中的Type字段值為0x0800,表示該幀的網絡層協議為IP協議。
- 在剝掉幀的頭部和尾部之前,網絡設備需要根據幀頭中Type字段確定下一步將幀發送到哪個上層協議進行處理。本例中的幀頭部Type字段表示該幀需要上送到IP協議進行處理。以下將介紹幀的頭部和尾部被剝掉后,IP協議將如何處理幀中的數據。
IP報文頭部
- IP報文頭部信息用于指導網絡設備對報文進行路由和分片。同一個網段內的數據轉發通過鏈路層即可實現,而跨網段的數據轉發需要使用網絡設備的路由功能。分片是指數據包超過一定長度時,需要被劃分成不同的片段使其能夠在網絡中傳輸。
- IP報文頭部長度為20到60字節,報文頭中的信息可以用來指導網絡設備如何將報文從源設備發送到目的設備。其中,版本字段表示當前支持的IP協議版本,當前的版本號為4。DS字段早期用來表示業務類型,現在用于支持QoS中的差分服務模型,實現網絡流量優化。
- 源和目的IP地址是分配給主機的邏輯地址,用于在網絡層標識報文的發送方和接收方。根據源和目的IP地址可以判斷目的端是否與發送端位于同一網段,如果二者不在同一網段,則需要采用路由機制進行跨網段轉發。
IP編址
- IPv4地址為32比特的二進制數,通常用點分十進制表示。IP地址用來標識網絡中的設備,具有IP地址的設備可以在同一網段內或跨網段通信。IP地址包括兩部分,第一部分是網絡號,表示IP地址所屬的網段,第二部分是主機號,用來唯一標識本網段上的某臺網絡設備。
?
- 每個網段上都有兩個特殊地址不能分配給主機或網絡設備。第一個是該網段的網絡地址,該IP地址的主機位為全0,表示一個網段。第二個地址是該網段中的廣播地址,目的地址為廣播地址的報文會被該網段中的所有網絡設備接收。廣播地址的主機位為全1。除網絡地址和廣播地址以外的其他IP地址都可以作為網絡設備的IP地址。
二進制、十進制和十六進制
- 網絡中的數據可以采用二進制、十進制或十六進制來表示,了解這些進制對理解IP網絡基礎知識很有必要。每種進制使用不同的基值表示每一位的數值。二進制每一位只有0和1兩個值,基值為2,二進制數的每一位都可以用2的x次冪來表示,x表示二進制數的位數。十六進制的每一位可以有16個數值,范圍為0-F(即0-9和A-F),A對應十進制的10,F對應十進制的15(二進制的1111)。
進制之間轉換
- IP地址以字節為單位分為四段,每字節包含8個比特,可以表示0到255,共256個數值。從二進制到十進制轉換表中可以看到每一位二進制數所代表的十進制數。上面的表格舉例說明了8位二進制數轉換為十進制數和十六進制數的情況。從表格中也可以看到全0和全1所對應的十進制數和十六進制數。
二進制和十進制轉換
- 32位的IP地址分為4個字節,每個字節有256個取值。因此,理論上IPv4可以有4,294,967,296個IP地址,但實際上只有其中一部分地址可以分配給網絡設備使用。本例中,IP地址的前三個字節表示網絡號,最后一個字節表示該網絡上網絡設備可用的地址范圍。將二進制格式的IP地址轉換為十進制格式時,需要把二進制中每一位1所代表的值加在一起,得出IP地址的十進制值。
IP地址分類
- IPv4地址被劃分為A、B、C、D、E五類,每類地址的網絡號包含不同的字節數。A類,B類和C類地址為可分配IP地址,每類地址支持的網絡數和主機數不同。比如,A類地址可支持126個網絡,每個網絡支持224 (16,777,216 )個主機地址,另外每個網段中的網絡地址和廣播地址不能分配給主機。C類地址支持200多萬個網絡,每個網絡支持256個主機地址,其中254個地址可以分配給主機使用。
- D類地址為組播地址。主機收到以D類地址為目的地址的報文后,且該主機是該組播組成員,就會接收并處理該報文。各類IP地址可以通過第一個字節中的比特位進行區分。如A類地址第一字節的最高位固定為0,B類地址第一字節的高兩位固定為10,C類地址第一字節的高三位固定為110,D類地址第一字節的高四位固定為1110,E類地址第一字節的高四位固定為1111。
IP地址類型
- IPv4中的部分IP地址被保留用作特殊用途。為節省IPv4地址,A、B、C類地址段中都預留了特定范圍的地址作為私網地址。現在,世界上所有終端系統和網絡設備需要的IP地址總數已經超過了32位IPv4地址所能支持的最大地址數4,294,967,296。為主機分配私網地址節省了公網地址,可以用來緩解IP地址短缺的問題。企業網絡中普遍使用私網地址,不同企業網絡中的私網地址可以重疊。默認情況下,網絡中的主機無法使用私網地址與公網通信;當需要與公網通信時,私網地址必須轉換成公網地址。還有其他一些特殊IP地址,如127.0.0.0網段中的地址為環回地址,用于診斷網絡是否正常。IPv4中的第一個地址0.0.0.0表示任何網絡,這個地址的作用將在路由原理中詳細介紹。IPv4中的最后一個地址255.255.255.255是0.0.0.0網絡中的廣播地址。?
網絡通信
- 源主機必須要知道目的主機的IP地址后才能將數據發送到目的地。源主機向其他目的主機發送報文之前,需要檢查目的IP地址和源IP地址是否屬于同一個網段。如果是,則報文將被下發到底層協議進行以太網封裝處理。如果目的地址和源地址屬于不同網段,則主機需要獲取下一跳路由器的IP地址,然后將報文下發到底層協議處理。
子網掩碼
- 子網掩碼用于區分網絡部分和主機部分。子網掩碼與IP地址的表示方法相同。每個IP地址和子網掩碼一起可以用來唯一的標識一個網段中的某臺網絡設備。子網掩碼中的1表示網絡位,0表示主機位。?
默認子網掩碼
- 每類IP地址有一個缺省子網掩碼。A類地址的缺省子網掩碼為8位,即第一個字節表示網絡位,其他三個字節表示主機位。B類地址的缺省子網掩碼為16位,因此B類地址支持更多的網絡,但是主機數也相應減少。C類地址的缺省子網掩碼為24位,支持的網絡最多,同時也限制了單個網絡中主機的數量。?
地址規劃
- 通過子網掩碼可以判斷主機所屬的網段、網段上的廣播地址以及網段上支持的主機數。圖中這個例子,主機地址為192.168.1.7,子網掩碼為24位(C類IP地址的缺省掩碼),從中我們可以判斷該主機位于192.168.1.0/24網段。將IP地址中的主機位全部置為1,并轉換為十進制數,即可得到該網段的廣播地址192.168.1.255。網段中支持的主機數為2n,n為主機位的個數。本例中n=8,28=256,減去本網段的網絡地址和廣播地址,可知該網段支持254個有效主機地址。
地址規劃舉例
- 根據給出的IP地址和子網掩碼,請算出此網絡中包含的主機地址數量以及可用主機地址的數量。
- 本例說明如何根據B類IP地址及其子網掩碼判斷主機所屬的網段、網段中的廣播地址以及有效主機地址數量。判斷過程與C類地址類似。
有類IP編址的缺陷
- 在設計網絡時使用有類IP地址會造成地址的浪費。?
- 如果企業網絡中希望通過規劃多個網段來隔離物理網絡上的主機,使用缺省子網掩碼就會存在一定的局限性。網絡中劃分多個網段后,每個網段中的實際主機數量可能很有限,導致很多地址未被使用。如圖所示的場景下,如果使用缺省子網掩碼的編址方案,則地址使用率很低。
變長子網掩碼
- 采用可變長子網掩碼可解決上述問題。缺省子網掩碼可以進一步劃分,成為變長子網掩碼(VLSM)。通過改變子網掩碼,可以將網絡劃分為多個子網。本例中的地址為C類地址,缺省子網掩碼為24位。現借用一個主機位作為網絡位,借用的主機位變成子網位。一個子網位有兩個取值0和1,因此可劃分兩個子網。該比特位設置為0,則子網號為0,該比特位設置為1,則子網號為128。將剩余的主機位都設置為0,即可得到劃分后的子網地址;將剩余的主機位都設置為1,即可得到子網的廣播地址。每個子網中支持的主機數為27-2(減去子網地址和廣播地址),即126個主機地址。
變長子網掩碼舉例
- 可變長子網掩碼緩解了使用缺省子網掩碼導致的地址浪費問題,同時也為企業網絡提供了更為有效的編址方案。本例中需要使用可變長子網掩碼來劃分多個子網,借用一定數量的主機位作為子網位的同時,剩余的主機位必須保證有足夠的IP地址供每個子網上的所有主機使用。
無類域間路由
- 無類域間路由CIDR(Classless Inter Domain Routing)由RFC1817定義。CIDR突破了傳統IP地址的分類邊界,將路由表中的若干條路由匯聚為一條路由,減少了路由表的規模,提高了路由器的可擴展性。
- 如上圖所示,一個企業分配到了一段A類網絡地址,10.24.0.0/22。該企業準備把這些A類網絡分配給各個用戶群,目前已經分配了四個網段給用戶。如果沒有實施CIDR技術,企業路由器的路由表中會有四條下連網段的路由條目,并且會把它通告給其他路由器。通過實施CIDR技術,我們可以在企業的路由器上把這四條路由10.24.0.0/24,10.24.1.0/24,10.24.2.0/24,10.24.3.0/24匯聚成一條路由10.24.0.0/22。這樣,企業路由器只需通告10.24.0.0/22這一條路由,大大減小了路由表的規模。
網關
- 報文轉發過程中,首先需要確定轉發路徑以及通往目的網段的接口,然后將報文封裝在以太幀中通過指定的物理接口轉發出去。如果目的主機與源主機不在同一網段,報文需要先轉發到網關,然后通過網關將報文轉發到目的網段。
- 網關是指接收并處理本地網段主機發送的報文并轉發到目的網段的設備。為實現此功能,網關必須知道目的網段的IP地址。網關設備上連接本地網段的接口地址即為該網段的網關地址。
IP包分片
- 網絡中轉發的IP報文的長度可以不同,但如果報文長度超過了數據鏈路所支持的最大長度,則報文就需要分割成若干個較小的片段才能夠在鏈路上傳輸。將報文分割成多個片段的過程叫做分片。
- 接收端根據分片報文中的標識符(Identification),標志(Flags),及片偏移(Fragment Offset)字段對分片報文進行重組。標識符用于識別屬于同一個數據包的分片,以區別于同一主機或其他主機發送的其它數據包分片,保證分片被正確的重新組合。標志字段用于判斷是否已經收到最后一個分片。最后一個分片的標志字段設置為0,其他分片的標志字段設置為1,目的端在收到標志字段為0的分片后,開始重組報文。片偏移字段表示每個分片在原始報文中的位置。第一個分片的片偏移為0,第二個分片的片偏移表示緊跟第一個分片后的第一個比特的位置。比如,如果首片報文包含1259比特,那么第二分片報文的片偏移字段值就應該為1260。
生存時間
- 報文在網段間轉發時,如果網絡設備上的路由規劃不合理,就可能會出現環路,導致報文在網絡中無限循環,無法到達目的端。環路發生后,所有發往這個目的地的報文都會被循環轉發,隨著這種報文逐漸增多,網絡將會發生擁塞。
- 為避免環路導致的網絡擁塞,IP報文頭中包含一個生存時間TTL(Time To Live)字段。報文每經過一臺三層設備,TTL值減1。初始TTL值由源端設備設置。當報文中的TTL降為0時,報文會被丟棄。同時,丟棄報文的設備會根據報文頭中的源IP地址向源端發送ICMP錯誤消息。
協議號
- 目的端的網絡層在接收并處理報文以后,需要決定下一步對報文該做如何處理。IP報文頭中的協議字段標識了將會繼續處理報文的協議。與以太幀頭中的Type字段類似,協議字段也是一個十六進制數。該字段可以標識網絡層協議,如ICMP(Internet Control Message Protocol,因特網控制報文協議),也可以標識上層協議,如TCP(Transmission Control Protocol,傳輸控制協議,對應值0x06)、UDP(User Datagram Protocol,用戶數據包協議,對應值0x11)。?
本章總結
問:子網掩碼的作用是什么?
答:32位的IP子網掩碼用于區分IP地址中的網絡號和主機號。網絡號表示網絡或子網,主機號表示網絡或子網中的主機。
問:IP報文頭部中TTL字段的作用是什么?
答:如果網絡中存在環路,則IP報文可能會在網絡中循環而無法到達目的端。TTL字段限定了IP報文的生存時間,保證無法到達目的端的報文最終被丟棄。
問:網關的作用是什么?
答:網關是指接收并處理本地網段主機發送的報文并轉發到目的網段的設備。