本博客爲個人筆記,篇幅較長,內容較多,因時間原因,內容中的重點部分沒有重點標出,望諒解。如有錯誤,歡迎各位前來糾正。
目錄
4.IP數據報中沒有下一跳路由器的IP地址,那麼待轉發的數據報又怎樣能夠找到下一跳路由器呢?
一.網絡層提供的兩種服務
1.虛電路服務
部分人認爲,計算機網絡也應模仿打電話所使用的面向連接的通信方式。當兩臺計算機進行通信時,也應當先建立連接(但在分組交換中是建立一條虛電路)以預留雙方通信所需的一切網絡資源。然後雙方就沿着已建立的虛電路發送分組。這樣的分組的首部不需要填寫完整的目的主機地址,而只需要填寫這條虛電路的編號(一個不大的整數),因而減少了分組的開銷。這種通信方式如果再使用可靠傳輸的網絡協議,就可使所發送的分組無差錯按序到達終點,當然也不丟失、不重複。在通信結束後要釋放建立的虛電
路。下圖是網絡提供虛電路服務的示意圖。主機H1和H2之間交換的分組都必須在事先建立的虛電路上傳送。
2.電話機與現代計算機的區別
互聯網的先驅者認爲,電信網提供的端到端可靠傳輸的服務對電話業務無疑是很合適的,因爲電信網的終端(電話機)非常簡單,沒有智能,也沒有差錯處理能力。因此電信網必須負責把用戶電話機產生的話音信號可靠地傳送到對方的電話機,使還原後的話音質量符合技術規範的要求。但計算機網絡的端系統是有智能的計算機。計算機有很強的差錯處理能力(這點和傳統的電話機有本質上的差別)。因此,互聯網在設計上就採用了和電信網完全不同的思路。
3.數據報服務
互聯網採用的設計思路是這樣的:網絡層向上只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務。這裏的“數據報是互聯網的設計者最初使用的名詞,其實數據報(或IP數據報)就是我們經常使用的“分組”。
網絡在發送分組時不需要先建立連接。每一個分組(也就是IP數據報)獨立發送,與其前後的分組無關(不進行編號)。網絡層不提供服務質量的承諾。也就是說,所傳送的分組可能出錯、丟失、重複和失序(即不按序到達終點),當然也不保證分組交付的時限。由於傳輸網絡不提供端到端的可靠傳輸服務,這就使網絡中的路由器比較簡單,且價格低廉(與電信網的交換機相比較)。如果主機(即端系統)中的進程之間的通信需要是可靠的,那麼就由網絡的主機中的運輸層負責(包括差錯處理、流量控制等)。採用這種設計思路的好處是:網絡造價大大降低,運行方式靈活,能夠適應多種應用。
下圖給出了網絡提供數據報服務的示意圖。主機H1向H2發送的分組各自獨立地選擇路由,並且在傳送的過程中還可能丟失。
4.虛電路服務與數據報服務的主要區別
二.網際協議IP
擴展:
網際協議IP是TCP/IP體系中兩個最主要的協議之,與IP協議配套使用的還有三個協議
- 地址解析協議ARP( Address resolution protoco)
- 網際控制報文協議ICMP( Internet Control Message Protocol)
- 網際組管理協議IGMP( nternet Group Management Protocol)
下圖畫出了這三個協議和網際協議IP的關係。在這一層中,ARP畫在最下面,因爲IP經常要使用這個協議。ICMP和IGMP畫在這一層的上部,因爲它們要使用IP協議。
1.虛擬互聯網絡
能不能讓大家都使用相同的網絡,這樣可使網絡互連變得比較簡單。答案是不行的,因爲用戶的需求是多種多樣的,沒有一種單一的網絡能夠適應所有用戶的需求。
從一般的概念來講,將網絡互相連接起來要使用一些中間設備。根據中間設備所在的層次,可以有以下四種不同的中間設備:
- 物理層使用的中間設備叫做轉發器
- 數據鏈路層使用的中間設備叫做網橋或橋接器
- 網絡層使用的中間設備叫做路由器
- 在網絡層以上使用的中間設備叫做網關。用網關連接兩個不兼容的系統需要在高層進行協議的轉換
現在我們討論網絡互連時,都是指用路由器進行網絡互連和路由選擇。路由器其實就是一臺專用計算機,用來在互聯網中進行路由選擇。圖a表示有許多計算機網絡通過一些路由器進行互連。由於參加互連的計算機網絡都使用相同的網際協議IP(,因此可以把互連以後的計算機網絡看成如圖b所示的一個虛擬互連網絡。
所謂虛擬互連網絡也就是邏輯互連網絡,它的意思就是互連起來的各種物理網絡的異構性本來是客觀存在的,但是我們利用IP協議就可以使這些性能各異的網絡在網絡層上看起來好像是一個統一的網絡。這種使用IP協議的虛擬互連網絡可簡稱爲IP網(IP網是虛擬的,但平常不必每次都強調“虛擬”二字)。使用IP網的好處是:當IP網上的主機進行通信時,就好像在一個單個網絡上通信一樣,它們看不見互連的各網絡的具體異構細節(如具體的編址方案、路由選擇協議,等等)。
當很多異構網絡通過路由器互連起來時,如果所有的網絡都使用相同的IP協議,那麼在網絡層討論問題就顯得很方便。現在用一個例子來說明。
在下圖所示的互聯網中的源主機H1要把一個P數據報發送給目的主機H2。根據分組交換的存儲轉發概念,主機H1先要查找自己的路由表,看目的主機是否就在本網絡上。如是,則不需要經過任何路由器而是直接交付,任務就完成了。如不是,則必
須把IP數據報發送給某個路由器(圖中的R1)。R1在查找了自己的路由表後,知道應當把數據報轉發給R2進行間接交付。這樣一直轉發下去,最後由路由器R知道自己是和H2連接在同一個網絡上,不需要再使用別的路由器轉發了,於是就把數據報直接交付目的主機H2。圖中畫出了源主機、目的主機以及各路由器的協議棧。我們注意到,主機的協議棧共有五層,但路由器的協議棧只有下三層。圖中還畫出了數據在各協議棧中流動的方向(用黑色粗線表示)。總之,這裏強調的是:互聯網可以由多種異構網絡互連組成如果我們只從網絡層考慮問題,那麼IP數據報就可以想象是在網絡層中傳送,其傳送路徑是
2.分類的IP地址
關於IP地址的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/104672860
IP地址具有以下一些重要特點:
- 每一個IP地址都由網絡號和主機號兩部分組成。從這個意義上說,IP地址是一種分等級的地址結構。分兩個等級的好處是:第一,IP地址管理機構在分配IP地址時只分配網絡號(第一級),而剩下的主機號(第二級)則由得到該網絡號的單位自行分配。這樣就方便了PP地址的管理;第二,路由器僅根據目的主機所連接的網絡號來轉發分組(而不考慮目的主機號),這樣就可以使路由表中的項目數大幅度減少,從而減小了路由表所佔的存儲空間以及查找路由表的時間。
- 實際上P地址是標誌一臺主機(或路由器)和一條鏈路的接口。當一臺主機同時連接到兩個網絡上時,該主機就必須同時具有兩個相應的IP地址,其網絡號必須是不同的。由於一個路由器至少應當連接到兩個網絡,因此一個路由器至少應當有兩個不同的IP地址。這好比一個建築正好處在北京路和上海路的交叉口上,那麼這個建築就可以擁有兩個門牌號碼。例如,北京路4號和上海路37號。
- 按照互聯網的觀點,一個網絡是指具有相同網絡號 的主機的集合,因此,用轉發器或網橋連接起來的若干個局域網仍爲一個網絡,因爲這些局域網都具有同樣的網絡號。具有不同網絡號的局域網必須使用路由器進行互連。
- 在IP地址中,所有分配到網絡號的網絡(不管是範圍很小的局域網,還是可能覆蓋很大地理範圍的廣域網)都是平等的。所謂平等,是指互聯網同等對待每一個IP地址。
下圖畫出了三個局域網(LAN,LAN2和LAN3)通過三個路由器(R1,R2和R3)互連起來所構成的一個互聯網(此互聯網用虛線圓角方框表示)。
我們應當注意到:
- 在同一個局域網上的主機或路由器的IP地址中的網絡號必須是一樣的。
- 用網橋(它只在鏈路層工作)互連的網段仍然是一個局域網,只能有一個網絡號。
- 路由器總是具有兩個或兩個以上的IP地址。即路由器的每一個接口都有一個不同網絡號的IP地址。當兩個路由器直接相連時,在連線兩端的接口處,可以分配也可以不分配P地址。如分配了IP地址,則這一段連線就構成了一種只包含
段線路的特殊“網絡”(如圖中的N1,N2和N3)。之所以叫做“網絡”是因爲它有IP地址。現在也常常不分配P地址。通常把這樣的特殊網絡叫做無編號網絡或無名網絡。
3.IP地址與硬件地址
1.主機的IP地址與硬件地址的區別
從層次的角度看,物理地址是數據鏈路層和物理層使用的地址,而IP地址是網絡層和以上各層使用的地址,是一種邏輯地址。
在發送數據時,數據從高層下到低層,然後纔到通信鏈路上傳輸。使用IP地址的IP數據報一旦交給了數據鏈路層,就被封裝成MAC幀了。MAC幀在傳送時使用的源地址和目的地址都是硬件地址,這兩個硬件地址都寫在MAC幀的首部中。連接在通信鏈路上的設備(主機或路由器)在收到MAC幀時,根據MAC幀首部中的硬件地址決定收下或丟棄。只有在剝去MAC幀的首部和尾部後把MAC層的數據上交給網絡層後,網絡層才能在IP數據報的首部中找到源IP地址和目的IP地址。
下圖畫的是三個局域網用兩個路由器R1和R2互連起來。現在主機H1要和主機H2通信。這兩臺主機的IP地址分別是P1和IP2,而它們的硬件地址分別爲HA1和HA2。通信的路徑是:H1→經過R1轉發→再經過R2轉發→H2。路由器R1因同時連接到兩個局域網上,因此它有兩個硬件地址,即HA3和HA4同理,路由器R2也有兩個硬件地址HA5和HA6。
這裏要強調指出以下幾點:
- 在網絡層上只能看到IP數據報。
- 在局域網的鏈路層,只能看見MAC幀。
- 雖然在P數據報首部有源站IP地址,但路由器只根據目的站的IP地址的網絡號進行路由選擇。
三.地址解析協議ARP
在實際應用中,我們經常會遇到這樣的問題:已經知道了一個機器的IP地址,需要找出其相應的硬件地址。地址解析協議ARP就是用來解決這樣的問題的。
地址解析協議ARP在主機ARP高速緩存中存放一個從IP地址到硬件地址的映射表,並且這個映射表還經常動態更新(新增或超時刪除)。
當主機A要向本局域網上的某臺主機B發送IP數據報時,就先在其ARP高速緩存中查看有無主機B的P地址。如有,就在ARP高速緩存中查出其對應的硬件地址,再把這個硬件地址寫入MAC幀,然後通過局域網把該MAC幀發往此硬件地址。也有可能查不到主機B的IP地址的項目。在這種情況下,主機A就自動運行ARP,然後按以下步驟找出主機B的硬件地址。
- ARP進程在本局域網上廣播發送一個ARP請求分組。下圖(a)是主機A廣播發送ARP請求分組的示意圖。ARP請求分組的主要內容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18.我想知道IP地址爲209.0.0.6的主機的硬件地址。
- 在本局域網上的所有主機上運行的ARP進程都收到此ARP請求分組。
- 主機B的IP地址與ARP請求分組中要查詢的IP地址一致,就收下這個ARP請求分組,並向主機A發送ARP響應分組,同時在這個ARP響應分組中寫入自己的硬件地址。其餘的所有主機的IP地址都與ARP請求分組中要查詢的IP地址不一致,因此都不理睬這個ARP請求分組,見下圖(b)。ARP響應分組的主要內容是:“我的IP地址是209.0.0.6,我的硬件地址是08-002B00EEOA.”請注意:雖然ARP請求分組是廣播發送的,但ARP響應分組是普通的單播。
- 主機A收到主機B的ARP響應分組後,就在其ARP高速緩存中寫入主機B的IP地址到硬件地址的映射。
ARP把已經得到的地址映射保存在高速緩存中,這樣就使得該主機下次再和具有同樣目的地址的主機通信時,可以直接從高速緩存中找到所需的硬件地址而不必再用廣播方式發送ARP請求分組。
請注意,ARP是解決同一個局域網上的主機或路由器的IP地址和硬件地址的映射問題。從IP地址到硬件地址的解析是自動進行的。
下面我們歸納出使用ARP的四種典型情況:
- 發送方是主機(如H1),要把IP數據報發送到同一個網絡上的另一臺主機(如H2)。這時H1發送ARP請求分組(在網1上廣播),找到目的主機H2的硬件地址。
- 發送方是主機(如H1),要把IP數據報發送到另一個網絡上的一臺主機(如H3或H4)。這時H1發送ARP請求分組(在網1上廣播),找到網1上的一個路由器R1的硬件地址。剩下的工作由路由器R1來完成。R1要做的事情是下面的(3)或(4)
- 發送方是路由器(如R1),要把IP數據報轉發到與R1連接在同一個網絡(網2)上的主機(如H3)。這時R1發送ARP請求分組(在網2上廣播),找到目的主機H3的硬件地址
- 發送方是路由器(如R1),要把IP數據報轉發到網3上的一臺主機(如H4)。H4與R1不是連接在同一個網絡上。這時R1發送ARP請求分組(在網2上廣播),找到連接在網2上的一個路由器R2的硬件地址。剩下的工作由這個路由器R2來完成。
四.IP數據報的格式
IP數據報的格式能夠說明IP協議都具有什麼功能。在TCP/IP的標準中,各種數據格式常常以32位(即4字節)爲單位來描述。下圖是IP數據報的完整格式。
從上圖可看出,一個IP數據報由首部和數據兩部分組成。首部的前一部分是固定長度,共20字節,是所有P數據報必須具有的。在首部的固定部分的後面是一些可選字段,其長度是可變的。下面介紹首部各字段的意義。
1.IP數據報首部的固定部分中的各字段
- 版本佔4位,指IP協議的版本。通信雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號爲4(即IPv4)。
- 首部長度佔4位,可表示的最大十進制數值是15。因爲IP首部的固定長度是20字節,因此首部長度字段的最小值是5,即二進制表示的首部長度是0101(爲什麼是5,因爲20字節=5*4字節)。而當首部長度爲最大值1111(即十進制數的15),就表明首部長度達到最大值15個32位(4字節),即60字節。當IP分組的首部長度不是4字節的整數倍時,必須利用最後的填充字段加以填充。因此IP數據報的數據部分永遠在4字節的整數倍時開始,這樣在實現IP協議時較爲方便。
- 區分服務佔8位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。
- 總長度指首部和數據之和的長度,單位爲字節。總長度字段爲16位,因此數據報的最大長度爲-1=65535字節。然而實際上傳送這樣長的數據報在現實中是極少遇到的。
- 標識佔16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識字段。但這個“標識”並不是序號,因爲IP是無連接服務,數據報不存在按序接收的問題。
- 標誌佔3位,但目前只有兩位有意義。標誌字段中的最低位記爲MF。MF=1即表示後面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最後一個。標誌字段中間的一位記爲 DF ,意思是“不能分片”。只有當DF=0時才允許分片。
- 片偏移佔13位。片偏移指出:較長的分組在分片後,某片在原分組中的相對位置。也就是說,相對於用戶數據字段的起點,該片從何處開始。片偏移以8個字節爲偏移單位。這就是說,每個分片的長度一定是8字節(64位)的整數倍。
- 生存時間佔8位,生存時間字段常用的英文縮寫是TTL,表明這是數據報在網絡中的壽命。由發出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在互聯網中兜圈子。數據報每經過一個路由器時,就把TTL減去數據報在路由器所消耗掉的一段時間。若數據報在路由器消耗的時間小於1秒,就把TIL值減1。當TTL值減爲零時,就丟棄這個數據報。
- 協議佔8位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個協議進行處理。
- 首部檢驗和佔16位。這個字段只檢驗數據報的首部,但不包括數據部分。
- 源地址佔32位。
- 目的地址佔32位。
2.IP數據報首部的可變部分
IP數據報首部的可變部分就是一個選項字段。選項字段用來支持排錯、測量以及安全等措施,內容很豐富。此字段的長度可變,從1個字節到40個字節不等,取決於所選擇的項目。這些選項一個個拼接起來,中間不需要有分隔符,最後用全0的填充字段補齊成爲4字節的整數倍。實際上這些選項很少被使用。很多路由器都不考慮IP首部的選項字段。
五.IP層轉發分組的流程
1.IP層轉發分組的流程
下面我們先用一個簡單例子來說明路由器是怎樣轉發分組的。下圖是一個路由表的簡單例子。
有四個A類網絡通過三個路由器連接在一起。每一個網絡上都可能有成千上萬臺主機(圖中沒有畫出這些主機)。可以想象,若路由表指出到每一臺主機應怎樣轉發,則所得出的路由表就會過於龐大。但若路由表指出到某個網絡應如何轉發,則每個路由器中的路由表就只包含4個項目(即只有4行,每行對應於一個網絡)。
以路由器R2的路由表爲例。由於R2同時連接在網絡2和網絡3上,因此只要目的主機在網絡2或網絡3上,都可通過接口0或1由路由器R2直接交付(當然還要利用地址解析協議ARP才能找到這些主機相應的硬件地址)。若目的主機在網絡1中,則下一跳路由器應爲R1,其P地址爲20.0.07.路由器R2和R1由於同時連接在網絡2上,因此從路由器R2把分組轉發到路由器R1是很容易的。同理,若目的主機在網絡4中,則路由器R2應把分組轉發給IP地址爲30.0.0.1的路由器R3。我們應當注意到,圖中的每一個路由器都有兩個不同的IP地址 。
可以把整個的網絡拓撲簡化爲下圖所示的那樣。在簡化圖中,網絡變成了一條鏈路,但每一個路由器旁邊都註明其IP地址。使用這樣的簡化圖,可以使我們不必關心某個網絡內部的具體拓撲以及連接在該網絡上有多少臺主機。這樣的簡化圖強調了在互聯網上轉發分組時,是從一個路由器轉發到下一個路由器。總之,在路由表中,對每一條路由最主要的是以下兩個信息:
2.特定主機路由
對特定的目的主機指明一個路由,這種路由叫做特定主機路由。
3.默認路由
路由器還可採用默認路由以減小路由表所佔用的空間和搜索路由表所用的時間。我們在前面已經講過,主機在發送每一個IP數據報時都要查找自己的路由表。如果一臺主機連接在一個小網絡上,而這個網絡只用一個路由器和互聯網連接,那麼在這種情況下使用默認路由是非常合適的。例如,在下圖的互聯網中,連接在網絡N1上的任何一臺主機中的路由表只需要三個項目即可。第
個項目就是到本網絡主機的路由,其目的網絡就是本網絡N1,因而不需要路由器轉發而是直接交付。第二個項目是到網絡N2的路由,對應的下一跳路由器是R2。第三個項目就是默認路由。只要目的網絡是其他網絡(不是N1或N2),就一律選擇默認路由,把數據報先間接交付路由器R1,讓R1再轉發給互聯網中的下一個路由器,一直轉發到目的網絡上的路由器,最後進行直接交付。在實際上的路由器中,像圖下圖路由表中所示的“直接”和“其他”的幾個字符並沒有出現在路由表中,而是被記爲0.0.0.0。
4.IP數據報中沒有下一跳路由器的IP地址,那麼待轉發的數據報又怎樣能夠找到下一跳路由器呢?
在IP數據報的首部寫上的IP地址是源IP地址和目的IP地址,而沒有中間經過的路由器的IP地址。既然IP數據報中沒有下一跳路由器的IP地址,那麼待轉發的數據報又怎樣能夠找到下一跳路由器呢?
當路由器收到一個待轉發的數據報,在從路由表得出下一跳路由器的IP地址後,不是把這個地址填入IP數據報,而是送交數據鏈路層的網絡接口軟件。網絡接口軟件負責把下跳路由器的IP地址轉換成硬件地址(必須使用ARP),並將此硬件地址放在鏈路層的MAC幀的首部,然後根據這個硬件地址找到下一跳路由器。
這裏我們要再強調一下,路由表並沒有給分組指明到某個網絡的完整路徑(即先經過哪一個路由器,然後再經過哪一個路由器,等等)。路由表指出,到某個網絡應當先到某個路由器(即下一跳路由器),在到達下一跳路由器後,再繼續查找其路由表,知道再下一步應當到哪一個路由器。這樣一步一步地查找下去,直到最後到達目的網絡。
5.IP數據報的分組轉發算法
- 從數據報的首部提取目的主機的IP地址D,得出目的網絡地址爲N。
- 若N就是與此路由器直接相連的某個網絡地址,則進行直接交付,不需要再經過其他的路由器,直接把數據報交付目的主機(這裏包括把目的主機地址D轉換爲具體的硬件地址,把數據報封裝爲MAC幀,再發送此幀)。否則就是間接交付,執行(3)。
- 若路由表中有目的地址爲D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器。否則,執行(4)。
- 若路由表中有到達網絡N的路由,則把數據報傳送給路由表中所指明的下一跳路由器。否則,執行(5)。
- 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器。否則,執行(6).
- 報告轉發分組出錯。
六.劃分子網和構造超網
1.劃分子網
關於劃分子網的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/104674514
我們應當注意到,使用子網劃分後,路由表必須包含以下三項內容:目的網絡地址、子網掩碼和下一跳地址。
2.構造超網
關於構造超網的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/105679584
3.最長前綴匹配
在使用CIDR時,由於採用了網絡前綴這種記法,IP地址由網絡前綴和主機號這兩個部分組成,因此在路由表中的項目也要有相應的改變。這時,每個項目由“網絡前綴”和“下一跳地址”組成。但是在査找路由表時可能會得到不止一個匹配結果。這樣就帶來一個
問題:我們應當從這些匹配結果中選擇哪一條路由呢?
正確的答案是:應當從匹配結果中選擇具有最長網絡前綴的路由。這叫做最長前綴匹配,這是因爲網絡前綴越長,其地址塊就越小,因而路由就越具體。最長前綴匹配又稱爲最長匹配或最佳匹配。
七.網際控制報文協議ICMP
爲了更有效地轉發IP數據報和提高交付成功的機會,在網際層使用了網際控制報文協議ICMP。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP是互聯網的標準協議。但ICMP不是高層協議(看起來好像是高層協議,因爲ICMP報文是裝在IP數據報中,作爲其中的數據部分),而是IP層的協議。ICMP報文作爲IP層數據報的數據,加上數據報的首部,組成IP數據報發送出
去。ICMP報文格式如圖所示:
1.ICMP報文的種類
ICMP報文的種類有兩種,即:
- ICMP差錯報告報文
- ICMP詢問報文。
ICMP報文的前4個字節是統一的格式,共有三個字段:類型、代碼和檢驗和。接着的4個字節的內容與ICMP的類型有關。最後面是數據字段,其長度取決於ICMP的類型。下表給出了幾種常用的ICMP報文類型。IP數據報首部的檢驗和並不檢驗IP數據報的內容,因此不能保證經過傳輸的ICMP報文不產生差錯。
ICMP差錯報告報文共有四種,即
- 終點不可達:當路由器或主機不能交付數據報時就向源點發送終點不可達報文。
- 時間超過:當路由器收到生存時間爲零的數據報時,除丟棄該數據報外,還要向源點發送時間超過報文。當終點在預先規定的時間內不能收到一個數據報的全部數據報片時,就把已收到的數據報片都丟棄,並向源點發送時間超過報文
- 參數問題:當路由器或目的主機收到的數據報的首部中有的字段的值不正確時,就丟棄該數據報,並向源點發送參數問題報文。
- 改變路由(重定向):路由器把改變路由報文發送給主機,讓主機知道下次應將數據報發送給另外的路由器(可通過更好的路由)。
下面對改變路由報文進行簡短的解釋。我們知道,在互聯網的主機中也要有一個路由表。當主機要發送數據報時,首先是查找主機自己的路由表,看應當從哪一個接口把數據報發送出去。在主機剛開始工作時,一般都在路由表中設置一個默認路由器的IP地址。不管數據報要發送到哪個目的地址,都一律先把數據報傳送給這個默認路由器,而這個默認路由器知道到每一個目的網絡的最佳路由(通過和其他路由器交換路由信息)。如果默認路由器發現主機發往某個目的地址的數據報的最佳路由應當經過網絡上的另一個路由器R時,就用改變路由報文把這情況告訴主機。於是,該主機就在其路由表中增加一個項目:到某某目的地址應經過路由器R(而不是默認路由器)。
常用的ICMP詢問報文有兩種,即:
- 回送請求和回答IMP回送請求報文是由主機或路由器向一個特定的目的主機發出的詢問。收到此報文的主機必須給源主機或路由器發送ICMP回送回答報文。這種詢問報文用來測試目的站是否可達以及瞭解其有關狀態。
- 時間戳請求和回答ICMP時間戳請求報文是請某臺主機或路由器回答當前的日期和時間。在ICMP時間戳回答報文中有一個32位的字段,其中寫入的整數代表從1900年1月1日起到當前時刻一共有多少秒。時間戳請求與回答可用於時鐘同步和時間測量。
八.互聯網的路由選擇協議
1.理想的路由算法
路由選擇協議的核心就是路由算法,即需要何種算法來獲得路由表中的各項目。應當指出,路由選擇是個非常複雜的問題,因爲它是網絡中的所有結點共同協調工作的結果。
靜態路由選擇也叫做非自適應路由選擇,其特點是簡單和開銷較小,但不能及時適應網絡狀態的變化。對於很簡單的小網絡,完全可
以採用靜態路由選擇,用人工配置每一條路由。
動態路由選擇也叫做自適應路由選擇,其特點是能較好地適應網絡狀態的變化,但實現起來較爲複雜,開銷也比較大。因此,動態路由選擇適用於較複雜的大網絡。
2.分層次的路由選擇協議
可以把整個互聯網劃分爲許多較小的自治系統,一般都記爲AS。自治系統AS是在單一技術管理下的一組路由器,而這些路由器使用一種自治系統內部的路由選擇協議和共同的度量。一個AS對其他AS表現出的是一個單一的和一致的路由選擇策略。
在目前的互聯網中,一個大的ISP就是一個自治系統。這樣,互聯網就把路由選擇協議劃分爲兩大類,即:
- 內部網關協議IGP:即在一個自治系統內部使用的路由選擇協議,而這與在互聯網中的其他自治系統選用什麼路由選擇協議無關。目前這類路由選擇協議使用得最多,如RIP和OSPF協議。
- 外部網關協議EGP:若源主機和目的主機處在不同的自治系統中(這兩個自治系統可能使用不同的內部網關協議),當數據報傳到一個自治系統的邊界時,就需要使用一種協議將路由選擇信息傳遞到另一個自治系統中。這樣的協議就是外部網關協議EGP。目前使用最多的外部網關協議是BGP的版本4(BGP4)。
自治系統之間的路由選擇也叫做域間路由選擇,而在自治系統內部的路由選擇叫做域內路由選擇。
下圖是兩個自治系統互連在一起的示意圖。每個自治系統自己決定在本自治系統內部運行哪一個內部路由選擇協議(例如,可以是RIP,也可以是OSPF)。但每個自治系統都有一個或多個路由器(圖中的路由器R1和R2)除運行本系統的內部路由選擇協議外,還要
運行自治系統間的路由選擇協議(BGP4)。
九.內部網關協議RIP
1.工作原理
RIP是一種分佈式的基於距離向量的路由選擇協議,是互聯網的標準協議,其最大優點就是簡單。RIP協議要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離記錄(因此,這是一組距離,即“距離向量”)。RIP協議將“距離”定義如下:
從一路由器到直接連接的網絡的距離定義爲1。
從一路由器到非直接連接的網絡的距離定義爲所經過的路由器數加1。“加1”是因爲到達目的網絡後就進行直接交付,而到直接連接的網絡的距離已經定義爲1。例如在下圖中,路由器R1到網1或網2的距離都是1(直接連接),而到網3的距離是2,到網4的距離是3。
RP協議的“距離”也稱爲“跳數”,因爲每經過一個路由器,跳數就加1。RIP認爲好的路由就是它通過的路由器的數目少,即“距離短”。RIP允許一條路徑最多能包含15個路由器。因此“距離”等於16時即相當於不可達。可見RIP只適用於小型互聯網。
RIP不能在兩個網絡之間同時使用多條路由。RIP選擇一條具有最少路由器的路由(即最短路由),哪怕還存在另一條高速(低時延)但路由器較多的路由。
RIP協議的特點是:
- 僅和相鄰路由器交換信息。如果兩個路由器之間的通信不需要經過另一個路由器,那麼這兩個路由器就是相鄰的。RIP協議規定,不相鄰的路由器不交換信息。
- 路由器交換的信息是當前本路由器所知道的全部信息,即自己現在的路由表。
- 按固定的時間間隔交換路由信息,例如,每隔30秒。然後路由器根據收到的路由信息更新路由表。當網絡拓撲發生變化時,路由器也及時向相鄰路由器通告拓撲變化後的路由信息。
這裏要強調一點:路由器在剛剛開始工作時,它的路由表是空的。然後路由器就得出到直接相連的幾個網絡的距離(這些距離定義爲1)。接着,每一個路由器也只和數目非常有限的相鄰路由器交換並更新路由信息。但經過若干次的更新後,所有的路由器最終都會知
道到達本自治系統中任何一個網絡的最短距離和下一跳路由器的地址。
路由表更新的原則是找出到每個目的網絡的最短距離。這種更新算法又稱爲距離向量算法。
2.RIP協議的報文格式
下圖是RP2的報文格式,它和RIP1的首部相同,但後面的路由部分不一樣。從圖中還可看出,RIP協議使用運輸層的用戶數據報UDP進行傳送。
RIP報文由首部和路由部分組成。RIP的首部佔4個字節,其中:
- 命令字段指出報文的意義。例如:
- 1表示請求路由信息
- 2表示對請求路由信息的響應或未被請求而發出的路由更新報文
- 首部後面的“必爲0”是爲了4字節字的對齊
RIP2報文中的路由部分由若干個路由信息組成。每個路由信息需要用20個字節。
- 地址族標識符(又稱爲地址類別)字段用來標誌所使用的地址協議。如採用IP地址就令這個字段的值爲2
- 路由標記填入自治系統號ASN,這是考慮使RIP有可能收到本自治系統以外的路由選擇信息。
- 再後面指出某個網絡地址、該網絡的子網掩碼、下一跳路由器地址以及到此網絡的距離。
一個RIP報文最多可包括25個路由,因而RIP報文的最大長度是4+20×25=504字節。如超過,必須再用一個RIP報文來傳送。
RIP存在的一個問題是當網絡出現故障時,要經過比較長的時間才能將此信息傳送到所有的路由器。RIP協議的這一特點叫做:好消息傳播得快,而壞消息傳播得慢。網絡出故障的傳播時間往往需要較長的時間(例如數分鐘)。這是RIP的一個主要缺點。但如果一個路由器發現了更短的路由,那麼這種更新信息就傳播得很快。
RIP協議最大的優點就是實現簡單,開銷較小
十.內部網關協議OSPF
1.OSPF協議的基本特點
這個協議的名字是開放最短路徑優先OSPF。它是爲克服RIP的缺點在1989年開發出來的。OSPF的原理很簡單,但實現起來卻較複雜。請注意:OSPF只是一個協議的名字,它並不表示其他的路由選擇協議不是“最短路徑優先”。實際上,所有的在自治系統內部使用的路由選擇協議(包括RIP協議)都是要尋找條最短的路徑。
OSPF最主要的特徵就是使用分佈式的鏈路狀態協議,而不是像RIP那樣的距離向量協議。和RIP協議相比,OSPF的三個要點和RP的都不一樣
- 向本自治系統中所有路由器發送信息。這裏使用的方法是洪泛法,這就是路由器通過所有輸出端口向所有相鄰的路由器發送信息。而每一個相鄰路由器又再將此信息發往其所有的相鄰路由器(但不再發送給剛剛發來信息的那個路由器)。這樣,最終整個區域中所有的路由器都得到了這個信息的一個副本。我們應注意,RIP協議是僅僅向自己相鄰的幾個路由器發送信息。
- 發送的信息就是與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息。所謂“鏈路狀態”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的度量。OSPF將這個“度量”用來表示費用、距離、時延、帶寬,等等。有時爲了方便就稱這個度量爲“代價”.我們應注意,對於RIP協議,發送的信息是:“到所有網絡的距離和下一跳路由器”。
- 只有當鏈路狀態發生變化時,路由器才向所有路由器用洪泛法發送此信息。而不像RIP那樣,不管網絡拓撲有無發生變化,路由器之間都要定期交換路由表的信息。
由於各路由器之間頻繁地交換鏈路狀態信息,因此所有的路由器最終都能建立一個鏈路狀態數據庫,這個數據庫實際上就是全網的拓撲結構圖。這個拓撲結構圖在全網範圍內是一致的。因此,每一個路由器都知道全網共有多少個路由器,以及哪些路由器是相連的,其代價是多少,等等。每一個路由器使用鏈路狀態數據庫中的數據,構造出自己的路由表。我們注意到,RIP協議的每一個路由器雖然知道到所有的網絡的距離以及下一跳路由器,但卻不知道全網的拓撲結構(只有到了下一跳路由器,才能知道再下一跳應當怎樣走)
爲了使OSPF能夠用於規模很大的網絡,OSPF將一個自治系統再劃分爲若干個更小的範圍,叫做區城,下圖就表示一個自治系統劃分爲四個區域。每一個區域都有一個32位的區域標識符(用點分十進制表示)。
劃分區域的好處就是把利用洪泛法交換鏈路狀態信息的範圍侷限於每一個區域而不是整個的自治系統,這就減少了整個網絡上的通信量。在一個區域內部的路由器只知道本區域的完整網絡拓撲,而不知道其他區域的網絡拓撲的情況。爲了使每一個區域能夠和本區域以外的區域進行通信,OSPF使用層次結構的區域劃分。在上層的區域叫做主幹區域。主幹區域的標識符規定爲0.0.0.0。主幹區域的作用是用來連通其他在下層的區域。從其他區域來的信息都由區域邊界路由器進行概括。在圖中,路由器R3,R4和R7都是區域邊界路由器,而顯然,每一個區域至少應當有一個區域邊界路由器。在主幹區域內的路由器叫做主幹路由器,如R3,R4,Rs,R6和R7。一個主幹路由器可以同時是區域邊界路由器,如R3,R4和R7。在主幹區域內還要有一個路由器專門和本自治系統外的其他自治系統交換路由信息。這樣的路由器叫做自治系統邊界路由器,如圖中的R6。
2.OSPF協議的報文格式
OSPF不用UDP而是直接用IP數據報傳送(其IP數據報首部的協議字段值爲89)。OSPF構成的數據報很短。OSPF分組使用24字節的固定長度首部(見下圖),分組的數據部分可以是五種類型分組中的一種。
下面簡單介紹OSPF首部各字段的意義:
- 版本 當前的版本號是2
- 類型 可以是五種類型分組中的一種
- 分組長度 包括OSPF首部在內的分組長度,以字節爲單位
- 路由器標識符 標誌發送該分組的路由器的接口的IP地址
- 區域標識符 分組屬於的區域的標識符
- 檢驗和 用來檢測分組中的差錯
- 鑑別類型 目前只有兩種,0(不用)和1(口令),鑑別鑑別類型爲0時就填入0,鑑別類型爲1則填入8個字符的口令
3.OSPF的五種分組類型
OSPF共有以下五種分組類型
- 類型1,問候分組,用來發現和維持鄰站的可達性。
- 類型2,數據庫描述分組,向鄰站給出自己的鏈路狀態數據庫中的所有鏈路狀態項目的摘要信息。
- 類型3,鏈路狀態請求分組,向對方請求發送某些鏈路狀態項目的詳細信息。
- 類型4,鏈路狀態更新分組,用洪泛法對全網更新鏈路狀態。這種分組是最複雜的,也是OSPF協議最核心的部分。路由器使用這種分組將其鏈路狀態通知給鄰站。
- 類型5,鏈路狀態確認分組,對鏈路更新分組的確認。
OSPF規定,每兩個相鄰路由器每隔10秒鐘要交換一次問候分組。這樣就能確知哪些鄰站是可達的。對相鄰路由器來說,“可達”是最基本的要求,因爲只有可達鄰站的鏈路狀態信息才存入鏈路狀態數據庫(路由表就是根據鏈路狀態數據庫計算出來的)。在正常情況下,網絡中傳送的絕大多數OSPF分組都是問候分組。若有40秒鐘沒有收到某個相鄰路由器發來的問候分組,則可認爲該相鄰路由器是不可達的,應立即修改鏈路狀態數據庫,並重新計算路由表。其他的四種分組都是用來進行鏈路狀態數據庫的同步。所謂同步就是指不同路由器的鏈路狀態數據庫的內容是一樣的。兩個同步的路由器叫做“完全鄰接的”路由器。不是完全鄰接的路由器表明它們雖然在物理上是相鄰的,但其鏈路狀態數據庫並沒有達到一致。
OSPF讓每一個路由器用數據庫描述分組和相鄰路由器交換本數據庫中已有的鏈路狀態摘要信息。摘要信息主要就是指出有哪些路由器的鏈路狀態信息(以及其序號)已經寫入了數據庫。經過與相鄰路由器交換數據庫描述分組後,路由器就使用鏈路狀態請求分組,向對方請求發送自己所缺少的某些鏈路狀態項目的詳細信息。通過一系列的這種分組交換,全網同步的鏈路數據庫就建立了。下圖給出了OSPF的基本操作,說明了兩個路由器需要交換各種類型的分組:
在網絡運行的過程中,只要一個路由器的鏈路狀態發生變化,該路由器就要使用鏈路狀態更新分組,用洪泛法向全網更新鏈路狀態。OSPF使用的是可靠的洪泛法,其要點見下圖所示。設路由器R用洪泛法發出鏈路狀態更新分組。圖中用一些小的箭頭表示更新分組。
第一次先發給相鄰的三個路由器。這三個路由器將收到的分組再進行轉發時,要將其上游路由器除外。可靠的洪泛法是在收到更新分組後要發送確認(收到重複的更新分組只需要發送一次確認)。圖中的空心箭頭表示確認分組。
爲了確保鏈路狀態數據庫與全網的狀態保持一致,OSPF還規定每隔一段時間,如30分鐘,要刷新一次數據庫中的鏈路狀態。
十一.外部網關協議BGP
我們首先應當弄清,在不同自治系統AS之間的路由選擇爲什麼不能使用前面討論過的內部網關協議,如RIP或OSPF?
我們知道,內部網關協議(如RIP或OSPF)主要是設法使數據報在一個AS中儘可能有效地從源站傳送到目的站。在一個AS內部也不需要考慮其他方面的策略。然而BGP使用的環境卻不同。這主要是因爲以下的兩個原因:
- 第一,互聯網的規模太大,使得自治系統AS之間路由選擇非常困難。
- 第二,自治系統AS之間的路由選擇必須考慮有關策略。
由於上述情況,邊界網關協議BGP只能是力求尋找一條能夠到達目的網絡且比較好的路由(不能兜圈子),而並非要尋找一條最佳路由。BGP採用了路徑向量路由選擇協議,它與距離向量協議和鏈路狀態協議都有很大的區別。
1.BGP是如何工作的
在配置BGP時,每一個自治系統的管理員要選擇至少一個路由器作爲該自治系統的“BGP發言人”。一般說來,兩個BGP發言人都是通過一個共享網絡連接在一起的,而BGP發言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器。
一個BGP發言人與其他AS的BGP發言人要交換路由信息,就要先建立TCP連接,然後在此連接上交換BGP報文以建立BGP會話,利用BGP會話交換路由信息,如增加了新的路由,或撤銷過時的路由,以及報告出差錯的情況等等。使用TCP連接交換路由信息的兩
個BGP發言人,彼此成爲對方的鄰站或對等站。
下圖表示BGP發言人和自治系統AS的關係的示意圖。在圖中畫出了三個自治系統中的5個BGP發言人。每一個BGP發言人除了必須運行BGP協議外,還必須運行該自治系統所使用的內部網關協議,如OSPF或RIP。
邊界網關協議BGP所交換的網絡可達性的信息就是要到達某個網絡所要經過的一系列自治系統。當BGP發言人互相交換了網絡可達性的信息後,各BGP發言人就根據所採用的策略從收到的路由信息中找出到達各自治系統的較好路由。
下圖給出了一個BGP發言人交換路徑向量的例子。自治系統AS2的BGP發言人通知主幹網的BGP發言人:“要到達網絡N1,N2,N3和N4可經過AS2”主幹網在收到這個通知後,就發出通知:“要到達網絡N1,N2,N3和N4可沿路徑(AS1,AS2)”。同理,主幹網還可發出通知:“要到達網絡N5,N6和N7可沿路徑(AS1,AS3)。”
BGP支持無分類域間路由選擇CIDR,因此BGP的路由表也就應當包括目的網絡前綴、下一跳路由器,以及到達該目的網絡所要經過的自治系統序列。在BGP剛剛運行時,BGP的鄰站是交換整個的BGP路由表。但以後只需要在發生變化時更新有變化的部分。
2.BGP的四種報文
- OPEN(打開)報文,用來與相鄰的另一個BGP發言人建立關係,使通信初始化。
- UPDATE(更新)報文,用來通告某一路由的信息,以及列出要撤銷的多條路由。
- KEEPALIⅤE(保活)報文,用來週期性地證實鄰站的連通性。
- NOTIFICATION(通知)報文,用來發送檢測到的差錯。
若兩個鄰站屬於兩個不同AS,而其中一個鄰站打算和另一個鄰站定期地交換路由信息,這就應當有一個商談的過程。因此,一開始向鄰站進行商談時就必須發送OPEN報文。如果鄰站接受這種鄰站關係,就用 KEEPALIVE報文響應。這樣,兩個BGP發言人的鄰站關係就建立了。一旦鄰站關係建立了,就要繼續維持這種關係。雙方中的每一方都需要確信對方是存在的,且一直在保持這種鄰站關係。爲此,這兩個BGP發言人彼此要週期性地交換KEEPALIVE報文(一般每隔30秒)。UPDATE報文是BGP協議的核心內容。BGP發言人可以用 UPDATE報文撤銷它以前曾經通知過的路由,也可以宣佈增加新的路由。撤銷路由可以一次撤銷許多條,但增加新路由時,每個更新報文只能增加一條。
下圖給出了BGP報文的格式。四種類型的BGP報文具有同樣的通用首部,其長度爲19字節。通用首部分爲三個字段。標記 字段爲16字節長,用來鑑別收到的BGP報文。當不使用鑑別時,標記字段要置爲全1。長度字段指出包括通用首部在內的整個BGP報文以字節爲單位的長度,最小值是19,最大值是4096。類型字段的值爲1到4,分別對應於上述四種BGP報文中的一種。
3.OPEN報文
OPEN報文共有6個字段,即版本(1字節,現在的值是4)、本自治系統號(2字節)、保持時間(2字節)、BGP標識符(4字節,通常就是該路由器的IP地址),可選參數長度(1字節)和可選參數。
4.UPDATE報文
UPDATE報文共有5個字段,即不可行路由長度(2字節,指明下一個字段的長度)、撤銷的路由(列出所有要撤銷的路由)、路徑屬性總長度(2字節,指明下一個字段的長度)、路徑屬性(定義在這個報文中增加的路徑的屬性)和網絡層可達性信息NLRI
。最後這個字段定義發出此報文的網絡,包括網絡前綴的位數、IP地址前綴。
5.KEEPALIVE報文
KEEPALIVE報文只有BGP的19字節長的通用首部。
6.NOTIFICATION報文
NOTIFICATION報文有3個字段,即差錯代碼(1字節)、差錯子代碼(1字節)和差錯數據(給出有關差錯的診斷信息)。
十二.路由器的構成
關於路由器的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/105713671
十三.IPv6
1.什麼是IPv6
關於IPv6的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/105715620
2.從IPv4向IPv6過渡
由於現在整個互聯網的規模太大,因此,“規定一個日期,從這一天起所有的路由器一律都改用IPv6”,顯然是不可行的。這樣,向IPv6過渡只能採用逐步演進的辦法,同時,還必須使新安裝的IPv6系統能夠向後兼容。這就是說,IPv6系統必須能夠接收和轉發IPV4
分組,並且能夠爲IPv4分組選擇路由。下面介紹兩種向IPv6過渡的策略,即使用雙協議棧和使用隧道技術。
雙協議棧:雙協議棧是指在完全過渡到IPv6之前,使一部分主機(或路由器)裝有雙協議棧:一個IPv4和一個IPv6。因此雙協議棧主機(或路由器)既能夠和IPv6的系統通信,又能夠和IPv4的系統通信。雙協議棧的主機(或路由器)記爲IPv6/IPV4,表明它同時
具有兩種IP地址:一個IPv6地址和一個IPV4地址。雙協議棧主機在和IPV6主機通信時採用IPv6地址,而和IPv4主機通信時則採用IPv4
地址。但雙協議棧主機怎樣知道目的主機是採用哪一種地址呢?它是使用域名系統DNS來查詢的。若DNS返回的是IPV4地址,雙協議棧的源主機就使用IPv4地址。但當DNS返回的是IPv6地址,源主機就使用IPv6地址。
隧道技術:向IPv6過渡的另一種方法是隧道技術。下圖給出了隧道技術的工作原理。這種方法的要點就是在IPv6數據報要進入IPV4網絡時,把IPv6數據報封裝成爲IPv4數據報。現在整個的IPv6數據報變成了IPⅵ4數據報的數據部分。這樣的IPv4數據報從路由器B經過路由器C和D,傳送到E,而原來的IPv6數據報就好像在IPv4網絡的隧道中傳輸,什麼都沒有變化。當IPV4數據報離開IPv4網絡中的隧道時,再把數據部分(即原來的IPv6數據報)交給主機的IPv6協議棧。圖中的一條粗線表示在IPV4網絡中好像有一個從B到E的“IPv6隧道”,路由器B是隧道的入口而E是出口。請注意,在隧道中傳送的數據報的源地址是B而目的地址是E。要使雙協議棧的主機知道IPv4數據報裏面封裝的數據是一個IPv6數據報,就必須把IPV4首部的協議字段的值設置爲41(41表示數據報的數據部分是IPv6數據報)。
3.ICMPv6
和IPv4一樣,IPV6也不保證數據報的可靠交付,因爲互聯網中的路由器可能會丟棄數據報。因此IPv6也需要使用ICMP來反饋一些差錯信息。新的版本稱爲 ICMPv6,它比ICMPv4要複雜得多。地址解析協議ARP和網際組管理協議IGMP的功能都已被合併到 ICMPv6
中。
ICMPv6是面向報文的協議,它利用報文來報告差錯,獲取信息,探測鄰站或管理多播通信。 ICMPv6還增加了幾個定義報文功能及含義的其他協議。
十四.IP多播
1.IP多播的基本概念
現在IP多播,已成爲互聯網的一個熱門課題。這是由於有許多的應用需要由一個源點發送到許多個終點,即一對多的通信。與單播相比,在一對多的通信中,多播可大大節約網絡資源。下圖(b)是視頻服務器用單播方式向90臺主機傳送同樣的視頻節目。爲此,需要發送90個單播,即同一個視頻分組要發送90個副本。下圖(a)是視頻服務器用多播方式向屬於同一個多播組的90個成員傳送節目。這時,視頻服務器只需把視頻分組當作多播數據報來發送,並且只需發送一次。路由器R1在轉發分組時,需要把收到的分組複製成3個副本,分別向R2、R3和R4各轉發個副本。當分組到達目的局域網時,由於局域網具有硬件多播功能,因此不需要複製分組,在局域網上的多播組成員都能收到這個視頻分組。
當多播組的主機數很大時(如成千上萬個),採用多播方式就可明顯地減輕網絡中各種資源的消耗。在互聯網範圍的多播要靠路由器來實現,這些路由器必須增加一些能夠識別多播數據報的軟件。能夠運行多播協議的路由器稱爲多播路由器。當然也可以轉發普通的單播IP數據報在互聯網上進行多播就叫做IP多播。IP多播所傳送的分組需要使用多播IP地址。
2.IP多播如何工作
在互聯網上進行多播就叫做IP多播。IP多播所傳送的分組需要使用多播IP地址。我們知道,在互聯網中每一臺主機必須有一個全球唯一的IP地址。如果某臺主機現在想接收某個特定多播組的分組,那麼怎樣才能使這個多播數據報傳送到這臺主機?
顯然,這個多播數據報的目的地址一定不能寫入這臺主機的P地址。這是因爲在同時間可能有成千上萬臺主機加入到同一個多播組。多播數據報不可能在其首部寫入這樣多的主機的IP地址。在多播數據報的目的地址寫入的是多播組的標識符,然後設法讓加入到這個多播組的主機的IP地址與多播組的標識符關聯起來。
其實多播組的標識符就是IP地址中的D類地址。D類IP地址的前四位是1110,因此D類地址範圍是224.0.0.0到239.255.255.255我們就用每一個D類地址標誌一個多播組。這樣,D類地址共可標誌228個多播組,也就是說,在同一時間可以允許有超過26億的多播組在互聯網上運行。多播數據報也是“盡最大努力交付”,不保證一定能夠交付多播組內的所有成員。因此,多播數據報和一般的IP數據報的區別就是它使用D類IP地址作爲目的地址,並且首部中的協議字段值是2,表明使用網際組管理協議IGMP。顯然,多播地址只能用於目的地址,而不能用於源地址。此外,對多播數據報不產生ICMP差錯報文。因此,若在PING命令後面鍵入多播地址,將永遠不會收到響應。
IP多播可以分爲兩種。一種是隻在本局域網上進行硬件多播,另一種則是在互聯網的範圍進行多播。在互聯網上進行多播的最後階段,還是要把多播數據報在局域網上用硬件多播交付多播組的所有成員。下面就先討論這種硬件多播。
十五.網際組管理協議IGMP和多播路由選擇協議
1.IP多播需要兩種協議
下圖是在互聯網上傳送多播數據報的例子。圖中標有IP地址的四臺主機都參加了一個多播組,其組地址是226.15.37.123。顯然,多播數據報應當傳送到路由器R1,R2和R3,而不應當傳送到路由器R4,因爲與R4連接的局域網上現在沒有這個多播組的成員。但這些
路由器又怎樣知道多播組的成員信息呢?這就要利用一個協議,叫做網際組管理協議IGMP。
上圖強調了IGMP的本地使用範圍。請注意,IGMP並非在互聯網範圍內對所有多播組成員進行管理的協議。IGMP不知道IP多播組包含的成員數,也不知道這些成員都分佈在哪些網絡上,等等。IGMP協議是讓連接在本地局域網上的多播路由器知道本局域網上是否有主機(嚴格講,是主機上的某個進程)參加或退出了某個多播組。顯然,僅有lGMP協議是不能完成多播任務的。連接在局域網上的多播路由器還必須和互聯網上的其他多播路由器協同工作,以便把多播數據報用最小代價傳送給所有的組成員。這就需要使用多播路由選擇協議。
然而多播路由選擇協議要比單播路由選擇協議複雜得多。我們可以通過一個簡單的例子來說明。
我們假定上圖中有兩個多播組。多播組①的成員有主機A,B和C,而多播組②的成員有主機D,E和F。這些主機分佈在三個網絡上(N1,N2和N3)。路由器R不應當向網絡N3轉發多播組①的分組,因爲網絡N3上沒有多播組①的成員。但是每一臺主機可以隨時加入或離開一個多播組。例如,如果主機G現在加入了多播組①,那麼從這時起,路由器R就必須也向網絡N3轉發多播組①的分組。這就是說,多播轉發必須動態地適應多播組成員的變化(這時網絡拓撲並未發生變化)。請注意,單播路由選擇通常是在網絡拓撲發生變化時才需要更新路由。
再看一種情況。主機E和F都是多播組②的成員。當E向F發送多播數據報時,路由器R把這個多播數據報轉發到網絡N3。但當F向E發送多播數據報時,路由器R則把多播數據報轉發到網絡N2。如果路由器R收到來自主機A的多播數據報(A不是多播組②的成員,但也可向多播組發送多播數據報),那麼路由器R就應當把多播數據報轉發到N2和N3。由此可見,多播路由器在轉發多播數據報時,不能僅僅根據多播數據報中的目的地址,而是還要考慮這個多播數據報從什麼地方來和要到什麼地方去。
還有一種情況。主機G沒有參加任何多播組,但G卻可向任何多播組發送多播數據報。例如,G可向多播組①或②發送多播數據報。主機G所在的局域網上可以沒有任何多播組的成員。顯然,多播數據報所經過的許多網絡,也不一定非要有多播組成員。總之,多播數據報可以由沒有加入多播組的主機發出,也可以通過沒有組成員接入的網絡。正因爲如此,IP多播就成爲比較複雜的問題。下面介紹這兩種協議的要點。
2.網際組管理協議IGMP
和網際控制報文協議ICMP相似,IGMP使用IP數據報傳遞其報文(即IGMP報文加上IP首部構成IP數據報),但它也向IP提供服務。因此,我們不把IGMP看成是一個單獨的協議,而是屬於整個網際協議IP的一個組成部分。從概念上講,IGMP的工作可分爲兩個階段:
第一階段:當某臺主機加入新的多播組時,該主機應向多播組的多播地址發送IGMP報文,聲明自己要成爲該組的成員。本地的多播路由器收到IGMP報文後,還要利用多播路由選擇協議把這種組成員關係轉發給互聯網上的其他多播路由器。
第二階段:組成員關係是動態的。本地多播路由器要週期性地探詢本地局域網上的主機,以便知道這些主機是否還繼續是組的成員。只要有一臺主機對某個組響應,那麼多播路由器就認爲這個組是活躍的。但一個組在經過幾次的探詢後仍然沒有一臺主機響應,多播路由器就認爲本網絡上的主機已經都離開了這個組,因此也就不再把這個組的成員關係轉發給其他的多播路由器。多播路由器只需要知道網絡上是否至少還有一臺主機是本組成員即可。實際上,對詢問報文每一個組只需有一臺主機發送響應。如果一臺主機上有多個進程都加入了某個多播組,那麼這臺主機對發給這個多播組的每個多播數據報只接收一個副本,然後給主機中的每一個進程發送一個本地複製的副本。
最後我們還要強調指出,多播數據報的發送者和接收者都不知道(也無法找出)一個多播組的成員有多少,以及這些成員是哪些主機。互聯網中的路由器和主機都不知道哪個應用進程將要向哪個多播組發送多播數據報,因爲任何應用進程都可以在任何時候向任何一個多播組發送多播數據報,而這個應用進程並不需要加入這個多播組。
3.多播路由選擇協議
在多播過程中一個多播組中的成員是動態變化的。例如在收聽網上某個廣播節目時,隨時會有主機加入或離開這個多播組。多播路由選擇實際上就是要找出以源主機爲根節點的多播轉發樹。在多播轉發樹上,每一個多播路由器向樹的葉節點方向轉發收到的多播數據
報,但在多播轉發樹上的路由器不會收到重複的多播數據報(即多播數據報不應在互聯網中兜圈子)。不難看岀,對不同的多播組對應於不同的多播轉發樹。同一個多播組,對不同的源點也會有不同的多播轉發樹。已有了多種實用的多播路由選擇協議,它們在轉發多播數據報時使用了以下的三種方法:
- 洪泛與剪除 這種方法適合於較小的多播組,而所有的組成員接入的局域網也是相鄰接的。
- 隧道技術 隧道技術適用於多播組的位置在地理上很分散的情況。
- 基於核心的發現技術 這種方法對於多播組的大小在較大範圍內變化時都適合。
十六. 網絡地址轉換NAT
1.網絡地址轉換NAT
關於NAT的內容,我在其他博客中已經詳細講解,感興趣的讀者可自行學習
鏈接:https://blog.csdn.net/ThinPikachu/article/details/105754570
十七.多協議標記交換MPLS
1.什麼是MPKS
MPLS利用面向連接技術,使每個分組攜帶一個叫做標記的小整數。當分組到達交換機(即標記交換路由器)時,交換機讀取分組的標記,並用標記值來檢索分組轉發表。這樣就比查找路由表來轉發分組要快得多。
MPLS具有以下三個方面的特點:
- 支持面向連接的服務質量。
- 支持流量工程,平衡網絡負載。
- 有效地支持虛擬專用網VPN。
2.MPLS的工作原理
在傳統的IP網絡中,分組每到達一個路由器,都必須查找路由表,並按照“最長前綴匹配”的原則找到下一跳的IP地址(請注意,前綴的長度是不確定的)。當網絡很大時,查找含有大量項目的路由表要花費很多的時間。在出現突發性的通信量時,往往還會使緩存溢出,這就會引起分組丟失、傳輸時延增大和服務質量下降。MPLS的一個重要特點就是在MPLS域的入口處,給每一個IP數據報打上固定長度“標記”,然後對打上標記的IP數據報用硬件進行轉發,這就使得IP數據報轉發的過程大大地加快了。採用硬件技術對打上標記的IP數據報進行轉發就稱爲標記交換。“交換”也表示在轉發時不再上升到第三層査找轉發表,而是根據標記在第二層(鏈路層)用硬件進行轉發。MPLS可使用多種鏈路層協議,如PPP、以太網、ATM以及幀中繼等。下圖是MPLS協議的基本原理的示意圖。
MPLS域是指該域中有許多彼此相鄰的路由器,並且所有的路由器都是支持MPLS技術的標記交換路由器 LSR 。LSR同時具有標記交換和路由選擇這兩種功能,標記交換功能是爲了快速轉發,但在這之前LSR需要使用路由選擇功能構造轉發表。
上圖中給出了MPLS的基本工作過程如下:
- MPLS域中的各LSR使用專門的標記分配協議LDP交換報文,並找出和特定標記相對應的路徑,即標記交換路徑LSP。例如
在圖中的路徑A→B→C→D。各LSR根據這些路徑構造出轉發表。這個過程和路由器構造自己的路由表相似。應注意的是,MPLS是面向連接的,因爲在標記交換路徑LSP上的第一個LSR就根據IP數據報的初始標記確定了整個的標記交換路徑,就像一條虛連接一樣。 - 當一個IP數據報進入到MPLS域時,MPLS入口結點就給它打上標記(後面我們就會知道,這實際上是插入一個MPLS首部),並按照轉發表把它轉發給下一個LSR。以後的所有LSR都按照標記進行轉發給IP數據報打標記的過程叫做分類。嚴格的第三層(網絡層)分類只使用了IP首部中的字段,如源IP地址和目的IP。
- 由於在全網內統一分配全局標記數值是非常困難的,因此一個標記僅僅在兩個標記交換路由器LSR之間纔有意義。分組每經過一個LSR,LSR就要做兩件事:一是轉發,是更換新的標記,即把入標記更換成爲出標記。這就叫做標記對換。做這兩件事所需的數據都已清楚地寫在轉發表中。例如,上圖中的標記交換路由器B從入接口0收到一個入標記爲3的IP數據報,查找了如下的轉發表:,標記交換路由器B就知道應當把該IP數據報從出接口1轉發出去,同時把標記對換爲1。當IP數據報進入下一個LSR時,這時的入標記就是剛纔得到的出標記。因此,標記交換路由器C接着在轉發該IP數據報時,又把入標記1對換爲出標記2。
- 當IP數據報離開MPLS域時,MPLS出口結點就把MPLS的標記去除,把IP數據報交付非MPLS的主機或路由器,以後就按照普通的轉發方法進行轉發。
上述的這種“由入口LSR確定進入MPLS域以後的轉發路徑”稱爲顯式路由選擇。
3.轉發等價類FEC
MPLS有個很重要的概念就是轉發等價類FEC。所謂“轉發等價類”就是路由器按照同樣方式對待的IP數據報的集合。這裏“按照同樣方式對待”表示從同樣接口轉發到同樣的下一跳地址,並且具有同樣服務類別和同樣丟棄優先級等。FEC的例子是:
- 目的IP地址與某一個特定IP地址的前綴匹配的IP數據報(這就相當於普通的IP路由器)
- 所有源地址與目的地址都相同的IP數據報
- 具有某種服務質量需求的IP數據報
總之,劃分FEC的方法不受什麼限制,這都由網絡管理員來控制,因此非常靈活。入口結點並不是給每一個IP數據報指派一個不同的標記,而是將屬於同樣FEC的IP數據報都指派同樣的標記。FEC和標記是一一對應的關係。
例如:
下圖(a)給出一個把FEC用於負載平衡的例子。圖(a)的主機H1和H2分別向H3和H4發送大量數據。路由器A和C是數據傳輸必須經過的。但傳統的路由選擇協議只能選擇最短路徑A→B→C,這就可能導致這段最短路徑過載。
圖(b)表示在MPLS的情況下,入口結點A可設置兩種FEC:“源地址爲H而目的地址爲H3”和“源地址爲H2而目的地址爲H4”,把前一種FEC的路徑設置爲H1→A→B→C→H3,而後一種的路徑設置爲H2→A→D→E→C→H4這樣可使網絡的負載較爲平衡。
4.MPLS首部的位置與格式
MPLS並不要求下層的網絡都使用面向連接的技術。因此一對MPLS路由器之間的物理連接,既可以由一個專用電路組成,也可以使用像以太網這樣的網絡。但是這些網絡並不提供打標記的手段,而IPv4數據報首部也沒有多餘的位置存放MPLS標記。這就需要使用一種封裝技術:在把IP數據報封裝成以太網幀之前,先要插入一個MPLS首部。從層次的角度看,MPLS首部就處在第二層和第三層之間。在把加上MPLS首部的IP數據報封裝成以太網幀時,以太網的類型字段在單播的情況下設置爲,而在多播的情況下爲。這樣,接收方可以用幀的類型來判決這個幀是攜帶了MPLS標記還是一個常規的IP數據報。
上圖給出了MPLS首部的格式。可見“給IP數據報打上標記”其實就是在以太網的幀首部和IP數據報的首部之間插入一個4字節的MPLS首部。具體的標記就在“標記值”這個字段中。
MPLS首部共包括以下四個字段:
- 標記值 佔20位。由於一個MPLS標記佔20位。
- 試驗 佔3位,目前保留用於試驗。
- 棧S 佔1位,在有“標記棧”時使用。
- 生存時間TTL 佔8位,用來防止MPLS分組在MPLS域中兜圈子。