1. 程式人生 > >計算機網絡(謝希仁版)——第四章回顧(1)

計算機網絡(謝希仁版)——第四章回顧(1)

互聯網 時有 結構 進制 傳輸過程 壓力 校驗 layer -s

  什麽是網際層?其主要作用是什麽?

  TCP/IP體系結構中的網際層(internet layer)就是網絡層,核心協議為IP(Internet Protocol)協議,但是為了避免名字沖突而將internet翻譯為了“網際”,同時也可以體現出其作用:解決網絡(局域網)與網絡互連的問題。

  什麽是“面向連接”、“可靠地”?什麽是“無連接”、“盡最大努力的”?

  所謂面向連接、可靠,就是通信雙方在通信時必須確保建立連接,如果連接建立了就可以確定消息能發送到目標方,如果連接沒有建立好,就不可以將消息發送到目標方,類似於“打電話”

  所謂無連接、盡最大努力的,就是通信雙方在不確定能否發送成功的情況下依然可以將消息發出去,負責轉發的中間方(路由器)會盡可能的將消息送到目標方,但是不保證一定成功,類似於“發短信”

  TCP/IP體系結構中的網際層采用的是“盡最大努力”的通信方式。(下圖分別為提供可靠服務的網絡層和提供最大努力的網絡層)

  技術分享

  為什麽網際層要采用“盡最大努力”的方式?

  相比於傳統電話網絡,計算機網絡中的結點均為具有一定處理能力的主機,可以處理好通信出錯的情況,比如三個數據報,丟失了中間的一份,主機可以發現。所以計算機網絡中網絡層提供可靠的通信並沒有太大的意義,相比之下盡最大努力的通信更適合計算機通信的突發性特點,並且能節省更多的網絡資源。

  

  

  網際層有哪些協議?

  最主要的就是IP(Internet Protocol)協議,除此之外還有3個“配套使用”的協議:

  ARP協議(Address Resolution Protocol),即地址解析協議

  ICMP協議(Internet Control Message Protocol),即網際控制報文協議

  IGMP(Internet Group Management Protocol),即網際組管理協議

  這三個配套協議的用途之後介紹。

  技術分享

  既然MAC地址已經是唯一的,為什麽還需要網際層或者說IP地址?

  因為網絡中的路由器不可能存下網絡中所有主機的MAC地址,但卻可以根據IP地址知道消息下一步該轉發給哪個路由器,直到轉發到目標主機所在網絡的路由器,然後由該路由器直接交付給目標主機。

  為什麽路由器可以根據IP地址確定消息該轉發給哪個路由器?

  簡要回答就是IP地址中聲明了“該IP地址所屬的網絡”,所以路由器只需要將消息向該網絡轉發即可,當轉發至該網絡的路由器後,該網絡的路由器再負責將消息傳遞給目標主機。

  要想知道為什麽路由器可以根據IP地址知道下一步轉發至何處,就得看看IP地址的組成和歷史。

  IP地址的發展經過了三個階段:

  1.分類的IP地址

  2.對分類的IP地址再次“劃分”出子網

  3.構成超網,也就是不再對IP地址進行分類,或者可以理解為將IP地址“自由劃分”

  ※不論在上述哪個階段,IP地址長度都是32位(準確的說是IPv4,IPv6有128位長,IPv就是IP version,即IP版本,目前常見為IPv4,其地址於2011年宣布耗盡,IPv6註定是下一代,1、3、5版本均未使用)

  ※在第一階段,IP地址的結構為{<網絡號>,<主機號>},可理解為:網絡號部分用於標明該IP地址位於哪個網絡,主機號部分用於標明該IP地址為該網絡中的哪個主機。

  在此基礎上分出5種類型,其中以A,B,C類最常見,這三類用於點對點通信。D類地址用於一對多通信(多播),不常見。

  技術分享

  不難看出C類地址可以分出最多的網絡(2^21),但單個網絡中能擁有的主機數量少,A類地址可以分出較少的網絡(2^7),但單個網絡中能擁有的主機數量最多。

  ※IP地址為32位,但是用32位來表示一個IP地址“太長”,所以手寫或表達時往往采用“點分十進制”來表示IP地址

  技術分享

  IP地址劃分出“網絡號”和“主機號”以及分類有什麽優點和缺點?

  優點就是可以方便IP地址管理機構的IP地址分配任務,其只需要負責分配網絡號給各個“單位”即可,主機號部分可以由“單位”自行劃分。

此外,IP地址中有“網絡號”可以極大的減輕路由器的壓力,因為路由器只需要以網絡為目標來轉發分組。

  缺點就是浪費了很多位(比如C類地址浪費了3位),使得IP地址的32位並不能被充分利用,此外,由於第一階段的分類IP地址劃分過於“粗枝大葉”,導致了更多的IP地址浪費。比如一個“單位”有數百萬臺主機需要連接互聯網,請求B類網絡號需要幾十個,不便管理,於是請求了一個A類網絡號,但是其內部只有幾百萬臺主機,而一個A類網絡號支持一千多萬臺主機號,該A類網絡號中剩下的IP地址就被浪費掉了。

  IP數據報的傳輸過程是怎樣的?

  在網絡之間傳送時,是這樣的:主機將IP數據報傳給本網絡的路由器,本網絡的路由器根據IP地址將IP數據報傳遞給下一路由器,直至傳遞到目標網絡的路由器,然後由目標網絡的路由器將該IP數據報傳給目標主機

  技術分享

  

  那麽,目標主機就位於本網絡,或IP數據報到達目標網絡路由器後,是如何傳遞給目標主機的?

  不論是目標主機就位於本網絡,還是目標網絡路由器將數據報傳給目標主機,都是同一性質的問題:局域網傳遞消息。

  此時我們需要用到地址解析協議ARP,其作用就是將IP地址轉換為MAC硬件地址。

  當源主機(也可以是本網絡路由器)準備發送IP數據報時,其先在本機中的ARP緩存地址中查找是否有該IP地址,若有,則直接將該IP地址對應的MAC地址寫入MAC幀,然後通過局域網傳遞給目標主機。若沒有,則在局域網內廣播一個ARP請求分組,其形式、過程如下

  技術分享

  若目標主機不在本局域網內,則源主機將IP數據報傳遞給本網絡的路由器。

  

  ※路由器至少有兩個IP地址,路由器的每一個接口對應一個IP地址

  

  路由器是如何實現轉發分組的?

  路由器存有一個路由表,其根據IP數據報中的IP地址和路由表,判斷出分組應該傳遞給誰

  技術分享

  

  IP數據報的組成是怎樣的?

  如圖

技術分享

  1.版本:說明該IP數據報使用的IP協議的版本,通信雙方必須使用同一個IP協議版本

  2.首部長度:因為IPv4中首部存在可變部分,所以需要指出首部的長度以劃分首部與數據部分

  3.區分服務:一般不用

  4.總長度:說明該IP數據報的總長度。IP數據報封裝為MAC幀時受限於MAC幀的長度上限,所以IP數據報還存在“分片”操作,即將IP數據報分為多片,封裝進多個MAC幀。

  5.標識:IP數據報若存在分片,則接收方需要將各分片組合出原IP數據報,相同標識號的IP數據報就說明它們其實是同一個源IP數據報。

  6.標誌:占3位,目前只有前兩位有意義,最低位為MF(More Fragment),若MF=1則說明該數據報後面“還有分片”。中間一位為DF(Don‘t Fragment),若DF=1則沒有分片,只有DF=0才可以分片

  7.片偏移:用於說明該IP數據報(已分片)在源IP數據報中的相對位置(相對於數據字段的起點),單位是字節。

  8.生存時間:IP分組在網絡中傳遞時有可能出現“兜圈子”的情況,所以需要對IP數據報進行一定的限制,生存時間的單位是“跳數”,最大值為255,每經過一個路由器,路由器便將IP數據報的生存時間-1,當IP數據報中的生存時間為0時,路由器丟棄該分組。

  9.協議:說明該IP數據報的上層協議類型,如TCP對應6,UDP對應17

  10.首部校驗和:驗證首部是否存在傳輸錯誤

  11.源地址

  12.目的地址

  ※IP地址中的可變部分可用於支持很多操作,但很多情況都用不上,而且會增加路由器處理分組的開銷,所以IPv6中的數據報首部做成了固定長度

  如何解決IP地址分類帶來的浪費問題?

  歷史上解決該問題有兩個階段,分別是劃分子網和無分類編址(CIDR)。我們逐一討論。

  劃分子網即在原有分類IP地址的基礎上進行進一步劃分網絡,如B類網絡143.13.0.0,可以再次劃分出255個子網絡,即從143.13.1.0到143.13.255.0。這麽做的話會帶來一個小問題,就是像143.13.3.10這樣的IP地址,如何從中提取出目標子網絡143.13.3.0?解決的方法是子網掩碼,即一串32位的掩碼,將IP地址與子網掩碼進行按位與即可得出IP地址中的子網絡號。例如下:

  技術分享

  同時,路由器中的路由表改為如下格式:

  技術分享

  當IP分組傳遞至某個路由器後,路由器將該IP地址與路由表中的子網掩碼逐一按位與,然後比較是否與對應的目的網絡地址相同,若相同則說明該分組的目標子網是該行。

  但是劃分子網依然有缺陷,因為劃分子網的基礎依然是分類的IP地址,所以網絡號的分配依然不夠靈活,所以IP地址又發展為了CIDR無分類編址的階段。

  在CIDR中,原“網絡號”對應了CIDR的“網絡前綴”,原“子網號”對應了“CIDR地址塊”。CIDR的最大特點就是“無分類”,其IP地址可抽象看為{網絡前綴,主機號},在分類IP地址中,網絡號長度是固定的(即使劃分子網也是在某一類地址中進行劃分),而CIDR中網絡前綴長度則是不固定的,如143.13.24.23/17,該IP地址後接了一個/17,用於說明其網絡前綴的位數,我們要想知道該IP地址的網絡前綴就需要令該IP地址與11111111 11111111 10000000 00000000進行按位與,然後得出網絡前綴。

  CIDR的方式可以減少路由器中路由表的大小,因為CIDR地址塊的大小是不固定的,一個CIDR地址塊有可能包含了多個C類或B類地址,這樣一來路由表中只需要一行CIDR地址,就相當於分類IP地址中的多個網絡號地址。

  CIDR的方式帶來了另一個問題,那就是如何確定一個IP地址的網絡前綴?基礎思路是將IP地址與子網掩碼按位與,然後找出符合的“最長網絡前綴”。

  什麽是ICMP網際控制報文協議?

  ICMP的意義是IP數據報的轉發效率和交付成功的幾率。說白了就是封裝於IP數據報中的一種特殊報文,用於測試主機間的連通性等。

  ICMP報文分為兩大類:ICMP差錯報告報文和ICMP詢問報文。

  技術分享

技術分享

  ICMP有兩種常見應用:PING和路由探測

  PING即Packet InterNet Groper,用於探測兩臺主機間是否連通,源主機向目標主機發送ICMP的回送請求報文(封裝在IP數據報中),目標主機若接收到該報文則返回回送回答報文。Windows中可如下操作:打開命令行操作界面,輸入“ping hostname”(hostname即目標主機名或IP地址),按Enter

  技術分享

  路由探測即源主機向目標主機發送無法交付的UDP數據報(封裝於IP數據報,若目標主機接收到該數據報,則會返回ICMP終點不可達報文),第一次發送時將IP數據報的生存時間設為1,這樣一來第一個路由器接收到後將生存時間-1就會直接判斷該IP分組需要丟棄,並返回ICMP時間超過報文,源主機接下來發送第二個IP數據報(依然為不可交付UDP數據報),此次將生存時間設為2……以此類推,直至接收到ICMP終點不可達報文,或生存時間達到上限為止。

  在windows中路由探測的命令為tracert,用例如下

  技術分享

計算機網絡(謝希仁版)——第四章回顧(1)