1.概述
1.1 網絡層服務
(1) 網絡層為不同主機(Host)之間提供了一種邏輯通信機制
(2)每個主機和路由器都運行網絡層協議
發送方:
將來自傳輸層的消息封裝到數據報(datagram)中接收方:
向傳輸層交付數據段(segment)
1.2 網絡層核心功能
路由選擇(routing):
確定數據從源主機到目的主機經過的路徑數據轉發(forwarding):
將數據從輸入端口轉發到合適的輸出端口
Question:路由器是如何確定數據的輸出端口的?
Answer:在路由器內部通常會維護一張轉發表,將數據的地址信息與轉發表中的信息進行匹配,進而找到對應的輸出端口
2.網絡層服務模型
有連接服務(connection service)
- 首先為分組的傳輸確定從源主機到目的主機的傳輸路徑(建立連接)
- 分組中的后續分片按照確定好的路徑進行傳輸
- 分組中的每個分片的傳輸路徑相同
- 傳輸結束后拆除連接
- 虛電路網絡
無連接服務(connection-less service)
- 不事先為分組的傳輸確定的那個傳輸路徑
- 分組中的每個分片都有獨立的傳輸路徑
- 數據報網絡
-
注意1:
在計算機網絡概述中提到,由路由器等設備組成的網絡核心中依靠數據交換實現數據從源主機發送到目的主機,數據交換一共有電路交換、報文交換和分組交換三種方式。本文介紹的虛電路網絡和數據報網絡是兩類經典的分組交換網絡 -
注意2:
網絡層的連接建立是兩個主機之間的所有網絡設備(如路由器)共同參與;傳輸層的連接建立對中間的網絡設備透明
2.1 虛電路(virtual-circuit,VC)網絡
2.1.1 概念
定義:
虛電路網絡是一種面向連接的網絡模式,在數據傳輸之前,需要在源節點和目標節點之間建立一條邏輯連接(稱為虛電路VC)
特點:
- 面向連接:在數據傳輸之前,需要建立連接,數據傳輸完成后需要釋放連接
- 固定路徑:所有數據包沿著同一條路徑傳輸,路徑在連接建立時確定
- 有序到達:數據包按照發送的順序到達目標節點
- 有狀態:路徑上的所有網絡節點需要維護連接狀態信息
2.1.2 具體實現
一條虛電路(VC)包括:
- 從源主機到目的主機路徑上的所有網絡設備
- 虛電路標識(VCID),虛電路中每段鏈路的一個編號
- 虛電路沿路的每個網絡設備(如路由器),利用轉發表記錄經過的每條虛電路
在虛電路中的分組攜帶虛電路標識(VCID),而不是目的主機地址。在同一條VC上,每段鏈路上的VCID通常不同,路由器轉發分組時依靠VC轉發表改寫/替換VCID
2.1.3 虛電路信令協議(Virtual Circuit Signaling Protocol)
虛電路信令協議(Virtual Circuit Signaling Protocol)是用于建立、維護和拆除虛電路的協議
(1)呼叫建立(Call Setup):
- 在數據傳輸之前,源節點向目標節點發送一個呼叫請求消息,用于建立虛電路。網絡中的每個節點都會為這條虛電路分配一個唯一的標識符,稱為虛電路標識符(VCID)
(2)連接確認(Connection Confirmation):
- 目標節點接收到呼叫請求后,如果同意建立連接,會發送一個確認消息給源節點。這個確認消息會沿著虛電路的路徑反向傳輸,確保每個中間節點都準備好轉發數據
(3)數據傳輸(Data Transfer):
- 一旦虛電路建立,數據就可以通過這條邏輯連接進行傳輸。每個數據包都攜帶虛電路標識符,路由器根據VCID進行轉發,而不需要每次都進行路由查找
(4)連接釋放(Connection Release):
- 數據傳輸完成后,源節點發送一個釋放請求消息,用于拆除虛電路。網絡中的每個節點(路由器)都會釋放與這條虛電路相關的資源
2.2 數據報(datagram)網絡
2.2.1 概念
定義:
數據報網絡是一種無連接的網絡模式,每個數據包(稱為數據報)都獨立傳輸,路徑選擇和轉發決策在每個節點上獨立進行
特點:
- 無連接:在數據傳輸之前,不需要建立連接。每個數據包獨立路由
- 獨立路由:每個數據包可能沿著不同的路徑傳輸,路徑選擇基于當前網絡狀況
- 無序到達:由于每個數據包獨立路由,數據包可能無序到達目標節點
- 無狀態:網絡節點不需要維護連接狀態信息,簡化了網絡設計
2.2.2 轉發表
IPv4地址是由32位的二進制數字表示,一共有2^32(大概43億+)個IP地址。在轉發表中,無法做到一個IP地址對應一個輸出鏈路,往往是一段IP地址對應一個輸出鏈路
Question:如果IP地址的劃分不是連續性的會怎么樣呢?
- 示例1:
與0號鏈路接口匹配,則轉發到0號輸出鏈路 - 示例2:
與1號鏈路和2號鏈路同時匹配,此時采用最長前綴匹配優先(在檢索轉發表時,優先選擇與分組目的地址匹配前綴最長的入口)
策略,則優先轉發到1號輸出鏈路
舉例說明:此時需要把某封信件發送到四川民族學院智能科學與技術學院某班某同學手中,上圖的2號輸出鏈路相當于能把該信件送到四川民族學院門口,上圖的1號鏈路相當于能把該信件送到智能科學與技術學院樓下。雖然兩個輸出鏈路都不能精準送到某個同學手中,但是1號鏈路比2號鏈路精確,所以優先輸出到1號鏈路
3.IPv4協議
3.1 IP數據報結構
(1)版本:指明協議的版本,IPv4就是4,IPv6就是6
(2)首部長度:單位是4字節,表示IP報頭的長度范圍是20~60字節
(3)8位區分服務:實際上只有4位TOS有效,分別是最小延時,最大吞吐量,最高可靠性,最小成本
(4)總長度:報頭+數據部分。IP數據報最大長度為2^16字節,也就是64KB
(5)生存時間:單位是次數,防止數據在網絡上無限轉發,8個比特位表示IP數據報最多能在網絡(路由器)上轉發128次
由上圖可知,從我這里到美國政府官網IP數據報也僅僅轉發了18次,所以8位生存時間完全夠用
(6)協議:表示在傳輸層使用什么協議,UDP還是TCP還是其他?
(7)校驗和:只針對IP報頭進行校驗,因為IP載荷部分有UDP/TCP進行校驗
(8)源地址:發送方的IP地址
(9)目的地址:接收方的IP地址
(10)可選字段:主要是拓展功能,最大長度是40字節
(11)填充:保證IP報頭的長度是4的整數倍
Question:
16位標識,3位標志,13位片偏移分別有什么用?下面再說
3.2 IP分片
3.2.1 分片相關的字段
IP數據報最終會傳遞給數據鏈路層再封裝,但是由于物理條件的影響,數據鏈路層的載荷最大能攜帶MTU字節(MTU表示最大傳輸單元,具體數值是多少和物理條件有關)
雖然IP數據報載荷最大能攜帶64KB的數據,但由于下層的限制,可以在網絡層進行拆分,數據到達接收方的時候再組裝。而拆分和組裝的過程就需要用到標識,標志,片偏移這三個字段
(1)16位標識:唯一標識一個IP數據報。同一個數據報的標識是一樣的,便于區分哪些分區屬于同一個數據報
(2)3位標志:
1.第一位(保留位):
必須為0(暫時用不到這個保留位,所以先設為0,方便以后使用)2.第二位(DF):
如果為1,表示該數據報禁止分片。當IP載荷超過MTU時就會丟棄該數據報,并且返回ICMP錯誤信息給源主機(發送方)3.第三位(MF):
如果為1,表示該數據報不是最后一個分片;如果為0,表示是最后一個分片或者根本沒有進行分片操作(3)13位片偏移: 指示當前分片在原數據報中的位置(以8字節為單位)
3.2.1 分片過程
- 假設IP分組總長度為
L
,待轉發鏈路的MTU為M
- L > M,且DF = 0,表示可以分片
- 進行分片操作時,每個分片都需要復制原分組的16位標識位
- 一般來說,除了最后一個分片,其余分片的長度位
M
且是8
的整數倍,用公式表示: - 需要的總片數為:
- 每片的片偏移字段取值為:
- 每片的總長度字段為:
- 每片的MF標志位為:
3.3 IP地址
IPv4地址由4個8位二進制數組成,每個數的范圍為0-255,通常以點分十進制的形式表示。用于標識接入網絡中主機/路由器的接口
接口/interface:主機/路由器與物理鏈路的連接
- 實現了網絡層功能
- 路由器一般有多個接口
- 主機一般只有1-2個接口(以太網接口和無線網/Wi-FI接口)
3.4 有類IP地址
IP地址 = 網絡號 + 主機號
- 網絡號(NetID) - 高位比特
- 主機號(HostID) - 低位比特
- A類地址:8位網絡號 + 24位主機號(0.0.0.0 ~ 127.255.255.255),占所有IP地址的50%
- B類地址:16位網絡號 + 16位主機號(128.0.0.0 ~ 191.255.255.255),占所有IP地址的25%
- C類地址:24位網絡號 + 8位主機號(191.0.0.0 ~ 223.255.255.255),占所有IP地址的12.5%
- D類地址:不劃分網絡號和主機號(224.0.0.0 ~ 239.255.255.255),占所有IP地址的6.25%
- D類地址:不劃分網絡號和主機號(240.0.0.0 ~ 255.255.255.255),占所有IP地址的6.25%
特殊IP地址
NetID | HostID | 作為IP分組源地址 | 作為IP分組目的地址 | 用途 |
---|---|---|---|---|
全0 | 全0 | 可以 | 不可以 | 在本網范圍內表示本主機 |
全0 | 特定值 | 不可以 | 可以 | 表示本網內的某個特定主機 |
全1 | 全1 | 不可以 | 可以 | 本網廣播地址 |
特定值 | 全0 | 不可以 | 不可以 | 網絡地址,表示一個網絡 |
特定值 | 全1 | 不可以 | 可以 | 直接廣播地址,對特定網絡上的所有主機進行廣播 |
127 | 非全0或非全1的任何數 | 可以 | 可以 | 用于本地軟件環回測試,稱為環回地址 |
3.5 IP子網與子網劃分
IP子網:
- IP地址具有相同網絡號的設備接口
- 子網中主機的接口可以物理連接而不用跨越路由器
- 主機號全為0
子網劃分:
IP地址 = 網絡號 + 子網號 + 主機號
- 網絡號(NetID) - 高比特位
- 子網號(SubID) - 原主機號中的部分高位比特
- 主機號(HostID) - 低位比特
Question:
如何確定是否劃分了子網?子網號有多少位? Answer:子網掩碼 子網掩碼(Subnet
Mask):用于劃分IP地址中哪些是網絡號,哪些是主機號的32位二進制數字
- 點分十進制表示
- 網絡號、子網號全為1
- 主機號全為0
例如:A類地址的子網掩碼是255.0.0.0;B類地址的子網掩碼是255.255…0.0;C類地址的子網掩碼是255.255.255.0
子網掩碼的應用
- 將IP分組的目的IP地址與子網掩碼按位與運算得到子網地址
例如:
目的IP地址:172.32.1.112,子網掩碼:255.255.254.0
- 子網地址:172.32.0.0
- 地址范圍:172.32.0.0 ~ 172.32.1.255
- 可使用地址范圍:172.32.0.1 ~ 172.32.1.254
- 廣播地址:172.32.1.255
4.域名系統
4.1 概念
上面已經介紹到IP地址是由32位二進制比特位組成,通常以點分十進制的形式表示,即4個0 ~ 255的十進制數。但是對于人來說,要想準確記憶一串數字是很難的,尤其是要記憶多個IP地址的時候,所以人們將IP地址轉換為域名(如:www.example.com)來方便人們記憶
域名系統(Domain Name System,DNS)
是互聯網的一項核心服務,它是一個將IP地址和域名相互映射的分布式層次式數據庫,能夠使人們更方便的訪問互聯網
Question:
為什么不使用集中式的DNS?
Answer:
- 單點失敗問題
- 流量問題
- 距離問題
- 維護性問題
4.2 DNS層次結構
1.根DNS服務器(Root DNS Servers):
- 根DNS服務器是DNS層次結構的頂層,負責處理對頂級域(TLD)服務器的查詢。當本地DNS服務器無法從緩存中找到域名解析結果時,它會首先向根DNS服務器發送查詢請求
- 根DNS服務器不直接提供最終的IP地址,而是指示本地DNS服務器向相應的頂級域DNS服務器發送查詢請求
2.頂級域DNS服務器(Top-Level Domain DNS Servers, TLD DNS Servers):
- TLD DNS服務器負責管理特定頂級域下的所有域名。例如,.com TLD DNS服務器負責管理所有以.com結尾的域名
- 當根DNS服務器指示本地DNS服務器向TLD DNS服務器發送查詢請求時,TLD DNS服務器會進一步指示本地DNS服務器向權威DNS服務器發送查詢請求
- 通用頂級域(gTLD):如.com、.org、.net、.edu等
- 國家/地區代碼頂級域(ccTLD):如.cn(中國)、.us(美國)、.uk(英國)等
3.權威DNS服務器(Authoritative DNS Servers):
- 當TLD DNS服務器指示本地DNS服務器向權威DNS服務器發送查詢請求時,權威DNS服務器會返回域名的最終IP地址
4.本地DNS服務器(Local DNS Servers):
- 本地DNS服務器負責接收用戶的DNS查詢請求,并代表用戶進行遞歸/迭代查詢
- 首先檢查自己的緩存,如果找不到結果,則按照DNS層次結構依次向根DNS服務器、TLD DNS服務器和權威DNS服務器發送查詢請求
- 不嚴格屬于層次體系
- 本地DNS服務器充當用戶和DNS層次結構之間的中介,提供緩存和加速查詢的功能
4.3 DNS查詢服務
場景假設:Cis.poly.edu的主機想獲取gaia.cs.umass.edu的IP地址
迭代查詢:
被查詢服務器返回域名解析服務器的IP地址
- 1.主機向本地DNS服務器發送請求
- 2.本地DNS服務器檢索緩存沒有找到對應域名后向根DNS服務器發送請求
- 3.根DNS服務器返回管理
.edu
的頂級域DNS服務器的IP地址- 4.本地DNS服務器向管理
.edu
的頂級域DNS服務器發送請求- 5.頂級域DNS服務器返回對應的權威DNS服務器的IP地址
- 6.本地DNS服務器向權威DNS服務器發送請求
- 7.權威DNS服務器返回目標主機的IP地址
- 8.本地DNS服務器返回目標主機的IP地址
遞歸查詢:
將域名解析的任務交給所聯系的服務器
- 1.主機向本地DNS服務器發送請求
- 2.本地DNS服務器檢索緩存沒有找到對應域名后向根DNS服務器發送請求
- 3.根DNS服務器向管理
.edu
的頂級域DNS服務器發送請求- 4.頂級域DNS服務器向對應的權威DNS服務器發送請求
- 5.權威DNS服務器返回目標主機的IP地址
- 6.頂級域DNS服務器返回目標主機的IP地址
- 7.根DNS服務器返回目標主機的IP地址
- 8.本地DNS服務器返回目標主機的IP地址
4.4 DNS緩存
DNS緩存是指本地存儲DNS查詢的結果,以便在后續請求中快速響應,而無需再次查詢DNS服務器。緩存可以發生在多個層級,包括:
- 1.瀏覽器緩存:瀏覽器會在本地存儲最近訪問過的域名及其對應的IP地址。
- 2.操作系統緩存:操作系統(如Windows的DNS客戶端服務)也會緩存DNS查詢結果。
- 3.路由器緩存:路由器可以緩存DNS查詢結果,以便在局域網內快速響應。
- 4.ISP(互聯網服務提供商)緩存:ISP的DNS服務器也會緩存查詢結果,以減少對根DNS服務器的請求
5.CIDR與路由聚集
CIDR基本概念和表示法
無類域間路由(CIDR,Classless InterDomain
Routing)是一種用于IP地址分配和路由的機制,它取代了早期的基于類的IP地址分配,通過可變長子網掩碼來分配IP地址
- 1.消除傳統的A/B/C類地址界限:NetID + SubID ->Network Prefix(Prefix)可以任意長度
- 2.融合子網地址和子網掩碼:a.b.c.d/x,其中x表示前綴Prefix長度
- 例如:子網地址:201.2.3.64,子網掩碼:255.255.255.192 -> 201.2.3.64/26
CIDR的優勢
- 1.提高IPv4地址空間分配效率:通過更細粒度的地址分配,減少了地址浪費
- 2.提高路由效率/簡化路由表:將多個小的子網聚合成一個較大的子網
(路由聚合,route aggregation)
路由聚集:
指將多個路由合并為一個路由的過程,以減少路由表中條目的數量,從而提高路由的性能和效率
路由聚集的具體算法:
將幾個子網前綴轉換為二進制并比較,相同的部分不變,從不同的部分開始全部變成0,最后將二進制轉換成十進制。例如:
- 子網①:11011111-00000001-000000
00-00000000
- 子網②:11011111-00000001-000000
10-00000000
- 子網③:11011111-00000001-000000
11-00000000
- 聚合后子網④:11011111-00000001-000000
00-00000000
(上面三個子網相同的部分是高22位比特,所以聚合后子網的網絡前綴就是22,那么子網④的點分十進制形式:223.1.0.0/22
)
6.DHCP協議
Question:
一臺主機如何獲取IP地址? Answer:
- 靜態配置
- 自動配置(使用DHCP協議)
6.1靜態配置
需要手動配置的信息如下
- 1.本機IP地址
- 2.子網掩碼
- 3.網關:你的主機連接的路由器的IP地址(一般是路由器的LAN口地址,LAN口連接本子網的主機,WAN口連接Internet)
- 4.首選DNS服務器和備用DNS服務器
6.2 自動配置
概念:
動態主機配置協議(Dynamic Host Configuration Protocol,DHCP)是一種用于自動為網絡中的設備分配IP地址和網絡配置參數的協議
工作原理:
DHCP采用客戶端-服務器模型,使用UDP協議,客戶端默認端口號68,服務器默認端口號67,工作過程分為四個步驟
- 1.客戶端發送DHCP Discover(發現報文),尋找本網內可用DHCP服務器
- 2.DHCP服務器返回DHCP Offer(提供報文)響應,提供一個可用的IP地址及相關配置(如子網掩碼、默認網關、DNS等)
- 3.客戶端選擇一個Offer,并廣播DHCP Request(請求報文),正式請求該IP地址
- 4.服務器確認請求,發送DHCP Ack(確認報文),正式分配該IP地址。如果IP地址不可用(如已被占用),則返回DHCPNAK拒絕
7.NAT
概念:
NAT(Network Address Translation,網絡地址轉換)是一種在計算機網絡中廣泛使用的技術,主要用于緩解IPv4地址短缺的問題,同時提供一定的網絡安全性。NAT技術允許一個子網/私網中的多臺設備共享一個或多個公共IP地址,從而實現內部網絡(私有網絡)與外部網絡(互聯網)之間的通信。具體來說,NAT將內部網絡中的私有IP地址轉換為公共IP地址。公共IP地址必須是唯一存在的,但是不同私網中可以存在相同的私有IP地址
NAT地址轉換
- 替換:利用路由器的WAN口IP地址+新端口號替換每個外出IP數據報的源IP地址+源端口號
- 記錄:將每對WAN口IP地址+新端口號與源IP地址+源端口號的映射關系存儲到
NAT轉換表
中- 替換:檢索NAT轉換表,利用源IP地址+源端口號替換每個進入內網IP數據報的目的IP地址+目的端口號(即WAN口IP地址+新端口號)
8.ICMP協議
8.1 ICMP概念&類型
互聯網控制消息協議(Internet Control Message Protocol,ICMP)主要在IP網絡中傳遞控制協議,幫助實現網路診斷、錯誤報告和狀態查詢等功能。
ICMP報文主要分為兩類:
差錯報告報文
- 1.目的不可達:數據包無法到達目的主機(網絡/主機/協議/端口不可達)
- 2.源抑制(Source Quench):通知發送方降低數據發送速率(現代網絡較少使用)
- 3.超時:數據包的TTL(生存時間)減少為0時被丟棄
- 4.參數問題:IP數據包的首部字段有誤、選項字段不正確等文體導致數據包無法正確解析或處理
- 5.重定向:路由器檢測到數據包可以通過更優的路徑到達目標時,路由器向源主機發送ICMP重定向報文,指示源主機使用更優的路由路徑
網絡探尋報文
- 1.回聲請求與應答報文:通過發送回聲請求報文并接收回聲應答報文,可以測試源主機與目標主機之間的網絡連通性和延遲
- 2.時間戳請求與應答報文:由源主機發送,請求目標主機或路由器返回當前時間,以獲取網絡設備之間的時間同步和延遲數據
幾種不發送ICMP報文的特殊情況:
- 1.對ICMP差錯報告報文不再發送ICMP差錯報告報文
- 2.對于某分組,除了第一個分片,后續分片都不發送ICMP差錯報告報文
- 3.對所有多播IP數據報都不發送ICMP差錯報告報文
- 4.對具有特殊IP地址的數據報(如:127.0.0.1本機環回地址)不發送ICMP差錯報告報文
8.2 ICMP報文結構
注意:校驗和的計算包括整個ICMP報文
8.3 ICMP報文的封裝
把需要進行差錯報告的IP數據報的首部和前8個字節提取出來,作為ICMP報文的數據部分
如果該IP數據報使用的傳輸層協議是UDP,那么前8個字節就是UDP的首部
如果該IP數據報使用的傳輸層協議是TCP,那么前8個字節就是源端口號、目的端口號、序列號
8.4 ICMP的應用舉例-Traceroute
在Windows系統的電腦上按住win + r
,再輸入CMD
打開Windows的命令解釋器,輸入tracert + 目的IP地址
使用Traceroute應用對目的IP地址進行跟蹤
(1)源主機向目的主機發送一系列UDP數據報
- 第①組數據報TTL設置為1
- 第②組數據報TTL設置為2
- 第n組數據報TTL設置為n
- 目的端口號為不可能使用的端口號
(2)當TTL = n的數據報達到第n和路由器時:
- 路由器丟棄該數據報
- 向源主機發送(type = 11,code = 0)ICMP報文
- ICMP報文攜帶當前路由器的IP地址
(3)當ICMP報文達到源主機時,記錄RTT
注意:如果UDP數據報最終到達目的主機,則返回(type = 3,code =
3,目的端口不可達)ICMP報文,并且源主機停止發送UDP數據報
9.IPv6協議
IPv6是用于替代IPv4的下一代IP地址協議,核心目的是解決IPv4地址枯竭問題
9.1 IPv6報文格式
(1)版本號:固定為6
(2)優先級:類似于IPv4的TOS字段,用于QoS(Quality of service,服務質量)優先級控制
(3)流標簽:標記同一數據流,路由器無需分用即可識別并保障QoS
(4)載荷長度:僅計算載荷長度(擴展首部 + 數據),不包含基本首部,最大值65535字節
(5)下一個首部:如果存在擴展首部,該字段指向擴展首部,擴展首部中的該字段同理;如果不存在擴展首部,則指向傳輸層(上層)協議首部
(6)跳步限制:類似于IPv4中的TTL,每經過一跳減1,歸零時丟棄
(7)源地址/目的地址:發送方的IP地址和接收方的IP地址,最大能存在2 ^ 128個獨立IP地址
注意:IPv6協議移除校驗和,以減少每一跳的處理時間
9.2 IPv6地址
IPv6的基本地址類型有以下三種:
- 1.單播(unicast):點對點通信
- 2.多播(multicast):一對多通信,數據發送到一組計算機中的每一個(類似于廣播)
- 3.任播(anycast);數據的終點是一組計算機,但只會交付給該組中的一個
IPv6地址的表示形式
- 1.冒號十六進制記法
例如:FF01:0:0:0:0:0:0:43(一般形式),可以將一連串的0使用一對冒號代替 -> FF01::43(壓縮形式)- 2.因為16進制包含A~F字母,在URL中可能會造成歧義,所以使用[]來包裹IPv6地址
- 3.不再使用子網掩碼,而是使用地址前綴的方式,如:FF01:0:0:0:0:0:0:43/64
9.3 IPv4 -> IPv6過渡
隧道(tunneling):IPv6數據報作為IPv4數據報的載荷進行封裝,穿越IPv4網絡