- 「計算機網絡筆記」第一章 概述
- 「計算機網絡筆記」第二章 物理層
- 「計算機網絡筆記」第三章 網絡層
- 「計算機網絡筆記」第四章 介質訪問控制子層
- 「計算機網絡筆記」第五章 網絡層
- 「計算機網絡筆記」第六章 傳輸層
- 「計算機網絡筆記」第七章 應用層
5.1 網絡層概述
功能
將源端
產生的數據包/數據分組,一路送達目的機
- 信息封裝
- 目的機的識別
- 找到
路由
(源機->目的機的路徑)
被路由的協議
IP協議
- IP地址:定位目的機
- IP分組:信息的封裝
- IPv6協議:新一代IP協議
路由選擇協議
找到源機和目的機之間的最優路徑
- 距離矢量路由選擇協議
- 鏈路狀態路由選擇協議
源機和目的機之間的網絡
數據報子網 | 虛電路子網 | |
---|---|---|
電路 | 不需要建立 | 一定要建立 |
分組 | 包含完整的源地址和目的地址信息獨立尋徑 | 包含很短的一個標號 |
路由 | 不需要保留任何連接狀態 | 都要保留連接狀態 |
路由器 失效影響 |
基本沒有影響 | 連接/數據傳輸中斷 |
服務質量 擁塞控制 |
很難實現 | 容易實現 |
5.2 IP地址
- 提供一種盡力而為
best-effort
地把數據從源端傳輸到接收方的方法 - 為路由提供路由所需要的信息
- IP協議 = 被路由協議
IP地址
32位二進制位
-
點分十進制
32 => 4×8
每個8位組,二進制 => 十進制,0~255
Example:IP地址體現了層次性
[.... ....] Internet
[130.1.0.0] 網絡
[130.1.1.0] 子網1
[130.1.1.1] 主機
IP地址的兩層結構
- 網絡部分:0~15位
- 主機部分:16~31位
A類地址
0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1字節標識
網絡地址
,2、3、4字節標識主機地址
- 第1個字節 => [0,127]
- 每個A類地址/A類網絡,容納 224-2 臺主機
- 減去的2:用于廣播地址和網絡地址
B類地址
10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1、2字節標識
網絡地址
,3、4字節標識主機地址
- 第1個字節 => [128,191]
- 每個B類地址/B類網絡,容納 216-2 臺主機
C類地址
110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
- 1、2、3字節標識
網絡地址
,4字節標識主機地址
- 第1個字節 => [192,223]
- 每個C類地址/C類網絡,容納 28-2 臺主機
保留的IP地址
不能分配給某個接口/某個主機使用
D類:1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
E類:11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
網絡地址:xxxxxxxx.xxxxxxxx.00000000.00000000
廣播地址:xxxxxxxx.xxxxxxxx.11111111.11111111
-
0.0.0.0
- 表示:這個主機、這個網絡
- 在路由表中,默認路由的目的地址
-
255.255.255.255
- 泛洪廣播地址
-
127.0.0.0
- 環回地址
Lookback Network
- 127.0.0.1 => localhost
- 環回地址
-
169.254.0.0
- 非正常地址
- 不能對外正常通信
5.3 子網規劃
將大網絡分割成小網絡
主路由器
邊界路由器
負責和外部聯系
了解內部網絡結構的機制:子網掩碼
子網掩碼
決定分組往哪個子網轉發
點分十進制表示 => 連續的
1
(網絡位) + 連續的0
(主機位)-
按位
與
操作- 目的IP地址 AND 子網掩碼 = 目的網絡地址
- 按位操作后,主機位全為
0
A、B、C類的缺省
A類 | B類 | C類 | |
---|---|---|---|
點分十進制表示 | 255.0.0.0 | 255.255.0.0 | 255.255.255.0 |
網絡前綴表示 | /8 | /16 | /24 |
子網位
-
從IP地址的主機部分借位
- 從高位開始借
- 至少保留2位
-
Example:192.168.1.0/24,主機域借2位作為子網位
子網的網絡地址:
192.168.1.00 000000 => 192.168.1.0/26
192.168.1.01 000000 => 192.168.1.64/26
192.168.1.10 000000 => 192.168.1.128/26
192.168.1.11 000000 => 192.168.1.192/26
- 第4個子網的網絡地址:192.168.1.10 000000 => 192.168.1.64
- 第4個子網的廣播地址:192.168.1.10 111111 => 192.168.1.127
5.4 IP尋址
根據目的IP地址,找到目的網絡
路由器
執行IP尋址的主要設備
1個路由器
Router
= 1跳Hop
-
收到一個分組
-
打開分組
- 提取到
目的IP地址
- 提取到
-
確定網絡,查找路由表
目的IP地址和子網掩碼按位與運算,得到
目的網絡
用目的網絡查找路由表
重新封裝,轉發
next hop
-
到達最后一個網絡
目的網絡
,MAC尋址(交換機執行)
不同 | MAC地址 | IP地址 |
---|---|---|
網絡范圍使用 | 小型網絡 | 互聯網 |
依賴的地址結構 | 平面地址 | 結構化地址 |
所處OSI模型的層 | 數據鏈路層 | 網絡層 |
地址的格式 | 十六進制 | 點分十進制 |
5.5 IP分組
- IP分組包含12個基本的字段和選項字段
- IP分組分為:頭部、數據
報頭長度
- 大小:4bit
- 單位:
4Byte
- 0101 ~ 1111
數據報總長
- 大小:16bit
- 單位:
Byte
生存時間 TTL
- 大小:8bit
- 單位:
hop
- 每經過一個路由器,TTL-1
- 當TTL-1=0時,路由器丟棄該分組,向源發回一個超時消息
- 防止分組在網絡無限循環
用戶協議
- 大小:8bit
- 指明傳輸層采用的協議
- UDP:17
- TCP:6
目的IP地址
- 大小:32bit
5.6 IPv6概述
IPv4存在問題
- 地址數
- 端到端模式收到破壞
- 地址數匱乏,使用了私人地址
- 私人地址不具有唯一性,和互聯網通訊,必須進行轉換
- NAT轉換器
- 配置復雜
- 安全問題
- 路由表膨脹
- 增加了每一個分組的延遲
- QoS和性能問題
IPv6的目標
- 支持幾十億臺主機
- 縮減路由表的規模
- 簡化協議,路由器處理分組更快
- 更好的安全性
- ... ...
5.7 IPv6地址
基本概念
- 局域網段:LAN段,最小單位。
交換機
一個接口下的這一條鏈路 - 鏈路:
路由器
一個接口下的,若干個局域網段構成的 - 鄰接點:一條鏈路上的兩臺主機
冒分十六進制
- IPv6地址:128位(v4僅有32位)
- 128 => 8組 × 16位
- 簡化規則
- 忽略前導0
- 省略全0 => 雙冒號,一個地址里最多只能出現一次雙冒號
IPv6地址分類
- 單播地址
Unicast Address
- 一對一通信
- 組播地址
Multicast Address
- 特定組內通信
- 任播地址
Anycast Address
- 特定組內,任意一臺計算機
特殊地址
- 未指定
- 二進制前綴:000...0(128bit)
- IPv6:
::/128
- 一臺設備未正式的獲得地址時,以此代替
- 路由表中目的網絡,表示默認路由
- 環回地址
- 二進制前綴:000...1(128bit)
- IPv6:
::1/128
- 類似IPv4中的127.0.0.1
- 組播
- 二進制前綴:11111111
- IPv6:
FF00::/8
- 鏈路本地地址
- 二進制前綴:1111111010
- IPv6:
FE80::/10
- 屬于單播地址
- 網點本地地址
- 二進制前綴:1111111111
- IPv6:
FEC0::/10
鏈路本地地址
屬于單播地址
- 用在單一的鏈路上
- 如果一個分組的目的地址||源地址是鏈路本地地址,分組不回轉發到其他鏈路
- IPv6設備啟動時,首先生成一個鏈路本地地址,此時就可以和鏈路上的其他節點通信
- FE80:0:0:0 + EUI64位地址(合128bit)
- EUI64地址
- 將MAC地址轉化成二進制的48位
- 在前24位和后24位中間加上16位的
11111111 11111110
- 從高位起的第7位,0 => 1(U/L位:用于確定該地址是全局管理的還是本地管理的)
可聚合全球單播地址
3bit | 13bit | 8bit | 24bit | 16bit | 64bit |
---|---|---|---|---|---|
001 | TLA 頂級聚類地址 |
RES 保留位 |
NLA 次級聚類地址 |
SLA 站點級聚類地址 |
InterfaceID |
- SLA可用作子網規劃
- 如果主機可以和默認網關通訊,就可以從默認網關獲取全球IPv6地址的前綴
- 默認網關:和主機直接相連的路由器
- 前綴 + InterfaceID => 全球單播地址
5.8 IPv6分組
IPv6的報頭
協議版本(4bit):0110 => IPv6
流標記(20bit):為源端和目的端提供了建立
偽連接
的方式凈荷長度(16bit):固定頭之后的字節數
-
下一個頭
Next Header
(8位)- 指明當前頭之后,擴展頭的類型
- 若當前頭為最后一個頭,則用于指明上層傳輸層指定的用戶協議(與IPv4中相同)
跳數限制
Hop Limit
:等同于IPv4中的TTL
與IPv4的不同
-
刪除校驗和
- 上層傳輸層和下層數據鏈路層都有自己的校驗和
-
刪除分段/分片
源端在一開始必須知道全部路徑/網絡的
最小MTU
MTU:最大傳輸單元,Maximum Transmission Unit
PMTU算法
5.9 IPv6過渡技術
- 雙棧
- 隧道
- 地址轉換
5.10 路由表
路由表的結構
- 目的網絡/子網掩碼
- 路徑代價
- 下一跳(網關)
- 轉出接口
- ...
路由信息
直連路由 | 靜態路由 | 動態路由 |
---|---|---|
路由器學習感知 | 管理人員人工配置 | 路由選擇協議 |
-
直連路由
- 路由器開啟了接口,自動發現接口對應的子網,并記錄到路由表
-
靜態路由
- 常見的靜態路由:缺省/默認路由
- 默認路由
- 避免錯誤丟包
- 縮減路由表的規模
- 減少路由器的運行負擔
- 優點
- 適用小型網絡
- 安全,不會發送通告
- 穩定,通過同一路徑總是到達同一網絡
- 不需要CPU、RAM、帶寬等開銷
- 缺點
- 網絡規模增大,配置復雜性增長
- 人工更新維護繁瑣
-
動態路由(多數)
- 由
路由選擇協議
動態地建立、更新和維護的路由 - 適合大型網絡
- 不受網絡規模的限制
- 自動更新、維護路由信息
- 量度路徑最優
- 跳數
- 帶寬
- ...
- 由
5.11 距離矢量路由選擇協議
Distance Vector
- 常用于小型網絡
- 典型DV算法:路由選擇信息協議
- RIP
Routeing Information Protocol
- 早期互聯網使用
- RIP
- 矢量/向量:一個有序數組,
n
維向量中存了n
個數,有先后次序之分。
DV的工作原理
-
每個路由器
維護
兩個矢量,Di和Si- Di:該路由器到所有其他路由器的距離,{ di1,di2,... ... ,din}
- Si:該路由器到所有其他路由器的下一跳,{ si1,si2,... ... ,sin}
- di1:從
節點i
到節點1
的度量/代價 - si1:從
節點i
到節點1
的最優路幾個上的下一跳 - n:網絡中路由器的個數
鄰居路由器
交換
路由信息(矢量信息)每個路由器根據收到的路由信息,
更新
路由表
DV算法的特點
- 優點
- 簡單
- 缺點
- 交換信息大
- 路由信息傳播緩慢,可能導致路徑信息不一致
- 不適合大型網絡
5.12 路由選擇信息協議 RIP
特點
- 采用
跳數
作為Si的量度 - 當量度超過15跳,目的網絡即作
不可達
- 解決
路由環
問題 - 完全相信鄰居路由器,導致的路由環/無窮計數問題
- 解決
- 30秒交換一次路由信息
5.14 鏈路狀態路由選擇
Link State Routing
主要思路
- 發現
- 設置
- 構造
- 發送
- 計算
發現
- 發現鄰居節點,了解它們的網絡地址
- 路由器啟動時,向每個鄰居路由器發送
Hello數據包
設置
- 到每個鄰居的成本度量
- 常見度量:鏈路帶寬(反比),延遲
- 發送特別的
Echo分組
,另一端立即回送應答,通過測量往返時間RTT
,得到延遲估計值
構造
構造鏈路狀態分組LSP
Link State Packet
-
LSP分組
- 發送方的標識
ID of the sender
- 序列號
sequence number
- 32bit的序列號,解決序列號回轉問題
- 年齡
age
- 每經過1秒,age-1 => age=0時,丟棄
- 每隔很短的時間(通常大于age),新分組就會到來
- 鄰居列表
list of neighbors
- 度量
delay to each neighbor
- 發送方的標識
周期性的構造
-
特殊事件發生時構造
- 線路/鄰居down掉
- 出現新的接口
發送
- 這個分組發給所有其他的路由器
- LSP分組的序列號隨著新分組的產生,遞增
- 路由器記錄下所有看見的LSP
- 當新分組到達
- 先放于
保留區
- 新分組(不存在記錄中),則
泛洪廣播
- 保留區的分組和新分組比較序列號
- 相等 => 丟棄
- 不相等 => 保留新的
- 先放于
計算
- 分組分發完全,構造全網拓撲圖
- 基于完整的網絡圖,計算到每個目標的最短路徑(如:最短路徑算法)
LS算法特點
- 優點
- 路由器認識一致
- LSP構造的圖完全一致
- 收斂快
- 適合大型網絡
- 缺點
- 路由器需要較大存儲空間
- 計算負擔大
5.15 單區域OSPF
- 開放的最短路徑優先
- Open Shortest Path First
- 鏈路狀態路由的典型實例
特點
- 適用大型網絡
- 解決
路由自環
問題 - 度量:108÷帶寬
- 收斂快
相關概念
- RouterID:32位,自治系統內唯一,路由器的唯一標識
- 協議號:89 => OSPF報文
- TTL=1:OSPF通常只傳給鄰居路由器
OSPF分組的類型
OSPF數據包類型 | 描述 |
---|---|
Hello | 與鄰居建立和維護鄰居關系keep alive
|
數據庫描述包DD
|
描述一個OSPF路由器的鏈路狀態數據庫的內容 |
鏈路狀態請求LSR
|
請求相鄰路由器,發送其鏈路狀態數據庫中的具體條目 |
鏈路狀態更新LSU
|
向鄰居路由器發送鏈路狀態通告 |
鏈路狀態確認LSAck
|
確認收到了鄰居路由器的LSU |
-
LSU的使用
作為LSR的應答
-
特殊事件發生時
- 線路/鄰居down掉
- 出現新的接口
-
LSAck
- 任何時候收到LSU都需要回發LSAck
建立全毗鄰關系
- 通過發送問候
Hello
包確認是否連接 - 為了同步路由控制信息,利用數據庫描述
Database Description
包相互發送路由摘要信息和版本信息 - 通過DD和自己的數據庫比對發現版本老舊,發送鏈路狀態請求
Link State Request
包,請求完整的路由控制信息 - 對面會回發鏈路狀態更新
Link State Update
包,包含完整的路由狀態信息 - 最后發送鏈路狀態確認
Link State Acknowledgment
包通知大家,本地已經接收到了路由狀態信息
指定路由器
Designated Router
- 在一個比較復雜的網絡中,在同一個鏈路加入新的路由器,不需要在所有相鄰的路由器之間都進行控制信息`的交換,而是指定一個DR,并以它作為中心交換路由信息
5.16 無類域間路由 CIDR
- Classless Inter Domain Routing
- 緩解地址枯竭的趨勢(尤其是B類地址)
- 縮減了路由表的開銷
- 可以進行
路由聚合
,形成超網SuperNet
- 路由聚合和子網規劃是相反的行為
- 可以進行
- 隔離了
路由翻動
IP面臨的問題
- 分類造成地址的浪費
- 路由表的膨脹
- 路由表動輒幾萬條
- 分組到達時,查找路由表的時間會增加 => 通信的端到端延遲
基本思想
- 分配IP地址時,不再以A、B、C的類別分類,按照可變長的
地址塊
分配
舉例:用戶需要2000個IP地址
- CIDR之前,只能分配一個B類地址
- CIDR之后,分配一個x.x.x.x/21的塊地址
- 網絡位:21位
- 主機位:11位 => 211-2,2046個地址
IP地址的最長匹配前綴
- 當一個分組到達路由器
- 匹配到多個目標網絡時,選取網絡位最長的(子網掩碼1最多的)
路由聚合
- 要求直連路由地址連續
- 子網的下一跳是相同的
舉例:路由器RTA有4條直連路由,對應4個子網,形成連續的地址空間
- 200.199.48.0/24 => x.x.001100 00.x
- 200.199.49.0/24 => x.x.001100 01.x
- 200.199.50.0/24 => x.x.001100 10.x
- 200.199.51.0/24 => x.x.001100 11.x
第三段里的001100是不變的
=> 聚合結果:200.199.48.0/22(超網)
5.17 網絡地址翻譯 NAT
- Net Address Translate
- 私人地址和共有IP地址之間的轉換
- IP地址枯竭的快速修補方案
私人地址空間
- 不可路由
- 全球不唯一
地址類別 | RFC 1918 Internal Address Range | CIDR前綴 |
---|---|---|
A | 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 |
B | 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 |
C | 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 |
NAT轉換器的工作原理
NAT的缺點
- 影響部分協議和應用的同學
- 增加了網絡延時
- NAT轉換器可能成為網絡的瓶頸
5.18 互聯網控制消息協議 ICMP
Internet Control Message Protocol
- 一般來說,ICMP消息僅發送給源機
- ICMP消息不生成自己的差錯報告
- ICMP消息封裝在IP分組中
主要功能
- 確認IP包是否成功送達目標地址
- 通知在發送過程當中IP包被丟棄的具體原因
- 改善網絡設置
ICMP的具體應用
- Ping
-
源機向目的站點發送
ICMP回聲請求
報文 -
目的站點接收到,必須向源機站點發回一個
ICMP回聲應答
報文 - 源機站點收到應答報文,且其中的任選數據和發出去的相同,則判斷目的站點可達,否則為不可達
-
源機向目的站點發送
- TraceRoute
- 路徑MTU(最大傳輸單元)
Ping的應用
-
測試TCP/IP是否正常工作
ping 127.0.0.1
-
測試網絡設備是否正常
ping <本機的IP地址>
-
檢查對外連接的路由器
ping <默認網關IP>
-
檢查與某臺設備的暢通情況
ping <設備的IP>
5.19 地址解析協議 ARP
Address Resolution Protocol
- 運行在局域網的協議
- 將目標機的IP地址映射到MAC地址上
工作原理
- ARP借助
ARP請求
和ARP響應
,兩種對應的包來確定MAC地址 -
ARP表
緩存ARP的結果 - 收到ARP請求,通過源機的IP地址和MAC地址的映射對,更新自己的ARP表
- 免費ARP:每臺機器啟動時,廣播自己的IP-MAC地址對
- Source IP = Target IP
- 如果收到應答,說明自己的IP已被使用
舉例:主機A想要獲得同局域網下的主機B的MAC地址
A通過廣播發送一個ARP請求包
- 請求包:包含請求通信的目標IP地址
- 廣播的包可以被同一個鏈路上所有的主機/路由器接收
主機B接收到廣播的ARP請求包,并解析,發現包中的IP地址與自己的一致,則將自己的MAC地址封裝到ARP響應中發回。
其余主機解析后,發現目標IP地址不一致,則
- 不做應答
- 用ARP請求中的源信息來更新ARP表
5.20 擁塞控制
Congestion
當一個子網或子網的一部分出現太多分組的時候,網絡的性能急劇下降。
-
擁塞控制的措施
- 開環:提前考慮
- 閉環
抑制分組
生效時間慢,逐跳抑制
可以快速緩解擁塞點壓力載荷脫落
=> 丟棄分組,根據應用場景選擇不同的脫落策略隨機早期檢測
可以防范于未然
5.20 流量整形
漏桶算法
- 可以讓一個不穩定的流,整為一個穩定的流
- 無法突發
- 桶滿時,丟棄分組
令牌桶算法
- 當一個分組要發送時,必須從桶中
取出
和獲取
到一個令牌 - 令牌桶可以累計令牌,允許有
上限的突發
- 桶滿時,丟棄令牌
- 有時候,可以在令牌桶后,再串接一個漏桶