1. 程式人生 > >【TCP/IP】IP:網際協議(定址和路由)

【TCP/IP】IP:網際協議(定址和路由)

IP是TCP/IP協議族中最為核心的協議,所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸。

IP提供不可靠、無連線的資料報傳送服務。

不可靠是指它不能保證IP資料報能成功地到達目的地,IP僅提供最好的傳輸服務,如果期間資料傳輸發生了錯誤,IP的處理演算法是:丟棄該資料報,然後傳送ICMP(IPv4協議簇中的一個子協議,用於在IP主機、路由器之間傳遞控制訊息,控制訊息是指網路通不通。主機是否到達、路由是否可用等網路本身的訊息,不包括使用者資料)訊息報給信源端。任何要求的可靠性必須由上層來提供。

無連線是指IP並不維護任何關於後續資料報的狀態資訊,每個資料報的處理是相互獨立的。每個資料報都是獨立地進行路由選擇,可能選擇不同的路線。

1、IP首部

IP資料報的格式我們已經在網路層那裡介紹過了:網路層-四-報文格式這裡就不贅述了。

2、IP路由選擇

在之前的網路層中有說到,在不同的兩個網路之間的資料傳輸需要經過閘道器,現在路由器集成了閘道器的功能,通過路由器來轉發資料報到另一個網路,主機只需要把資料報傳送一預設的路由器上,後續就交給路由器來處理了。

IP層在記憶體中有一個路由表,當收到一份資料報並進行傳送時,它都要對該表搜尋一次,當資料報來自某個網路介面時,IP首先檢查目的IP地址是否為筆記地址之一或者IP廣播地址。如果是這樣,資料報就被送到由IP首部協議欄位所指定的協議模組進行處理,如果資料報的目的地址不是這些,那麼如果IP層被設定為路由器的功能,那麼就對資料報進行轉發,否則資料報就被丟棄。

上面簡單的說就是,IP層既可以配置成主機的功能,也可以配置成路由器的功能,如果資料,報是發往本機的,就交由對應的協議模組處理,如果不是,且IP層被設定為路由器的功能,也就表明該資料報要通過IP層進行資料報轉發,如果兩者都不是,那就出錯了,丟棄該資料報。

IP路由選擇是逐跳式進行的,IP並不知道到達任何目的的完整路徑,所有的IP路由選擇只為資料報傳輸提供下一站路由器的IP地址。

IP路由選擇主要完成以下功能:

1)搜尋路由表,優先搜尋匹配主機,尋找能與目的IP地址完全匹配的表目(網路號和主機號都要匹配),如果找到,則把報文直接發給目標主機。

2)搜尋路由表,如果匹配主機失敗,則匹配同子網的路由器。尋找能與目的網路號相匹配的表目,這必須考慮可能的子網掩碼,如果找到就發給指定的路由器。

3)搜尋路由表,如果匹配子網路由器失敗,就去匹配同網路號路由器(不同子網)如果找到就發給指定的路由器。

4)搜尋路由表,如果上面都失敗了,就搜尋預設路由,如果找到,就把報文發給該表目指定的下一站路由器。

5)如果都失敗了,那就真的失敗了,就丟棄這個包。

慢慢擴大範圍,這和我們常規的尋找思路是一樣一樣的。

可以看出,IP包是不可靠的,因為它不保證到達。

3、IP地址,網路地址,網路地址,主機號

這裡解釋下這幾個易混淆的概念。IP地址是TCP/IP網路中用來標識每臺主機或裝置的地址,由32位(通常寫成四個十進位制的數,每個整數對應一個位元組)二進位制組成。IP地址分為兩部分,左邊網路編號部分用來標識主機所在的網路,成為網路地址;右邊部分用來標識主機本身,這部分稱為主機地址。那麼一個32位的IP地址,到底網路地址佔多少位,主機地址又佔多少呢?這個就取決於子網掩碼了,子網掩碼只有一個作用,就是將某個IP地址劃分為網路地址和主機地址兩部分。

子網掩碼也是32位,左邊是網路位,由二進位制數1表示,1的數目等於網路位的長度,右邊是主機位,用二進位制0表示,0的數目等於主機位的長度,這樣將IP地址與子網掩碼相與,直接的結果就是網路地址,

舉個栗子:

一個主機的IP地址為222.21.160.73,子網掩碼為255.255.255.192,那麼它的網路地址和主機地址分別是什麼呢?

73=01001001B,192=11000000B。網路地址 = IP地址&子網掩碼 = 255.255.255.64。主機地址的長度是子網掩碼0的數目(後面6位),所以子網掩碼後面0對應IP地址的部分就是該IP地址的主機地址1001B = 9,即主機地址為9。

擴充套件一下,那麼廣播地址是多少呢?之前說過,子網掩碼0的部分為主機地址的長度,所以主機地址的長度為111111B+1 = 64,即子網的大小為64,該IP地址對應的主機號9的意思就是說這個IP地址是子網中的第9個地址。廣播地址就是將子網掩碼對應IP地址的網路地址部分不變,將主機地址部分全置位1,所以該IP地址的廣播地址就是222.21.160.127。網路地址+1為第一個主機地址,廣播地址-1為最後一個主機地址。

只要清楚一點,子網掩碼1的數目對應的是網路地址的長度,0的數目對應的是主機地址的長度。

IP地址有ABCDE五類,根據前面8位來判斷,A:0~127;B:128~191;C:192~223;D:224~239;E:240~255。很容易鑑別,依次相差128,64,32,16,16。

回到前面的IP層中的路由表。路由表中的每一項都包含下面這些資訊:

1.目的IP地址,它可以是一個完整的主機地址,也可以是一個網路地址。主機地址(非0主機號)用以指定某一特定的主機,網路地址的主機號為0,以指定該網路中的所有主機。

2.下一站(或下一跳)路由器的IP地址,或者有直接連線的網路IP地址。

3.標誌,其中一個標誌指明目的IP地址是網路地址還是主機地址,另一個標誌指明下一站路由器是否為真正的下一站路由器,還是一個直接相連的介面。

4.為資料報的傳輸指定一個網路介面。

IP路由選擇是逐跳地進行的,從上面的路由表資訊可以看出,IP並不知道到達任何目的的完整路徑(除了那些與主機直接相連的目的,因為就一條路徑),不然要路由器路由選擇幹嘛,所有的路由選擇只為資料報傳輸提供下一站路由器的IP地址,它假定下一站路由器比傳送資料報的主機更接近目的,而且下一站路由器與該主機是直接相連的。

多個網路交錯相連構成一個大的網狀結構網路,從主機A到主機Z,通過路由選擇一條最短路徑,中間有很多路徑,先找出A到中間結點1的最短路徑,該條路徑到Z的距離最短,然後再找出節點1到節點2的最短距離,同樣到Z的距離最短,直到最後直接到達Z。(具體的路由演算法,這裡就不介紹了)

下面主要介紹IP協議最為複雜的兩方面IP定址和路由。

一、IP定址

IP定址實際上就是ARP地址解析過程,(包括本地網路定址和非本地網路定址):首先看本地網路實現IP 定址,也就是我們所說的同一網段通訊過程,現在我們假設有2個主機,他們是屬於同一個網段。主機A和主機B,首先主機A通過本機的hosts表或者wins系統或dns系統先將主機B的計算機名轉換為IP地址,然後用自己的IP地址與子網掩碼計算出自己所出的網段,比較目的主機B的IP地址與自己的子網掩碼netmask,發現與自己是出於相同的網段,於是在自己的ARP快取中查詢是否有主機B 的MAC地址,如果能找到就直接做資料鏈路層封裝並且通過網絡卡將封裝好的乙太網幀傳送有物理線路上去:如果ARP快取中沒有主機B的的MAC地址,主機A將啟動ARP協議通過在本地網路上的ARP廣播來查詢主機B的MAC地址,獲得主機B的MAC地址後寫入ARP快取表,進行資料鏈路層的封裝,傳送資料。

上面是同一網段IP定址,判斷兩個主機是否是與同一網段,就是藉助子網掩碼來判斷。若兩個主機處於不同的兩個網段,那麼就需要藉助路由器(閘道器),路由器充當中間節點,將其拆分為兩個網段的ARP地址解析過程。路由器(閘道器)也有ARP快取,把同一網段下的IP定址中的主機理解為路由器,然後路由器再扮演一下主機的角色,就是兩個不同網段的IP定址了。

關於ARP,具體步驟參見博文:詳解ARP

二、路由

我們已經知道網路層的主要功能就是將分組從源節點路由到目的節點中,而且在大多數計算機網路中,採用的是資料報分組交換方式(每個報文分組新增資訊),資料包分組需要經過多跳(經過多少個路由器)才能到達目的地。

路由功能其實是一種資料報分組交換路徑選擇行為,是網路層的一種基本功能。路由選擇要綜合考慮許多因素,如路線長度、通道頻寬、線路穩定性、途經埠的開銷等。也就衍生了針對不同考慮因素而誕生的各種路由演算法。

路由是把資訊從源節點通過網路傳遞到目的節點的行為,簡單地說路由就是指三層裝置(網路層)從一個介面上收到資料包,根據資料包的目的地址進行定向,並轉發到另一個介面的過程。在這條路有路徑上,至少需要遇到一箇中間結點,那就是提供路由功能的裝置,如路由器和三層交換機(前面博文我們說的交換機是值兩層交換機,不具備路由功能,不能連線兩個不同的網路,三層交換機則可以)。

路由功能的實現是依靠路由器或三層交換機中的路由表進行的,其中,路由又分為靜態路由和動態路由兩大類。

1、靜態路由

1)手動配置。靜態路由需要管理員根據實際需要一條條自己手動配置,路由器不會自動生成所需的靜態路由。靜態路由中包括目的節點或目的網路的IP地址,及資料包從當前路由器開始路由的第一個下一跳所對應的介面或IP地址。所以允許對路由的行為進行精確的控制。

2)路有路徑固定不變。因為其是手動配置的,且是靜態的,一旦網路的拓撲結構或鏈路的狀態發生變化,要使路由能重新運作,則需要管理員重新手動配置。

3)不可通告性。靜態路由在預設請款修改是私有的,不會通告其他路由器。也就是當路由器上配置了某條靜態路由是,它不會被通告網路中相連的其他路由器。

4)單向性。不提供反向路由。

5)接力性。如果某條靜態路由中間經過的跳數大於1,則必須在除最後一個路由器外的其他路由器上依次配置到達相同目的節點或目的網路的靜態路由。比如總共有4個路由器,A到B後,你還得告訴B,怎麼到C,然後C怎麼到D,而不是單純的只告訴A怎麼到D。

6)優先順序較高。明確指定了路有路徑,當然比走一步看一步(動態路由)優先順序高,但比直接路由優先順序低。

7)適用小型網路。因為需要網路管理員手動配置,所以管理員要易於清楚瞭解網路的拓撲結構,太過複雜,無疑配置工作量太大。

2、動態路由

1)自動生成。在網路中某條路由所包含的路由器同時啟動了某種動態路由協議,通告了各自所直接連線的網點後,則這些路由器間就會自動生成這些路由器直接連線的網路間的路由表項,管理員無須一一建立。

2)自動調整。網路拓撲結構發生變化之後,動態路由可以隨時根據網路拓撲結構的變化調整路由表項,同時i還會自動刪除無效的動態路由表項。

3)可通告性。

4)雙向路由。

5)僅生成網路間的路由表項。靜態路由是直接由管理員手動配置了一條從源節點到目的節點的路有路徑。而動態路由僅生成各路由器所直接連線的各個網路或子網間的路由表項,不能生成到達具體節點或主機的動態路由表項。

6)不同動態路由不相容。採用不同路由演算法的動態路由協議間不相容。

三、路由演算法基礎

路由演算法是在給定一組路由器及連線路由器鏈路的情況下,找出一條從源節點到目標節點的最佳路徑。就是把路由器選擇最佳路徑的策略稱為路由演算法,是路由器的關鍵功能所在。為了完成這項工作,在路由器中需要收集和儲存著各種與傳輸路徑的相關資料,如拓撲結構、埠度量、埠速率等,然後根據相應的路由演算法生成一個個路由表項,在資料包轉發時提供路由選擇。

路由演算法從大的方面分為:非適應路由演算法和自適應演算法

1、非自適應路由演算法

非自適應路由演算法是指那些不能根據網路流量和拓撲結構的變化更新路由表,僅使用靜態路由表的路由演算法。

主要包括以下幾種:

1)靜態路由(一般不認為是真正的路由演算法),管理員手動建立的路由表項,在靜態路由表項中包括目的節點或網路IP地址、下一跳IP地址或介面。

2)擴散法,當一個路由介面收到一個報文分組後,即向它所有介面(包括接收該分組的源介面)進行復制擴散。好比一個圍棋盤,放下一粒黑子,然後黑子的周圍八個點全被染黑(放下黑子),然後放下黑子的,繼續這樣複製擴散,即使有的地方已經有黑子了,照放不誤,最後基本上整個棋盤都被染黑了(如果目標點最後訪問到的話)。所以該演算法的特點是大量重複分組加重網路負擔,但因為有多條可能的路徑,所以可靠性高。

3)隨機走動法,當節點收到分組後,向所有與之相鄰的節點中隨機選擇出一個將分組轉發出去。結果就是分組會在網路中亂竄,直到到達目的節點。可想而知通訊效率低,分組傳輸延遲,但可靠性還是可以的。

4)最短路徑法(Dijkstra演算法),只考慮網路拓撲結構,將源節點到網路中所有節點的最短路徑都找出來,作為這個節點的路由表。具體說來就是,首先找出源節點到網路中所有節點的最短路徑,然後到達最短的那個節點,再找出這個節點到網路中其餘節點(源節點已標記路徑,不計算在內)的最短路徑,以此類推,仔細的想一下,光憑前面說的,還不足以找到源節點到目的節點的最短路徑,因為有時候這幾個相鄰的節點的最短路徑加起來會比之前淘汰的單挑路徑比較長,但總路徑比較短的長(比較拗口。。),就是4個2相加大於2個3。雖然2比3小。可以想象,該演算法的計算量。

5)基於流量的路由演算法,結合網路拓撲結構和通訊流量兩方面的因素進行路由選擇。

2、自適應路由演算法

動態路由均屬於自適應路由演算法型別,可根據網路流量和拓撲結構的變化更新路由表。主要有分散式路由演算法和總體式路由演算法。採用分散式路由演算法時,每個路由器只與直接相連的路由器交換路由資訊,每個路由器只有相鄰路由器的路由資訊,而沒有網路中其他路由器的路由資訊。採用總體式路由演算法時,每個路由器都擁有網路中某個區域或者整個網路中所有其他路由器的全部資訊以及網路的流量狀態。

1)距離向量路由演算法(分散式路由演算法)

距離向量就是有方向的距離,對應路由條目中源和目的節點間的距離。

2)鏈路狀態路由演算法(總體式路由演算法)

根據所經過的路由器多少和路徑中各段鏈路的狀態來計算最佳路由演算法

3)分級路由演算法(總體式路由演算法)

路由器被分組,稱為區域,每個路由器都只有自己所在區域路由器的資訊,而沒有其餘區域路由器的資訊。所以在其路由表中,路由器只需要儲存其他每個區域的一條記錄。

關於以上路由演算法的具體介紹,參考有關資料,這裡不深入分析了(僅供基礎學習)。^_^

參考資料

《深入理解計算機網路》、《TCP/IP協議》

相關推薦

TCP/IPIP網際協議路由

IP是TCP/IP協議族中最為核心的協議,所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸。 IP提供不可靠、無連線的資料報傳送服務。 不可靠是指它不能保證IP資料報能成功地到達目的地,IP僅提供最好的傳輸服務,如果期間資料傳輸發生了錯誤,IP的處理演算法

學習筆記變量、作用域內存問題

允許 幫助 範圍 訪問內存 常用 ie9 值傳遞 問題: eof 1.引用類型的值   引用類型的值是指保存在內存中的對象,JavaScript不允許直接訪問內存中的位置,因此在操作對象時,實際上是操作的引用而不是實際的對象。(嚴密的說法是:當復制保存著對象的某個變量時,

平價資料SimGAN活用合成數據無監督資料

Shrivastava, Ashish, et al. “Learning from simulated and unsupervised images through adversarial training.” IEEE Conference on C

Web API系列教程3.2 — 實戰處理資料新增模型控制器

前言 在本部分中,你將新增用於定義資料庫實體的模型類。然後你將新增用於在這些實體上執行CRUD(Create、Retrieve、Update、Delete——譯者注)操作的Web API 控制器。 新增模型類 在本教程中,我們將通過使用“Code Fi

總結整理javascript基礎入門學習慕課網學習

節點 confirm pro remove prompt 例如 ref 存儲 基礎入門 https://www.imooc.com/learn/36 註意: javascript作為一種腳本語言可以放在html頁面中任何位置,但是瀏覽器解釋html時是按先後順序的,所以前面

回溯法八皇後問題遞歸非遞歸

問題 一個 bce and 核心 皇後 條件 IE 上一個 先貼代碼,分遞歸回溯法和非遞歸回溯法 遞歸回溯法,代碼如下: // test.cpp : Defines the entry point for the console application. // #inc

C語言數據對其內存對齊

brush size return () def ont http 之間 sign 數據對齊 結構體之間的對齊是有很多種方法的,也是根據你所用的系統位數有關。下面都是以32位系統來講的,32位系統一般以字對齊,字就是系統位數,32位系統則是32位對齊,也就是4字節(in

JavaScript高階5、函式高階原型與原型鏈

一、原型 1. 函式的prototype屬性(圖) * 每個函式都有一個prototype屬性, 它預設指向一個Object空物件(沒有我們指定的屬性和方法)(即稱為: 原型物件) * 原型物件中有一個屬性constructor, 它指向函式物件 2. 給原型物件新增屬性(一般

BZOJ 1061 1061: [Noi2008]志願者招募 線性規劃與網路流**

1061: [Noi2008]志願者招募 Description   申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了一個難 題:為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要N 天才能完成,其中第i 天至少需要 Ai 個人。 布布通過了解得知

BZOJ 4816 4816: [Sdoi2017]數字表格 莫比烏斯

Doris剛剛學習了fibonacci數列。用f[i]表示數列的第i項,那麼 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老師的超級計算機生成了一個n×m的表格,第i行第j列的格子中的數是f[gcd(i,j)],其中gcd(i,j)表示i, j的最大公約數。

機器學習k-fold cross validationk-摺疊交叉驗證

交叉驗證的目的:在實際訓練中,模型通常對訓練資料好,但是對訓練資料之外的資料擬合程度差。用於評價模型的泛化能力,從而進行模型選擇。 交叉驗證的基本思想:把在某種意義下將原始資料(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(valid

T-SQL系列文章全文目錄2017-06-26更新

作  者: 出  處:http://www.cnblogs.com/jackson0714/ 關於作者:專注於微軟平臺的專案開發。如有問題或建議,請多多賜教! 版權宣告:本文版權歸作者和部落格園共有,歡迎轉載

演算法學習B-Tree程式設計實現C++模板類封裝

B-Tree模擬程式設計實現。採用C++模板類封裝。參考《演算法導論(第二版)》第18章 B樹。 實現了B樹的搜尋、插入和刪除的重要操作。 歡迎交流和討論,如有錯誤,還請指出~(E-Mali:[email protected]) BTree.h: //B-

讀書筆記資料探勘導論Introduction to Data Mining 1

第二章 資料 2-1 資料型別 如下性質來描述屬性 (1) 相異性 = 和 ≠ (2) 序 <, <=, >, >= (3) 加法 (4) 乘法 從而定義四種類型 :標稱,序數,區間,比率 標稱:分類的(定性的)

iOS開發開啟另一個APPURL Scheme與openURL

目標平常我們做iOS開發,會經常遇到開啟其他的APP的功能。本篇文章講的就是開啟別人的APP的一些知識。我們的目標是:開啟別人的APP讓別人開啟我們的APPiOS9的適配問題使用URL Schemes傳遞資料準備工作建立一個名為OpenApp的工作空間,用來存放我們的兩個工程建立這個工作空間主要是為了讓我們後

計算機視覺OpenCV篇(9) - 輪廓尋找/繪制輪廓

app oop blank parser gin 邊緣檢測 alt win orm 什麽是輪廓? 輪廓是一系列相連的點組成的曲線,代表了物體的基本外形。 輪廓與邊緣好像挺像的? 是的,確實挺像,那麽區別是什麽呢?簡而言之,輪廓是連續的,而邊緣並不全都連續(見下圖示例)

譯文連載 理解Istio服務網格第七章 安全

全書目錄 第一章 概述 第二章 安裝 第三章 流控 第四章 服務彈性 第五章 混沌測試 第六章 可觀測性   本文目錄 第7章 安全 7.1 身份認證     7.1.1 Kubernetes上的Istio的身份

TCP/IP協議詳解 卷1》--- IP網際協議

IP:不可靠–不保證IP資料報能成功到達目的地;無連線—不維護任何關於後續資料報的狀態資訊,可能無序。 IP首部 最高位在左端,為0bit,最低位為右端,為31bit。傳輸次序為大端。 目前的協議版本號是4,因此IP有時也稱作IPv4。 首部長度指的

TCP/IP詳解卷2實現》筆記--IP網際協議

本章介紹IP分組的結構和基本的IP處理過程,包括輸入,轉發和輸出。下圖顯示了IP層常見的組織形式。 在之前的文章中,我們看到了網路介面如何把到達的IP分組放到IP輸入佇列ipintrq中去,並如何呼叫一個軟體中斷,如下圖所示: 因為硬體中斷的優先順序比軟體中斷的要高,所以在發生一次軟體中斷之前,有