一位考研黨親自整理的大學計算機網路基礎知識總結(不看後悔版)

Serendipper_constan發表於2020-11-28

序言

  別怕路長夢遠,總有星河照耀(●’◡’●),當初那張稚嫩青澀的臉龐早已不見了模樣,但是我們依然要記得來時的路。複習之餘整理了一些關於計算機網路的基礎知識以便查漏補缺,鞏固加強(主要還是方便查閱)。在此還要感謝各位老師在我困惑中指點迷津。卑微小生,才疏學淺,還望各位同仁批評指正!時間緊迫,我們快開始吧!?知足,上進,不負野心!
祝我上岸成功

(一)計算機網路基礎

1.1 計算機通訊網的組成(●’◡’●)

  計算機網路是將不同地理位置的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統,網路管理軟體及網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統。

網路的主要型別
一、網路的地理覆蓋範圍分:

A、區域網:
  1、屬於一個組織,一個單位或一個部門所有。
  2、網路一般不對外提供公共服務,管理方便,安全保密性高。
  3、組建方便,投資少,見效快,使用靈活應用最普遍的計算機網路。
B、都會網路:
  1、一般是一個地區或一個城市。
C、廣域網
  1、小到一個地區,一個城市,大到一個國家,幾個國家乃至全世界。
  2、提供大範圍的公共服務。因特網就是典型的廣域網。
  3、與區域網相比,廣域網投資大,安全保密性差,傳輸速率慢。

二、按計算機網路的線路結構分:

A、匯流排型
  1、該結構採用一條公共匯流排作為傳輸介質,每臺計算機通過相應的硬體介面入網,訊號沿匯流排進行廣播式傳送
  2、是典型的共享傳輸介質的網路。從信源所發的資訊會傳送到介質長度所及之處,被其他所有站點看到。如果有兩個以上的節點同時傳送資料,可能會造成衝突,就像公路上的兩車相撞一樣。

  優點:佈線容易,增刪容易,節約電纜;
  缺點:
  1、任何兩個站點傳送資訊都要經過匯流排,匯流排稱為傳輸瓶頸;當計算機站點多時,容易造成資訊阻塞,傳遞不暢。
  2、一臺計算機接入匯流排的介面發生故障,會造成整個網路癱瘓。
  3、當網路發生故障時,故障診斷和隔離困難。
B、星型
  由一臺中央節點和周圍的從節點組成。
  中央節點和從節點可以直接通訊,而從節點必須經過中央節點轉接才能通訊。

  優點:
  1、可靠性高。每臺計算機及其介面的故障不會影響其他計算機,不會影響整個網路,也不會造成網路癱瘓。
  2、故障診斷和隔離容易,網路容易管理和維護。
  3、可擴性好,配置靈活。增刪改一個站點容易實現,和其他計算機沒有關係
  4、傳輸速率高。每個節點獨佔一條線路,消除了資訊阻塞的情況。而匯流排和環形網路的瓶頸都線上路上。
     
  缺點:
  1、線纜使用量大。
  2、佈線、安裝工作量大。
  3、網路可靠性依賴於中央節點。如交換機或集線器選擇不當,發生故障會造成全網癱瘓。
C、環型
  計算機通過硬體介面入網,這些介面首尾相連成一條鏈路。資訊傳送也是廣播式的,沿著一個方向(如逆時針方向)單向逐點傳送。
  優點:
  點到點且沿一個方向單向傳輸,非常適合用光纖作為傳輸介質。
  1、傳輸距離遠,適合做主幹網。
  2、故障診斷容易定位。
  3、初始安裝容易,線纜用量少。環形線路也是一條匯流排,只是首尾封閉。

三、按傳輸介質分:

A、有線網路
  1、同軸電纜:成本低,安裝方便,但傳輸率低,抗干擾能力一般,傳輸距離短
  2、雙絞線:組建區域網時常用,優缺點類似於同軸電纜。
  3、光纖:主要用於網路的主幹部分,其特點是成本高,安裝技術要求高,傳輸距離長,傳輸率高,抗干擾能力強,且不會受到電子監聽裝置的監聽等,是組建高安全性網路的理想選擇。

B、無線網路
  1、紅外線
  2、微波
  3、無線電

  計算機網路由通訊子網和資源子網組成。
• 通訊子網負責資料的無差錯和有序傳遞,其處理功能包括差錯控制、流量控制、路由選擇、網路互連等。
• 資源子網是計算機通訊的本地系統環境,包括主機、終端和應用程式等,資源子網的主要功能是使用者資源配置、資料的處理和管理、軟體和硬體共享以及負載均衡等。
• 總的來說,計算機通訊網就是一個由通訊子網承載的、傳輸和共享資源子網的各類資訊的系統。(✿◕‿◕✿)

1.2 通訊協議(●’◡’●)

為了完成計算機之間有序的資訊交換,提出了通訊協議的概念,其定義是相互通訊的雙方(或者多方)對如何進行資訊交換所必須遵守的一整套規則。

協議涉及到三個要素,分別為:

1. 語法:語法是使用者資料與控制資訊的結構與格式,以及資料出現順序的意義
2. 語義:用於解釋位元流的每一部分的意義
3. 時序:事件實現順序的詳細說明

1.3 OSI參考模型(Open System Interconnection)

OSI參考模型是國際標準化組織(ISO)制定的一個用於計算機或通訊系統間互聯的標準體系,一般稱為OSI參考模型或七層模型。

OSI定義了網路互連的七層框架:物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層

每一層實現各自的功能和協議,並完成與相鄰層的介面通訊,OSI的服務定義詳細說明了各層所提供的服務。某一層的服務就是該層及其下各層的一種能力,它通過介面提供給更高一層。

OSI參考模型
物理層

1. 提供建立、維護和釋放物理鏈路所需的機械、電氣功能和規程等特性
2. 通過傳輸介質進行資料流(位元流)的物理傳輸、故障監測和物理層管理
3. 從資料鏈路層接收幀,將位元流轉換成底層物理介質上的訊號
4. 物理層並不是物理媒體本身,它只是開放系統中利用物理媒體實現物理連線的功能描述和執行連線的規程
5. 物理層提供用於建立、保持和斷開物理連線的機械的、電氣的、功能的和過程的條件
6. 簡而言之,物理層提供有關同步和位元流在物理媒體上的傳輸手段

資料鏈路層

1. 在物理鏈路的兩端之間傳輸資料
2. 在網路層實體間提供資料傳輸功能和控制
3. 提供資料的流量控制
4. 檢測和糾正物理鏈路產生的差錯
5. 格式化的訊息稱為幀
6. 資料鏈路層用於建立、維持和拆除鏈路連線,實現無差錯傳輸的功能
7. 在點到點或點到多點的鏈路上,保證資訊的可靠傳遞
8. 該層對連線相鄰的通路進行差錯控制、資料成幀、同步等控制

網路層

1. 負責端到端的資料的路由或交換,為透明地傳輸資料建立連線
2. 定址並解決與資料在異構網路間傳輸相關的所有問題
3. 使用上面的傳輸層和下面的資料鏈路層的功能
4. 格式化的訊息稱為分組
5. 網路層規定了網路連線的建立、維持和拆除的協議
6. 它的主要功能是利用資料鏈路層所提供的相鄰節點間的無差錯資料傳輸功能,通過路由選擇和中繼功能,實現兩個系統之間的連線

傳輸層

1. 提供無差錯的資料傳輸
2. 接收來自會話層的資料,如果需要,將資料分割成更小的分組,向網路層傳送分組並確保分組完整和正確到達它們的目的地
3. 在系統之間提供可靠的透明的資料傳輸,提供端到端的錯誤恢復和流量控制
4. 傳輸層完成開放系統之間的資料傳送控制
5. 主要功能是開放系統之間的資料的收發確認
6. 同時還用於彌補各種通訊網路的質量差異,對經過下三層之後仍然存在的傳輸差錯進行恢復,進一步提高可靠性
7. 另外,還通過複用、分段和組合、連線和分離、分流和合流等技術措施,提高吞吐量和服務質量

會話層

1. 提供節點之間通訊過程的協調
2. 負責執行會話規則(如:連線是否允許半雙工或全雙工通訊)、同步資料流以及當故障發生時重新建立連線
3. 使用上面的表示層和下面的傳輸層的功能
4. 會話層依靠傳輸層以下的通訊功能使資料傳送功能在開放系統間有效地進行
5. 其主要功能是按照在應用程式之間的約定,按照正確的順序收發資料,進行各種形式的對話
6. 控制方式可以歸納為以下兩類:
7. 一是為了在會話應用中易於實現接受處理和傳送處理的逐次交替變換,設定某一時刻只有一端傳送資料。因此需要有交替改變發信端的傳送控制。
8. 二是在類似檔案傳送等單方向傳送大量資料的情況下,為了防備應用處理中出現意外,在傳送資料的過程中需要給資料記上標記,當出現意外時,可以由記標記處重發。

表示層

1. 提供資料格式、變換和編碼轉換
2. 涉及正在傳輸資料的語法和語義
3. 將訊息以合適電子傳輸的格式編碼
4. 執行該層的資料壓縮和加密
5. 從應用層接收訊息,轉換格式,並傳送到會話層,該層常合併在應用層中
6. 表示層的主要功能是把應用層提供的資訊變換為能夠共同理解的形式,提供字元程式碼、資料格式、控制資訊格式、加密等的統一表示
7. 表示層僅對應用層資訊內容的形式進行變換,而不改變其內容本身

應用層

1. 包括各種協議,它們定義了具體的面向使用者的應用:如電子郵件、檔案傳輸等
2. 應用層是OSI參考模型的最高層。其功能是實現應用程式(如使用者程式、終端操作員等)之間的資訊交換,還具有一系列業務處理所需要的服務功能。

1.4 OSI模型的優點(●’◡’●)

(1) 分工合作,責任明確
性質相似的工作劃分在同一層,性質不同的工作則劃分到不同層,這樣每一層的功能都是明確的,每一層都有其負責的工作範圍,一旦出現問題,很容易找到問題所在的層,僅對此層加以改善即可。
(2) 對等交談
計算機通過網路進行通訊時,按照對等交談的原則,即同一層找同層,通過各對等層的協議來進行通訊,比如,兩個對等的網路層使用網路協議通訊。
對等層的協議
(3) 逐層處理,層層負責。
在OSI中,兩個實體通訊必須涉及下一層,只有相鄰層之間可以通訊,下層向上層提供服務,上層通過介面呼叫下層的服務,層間不能有越級呼叫關係,每層功能的實現都是在下層提供服務的基礎上完成的。即每一層都是利用下層提供的服務來完成本層功能,並在此基礎上為上層提供進一步的服務。

✈低三層模型屬於通訊子網,涉及為使用者間提供透明連線,操作主要以每條鏈路為基礎,在節點間的各條資料鏈路上進行通訊。由網路層來控制各條鏈路上的通訊,但要依賴於其他節點的協調操作。

✈高三層屬於資源子網,主要涉及保證資訊以正確可理解形式傳送。

✈傳輸層是高三層和低三層之間的介面,它是第一個端到端的層次,保證透明的端到端連線,滿足使用者的服務質量(QoS)要求,並向高三層提供合適的資訊形式。

1.5 TCP / IP協議簇(●’◡’●)

  由於ISO指定的OSI參考模型過於龐大和複雜,在實現的時候造成了很大困難,所以招到了很多批評。在實際中,TCP/IP協議棧獲得了更加廣泛的應用。主流的作業系統基本上都採用TCP/IP協議棧。
TCP/IP協議簇
五層協議體系結構的各層功能:

  應用層:是體系結構中的最高直接為使用者的應用程式提供服務,在因特網中的應用層協議很多,如支援全球資訊網應用的HTTP協議,支援電子郵件的SMTP協議,支援檔案傳送的FTP協議等。

  運輸層:負責向兩個主機中程式之間的通訊提供服務由於一個主機可同時執行多個程式,因此運輸層有複用和分用的功能:

  1. 複用,是多個應用層程式可同時使用下面運輸層的服務
  2. 分用,是把收到的資訊分別交付給上面應用層中相應的程式
  1. 運輸層主要使用以下兩種協議:
  2. 傳輸控制協議TCP:面向連線的,資料傳輸的單位是報文段,能夠提供可靠的交付
  3. 使用者資料包協議UDP:面向無連線的,資料傳輸的單位是使用者資料包,不保證提供可靠的交付,只能提供盡最大努力交付

  網路層:主要包括以下兩個任務:

  1. 負責為分組交換網上的不同主機提供通訊服務在傳送資料時,網路層把運輸層殘生的報文段或使用者資料包封裝成分組或包進行傳送。在TCP/IP體系中,由於網路層使用IP協議,因此分組也叫做IP資料包,或簡稱為資料包。
  2. 選中合適的路由,使源主機運輸層所傳下來的分組,能夠通過網路中的路由器找到目的主機。

  資料鏈路層:常簡稱為鏈路層,兩個主機之間的資料傳輸,總是在一段一段的鏈路上傳送的,也就是說,在兩個相鄰結點之間傳送資料是直接傳送的(點對點),這時就需要使用專門的鏈路層的協議。

在兩個相鄰結點之間傳送資料時,資料鏈路層將網路層交下來的IP資料包組裝成幀,在兩個相鄰結點之間的鏈路上“透明”地傳送幀中的資料,每一幀包括資料和必要的控制資訊(如同步資訊、地址資訊、差錯控制等)。

注:透明是一個很重要的術語::它表示某一個實際存在的事物看起來卻好像不存在一樣。"在資料鏈路層透明傳送資料"表示無論什麼樣的位元組合的資料都能夠通過這個資料鏈路層。因此,對所傳送的資料來說,這些資料就“看不見”資料鏈路層。或者說,資料鏈路層對這些資料來說是透明的。

   (1)在接收資料時,控制資訊使接收端能知道一個幀從哪個位元開始和到哪個位元結束。這樣資料鏈路層在收到一個幀後,就可從中提取出資料部分,上交給網路層。
   (2)控制資訊還使接收端能檢測到所收到的幀中有無差錯。如發現有差錯,資料鏈路層就簡單地丟棄這個出了差錯的幀,以免繼續傳送下去白白浪費網路資源。如需改正錯誤,就由運輸層的TCP協議來完成。

  物理層:在物理層上所傳資料的單位是位元,物理層的任務就是透明地傳送位元流。

1.6 資料在各層之間的傳遞過程(●’◡’●)

資料在各層之間的傳遞過程
OSI參考模型各層主要功能、傳輸資料單位:

物理層原始位元流的傳輸,基本單位:位元
資料鏈路層建立相鄰節點資料鏈路傳輸,基本單位:幀
網路層基於IP地址的路由選路傳輸資料,基本單位: 資料包
傳輸層常規資料傳遞,面向連線或者無連線,基本單位:資料段
會話層建立會話關係
表示層統一資料傳輸格式
應用層為使用者應用程式提供服務介面
物理層 --> 位元流 --> bit
資料鏈路層 --> 資料幀 --> frame
網路層 --> 資料包 --> packet
傳輸層 --> 資料段 -->  segment
應用層 --> 訊息 --> message

(二)MAC地址

  MAC地址也叫實體地址、硬體地址,由網路裝置製造商生產時燒錄在網路卡的EPROM。IP地址與MAC地址在計算機裡都是以二進位制表示的,IP地址是32位的,而MAC地址則是48位的。

  MAC地址的長度為48位(6個位元組),通常表示為12個16進位制數,如:00-16-EA-AE-3C-40就是一個MAC地址,其中前3個位元組,16進位制數00-16-EA代表網路硬體製造商的編號,它由IEEE(電氣與電子工程師協會)分配,而後3個位元組,16進位制數AE-3C-40代表該製造商所製造的某個網路產品(如網路卡)的系列號。

  只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地說,MAC地址就如同身份證上的身份證號碼,具有唯一性。

2.1 MAC地址組成(●’◡’●)

MAC地址組成
MAC幀格式
MAC幀格式
單播:

指從單一的源端傳送到單一的目的端。每個主機介面由一個MAC地址唯一標識,MAC地址的OUI中,第一位元組第8個位元表示地址型別。對於主機MAC地址,這個位元固定為0,表示目的MAC地址為此MAC地址的幀都是傳送到某個唯一的目的端。在衝突域中,所有主機都能收到源主機傳送的單播幀,但是其他主機發現目的地址與本地MAC地址不一致後會丟棄收到的幀,只有真正的目的主機才會接收並處理收到的幀。

廣播:

表示幀從單一的源傳送到共享乙太網上的所有主機。廣播幀的目的MAC地址為十六進位制的FFFFFFFFFFFF,所有收到該廣播幀的主機都要接收並處理這個幀。
廣播方式會產生大量流量,導致頻寬利用率降低,進而影響整個網路的效能,當需要網路中的所有主機都能接收到相同的資訊並進行處理的情況下,通常會使用廣播方式。

組播:

組播比廣播更加高效,組播轉發可以理解為選擇性的廣播,主機偵聽特定組播地址,接收並處理目的MAC地址為該組播MAC地址的幀。
組播MAC地址和單播MAC地址是通過第一位元組中的第8個位元區分的。
組播MAC地址的第8個位元為1,而單播MAC地址的第8個位元為0。
當需要網路上的一組主機(而不是全部主機)接收相同資訊,並且其他主機不受影響的情況下通常會使用組播方式。

(三)IP地址

  IP地址(Internet Protocol Address)是指網際網路協議地址,又譯為網際協議地址。

IP地址是IP協議提供的一種統一的地址格式,它為網際網路上的每一個網路和每一臺主機分配一個邏輯地址,以此來遮蔽實體地址的差異。

3.1 IP地址的組成(●’◡’●)

(1)長度:32bit(4位元組=4B=32bit),一共有2^32個IPv4地址。

(2)寫法:4組點分十進位制數,意思將一個32位的IP地址分為4段,每段由二進位制轉換為十進位制的數來進行表示,每段數字範圍為0-255。

(3)組成:一個IP地址由網路號和主機號組成。

3.2 IP地址型別(●’◡’●)

1. 公有地址

公有地址(Public address)由Inter NIC(Internet Network Information Center 因特網資訊中心)負責,這些IP地址分配給註冊並向Inter NIC提出申請的組織機構,通過它直接訪問因特網。

2. 私有地址

私有地址(Private address)屬於非註冊地址,專門為組織機構內部使用。

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

3.3 IP地址編址方式(●’◡’●)

最初設計網際網路時,為了便於定址以及層次化構造網路,每個IP地址包括兩個標識碼ID,即網路ID和主機ID。同一個物理網路上的所有主機都使用同一個網路ID,網路上的一個主機有一個主機ID與其對應。
在這裡插入圖片描述

A類IP地址

一個A類IP地址是指, 在IP地址的四段號碼中,第一段號碼為網路號碼,剩下的三段號碼為本地計算機的號碼。如果用二進位制表示IP地址的話,A類IP地址就由1位元組的網路地址和3位元組主機地址組成,網路地址的最高位必須是"0"。A類IP地址中網路的標識長度為8位,主機標識的長度為24位,A類網路地址數量較少,有126個網路,每個網路可以容納主機數達1600多萬臺。

A類IP地址的地址範圍1.0.0.1到127.255.255.254

(二進位制表示為:00000001 00000000 00000000 00000001----01111111 11111111 11111111 11111110)
B類IP地址

一個B類IP地址是指,在IP地址的四段號碼中,前兩段號碼為網路號碼。如果用二進位制表示IP地址的話,B類IP地址就由2位元組的網路地址和2位元組主機地址組成,網路地址的最高位必須是"10"。B類IP地址中網路的標識長度為16位,主機標識的長度為14位,B類網路地址適用於中等規模的網路,有16384個網路,每個網路所能容納的計算機數為6萬多臺。

B類IP地址地址範圍128.0.0.1到191.255.255.254

(二進位制表示為:10000000 00000000 00000000 00000001----10111111 11111111 11111111 11111110)
C類IP地址

一個C類IP地址是指,在IP地址的四段號碼中,前三段號碼為網路號碼,剩下的一段號碼為本地計算機的號碼。如果用二進位制表示IP地址的話,C類IP地址就由3位元組的網路地址和1位元組主機地址組成,網路地址的最高位必須是"110"。C類IP地址中網路的標識長度為24位,主機標識的長度為8位,C類網路地址數量較多,有209萬餘個網路。適用於小規模的區域網路,每個網路最多隻能包含254臺計算機。

C類IP地址範圍192.0.0.1到223.255.255.254

(二進位制表示為: 11000000 00000000 00000000 00000001----11011111 11111111 11111111 11111110)
 注意:IP地址中不能以十進位制127作為開頭,該類地址中數字127.0.0.1到127.255.255.255用於迴路測試

3.4 子網(●’◡’●)

  引入子網掩碼,從邏輯上把一個大網路劃分成一些小網路。子網掩碼是由一系列的1和0構成,通過將其同IP地址做與運算來指出一個IP地址的網路號是什麼。
  對於傳統IP地址分類來說,A類地址的子網掩碼是255.0.0.0;B類地址的子網掩碼是255.255.0.0;C類地址的子網掩碼是255.255.255.0。

例如,如果要將一個B類網路166.111.0.0劃分為多個C類子網來用的話,只要將其子網掩碼設定為255.255.255.0即可,這樣166.111.1.1和166.111.2.1就分屬於不同的網路了。像這樣,通過較長的子網掩碼將一個網路劃分為多個網路的方法就叫做劃分子網。

3.5 超網(●’◡’●)

  超網是同子網類似的概念,它通過較短的子網掩碼將多個小網路合成一個大網路。

例如,一個單位分到了8個C類地址:202.120.224.0到202.120.231.0,只要將其子網掩碼設定為255.255.248.0,就能使這些C類網路相通。

(四)ARP / RARP協議

  地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取實體地址的一個TCP/IP協議。主機傳送資訊時將包含目標IP地址的ARP請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的實體地址。收到返回訊息後將該IP地址和實體地址存入本機ARP快取中並保留一定時間,下次請求時直接查詢ARP快取以節約資源。

4.1 ARP欺騙(●ˇ∀ˇ●)

地址解析協議是建立在網路中各個主機互相信任的基礎上的,網路上的主機可以自主傳送ARP應答訊息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP快取;由此攻擊者就可以向某一主機傳送偽ARP應答報文,使其傳送的資訊無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。

4.2 ARP工作流程舉例(●ˇ∀ˇ●)

主機A的IP地址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2,MAC地址為0A-11-22-33-44-02;
  
當主機A要與主機B通訊時,地址解析協議可以將主機B的IP地址192.168.1.2解析成主機B的MAC地址,以下為工作流程:

  1. 根據主機A上的路由表內容,IP確定用於訪問主機B的轉發IP地址是192.168.1.2,然後A主機在自己的本地ARP快取中檢查主機B的匹配MAC地址。
  2. 如果主機A在ARP快取中沒有找到對映,它將詢問192.168.1.2的硬體地址,從而將ARP請求幀廣播到本地網路上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網路上的每臺主機都接收到ARP請求並且檢查是否與自己的IP地址匹配。
  3. 如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。
  4. 主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址對映新增到本地ARP快取中。
  5. 主機B將包含其MAC地址的ARP回覆訊息直接傳送回主機A。
  6. 當主機A收到從主機B發來的ARP回覆訊息時,會用主機B的IP和MAC地址對映更新ARP快取。本機快取是有生存期的,生存期結束後,將再次重複上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B傳送IP通訊了。

4.3 逆地址解析協議(●ˇ∀ˇ●)

  RARP,功能和ARP協議相對,其將區域網中某個主機的實體地址轉換為IP地址,比如區域網中有一臺主機只知道實體地址而不知道IP地址,那麼可以通過RARP協議發出徵求自身IP地址的廣播請求,然後由RARP伺服器負責回答。

RARP協議工作流程:
  (1)給主機傳送一個本地的RARP廣播,在此廣播包中,宣告自己的MAC地址並且請求任何收到此請求的RARP伺服器分配一個IP地址;
  (2)本地網段上的RARP伺服器收到此請求後,檢查其RARP列表,查詢該MAC地址對應的IP地址;
  (3)如果存在,RARP伺服器就給源主機傳送一個響應資料包並將此IP地址提供給對方主機使用;
  (4)如果不存在,RARP伺服器對此不做任何的響應;
  (5)源主機收到從RARP伺服器的響應資訊,就利用得到的IP地址進行通訊;
  (6)如果一直沒有收到RARP伺服器的響應資訊,表示初始化失敗。

(五)IP協議

  IP協議是TCP/IP協議族中最為核心的協議。所有的TCP、IP、ICMP、IGMP資料都以IP協議資料包格式傳送。IP協議提供無連線、不可靠的資料包傳送服務。

  1. 不可靠:它不保證資料能成功地傳送到目的地,IP協議僅提供最好地傳輸服務。如果發生某種錯誤,如路由器暫時用完緩衝區,IP協議的處理演算法是:丟棄該資料包,然後傳送ICMP訊息給傳送源(告訴傳送源為什麼丟棄),任何要求的可靠性都需要在上層實現。
  2. 無連線:IP協議並不維護後序資料包的狀態資訊,每個資料包的處理是獨立的。舉例:A向B依次傳送1、2兩個資料包,這兩個資料包在網路上選擇的路由線路可能不同,因此很有可能先收到報文2,後收到報文1。對於此種情況,IP協議並沒有做處理。

5.1 IP報頭(●ˇ∀ˇ●)

IP報頭
中文版:
IP報頭

  1. Version(版本資訊)(佔4bit,指IP協議的版本)
  2. Header Length(頭部長度)
    1. 頭部長度是指IP報頭的總長度,因為有Option可選部分,通常為20位元組,在20–60位元組;
    2. 該欄位單位為32位字(1個32位字為4位元組),因此當IP報頭長度為1111時是最大60位元組;
    3. IP報頭長度不是4位元組的整數倍是,就需要對填充域進行填充;
  3. Differentiated Services Field(服務型別)(佔8bit)
    TOS,服務型別:用來指定特殊的報文處理方式
  4. Total Length(總長度)(佔16bit)
    1. 標示此IP報頭和資料的之和的總長度
    2. 總長度16位,一個資料最大長度65535位元組,鏈路只允許1500位元組,超過的話需要進行MTU分片
    3. 一個資料包由IP報頭和資料兩部分組成,而IP報頭為20—60位元組,所以不會有一個資料包裡純資料超過1480位元組的
  5. Identification(ID識別符號)(佔16bit)與標記欄位和偏移欄位用於IP報文分片
    1. 原始報文大小超過MTU(<1480位元組)就必須將原始資料進行分片,每個分片小於MTU;
    2. 對同一原始檔案被分片的報文打上相同的標記,也用來判斷流量是否來於同一主機;
    3. IP軟體在儲存器中維持一個計數器沒生產一個資料包,計數器就加1,並賦予標識欄位;
    4. 資料包文進行分片處理後每個分片的標識值都與原資料包的標識值相同,接收端具有同標識值的分片就能最終正確重組為原資料。
  6. Flag(標記)(佔3bit),目前只有2位具有意義:
    1. 第一位沒有被使用
    2. 第二位不分片為(DF),當DF位置為1時表示路由器不能對報文進行分片處理
    3. 第三位(多分片)(MF)
    4. 當路由器對報文進行分片時,除了最後一個分片的MF位設定為0外,其他所有分片MF位置為1,以便接收者直到收到MF位為0的分片為止
  7. Fragmentation Offset(分片偏移)(13bit)
    1. 標識分片在分組中的位置
    2. 片偏移以8個位元組為偏移單位,分片的長度為8位元組的整數倍

乙太網最大幀長為1518B,IP報文1500B(三層)+ 幀頭18B(二層)
注意:MTU不是固定1500,這要取決現場物理環境,MTU不包含幀頭幀尾。

  1. Time To Live(TTL生存時間)(8bit)
    1. 跳數大小,即資料包能傳多少跳
    2. 不同作業系統TTL的預設最大值會有所不同(Linux—255;Win98—225;Win7/8/10—64)
    3. 表示資料包在網路中的壽命(最初以秒為單位,現在以跳數為單位,最大225)
    4. 分組壽命,防止路由成環時IP資料被無限轉發
    5. 源和目的路由器之間的路由數量(跳數)
    6. 路由裝置每此轉發將TTL值減1,TTL為0時丟棄該分組
  2. Protocol(協議)(8bit)
    標識資料攜帶的資料是何種協議,標識傳輸層地址或協議號,如1代表ICMP,6代表TCP,17代表UDP
  3. Header Checksum(報頭校驗和)(16bit)檢查報文頭部的完整性
    1. 用於校驗檢查IP報頭是否有出入
    2. 只校驗IP報頭部,資料部分由高層協議校驗(TCP頭的校驗欄位包含IP頭和資料的校驗)
    3. 無需重複校驗資料部分,縮短路由器轉發分組時的處理時間,資料部分由終端用高層協議校驗
  1. 傳送方先把校驗和欄位置為0,對首部中每個16bit(切割多個16bit)進行二進位制反碼求和,結果存在校驗和欄位中

  2. 收到一份IP資料包後同樣對首部中每個16bit進行二進位制碼反求和,接收方計算中包含了傳送方存在的首部校驗和

  3. 如果傳輸過程無錯誤,接收方結算結果全為1,傳輸中出現錯誤或資料丟失校驗和結果為非全1,接受者丟棄校驗未通過資料

  4. 不生成錯誤報文,由上層發現丟失資料進行重傳

  1. Source Ip address(源IP地址)(32bit)
    資料發起者的IP地址

  2. Destination Ip address(目的IP地址)(32bit)
    資料的接收者IP地址

  3. Option(可選欄位)(24bit)
    24bit用於提供一些資料包可選的服務,時間戳,記錄路由等

  4. Padding(填充項)
    Options一般為0或者是32bit的倍數,如果不夠32bit或者32bit的倍數則由Padding補齊。

(六)TCP / IP協議

  TCP/IP協議是Internet最基本的協議、Internet國際網際網路絡的基礎,由網路層的IP協議和傳輸層的TCP協議組成。通俗而言:TCP負責發現傳輸的問題,一有問題就發出訊號,要求重新傳輸,直到所有資料安全正確地傳輸到目的地。

  IP層接收由更低層(網路介面層)發來的資料包,並把該資料包傳送到更高層TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的資料包傳送到更低層。IP資料包是不可靠的,因為IP並沒有做任何事情來確認資料包是否按順序傳送的或者有沒有被破壞,IP資料包中含有傳送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。

6.1 UDP(●’◡’●)

UDP:使用者資料包文協議
使用者資料包文協議

16位源埠
16位目標埠
16位的UDP包長度(UDP頭部和UDP資料的總長度位元組)
16位頭部校驗和

6.2 UDP的特點(●’◡’●)

1.協議開銷小、效率高
2.UDP是無連線的,即傳送資料之前不需要建立連線
3.UDP使用盡最大努力交付,即不保證可靠交付
4.UDP沒有擁塞控制
5.UDP支援一對一、一對多、多對一和多對多互動通訊
6.UDP的首部開銷小,只有8個位元組

6.3 TCP(●’◡’●)

  TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由RFC793定義。

  TCP是面向連線的通訊協議,通過三次握手建立連線,通訊完成時要拆除連線,由於TCP是面向連線的所以只能用於端到端的通訊。

  TCP提供的是一種可靠的資料流服務,採用"帶重傳的肯定確認"技術來實現傳輸的可靠性。TCP還採用一種稱為"滑動視窗"的方式進行流量控制,所謂視窗實際表示接收能力,用以限制傳送方的傳送速度。
TCP
TCP

  1. 16位源埠,16位目的埠
  2. 32位序列編號:用來解決網路包亂序(reordering)問題。
  3. 32位確認序號ACK:用於確認收到資料包,用來解決不丟包的問題。
  4. 4位首部長度:表示該TCP報頭有多少個4位元組(32個bit)
  5. 6位保留位
  6. 6位標誌位
    1. URG: 標識緊急指標是否有效
    2. ACK: 標識確認序號是否有效
    3. PSH: 用來提示接收端應用程式立刻將資料從TCP緩衝區讀走
    4. RST: 要求重新建立連線. 我們把含有RST標識的報文稱為復位報文段
    5. SYN: 請求建立連線. 我們把含有SYN標識的報文稱為同步報文段
    6. FIN: 通知對端,本端即將關閉。我們把含有FIN標識的報文稱為結束報文段
  7. 16位視窗大小:用來資料傳輸時的流量控制避免擁塞
  8. 16位校驗和:傳送端填充,檢驗形式有CRC校驗等,如果接收端校驗不通過,則認為資料有問題。此處的校驗和不光包含TCP首部,也包含TCP資料部分
  9. 16位緊急指標:用來標識哪部分資料是緊急資料

6.4 TCP的特點(●’◡’●)

一、面向連線的傳輸,傳輸資料前需要先建立連線,資料傳輸完畢要釋放連線
二、端到端通訊,不支援廣播通訊
三、高可靠性,確保傳輸資料的正確性,不出現丟失或亂序
四、全雙工方式傳輸
五、採用位元組流方式 ,即以位元組為單位傳輸位元組序列。如果位元組流太長,將其分段。
六、提供緊急資料傳送功能,即當有緊急資料要傳送時,傳送程式會立即傳送,接收方收到後會暫停當前工作,讀取緊急資料並做相應處理。

6.5 TCP的狀態(●’◡’●)

TCP的狀態

6.6 三次握手與四次揮手問題(●’◡’●)

三次握手與四次揮手過程圖:
三次握手與四次揮手過程圖
  三次握手(Three-Way Handshake)是指建立一個TCP連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。

  1. 第一次握手:客戶端將標誌位SYN置為1,隨機產生一個值 seq=s,並將該資料包傳送給服務端,客戶端進入SYN_SENT狀態,等待服務端確認。
  2. 第二次握手:服務端收到資料包後由標誌位SYN=1知道客戶端請求建立連線,服務端將標誌位SYN和ACK都置為1,ack=s+1,隨機產生一個值seq=k,並將該資料包傳送給客戶端以確認連線請求,服務端進入SYN_RCVD狀態。
  3. 第三次握手:客戶端收到確認後,檢查ack值是否為s+1,ACK標誌位是否為1,如果正確則將標誌位ACK置為1,ack=k+1,並將該資料包傳送給服務端。服務端檢查ack值是否為k+1,ACK標誌位是否為1,如果正確則連線建立成功,客戶端和服務端進入ESTABLISHED 狀態,完成三次握手。
6.6.1 為什麼要三次握手?

  在只有兩次握手的情形下,假設Client想跟Server建立連線,但是卻因為中途連線請求的資料包丟失了,故Client端不得不重新傳送一遍。這個時候Server端僅收到一個連線請求,因此可以正常的建立連線。但是,有時候Client端重新傳送請求不是因為資料包丟失了,而是有可能資料傳輸過程因為網路併發量很大在某結點被阻塞了,這種情形下Server端將先後收到2次請求,並持續等待兩個Client請求向它傳送資料。
  問題就在這裡,Cient端實際上只有一次請求,而Server端卻有2個響應,極端的情況可能由於Client端多次重新傳送請求資料而導致Server端最後建立了N多個響應在等待,因而造成極大的資源浪費!所以,三次握手很有必要!

  四次揮手(Four-Way Wavehand)指斷開一個TCP連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。

  1. 第一次揮手客戶端傳送一個FIN,用來關閉客戶端到服務端的資料傳送,客戶端進入FIN_WAIT_1狀態。
  2. 第二次揮手服務端收到FIN後,傳送一個 ACK 給客戶端,確認序號為收到序號+1,服務端進入CLOSE_WAIT狀態。
  3. 第三次揮手服務端傳送一個FIN,用來關閉服務端到客戶端的資料傳送,服務端進入LAST_ACK 狀態。
  4. 第四次揮手客戶端收到FIN 後,客戶端進入TIME_WAIT 狀態,接著傳送一個ACK 給服務端,確認序號為收到序號+1,服務端進入 CLOSED狀態,完成四次揮手。
6.6.2 為什麼要四次揮手?

  試想一下,假如現在你是客戶端,你想斷開跟Server的所有連線該怎麼做?
第一步,你自己先停止向Server端傳送資料,並等待Server的回覆。但事情還沒有完,雖然你自身不往Server傳送資料了,但是因為你們之前已經建立好平等的連線了,所以此時Server也有主動權向你傳送資料。故Server端還得終止主動向你傳送資料,並等待你的確認。其實,說白了就是保證雙方的一個合約的完整執行!

6.7 三次握手詳解(●’◡’●)

三次握手過程圖:
三次握手過程圖

  1. 握手之前主動開啟連線的客戶端結束CLOSED階段,被動開啟的伺服器端也結束CLOSED階段,並進入LISTEN階段。
  2. 隨後開始三次握手:
    1. 首先客戶端向伺服器端傳送一段TCP報文,其中:標記位為SYN,表示“請求建立新連線”,序號為Seq=x(x一般為1),隨後客戶端進入SYN-SENT階段。
    2. 伺服器端接收到來自客戶端的TCP報文之後,結束LISTEN階段。並返回一段TCP報文,其中:標誌位為SYN和ACK,表示“確認客戶端的報文Seq序號有效,伺服器能正常接收客戶端傳送的資料,並同意建立新連線”(即告訴客戶端,伺服器收到了你的資料);
    3. 伺服器端想從y開始,序號為Seq=y;確認號為Ack=x+1,表示收到客戶端的序號Seq並將其值加1作為自己確認號Ack的值。隨後伺服器端進入SYN-RCVD階段。
  3. 客戶端接收到來自伺服器端的確認收到資料的TCP報文之後,明確了從客戶端到伺服器的資料傳輸是正常的,結束SYN-SENT階段。並返回最後一段TCP報文。其中:標誌位為ACK,表示“確認收到伺服器端同意連線的訊號”(即告訴伺服器,我知道你收到我發的資料了);序號為Seq=x+1,表示收到伺服器端的確認號Ack,並將其值作為自己的序號值;確認號為Ack=y+1,表示收到伺服器端序號Seq,並將其值加1作為自己的確認號Ack的值;隨後客戶端進入ESTABLISHED階段。
  4. 伺服器收到來自客戶端的“確認收到伺服器資料”的TCP報文之後,明確了從伺服器到客戶端的資料傳輸是正常的。結束SYN-SENT階段,進入ESTABLISHED階段。
  5. 在客戶端與伺服器端傳輸的TCP報文中,雙方的確認號Ack和序號Seq的值,都是在彼此Ack和Seq值的基礎上進行計算的,這樣做保證了TCP報文傳輸的連貫性。一旦出現某一方發出的TCP報文丟失,便無法繼續握手,以此確保了三次握手的順利完成,此後客戶端和伺服器端進行正常的資料傳輸。
6.7.1 為什麼要進行第三次握手?

  1.進行第三次握手是為了防止伺服器端開啟一些無用的連線增加伺服器開銷以及防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤。
  2.由於網路傳輸是有延時的(要通過網路光纖和各種中間代理伺服器),在傳輸的過程中,比如客戶端發起了SYN=1建立連線的請求(第一次握手)。
  3.如果伺服器端直接建立了這個連線並返回包含SYN、ACK和Seq等內容的資料包給客戶端,這個資料包因為網路傳輸的原因丟失了,丟失之後客戶端就一直沒有接收到伺服器返回的資料包。客戶端可能設定了一個超時時間,時間到了就關閉了連線建立的請求。再重新發出建立連線的請求,而伺服器端是不知道的,如果沒有第三次握手告訴伺服器端:客戶端收的到伺服器端傳輸的資料的話,伺服器端是不知道客戶端有沒有接收到伺服器端返回的資訊的。

這個過程可理解為:
第三次握手
  4.這樣沒有給伺服器端一個建立還是關閉連線埠的請求,伺服器端的埠就一直開著,等到客戶端因超時重新發出請求時,伺服器就會重新開啟一個埠連線。那麼伺服器端上沒有接收到請求資料的上一個埠就一直開著,長此以往,這樣的埠多了,就會造成伺服器端開銷的嚴重浪費。
  5.還有一種情況是已經失效的客戶端發出的請求資訊,由於某種原因傳輸到了伺服器端,伺服器端以為是客戶端發出的有效請求,接收後產生錯誤。
  6.所以我們需要第三次握手來確認這個過程,讓客戶端和伺服器端能夠及時地察覺到因為網路等一些問題導致的連線建立失敗,這樣伺服器端的埠就可以關閉了不用一直等待。

也可以這樣理解:第三次握手是客戶端向伺服器端傳送資料,這個資料就是要告訴伺服器,客戶端有沒有收到伺服器第二次握手時傳過去的資料。若傳送的這個資料是"收到了"的資訊,接收後伺服器就正常建立TCP連線,否則建立TCP連線失敗,伺服器關閉連線埠,由此減少伺服器開銷和接收到失效請求發生的錯誤。

6.8 四次揮手詳解:(●’◡’●)

四次揮手過程圖:
四次揮手過程圖

  1. 客戶端打算關閉連線,此時會傳送一個TCP首部FIN標誌位被置為1的報文,也即FIN報文,之後客戶端進入FIN_WAIT_1狀態。
  2. 服務端收到該報文後,就向客戶端傳送ACK應答報文,接著服務端進入CLOSED_WAIT狀態。
  3. 客戶端收到服務端的ACK應答報文後,之後進入FIN_WAIT_2狀態。等待服務端處理完資料後,也向客戶端傳送FIN報文,之後服務端進入LAST_ACK狀態。客戶端收到服務端的FIN報文後,回一個ACK應答報文,之後進入TIME_WAIT狀態。
  4. 伺服器收到了ACK應答報文後,就進入了CLOSE狀態,至此服務端已經完成連線的關閉。
  5. 客戶端在經過2MSL一段時間後,自動進入CLOSE狀態,至此客戶端也完成連線的關閉。
    四次揮手過程圖

四次揮手詳解:

  1. 揮手之前主動釋放連線的客戶端結束ESTABLISHED階段。
  2. 隨後開始四次揮手:
    1. 首先客戶端想要釋放連線,向伺服器端傳送一段TCP報文,其中:標記位為FIN,表示“請求釋放連線“;序號為Seq=u;隨後客戶端進入FIN-WAIT-1階段,即半關閉階段。並且停止在客戶端到伺服器端方向上傳送資料,但是客戶端仍然能接收從伺服器端傳輸過來的資料。注意:這裡不傳送的是正常連線時傳輸的資料(非確認報文),而不是一切資料,所以客戶端仍然能傳送ACK確認報文。
    2. 伺服器端接收到從客戶端發出的TCP報文之後,確認了客戶端想要釋放連線,隨後伺服器端結束ESTABLISHED階段,進入CLOSE-WAIT階段(半關閉狀態)並返回一段TCP報文,其中:標記位為ACK,表示“接收到客戶端傳送的釋放連線的請求”;序號為Seq=v;確認號為Ack=u+1,表示是在收到客戶端報文的基礎上,將其序號Seq值加1作為本段報文確認號Ack的值。
    3. 隨後伺服器端開始準備釋放伺服器端到客戶端方向上的連線。
    4. 客戶端收到從伺服器端發出的TCP報文之後,確認了伺服器收到了客戶端發出的釋放連線請求,隨後客戶端結束FIN-WAIT-1階段,進入FIN-WAIT-2階段,前"兩次揮手"既讓伺服器端知道了客戶端想要釋放連線,也讓客戶端知道了伺服器端了解了自己想要釋放連線的請求。於是,可以確認關閉客戶端到伺服器端方向上的連線了。
  3. 伺服器端自從發出ACK確認報文之後,經過CLOSED-WAIT階段,做好了釋放伺服器端到客戶端方向上的連線準備,再次向客戶端發出一段TCP報文,其中:標記位為FIN,ACK,表示“已經準備好釋放連線了”。注意:這裡的ACK並不是確認收到伺服器端報文的確認報文。序號為Seq=w;確認號為Ack=u+1;表示是在收到客戶端報文的基礎上,將其序號Seq值加1作為本段報文確認號Ack的值。隨後伺服器端結束CLOSE-WAIT階段,進入LAST-ACK階段。並且停止在伺服器端到客戶端的方向上傳送資料,但是伺服器端仍然能夠接收從客戶端傳輸過來的資料。
  4. 客戶端收到從伺服器端發出的TCP報文,確認了伺服器端已做好釋放連線的準備,結束FIN-WAIT-2階段,進入TIME-WAIT階段,並向伺服器端傳送一段報文,其中:標記位為ACK,表示“接收到伺服器準備好釋放連線的訊號”。序號為Seq=u+1;表示是在收到了伺服器端報文的基礎上,將其確認號Ack值作為本段報文序號的值。確認號為Ack=w+1;表示是在收到了伺服器端報文的基礎上,將其序號Seq值作為本段報文確認號的值。
  5. 隨後客戶端開始在TIME-WAIT階段等待2MSL,伺服器端收到從客戶端發出的TCP報文之後結束LAST-ACK階段,進入CLOSED階段。由此正式確認關閉伺服器端到客戶端方向上的連線。
  6. 客戶端等待完2MSL之後,結束TIME-WAIT階段,進入CLOSED階段,由此完成四次揮手。後兩次揮手既讓客戶端知道了伺服器端準備好釋放連線了,也讓伺服器端知道了客戶端了解了自己準備好釋放連線了。於是,可以確認關閉伺服器端到客戶端方向上的連線了,由此完成四次揮手。
  7. 與三次揮手一樣,在客戶端與伺服器端傳輸的TCP報文中,雙方的確認號Ack和序號Seq的值,都是在彼此Ack和Seq值的基礎上進行計算的,這樣做保證了TCP報文傳輸的連貫性,一旦出現某一方發出的TCP報文丟失,便無法繼續揮手,以此確保了四次揮手的順利完成。
6.8.1 為什麼"握手"是三次,"揮手"卻要四次?

  TCP建立連線時之所以只需要"三次握手",是因為在第二次握手過程中,伺服器端傳送給客戶端的TCP報文是以SYN與ACK作為標誌位的。SYN是請求連線標誌,表示伺服器端同意建立連線;ACK是確認報文,表示告訴客戶端,伺服器端收到了它的請求報文。即SYN建立連線報文與ACK確認接收報文是在同一次握手當中傳輸的,所以三次握手不多也不少,正好讓雙方明確彼此資訊互通。
  TCP釋放連線時之所以需要四次揮手,是因為FIN釋放連線報文與ACK確認接收報文是分別由第二次和第三次握手傳輸的。

6.8.2 為何建立連線時一起傳輸,釋放連線時卻要分開傳輸?

  建立連線時,被動方伺服器端結束CLOSED階段進入握手階段並不需要任何準備,可以直接返回SYN和ACK報文,開始建立連線。
  釋放連線時,被動方伺服器,突然收到主動方客戶端釋放連線的請求時並不能立即釋放連線,因為還有必要的資料需要處理,所以伺服器先返回ACK確認收到報文,經過CLOSE-WAIT階段準備好釋放連線之後,才能返回FIN釋放連線報文。

6.8.3 為什麼客戶端在TIME-WAIT階段要等2MSL?

  為的是確認伺服器端是否收到客戶端發出的ACK確認報文

  當客戶端發出最後的ACK確認報文時,並不能確定伺服器端能夠收到該段報文。所以客戶端在傳送完ACK確認報文之後,會設定一個時長為2MSL的計時器。

  MSL指的是Maximum Segment Lifetime:一段TCP報文在傳輸過程中的最大生命週期。2MSL即是伺服器端發出為FIN報文和客戶端發出的ACK確認報文所能保持有效的最大時長。

  伺服器端在1MSL內沒有收到客戶端發出的ACK確認報文,就會再次向客戶端發出FIN報文。如果客戶端在2MSL內,再次收到了來自伺服器端的FIN報文,說明伺服器端由於各種原因沒有接收到客戶端發出的ACK確認報文。
  客戶端再次向伺服器端發出ACK確認報文,計時器重置,重新開始2MSL的計時;否則客戶端在2MSL內沒有再次收到來自伺服器端的FIN報文,說明伺服器端正常接收了ACK確認報文,客戶端可以進入CLOSED階段,完成“四次揮手”。
  所以,客戶端要經歷時長為2SML的TIME-WAIT階段,這也是為什麼客戶端比伺服器端晚進入CLOSED階段的原因。

(七)DNS協議

  DNS是域名系統(Domain Name System)的縮寫,該系統用於命名組織到域層次結構中的計算機和網路服務,可以簡單地理解為將URL轉換為IP地址。
  域名是由圓點分開一串單詞或縮寫組成的,每一個域名都對應一個唯一的IP地址,在Internet上域名與IP地址之間是一一對應的,DNS就是進行域名解析的伺服器。
  因特網採用了層次樹狀結構的命名方法。任何一個連線在因特網上的主機或路由器,都有一個唯一的層次結構的名字,即域名。域名空間有根域,頂層域,二級域,子域,區域之分。

7.1 域名結構示意圖(●’◡’●)

域名結構示意圖
每一個域名都是一個標號序列,用字母、數字和連線符組成,標號序列總長度不能超過255個字元,它由點號分割成一個個的標號,每個標號應該在63個字元之內,每個標號都可以看成一個層次的域名。

級別最低的域名寫在左邊,級別最高的域名寫在右邊

域名服務主要是基於UDP實現的,伺服器的埠號為53

7.2 域名解析方式(●’◡’●)

  1. 遞迴查詢法
    1. 如果DNS伺服器無法解析出DNS客戶機所要求查詢的域名所對應的IP地址時,DNS伺服器代表DNS客戶機來查詢或聯絡其他DNS伺服器,以完全解析該名稱,並將應答返回給客戶機。
    2. 本機向本地域名伺服器發出一次查詢請求,就靜待最終的結果。如果本地域名伺服器無法解析,自己會以DNS客戶機的身份向其它域名伺服器查詢,直到得到最終的IP地址告訴本機。
  2. 迭代查詢法
    1. 客戶機送出查詢請求後,若該DNS伺服器中不包含所需資料,它會告訴客戶機另外一臺DNS伺服器的IP地址,使客戶機自動轉向另一臺DNS伺服器查詢,以此類推,直到查詢資料,否則由最後一臺DNS伺服器通知客戶機查詢失敗。
    2. 本地域名伺服器向根域名伺服器查詢,根域名伺服器告訴它下一步到哪裡去查詢,然後它再去查,每次它都是以客戶機的身份去各個伺服器查詢。
  3. 反向查詢
    客戶機利用IP地址查詢其主機完整域名。

7.3 域名解析過程(●’◡’●)

域名解析總體可分為兩大步驟:
第一個步驟是本機向本地域名伺服器發出一個DNS請求報文,報文裡攜帶需要查詢的域名。
第二個步驟是本地域名伺服器向本機回應一個DNS響應報文,裡面包含域名對應的IP地址。

從下面對jocent.me進行域名解析的報文中可明顯看出這兩大步驟:
具體的流程可描述如下:
	1. 主機10.74.36.90先向本地域名伺服器10.74.1.11進行遞迴查詢
	2. 本地域名伺服器採用迭代查詢,向一個根域名伺服器進行查詢
	3. 根域名伺服器告訴本地域名伺服器,下一次應該查詢的頂級域名伺服器dns.me的IP地址
	4. 本地域名伺服器向頂級域名伺服器dns.me進行查詢
	5. 頂級域名伺服器me告訴本地域名伺服器,下一步查詢許可權伺服器dns.jocent.me 的IP地址
	6. 本地域名伺服器向許可權伺服器dns.jocent.me進行查詢
	7. 許可權伺服器dns.jocent.me告訴本地域名伺服器所查詢的主機的IP地址
	8. 本地域名伺服器最後把查詢結果告訴10.74.36.90

7.4 DNS協議報文格式(●’◡’●)

DNS協議報文格式
整個 DNS 格式主要分為 3 部分內容,即基礎結構部分、問題部分、資源記錄部分:

1. 基礎結構部分
基礎結構部分

1. 事務 ID:DNS 報文的 ID 標識,對於請求報文和其對應的應答報文,該欄位的值是相同的,通過它可以區分 DNS 應答報文是對哪個請求進行響應的
2. 標誌:DNS 報文中的標誌欄位
3. 問題計數:DNS 查詢請求的數目
4. 回答資源記錄數:DNS 響應的數目
5. 權威名稱伺服器計數:權威名稱伺服器的數目
6. 附加資源記錄數:額外的記錄數目(權威名稱伺服器對應 IP 地址的數目)

基礎結構部分中的標誌欄位又分為若干個欄位:
標誌欄位

1. QR(Response):查詢請求/響應的標誌資訊。查詢請求時,值為0;響應時,值為 1。
2. Opcode:操作碼。其中,0 表示標準查詢;1 表示反向查詢;2 表示伺服器狀態請求。
3. AA(Authoritative):授權應答,該欄位在響應報文中有效。值為 1 時,表示名稱伺服器是權威伺服器;值為 0 時,表示不是權威伺服器。
4. TC(Truncated):表示是否被截斷。值為 1 時,表示響應已超過 512 位元組並已被截斷,只返回前 512 個位元組。
5. RD(Recursion Desired):期望遞迴。該欄位能在一個查詢中設定,並在響應中返回。該標誌告訴名稱伺服器必須處理這個查詢,這種方式被稱為一個遞迴查詢。如果該位為 0,且被請求的名稱伺服器沒有一個授權回答,它將返回一個能解答該查詢的其他名稱伺服器列表。這種方式被稱為迭代查詢。
6. RA(Recursion Available):可用遞迴。該欄位只出現在響應報文中。當值為 1 時,表示伺服器支援遞迴查詢。
7. Z:保留欄位,在所有的請求和應答報文中,它的值必須為 0。
8. rcode(Reply code):返回碼欄位,表示響應的差錯狀態。
      1. 當值為 0 時,表示沒有錯誤;
      2. 當值為 1 時,表示報文格式錯誤,伺服器不能理解請求的報文;
	  3. 當值為 2 時,表示域名伺服器失敗,因為伺服器的原因導致沒辦法處理這個請求;
      4. 當值為 3 時,表示名字錯誤,只有對授權域名解析伺服器有意義,指出解析的域名不存在;
      5. 當值為 4 時,表示查詢型別不支援,即域名伺服器不支援查詢型別;
      6. 當值為 5 時,表示拒絕,一般是伺服器由於設定的策略拒絕給出應答,如伺服器不希望對某些請求者給出應答。

2. 問題部分
問題部分指的是報文格式中查詢問題區域(Queries)部分。該部分是用來顯示 DNS 查詢請求的問題,通常只有一個問題。該部分包含正在進行的查詢資訊,包含查詢名(被查詢主機名字)、查詢型別、查詢類。
問題部分

1. 查詢名:一般為要查詢的域名,有時也會是 IP 地址,用於反向查詢
2. 查詢型別:DNS 查詢請求的資源型別,通常查詢型別為 A 型別,表示由域名獲取對應的 IP 地址
3. 查詢類:地址型別,通常為網際網路地址,值為 1

3. 資源記錄部分
資源記錄部分是指DNS報文格式中的最後三個欄位,包括回答問題區域欄位、權威名稱伺服器區域欄位、附加資訊區域欄位。
資源記錄部分

1. 域名:DNS 請求的域名
2. 型別:資源記錄的型別,與問題部分中的查詢型別值是一樣的
3. 類:地址型別,與問題部分中的查詢類值是一樣的
4. 生存時間:以秒為單位,表示資源記錄的生命週期,一般用於當地址解析程式取出資源記錄後決定儲存及使用快取資料的時間,它同時也可以表明該資源記錄的穩定程度,穩定的資訊會被分配一個很大的值
5. 資源資料長度:資源資料的長度
6. 資源資料:表示按查詢段要求返回的相關資源記錄的資料

(八)NAT協議

  NAT 網路地址轉換(Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術,它被廣泛應用於各種型別Internet接入方式和各種型別的網路中。NAT不僅完美地解決了lP地址不足的問題,而且還能夠有效地避免來自網路外部的攻擊,隱藏並保護網路內部的計算機。

  藉助於NAT,私有(保留)地址的"內部"網路通過路由器傳送資料包時,私有地址被轉換成合法的IP地址,一個區域網只需使用少量IP地址(甚至是1個)即可實現私有地址網路內所有計算機與Internet的通訊需求。

  NAT將自動修改IP報文的源IP地址和目的IP地址,IP地址校驗則在NAT處理過程中自動完成。有些應用程式將源IP地址嵌入到IP報文的資料部分中,所以還需要同時對報文的資料部分進行修改,以匹配IP頭中已經修改過的源IP地址。否則,在報文資料部分嵌入IP地址的應用程式就不能正常工作。

8.1 NAT工作過程(✿◠‿◠)

①如圖這個Client的閘道器設定為NAT主機,所以當要連上Internet的時候,該封包就會被送到NAT主機,這個時候的封包頭部的源IP為192.168.1.100。

②透過這個NAT主機,它會將Client的對外聯機封包的源IP偽裝成PPP0(撥號),這個介面具有公共IP。因為是公共IP了,所以這個封包就可以連上Internet,同時NAT主機並且會記憶這個聯機的封包是由哪一個Client端傳送來的。
③由Internet傳送回來的封包,當然由NAT主機來接收,NAT主機會去查詢原本記錄的路由資訊,並將目標IP由 PPP0上面的公共IP改回原來的192.168.1.100。
④最後則由NAT主機將該封包傳送給原先傳送封包的Client。

8.2 配置內部源地址靜態NAT(●’◡’●)

在這裡插入圖片描述

(九)DHCP協議

  DHCP動態主機配置協議(Dynamic Host Configuration Protocol)是一個區域網的網路協議,使用UDP協議工作,主要有兩個用途:1.給內部網路或網路服務供應商自動分配IP地址,2.給使用者或者內部網路管理員作為對所有計算機作中央管理的手段。

9.1 DHCP報文種類(●’◡’●)

  1. Discover
    DHCP客戶端在請求IP地址時並不知道DHCP伺服器的位置,因此DHCP客戶端會在本地網路內以廣播方式傳送Discover請求報文,以發現網路中的DHCP伺服器。
    所有收到Discover報文的DHCP伺服器都會傳送應答報文,DHCP客戶端據此可以知道網路中存在的DHCP伺服器的位置。
  2. Offer
    DHCP伺服器收到Discover報文後,就會在所配置的地址池中查詢一個合適的IP地址,加上相應的租約期限和其他配置資訊(如閘道器、DNS伺服器等),構造一個Offer報文,傳送給DHCP客戶端,告知使用者本伺服器可以為其提供IP地址。
    但這個報文只是告訴DHCP客戶端可以提供IP地址,最終還需要客戶端通過ARP來檢測該IP地址是否重複。
  3. Request
    DHCP客戶端可能會收到很多Offer請求報文,所以必須在這些應答中選擇一個。通常是選擇第一個Offer應答報文的伺服器作為自己的目標伺服器,並向該伺服器傳送一個廣播的Request請求報文,通告選擇的伺服器,希望獲得所分配的IP地址。
    另外,DHCP客戶端在成功獲取IP地址後,在地址使用租期達到50%時,會向DHCP伺服器傳送單播Request請求報文請求續延租約,如果沒有收到ACK報文,在租期達到87.5%時,會再次傳送廣播的Request請求報文以請求續延租約。
  4. ACK
    DHCP伺服器收到Request請求報文後,根據Request報文中攜帶的使用者MAC來查詢有沒有相應的租約記錄,如果有則傳送ACK應答報文,通知使用者可以使用分配的IP地址。
  5. NAK
    如果DHCP伺服器收到Request請求報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分配IP地址,則向DHCP客戶端傳送NAK應答報文,通知使用者無法分配合適的IP地址。
  6. Release
    當DHCP客戶端不再需要使用分配IP地址時(一般出現在客戶端關機、下線等狀況)就會主動向DHCP伺服器傳送RELEASE請求報文,告知伺服器使用者不再需要分配IP地址,請求DHCP伺服器釋放對應的IP地址。
  7. Decline
    DHCP客戶端收到DHCP伺服器ACK應答報文後,通過地址衝突檢測發現伺服器分配的地址衝突或者由於其他原因導致不能使用,則會向DHCP伺服器傳送Decline請求報文,通知伺服器所分配的IP地址不可用,以期獲得新的IP地址。
  8. Inform
    DHCP客戶端如果需要從DHCP伺服器端獲取更為詳細的配置資訊,則向DHCP伺服器傳送Inform請求報文。DHCP伺服器在收到該報文後,將根據租約進行查詢到相應的配置資訊後,向DHCP客戶端傳送ACK應答報文。

9.2 DHCP報文格式(●’◡’●)

DHCP報文格式

  1. OP:報文的操作型別。分為請求報文和響應報文,1:請求報文,2:應答報文
  2. Htype:DHCP客戶端的MAC地址型別。MAC地址型別其實是指明網路型別。Htype值為1時表示為最常見的乙太網MAC地址型別。
  3. Hlen:DHCP客戶端的MAC地址長度。乙太網MAC地址長度為6個位元組,即乙太網時Hlen值為6。
  4. Hops:DHCP報文經過的DHCP中繼的數目,預設為0。DHCP請求報文每經過一個DHCP中繼,該欄位就會增加1。沒有經過DHCP中繼時值為0。(若資料包需經過router傳送,每站加1,若在同一網內,為0)
  5. Xid:客戶端通過DHCP Discover報文發起一次IP地址請求時選擇的隨機數,相當於請求標識。用來標識一次IP地址請求過程,在一次請求中所有報文的Xid都是一樣的。
  6. Secs:DHCP客戶端從獲取到IP地址或者續約過程開始到現在所消耗的時間,以秒為單位。在沒有獲得IP地址前該欄位始終為0。(DHCP客戶端開始DHCP請求後所經過的時間)
  7. Flags:標誌位,只使用第0位元位,是廣播應答標識位,用來標識DHCP伺服器應答報文是採用單播還是廣播傳送,0表示採用單播傳送方式,1表示採用廣播傳送方式。注意:在客戶端正式分配了IP地址之前的第一次IP地址請求過程中,所有DHCP報文都是以廣播方式傳送的,包括客戶端傳送的DHCP Discover和DHCP Request報文,以及DHCP伺服器傳送的DHCP Offer、DHCP ACK和DHCP NAK報文。當然,如果是由DHCP中繼器轉的報文,則都是以單播方式傳送的。另外,IP地址續約、IP地址釋放的相關報文都是採用單播方式進行傳送的。
  8. Ciaddr:DHCP客戶端的IP地址。僅在DHCP伺服器傳送的ACK報文中顯示,因為在得到DHCP伺服器確認前,DHCP客戶端是還沒有分配到IP地址的。在其他報文中均顯示,只有客戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。
  9. Yiaddr:DHCP伺服器分配給客戶端的IP地址。僅在DHCP伺服器傳送的Offer和ACK報文中顯示,其他報文中顯示為0。
  10. Siaddr:下一個為DHCP客戶端分配IP地址等資訊的DHCP伺服器IP地址。僅在DHCP Offer、DHCP ACK報文中顯示,其他報文中顯示為0。
  11. Giaddr:DHCP客戶端發出請求報文後經過的第一個DHCP中繼的IP地址。如果沒有經過DHCP中繼,則顯示為0。
  12. Chaddr:DHCP客戶端的MAC地址。在每個報文中都會顯示對應DHCP客戶端的MAC地址。
  13. Sname:為DHCP客戶端分配IP地址的DHCP伺服器名稱(DNS域名格式)。在Offer和ACK報文中顯示傳送報文的DHCP伺服器名稱,其他報文顯示為0。
  14. File:DHCP伺服器為DHCP客戶端指定的啟動配置檔名稱及路徑資訊。僅在DHCP Offer報文中顯示,其他報文中顯示為空。
  15. Options:可選項欄位,長度可變,格式為"程式碼+長度+資料"。

9.3 DHCP協議的工作過程(●’◡’●)

  1. 發現階段:即DHCP客戶機尋找DHCP伺服器的階段。DHCP客戶機以廣播的方式傳送DHCP Discover 發現資訊來尋找DHCP伺服器(因為DHCP伺服器的IP地址對客戶機來說是未知的),即向255.255.255.255傳送特定的廣播資訊,網路上每一臺安裝了TCP/IP協議的主機都會接收到這種廣播資訊,但只有DHCP伺服器才會作出響應。
  2. 提供階段:即DHCP伺服器提供IP地址的階段。在網路中收到DHCP Discover發現資訊的DHCP伺服器都會作出響應,它從尚未出租的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機傳送一個包含出租的IP地址和其他設定額DHCP Offer提供資訊。
  3. 選擇階段:DHCP客戶機選擇某臺DHCP伺服器提供的IP地址的階段。如果有多臺DHCP伺服器向DHCP客戶機發來的DHCP Offer,客戶機只接收第一個收到的DHCP Offer,然後它以廣播的方式回答一個DHCP Request請求資訊。該資訊中包含它所選定的DHCP伺服器請求IP地址的內容。之所以要以廣播的方式回答,是為了通知所有的DHCP伺服器,它將選擇某臺DHCP伺服器所提供的IP地址。
  4. 確認階段:即DHCP伺服器確認所提供的IP地址的階段。當DHCP伺服器收到DHCP客戶機回答的DHCP Resquest請求後,它便向DHCP客戶機傳送一個包含它提供的IP地址和其他設定的DHCP ACK確認資訊,告訴DHCP客戶機可以使用它所提供的IP地址。然後DHCP客戶機便將其TCP/IP協議與網路卡繫結,除了DHCP客戶機所選擇的伺服器IP外,其他的DHCP伺服器都將收回曾提供的IP地址。
  5. 重新登陸:以後DHCP客戶機每次登陸網路時,就不需要再傳送DHCP Discover發現資訊了。而是直接傳送包含前一次所分配IP地址的DHCP Resquest請求。當DHCP伺服器收到這一資訊後,它會嘗試讓客戶機繼續使用原來的IP並回答一個DHCP ACK確認資訊,如果此IP地址無法分配個原來的DHCP客戶機時(比如IP分配給其他DHCP客戶機使用),則DHCP伺服器給DHCP客戶機回答一個DHCP NACK否認訊息,當原來的DHCP客戶機收到此訊息後,它就必須重新傳送DHCP Discover發現資訊重新請求新的IP地址。
  6. 更新租約:DHCP伺服器向DHCP客戶機出租的IP地址一般都由一個租借期限,期滿後DHCP伺服器會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP伺服器傳送其更新租約的資訊。

(十)HTTP協議

  超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。所有的WWW檔案都必須遵守這個標準。
超文字傳輸協議

10.1 HTTP的主要特點( •̀ ω •́ )

  1. 簡單快速
    客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

  2. 靈活
    HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

  3. 無連線
    無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

  4. 無狀態
    HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

10.2 URL統一資源定位符( •̀ ω •́ )

HTTP使用統一資源識別符號URI來傳輸資料和建立連線。URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊。

URL,全稱是Uniform Resource Locator,中文“統一資源定位符”,是網際網路上用來標識某一處資源的地址。

✈以下面這個URL為例,介紹下普通URL的各部分組成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL可以看出,一個完整的URL包括以下幾部分:

  1. 協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符。
  2. 域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用。
  3. 埠部分:跟在域名後面的是埠,域名和埠之間使用“:”作為分隔符。埠不是一個URL必須的部分,如果省略埠部分,將採用預設埠。
  4. 虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
  5. 檔名部分:從域名後的最後一個“/”開始到“?”為止,是檔名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是檔案部分。如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是檔名部分。本例中的檔名是“index.asp”。檔名部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔名。
  6. 錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分。
  7. 引數部分:從“?”開始到“#”為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為“boardID=5&ID=24618&page=1”。引數可以允許有多個引數,引數與引數之間用“&”作為分隔符。

10.3 HTTP請求報文(❁´◡`❁)

HTTP請求報文
一個HTTP請求報文由四個部分組成:請求行、請求頭部、空行、請求資料。

  1. 請求行
    請求行由請求方法欄位、URL欄位和HTTP協議版本欄位3個欄位組成,它們用空格分隔。請求方法比較多:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,最常用的是GET和POST。

    1. GET
      傳遞引數長度受限制,因為傳遞的引數是直接表示在位址列中,而特定瀏覽器和伺服器對url的長度是有限制的。因此,GET不適合用來傳遞私密資料,也不適合拿來傳遞大量資料。
    2. POST
      POST把傳遞的資料封裝在HTTP請求資料中,以名稱/值的形式出現,可以傳輸大量資料,對資料量沒有限制,也不會顯示在URL中。表單的提交用的是POST。
    3. HEAD
      HEAD跟GET相似,不過服務端接收到HEAD請求時只返回響應頭,不傳送響應內容。所以,如果只需要檢視某個頁面的狀態時,用HEAD更高效,因為省去了傳輸頁面內容的時間。
    4. DELETE
      刪除某一個資源
    5. OPTIONS
      用於獲取當前URL所支援的方法
    6. PUT
      把一個資源存放在指定的位置上,本質上來講, PUT和POST極為相似,都是向伺服器傳送資料,但它們之間有一個重要區別,PUT通常指定了資源的存放位置,而POST則沒有,POST的資料存放位置由伺服器自己決定。
    7. TRACE
      回顯伺服器收到的請求,主要用於測試或診斷。
    8. CONNECT
      CONNECT方法是HTTP/1.1協議預留的,能夠將連線改為管道方式的代理伺服器。通常用於SSL加密伺服器的連結與非加密的HTTP代理伺服器的通訊。
  2. 請求頭部
    請求頭部

  3. 空行
    通過一個空行,告訴伺服器請求頭部到此為止

  4. 請求資料

10.4 HTTP響應報文(❁´◡`❁)

HTTP響應由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。

  1. 狀態行,由HTTP協議版本號, 狀態碼, 狀態訊息三部分組成。

狀態碼:在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

  1. 訊息報頭,用來說明客戶端要使用的一些附加資訊
    在這裡插入圖片描述

  2. 空行

  3. 響應正文,伺服器返回給客戶端的文字資訊

10.5 HTTP工作原理(❁´◡`❁)

  HTTP協議定義Web客戶端如何從Web伺服器請求Web頁面,以及伺服器如何把Web頁面傳送給客戶端。
  HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求資料。伺服器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤程式碼、伺服器資訊、響應頭部和響應資料。

以下是 HTTP 請求/響應的步驟:

  1. 客戶端連線到Web伺服器
    一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。例如,http://www.oakcms.cn。
  2. 傳送HTTP請求
    通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。
  3. 伺服器接受請求並返回HTTP響應
    Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。
  4. 釋放連線TCP連線
    若connection模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求。
  5. 客戶端瀏覽器解析HTML內容
    客戶端瀏覽器首先解析狀態行,檢視錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。

例如:在瀏覽器位址列鍵入URL,按下回車之後會經歷以下流程:

  1. 瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址
  2. 解析出 IP 地址後,根據該 IP 地址和預設埠 80,和伺服器建立TCP連線
  3. 瀏覽器發出讀取檔案(URL中域名後面部分對應的檔案)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的資料傳送給伺服器
  4. 伺服器對瀏覽器請求作出響應,並把對應的 html 文字傳送給瀏覽器
  5. 釋放 TCP連線
  6. 瀏覽器將該 html 文字並顯示內容

如果我們在客戶端(客戶端)瀏覽器輸入 http://www.baidu.com,而baidu.com為要訪問的伺服器(伺服器),下面詳細分析客戶端為了訪問伺服器而執行的一系列關於協議的操作:

  1. 客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個IP地址找到客戶端到伺服器的路徑。客戶端瀏覽器發起一個HTTP會話到220.161.27.48,然後通過TCP進行封裝資料包,輸入到網路層。
  2. 在客戶端的傳輸層,把HTTP會話請求分成報文段,新增源和目的埠,如伺服器使用80埠監聽客戶端的請求,客戶端由系統隨機選擇一個埠,如5000,與伺服器進行交換,伺服器把相應的請求返回給客戶端的5000埠。然後使用IP層的IP地址查詢目的端。
  3. 客戶端的網路層不用關係應用層或者傳輸層,主要做的是通過查詢路由表確定如何到達伺服器,期間可能經過多個路由器,這些都是由路由器來完成的工作,不作過多的描述,無非就是通過查詢路由表決定通過那個路徑到達伺服器。
  4. 客戶端的鏈路層,包通過鏈路層傳送到路由器,通過鄰居協議查詢給定IP地址的MAC地址,然後傳送ARP請求查詢目的地址,如果得到回應後就可以使用ARP的請求應答交換的IP資料包。現在就可以傳輸了,然後傳送IP資料包到達伺服器的地址。

(十一)交換機與路由器

11.1 交換機的工作原理(❁´◡`❁)

  在計算機網路系統中,交換概念的提出改進了共享工作模式。我們以前介紹過的Hub集線器就是一種共享裝置,Hub本身不能識別目的地址,當同一區域網內的A主機給B主機傳輸資料時,資料包在以Hub為架構的網路上是以廣播方式傳輸的,由每臺終端通過驗證資料包頭的地址資訊來確定是否接收,也就是說,在這種工作方式下,同一時刻網路上只能傳輸一組資料幀的通訊, 如果發生碰撞還得重試。這種方式就是共享網路頻寬。
  如前所述,交換機擁有條很高頻寬的背部匯流排和內部交換矩陣。交換機上所有的埠都掛接在這條背部匯流排上。控制電路收到資料包以後,處理埠會查詢記憶體中的地址對照表以確定目的MAC(網路卡的硬體地址)的NIC(網路卡)掛接在哪個埠上,並通過內部交換矩陣迅速將資料包傳送到目的埠,目的MAC若不存在,則廣播到所有的埠,接收埠回應後交換機會“學習”到新的地址,並把它新增到內部MAC地址表中。
  使用交換機也可以把網路“分段”,通過對照MAC地址表,交換機只允許必要的網路流量通過交換機。通過交換機的過濾和轉發,可以有效地隔離廣播風暴,減少誤包和錯包的出現,避免共享衝突。

  交換機的主要功能有兩部分,建立虛連線和轉發資訊
當兩個站點間有資訊包要傳輸時,在這兩站點間臨時建立條點對點的連線,資訊包傳送完後,就立即拆除這個連線。在交換機內部儲存了一張地址表,用來儲存它所連線的各站點所在的交換機埠號和MAC地址之間的對應關係。交換機從一個埠收到資訊包,識別出包中的目的站MAC地址,查地址表, 得到目的站所在的埠,就可在兩個埠間建立一條虛連線,再將資訊包從源埠轉發到目的埠,包傳送完後, 這條虛連線就不存在了。
  總之,交換機是一種基於MAC地址識別,能完成封裝轉發資料包功能的網路裝置。交換機可以學習MAC地址,並將其存放在內部地址表中,通過在資料幀的始發者和目標接收者之間建立臨時的交換路徑,使資料幀直接由源地址到達目的地址。

11.2 生成樹協議(✿◕‿◕✿)

11.2.1 冗餘和交換環路

  為了保證企業網路中關鍵應用的可持續性,在進行網路拓撲結構設計和規劃時,冗餘常常是我們考慮的重要因素之一。 在如今的網路工程設計中,冗餘設計是考驗一個網路是否穩定的關鍵環節,鏈路冗餘使網路具有了容錯功能,具有冗餘性的設計對於網路的可靠性是極其重要的。

  1. 產生廣播風暴
    廣播風暴也叫網路廣播風暴,即一個資料包或幀被傳送到本地網段(由廣播域定義)上的每個節點就是廣播,網路上的廣播幀由於被轉發,數量急劇增加而出現正常網路通訊的反常現象。
    廣播風暴會佔用相當可觀的網路頻寬,導致正常資料包無法正常執行。當廣播資料充斥網路無法處理並佔用大量網路頻寬,導致正常業務不能執行,這就發生了廣播風暴,造成區域網區域性或整個網路癱瘓。
    冗餘和交換環路
    如圖所示就是一個存在環路的區域網路,假設B1、B2和B3都還沒有學習到A的MAC地址,因為A還沒有傳送過任何資料。當A傳送了一個資料幀,最初三個交換機都接收了這個資料幀,記錄A的地址在LAN1上,並排隊等待將這個資料幀轉發到LAN2上。其中一個交換機首先成功地將資料幀傳送到LAN2上,假設這個網橋是B1,那麼B2和B3將再次收到這個資料幀,因為BI對B2和B3來說是透明的。這個資料幀就好像是A在LAN2上傳送的一樣。於是B2和B3記錄A在LAN2上,排隊等待將這個新接收到的資料幀轉發到LAN1上,假設這時B2成功地將最初的資料幀轉發到LAN2上,那麼B1和B3都接收到這個資料幀,並排隊等待轉發這個資料幀到LAN1上。 如此反覆,資料幀就在環路中不斷迴圈,更糟糕的是每次成功的轉發都會導致網路中出現兩個新的資料幀,從而形成嚴重的廣播風暴。

  2. 出現幀的複製現象
    廣播風暴不斷旋轉時,同一個廣播幀被反覆在網段上傳遞,交換機就要拿出更多的時間處理這個不斷被複制的廣播幀,從而使整個網路的效能急劇下降,甚至癱瘓,而主機也正忙於處理這些相同的廣播幀,因為它們在不斷地被髮送到主機的網路介面卡上,這就影響了主機的正常工作,在嚴重時甚至會使主機當機。

  3. MAC地址表不穩定
    交換機之所以比集線器(Hub)速率快,就是因為交換機的記憶體裡有一個MAC地址表和埠對映的快取——MAC地址表, 但是在發生廣播風暴的時候,由於廣播風暴是在兩個相反的方向上旋轉的,所以會影響到MAC地址表的正常工作。
    如果網路不存在物理上的環路,就不會有上述問題存在,然而當網路結構複雜時,要保證網路中沒有任何環路是很困難的,並且在許多對可靠性要求高的網路中,為了保證不向斷的網路服務,需要採用物理環路的冗餘備份,因此,保證網路不存在環路是不現實的。

IEEE提出了個很好的解決辦法,
那就是802.1D協議標準規定的STP(生成樹協議的英文縮寫),該協議可應用於環路網路,通過一定的演算法實現路徑冗餘,同時將環路網路修剪成無環路的樹形網路,從而避免報文在環路網路中的增生和無限迴圈。

11.2.2 STP 生成樹協議簡介

  STP (Spanning Tree Protocol,生成樹協議)就是用來解決網路的環路。STP通過一定的演算法,使得任意兩個節點間有且只有一條路徑連線, 而其他的冗餘鏈路則被自動阻塞, 作為備份鏈路。只有當活動鏈路失敗時,備份鏈路才會被啟用,從而恢復裝置之間的連線,保證網路的暢通。
  STP操作對於終端來說是透明的,而不管終端連在LAN的某一部分還是多個部分。當建立網路時,網路中所有節點存在多條路徑。生成樹中的演算法計算出最佳路徑,因為每個VLAN是一個邏輯LAN部分,所以網管員能使STP一次工作在最多64個VLAN中。如果要配置超過64個VLAN,網管員需要將其他VLAN的STP禁止,因為預設的STP只能支援1–64個VLAN。

  執行生成樹演算法的網橋/交換機在規定的問隔(預設2秒)內通過網橋協議資料單元(BPDU)的組播幀與其他交換機交換配置資訊,其工作的過程如下:

  1. 通過比較交換機優先順序選取根交換機 (給定廣播域內只有一個根交換機)
  2. 其餘的非根交換機只有一一個通向根交換機的埠稱為根埠
  3. 每個網段只有一個轉發埠
  4. 根交換機所有的連線埠均為轉發埠
  5. 注:生成樹協議在交換機上一般是預設開啟的,不經人工干預即可正常工作,但這種自動生成的方案可能導致資料傳輸的路徑並非最優化。因此,可以通過人工設定交換機優先順序的方法影響生成樹的生成結果。

啟用生成樹協議的交換機,其介面處於以下幾種狀態:

  1. Blocking(阻塞):不參與幀的轉發
  2. Listening(偵聽):當確定該介面將參與幀轉發時,在阻寒狀態後的第一 個過度狀態
  3. Learning(學習):準備參與幀轉發
  4. Forwarding(轉發):轉發幀
  5. Disabled(禁用):埠處於Shutdown狀態、沒有連線,或者沒有啟用Spanning–Tree,從而不參與Spanning-Tree

  STP中定義了根橋(Root Bridge)、根埠(Root Port)、指定埠(Designated Port)、路徑開銷(Path Cost)等,目的就在於通過構造一棵自然樹的方法達到裁剪冗餘環路的目的,同時實現鏈路備份和路徑最優化

  生成樹演算法會特意阻塞可能導致環路的冗餘路徑,以確保網路中所有目的地之間只有一條邏輯路徑,但要實現這些功能,網橋之間必須要進行一些資訊的交流,這些資訊交流單元就稱為網橋協議資料單元BPDU幀。

  • BPDU是一種二層報文,目的MAC地址是多播地址:01-80-C2-00-00-00,所有支援STP的網橋都會接收並處理收到的BPDU報文,該報文的資料區裡攜帶了用於生成樹計算的所有有用資訊。
  • 阻塞的路徑不再接收和轉發使用者資料包,但是會接收用來防止環路的網橋協議資料單元BPDU幀。如果網路拓撲發生變化,需要啟用阻塞路徑來抵消網路電纜或交換機故障的影響,STP就會重新計算路徑,將必要的埠解除阻塞,使冗餘路徑進入活動狀態。
每個BPDU都包含4個重要欄位:
1.根橋的BID
2.轉發根橋BPDU 的網橋的BID
3.到達根橋的開銷
4.轉發根橋BPDU 的網橋的埠ID
1.根埠:最靠近根橋的交換機埠
2.指定埠:網路中獲准轉發流量的、除根埠之外的所有埠
3.非指定埠:為防止環路而被置於阻塞狀態的所有埠
4.禁用埠:是處於管理性關閉狀態的交換機埠
5.埠開銷:埠開銷值與給定路徑上的每個交換機埠的埠速度相關聯
6.路徑開銷:路徑開銷是到根橋的路徑上所有埠開銷的總和
7.到根橋的最佳路徑:交換機到根橋的所有路徑中最短的一條路徑
8.BPDU(網橋協議資料單元):是執行STP交換機之間交換的訊息幀

交換機完成啟動後,生成樹便立即確定。如果交換機埠直接從阻塞轉換到轉發狀態,但交換機此時並不瞭解所有拓撲資訊時,該埠可能會暫時造成資料環路。為此,STP引入了5種埠狀態:
5種埠狀態
埠處於各種埠狀態的時間長短取決於BPDU計時器,BPDU計時器狀態:

  1. Hello時間
    Hello時間是埠傳送BPDU幀的間隔時間,此值預設為2s,不過可調整為1~10s之間的值
  2. 轉發延遲
    轉發延遲是處於偵聽和學習狀態的時間,預設情況下,每轉換一個狀態要等待15s,不過此時間可調整為4~30s之間的值
  3. 最大老化時間
    最大老化時間計時器控制著交換機埠儲存配置BPDU資訊的最長時間,此值預設為20s,不過可調整為6~40s之間的值
11.2.3 STP埠狀態轉換過程

STP埠狀態的轉換過程有以下5種:

  1. 如果一個被阻塞的介面(非指定埠)在收到一個BPDU後,20s的時間內沒有收到BPDU,則開始進入偵聽狀態。
  2. 交換機埠初始化後直接進入偵聽狀態。
  3. 在偵聽狀態中,交換機通過相互間的BPDU交換選出根橋、根埠、指定埠。在一個轉發延遲(預設15s)之後進入下個狀態。如果埠型別是以上三種之一則進入偵聽狀態,否則進入阻塞狀態。
  4. 在偵聽狀態中,BPDU 交換就緒。開始學習新的MAC 地址。在一個轉發延遲之後(預設15s)進入下個狀態。
  5. 在轉發狀態中,埠可以接收和傳送BPDU,可以接收和傳送資料幀。埠現在就是生成樹拓撲中的一個具有全部功能的交換機埠。
  6. 如下圖展示:
    STP埠狀態轉換過程
11.2.4 STP收斂的步驟
  1. 選舉根橋
    ●根橋的選舉在交換機完成啟動時或網路中檢測到路徑故障時觸發。一開始,所有交換機埠都配置為阻塞狀態,此狀態預設情況下會持續20s。
    ●由於生成樹技術允許網路的端與端之間最多有7臺交換機,因此整個根橋的選舉過程能夠在14s內完成,此時間短於交換機埠處於阻塞狀態的時間。
    ●交換BPDU,每2s傳送一次,選取BID最小的網橋為根橋。

  2. 選舉根埠
    ●除根橋外的其餘每臺交換機都需具有一個根埠(到根橋的路徑開銷最低的埠)。
    ●如果當同一交換機上有兩個以上的埠到根橋的路徑開銷相同時,做出如下選擇:

    1. 到根路徑的上一級網橋BID不同時:選擇其BID小的路徑。
    2. 到根路徑的上一級網橋BID相同時:選擇其BPDU中的埠ID小的路徑。
    3. 當交換機從具有等價路徑的多個埠中選擇一個作為根埠時,落選的埠會被配置為非指定埠(阻塞狀態)以避免環路。
  3. 選舉指定埠和非指定埠
    ●交換網路中的每個網段只能有一個指定埠。
    ●當兩臺交換機交換BPDU幀時,它們會檢查收到的BPDU幀內的傳送方BID,BID較小的交換機會將其埠配置為指定角色,BID較大的交換機將其交換機埠配置為非指定角色(阻塞狀態)。

11.2.5 STP生成樹協議的缺陷

  STP給透明網橋帶來了新生。但是,隨著應用的深入和網路技術的發展,它的缺點在應用中也被暴露了出來,STP的缺陷主要表現在收斂速度上:當拓撲發生變化,新的配置訊息要經過一定的時延才能傳播到整個網路,這個時延稱為轉發延遲,協議預設值是15s。在所有網橋收到這個變化的訊息之前,若舊拓撲結構中處於轉發的埠還沒有發現自己應該在新的拓撲中停止轉發,則可能存在臨時環路。

  為了解決臨時環路的問題,生成樹使用了一種定時器策略,即在埠從阻塞狀態到轉發狀態中間加上一個只學習MAC地址但不參與轉發的中間狀態,兩次狀態切換的時間長度都是轉發延遲,這樣就可以保證在拓撲變化的時候不會產生臨時環路。但是,這個看似良好的解決方案實際上帶來的卻是至少兩倍轉發延遲的收斂時間。

11.2.6 RSTP快速生成樹協議

  RSTP在STP基礎上做了三點重要改進,使得收斂速度快得多(最快1s以內)。

  1. 第一點改進:為根埠和指定埠設定了快速切換用的替換埠(Alternate Port)和備份埠(Backup Port)兩種角色,當根埠/指定埠失效的情況下,替換埠/備份埠就會無時延地進入轉發狀態。
  2. 第二點改進:在只連線了兩個交換埠的點對點鏈路中,指定埠只需與下游網橋進行一次握手就可以無時延地進人轉發狀態。如果是連線了三個以上網橋的共享鏈路,下游網橋是不會響應上游指定埠發出的握手請求的,只能等待兩倍轉發延遲時間進入轉發狀態。
  3. 第三點改進:直接與終端相連而不是把其他網橋相連的埠定義為邊緣埠(Edge Port)。邊緣埠可以直接進入轉發狀態,不需要任何延時,但由於網橋無法知道埠是否是直接與終端相連,所以需要人工配置。

11.3 路由器工作原理(✿◠‿◠)

  路由器(Router)用於連線多個邏輯上分開的網路。所謂邏輯網路是代表一個單獨的網路或者一個子網。當資料從一個子網傳輸到另個子網時,可通過路由器來完成,因此,路由器具有判斷網路地址和選擇路徑的功能,它能在多網路互聯環境中,建立靈活的連線,可用完全不同的資料分組和介質訪問方法連線各種子網。路由器只接受源站或其他路由器的資訊,屬於網路層的一種互聯裝置, 它不關心各子網使用的硬體裝置,但要求執行與網路層協議相一致的軟體。一般說來,異種網路互聯與多個子網互聯都應採用路由器來完成。
  路由器的主要工作就是為經過路由器的每個資料幀尋找一條最佳傳輸路徑,並將該資料有效地傳送到目的站點。由此可見,選擇最佳路徑的策略即路由演算法是路由器的關鍵所在。為了完成這項工作,在路由器中儲存著各種傳輸路徑的相關資料路由表 (Routing Table),供路由選擇時使用。路由表中儲存著子網的標誌資訊、網上路由器的個數和下一個路由器的名字等內容。路由表可以是由系統管理員固定設定好的、也可以由系統動態修改,可以由路由器自動調整、也可以由主機控制。
  當IP子網中的一臺主機傳送IP分組給同一IP子網的另一臺主機時,它直接把IP分組送到網路上對方就能收到,而要送給不同IP子網上的主機時,它要選擇一個使到達目的子網上的路由器,把IP分組送給該路由器,由路由器負責把IP分組送到目的地。如果沒有找到這樣的路由器,主機就把IP分組送給一個稱為預設閘道器(default gateway)的路由器上。預設閘道器是每臺主機上的一個配置引數,它是接在同一個網路上的某個路由器埠的IP地址。
  路由器轉發IP分組時,只根據IP分組目的IP地址的網路號部分,選擇合適的埠,把IP分組送出去。同主機一樣,路由器也要判定埠所接的是否是目的子網。如果是,就直接把分組通過埠送到網路上,否則就要選擇下一個路由器來傳送分組。路由器也有它的預設閘道器,用來傳送不知道往哪兒送的IP分組。這樣,通過路由器把知道如何傳送的IP分組正確轉發出去,不知道的IP分組送給預設閘道器路由器,這樣一級一級地傳送,IP分組最終將送到目的地,送不到目的地的IP分組則被網路丟棄了。

路由動作包括兩項基本內容:尋行和轉發

  1. 尋徑即判定到達目的地的最佳路徑,由路由選擇演算法來實現。
  2. 由於涉及不同的路由選擇協議和路由選擇演算法,要相對複雜一些。 為了判定最佳路徑,路由選擇演算法必須啟動並維護包含路由資訊的路由表,其中路由資訊依賴於所選的路由選擇演算法。路由選擇演算法將收集到的不同資訊填入路由表中,根據路由表可將目的網路與下一站的關係告訴路由器。路由器間互通訊息進行路由更新,更新維護路由表使之正確反映網路的拓撲變化,並由路由器根據量度來決定最佳路徑。這就是路由選擇協議,例如路由資訊協議(RIP)、開放式最短路徑優先協議(OSPF)和邊界閘道器協議(BGP) 等。
  3. 轉發即沿尋徑好的最佳路徑傳送資訊分組。
  4. 路由器首先在路由表中查詢,判明是否知道如何將分組傳送到下一個站點 (路由器或主機),如果路由器不知道如何傳送分組, 通常將該分組丟棄,否則就根據路由表的相應表項將分組傳送到下一個站點:如果目的網路直接與路由器相連,路由器就把分組直接送到相應的埠上。這就是路由轉發協議(Routed Protocol)。

路由轉發協議和路由選擇協議是相互配合又相互獨立的概念, 前者使用後者維護的路由表,同時後者要利用前者提供的功能來發布路由協議資料分組。

典型的路由選擇方式有兩種:靜態路由和動態路由

11.3.1 靜態路由

  靜態路由是在路由器中設定的固定的路由表。除非網路管理員干預,否則靜態路由不會發生變化。由於靜態路由不能對網路的改變做出反映,因而一般用於網路規模不大、拓撲結構固定的網路中。

11.3.2 靜態路由與動態路由

  靜態路由的優點是簡單、高效、可靠,在所有的路由中,靜態路由的優先順序最高。當動態路由與政由發生衝突時,以靜態路由為準。
  動態路由是網路中的路由器之間相互通訊、傳遞路由資訊、利用收到的路由資訊更新路由器表的過程,它能實時地適應網路結構的變化。如果路由更新資訊表明發生了網路變化路由這擇軟體就會重新計算路由,併發出新的路由更新資訊,這些資訊通過各個網路,引起各路由器重新啟動其路由演算法並更新各自的路由表以動態地反映網路網路拓撲變化。
  動態路由適用於網路規模大、網路拓撲復雜的網路,當然,各種動態路由協議會不同程度地佔用網路頻寬和CPU資源靜志路由和動態路由有各自的特點和適用範圍,因此在網路中動態路由通常作為靜態路由的補充。
  當一個分組在路由器中進行尋徑時,路由器首先查詢靜態路由,如果查到則根據相應的靜態路由轉發分組,否則即再查詢動態路由。

11.3.3 RIP路由協議
  1. RIP路由協議
    RIP協議是由施樂在20世紀70年代設計開發的,是Internet中常用的路由協議。RIP採用距離向量演算法,即路由器根據距離選擇路由,所以也稱為距離向量協議。路由器收集所有可到達目的地的不同路徑,並且儲存有關到達每個目的地的最少站點數的路經資訊,除了到達目的地的最佳路徑之外,任何其他資訊均予以丟棄,同時路由器也把所收集的路由資訊用RIP協議通知相鄰的其他路由器,這樣,正確的路由資訊就逐漸擴散到了全網。

  2. RIP使用非常廣泛,它簡單、可靠、便於配置,但是RIP只適用於小型的同構網路,因為它允許的最大站點數為15,任何超過15個站點的目的地均被標記為不可達,而且RIP每隔30s一次的路由資訊廣播也是造成網路的廣播風暴的重要原因之一。

11.3.4 RIPv1 和 RIPv2 的主要區別
  1. RIPv1是有類路由協議,RIPv2是無類路由協議
  2. RIPv1不能支援VLSM,RIPv2 可以支援VLSM
  3. RIPv1沒有認證的功能,RIPv2可以支援認證,並且有明文和MD5兩種認證
  4. RIPv1沒有手工彙總的功能,RIPv2 可以在關閉自動彙總的前提下,進行手工彙總
  5. RIPv1是廣播更新(255.255. 255. 255),RIPv2是組播更新(224. 0.0.9)
  6. RIPv1對路由沒有標記的功能,RIPv2可以對路由打標記(tag),用於過濾和做策略
  7. RIPv1傳送的更新最多可以攜帶25條路由條目,RIPv2在有認證的情況下最多隻能攜帶24條路由

RIPv1特點:
(1)有類別路由協議,不支援VLSM和CIDR
(2)廣播更新路由資訊
(3)不支援認證

  • RIPv1的報文:包括 Request 和 Response ,Request 報文在RIP路由器接入網路時傳送,用於請求對端的所有RIP路由資訊,Response 報文週期30s傳送,攜帶本路由器所有的有效的RIP路由。
  • 在支援觸發更新時也會傳送 Response 報文更新或刪除路由。
  • RIPv1的報文最大有512byte = 8byte(UDP) + 4byte(RIP header) + 20byte(一條RIP路由) * 25,所以一個RIPv1報文最大隻能攜帶25條路由。

RIPv2特點:
(1)無類別路由協議,在更新路由時可以傳送路由的掩碼,支援VLSM和CIDR
(2)支援組播和廣播更新,組播地址為224.0.0.9
(3)支援明文和MD5密文認證
(4)路由資訊更加豐富,支援攜帶掩碼和下一跳,支援攜帶路由標記

  • RIPv2的報文:組播224.0.0.9傳送,使用組播更安全,效率更高,只有執行RIPv2的路由器接受並處理。包括 Request 和 Response,Request 報文在RIP路由器接入網路時傳送,用於請求對端的所有RIP路由資訊,Response 報文週期30s傳送,攜帶本路由器所有的有效的RIP路由。
  • 在支援觸發更新時也會傳送 Response 報文更新或刪除路由。
  • RIPv1的報文最大有512byte = 8byte(UDP) + 4byte(RIP header) + 20byte(一條RIP路由) * 25,所以一個RIPv1報文最大隻能攜帶25條路由。
  • RIPv2將認證欄位放在了一條路由中,使用第一條路由攜帶認證欄位,所以如果開啟了認證,則一個RIPv2報文最大隻能攜帶24條路由。
11.3.5 OSPF路由協議
  1. OSPF路由協議
    20世紀80年代中期,RIP已不能適應大規模異構網路的互聯,OSPF隨之產生,它是網間工程任務組織(IETF) 的內部閘道器協議工作組為IP網路而開發的一種路由協議。
  2. OSPF是一種基於鏈路狀態的路由協議,需要每個路由器向其同一管理域的所有其他路由器傳送鏈路狀態廣播資訊。在OSPF的鏈路狀態廣播中包括所有介面資訊、所有的量度和其他一些變數。
  3. 利用OSPF的路由器必須首先收集有關的鏈路狀態資訊,並根據一定的演算法計算出到每個節點的最短路徑,而基於距離向量的路由協議僅向其鄰接路由器傳送有關路由更新資訊。
11.3.6 路由器的功能
  1. 在網路間截獲傳送到遠地網段的報文,起轉發的作用。
  2. 選擇最合理的路由,引導通訊。
    為了實現這功能, 路由器要按照某種路由通訊協議,查詢路由表。路由表中列出整個網際網路絡中包含的各個節點,以及節點間的路徑情況和與它們相聯絡的傳輸費用。如果到特定的節點有一條以上的路徑,則基於預先確定的準則選擇最優(最經濟)的路徑。由於各種網路段和其相互連線情況可能發生變化,因此路由情況的資訊需要及時更新,這是由所使用的路由資訊協議規定的定時更新或者按變化情況更新來完成的。網路中的每個路由器均按照這一規則動態地更新它所保持的路由表,以便保持有效的路由資訊。
  3. 路由器在轉發報文的過程中,為了便於在網路間傳送報文,應按照預定的規則把大的資料包分解成適當大小的資料包,到達目的地後再把分解的資料包包裝成原有形式。
  4. 多協議的路由器可以連線使用不同通訊協議的網路段,作為不同通訊協議網路段通訊連線的平臺。
  5. 路由器的主要任務是把通訊引導到目的地網路,然後到達特定的節點站地址。後一個功能是通過網路地址分解完成的。
11.3.7 RIP協議詳解
  1. RIP的主要特徵

    1. RIP(Routing Information Protocol,路由資訊協議),是早期應用比較普遍的內部閘道器協議,是典型的距離向量路由協議,適用於小型網路,最大的缺點是無法在具有冗餘鏈路的網路中有效的運用。
    2. RIP協議的預設管理距離是120,RIP所接收的路由資訊都被封裝在UDP協議的資料包中,在UDP的520埠接收來自遠端路由的資訊。
      RIP使用跳數作為路徑選擇的度量值。最大跳數是15,如果最大跳數大於15,則認為該網路失效。
    3. RIPv1採用廣播式更新,RIPv2採用組播更新方式,RIP預設每隔30秒週期性的傳送整個路由表給鄰路由。
  2. RIP路由互相學習過程解析
    RIP協議執行前R1、R2、R3的路由表中只有直連路由的資訊

    1. 執行RIP路由協議後,R1、R2、R3宣告各自直連網路。
    2. 假設R1先傳送路由更新,R1將自己直連網路10.1.0.0和10.2.0.0以1跳的度量值告訴R2。
    3. R2收到R1的路由表後,將自己的路由與R1傳過來的路由進行比較,R2發現自己的路由表中沒有10.1.0.0,R2記下這條路由以及路由對應的介面和跳數1,並且R2發現自己的路由表中已經有10.2.0.0這個條目,而且是直連條目,直連路由的管理距離是0,學到的RIP路由的管理距離是120,所以R2忽略R1傳過來的10.2.0.0這個條目。
    4. R2把自己路由表中的直連網路10.2.0.0和10.3.0.0以1跳的度量值告訴R3,並且將從R1那裡學到的10.1.0.0網路以2跳的度量值告訴R3。
    5. R3收到R2發過來的路由條目,將自己的路由表和R2發過來的條目進行比較,R3發現自己路由表中沒有10.1.0.0,R3記錄下這條路由以及對應埠和跳數2;R3發現自己路由表中沒有10.2.0.0,R3記錄下這條路由和對應埠以及跳數1;R3發現自己的路由表中已經存在10.3.0.0,並且是直連,比R2發過來的RIP更新有更好的度量值,R3忽略R2發來的10.3.0.0。這樣R3學到了完整的路由條目。
    6. 同理,R3也會將路由發給R2,R2再發給R1,最後所有路由都可以學到所有條目。
      在這裡插入圖片描述
11.3.8 RIP路由環路形成解析

路由環路

  1. R1將網路1的路由資訊發給R2,R2學到了網路1並將度量值標記為1跳,即經過一臺路由可以到達,下一跳是R1;
  2. 路由R2將網路1的路由資訊發給R3和R5,R3和R5都學到了網路1,並將度量值標記為2跳,即經過兩臺路由可以到達,下一跳是路由R2;R3和R5都將網路1發給R4,R4也學到網路1,並將度量值標記為3跳,下一跳路由是R3或R5,即從兩臺路由都能到達,R4去往網路1的資料將負載均衡。此時所有的路由都擁有一致的認識和正確的路由表,這時網路被稱作”已收斂”。
  3. 此時,當網路1斷開,R1將網路1不可達的資訊傳送給R2,R2將網路1不可達的資訊傳送給R3和R5,R4還不知道網路1不可達的資訊,就在這個時候R4傳送了一個更新給R5,認為通過R3可以到達網路1;當然也可能是傳送給R3,告訴它通過R5可以到達網路1。
  4. 這裡假設是第一種情況,R5收到通過R4可以到達網路1的更新後,更新自己的路由表,並將網路1可達的資訊傳送給了R2,R2更新自己的路由表併傳送給R3和R1。R3更新自己的路由表併傳送給R4,至此,路由環路形成。
11.3.9 距離向量路由環路的解決方法

距離向量路由環路的解決方法有如下五種:

  1. 最大跳計數
    RIP允許跳計數最大可以達到15,任何需要經過16跳才能到達的網路都被認為是不可達的。
  2. 水平分隔
    限制路由器不能按照接收資訊的方向去將接收到的資訊再發回去。比如路由R3和R5有關網路1的資訊是從R2學習到的,它們不會將網路1的資訊再從與R2相連的介面發回去,這樣R4最終會學習到網路1不可達的資訊。
  3. 路由毒化
    路由中毒通過將故障網路設定成最大跳計數加1來暗示網路不可達,毒性反轉是避免環路的另一種方法,比如R2學習到R1傳送過來的網路1不可達的資訊,首先它將網路1的跳計數更改成16跳,並且根據毒性反轉,它將向R1送回一條網路1不可達的更新。
  4. 觸發更新
    週期性傳送更新,RIP是預設每隔30秒。
  5. 抑制定時器
    比如R2收到了R1發來的網路1不可達的資訊後,R2首先標記此網路不可達,同時R2的抑制定時器啟動,在RIP中抑制定時器是180秒倒數計時,如果在抑制定時器到期前,又從R1收到網路1可達的資訊了,那麼刪除這個抑制定時器,並且標記網路1可達。
    如果在抑制定時器期滿前,收到一個來自其他路由的(R3或者R4)關於網路1的更新,並且這個更新具有更好的度量值(假設以前學到的是3跳,這裡有其他路由告訴它只需要1跳就能到達網路1),那麼R2刪除抑制定時器,並且標記網路1可達。
    如果在抑制定時器到期前,R2收到另外路由器發來的關於網路1的更新,並且具有更差的度量值,那麼忽略此更新;在抑制定時器期滿後,R2刪除抑制定時器,接收來自任何源路由的關於網路1的更新。
11.3.10 OSPF協議詳解
  1. OSPF(Open Shortest Path First 開放式最短路徑優先)是一個內部閘道器協議(簡稱IGP),用於在單一自治系統內決策路由。
  2. OSPF的簡單說就是兩個相鄰的路由器通過發報文的形式成為鄰居關係,鄰居再相互傳送鏈路狀態資訊形成鄰接關係,之後各自根據最短路徑演算法算出路由,放在OSPF路由表,OSPF路由與其他路由比較後,優的加入全域性路由表。
  3. OSPF協議的優點
    1. 開銷減少。OSPF減去了通過廣播進行路由更新的網路開銷。OSPF只在檢測到拓撲變化時傳送路由更新資訊,而不是定時傳送整個路由表,只在有必要進行更新時給路由表傳送改變路由的資訊,而不是整個路由表。
    2. 支援VLSM和CIDR。OSPF路由更新中包括子網掩碼。
    3. 支援不連續網路。
    4. 支援手工路由彙總。
    5. 收斂時間短。在一個設計合理的OSPF網路中,一條鏈路發生故障之後可以很快達到收斂, 因為OSPF具有一個包含OSPF域中所有路徑的完整的拓撲資料庫。
    6. 無環拓撲生產。
    7. 跳數只受路由器資源使用和IP TTL的限制。
      在這裡插入圖片描述
OSPF協議使用最短路徑優先演算法SPF來計算生成路由表,其參考值為鏈路成本(Cost)

鏈路成本的定義是基於鏈路頻寬的,頻寬越高則鏈路成本越低,頻寬越低則鏈路成本越高。

11.3.11 OSPF區域

  OSPF引入分層路由的概念,將網路分割成一個“主幹”連線的一組相互獨立的部分,這些相互獨立的部分被稱為“區域”,主幹的部分稱為“主幹區域”。多區域的OSPF必須存在一個主幹區域,主幹區域負責收集非主幹區域發出的彙總路由資訊,並將這些資訊返回給到各區域。

  • 分割槽域的好處:
    (1)減少路由更新
    (2)加速收斂
    (3)限制不穩定到一個區域
    (4)提高網路效能
11.3.12 OSPF路由器的型別
  1. 區域內路由器:所有埠都在同一區域的路由器,它們都維護著一個相同的鏈路狀態資料庫。
  2. 區域邊界路由器:具有連線多區域埠的路由器,一般作為一個區域的出口。
  3. 主幹路由器:至少有一個連線主幹區域埠的路由器。
  4. 自治系統邊界路由器:至少擁有一個連線外部自治域網路埠的路由器,負責將非OSPF網路資訊傳入OSPF網路。

OSPF路由器
指定路由器
指定路由器

11.3.13 OSPF路由計算

OSPF路由計算
OSPF路由計算

11.3.14 OSPF資料包型別
  1. 問候(Hello) 資料包:週期性傳送,用來發現和維持OSPF鄰居關係以及指定路由器或備份路由器的選舉。
  2. 資料庫描述(Database Description, DD)資料包:描述了本地LSDB中每一條LSA的摘要資訊,用於兩臺路由器進行資料庫同步。
  3. 鏈路狀態請求(Link State Request, LSR) 資料包:向對方請求所需的LSA,內容包括所需要的LSA的摘要。
  4. 鏈路狀態更新(Link State Update, LSU)資料包:向對方傳送其所需要的LSA。
  5. 鏈路狀態確認(Link State Acknowledgment, LSAck) 資料包:用來對收到的LSA進行確認。
  • OSPF首部
    在這裡插入圖片描述
  • 問候(Hello) 資料包格式
    在這裡插入圖片描述
  • 鏈路狀態請求(Link State Request, LSR) 資料包格式
    在這裡插入圖片描述
  • 鏈路狀態更新(Link State Update, LSU)資料包格式
    在這裡插入圖片描述
  • 鏈路狀態確認(Link State Acknowledgment, LSAck) 資料包格式
    在這裡插入圖片描述
  • 鏈路狀態通告LSA
    在這裡插入圖片描述
  • LSA首部格式:
    在這裡插入圖片描述
11.3.15 OSPF工作原理
1. 建立路由器的鄰居關係
2. 進行必要的DR/BDR選舉
3. 鏈路狀態資料庫的同步
4. 產生路由表
5. 維護路由資訊

OSPF工作原理

11.3.16 OSPF的鄰居狀態機

在這裡插入圖片描述
在這裡插入圖片描述

11.3.17 OSPF工作原理展開
  1. OSPF協議通過Hello協議建立路由器的鄰居關係
    每個Hello資料包都包含以下資訊:
    在這裡插入圖片描述
  • 鄰居關係的建立要經過三個狀態
    在這裡插入圖片描述
  1. 選舉DR和BDR

    1. 當路由器同一個或多個路由器建立雙向的通訊後,檢查每個鄰居Hello包裡的優先順序、DR和BDR域。列出所有符合DR和BDR選舉的路由器(優先順序大於0,為0時不參加選舉),列出所有的DR和BDR
    2. 從這些合格的路由器中建立一個沒有宜稱自己為DR的子集(因為宣稱為DR的路由器不能選舉成為BDR)
    3. 如果在這個子集裡有一個或多個鄰居(包括它自己的介面)在BDR域宣稱自己為BDR,則選舉具有最高優先順序的路由器,如果優先順序相同,則選擇具有最高Router ID的那個路由器為BDR
    4. 如果在這個子集裡沒有路由器宣稱自己為BDR,則在它的鄰居里選擇具有最高優先順序的路由器為BDR,如果優先順序相同,則選擇具有最大Router ID的路由器為BDR
    5. 在宣稱自己為DR的路由器列表中,如果有一個或多個路由器宣稱自己為DR,則選擇具有最高優先順序的路由器為DR,如果優先順序相同,則選擇具有最大Router ID的路由器為DR
    6. 如果沒有路由器宣稱為DR,則將最新選舉的BDR作為DR
    7. 如果是第一次選舉某個路由器為DR/ BDR或沒有DR/BDR被選舉,則要重複2到6步,然後是第8步。
    8. 將選舉出來的路由器的埠狀態作相應的改變,DR的埠狀態為DR, BDR的埠狀態為BDR,否則的話為DR Other。
    9. 在點到點的網路中,不選舉DR和BDR,兩臺路由器之間建立主從關係,路由器ID高的作為主路由器,另一臺作為從路由器,進入準啟動Exstart狀態。
  2. 鏈路狀態資料庫的同步
    在這裡插入圖片描述
    在這裡插入圖片描述

  3. 路由表的產生
    在這裡插入圖片描述

  4. 維護路由資訊
    在這裡插入圖片描述

  5. 總結:

    1. 每臺路由器學習啟用的直接相連的網路。
    2. 每臺路由器和直接相連的路由器互交,傳送Hello報文,建立鄰居關係。
    3. 每臺路由器構建包含直接相連的鏈路狀態的LSA(鏈路狀態通告)鏈路狀態通告中記錄了所有相關的路由器,包括鄰路由器的標識、鏈路型別、頻寬等。
    4. 每臺路由器泛洪鏈路狀態通告(LSA)給所有的鄰路由器,並且自己也在本地儲存鄰路由發過來的LSA,然後再將收到的LSA泛洪給自己的所有鄰居,直到在同一區域中的所有路由器收到了所有的LSA。每臺路由器在本地資料庫中儲存所有收到的LSA副本,這個資料庫被稱作鏈路狀態資料庫(LSDB)。
    5. 每臺路由器基於本地的鏈路狀態資料庫執行最短路徑優先(SPF)演算法,並以本路由器為根,生成一個SPF樹,基於這個SPF樹計算去往每個網路的最短路徑,也就得到了最終的路由表。
  • 點到點網路
    點到點網路是連線單獨的一對路由器的網路,點到點網路上的有效鄰居總是可以形成鄰接關係的,在這種網路上,OSPF包的目標地址使用的是224.0.0.5。
  • 廣播型網路
    廣播型網路上會選舉一個DR和BDR,DR/BDR傳送的OSPF包的目標地址為224.0.0.5,而除了DR/BDR以外的OSPF包的目標地址為224.0.0.6
  • 在廣播型網路中,所有路由器都以224.0.0.5的地址傳送Hello包,用來維持鄰居關係,DR/BDR會使用224.0.0.5的地址來傳送LSA更新,非DR/BDR路由都以224.0.0.6的地址傳送LSA更新。
  • OSPF區域內當有鏈路發生變化時,如變化路由器為DR Other時,它不會將LSU泛洪給所有區域內其它路由器,而是通過組播地址224.0.0.6先傳送給DR/BDR,然後DR/BDR再將此更新通過224.0.0.5傳送給其它區域內路由器。換句話說,DR/BDR監聽224.0.0.6,而DR Other監聽224.0.0.5。

越姐護體


(●’◡’●)****?❀★內容持續更新中(●’◡’●)****?❀★

相關文章