前言,要完整的學計網看這,韓立剛老師的課,絕對有趣,而我這是參考慕課網:編程必備基礎中的網絡篇,都是軟件的,不是很全,但是對於搞軟件的我覺得夠了。網絡層的知識比較多,有錯請指出,謝謝
文章目錄
1. 虛擬互連網絡
因爲實際的物理網絡是非常複雜的,可能連接不同家庭,不同地區,不同城市,不同國家,這其中的互連就非常複雜,如果要準確的說數據傳輸的路徑是不可能的,所以我們不需要關注這些細節,只管發送數據包即可。所以提出了虛擬互連網絡。
轉載:虛擬互連網絡的意義是什麼?
所謂虛擬互連網絡也就是邏輯互連網絡簡稱爲IP 網。它的意思就是利用IP 協議屏蔽互連起來的各種物理網絡的異構性使這些性能各異的網絡看起來好像是一個統一的網絡。使用虛擬互連網絡的好處是當互聯網上的主機進行通信時就好像在一個網絡上通信一樣而看不見互連的各具體的網絡異構細節。
主機A只需要接入網絡,主機B也只接入網絡,其中主機A發送的數據包是如何傳輸的並不需要知道,然後主機B等着接收主機A的數據包即可,當然這是利用IP協議來達成這效果的。
所以可以先看到IP協議的作用:
- IP協議使得複雜的實際網絡變成一個虛擬互連的網絡。
- IP協議也可以使得網絡層可以屏蔽底層細節而專注網絡層的數據轉發。就當作物理層和數據鏈路層不存在,直接傳輸數據到對方的網絡層。
- IP協議解決了在虛擬網絡中數據報傳輸路徑的問題。
2. IP協議
百度百科
IP協議,它的英文是Internet Protocol,即網際互連協議。負責Internet上網絡之間的通信,並規定了將數據從一個網絡傳輸到另一個網絡應遵循的規則。因特網看起來好像是真實存在的,但實際上它是一種並不存在的虛擬網絡,只不過是利用IP協議把全世界所有願意接入因特網的計算機局域網連接起來,使得它們彼此之間都能夠通信。正如人類進行有效交流需要使用同一種語言一樣,計算機之間的通信也要使用同一種“語言”,而IP協議正是這種語言。
首先先了解IP地址:
2.1 IP地址
IP地址也跟MAC地址一樣,類似身份證的存在。IP地址長度爲32位,常分成4個8位,一般使用點分十進制來表示。範圍是:0.0.0.0~255.255.255.255。一共可以表示2^32個IP。
IP和MAC的區別:360百科
- IP地址是基於網絡拓撲設計出的,同一臺設備或計算機上,IP地址是可以改動的(但必須唯一),而MAC則是生產廠商燒錄好的,一般不能改動。 如果拿着本機的網卡去裝在另一臺計算機上則MAC地址還是原來網卡那個。
- 長度不同。IP地址的長度爲32位,MAC地址的長度爲48位。
- 分配依據不同。IP地址的分配是基於網絡拓撲,MAC地址的分配是基於製造商。
- 尋址協議層不同。IP地址應用於網絡層,而MAC地址應用於數據鏈路層。 數據鏈路層協議可以使數據從一個節點傳遞到相同鏈路的另一個節點上(指相鄰,通過MAC地址),而網絡層協議使數據可以從一個網絡傳遞到另一個網絡上(ARP根據目的IP地址,找到中間節點的MAC地址,通過中間節點傳送,從而最終到達目的網絡)。
2.2 IP協議的組成(重要)
IP協議的組成如圖,最後兩行我們不關心,只看前面5行。因爲前5行是IP協議必須需要的,每一行都是32位,即4個字節。一共有20個字節。
- 版本:佔4位,指的是IP協議的版本,通信雙方的版本必須一致,當前主流的版本是4,即IPv4,也有IPv6。
- 首部長度:佔4位,表示的是IP首部長度(包括一些可選的首部數據,看圖)。最大數值用十進制表示爲15(即首部最大有15行,每行4個字節),換成字節表示爲15*4=60字節(即固定首部長度加上可選首部長度),而最小值就是前面說的20個字節(固定首部長度)。
- 服務類型:不關心這個。
- 總長度:佔16位,最大數值用十進制表示爲65535,表示的是IP數據報總長度(IP首部+IP數據)。在數據鏈路層中提到MTU,即數據鏈路層的最大數據傳輸長度,如果IP數據報的總長度比MTU大時(我們常說的IP數據報其實包含首部和IP數據),數據鏈路層會把IP數據報拆分成多個數據幀進行傳輸,即分片。
- 標識:不關心這個。
- 標記:佔3位,目前只有2位是有意義的,標誌IP報文是否可以分片。
- 片偏移:較長的數據報在分片後,某片在原數據報中的相對位置。就上面說的如果IP數據報的總長度比MTU大時就會把數據報分片成多個數據幀,這時候就需要在每個數據幀的片偏移中保存是第幾個偏移的IP數據報,這方便接收方組合數據幀。
- TTL:佔8位,表明IP數據報文在網絡中的壽命,每經過一個設備,TTL減1,當TTL=0時,網絡設備必須丟棄該報文。這是爲了防止報文找不到終點時在網絡中無限傳輸,如果網絡中有很多這樣的報文存在,那網絡的效率就會受影響(消耗帶寬)。
- 協議:佔8位,表明IP數據所攜帶的具體數據是什麼協議的,如UDP,TCP等。以便使目的主機的IP層知道應將數據部分上交給哪個處理。
- 首部校驗和:佔16位,校驗IP首部是否有出錯。如果出錯直接丟棄數據報。
- 後面的兩個看名字就知道。
3. IP協議的轉發流程
逐跳(hop-by-hop):數據報在發送出去時經過可能經過多個網絡或路由,每次經過我們就說數據報跳到這裏。即數據報在傳輸中是一跳一跳的傳輸到目的主機。這是轉發過程逐跳的概念。
3.1 路由表
參考數據鏈路層中的MAC地址表:
老師回答的一些問題:
- 路由器也有網絡協議程序在工作,路由器的數據鏈路層也是工作的,和計算機的工作原理一樣。路由表在計算機和路由器上都存在。其實路由器只不過是一個統稱了,凡是具備路由功能的設備都可以叫做路由器,計算機也可以路由的。
- 數據鏈路層的MAC地址是自發現的,當數據鏈路層不知道某個IP的具體MAC地址時,就會通過廣播去詢問相鄰的設備。
3.2 IP協議的轉發流程
拿出數據鏈路層中遇到跨節點傳輸的問題,單從網路層來看,我們屏蔽掉數據鏈路層和物理層:IP協議的轉發流程
通過這張圖可看到路由中也有3層。
現在網路層和數據鏈路層結合來看:IP協議的轉發流程
- 數據幀每一跳的MAC地址都在變化。
- IP數據報每一跳的IP始終不變。
- 至於網路層知道下一跳IP地址,但爲什麼告知給數據鏈路層的卻是目的MAC地址?這是因爲有兩個協議:ARP,RARP協議來進行IP和MAC之間的轉換。
4. ARP協議
ARP:Address Resolution Protocal,地址解析器,主要作用是把網路層中32位的IP地址轉爲數據鏈路層48位的MAC地址。至於怎麼轉換的,是根據一張名爲ARP緩存表來尋找IP地址映射的MAC地址。
這就會有兩種情況:
- ARP緩存表有IP地址和MAC地址的映射關係。那就直接拿去用。
- ARP緩存表沒有IP地址和MAC地址的映射關係。那如下圖的情況:
ARP緩存表是ARP協議和RARP協議的關鍵,ARP緩存表緩存了IP地址到硬件地址之間的映射關係。ARP緩存表中的記錄並不是永久有效的,有一定的期限,因爲可知IP地址是會變化的,所以映射關係會隨着IP的變化而變化。
在CMD中輸入下面的命令,來查看本機的ARP緩存表。
ARP -a
ARP協議是直接封裝到數據鏈路層的數據幀裏面的,因爲涉及到IP地址,所以它屬於網路層的協議。
(PAD是填充信息)
所以對於IP協議的流程中,在查詢路由表後,會使用ARP協議把IP地址轉換成MAC地址。
5. RARP協議
RARP:Reverse Address Resolution Protocal,逆地址解析器,即把MAC地址轉換爲IP地址。
ARP協議和RARP協議是TCP/IP協議棧裏面基礎的協議,它們的操作對程序員是透明的,也就是在編程中不需要使用這具體的協議,瞭解即可,有助於理解網絡分層的細節。
6. IP地址的子網劃分
IP地址一共有2^32個,那麼IP地址如果在世界上是隨機分配的,那麼每次從一個主機發送數據報到目的主機時,都需要去查詢全世界網絡的IP來找到目的主機,這種耗時就非常非常慢了,因此需要對IP地址進行規劃和分配,以便於尋址。
IP地址的編址方法共經歷了3個過程:
- 分類的IP地址:最基本的編址方法。
- 子網的劃分:對基本編址方法的改進。
- 構成超網:比較新的無分類編址方法(CIDR)。
6.1 IP地址的分類
爲了便於尋址以及層次化構建網絡,每個IP地址包含網絡號和主機號。即IP地址 = 網絡號 + 主機號。也稱爲兩級IP地址。
- 網絡號(net-id):它標誌主機(或路由器)所連接到的網絡。一個網絡號在整個互聯網範圍內必須是唯一的。
- 主機號(host-id):它標誌該主機(或路由器)。一個主機號在它前面的網絡號所指明的網絡範圍內必須是唯一的(這句話不懂看下圖)。
IP地址根據網絡號的不同分爲5種類型:A類地址、B類地址、C類地址、D類地址和E類地址。
- A類網絡號少,網絡內主機號多,通常是比較大的網絡,如一個國家或者地區的網絡。
- B類,網絡號逐漸增多,但每個網絡內的主機號逐漸減少,B類通常適用於中型網絡
- C類,是我們常用的。比如我們某個學校或者公司的網絡,可以容納的數量有限。
- D類和E類屬於比較特殊的網絡,分別用於廣播和備用。
(主要記住A、B、C類的網絡號:A類網絡號固定位爲0,B類網絡號固定位爲10,C類網絡號固定位爲110,D、E類不管)
上面表的數據我參考慕課網老師給的和《計算機網絡第七版(謝希仁)》的120頁。我也有看到網上的數據可能會跟表不一樣,因爲有些博文的地址範圍是包括特殊地址的,那麼自己就要排除掉特殊地址,上圖的地址範圍是排除好了的
私有地址瞭解即可,記住也不難,有規律。私有地址不在互聯網上使用,是在局域網中使用的IP地址。並且私有網絡要跟位於公網的主機進行通信時必須將其私有地址轉換爲合法公網地址才能對外訪問。想知道如何轉換請看百度百科的簡介
- A類地址的私有地址:10.0.0.0~10.255.255.255(記10)
- B類地址的私有地址:172.16.0.0~172.31.255.255(記172.16和172.31)
- C類地址的私有地址:192.168.0.0~192.168.255.255(記192.168)
額外:C類中每個網絡段都有2^8-2個主機號,指的是比如公司申請一個C類網絡段爲:192.2.5.0,那麼該IP地址可以分配給公司中2^8-2臺計算機。A類也是,B類也是。
6.2 劃分子網
前面的IP分類在今天的需求來看設計得不是很好:IP地址空間的利用率有時很低。比如爲某公司256名員工每人配備計算機,那在申請網絡段時只能申請B類地址,因爲C類地址容不下256個主機號。但申請B類地址分配了256個主機號後,還剩下2^16-2-256個,這非常浪費,即使未來擴招是1w人也還有很多沒用。
在劃分子網中,原先的兩級IP地址劃分成3級IP地址,在IP地址中添加子網號,即IP地址 = 網絡號 + 子網號 + 主機號。通過劃分子網,我們可以按照我們的需要將網絡分割成小網絡。這樣也有助於降低流量和隱藏網絡的複雜性。
因爲子網號多少位是不確定的,所以不能直接知道網絡號,需要引入子網掩碼進行計算,子網掩碼告知路由器,IP地址的前多少位是網絡地址,後多少位(剩餘位)是主機地址,使路由器正確判斷任意IP地址是否是本網段的,如果相同,那麼可以把數據包直接發送到目標主機,否則就需要路由將數據包轉發送到目的地。
子網掩碼:
- 子網掩碼和IP地址一樣,都是32位。
- 子網掩碼由連續的1和連續的0組成。
- 其對應網絡號的所有位置都爲1,對應於主機號的所有位置都爲0。
- 如果把子網掩碼中末尾連續0的總數設爲m,則2^m-2可計算出劃分的子網可分配給多少臺計算機。(-2是因爲排除主機號全爲0和全爲1的)
- 根據子網掩碼中除255段外的段,轉爲二進制,看看有多少個連續1,把連續1的總數設爲m,根據公式2^m即可求出劃分的子網數量。
- 子網增量是根據主機數和公式2^m來計算,注意這裏不減2。
A類網絡的默認子網掩碼是255.0.0.0,B類網絡的默認子網掩碼是255.255.0.0,C類網絡的默認子網掩碼是255.255.255.0。
主機A的IP地址爲193.10.10.6,子網掩碼爲255.255.255.128,網絡號是?有多少個子網?每個子網可容納多少臺主機?子網增量是?合法子網有哪些?每個子網的範圍?
解:
- 主機A的IP地址轉爲二進制:11000001.00001010.00001010.00000110
- 子網掩碼轉爲二進制:11111111.11111111.11111111.10000000
- 可知該IP地址是C類地址,則11000001.00001010.00001010這三段字節爲網絡號,即網絡號爲193.10.10
- 子網掩碼最後一段10000000中,前一位用於子網號,後7爲用於主機號。則有1個連續1,根據公式2^1=2,則有2個子網。
- 子網掩碼最後一段10000000中,可以看到末尾連續0有7個,根據公式:2^7-2=126。即劃分的子網可容納126臺計算機。
- 子網增量是根據主機數和公式2^m來計算,即可得:該子網中的增量爲128。
- 合法子網根據子網增量可得有:0,128。
- 根據合法子網,得,第一個子網範圍爲:193.10.10.0~193.10.10.127(其中193.10.10.0 和193.10.10.127不能用,因爲排除全爲1和全爲0的主機號,但是是合法的);第二個子網範圍爲:193.10.10.128~193.10.10.255(其中193.10.10.128和193.10.10.255不能用,但是是合法的)。
下面例題參考:IP地址和子網劃分
還可以根據公式來推出合適的子網掩碼:
一個公司有530臺電腦,組成一個對等局域網,子網掩碼設多少最合適?
解:
- 看到530臺,就只能分配B類網絡的地址,但是B類網絡可容納6w多臺計算機,太多了,需要進行劃分子網,根據公式:2^m=530,可得m=10最合適,即子網掩碼中後面連續0有10個,可得子網掩碼二進制的表示:11111111.11111111.11111100.00000000,轉爲十進制:255.255.252.0。
將子網掩碼和IP地址按位進行邏輯“與”運算,得到IP地址的網絡地址(網絡標識),剩下的部分就是主機地址,從而區分出任意IP地址中的網絡地址和主機地址。根據網絡標識是否相同來判斷兩個IP是屬於同一個網段。
主機A的IP地址爲193.10.10.6,子網掩碼爲255.255.255.128;主機B的IP地址爲193.10.10.129,子網掩碼爲255.255.255.128,兩臺主機的IP地址是否屬於同一個網段?
解:
對於主機A:
- 主機A的IP地址轉爲二進制:11000001.00001010.00001010.00000110
- 子網掩碼轉爲二進制:11111111.11111111.11111111.10000000
- 兩者進行邏輯“與”操作,得:11000001.00001010.00001010.00000000
- 將結果轉爲十進制:193.10.10.0,即網絡標識:193.10.10.0
對於主機B:
- 主機A的IP地址轉爲二進制:11000001.00001010.00001010.10000001
- 子網掩碼轉爲二進制:11111111.11111111.11111111.10000000
- 兩者進行邏輯“與”操作,得:11000001.00001010.00001010.10000000
- 將結果轉爲十進制:193.10.10.128,即網絡標識:193.10.10.128
主機A的網絡標識跟主機B的網絡標識不一樣,說明不是屬於同一個網段。
小技巧:對於子網掩碼爲255的段,直接把對應段的IP地址寫下來,因爲任何數和255進行邏輯“與”操作還是原數,所以子網掩碼轉二進制時轉那些不是255的段就行。比如上面的,其實就判斷第4段是否相同就行。
注意:判斷兩IP地址是否屬於同一段不要單單看兩IP地址前面的段是否相同,比如第一眼看上面例子的兩個IP:193.10.10.6和193.10.10.129看起來好像是差不多的,但其實是完全屬於兩個網絡內的ip地址。其實還有另一種方法,你也可以根據子網掩碼計算出子網範圍來判斷是否屬於同一個網段,比如子網掩碼爲255.255.255.128的主機號的數目爲7,根據公式2^m求出子網增量,那麼193.10.10.0到193.10.10.127都是屬於同一個網段(其中主機號全爲1和全爲0不能用),而193.10.10.128到193.10.10.255是屬於同一個網段的的(其中主機號全爲1和全爲0不能用)。結合上面第一個例子來看。
6.3 無分類編址CIDR
因爲子網劃分還是太複雜了,先要知道網絡號在進行子網的劃分,所以提出CIDR。
無分類編址CIDR:簡稱超網,CIDR中沒有A、B、C類網絡號和子網劃分的概念。CIDR把網絡前綴相同的IP地址稱爲一個“CIDR地址塊”。對於網絡前綴是任意位數的。現在通常是使用CIDR來規劃我們的IP地址。
通常使用斜線記法來表示CIDR,比如193.10.10.129/25,斜杆後面的25表示它的網絡前綴有25位,主機號有7位,那麼它的子網掩碼也是可以求出的,即前面有25個連續1和後面7個連續0,即子網掩碼爲11111111.11111111.11111111.10000000,轉爲十進制爲255.255.255.128。
(圖中的點分十進制是掩碼點分十進制,不用記,向上面的例子,可以推的)
/8-/15只能用於A類網絡,/16-/23可用於A類和B類網絡,而/24-/30可用於A類、B類和C類網絡。
子網掩碼的使用和地址的計算都是跟前面一樣的,還有特殊網絡號和特殊的主機號也是一樣的。
某公司擁有100名員工,每人配備一個計算機,請問該公司應該申請哪種網絡段?
像前面學習的分類,可知要分配C類的網絡段給他們,但是C類的網絡段可分配254臺主機,這裏只有100個人,還浪費了154個IP地址。而現在學了CIDR,只需要分配網絡前綴25位,即/25,那麼可分配的主機數爲2^(32-25)-2=126臺,僅浪費26個IP地址。
7. 內網和外網
IP地址還可分爲內網IP地址和外網IP地址。
外網:也可叫做公網,也就是可以對外通信的,是在Internet使用的,是全球唯一的一個IP地址,僅分配給一個網絡設備。即全球使用的IP地址。
內網:也可叫做私網,是內部機構所使用的,比如一個公司內部或者家庭內部,即局域網內。內部網絡使用的IP地址。
參考:內網IP是由路由器分配給每一部內部使用的IP地址,而內網的所有用戶都是通過同一個外網IP地址進行上網的,而內網的IP地址每個人的都不一樣,Internet上的用戶也無法直接訪問到內網用戶。簡單來說呢,外網IP就是標示了您在整個互聯網上的地址,就相當於小區的地址,而內網IP呢,就是標識着您在局域網裏面的地址,也就是小區內的幾棟幾樓幾號房子。
內網地址有3類:這三類就是上面IP地址分類中說的私有地址。
- A類:10.0.0.0~10.255.255.255(支持千萬數量級設備)
- B類:172.16.0.0~172.31.255.255(支持百萬數量級設備)
- C類:192.168.0.0~192.168.255.255(支持萬數量級設備)
這時候就會有個疑問:內網多個設備使用同一個外網IP請求外網的服務,外部怎麼知道具體是哪個設備在請求的? 這就需要一個叫做網絡地址轉換NAT技術。
8. 網絡地址轉換NAT技術
百度百科:引入前先了解端口(port)號:可以認爲是設備與外界通訊交流的出口,有兩種:一是物理意義上的端口,比如,ADSL Modem、集線器、交換機、路由器用於連接其他網絡設備的接口,如RJ-45端口、SC端口等等;二是邏輯意義上的端口,一般是指TCP/IP協議中的端口,端口號的範圍從0到65535,比如用於瀏覽網頁服務的80端口,用於FTP服務的21端口等等。
反正端口號就是用來區分的,解決衝突的情況,比如:http://localhost:3000和http://localhost:4000是不一樣的。這點在配置雲服務器時部署多個網站就可以體現到。
網絡地址轉換NAT技術:Network Address Translation,用於讓多個主機通過一個公有IP訪問互聯網的私有網絡。
解釋:
- 內網的地址,會自己帶上端口號,當到達本地路由器時,路由會轉成新的地址,即在公網IP添加一個新的端口號,然後記錄在一張名爲NA表中。跟前面瞭解的路由表,MAC表一樣。
- 當外部想對內部網絡通信時,也會將地址根據NAT錶轉爲對應的內部網絡地址。
NAT技術減緩了IP地址的消耗,而且還能夠有效地避免來自網絡外部的攻擊,隱藏並保護網絡內部的計算機,但是增加了網絡通信的複雜度。不過帶來的好處值得付出這代價。現在我們也是經常使用這個技術。
反正知道:內網中的主機們使用一個公網IP要跟外部網絡通信時或者外部網絡要跟內網中的主機通信時,藉助NAT技術來完成通信。不需要理內網中主機的端口是什麼,自動分配自動轉換。
可以登錄自己的路由器網站,來查看當前的NAT表。
劃分子網那的例子中說爲一個公司分配一個網段,每一百臺設備都分別對應一個網絡ip,那時候全分配的是外網地址。現在有了內網就可以直接給一個公司分配一個外網ip。這裏說下,分配外網是要跟ISP申請的,如果要多個就要申請多個,而內網是不需要申請的。
百度百科:NAT的實現方式有三種,即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路複用OverLoad:(瞭解)
- 另外兩種看百度百科。
- 端口多路複用(Port address Translation,PAT) 是指改變外出數據包的源端口並進行端口轉換,即端口地址轉換(PAT,Port Address Translation),採用端口多路複用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網絡內部的所有主機,有效避免來自internet的攻擊。因此,目前網絡中應用最多的就是端口多路複用方式,也就是上面說的那個。
9. ICMP協議
ICMP協議:網際控制報文協議(Internet Control Message Protocal),用來報告錯誤信息或異常信息。
(ICMP協議是封裝在IP數據報的數據裏面的)
ICMP協議的組成:
在前面IP的構成圖中,IP首部有一個8位協議,該協議就可以來放ICMP協議的。
ICMP有兩個種類,分別爲:差錯報告報文和詢問報文。
10. ICMP協議的應用
10.1 Ping應用(診斷工具)
當ping一個IP地址時,會發出ICMP的詢問報文,類型值爲0或8。比如:
其中:
- 字節就是IP報文的長度,已知首部至少有20個字節,那麼剩下的12個字節就是IP數據報的數據,該數據指的ICMP的詢問報文。
- 時間爲往返時間。
- TTL爲該報文在傳輸中的生存時間。
當我們自己的網絡出現問題:
- 第一步可以ping迴環地址127.0.0.1,如果得不到返回,則可能說明我們主機的協議棧出現問題,可能需要安裝協議棧或者重裝系統。
- 如果第一步ping通,那麼進行第二步ping網關地址,即我們的路由器的地址,如果計算機處於內網,則路由器的地址可能爲192.168.0.1或 192.168.1.1,不同品牌的路由器,默認的IP訪問地址也是不一樣的,想要知道正確的默認路由器地址就看路由器背面的文字地方,而且一般還允許用戶修改默認地址。如果ping得通,說明本機到路由器的通路是沒問題的,如果ping不同,那麼網線連接或WIFI有問題。
- 如果第二步成功,則ping遠端地址,比如ping www.baidu.com。如果ping得通說明沒問題,否則自己的網絡可能到ISP之間的網絡有問題,需要聯繫ISP客服。
路由器的地址:上面說的192.168.0.1或192.168.1.1這些,大家都是一樣的,爲什麼不會衝突,因爲是內網啊,不會與外界有關係,路由器對外有一個地址,對內會自動分配IP地址,這個自動分配可以自己改成固定IP。
10.2 Traceroute應用(診斷工具)
Traceroute可以探查IP數據報在網絡中走過的路徑。
原理:像前面IP數據報中首部數據的TTL,當TTL=0時會被丟棄,這時就會發出ICMP終點不可達差錯報文。會告訴發送方傳輸發生錯誤,發送方就可能需要重新發送報文。
所以Traceroute利用TTL和ICMP終點不可達差錯報文來記錄傳輸路徑每一個設備的IP地址。比如主機A發送報文,第一次時,設置TTL爲1,當到達第一個網絡或者路由器時,TTL=0,則返回ICMP終點不可達差錯報文,然後就記錄IP地址;第二次時,將TTL增爲2,當到達第二個網絡或者路由器時,TTL=0,則返回ICMP終點不可達差錯報文,然後就記錄IP地址,以此類推,直到目的主機。這樣就得出了傳輸路徑。
在CMD中使用命令tracert並且跟上一個IP地址就可查看路徑,查時間比較久。比如 tracert www.baidu.com。也可以使用該命令來跟蹤我們自己路由IP地址,看看有沒有錯誤。
額外:我自己tracert www.baidu.com,第二個ip地址居然是美國的??疑惑疑惑,可能是我pa過牆??
11. 路由
網絡其實是可以看成是一張無向圖,每個頂點表示一臺計算機或路由器或一個網絡,邊就是他們的網絡路徑。那麼像路由表的計算,路由如何選擇最佳路徑是根據圖論的算法來計算的。不過實際上網絡環境複雜,還得考慮其他因素,比如網絡抖動,網線被破壞了等。
11.1 自治系統AS
因爲網絡環境非常複雜,所以也需要對互聯網進行劃分,提出了自治系統(Autonomous System ),是處於一個管理機構(公司,學校)控制之下的路由器和網絡羣組,有權自主地決定在本系統中應採用何種路由協議的小型單位。AS內部網絡自行管理,對外部提供一個或者多個出(入)口。
AS也可以是一個國家,一個城市。前面瞭解的網絡的層次:主幹網,地區網這些也算是AS。
自治系統可以將互聯網的路由選擇協議分爲兩種:
- 自治系統內部路由的協議稱爲:內部網關協議(RIP、OSRF)
- 自治系統外部路由的協議稱爲:外部網關協議(BGP)
11.2 距離矢量(DV)算法
距離矢量算法的工作原理:每個路由器維護一張表(即一個矢量),表中列出了當前已知的到每個目標的最佳距離,以及所使用的鏈路。這些表通過鄰居之間互相交換信息而不斷被更新,最終每個路由器都瞭解到達每個目的地的最佳鏈路。
參考:每隔一段時間,路由器會向所有鄰居結點發送它到每個目的結點的矢量表,同時它也接收每個鄰居結點發來的矢量表。這樣以此類推,經過一段時間後便可將網絡中各路由器所獲得的距離矢量信息在各路由器上統一起來,這樣各路由器只需要查看這個距離矢量表就可以爲不同來源分組找到一條最佳的路由。
距離矢量算法有時也被稱爲分佈式Bellman-Ford路由算法(根據設計者來命名)。
每個路由中的矢量表,需要維護兩個部分:
- 當前節點到別的節點的最小距離。
- 是當前節點到別的節點需要經過的第一個節點。
來看個例子:
能夠理解上面的過程就行,並且記住在計算過程中各路由是異步計算的。
- 每個節點與相鄰的節點交換矢量Di和Si的信息。
- 每個節點根據交換的信息更新自己的節點信息。
其實該表就是前面說的路由表。
11.3 內部網關路由協議RIP協議
RIP(Routing Information Protocal)協議,該協議的核心是利用DV算法。RIP協議把網絡的**跳數(hop)**作爲DV算法的度量單位。前面瞭解了網絡中的數據是一跳一跳進行轉播的(專業術語)。RIP協議每隔30s交換一次路由信息(即路由表),並且認爲跳數>15的路由則爲不可達路由。
RIP協議的過程:
- 路由器初始化路由信息(兩個向量𝐷𝑖和S𝑖)
- 對相鄰路由器X發過來的信息,對信息的內容進行修改(下一跳地址設置爲X,所有距離加1)
- 檢索本地路由,將信息中新的路由插入到路由表裏面
- 檢索本地路由,對於下一跳爲X的,更新爲修改後的信息
- 檢索本地路由,對比相同目的的距離,如果新信息的距離更小,則更新本地路由表
- 如果3分鐘沒有收到相鄰的路由信息,則把相鄰路由設置爲不可達(16跳)
對於第2步中的三小步的例子:
RIP的缺點:
RIP協議的實現簡單,開銷很小,但是也限制了網絡的規模,比如跳數大於15的不管可不可達,都是算成不可達的,所以只能在規模較小的網絡內使用。對於”壞消息“傳遞慢,更新收斂時間過長。
11.4 Dijkstra(迪傑斯特拉)算法
這個算法是圖論中的算法。主要是解決有權圖中從一個節點到其他節點的最短路徑問題。
算法的過程:不理解等下看例子
- 初始化兩個集合(S, U)(S表示已求出最短路徑的頂點集合,S初始時只有起始頂點。U爲其餘未確定最短路徑的頂點集合,若頂點與起點不是相鄰先把距離設爲無窮)
- 如果U不爲空, 對U集合頂點進行距離的排序,並取出距離起始點最近的一個頂點D
- 將頂點D的納入S集合
- 更新通過頂點D到達U集合所有點的距離(如果距離更小則更新,否則不更新)
- 重複2步驟
- 知道U集合爲空,算法完成
例子:
11.5 鏈路狀態(LS)協議
該協議需要記住以下三個特點。
- 向所有的路由器發送消息
-
消息描述該路由器與相鄰路由器的鏈路狀態。對比於RIP協議,RIP協議只能描述跳數。
-
只有鏈路狀態發生變化時,才發送更新信息。對比於RIP協議,RIP協議每隔30s交換路由信息。
11.6 OSPF協議的過程
OSPF(Open Shortest Path First,開放最短路徑優先):它的核心利用Dijkstra算法。LS協議定義規則,而OSPF協議則實現LS定義的規則。即LS協議三個特點都由OSPF協議實現的。
- 向所有的路由器發送消息。會獲取網絡中所有信息,每個路由器就可以得到”網絡的完整拓撲“。”網絡的完整拓撲“也稱爲”鏈路狀態數據庫“,保存的是網絡中每一跳的鏈路狀態是怎麼樣的。整個網絡的”鏈路狀態數據庫“都是一致的,並且使用的是Dijkstra算法。
- 消息描述該路由器與相鄰路由器的鏈路狀態。比原來的RIP協議更加客觀、先進。
- 只有鏈路狀態發生變化時,才發送更新信息。減少了數據的交換,更快收斂。
OSPF協議的五種消息類型
- 問候消息(Hello):長度短,維護路由器與相鄰路由器的可達性。
- 鏈路狀態數據庫描述信息:向相鄰路由器發送自己的”鏈路狀態數據庫“。
- 鏈路狀態請求信息:向相鄰路由器請求”鏈路狀態數據庫“。
- 鏈路狀態更新信息:因爲網絡狀態是時時發送變化的,所以每個路由器有可能更新鏈路狀態。經常使用。對於更新消息,路由器會廣播到整個網絡中。
- 鏈路狀態確認信息:用於對鏈路更新的確認。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-noqzNp68-1582362854743)(D:/%E6%9C%89%E9%81%93%E4%BA%91%E6%9C%AC%E5%9C%B0%E5%AD%98%E6%94%BE/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%BD%91%E7%BB%9C%E5%B1%82/OSPF.png)]
11.7 外部網關路由協議BGP協議
BGP(Border Gateway Protocol,邊際網關協議):BGP協議是運行在AS之間的一種協議。需要知道兩點:
- BGP協議能夠找到一條到達目的比較好的路由
- AS之間通過BGP發言人來進行路由信息的交換
因爲AS內部使用不同的路由協議所以外部通信需要一個統一的協議。
BGP並不關心內部網絡拓撲,AS之間通過BGP發言人(speaker)交流信息,BGP Speaker可以人爲配置策略。配置策略可過濾一些敏感信息。比如中國與國外的網絡。
結合到網絡中的層次結構上:
12 總結
- IP協議的組成要懂,理解IP協議的轉發流程。
- 理解ARP協議,瞭解RARP協議。
- IP地址的劃分要懂。
- 瞭解內網和外網,並理解NAT技術。
- 瞭解ICMP協議的組成,知道它的作用。
- 瞭解ping和tracert命令。
- 路由知識是重點,主要理解掌握Dijkstra算法,RIP協議和OSPF協議的區別。知道BGP協議中的兩點。