計算機網絡筆記整理(四):網絡層

一、網絡層提供的兩種服務

  1. 虛電路服務
    藉助於電信網的成功經驗,讓網絡負責可靠交付。用面向連接的通信方式,當兩個計算機進行通信時,應當向建立連接(在分組交換中建立一條虛電路VC(Virtual Circuit)),以保證雙方通信所需的一切網絡資源,然後雙方沿着已建立的虛電路發送分組。這樣的分組的首部不需要填寫完整的目的主機地址,而只需要填寫這條虛電路的編號(一個不大的整數),因而減少了分組的開銷。這種通信方式如果再使用可靠傳輸的網絡協議,就可使所發的分組無差錯按序到達終點,也不丟失、不重複。在通信結束後要釋放建立的虛電路,圖1(a)是網絡提供虛電路服務的示意圖,主機H1和H2之間交換的分組都必須在事先建立的虛電路上傳送。

  2. 數據報服務
    考慮到計算機網絡的端系統是有智能的計算機,計算機有很強的差錯處理能力(不像電信網的終端(電話機)非常簡單,無智能和差錯處理能力),因此因特網在設計上就採用了和電信網完全不同的思路。網絡層向上只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務。網絡在發送分組時不需要先建立連接,每一個分組(也就是IP數據報)獨立發送,與其前後的分組無關(不編號)。網絡層不提供服務質量的承諾。所傳送的分組可能出錯、丟失、重複和失序,也不保證分組交付的時限。由於傳輸網絡不提供端到端的可靠傳輸服務,這樣的好處是路由器做的比較簡單而且價格低廉,大大降低了網絡的造價,運行方式靈活,能夠適應多種應用。圖1(b)是網絡提供數據報服務的示意圖,主機H1向H2發送的分組各自獨立地選擇路由,而且傳送的過程中還可能丟失。
    網絡層提供的服務

表1歸納了虛電路服務和數據報服務的主要區別。

對比的方面 虛電路服務 數據報服務
思路 可靠通信應當由網絡來保證 可靠通信應當由用戶主機來保證
連接的建立 必須有 不需要
終點地址 僅在連接建立階段使用,每個分組使用短的虛電路號 每個分組都有終點的完整地址
分組的轉發 屬於同一條虛電路的分組均按照同一路由進行轉發 每個分組獨立選擇路由進行轉發
當結點出故障時 所有通過出故障的結點的虛電路均不能工作 出故障的結點可能會丟失分組,一些路由可能會發送變化
分組順序 總是按發送順序到達終點 到達終點時不一定按發送順序
端到端的差錯處理和流量控制 可以由網絡負責,也可以由用戶主機負責 由用戶主機負責

二、網際協議IP

網際協議IP是TCP/IP體系中最主要的協議之一,也就是最重要的因特網標準協議之一,與IP協議配套使用的還有四個協議:地址解析協議ARP(Address Resolution Protocol)、逆地址解析協議RARP(Reverse Address Resolution Protocol)、網際控制報文協議ICMP(Internet Control Message Protocol)、網際組管理協議IGMP(Internet Group Management Protocol)。

  1. 虛擬互連網絡
    由於用戶的需求是多種多樣的,沒有一種單一的網絡能夠適應所有用戶的需求,所以市場上有很多種不同性能、不同網絡協議的網絡。面對不同的尋址方案、不同的最大分組長度、不同的網絡接入機制、不同的超時控制、不同的差錯恢復方法等等,網絡的互連變得複雜。
    TCP/IP體系在網絡互連上採用的做法是在網絡層(即IP層)採用了標準化協議,但相互連接的網絡可以是異構的。由於參加互連的計算機網絡都使用相同的網際協議IP,因此可以把互連以後的計算機網絡看成虛擬互連網絡,所謂虛擬互連網絡就是邏輯互連網絡,也就是互連起來的各種物理網絡的異構性本來是客觀存在的,但是利用IP協議可以使這些性能各異的網絡在網絡層上看起來好像是一個統一的網絡
    網絡層使用中間設備路由器(router) 用來在互聯網中進行路由選擇。(物理層/數據鏈路層/網絡層以上分別對應的中間設備是轉發器(repeater)/網橋或橋接器(bridge)/網關(gateway))。如圖2所示,主機H1先要查找自己的路由表,看目的主機是否就在本網絡上,則不需要經過任何路由器而是直接交付,任務就完成。如不是,則必須把IP數據報發送給某個路由器 (R1),R1在查找了自己的路由表後,知道應當把數據報轉發給R2進行間接交付,這樣一直轉發直到路由器R5直到自己是和H2在同一網絡上,就把數據報直接交付給目的主機H2。圖中協議棧中的數字1~5分別表示物理層、數據鏈路層、網絡層、運輸層和應用層。
    分組傳送

  2. 分類的IP地址
    有了虛擬互連網絡的概念,再討論在這樣的虛擬網絡上如何尋址。

    • 2.1 IP地址及其表示方法
      IP地址就是給因特網上的每一個主機(或路由器)的每一個接口分配一個在全世界範圍是唯一的32位的標識符。IP地址現在由因特網名字與號碼指派公司ICANN(Internet Corporation for Assigned Names and Numbers) 進行分配。
      IP地址被劃分爲若干個固定類,每一類地址都由兩個固定長度的字段組成,其中第一個字段是網絡號(net-id),它標誌主機(或路由器)所連接到的網絡。一個網絡號在整個因特網範圍內必須是唯一的。第二個字段是主機號(host-id),它標誌該主機(或路由器)。一個主機號在它前面的網絡號所指明的網絡範圍內必須是唯一的。由此可見,一個IP地址在整個因特網範圍內是唯一的。這種兩級的IP地址可以記爲IP地址 ::= {<網絡號>, <主機號>}
      圖3給出了各種IP地址的網絡號字段和主機號字段,這裏的A類、B類和C類地址都是單播地址(一對一通信),是最常用的。
      IP地址分類
      由圖3可以看出:

      • A類、B類和C類地址的網絡號字段分別是1,2,和3字節長 ,而在網絡號字段的最前面有1~3位的類別號,其數值分別規定爲0,10和110。
      • A類、B類和C類地址的主機號字段分別爲3個、2個和1個字節長。
      • D類地址(前四位是1110)用於多播(一對多通信)。
      • E類地址(前四位是1111)保留爲以後用。

      此處指出,由於近年來已經廣泛使用無分類IP地址進行路由選擇,A類、B類和C類地址的區分已經成爲歷史。
      從IP地址的結構來看,IP地址並不僅僅指明一個主機,同時指明瞭主機所連接到的網絡。將IP地址分爲三個類別主要是考慮到不同網絡需要的主機數量不同,把IP地址劃分爲A類、B類和C類滿足不同用戶的要求。當某個單位申請到一個IP地址時,實際上是獲得了具有同樣網絡號的一塊地址。其中具體的各個主機號則由該單位自行分配,只要做到在該單位管轄範圍內無重複的主機號即可。

    • 2.2 常用的三種類別的IP地址
      A類地址 的網絡號字段佔一個字節,只有7位可供使用(該字段的第一位已固定爲0),最終可指派的網絡號是126個(即2^7-2)。減2是去除了:(a) 網絡號字段爲全0的IP地址是個保留地址,表示“這個(this)”、“本網絡”;(b) 網絡號爲127(即0111 1111)保留作爲本地軟件環回測試(loopback test) 本主機的進程之間通信使用。若主機發送一個目的地址爲環回地址(如127.0.0.1)的IP數據報,則本主機中的協議軟件就處理數據報中的數據,而不會把數據報發送到任何網絡。目的地址爲環回地址的IP數據報永遠不會出現在任何網絡上,因爲網絡號爲127的地址根本不是一個網絡地址。
      A類地址的主機號佔3字節,因此每一個A類網絡中的最大主機數是2^24-2。此處減2去除的是:(a) 全0的主機號字段表示該IP地址是“本主機”所連接到的單個網絡地址(如一主機的IP地址爲5.6.7.8,則該主機所在的網絡地址就是5.0.0.0),而全1表示“所有的(all)”,因此全1的主機號字段表示該網絡上的所有主機。
      IP地址空間共有 2^32 個地址。整個A類地址空間共有 2^31 個地址,佔有整個IP地址空間的50%。
      B類地址 的網絡號字段有2字節,但前面兩位(10)已經固定,只剩下14位可以進行分配。因爲網絡號字段後面的14位無論怎樣取值也不可能出現使整個2字節的網絡號字段成爲全0或全1,因此這裏不存在網絡總數減2的問題。但實際上B類網絡地址128.0.0.0是不指派的,而可以指派的B類最小網絡地址是128.1.0.0。因此B類地址可指派的網絡數爲2\^14-1。B類地址的每一個網絡上的最大主機數是2\^16-2,減2扣除全0和全1的主機號。整個B類地址空間共約有2^30個地址,佔整個IP地址空間的25%。
      C類地址 有3個字節的網絡號字段,最前面的3位是(110),還有21位可以進行分配。C類網絡地址192.0.0.0也是不指派的。可以指派的C類最小網絡地址是192.0.1.0。因此C類地址可指派的網絡總數是2\^21-1每一個C類地址的最大主機數是2\^8-2。整個C類地址空間共約有2^29個地址,佔整個IP地址的12.5%。
      表2 給出IP地址的指派範圍如下:

      網絡類別 最大可指派的網絡數 第一個可指派的網絡號 最後一個可指派的網絡號 每個網絡中的最大主機數
      A 126(2^7-2) 1 126 16777214(2\^24-2)
      B 16383(2\^14-1) 128.1 191.255 65534(2\^16-2)
      C 2097151(2\^21-1) 192.0.1 223.255.255 254(2\^8-2)

      表3給出了一般不使用的IP地址,這些地址只能在特定的情況下使用:

      網絡號 主機號 源地址使用 目的地址使用 代表的意思
      0 0 可以 不可 在本網絡上的本主機
      0 host-id 可以 不可 在本網絡上的某個主機host-id
      全1 全1 不可 可以 只在本網絡上進行廣播(各路由器均不轉發)
      net-id 全1 不可 可以 對net-id上的所有主機進行廣播
      127 非全0或全1的任何數 可以 可以 用作本地軟件環回測試只用

      IP地址的重要特點

      • 每一個IP地址都由網絡號和主機號兩部分組成。從這個意義上說IP地址是一種分等級的地址結構。分兩個等級的好處是:(a) IP地址管理機構在分配IP地址時只分配網絡號(第一級),而剩下的主機號(第二級)則由得到該網絡號的單位自行分配。這樣就方便了IP地址的管理。 (b) 路由器僅根據目的主機所連接的網絡號來轉發分組(而不考慮目的主機號),這樣就可以使路由表中的項目數大幅度減少,從而減小了路由表所佔的存儲空間以及查找路由表的時間
      • 實際上IP地址是標誌一個主機(或路由器)和一條鏈路的接口。所以當一個主機擁有多個屬於不同網絡號的IP地址時,稱爲多歸屬主機(multihomed host),該主機同時連接到兩個網絡。由於一個路由器至少應當連接兩個網絡,因此一個路由器至少應當有兩個不同的IP地址(兩個路由器之間直接相連,連線兩端的接口可以分配地址也可以不分配,爲了節省IP地址資源,對於這種僅由一段連線構成的特殊“網絡”,現在也常常不分配IP地址,通常把這樣的特殊網絡叫做無編號網絡(unnumbered network)無名網絡(anonymous network))。
      • 一個網絡是指具有相同網絡號net-id的主機的集合。因此,用轉發器或網橋連接起來的若干個局域網仍爲一個網絡,這些局域網都具有相同的網絡號。具有不同網絡號的局域網必須使用路由器進行互連
      • 在IP地址中,所有分配到網絡號的網絡都是平等的。
  3. IP地址與硬件地址
    從層次的角度看,物理地址是數據鏈路層和物理層使用的地址,而IP地址是網絡層和以上各層使用的地址,是一種邏輯地址(稱IP地址是邏輯地址是因爲IP地址是用軟件實現的)。
    IP地址放在IP數據報的首部,而硬件地址則放在MAC幀的首部。當IP數據報放入數據鏈路層的MAC幀中以後,整個IP數據報就成爲MAC幀的數據,因而在數據鏈路層看不見數據報的IP地址
  4. 地址解析協議ARP和逆地址解析協議RARP
    ARP和RARP用於解決IP地址和物理地址之間的對應問題的兩個協議。ARP協議找出IP地址對應的物理地址,RARP協議找出物理地址對弈的IP協議。
    由於現在的DHCP協議(應用層)已經包含了RARP協議的功能,因此現在已經不再單獨使用了。只要瞭解其作用是隻知道自己硬件地址的主機能夠通過RARP協議找出其IP地址。
    由於主機的硬件地址可能會改變,而IP地址和硬件地址不存在簡單的映射關係。此外,在一個網絡上可能經常會有新的主機加入或者撤走一些主機。地址解析協議ARP解決IP地址和硬件地址的映射問題的方法是在主機ARP高速緩存中存放一個從IP地址到硬件地址的映射表,並且該映射表還經常動態更新(新增或超時刪除)
    每一個主機都設有一個ARP高速緩存(ARP cache),裏面有本局域網上的各主機和路由器的IP地址到硬件地址的映射表。當主機A要想向本局域網上的某個主機B發送IP數據報時,就先在其ARP高速緩存中查看有無主機B的IP地址,若有則在ARP高速緩存中查出其對應的硬件地址,再把這個硬件地址寫入MAC幀,然後通過局域網把該MAC幀發往此硬件地址。當查不到主機B的IP地址時,主機A就會自動運行ARP:(a) ARP進程在本局域網上廣播發送一個ARP請求分組,請求的主要內容是“我的IP地址時209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址爲209.0.0.6的主機的硬件地址。”;(b) 在本局域網上的所有主機上運行的ARP進程都收到此ARP請求分組。(c) 主機B在ARP請求分組中見到自己的IP地址,就向主機A發送ARP響應分組,並寫入自己的硬件地址。其餘的所有主機都不理睬這個ARP請求分組,ARP響應分組的主要內容是“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A。”注意ARP請求分組是廣播發送的,ARP響應分組是普通的單播,即從一個源地址發送到一個目的地址。同時主機A的這一地址映射也寫入了主機B自己的ARP高速緩存中。(d) 主機A收到主機B的ARP響應分組後,就在其ARP高速緩存中寫入主機B的IP地址到硬件地址的映射。
    ARP把保存在高速緩存中的每一個映射地址項目都設置生存時間。凡是超過生存時間的項目就從高速緩存中刪除掉。生存時間在某些主機硬件地址發生改變或者消失時十分有意義,可以及時更新或者刪除映射地址。
    注意ARP是解決同一個局域網上的主機或路由器的IP地址和硬件地址的映射問題。對於不在同一個局域網的主機,並不需要知道其硬件地址,只要先通過IP地址找到路由器(需要其硬件地址)進行轉發即可。
    既然有硬件地址,爲什麼我們要使用抽象的IP地址來尋找目的主機並調用ARP來找出硬件地址呢?主要是因爲網絡類型多種多樣,其硬件地址格式也不同,要使得這些異構網絡能夠互相通信就必須進行非常複雜的硬件地址轉換工作。統一的IP地址解決了這個複雜的問題,不同主機之間的通信就像連接在同一個網絡上一樣。
  5. IP數據包的格式
    在TCP/IP標準中,各種數據報格式常常以32位(即4字節)爲單位來描述。IP數據報的完整格式如圖4所示:
    IP數據報
    IP數據報首部各字段的意義如下。

    • IP數據報首部的固定部分中的各字段
      (1) 版本 佔4位,指IP協議的版本。通信雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號爲4(IPv4),之後可能使用IPv6。
      (2) 首部長度 佔4位,可表示的最大十進制數值是15。這個字段所表示的單位是32位字(1個32位字長是4字節),因此當IP的首部長度爲1111時(即十進制的15),首部長度就達到最大值60字節。當IP分組的首部長度不是4字節的整數倍時,必須利用最後的填充字段加以填充。因此數據部分永遠在4字節的整數倍開始,這樣在實現IP協議時較爲方便。首部長度限制的缺點是有時不夠用。最常用的首部長度是20字節(即首部長度爲0101),此時不使用任何選項。
      (3) 區分服務 佔8位,用來獲得更好的服務。在舊標準中叫做服務類型,但實際一直未被使用。1998年IETF把這個字段改名爲區分服務DS(Differentiated Services),只用在使用區分服務纔會使用該字段(不同數值表示提供不同等級的服務質量)。
      (4) 總長度 首部和數據之和,單位爲字節。總長度字段爲16位,則數據包的最大長度爲2\^16-1=65535字節。
      有關IP的標準文檔規定,所有主機和路由器必須能處理的IP數據報長度不得小於576字節,這個數值也就是最小的IP數據報的總長度。當數據報長度超過網絡說容許的最大傳送單元MTU時,就必須把過長的數據報進行分片,此時數據報首部中的總長度字段指的是分片後的每一個分片的首部長度和數據長度總和。
      (5) 標識(identification) 佔16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識字段。但這個“標識”並不是序號,因爲IP是無連接服務,數據報不存在按序接收的問題。主要是當數據報分片是,這個標識字段被複制到所有數據報片中,接收端根據標識字段把各數據報片重裝成原來的數據報
      (6) 標誌(flag) 佔3位。目前只有兩位有意義。

      • 標誌字段中的最低位記爲MF(More Fragment)。MF=1即表示後面“還有分片”的數據包。MF=0表示這已經是若干數據報片中的最後一個。
      • 標誌字段中間的一位記爲DF(Don’t Fragment),意思是“不能分片”,只有當DF=0時才允許分片。

      (7) 片位移 佔13位。較長的分組在分片後,某片在原分組中的相對位置。也就是說相對於用戶數據字段的起點,該片從何處開始。片偏移以8個字節爲偏移單位。每個分片的長度一定是8字節(64位)的整數倍。
      (8) 生存時間TTL(Time To Live) 佔8位,表明是數據報在網絡中的壽命,目的是防止無法交付的數據報無限制地在因特網中兜圈子,因而白白消耗網絡資源。初始的TTL值的單位爲秒,每經過一個路由器,TTL就減去數據報在路由器所消耗的一段時間,當TTL值減爲0時,就丟棄該數據報。
      由於現在路由器處理數據報所需時間不斷縮短,一般遠遠小於1秒,後來就把TTL字段的功能改爲“跳數限制”(但名稱不變)。路由器在轉發數據報之前就把TTL值減1。也就是TTL的單位不再是秒,而是跳數。其意義是表明數據報在因特網中至多可經過多少個路由器。若TTL初始值爲1,則表示該數據報只能在本局域網中傳送。
      (9) 協議 佔8位,協議字段指出此數據報攜帶的數據使用何種協議,以便目的主機的IP層知道應將數據部分上交給哪個處理過程。常用的一些協議及其協議字段值如下表:

      協議名 ICMP IGMP TCP EGP IGP UDP IPv6 OSPF
      協議字段值 1 2 6 8 9 17 41 89

      (10) 首部檢驗和 佔16位,這個字段只檢驗數據報的首部,不包括數據部分。因爲數據報每經過一個路由器,路由器都要重新計算首部檢驗和(一些字段,如生存時間、標誌、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。檢驗碼的計算方法是:在發送方,先把IP數據報首部劃分爲許多16位字的序列,並把檢驗和字段置零。用反碼算術運算把所有16位字相加後,將得到的和的反碼寫入檢驗和字段。接收方收到數據報後,將首部的所有16位字再使用反碼算術運算相加一次,將得到的和取反碼,即得出接收方檢驗和的計算結果。若首部未發生變化,則結果必爲0,保留數據報,否則丟棄數據報。
      (11) 源地址 佔32位。
      (12) 目的地址 佔32位。

    • IP數據報首部的可變部分
      是一個選項字段,用來支持排錯、測量以及安全等措施。此字段的長度從1個字節到40個字節不等,最後用全0的填充字段補齊成爲4字節的整數倍。增加可變部分是爲了增加IP數據報的功能,但是這使得IP數據報的首部長度變爲可變的,增加了路由器處理數據報的開銷。IPv6把IP數據報的首部長度設置爲固定的
  6. IP層轉發分組的流程
    現在的路由表是按主機所在的網絡地址來製作路由表,每一行對應於一個網絡,大大降低了路由表的規模。在路由表中,對每一條路由最主要的是以下兩個信息:(目的網絡地址下一跳地址)。
    雖然因特網所有的分組轉發都是基於目的主機所在的網絡,但是在大多數情況下都允許有這樣的特例,即對特定的目的主機指明一個路由,這種路由稱爲特定主機路由,能夠更方便地控制和測試網絡。路由器還可採用默認路由(default route) 以減少路由表所佔用的空間和搜索路由表所用的時間,這種轉發方式在一個網絡只有很少的對外連接時是很有用的。
    注意到,在IP數據包的首部中沒有什麼地方可以用來指明“下一跳路由器的IP地址”,待轉發的數據報是怎麼找到下一跳路由器呢?噹噹路由器收到一個待轉發的數據報,在從路由表得到下一跳路由器的IP地址後,把這個地址送交下層的網絡接口軟件,使用ARP將下一跳路由器的IP地址轉換成硬件地址,並將此硬件地址放在鏈路層的MAC幀的首部,然後根據這個硬件地址找到下一條路由器。
    根據上述,可歸納得出分組轉發算法如下:
    • 從數據報的首部提取目的主機的IP地址D,得出目的網絡地址N。
    • 若N就是與此路由器直接相連的某個網絡地址,則進行直接交付,不需要再經過其他的路由器,直接把數據報交付給目的主機(把目的主機地址D轉換爲具體的硬件地址,把數據報封裝爲MAC幀,再發送此幀);否則就是間接交付,執行下一步(3)。
    • 若路由表中有目的地址爲D的特定主機路由,則把數據報傳送給路由表中所表明的下一跳路由器;否則,執行下一步(4)。
    • 若路由表中有到達網絡N的路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行下一步(5).
    • 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行下一步(6)。
    • 報告轉發分組出錯。

三、劃分子網和構造超網

  1. 劃分子網
    • 從兩級IP地址到三級IP地址
      IP地址的設計不夠合理:(1) IP地址空間的利用率有時很低。比如有些單位考慮到今後可能的發展,申請了一個較大的地址網絡,有許多IP地址被浪費。(2) 給每一個物理網絡分配一個網絡號會使路由表變得太大因而使網絡性能變壞。(3) 兩級IP地址不夠靈活。有時一個單位需要在新的地點馬上開通一個新的網絡,但是在申請到一個新的IP地址之前,新增加的網絡是不可能連接到因特網上工作的。希望能夠使一個單位能隨時靈活地增加本單位的網絡,而不必事先到因特網管理機構去申請新的網絡號。原來的兩級IP地址無法做到這一點。
      爲了解決上述問題,從1985年起IP地址中又增加了一個“子網號字段”,使兩級IP地址變成三級IP地址,這種做法叫作劃分子網(subnetting),或子網尋址子網路由選擇
      劃分子網的基本思路如下:
      • (1) 一個擁有許多物理網絡的單位,可將所屬的物理網絡劃分爲若干個子網(subnet)。本單位以外的網絡純屬一個單位內部的事情,本單位以外的網絡看不見這個網絡是由多少個子網組成,因爲這個單位對外仍然表現爲一個網絡
      • (2) 劃分子網的方法是從網絡的主機號借用若干位作爲子網號subnet-id,當然主機號也就相應減少了同樣的位數。可以使用記法如:IP地址:={<網絡號>, <子網號>, <主機號>}
      • (3) 凡是從其他網絡發送給本單位某個主機的IP數據報,仍然是根據IP數據報的目的網絡號找到連接在本單位網絡上的路由器。但此路由器在收到IP數據報後,再按目的網絡號和子網號找到目的子網,把IP數據報交付給目的主機。
    • 子網掩碼
      假定有一個數據報,已經到達網絡外部和內部交接處的路由器,那麼路由器時怎麼轉發到子網的呢?
      32位的IP地址本身以及數據報的首部都沒有包含任何有關子網劃分的信息,所以並不知道源主機或者目的主機所連接的網絡是否進行了子網的劃分,所以子網掩碼應運而生。
      子網掩碼是32位的,由一串連續1和跟隨一串0組成。子網掩碼中的1對應於IP地址中原來的net-id和subnet-id,而子網掩碼中的0對應於現在的host-id。將子網掩碼和收到的數據報的目的IP地址按位與(AND),得到了所要找的子網的網絡地址
      爲了便於查找路由表,不劃分子網時,也要使用子網掩碼。因爲現在因特網的標準規定:所有的網絡都必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄。若一個網絡不劃分子網,那麼該網絡的子網掩碼就用默認子網掩碼。默認子網掩碼中1的位置和IP地址中網絡號字段net-id正好相對應。
      根據已成爲因特網標準協議的RFC 950文檔,子網號不能爲全1或全0,但隨着無分類域間路由選擇CIDR的廣泛使用,現在全1和全0的子網號也可以使用,但一定要謹慎使用,路由器所用的路由選擇軟件不一定支持。
      劃分子網增加了靈活性,但卻減少了能夠連接在網絡上的主機總數。
  2. 使用子網時分組的轉發
    使用子網劃分後,路由表必須包含以下三項內容:目的網絡地址子網掩碼下一跳地址
    在劃分子網的情況下,路由器轉發分組的算法如下:
    (1) 從收到的數據報的首部提取目的IP地址D。
    (2) 先判斷是否爲直接交付。對路由器直接相連的網絡逐個進行檢查:用各網絡的子網掩碼和D逐位相“與”(AND操作),看結果是否和相應的網絡地址匹配。若匹配,則把分組進行直接交付(當然還需要把D轉換成物理地址,把數據報封裝成幀發送出去),轉發任務結束,否則就是間接交付,執行(3)。
    (3) 若路由表中有目的地址爲D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器,否則執行(4)。
    (4) 對路由表中的每一行(目的網絡地址,子網掩碼,下一跳地址),用其中的子網掩碼和D逐位相與,其結果爲N。若N與該行的目的網絡地址匹配,則把數據報傳送給該行指明的下一跳路由器;否則,執行(5)。
    (5) 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行(6)。
    (6) 報告轉發分組出錯。
  3. 無分類編址CIDR(構造超網)

    1. 網絡前綴
      無分類編址的方法是用於解決兩個問題:(1) B類地址在1992年已分配了近一半,眼看很快就將全部分配完畢;(2) 因特網主幹網上的路由表中的項目數急劇增長(幾千->幾萬)。IPv6協議是用於解決另一個問題:整個IPv4的地址空間最終將全部耗盡。
      早先在RFC1009中就指明瞭在一個劃分子網的網絡中可同時使用幾個不同的子網掩碼。使用變長子網掩碼VLSM(Variable Length Subnet Mask) 可進一步提高IP地址資源的利用率。
      無分類編址 方法,正式名字是無分類 域間路由選擇CIDR(Classless Inter-Domain Routing,讀音是“sider”)是在VLSM的基礎上研究出的。
      CIDR最主要的特點是:
      (1) CIDR消除了傳統的A類、B類和C類地址以及劃分子網的概念。CIDR把32位的IP地址劃分爲兩部分,前面部分是“網絡前綴”(network-prefix)(或簡稱爲“前綴”)用來指明網絡,後面的部分則用來指明主機。因此CIDR使IP地址從三級編址(使用子網掩碼)又回到兩級編址,但這已是無分類的兩級編址,其記法是:IP地址::={<網絡前綴>, <主機號>}。
      CIDR還使用“斜線記法”(slash notation),或稱爲CIDR記法,即在IP地址後面加上斜線“/”,然後寫上網絡前綴所佔的位數。
      (2) CIDR把網絡前綴都相同的連續IP地址組成一個“CIDR地址塊”,只要知道CIDR地址塊中的任何一個地址,就可以知道這個地址塊的起始地址(即最小地址)和最大地址,以及地址中的地址數。
      由於一個CIDR地址塊中有很多地址,所以在路由表中就利用CIDR地址塊來查找目的網絡,這種地址的聚合常稱爲路由聚合(route aggregation),使得路由表中的一個項目可以表示原來傳統分類地址的很多個路由,路由聚合也稱爲構成超網(supernetting)。
      CIDR記法有多種形式,如地址塊10.0.0.0/10可簡寫爲10/10(把點分十進制中低位連續的0省略);另一種簡化表示實在網絡前綴的後面加一個星號*,如:00001010 00*。

    2. 最長前綴匹配
      使用CIDR後,路由表中的每個項目由“網絡前綴”和“下一跳地址”組成,但是在查找路由表時可能會得到不止一個匹配結果。正確的匹配是:從匹配結果中選擇具有最長網絡前綴的路由,這就是最長前綴匹配(longest-prefix matching),又稱爲最長匹配最佳匹配

    3. 使用二叉線索查找路由表
      爲了進行更加有效的查找1,通常是把無分類表示的路由表放在一種層次的數據結構中,然後自上而下地按層次進行查找,這裏最常用的就是二叉線索(binary trie),它是一種特殊結構的樹。IP地址從左到右的比特值決定了從根節點逐層向下層延伸的路徑,而二叉線索中的各個路徑就代表路由表中存放的各個地址。
      在表中所有IP地址中,該前綴是唯一的,這就是每一個IP地址的唯一前綴(unique prefix)。利用這些唯一前綴來構造二叉線索。在進行查找時,只要能夠和唯一前綴相匹配就行了。構造的二叉樹中的每個葉節點代表一個唯一前綴。舉例如圖5所示:
      二叉線索
      “唯一前綴匹配”和“網絡前綴匹配”的關係
      要將二叉線索用於路由表中,還必須使二叉線索中的每一個葉節點包含所對應的網絡前綴和子網掩碼。當搜索到一個葉節點時,就必須將尋找匹配的目的地址和該葉節點的子網掩碼進行逐位“與”運算,看結果是否與對應的網絡前綴相匹配。若匹配,就按下一跳的接口轉發該分組。否則,就丟棄該分組。
      二叉線索只是提供了一種可以快速在路由表中找到匹配的葉節點的機制。但這是否和網絡前綴匹配,還要和子網掩碼進行一次邏輯與的運算。

四、網際控制報文協議ICMP

網際控制報文協議ICMP(Internet Control Message Protocol)允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP報文作爲IP層數據報的數據,加上數據報的首部,組成IP數據報發送出去。ICMP報文格式如圖6所示:
ICMP報文

  1. ICMP報文的種類
    ICMP報文的種類有兩種,即ICMP差錯報告報文ICMP詢問報文
    ICMP報文的前4個字節是統一的格式,共有三個字段:類型、代碼和檢驗和。接着的4個字節的內容與ICMP的類型有關。最後面是數據字段,其長度取決於ICMP的類型。下表給出了幾種常用的ICMP報文類型:

    ICMP報文種類 類型的值 ICMP報文的類型
    差錯報告報文 3 終點不可達
    差錯報告報文 4 源點抑制(Source quench)
    差錯報告報文 11 時間超過
    差錯報告報文 12 參數問題
    差錯報告報文 5 改變路由(Redirect)
    詢問報文 8或0 回送(Echo)請求或回答
    詢問報文 13或14 時間戳(Timestamp)請求或回答
    • ICMP差錯報告報文共有五種,即:
      (1) 終點不可達 當路由器或主機不能交付數據報時就向源點發送終點不可達報文。
      (2) 源點抑制 當路由器或主機由於擁塞而丟棄數據報時,就向源點發送源點抑制報文,使源點知道應當把數據報的發送速率放慢。
      (3) 時間超過 當路由器收到生存時間爲零的數據包時,除丟棄該數據報外,還要向源點發送時間超過報文。當終點在預先規定的時間內不能收到一個數據報的全部數據報片時,就把已經收到的數據報片都丟棄,並向源點發送時間超過報文。
      (4) 參數問題 當路由器或目的主機收到的數據報的首部中有的字段的值不正確時,就該丟棄該數據報,並向源點發送參數問題報文。
      (5) 改變路由(重定向) 路由器把改變路由報文發送給主機,讓主機知道下次應將數據報發送給另外的路由器(可通過更好的路由)。
      例如當主機要發送數據報時,首先查找主機自己的路由表,看應當從哪一個接口把數據報發送出去。在主機剛開始工作時,一般都在路由表中設置一個默認路由的IP地址,不管數據報要發送到哪個目的地址,都一律先將數據報傳送給網絡上的這個默認路由器。假如默認路由發現主機發往某個目的地址的數據報不應當經過默認路由器,就用改變路由報文把這情況高速主機。

    所有的ICMP差錯報告報文中的數據字段都具有同樣的格式(如圖7所示)。把收到的需要進行差錯報告的IP數據報的首部和數據字段的前8個字節提取出作爲ICMP報文的數據字段。再加上相應的ICMP差錯報文的前8個字節,就構成了ICMP差錯報告報文。提取收到的IP數據報的數據字段的前8個字節是爲了得到傳輸層的端口號(對於TCP和UDP)以及運輸層報文的發送序號(對於TCP)。這些信息對源點通知高層協議是有用的,整個ICMP報文作爲IP數據報的數據字段發送給源點。
    ICMP差錯報告報文格式

    • 常用的ICMP詢問報文有兩種,即:
      (1) 回送請求和回答 ICMP回送請求報文是由主機或路由器向一個特定的目的主機發出的詢問。收到此報文的主機必須給源主機或路由器發送ICMP回送回答報文。這種詢問報文用來測試目的站是否可達以及瞭解其有關狀態
      (2) 時間戳請求和回答 ICMP時間戳請求報文是請某個主機或路由器回答當前的日期和時間。在ICMP時間戳回答報文中有一個32位的字段,其中寫入的整數代表從1900年1月1日起到當前時刻一共有多少秒。時間戳請求與回答可用來進行時鐘同步和測量時間
  2. ICMP的應用舉例
    • 分組網間探測PING(Packet InterNet Groper) 用於測試兩個主機之間的連通性。PING使用了ICMP回送請求與回送回答報文。PING是應用層直接使用網絡層ICMP的一個例子,沒有通過運輸層的TCP或UDP。
    • traceroute(UNIX)/tracert(Windows) 用於跟蹤一個分組從源點到終點的路徑。該應用從源主機向目的主機發送一連串的IP數據報,數據報中封裝的是無法交付的UDP用戶數據報,第一個數據報的生存時間TTL設置爲1,當數據報到達路徑上的第一個路由器R1,路由器收下該數據報,再把TTL的值減1,由於TTL等於0,R1就把第一個數據報丟棄了,並向源主機發送一個ICMP**時間超過**差錯報告報文,接着第二個數據報、第三個數據報依次類推。

五、因特網的路由選擇協議

  1. 有關路由選擇協議的幾個基本概念
    • 理想的路由算法
      一個理想的路由算法應該有這些特點:(1) 算法必須是正確且完整;(2) 算法在計算上應簡單;(3) 算法應能適應通信量和網絡拓撲的變化,即要有自適應性,或者說穩健性(robustness);(4) 算法應具有穩定性;(5) 算法應是公平的;(6) 算法應是最佳的(使得分組的平均時延最小而網絡的吞吐量最大),最佳只是相對於某一種特定要求下得出的較爲合理的選擇而已。
      路由算法根據能否隨網絡的通信量或拓撲自適應地進行調整變化來劃分,則有兩大類,即靜態路由選擇策略(非自適應路由選擇)動態路由選擇策略(自適應路由選擇)
      靜態路由選擇的特點是簡單和開銷較小,但不能及時適應網絡狀態的變化,對於很簡單的小網絡,完全可以採用靜態路由選擇,用人工配置每一條路由。
      動態路由選擇的特點是能較好地適應網絡狀態的變化,但實現起來較爲複雜,開銷也比較大,因此動態路由協議選擇適用於較複雜的大網絡。
    • 分層次的路由選擇協議
      因特網採用分層次的路由選擇協議的原因:(1) 因特網的規模非常大,如果讓所有的路由器知道所有的網絡應怎樣到達,那麼路由表將非常大,處理起來也花時間。而這些路由器之間交換路由信息所需的帶寬就會使因特網的通信鏈路飽和。(2) 許多單位不願意外接瞭解自己單位網絡的佈局細節和本部門所採用的路由選擇協議,但同時還希望連接到因特網上。
      因特網將整個互聯網劃分爲許多較小的自治系統(autonomous system),一般都記爲AS。自治系統AS的經典定義是在單一的技術管理下的一組路由器,而這些路由器使用一種AS內部的路由選擇協議和共同的度量以確定分組在該AS內的路由,同時還使用一種AS之間的路由選擇協議用以確定分組在AS之間的路由。儘管一個AS使用了多種內部路由選擇協議和度量,但重要的是一個AS對其他AS表現出的是一個單一的和一致的路由選擇策略
      在目前的因特網中,一個大的ISP就是一個自治系統。這樣,因特網就把路由選擇協議劃分爲兩大類,即:
      (1) 內部網關協議IGP(Interior Gateway Protocol) 在一個自治系統內部使用的路由選擇協議,而這與在互聯網中的其他自治系統選用什麼路由選擇協議無關。目前這類選擇協議使用的最多,如RIP和OSPF協議。
      (2) 外部網關協議EGP(External Gateway Protocol) 若源主機和目的主機處在不同的自治系統中(這兩個自治系統可能使用不同的內部網關協議),當數據報傳到一個自治系統的邊界時,就需要使用一種協議將路由選擇信息傳遞到另一個自治系統中。這樣的協議就是外部網關協議EGP。使用最多的外部網關協議是BGP的版本4(BGP-4)。
      自治系統之間的路由選擇叫做域間路由選擇(interdomain routing),而在自治系統內部的路由選擇叫做域內路由選擇(intradomain routing)。
  2. 內部網關協議RIP

    • 工作原理
      路由信息協議RIP(Routing Information Protocol)是內部網關協議IGP中最先得到廣泛使用的協議。RIP是一種分佈式的基於距離向量的路由選擇協議,是因特網的標準協議,其最大優點就是簡單。
      RIP的協議要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離記錄(因此,這是一組距離,即“距離向量”)。RIP協議的“距離”實際上指的是“跳數”(hop count)。RIP認爲好的路由就是通過的路由器的數目少。RIP允許一條路徑最多隻能包含15個路由器。因此“距離”等於16時即相當於不可達。可見RIP只適用於小型互聯網。RIP不能在兩個網絡之間同時使用多條路由。RIP選擇一條具有最少路由器的路由(即最短路由),哪怕還存在另一條高速(低時延)但路由器較多的路由。
      RIP協議的特點如下
      (1) 僅和相鄰路由器交換信息
      (2) 路由器交換的信息是當前本路由器所知道的全部信息,即自己的路由表。也就是“我到本自治系統中所有網絡的(最短)距離,以及到每個網絡應經過的下一跳路由器”。
      (3) 按固定的時間間隔交換路由信息。然後路由器根據收到的路由信息更新路由表。當網絡拓撲發生變化時,路由器也及時向相鄰路由器通告拓撲變化後的路由信息。

      此處強調,路由器在剛剛開始工作時,只知道直接連接的網絡的距離。接着,每一個路由器也只和數目非常有限的相鄰路由器交換並更新路由信息。但經過若干次更新後,所有的路由器最終都會知道本自治系統中的任何一個網絡的最短距離和下一跳路由器地址。

    • 距離向量算法
      路由表更新的原則是找出到每個目的網絡的最短距離。對每一個相鄰路由器發送的RIP報文,進行以下步驟:
      (1) 對地址爲X的相鄰路由器發來的RIP報文,先修改此報文中的所有項目:把“下一跳”字段中的地址都改爲X,並把所有的“距離”字段的值加1.每一個項目都有三個關鍵數據,即:到目的網絡N,距離是d,下一跳路由器是X。
      (2) 對修改後的RIP報文中的每一個項目,進行以下步驟:
      若原來的路由表中沒有目的網絡N,則把該項目添加到路由表中。
      否則(即在路由表中有目的網絡N,這時就再查看下一跳路由器地址)
      若下一跳路由器地址是X,則把收到的項目替換原路由表中的項目。
      否則(即這個項目是:到目的網絡N,但下一跳路由器不是X)
      若收到的項目中的距離d小於路由表中的距離,則進行更新,
      否則什麼也不做。
      (3) 若3分鐘還沒有收到相鄰路由表的更新路由表,則把此相鄰路由器記爲不可達的路由器,即把距離置爲16。
      (4) 返回。
    • RIP協議的報文格式
      RIP2可以支持變長子網掩碼和CIDR。此外,RIP2還提供簡單的鑑別過程支持多播。RIP2的報文格式如圖8所示,可以看出RIP協議使用運輸層的用戶數據報UDP進行傳送(使用UDP的端口520)。
      RIP2報文格式
      RIP報文由首部和路由部分組成。RIP的首部佔4個字節,其中的命令字段指出報文的意義。如,1表示請求路由信息,2表示對路由信息的響應或未被請求而發出的路由更新報文。首部後面的“必爲0”是爲了4字節字的對齊。
      RIP2報文中的路由部分由若干個路由信息組成。每個路由信息需要用20個字節。地址族標識符(又稱爲地址類別)字段用來標誌所使用的地址協議。如採用IP地址就令這個字段的值爲2(原來考慮RIP也可用於其他非TCP/IP協議的情況)。路由標記填入自治系統號ASN(Autonomous System Number),這是考慮使RIP有可能收到本自治系統以外的路由選擇信息。再後面指出某個網絡地址、該網絡的子網掩碼下一跳路由器地址以及到此網絡的距離。一個RIP報文最多可包括25個路由,因而RIP報文的最大長度是4+20*25=504字節。
      RIP存在的一個問題是 當網絡出現故障時,要經過比較長的時間才能將此信息傳送到所有的路由器。RIP協議的特點是:好消息傳播得快,而壞消息傳播得慢。網絡出故障的傳播時間往往需要較長的時間,使得更新過程的收斂時間過長,這是RIP的一個主要缺點。 RIP協議最大的優點就是 實現簡單,開銷較小
  3. 內部網關協議OSPF

    • OSPF協議的基本特點
      這個協議的名字是開放最短路徑優先OSPF(Open Shortest Path First)。該協議最主要的特徵就是使用分佈式的鏈路狀態協議(link state protocol),OSPF的三個要點是:
      (1) 向本自治系統中所有路由器發送信息,此處使用洪泛法(flooding),這就是路由器通過所有輸出端口向所有相鄰的路由器發送信息,而相鄰路由器又再將此信息發往其所有的相鄰路由器(但不再發送給剛剛發來信息的那個路由器)(RIP僅僅向自己相鄰的幾個路由器發送信息)。
      (2) 發送的信息就是與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息。所謂“鏈路狀態”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的“度量”(metric)。OSPF將這個“度量”用來表示費用、距離、時延和帶寬等等,有時爲了方便就稱這個度量爲“代價”(RIP發送的信息是:到所有網絡的距離和下一跳路由器)。
      (3) 只有當鏈路狀態發生變化時,路由器才向所有路由器用洪泛法發送其信息。(RIP是定期交換路由表信息)。

      由於各路由器之間頻繁地交換鏈路狀態信息,因此所有的路由器最終都能建立一個鏈路狀態數據庫(link-state database),這個數據庫實際上就是全網的拓撲結構圖。注意RIP協議的每一個路由器雖然知道所有的網絡的距離以及下一跳的路由器,但卻不知道全網的拓撲結構
      OSPF的鏈路狀態數據庫能較快地進行更新,使各個路由器能及時更新其路由表。OSPF的更新過程收斂得快是其重要優點。
      爲了使OSPF能夠用於規模很大的網絡,OSPF將一個自治系統再劃分爲若干個更小的範圍,叫作區域(area)。劃分區域的好處就是利用洪泛法交換鏈路狀態信息的範圍侷限於每一個區域而不是整個的自治系統,這就減少了整個網絡上的通信量。在一個區域內部的路由器只知道本區域的完整網絡拓撲,而不知道其他區域的網絡拓撲的情況。爲了使每一個區域能夠和本區域以外的區域進行通信,OSPF使用層次結構的區域劃分。在上層的區域叫做主幹區域(backbone area),用於連通其他在下層的區域。
      OSPF不用UDP而是直接用IP數據報傳送(其IP數據報首部的協議字段值爲89)。OSPF構成的數據報如圖9所示。OSPF分組使用24字節的固定長度首部。
      OSPF
      OSPF首部各字段的意義如下:
      (1) 版本 當前版本號爲2;
      (2) 類型 可以是五種類型分組中的一種;
      (3) 分組長度 包括OSPF首部在內的分組長度,以字節爲單位;
      (4) 路由器標識符 標誌發送該分組的路由器的接口的IP地址;
      (5) 區域標識符 分組屬於的區域的標識符;
      (6) 檢驗和 用來檢測分組中的差錯;
      (7) 鑑別類型 目前只有兩種。0(不用)和1(口令);
      (8) 鑑別 鑑別類型爲0時就填入0。鑑別類型爲1則填入8個字符的口令。
      OSPF具有下列的一些特點
      (1) OSPF對於不同類型的業務可計算出不同的路由。
      (2) 如果到同一個目的網絡有多條相同代價的路徑,那麼可以將通信量分配給這幾條路徑,這叫作多路徑間的負載平衡(load balancing)。
      (3) 所有在OSPF路由器之間交換的分(如鏈路狀態更新分組)組都具有鑑別的功能,因而保證了僅在可信賴的路由器之間交換鏈路狀態信息。
      (4) OSPF支持可變長度的子網劃分和無分類的編址CIDR。
      (5) OSPF讓每一個鏈路狀態都帶上一個32位的序號,序號越大網絡中的鏈路狀態越新。

    • OSPF的五種分組類型
      (1) 問候(Hello) 分組,用來發現和維持鄰站的可達性。
      (2) 數據庫描述(Database Description) 分組,向鄰站給出自己的鏈路狀態數據庫中的所有鏈路狀態項目的摘要信息。
      (3) 鏈路狀態請求(Link State Request) 分組,向對方請求發送某些鏈路狀態項目的詳細信息。
      (4) 鏈路狀態更新(Link State Update) 分組,用洪泛法對全網更新鏈路狀態。
      (5) 鏈路狀態確認(Link State Acknowledgment) 對鏈路更新分組的確認。
  4. 外部網關協議BGP
    邊界網關協議BGP是不同AS的路由器之間交換路由信息的協議。BGP的使用環境與內部網關協議不同:(1) 因特網的規模太大,使得AS之間路由選擇非常困難;(2) AS之間的路由選擇必須考慮有關策略,相互連接的網絡的性能相差很大。
    由於上述情況,邊界網關協議BGP只能是力求尋找一條能夠到達目的網絡且比較好的路由,而並非要尋找一條最佳路由,BGP採用了路徑向量(path vector)路由選擇協議
    在配置BGP時,每一個AS的管理員要選擇至少一個路由器作爲該AS的“BGP發言人”,一般BGP發言人往往是BGP邊界路由器。一個BGP發言人與其他AS的BGP發言人要交換路由信息,就要先建立TCP連接(端口號爲179),然後在此連接上交換BGP報文以建立BGP會話(session)。使用TCP連接交換路由信息的兩個BGP發言人,彼此成爲對方的鄰站(neighbor)或對等站(peer)。BGP協議交換路由信息的結點數量級是自治系統AS數的量級,這要比這些AS中的網絡數少很多。要在許多AS之間尋找一條較好的路徑,就是要尋找正確的BGP發言人(或邊界路由器)。
    BGP支持CIDR,因此BGP的路由表也就應當包括目的網絡前綴、下一跳路由器,以及到達目的網絡所要經過的AS序列。若一個BGP發言人收到了其他BGP發言人發來的路徑通知,他就要檢查一下本AS是否在此通知的路徑中,若在這條路徑中,就不能採用這條路徑(因爲會兜圈子)。
    BGP剛剛運行時,BGP的鄰站是交換整個的BGP路由表。但以後只需要在發生變化時更新有變化的部分。在RFC 4271中規定了BGP-4的四種報文
    (1) OPEN(打開) 報文:用來與相鄰的另一個BGP發言人建立關係,使通信初始化。
    (2) UPDATE(更新) 報文:用來通告某一路由的信息,以及列出要撤銷的多條路由。
    (3) KEEPALIVE(保活) 報文:用來週期性地證實鄰站的連通性。
    (4) NOTIFICATION(通知) 報文:用來發送檢測到的差錯。
    在RFC 2918中增加了ROUTE-REFRESH報文,用來請求對等端重新通告。
    BGP報文的格式如圖10所示。四種類型的BGP報文具有同樣的通用首部,其長度爲19字節。通用首部分爲三個字段。標記(marker)字段爲16字節長,用來鑑別收到的BGP報文(預留假定以後有人發明出合理的鑑別方案)。不使用鑑別時,標記字段要置爲全1。長度字段指出包括通用首部在內的整個BGP報文以字節爲單位的長度,最小值是19,最大值是4096。類型字段的值爲1到4,分別對應上述四種BGP報文。
    BGP報文

六、IP多播(multicast)

  1. IP多播的基本概念
    有許多的應用需要由一個源點發送到許多個終點,即一對多通信。例如,實時信息的交付(如新聞、股市行情等),軟件更新、交互式會議等。
    與單播相比,在一對多的通信中,多播可大大的節約網絡資源。用單播方式向N個主機傳送同樣的視頻節目,爲此需要發送N個單播,即同一個視頻分組要發送N個副本。當用多播方式向N個主機傳送節目,此時只需要發送一次多播數據報。在路由器轉發分組時,可能需要把收到的分組複製出一些副本,發往不同的線路。當分組到達目的局域網時,由於局域網具有硬件多播功能,因此不需要複製分組,在局域網上的多播組成員都能收到這個視頻分組。
    在因特網上進行的多播就叫做IP多播,IP多播鎖傳送的分組需要使用多播IP地址。多播組的標識符是IP地址中的D類地址,一個D類地址標誌一個多播組,所以D類地址共可標誌2\^28個多播組。顯然多播地址只能用於目的地址,而不能用於源地址,多播數據報使用IGMP協議(首部的協議字段值爲2)。
    IP多播可以分爲兩種。一種是隻在本局域網上進行硬件多播,另一種則是在因特網的範圍進行多播。
  2. 網際組管理協議IGMP和多播路由選擇協議
    • IP多播需要兩種協議
      網際組管理協議IGMP(Internet Group Management Protocol)是讓連接在本地局域網上的多播路由器知道本局域網上是否有主機(嚴格講,是主機上的某個進程)參加或退出了某個多播組。而連接在局域網上的多播路由器還必須和因特網上的其他多播路由器協同工作,也就是還需要另外一個協議對因特網範圍內的所有多播組成員進行管理的協議,這就是多播路由選擇協議
    • 網際組管理協議IGMP
      和ICMP相似,IGMP使用IP數據報傳遞其報文(即IGMP報文加上IP首部構成IP數據報),但它也向IP提供服務。多播數據報的發送者和接受者都不知道(也無法找出)一個多播組的成員有多少,以及這些成員是那些主機。因特網中的路由器和主機都不知道哪個應用進程將要向哪個多播組發送多播數據報,因爲任何應用進程都可以在任何時候向任何一個多播組發送多播數據報,而這個應用進程並不需要加入這個多播組。
    • 多播路由協議
      多播路由選擇實際上就是要找出以源主機爲根節點的多播轉發樹

七、參考文獻

[1] 謝希仁. 計算機網絡(第五版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章