1. 計算機網路第四章(網路層)
4.1、網路層概述
簡介
網路層的主要任務是 實現網路互連 ,進而 實現數據包在各網路之間的傳輸
這些異構型網路N1~N7如果只是需要各自內部通信,他們只要實現各自的物理層和數據鏈路層即可
但是如果要將這些異構型網路互連起來,形成一個更大的互聯網,就需要實現網路層設備路由器
有時為了簡單起見,可以不用畫出這些網路,圖中N1~N7,而將他們看做是一條鏈路即可
要實現網路層任務,需要解決一下主要問題:
網路層向運輸層提供怎樣的服務(「可靠傳輸」還是「不可靠傳輸」)
在數據鏈路層那課講過的可靠傳輸,詳情可以看那邊的筆記:網路層對以下的 分組丟失 、 分組失序 、 分組重復 的傳輸錯誤採取措施,使得接收方能正確接受發送方發送的數據,就是 可靠傳輸 ,反之,如果什麼措施也不採取,則是 不可靠傳輸
網路層定址問題
路由選擇問題
路由器收到數據後,是依據什麼來決定將數據包從自己的哪個介面轉發出去?
依據數據包的目的地址和路由器中的路由表
但在實際當中,路由器是怎樣知道這些路由記錄?
由用戶或網路管理員進行人工配置,這種方法只適用於規模較小且網路拓撲不改變的小型互聯網
另一種是實現各種路由選擇協議,由路由器執行路由選擇協議中所規定的路由選擇演算法,而自動得出路由表中的路有記錄,這種方法更適合規模較大且網路拓撲經常改變的大型互聯網
補充 網路層(網際層) 除了 IP協議 外,還有之前介紹過的 地址解析協議ARP ,還有 網際控制報文協議ICMP , 網際組管理協議IGMP
總結
4.2、網路層提供的兩種服務
在計算機網路領域,網路層應該向運輸層提供怎樣的服務(「 面向連接 」還是「 無連接 」)曾引起了長期的爭論。
爭論焦點的實質就是: 在計算機通信中,可靠交付應當由誰來負責 ?是 網路 還是 端系統 ?
面向連接的虛電路服務
一種觀點:讓網路負責可靠交付
這種觀點認為,應藉助於電信網的成功經驗,讓網路負責可靠交付,計算機網路應模仿電信網路,使用 面向連接 的通信方式。
通信之前先建立 虛電路 (Virtual Circuit),以保證雙方通信所需的一切網路資源。
如果再使用可靠傳輸的網路協議,就可使所發送的分組無差錯按序到達終點,不丟失、不重復。
發送方 發送給 接收方 的所有分組都沿著同一條虛電路傳送
虛電路表示這只是一條邏輯上的連接,分組都沿著這條邏輯連接按照存儲轉發方式傳送,而並不是真正建立了一條物理連接。
請注意,電路交換的電話通信是先建立了一條真正的連接。
因此分組交換的虛連接和電路交換的連接只是類似,但並不完全一樣
無連接的數據報服務
另一種觀點:網路提供數據報服務
互聯網的先驅者提出了一種嶄新的網路設計思路。
網路層向上只提供簡單靈活的、 無連接的 、 盡最大努力交付 的 數據報服務 。
網路在發送分組時不需要先建立連接。每一個分組(即 IP 數據報)獨立發送,與其前後的分組無關(不進行編號)。
網路層不提供服務質量的承諾 。即所傳送的分組可能出錯、丟失、重復和失序(不按序到達終點),當然也不保證分組傳送的時限。
發送方 發送給 接收方 的分組可能沿著不同路徑傳送
盡最大努力交付
如果主機(即端系統)中的進程之間的通信需要是可靠的,那麼就由網路的 主機中的運輸層負責可靠交付(包括差錯處理、流量控制等) 。
採用這種設計思路的好處是 :網路的造價大大降低,運行方式靈活,能夠適應多種應用。
互連網能夠發展到今日的規模,充分證明了當初採用這種設計思路的正確性。
虛電路服務與數據報服務的對比
對比的方面 虛電路服務 數據報服務
思路 可靠通信應當由網路來保證 可靠通信應當由用戶主機來保證
連接的建立 必須有 不需要
終點地址 僅在連接建立階段使用,每個分組使用短的虛電路號 每個分組都有終點的完整地址
分組的轉發 屬於同一條虛電路的分組均按照同一路由進行轉發 每個分組獨立選擇路由進行轉發
當結點出故障時 所有通過出故障的結點的虛電路均不能工作 出故障的結點可能會丟失分組,一些路由可能會發生變化
分組的順序 總是按發送順序到達終點 到達終點時不一定按發送順序
端到端的差錯處理和流量控制 可以由網路負責,也可以由用戶主機負責 由用戶主機負責
4.3、IPv4
概述
分類編制的IPv4地址
簡介
每一類地址都由兩個固定長度的欄位組成,其中一個欄位是 網路號 net-id ,它標志主機(或路由器)所連接到的網路,而另一個欄位則是 主機號 host-id ,它標志該主機(或路由器)。
主機號在它前面的網路號所指明的網路范圍內必須是唯一的。
由此可見, 一個 IP 地址在整個互聯網范圍內是唯一的 。
A類地址
B類地址
C類地址
練習
總結
IP 地址的指派范圍
一般不使用的特殊的 IP 地址
IP 地址的一些重要特點
(1) IP 地址是一種分等級的地址結構 。分兩個等級的好處是:
第一 ,IP 地址管理機構在分配 IP 地址時只分配網路號,而剩下的主機號則由得到該網路號的單位自行分配。這樣就方便了 IP 地址的管理。
第二 ,路由器僅根據目的主機所連接的網路號來轉發分組(而不考慮目的主機號),這樣就可以使路由表中的項目數大幅度減少,從而減小了路由表所佔的存儲空間。
(2) 實際上 IP 地址是標志一個主機(或路由器)和一條鏈路的介面 。
當一個主機同時連接到兩個網路上時,該主機就必須同時具有兩個相應的 IP 地址,其網路號 net-id 必須是不同的。這種主機稱為 多歸屬主機 (multihomed host)。
由於一個路由器至少應當連接到兩個網路(這樣它才能將 IP 數據報從一個網路轉發到另一個網路),因此 一個路由器至少應當有兩個不同的 IP 地址 。
(3) 用轉發器或網橋連接起來的若干個區域網仍為一個網路 ,因此這些區域網都具有同樣的網路號 net-id。
(4) 所有分配到網路號 net-id 的網路,無論是范圍很小的區域網,還是可能覆蓋很大地理范圍的廣域網,都是平等的。
劃分子網的IPv4地址
為什麼要劃分子網
在 ARPANET 的早期,IP 地址的設計確實不夠合理:
IP 地址空間的利用率有時很低。
給每一個物理網路分配一個網路號會使路由表變得太大因而使網路性能變壞。
兩級的 IP 地址不夠靈活。
如果想要將原來的網路劃分成三個獨立的網路
所以是否可以從主機號部分借用一部分作為子網號
但是如果未在圖中標記子網號部分,那麼我們和計算機又如何知道分類地址中主機號有多少比特被用作子網號了呢?
所以就有了劃分子網的工具: 子網掩碼
從 1985 年起在 IP 地址中又增加了一個「 子網號欄位 」,使兩級的 IP 地址變成為 三級的 IP 地址 。
這種做法叫做 劃分子網 (subnetting) 。
劃分子網已成為互聯網的正式標准協議。
如何劃分子網
基本思路
劃分子網純屬一個 單位內部的事情 。單位對外仍然表現為沒有劃分子網的網路。
從主機號 借用 若干個位作為 子網號 subnet-id,而主機號 host-id 也就相應減少了若干個位。
凡是從其他網路發送給本單位某個主機的 IP 數據報,仍然是根據 IP 數據報的 目的網路號 net-id,先找到連接在本單位網路上的路由器。
然後 此路由器 在收到 IP 數據報後,再按 目的網路號 net-id 和 子網號 subnet-id 找到目的子網。
最後就將 IP 數據報直接交付目的主機。
劃分為三個子網後對外仍是一個網路
優點
1. 減少了 IP 地址的浪費 2. 使網路的組織更加靈活 3. 更便於維護和管理
劃分子網純屬一個單位內部的事情,對外部網路透明 ,對外仍然表現為沒有劃分子網的一個網路。
子網掩碼
(IP 地址) AND (子網掩碼) = 網路地址 重要,下面很多相關知識都會用到
舉例
例子1
例子2
默認子網掩碼
總結
子網掩碼是一個網路或一個子網的重要屬性。
路由器在和相鄰路由器交換路由信息時,必須把自己所在網路(或子網)的子網掩碼告訴相鄰路由器。
路由器的路由表中的每一個項目,除了要給出目的網路地址外,還必須同時給出該網路的子網掩碼。
若一個路由器連接在兩個子網上,就擁有兩個網路地址和兩個子網掩碼。
無分類編址的IPv4地址
為什麼使用無分類編址
無分類域間路由選擇 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特點
CIDR使用各種長度的「 網路前綴 」(network-prefix)來代替分類地址中的網路號和子網號。
IP 地址從三級編址(使用子網掩碼)又回到了兩級編址 。
如何使用無分類編址
舉例
路由聚合(構造超網)
總結
IPv4地址的應用規劃
給定一個IPv4地址快,如何將其劃分成幾個更小的地址塊,並將這些地址塊分配給互聯網中不同網路,進而可以給各網路中的主機和路由器介面分配IPv4地址
定長的子網掩碼FLSM(Fixed Length Subnet Mask)
劃分子網的IPv4就是定長的子網掩碼
舉例
通過上面步驟分析,就可以從子網1 ~ 8中任選5個分配給左圖中的N1 ~ N5
採用定長的子網掩碼劃分,只能劃分出2^n個子網,其中n是從主機號部分借用的用來作為子網號的比特數量,每個子網所分配的IP地址數量相同
但是也因為每個子網所分配的IP地址數量相同,不夠靈活,容易造成IP地址的浪費
變長的子網掩碼VLSM(Variable Length Subnet Mask)
無分類編址的IPv4就是變長的子網掩碼
舉例
4.4、IP數據報的發送和轉發過程
舉例
源主機如何知道目的主機是否與自己在同一個網路中,是直接交付,還是間接交付?
可以通過 目的地址IP 和 源地址的子網掩碼 進行 邏輯與運算 得到 目的網路地址
如果 目的網路地址 和 源網路地址 相同 ,就是 在同一個網路 中,屬於 直接交付
如果 目的網路地址 和 源網路地址 不相同 ,就 不在同一個網路 中,屬於 間接交付 ,傳輸給主機所在網路的 默認網關 (路由器——下圖會講解),由默認網關幫忙轉發
主機C如何知道路由器R的存在?
用戶為了讓本網路中的主機能和其他網路中的主機進行通信,就必須給其指定本網路的一個路由器的介面,由該路由器幫忙進行轉發,所指定的路由器,也被稱為 默認網關
例如。路由器的介面0的IP地址192.168.0.128做為左邊網路的默認網關
主機A會將該IP數據報傳輸給自己的默認網關,也就是圖中所示的路由器介面0
路由器收到IP數據報後如何轉發?
檢查IP數據報首部是否出錯:
若出錯,則直接丟棄該IP數據報並通告源主機
若沒有出錯,則進行轉發
根據IP數據報的目的地址在路由表中查找匹配的條目:
若找到匹配的條目,則轉發給條目中指示的嚇一跳
若找不到,則丟棄該數據報並通告源主機
假設IP數據報首部沒有出錯,路由器取出IP數據報首部各地址欄位的值
接下來路由器對該IP數據報進行查表轉發
逐條檢查路由條目,將目的地址與路由條目中的地址掩碼進行邏輯與運算得到目的網路地址,然後與路由條目中的目的網路進行比較,如果相同,則這條路由條目就是匹配的路由條目,按照它的下一條指示,圖中所示的也就是介面1轉發該IP數據報
路由器是隔離廣播域的
4.5、靜態路由配置及其可能產生的路由環路問題
概念
多種情況舉例
靜態路由配置
舉例
默認路由
舉例
默認路由可以被所有網路匹配,但路由匹配有優先順序,默認路由是優先順序最低的
特定主機路由
舉例
有時候,我們可以給路由器添加針對某個主機的特定主機路由條目
一般用於網路管理人員對網路的管理和測試
多條路由可選,匹配路由最具體的
靜態路由配置錯誤導致路由環路
舉例
假設將R2的路由表中第三條目錄配置錯了下一跳
這導致R2和R3之間產生了路由環路
聚合了不存在的網路而導致路由環路
舉例
正常情況
錯誤情況
解決方法
黑洞路由的下一跳為null0,這是路由器內部的虛擬介面,IP數據報進入它後就被丟棄
網路故障而導致路由環路
舉例
解決方法
添加故障的網路為黑洞路由
假設。一段時間後故障網路恢復了
R1又自動地得出了其介面0的直連網路的路由條目
針對該網路的黑洞網路會自動失效
如果又故障
則生效該網路的黑洞網路
總結
4.6、路由選擇協議
概述
網際網路所採用的路由選擇協議的主要特點
網際網路採用分層次的路由選擇協議
自治系統 AS :在單一的技術管理下的一組路由器,而這些路由器使用一種 AS 內部的路由選擇協議和共同的度量以確定分組在該 AS 內的路由,同時還使用一種 AS 之間的路由選擇協議用以確定分組在 AS之間的路由。
自治系統之間的路由選擇簡稱為域間路由選擇,自治系統內部的路由選擇簡稱為域內路由選擇
域間路由選擇使用外部網關協議EGP這個類別的路由選擇協議
域內路由選擇使用內部網關協議IGP這個類別的路由選擇協議
網關協議 的名稱可稱為 路由協議
常見的路由選擇協議
2. 計算機網路——4.網路層
將網路互連並能夠互相通信,會遇到許多問題,例如:不同的定址方案(不同的網路可能地址的表示位數不同),不同的最大分組長度(最大幀長),不同的網路接入機制,不同的超時控制,不同的差錯恢復方法......
如何 將異構的網路互相連接起來 :使用一些 中間設備(中間系統)(中繼系統) :
1.IP地址及其表示方法
IP地址就是給每個連接在互聯網上的 主機(或路由器) 分配一個在全世界范圍內是 唯一的32位 的標識符。IP地址由互聯網名字和數字分配機構(ICANN)進行分配。分配給ISP,然後用戶再通過ISP申請到一個IP地址。
2.IP地址的編址方式
後續還有 NAT 和 IPv6 這些方法
正常使用ABC三類,DE兩類用作科研或者其他一般不開放使用。D類地址還是多播地址
A類地址:
B類地址:
C類地址:
3.特殊IP地址
4.IP地址的一些重要特點
IP地址與硬體地址是不同的地址
通信時使用的兩個地址:
每個介面都有兩個地址,網路層及以上的使用IP地址,數據鏈路層和物理層使用MAC地址(物理地址)
1.地址解析協議ARP的作用
3.ARP分組的傳輸
4.ARP高速緩存的作用
5.ARP欺騙
網路上的任意一台主機,在 沒有接收到ARP請求 的情況下,可以 主動發送ARP響應 。
6.應當注意的問題
7.使用ARP的四種典型情況
假設現在有四個A類網路通過三個路由器連接在一起,而每個網路上都有成千上萬台主機,如果按照目的主機的主機號來製作路由表,那麼一個路由表就有 成千上萬行 ,這樣路由表的內存會過於龐大,因此我們按照 目的主機所在網路地址 來製作路由表,相當於 歸類紀錄 ,這樣的話每個路由表只需要幾行就可以,會大大簡化。如下圖:
2.特定主機路由 :雖然互聯網所有的分組轉發都是基於 目的主機所在的網路 ,但是在大多數情況下,都允許有一個特例,即 指定某個網路中的某一台主機填入路由表 ,採用特定主機路由可以使網路管理人員 更方便地控制網路和測試網路 ,同時也考慮到某種 安全問題 。
3.默認路由 :假如現在有一個分組的地址為1.2.3.4那麼它的網路地址就是1.0.0.0,但是在路由表中沒有記錄,那麼路由器就不知道該轉發給誰,怎麼轉發,就會將這個分組丟棄,為了避免這種情況,有了默認路由,一旦出現 找不到目的地址的分組 ,就 由默認路由轉發 (或者說 默認路由能夠匹配所有的地址 )。但同時 默認路由的優先順序是最小的 ,也就是 只有在找不到的情況下才會使用 ,找到了的話就不會用默認路由。採用默認路由可以 減少路由表所佔用的空間和搜索路由表所用的時間 ,如果主機連接在一個 小網路 上,並且這個網路只用一個路由器與互聯網連接,那麼這種情況非常適合使用默認路由。例如下圖:
1.從兩級IP地址到三級IP地址
早期IP地址的不合理設計:IP地址浪費極大,因此對分類的IP地址做了一個改進,劃分子網:在IP地址中增加一個"子網號欄位",使原本的兩級地址(網路號,主機號)變成三級地址(網路號,主機號,子網號),如下圖所示:
例如:
3.子網掩碼
規則:
(6).報告轉發分組出錯
1.網路前綴
劃分子網雖然在一定程度上解決了困難,但是並 沒有從根本上解決 ,仍然有幾個問題:
2.CIDR的特點
CIDR是在 變長子網掩碼(VLSM) 的基礎上進一步提出的,它的全稱為 無分類域間選擇(CIDR) 。
主要特點:
3.路由聚合
4.CIDR記法的其它形式
5.CIDR地址塊劃分
3. 計算機網路-網路層-超網
在一個劃分子網的網路中可同時使用幾個不同的子網掩碼。使用變長子網掩碼VLSM(Variable Length Subnet Mask)可進一步提高IP地址資源的利用率。在VLSM的基礎上又進一步研究出無分類編址方法,它的正式名字是 無分類域間路由選擇CIDR (Classless Inter-Domain Routing,CIDR的讀音是「sider'」)。
CIDR最主要的特點有兩個汪團:
(I)CIDR把32位的IP地址劃分為前後兩個部分。前面部分是「網路前綴」(network-prefix)(或簡稱為「前綴」),用來指明網路,後面部分則用來指明主機。因此CIDR使IP地址從三級編址(使用子網掩碼)又回到了兩級編址,但這已是無分類的兩級編址。其記法是:
IP地址:={<網路前綴>,<主機號>} (4-3)
CIDR還使用「斜線記法」(slash notation),或稱為CIDR記法,即在IP地址後面加上斜線「/」,然念稿後寫上網路前綴所佔的位數。
(2)CIDR把網路前綴都相同的連續的IP地址組成一個「CIDR地址塊」。我們只要知道CIDR地址塊中的任何一個地址,就可以知道這個地址塊的起始地址(即最小地址)和最大地址,以及地址塊中的地址數。例如,已知IP地址128.14.35.7/20是某CIDR地址塊中的一個地址,現在把它寫成二進製表示,其中的前20位是網路前綴,而後面的12位是主機號:
128.14.35.7/20= 1000 0000 0000 1110 0010 0011 0000 0111
這個地址所在的地址塊中的最小地址和最大地址可以很方便地得出:找出 地址掩碼(斜線後面的數字個數是掩碼地址1的個數, 20位)中1和0的交界處 發生在地址中的哪一個位元組。現在是在第三個位元組,取後面12 都寫成0是最小地址,寫成1為最大地址。
最小地址:128.14.32.0 1000 0000 0000 1110 0010 0000 0000 0000
最大地址:128.14.47.255 1000 0000 0000 1110 0010 1111 1111 1111
以上這兩個特殊地址的主機號是全0和全1的地址。一般並不使用。通常只使用在這兩個特殊地址之間的地址。 這個地址塊共有2^12個地址(2 的主機號位數次冪) 。我們可以用地址塊中的最小地址和網路前綴的位數指明這個地址塊。例如,上面的地址塊可記為128.14.32.0/20。在不需要指出地址塊的起始地址時,也可把這樣的地址塊簡稱為「/20地址塊」。
為了更方便地進行路由選擇,CIDR使用32位的地址掩碼(address mask)。地址掩碼由一串1和一串0組成,而1的個數就是網路前綴的長度。雖然CIDR不使用子網了,但由於目前仍有一些網路還使用子網劃分和子網掩碼,因此CIDR使用的地址掩碼也可繼續稱為子網掩碼。例如,/20地址塊的地址掩碼是:1111 1111 1111 1111 1111 0000 0000 0000(20個連續的1)。 斜線記法中,斜線後面的數字就是地址掩碼中1的個數。
在「CIDR不使用子網」是指CIDR並沒有在32位地址中指明若干位作為子網欄位。但分配到一個CIDR地址塊仔陵孝的單位,仍然可以在本單位內根據需要劃分出一些子網。這些子網也都只有一個網路前綴和一台主機號欄位,但子網的網路前綴比整個單位的網路前綴要長些。例如,某單位分配到地址塊/20,就可以再繼續劃分為8個子網(即需要從主機號中借用3位來劃分子網)。這時每一個子網的網路前綴就變成23位(原來的20位加上從主機號借來的3位),比該單位的網銘前綴多了3位。
由於一個CIDR地址塊中有很多地址,所以在路由表中就利用CIDR地址塊來查找目的網路。這種地址的聚合常稱為 路由聚合 (route aggregation),它使得路由表中的一個項目可以表示原來傳統分類地址的很多個(例如上干個)路由, 路由聚合也稱為構成超網 (supemetting)。路由聚合有利於減少路由器之間的路由選擇信息的交換,從而提高了整個互聯網的性能。
CIDR記法有多種形式,例如,地址塊10.0.0.0/10可簡寫為10/10,也就是把點分十進制中低位連續的0省略。另一種簡化表示方法是在網路前綴的後面加一個星號*,如:0000101000*意思是:在星號*之前是網路前綴,而星號◆表示P地址中的主機號,可以是任意值。
前綴位數不是8的整數倍時,需要進行簡單的計算才能得到一些地址信息。表47給出了最常用的CIDR地址塊。表中的K表示2^10=1024,網路前綴小於13或大於27都較少使用。在「包含的地址數」中沒有把全1和全0的主機號除外。
從表4-7可看出,每一個CIDR地址塊中的地址數一定是2的整數次冪。CIDR地址塊多數可以包含多個C類地址(是一個C類地址的2」倍,n是整數),這就是「 構成超網 」這一名詞的來源。
使用CIDR的一個好處就是可以更加有效地分配PV4的地址空間,可根據客戶的需要分配適當大小的CIDR地址塊。假定某ISP已擁有地址塊206.0.64.0/18(相當於有64個C類網路)。現在某大學需要800個IP地址。ISP可以給該大學分配一個地址塊206.0.68.0/22,它包括1024(即2^10)個1P地址,相當於4個連續的C類(/24地址塊),占該ISP擁有的地址空間的1/16。這個大學然後可自由地對本校的各系分配地址塊,而各系還可再劃分本系的地址塊。
從圖4-25可以清楚地看出地址聚合的概念。這個ISP共擁有64個C類網路。如果不採用CIDR技術,則在與該SP的路由器交換路由信息的每一個路由器的路由表中,就需要有64個項目,但採用地址聚合後,就只需用路由聚合後的一個項目206.0.64.0/18就能找到該ISP,同理,這個大學共有4個系,在1SP內的路由器的路由表中,也需使用206.0.68.022這個項目。這個項目好比是大學的收發室。凡寄給這個大學任何一個系的郵件,郵遞員都不考慮大學各個系的地址,而是把這些郵件集中投遞到大學的收發室,然後由大學的收發室再進行下一步的投遞。這樣就減輕了v遞員的工作量(相當於簡化了路由表的查找)。
從圖4-25下面表格中的二進制地址可看出,把四個系的路由聚合為大學的一個路由(即構成超網),是將網路前綴縮短。 網路前綴越短,其地址塊所包含的地址數就越多。而在三級結構的P地址中,劃分子網是使網鉻前綴變長。
在使用CIDR時,由於採用了網路前綴這種記法,IP地址由網路前綴和主機號這兩個部分組成,因此在路由表中的項目也要有相應的改變。這時, 每個項目由「網路前綴」和「下一跳地址」組成 。但是在查找路由表時可能會得到不止一個匹配結果。這樣就帶來一個間題:我們應當從這些匹配結果中選擇哪一條路由呢?
答案是:應當從匹配結果中 選擇具有最長網路前綴的路由 。這叫做 最長前綴匹 配longest-.prefix matching) ,這是因為網鉻前綴越長,其地址塊就越小,因而路由就越具體(more specific)。最長前綴匹配又稱為最長匹配或最佳匹配,為了說明最長前綴匹配的概念。
假定大學下屬的四系希望IS把轉發給四系的數據報直接發到四系面不要經過大學的路由器,但又不願意改變自己使用的P地址塊。因此,在SP的路由器的路由表中,至少要有以下兩個項目,即206.0.68.0/22(大學)和206.0.71.128/25(四系)。現在假定ISP收到一個數據報,其目的IP地址為D=206.0.71.130。把D分別和路由表中這兩個項目的掩碼逐位相「與」(AND操作)。將所得的逐位AND操作的結果按順序寫在下面:
D和 1111 1111 1111 1111 1111 11 00 0000 0000逐位相「與」 = 206.0.68.0/22 匹配
D和 1111 1111 1111 1111 1111 1111 1 000 0000逐位相「與」 = 206.0.71.128/25 匹配
不難看出,現在同一個IP地址D可以在路由表中找到兩個目的網路(大學和四系)和該地址相匹配。根據 最長前綴(1的位數) 匹配的原理,應當選擇後者,把收到的數據報轉發到後一個目的網路(四系),即選擇兩個匹配的地址中更具體的一個。
從以上的討論可以看出,如果IP地址的分配一開始就採用CIDR,那麼我們可以按網路所在的地理位置來分配地址塊,這樣就可大大減少路由表中的路由項目。例如,可以將世界劃分為四大地區,每一地區分配一個CIDR地址塊:
地址塊194/7(194.0.0.0至195255.255,25)分配給歐洲:
地址塊198/7(198.0.0.0至199.255.255,255)分配給北類洲
地址塊2007(200.0.0.0至201255.255.255)分配給中美洲和南美洲:
地址塊202/7(202.0.0.0至203255.255.255)分配給亞洲和太平洋地區,
上面的每一個地址塊包含有釣3200萬個地址,這種分配地址的方法就使得IP地址與地理位置相關聯。它的好處是可以大大壓縮路由表中的項目數。例如,凡是從中國發往北美的IP數據報(不管它是地址塊198/7中的哪一個地址)都先送交位於美國的一個路由器,因此在路由表中使用一個項目就行了。
使用CIDR後,由於要尋找最長前綴匹配,使路由表的查找過程變得更加復雜了。當路由表的項目數很大時,怎樣設法減小路由表的查找時間就成為一個非常重要的問題。例如,連接路由器的線路的速率為10Gbit/s,而分組的平均長度為2000bit,那麼路由器就應當平均每秒鍾能夠處理500萬個分組(常記為5Mpps)。或者說,路由器處理一個分組的平均時間只有200s(1ns=10^-9秒)。因此,查找每一個路由所需的時間是非常短的。
對無分類編址的路由表的最簡單的查找演算法就是對所有可能的前綴進行循環查找。例如,給定一個目的地址D。對每一個可能的網路前綴長度M,路由器從D中提取前M個位成一個網路前綴,然後查找路由表中的網路前綴。所找到的最長匹配就對應於要查找的路由。
"這種最簡單的演算法的明顯缺點就是查找的次數太多。最壞的情況是路由表中沒有這個路由。在這種情況下,演算法仍要進行32次(具有32位的網路前綴是一個特定主機路由)。就是要找到一個傳統的B類地址(即/16),也要查找16次。對於經常使用的歌認路由,這種演算法都要經歷31次不必要的查找。"
為了進行更加有效的查找,通常是把無分類編址的路由表存放在一種層次的數據結構中,然後自上而下地按層次進行查找。這里最常用的就是 二叉線索 (binary trie),它是一種特殊結構的樹。IP地址中從左到右的比特值決定了從根節點逐層向下層延伸的路徑,而二叉線索中的各個路徑就代表路由表中存放的各個地址。
圖4-26用一個例子來說明二叉線索的結構。圖中給出了5個IP地址。為了簡化二叉線索的結構,可以先找出對應於每一個P地址的唯一前綴(unique prefix)。所謂唯一前綴就是在表中所有的P地址中,該前綴是唯一的。這樣就可以用這些唯一前綴來構造二叉線索。在進行查找時,只要能夠和唯一前綴相匹配就行了。
從二叉線索的根節點自頂向下的深度最多有32層,每一層對應於IP地址中的一位。一個IP地址存入二叉線索的規則很簡單。先檢查IP地址左邊的第一位,如為0,則第一層的節點就在根節點的左下方;如為1,則在右下方。然後再檢查地址的第二位,構造出第二層的節點。依此類推,直到唯一前綴的最後一位。由於唯一前綴一般都小於32位,因此用唯一前綴構造的二叉線索的深度往往不到32層。圖中較粗的折線就是前綴0101在這個二叉線索中的路徑。二叉線索中的小圓圈是中間節點,而在路徑終點的小方框是葉節點(也叫做外部節點)。每個葉節點代表一個唯一前綴。節點之間的連線旁邊的數字表示這條邊在唯一前綴中對應的比特是0或1。
假定有一個IP地址是1001 1011 0111 1010 0000 0000 0000 0000,需要查找該地址是否在此二叉線索中。我們從最左邊查起。很容易發現,查到第三個字元(即前綴10後面的0)時,在二叉線索中就找不到匹配的,說明這個地址不在這個二叉線索中。
以上只是給出了二叉線索這種數據結構的用法,而並沒有說明「與唯一前綴匹配」和「與網路前綴匹配」的關系。顯然,要將二叉線索用於路由表中,還必須使二叉線索中的每一個葉節點包含所對應的網路前綴和子網掩碼。當搜索到一個葉節點時,就必須 將尋找匹配的目的地址和該葉節點的子網掩碼進行逐位「與」運算,看結果是否與對應的網路前綴相匹配 。若匹配,就按下一跳的介面轉發該分組。否則,就丟棄該分組。
總之,二叉線索只是提供了一種可以快速在路由表中找到匹配的葉節點的機制。但這是否和網路前綴匹配,還要和子網掩碼進行一次邏輯與的運算。
「為了提高二叉線索的查找速度,廣泛使用了各種 壓縮技術 。例如,在圖4-26中的最後兩個地址,其最前面的4位都是1011。因此,只要一個地址的前4位是1011,就可以跳過前面4位(即壓縮了4個層次)而直接從第5位開始比較。這樣就可以減少查找的時間。當然,製作經過壓縮的二叉線索需要更多的計算,但由於每一次查找路由表時都可以提高查找速度,因此這樣做還是值得的。」
4. 計算機網路謝希仁編著的第六版第四章課後習題答案
第4 章 網路層
4-01網路層向上提供的服務有哪兩種?試比較其優缺點。
答案:虛電路服務和數據報服務。
虛電路的優點:虛電路服務是面向連接的,網路能夠保證分組總是按照發送順序到達目的站,且不丟失、不重復,提供可靠的端到端數據傳輸;目的站地址僅在連接建立階段使用,每個分組使用短的虛電路號,使分組的控制信息部分的比特數減少,減少了額外開銷;端到端的差錯處理和流量控制可以由分組交換網負責,也可以由用戶機負責。虛電路服務適用於通信信息量大、速率要求高、傳輸可靠性要求高的場合。
虛電路的缺點:虛電路服務必須建立連接;屬於同一條虛電路的分組總是按照同一路由進行轉發;當結點發生故障時,所有通過出故障的結點的虛電路均不能工作。
數據報的優點:數據報服務不需要建立連接;每個分組獨立選擇路由進行轉發,當某個結點發生故障時,後續的分組可以另選路由,因而提高了通信的可靠性。數據報服務的靈活性好,適用於傳輸可靠性要求不高、通信子網負載不均衡、需要選擇最佳路徑的場合。
數據報的缺點:數據報服務是面向無連接的,到達目的站時不一定按發送順序,傳輸中的分組可能丟失和重復,提供面向無連接的、不可靠的數據傳輸;每個分組都要有目的站的全地址;當網路發生故障是,出故障的結點可能會丟失數據,一些路由可能會發生變化;端到端的差錯處理和流量控制只由主機負責。
答案太多傳不上來,留下郵箱可以發給你..........
5. 計算機網路第4章(網路層)
計算機網路微課堂 的筆記整理
筆記也放到了 我的github 和 我的gitee 上
一種觀點:讓網路負責可靠交付
發送方 發送給 接收方 的所有分組都沿著同一條虛電路傳送
另一種觀點:網路提供數據報服務
發送方 發送給 接收方 的分組可能沿著不同路徑傳送
A類地址
B類地址
C類地址
練習
IP 地址的指派范圍
一般不使用的特殊的 IP 地址
IP 地址的一些重要特點
(1) IP 地址是一種分等級的地址結構 。分兩個等級的好處是:
(2) 實際上 IP 地址是標志一個主機(或路由器)和一條鏈路的介面 。
(3) 用轉發器或網橋連接起來的若干個區域網仍為一個網路 ,因此這些區域網都具有同樣的網路號 net-id。
(4) 所有分配到網路號 net-id 的網路,無論是范圍很小的區域網,還是可能覆蓋很大地理范圍的廣域網,都是平等的。
在 ARPANET 的早期,IP 地址的設計確實不夠合理:
如果想要將原來的網路劃分成三個獨立的網路
所以是否可以從主機號部分借用一部分作為子網號
基本思路
劃分為三個子網後對外仍是一個網路
舉例
例子1
例子2
默認子網掩碼
無分類域間路由選擇 CIDR (Classless Inter-Domain Routing)。
舉例
給定一個IPv4地址快,如何將其劃分成幾個更小的地址塊,並將這些地址塊分配給互聯網中不同網路,進而可以給各網路中的主機和路由器介面分配IPv4地址
劃分子網的IPv4就是定長的子網掩碼
舉例
無分類編址的IPv4就是變長的子網掩碼
舉例
舉例
源主機如何知道目的主機是否與自己在同一個網路中,是直接交付,還是間接交付?
主機C如何知道路由器R的存在?
路由器收到IP數據報後如何轉發?
假設IP數據報首部沒有出錯,路由器取出IP數據報首部各地址欄位的值
接下來路由器對該IP數據報進行查表轉發
路由器是隔離廣播域的
靜態路由配置
舉例
默認路由
舉例
默認路由可以被所有網路匹配,但路由匹配有優先順序,默認路由是優先順序最低的
特定主機路由
舉例
有時候,我們可以給路由器添加針對某個主機的特定主機路由條目
一般用於網路管理人員對網路的管理和測試
靜態路由配置錯誤導致路由環路
舉例
假設將R2的路由表中第三條目錄配置錯了下一跳
這導致R2和R3之間產生了路由環路
聚合了不存在的網路而導致路由環路
舉例
正常情況
錯誤情況
解決方法
網路故障而導致路由環路
舉例
解決方法
添加故障的網路為黑洞路由
6. 計算機網路(四)——網路層
網際層的IP協議及配套協議 :
(1) 從收到的分組的首部提取 目的 IP 地址 D 。
(2) 先判斷是否為直接交付,對路由器直接相連的網路逐個檢查:用各網路的 子網掩碼和 D 逐位相「與」 ,看是否和相應的網路地址匹配。若匹配,則將分組直接交付。否則就是間接交付,執行 (3)。
(3) 若路由表中有目的地址為 D 的 特定主機路由 ,則將分組傳送給指明的下一跳路由器;否則,執行 (4)。
(4) 對路由表中的每一行,將 子網掩碼和 D 逐位相「與」 。若結果與該行的目的網路地址匹配,則將分組傳送給該行指明的下一跳路由器;否則,執行 (5)。
(5) 若路由表中有一個默認路由,則將分組傳送給路由表中所指明的默認路由器;否則,執行 (6)。
(6) 報告轉發分組出錯。
從匹配結果中選擇具有最長網路前綴的路由:最長前綴匹配
OSPF 的其他特點:
7. 計算機網路自頂向下方法--網路層
R1. 我們回顧一下本書中使用的某些術語。前面講過,運輸層的分組名稱是報文段,數據鏈路層的分組名字是幀。網路層的分組名字是什麼?前面講過,路由器和鏈路層交換機都稱為分組交換機。路由器和鏈路層交換機間的根本區別是什麼?回想我們對數據報網路和虛電路網路都使用術語路由器。
R2. 在數據報網路中,網路層最重要的兩個功能是什麼?在虛電路網路中,網路層的3個最重要的功能是什麼?
R3. 路由選擇和轉發的區別是什麼?
R4. 在數據報網路和虛電路網路中,路由器都使用轉發表嗎?如果是,描述用於這兩類網路的轉發表。
R5. 描述某些網路層能為單個分組提供的某些假想的服務。對於分組流進行相同的描述。網際網路的網路層為你提供了這些假想服務嗎?ATM的CBR服務模型提供了該假想服務嗎?ATM的ABR服務模型提供類該假想服務嗎?
R6. 列出某些得益於ATM的CBR服務模型的應用。
R7. 討論為什麼在高速路由器的每個輸入埠都存儲轉發表的影子副本。
R8. 4.3節中討論了3類交換結構。列出並簡要討論每一類交換結構。哪一種(如果有的話)能夠跨越交換結構並行發送多個分組?
R9. 描述在輸入埠會出現分組丟失的原因。描述在輸入埠如何消除分組丟失(不使用無限大緩存區)。
R10. 描述在輸出埠出現分組丟失的原因。通過增加交換結構速率,能夠防止這種丟失嗎?
R11. 什麼是HOL阻塞?它出現在輸入埠還是輸出埠?
R12. 路由器有IP地址嗎?如果有,有多少個?
R13. IP地址223.1.3.27的32比特二進制等價形式是什麼?
R14. 考察使用DHCP獲得它的IP地址,網路掩碼,默認路由器和其本地DNS伺服器的IP地址的主機。列出這些值。
R15. 假設在一個源主機和一個目的主機之間有3台路由器。不考慮分片,一個從源主機發送給目的主機的IP報文將通過多少個埠?為了將數據報從源移動到目的地需要檢索多少個轉發表?
R16. 假設某應用每20ms生成一個40位元組的數據塊,每塊封裝在一個TCP報文中,TCP報文再封裝在一個IP數據報中。每個數據報的開銷有多大?應用數據所佔的百分比是多少?
R17. 假設主機A向主機B發送封裝在一個IP數據報中的TCP報文段。當主機B接收到該數據報時,主機B中的網路層應該如何知道它應當將該報文段(即數據報的有效載荷)交給TCP而不是UDP或某個其他東西呢?
R18. 假定你購買了一個無線路由器並將其與電纜數據機相連,並且你的ISP動態地為你連接的設備(即你的無線路由器)分配一個IP地址。還假定你家有5台PC,均使用802.11以無線方式與該無線路由器相連。怎樣為這5台PC分配IP地址?該無線路由器使用NAT嗎?為什麼?
R19. 比較IPv4和IPv6首部欄位。它們有某些欄位是相同的嗎?
R20. 有人說當IPv6通過IPv4路由器建隧道時。IPv6將IPv4隧道作為鏈路層協議。你同意這種說法嗎?為什麼?
R21. 比較和對照鏈路狀態和距離向量路由選擇演算法?
R22. 討論網際網路的等級制組織是怎樣使得其能夠擴展為數以百萬計用戶的。
R23. 每個自治系統使用相同的AS內部路由選路演算法是必要的嗎?為什麼?
R24. 考慮圖4-37。從D中的初始表開始,假設D收到來自A的下面的通告:
D中的表會改變嗎?如果是,怎樣變化?
R25. 比較RIP和OSPF使用的通告。
R26. 填空:RIP通告通常宣稱到各目的地的跳數。另一方面,BGP則是通告到各目的地的_____?
R27. 為什麼在網際網路中用到了不同類型的AS間與AS內部選路協議?
R28. 為什麼策略考慮對於AS內部協議(如OSPF和RIP)與對於AS間路由選擇協議(如BGP)一樣重要呢?
R29. 定義和對比下列術語:子網,前綴和BGP路由。
R30. BGP是怎樣使用NEXT-HOP屬性的?它是怎樣使用AS-PATH屬性的?
R31. 描述一個較高層ISP的網路管理員在配置BGP時是如何實現策略的。
TODO----HERE
4.6.32 通過多個單播實現廣播抽象與通過支持廣播的單個網路(路由器)實現廣播抽象之間有什麼重要區別嗎?
答:N次單播效率低,需要知道接收者的地址,消耗大。但是使用廣播的話可以通過洪泛方法發送消息。
4.6.33 對於我們學習的3種一般的廣播通信方法(無控制洪泛,受控洪泛和生成樹廣播),下列說法正確嗎?可以假定分組不會因緩存溢出而丟失,所有分組以它們發送的順序交付給鏈路。
a.一個節點可能接收到同一個分組的多個拷貝。
b.一個節點可能跨越相同的出鏈路轉發多個分組的拷貝。
答:無控制洪泛:a對,b對。受控洪泛:a對,b錯。生成樹廣播:a錯,b錯。
4.6.34 當一台主機加入一個多播組時,它必須將其IP地址改變為它所加入的多播組的地址嗎?
答:對錯誤。
4.6.35 IGMP和廣域多播選路協議所起的作用是什麼?
答:IGMP運行在一台主機與其直接相連的路由器之間。IGMP允許主機指定路由器要加入的組播網。然後由組播路由器與運行組播路由協議的其他組播路由器一起工作。
4.6.36 在多播選路場合中,一棵組共享的樹與一顆基於源的樹之間有什麼區別?
答:一個組共享的樹來為組中所有發送方分發流量,一個是為每個獨立的發送方構建一顆特定源的選路樹。
8. 計算機網路_網路層
在計算機網路領域,網路層應該向運輸層提供怎樣的服務(面向連接還是無連接)曾引起了長期的爭論,爭論焦點的實質就是:在計算機通信中,可靠交付應當由誰來負責?是 網路 還是 端系統
只是一條 邏輯上的連接 ,分組都沿著這條邏輯連接按照存儲轉發方式傳送,並不是真正建立了一條物理連接。
請注意,電路交換的 電話通信 是先建立了一條 真正的連接 。因此分組交換的虛連接和電路交換的連接只是類似,但並不完全一樣。
數據報服務
網際協議IP是TCP/IP體系中兩個最主要的協議之一,與IP協議配套使用的還有三個協議
互連在一起的網路要進行通信,會遇到許多問題要解決
網路互連要使用一些中間設備
中間設備 又稱為 中間系統 或 中繼 系統
如果我們只從網路層考慮問題,那麼IP數據報就可以想像是在網路層中傳送。
每一類地址都由兩個固定長度的欄位組成,其中一個 欄位是 網路號 net-id ,它標志主機(或路由器)所連接到的網路,而另一個欄位則是**主機號 host-id
**,它標志該主機(或路由器)
可以記為
觀察上圖
比較重要的一點是要區別IP地址與 硬體地址 的區別
從層次的角度來看, 物理地址是數據鏈路層和物理層使用的地址,而IP地址是網路層和以上使用的地址,是一種邏輯地址(稱IP地址是邏輯地址是因為IP地址是用 軟體實現的)
有 四個A類網路 通過三個路由器連接在一起,每個網路上都可能有成千上萬個主機。可以想像,若按目的主機號來製作路由表,則所得出的路由表就會過於龐大。丹若按主機所在的 網路地址 來製作路由表,那麼每一個路由器中的路由表就只包含 四個項目 。這樣可以大大簡化路由表。
使用這樣的簡化圖,我們可以不用關心某個網路內部的具體拓撲結構及連接在該網路上有多少台計算機,他還強調了在互聯網上轉發分組時,是 從一個路由器轉發到下一個路由器 。
根據目的網路地址就能確定下一跳路由器,這一點做的結果是:
雖然網際網路所有分組轉發都是 基於目的主機所在的網路 ,但在大多數情況下都允許有這樣的特例,即對特定的目的主機指明一個路由。這種路由叫做 特定主機路由 ,採用特定主機路由可使網路管理人員能更方便地控制網路和測試網路,同時也可在需要考慮某種安全問題時採用這種特定主機路由。
IP 數據報的首部中 沒有地方 可以用來指明「下一跳路由器的 IP 地址」,當路由器收到待轉發的數據報, 不是 將下一跳路由器的 IP 地址填入 IP 數據報,而是 送交下層的網路介面軟體 。網路介面軟體使用 ARP 負責將下一跳路由器的 IP 地址轉換成 硬體地址 ,並將此硬體地址放在鏈路層的** MAC 幀 的首部,然後根據這個 硬體地址**找到下一跳路由器。
(1) 從數據報的首部提取目的主機的 IP 地址 D, 得出目的網路地址為 N。
(2) 若網路 N 與此路由器直接相連,則把數據報直接交付目的主機 D;否則是間接交付,執行(3)。
(3) 若路由表中有目的地址為 D 的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行(4)。
(4) 若路由表中有到達網路 N 的路由,則把數據報傳送給路由表指明的下一跳路由器;否則,執行(5)。
(5) 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行(6)。
(6) 報告轉發分組出錯。
在 ARPANET 的早期,IP 地址的設計確實不夠合理。
從 1985 年起在 IP 地址中又增加了一個「子網號欄位」,使兩級的 IP 地址變成為三級的 IP 地址。這種做法叫作劃分子網(subnetting) 。劃分子網已成為網際網路的正式標准協議。
請注意現在子網號為3的網路的 網路地址 是145.13.3.0(既不是原來兩級的IP地址的網路地址145.13.0.0,也不是簡單的子網號3),為了使路由器能很方便的從數據報中的目的IP地址中提取所要找的子網的網路地址,路由器就要使用三級IP地址的子網掩碼(如上圖,三級IP地址的子網掩碼),它也是32位,由一串1和跟隨的一串0組成。子網掩碼中的1對應於IP地址中原來二級地址中的16位網路號加上新增加的8位子網號,而子網掩碼中的0對應於現在的8位主機號。 雖然RFC文檔中沒有規定子網掩碼中的一串1必須是連續的,但卻極力推薦在子網掩碼中選用連續的1,以避免發生錯誤
不管有沒有劃分子網,只要把子網掩碼和IP地址進行逐位相 與 運算,就立即得出網路地址來,這樣路由器處理到來的分組時可以採用相同的演算法。
歸納下上述的要點,從網路145.13.0.0外面看,這就是一個普通的B類網路,但進入這個網路後(即到了路由器),就看到了還有許多網路(即劃分了子網後的許多網路),其網路地址為145.13.x.0(這里x可以表示不同的數值),而這些網路的子網掩碼都是24個連1跟上8個連0。總之,在這個網路的內外,看到的網路是不同的
為了更便於查路由表,現在網際網路的標准規定:所有的網路都必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄。如果一個網路不劃分子網,那麼該網路的子網掩碼就使用默認子網掩碼,默認子網掩碼中1的位置和IP地址中的網路號欄位正好相對應。因此,若用默認子網掩碼和某個不劃分子網的IP地址逐位相與,就應當能夠得出該IP地址的網路地址來,這樣做可以不用查找該地址的類別位就能知道這是哪一類的IP地址 (書上原話 沒懂 !!!!)
P137有一個表格寫B類子網劃分選擇(使用固定長度子網)
有一個例題請見教材P139
劃分子網在一定程度上緩解了網際網路在發展中遇到的困難。然而在 1992 年網際網路仍然面臨三個必須盡早解決的問題,這就是:
無分類的兩級編址的記法是:
CIDR 還使用 斜線記法 (slash notation),它又稱為 CIDR記法 ,即在 IP 地址後面加上一個斜線「/」,然後寫上網路前綴所佔的位數(這個數值對應於三級編址中子網掩碼中 1 的個數)。CIDR 把網路前綴都相同的連續的 IP 地址組成 「CIDR 地址塊」 。
為了更方便的進行路由選擇,CIDR使用32位的地址掩碼,地址掩碼由一串1和一串0組成,而1的個數就是網路前綴的長度。例如/20地址塊的地址掩碼是:11111111 11111111 11110000 00000000 20個連續的1,斜線記法中,斜線後面的數字就是地址掩碼中1的個數
這個 ISP 共有 64 個 C 類網路。如果不採用 CIDR 技術,則在與該 ISP 的路由器交換路由信息的每一個路由器的路由表中,就需要有 64 個項目。但採用地址聚合後,只需用路由聚合後的 1 個項目 206.0.64.0/18 就能找到該 ISP。
// 這里還沒太懂.... 就是共有多少個幾類網路那裡
報文格式
ICMP差錯報告報文的數據欄位的內容
9. 計算機網路:網路層(2)
如圖,一個IP數據報由首部和數據兩部分組成。首部的前一部分是固定長度,共20位元組,是所有IP數據報必須具有的。在首部的固定部分的後面是一些可選欄位,其長度是可變的。
(1)版本
佔4位,指IP協議的版本。通信雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號為4(即IPv4)。也有使用IPv6的(即版本6的IP協議)。
(2)首部長度
佔4位,可表示的最大十進制數值是15。 這個欄位所表示數的單位是32位字(1個32位字長是4位元組),因此,當I的首部長度為1111時(即十進制的15),首部長度就達到最大值60位元組。當分組的首部長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。 因此數據部分永遠在4位元組的整數倍時開始,這樣在實現IP協議時較為方便。首部長度限制為60位元組的缺點是有時可能不夠用。但這樣做是希望用戶盡量減少開銷。最常用的首部長度就是20位元組(即首部長度為0101),這時不使用任何選項。
(3)區分服務
佔8位,用來獲得更好的服務。這個欄位在舊標准中叫做服務類型,但實際上一直沒有被使用過。1998年ITF把這個欄位改名為區分服務DS( Differentiated Services。只有在使用區分服務時,這個欄位才起作用。在一般的情況下都不使用這個欄位。
(4)總長度
總長度指首部和數據之和的長度,單位為位元組。總長度欄位為16位,因此數據報的最大長度為216-1=65535位元組。
在IP層下面的每一種數據鏈路層都有其自己的幀格式,其中包括幀格式中的數據欄位的最大長度,這稱為最大傳送單元MTU( Maximum Transfer Unit)。當一個IP數據報封裝成鏈路層的幀時,此數據報的總長度(即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。雖然使用盡可能長的數據報會使傳輸效率提高,但由於乙太網的普遍應用,所以實際上使用的數據報長度 很少有超過1500位元組 的。為了不使IP數據報的傳輸效率降低,有關IP的標准文檔規定,所有的主機和路由器必須能夠處理的IP數據報長度不得小於576位元組。這個數值也就是最小的IP數據報的總長度。當數據報長度超過網路所容許的最大傳送單元MTU時,就必須把過長的數據報進行分片後才能在網路上傳送。這時,數據報首部中的「總長度」欄位不是指未分片前的數據報長度,而是指分片後的每一個分片的首部長度與數據長度的總和。
(5)標識 (identification)
佔16位。軟體在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識欄位。但這個「標識」並不是序號,因為IP是無連接服務,數據報不存在按序接收的問題。當數據報由於長度超過網路的MTU而必須分片時,這個標識欄位的值就被復制到所有的數據報片的標識欄位中。相同的標識欄位的值使分片後的各數據報片最後能正確地重裝成為原來的數據報。
(6)標志(flag)
佔3位,但目前只有兩位有意義。
標志欄位中的最低位記為 MF ( More Fragment)。MF=1即表示後面「還有分片」的數據報。MF=0表示這已是若千數據報片中的最後一個。
標志欄位中間的一位記為 DF (Dont Fragment),意思是「不能分片」。只有當DF=0時才允許分片。
(7)片偏移
佔13位。片偏移指出:較長的分組在分片後,某片在原分組中的相對位置。也就是說,相對於用戶數據欄位的起點,該片從何處開始。片偏移以8個位元組為偏移單位。這就是說,每個分片的長度一定是8位元組(64位)的整數倍。
(8)生存時間
佔8位,生存時間欄位常用的英文縮寫是TTL( Time To live),表明是數據報在網路中的壽命。由發出數據報的源點設置這個欄位。其目的是防止無法交付的數據報無限制地在網際網路中兜圈子(例如從路由器R1轉發到R2,再轉發到R3,然後又轉發到R1),因而白白消耗網路資源。最初的設計是以秒作為TTL值的單位。每經過一個路由器時,就把TTL減去數據報在路由器所消耗掉的一段時間。若數據報在路由器消耗的時間小於1秒,就把TTL值減1。當TTL值減為零時,就丟棄這個數據報然而隨著技術的進步,路由器處理數據報所需的時間不斷在縮短,一般都遠遠小於1秒鍾,後來就把TTL欄位的功能改為「跳數限制」(但名稱不變)。路由器在轉發數據報之前就把TTL值減1。若TTL值減小到零,就丟棄這個數據報,不再轉發。因此,現在TTL的單位不再是秒,而是跳數。 TTL的意義是指明數據報在網際網路中至多可經過多少個路由器 。顯然,數據報能在網際網路中經過的路由器的最大數值是255。若把TTL的初始值設置為1,就表示這個數據報只能在本區域網中傳送。因為這個數據報一傳送到區域網上的某個路由器,在被轉發之前TTL值就減小到零,因而就會被這個路由器丟棄。
(9)協議
佔8位,協議欄位指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。
過程大致如下:
(1)從數據報的首部提取目的主機的IP地址D,得出目的網路地址為N。
(2)若N就是與此路由器直接相連的某個網路地址,則進行直接交付,不需要再經過其他的路由器,直接把數據報交付給目的主機(這里包括把目的主機地址D轉換為具體的硬體地址,把數據報封裝為MAC幀,再發送此幀);否則就是間接交付,執行(3)。
(3)若路由表中有目的地址為D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行(4)。
(4)若路由表中有到達網路N的路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行(5)
(5)若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行(6)。
(6)報告轉發分組出錯。
在進行更詳細的轉發解釋之前,先要了解一下子網掩碼:
上一篇說到了二級IP地址,也就是IP地址由網路號和主機號組成。
二級IP地址有以下缺點:
第一,IP地址空間的利用率有時很低每一個A類地址網路可連接的主機數超過1000萬,而每一個B類地址網路可連接的主機數也超過6萬。然而有些網路對連接在網路上的計算機數目有限制,根本達不到這樣大的數值。例如10 BASE-T乙太網規定其最大結點數只有1024個。這樣的乙太網若使用一個B類地址就浪費6萬多個IP地址,地址空間的利用率還不到2%,而其他單位的主機無法使用這些被浪費的地址。有的單位申請到了一個B類地址網路,但所連接的主機數並不多,可是又不願意申請一個足夠使用的C類地址,理由是考慮到今後可能的發展。IP地址的浪費,還會使IP地址空間的資源過早地被用完。
第二,給每一個物理網路分配一個網路號會使路由表變得太大因而使網路性能變壞。
每一個路由器都應當能夠從路由表査出應怎樣到達其他網路的下一跳路由器。因此,互聯網中的網路數越多,路由器的路由表的項目數也就越多。這樣,即使我們擁有足夠多的IP地址資源可以給每一個物理網路分配一個網路號,也會導致路由器中的路由表中的項目數過多。這不僅增加了路由器的成本(需要更多的存儲空間),而且使查找路由時耗費更多的時間,同時也使路由器之間定期交換的路由信息急劇增加,因而使路由器和整個網際網路的性能都下降了。
第三,兩級IP地址不夠靈活。
有時情況緊急,一個單位需要在新的地點馬上開通一個新的網路。但是在申請到一個新的IP地址之前,新增加的網路是不可能連接到網際網路上工作的。我們希望有一種方法,使一個單位能隨時靈活地增加本單位的網路,而不必事先到網際網路管理機構去申請新的網路號。原來的兩級IP地址無法做到這一點。
於是為解決上述問題,從1985年起在IP地址中又增加了一個「子網號欄位」,使兩級IP地址變成為三級IP地址,它能夠較好地解決上述問題,並且使用起來也很靈活。這種做法叫作劃分子網 (subnetting),或子網定址或子網路由選擇。劃分子網已成為網際網路的正式標准協議。
劃分子網的基本思路如下:
(1)一個擁有許多物理網路的單位,可將所屬的物理網路劃分為若干個子網 subnet)。劃分子網純屬一個單位內部的事情。本單位以外的網路看不見這個網路是由多少個子網組成,因為這個單位對外仍然表現為一個網路。
(2)劃分子網的方法是從網路的主機號借用若干位作為子網號 subnet-id,當然主機號也就相應減少了同樣的位數。於是兩級IP地址在本單位內部就變為三級IP地址:網路號、子網號和主機號。也可以用以下記法來表示:
IP地址:=(<網路號>,<子網號>,<主機號>}
(3)凡是從其他網路發送給本單位某個主機的IP數據報,仍然是根據IP數據報的目的網路號找到連接在本單位網路上的路由器。但此路由器在收到IP數據報後,再按目的網路號和子網號找到目的子網,把IP數據報交付給目的主機。
簡單來說就是原來的IP地址總長度不變,把原來由「網路號+主機號」組成的IP地址,變為了「網路號+子網號+主機號」,因為其他網路找當前網路的主機時,使用的還是網路號,所以外面的網看不見當前網路的子網。當本網的路由器在收到IP數據報後,按目的網路號和子網號找到目的子網,把IP數據報交付給目的主機。
現在剩下的問題就是:假定有一個數據報(其目的地址是145.133.10)已經到達了路由器R1。那麼這個路由器如何把它轉發到子網145.3.3.0呢?
我們知道,從IP數據報的首部並不知道源主機或目的主機所連接的網路是否進行了子網的劃分。這是因為32位的IP地址本身以及數據報的首部都沒有包含任何有關子網劃分的信息。因此必須另外想辦法,這就是使用子網掩碼( (subnet mask)。
子網掩碼,簡單來說就是把除了主機號設置為0,其他位置的數字都設置為1。
以B類地址為例:
把三級IP地址的網路號與子網號連起來,與子網掩碼做「與」運算,就得到了子網的網路地址。
在網際網路的標准規定:所有的網路都必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄。如果一個網路不劃分子網,那麼該網路的子網掩碼就使用默認子網掩碼。
那麼既然沒有子網,為什麼還要使用子網掩碼?
這就是為了更便於査找路由表。
默認子網掩碼中1的位置和IP地址中的網路號欄位 net-id正好相對應。因此,若用默認子網掩碼和某個不劃分子網的IP地址逐位相「與」(AND),就應當能夠得出該IP地址的網路地址來。這樣做可以不用查找該地址的類別位就能知道這是哪一類的IP地址。顯然,
子網掩碼是一個網路或一個子網的重要屬性。在RFC950成為網際網路的正式標准後,路由器在和相鄰路由器交換路由信息時,必須把自己所在網路(或子網)的子網掩碼告訴相鄰路由器。在路由器的路由表中的每一個項目,除了要給出目的網路地址外,還必須同時給出該網路的子網掩碼。若一個路由器連接在兩個子網上就擁有兩個網路地址和兩個子網掩碼。
以一個B類地址為例,說明可以有多少種子網劃分的方法。在採用固定長度子網時,所劃分的所有子網的子網掩碼都是相同的。
表中的「子網號的位數」中沒有0,1,15和16這四種情況,因為這沒有意義。雖然根據已成為網際網路標准協議的RFC950文檔,子網號不能為全1或全0,但隨著無分類域間路由選擇CIDR的廣泛使用,現在全1和全0的子網號也可以使用了,但一定要謹慎使用,要弄清你的路由器所用的路由選擇軟體是否支持全0或全1的子網號。這種較新的用法我們可以看出,若使用較少位數的子網號,則每一個子網上可連接的主機數就較多。
反之,若使用較多位數的子網號,則子網的數目較多但每個子網上可連接的主機數就較少因此我們可根據網路的具體情況(一共需要劃分多少個子網,每個子網中最多有多少個主機)來選擇合適的子網掩碼。
所以,劃分子網增加了靈活性,但卻減少了能夠連接在網路上的主機總數。
在劃分子網的情況下,分組轉發的演算法必須做相應的改動。
使用子網劃分後,路由表必須包含以下三項內容:目的網路地址、子網掩碼和下一跳地址。
所以之前的流程變成了下面這樣:
(1)從收到的數據報的首部提取目的IP地址D。
(2)先判斷是否為直接交付。對路由器直接相連的網路逐個進行檢查:用各網路的子網掩碼和D逐位相「與」(AND操作),看結果是否和相應的網路地址匹配。若匹配,則把分組進行直接交付(當然還需要把D轉換成物理地址,把數據報封裝成幀發送出去),轉發任務結束。否則就是間接交付,執行(3)。
(3)若路由表中有目的地址為D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行(4)。
(4)對路由表中的每一行(目的網路地址,子網掩碼,下一跳地址),用其中的子網掩碼和D逐位相「與」(AND操作),其結果為N。若N與該行的目的網路地址匹配,則把數據報傳送給該行指明的下一跳路由器;否則,執行(5)。
5)若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行(6)
(6)報告轉發分組出錯。