中階網路概論

網路基礎
OSI 模型
層次 | 中文名稱 | 主要功能 | 常見協定 | 相關設備 |
---|---|---|---|---|
L7 | 應用層 | 提供使用者與應用程式之間的介面,處理網路服務(如檔案傳輸、郵件等)。 | HTTP、HTTPS、FTP、SMTP、DNS、DHCP、SSH、Telnet | 閘道器(Gateway)、代理伺服器(Proxy) |
L6 | 表現層 | 負責資料格式轉換、加密/解密、壓縮/解壓縮,確保不同系統能正確解讀資料。 | SSL/TLS、JPEG、MPEG、ASCII、Unicode | 加解密設備、轉碼器 |
L5 | 會話層 | 建立、管理和終止應用程式之間的會話(Session),同步資料傳輸。 | NetBIOS、RPC、PPTP、SIP(VoIP) | 會話管理伺服器、VPN 設備 |
L4 | 傳輸層 | 提供端對端(End-to-End)的可靠傳輸,負責流量控制、錯誤偵測和資料重傳。 | TCP(可靠傳輸)、UDP(非可靠傳輸)、SCTP | 防火牆(Firewall)、負載平衡器(Load Balancer) |
L3 | 網路層 | 負責邏輯定址(IP 位址)和路由選擇(Routing),將封包從來源傳送到目的地。 | IP(IPv4/IPv6)、ICMP、ARP、RIP、OSPF、BGP | 路由器(Router)、L3 交換器(Layer 3 Switch) |
L2 | 資料鏈結層 | 將位元流組成「訊框(Frame)」,管理實體定址(MAC 位址)、錯誤偵測(CRC)和流量控制。 | Ethernet(IEEE 802.3)、Wi-Fi(IEEE 802.11)、PPP、VLAN、STP | 交換器(Switch)、網卡(NIC)、橋接器(Bridge) |
L1 | 實體層 | 傳輸原始位元流(0 和 1),定義電壓、線路速率、接頭規格等物理特性。 | Ethernet(物理層規範)、USB、DSL、光纖(Fiber)、藍牙(Bluetooth 底層) | 集線器(Hub)、中繼器(Repeater)、網路線 |
Spanning Tree Protocol
Spanning Tree的存在是為了解決廣播風暴的問題,這個協定會自動決定一條可以使用的路線,並把另外一條線當作備援路線做使用從而打換網路中的迴圈
傳統 STP
在進行STP協議時我們會需要選出一個Root Bridge、Root Port和Designated Port
選舉概論
Root Bridge
- 網路中最上層的Bridge,連接所有交換機網路的最上層
Root Bridge的用途就是負擔任負責轉發在網路迴圈中的一台設備,因此所有其他設備的流量都會把資料傳送到Root Bridge後再轉送到目的地
選擇Root Bridge的依據是判斷 Bridge ID,如果這個值越低就越容易成為Root Bridge,這個值計算方式為
1 | Priority ID + VLAN ID |
如果比較出來的 Bridge ID 值是相同的就會去比較設備的MAC位置,一樣是越低的越優先
Root Port
- 每個到達Root Bridge最快的Port口
每個設備連接到Root Bridge的Port都稱為Root Port,顧名思義就是負責轉送封包到Root Bridge的 Port
選擇Root Port的方式是比較Cost值,Cost值表示這一個Port到達Root Bridge的成本,Cost的計算方式是依照這個表格去判斷的
Speed | Cost |
---|---|
10G | 2 |
1G | 4 |
100M | 19 |
10M | 100 |
如果相同的話就用Bridge ID來比較,如果還是相同就用Port ID比較
Designated Port
- 每個交換機Root Port的對面交換機連接Port
是一個通往非Root Bridge的Port,意思就是負責傳送資料的Port
選舉則的方式會根據雙方的設備最小的Cost去比較,如果自己的Cost值比較大的話就會把Port設定成Blocking狀態,部會轉發資料,另外一方則成為Designated Port
Non-Designated Port
- 剩餘非啟用的Port,作為備援路線
其實就是Blocking狀態的Port,沒有啟用的Port
選舉原理
Step 1 - Disable
定義:端口處於管理性關閉或實體層故障狀態
特性:
- 不接收或轉發任何資料(包括 BPDU)
- 不參與 STP 運算
- 不進行 MAC 地址學習
觸發條件:由網管人員手動關閉端口或端口實體連接故障
停留時間:0
Step 2 - Blocking
定義:端口可運作但被 STP 阻斷以防止迴圈
特性:
- 只能接收 BPDU,不能轉發 BPDU
- 不轉發用戶數據
- 不學習 MAC 地址
- 是一種穩定狀態
觸發條件:端口初始化後的預設狀態,或非根端口/非指定端口的最終狀態
持續時間:20 秒(由 forward delay 計時器控制)
Step 3 - Listening
定義:過渡狀態,為進入轉發狀態做準備
特性:
- 接收和轉發 BPDU
- 不轉發用戶數據
- 不學習 MAC 地址
- 是一種非穩定的過渡狀態
持續時間:15 秒(由 forward delay 計時器控制)
Step 4 - Learning
定義:過渡狀態,開始學習 MAC 地址
特性:
- 接收和轉發 BPDU
- 開始學習 MAC 地址並更新 MAC 地址表
- 不轉發用戶數據
- 是一種非穩定的過渡狀態
持續時間:15 秒(由 forward delay 計時器控制)
Step 5 - Fowarding
定義:端口正常工作狀態
特性:
- 接收和轉發 BPDU
- 學習 MAC 地址
- 正常轉發用戶數據
- 是一種穩定狀態
觸發條件:根端口或指定端口完成所有過渡狀態後的最終狀態
快速表格
狀態 | 時間 | 資料轉發 | 位置學習 | 轉發BPDU | 接收BPDU |
---|---|---|---|---|---|
Disable | Nan | 🔴 | 🔴 | 🔴 | 🔴 |
Blocking | 20s | 🔴 | 🔴 | 🔴 | 🟢 |
Listening | 15s | 🔴 | 🔴 | 🟢 | 🟢 |
Learning | 15s | 🔴 | 🟢 | 🟢 | 🟢 |
Forwarding | Nan | 🟢 | 🟢 | 🟢 | 🟢 |
BPDU訊框
間單來說BPDU就是負責在STP協定中負責轉送資訊的封包,屬於資料連結層中的協定。BPDU採用IEEE 802.3 LLC封裝格式而不是常見的Ethernet V2格式,內容資料包含
- Root Bridge ID
- Root Path Cost
- Sender Bridge ID
- Port ID
- Hello Time
- Forward Delay
- Max Age
STP能判斷一個網路架構中是否有變動是因為Root Bridge交換機會定時(Hello Time)發送BPDU封包通知自己還存活,同時這個BPDU封包會被其他交換機轉發再轉發一直下去,而如果有交換在Max Age時間內都沒有收到BPDU封包就會判斷這個交換機已死亡
另外這個訊框也可以轉送各種ID等資訊,所以在選舉Root Bridge和Root Port時就可以讓交換機自行比較自己是不是有較大的BridgeID/Root Port ID最後處理後續動作
TCN BPDU
在網路STP網路中如果交換機任意節點有變動(Blocking <-> Forwarding)就會觸發這個機制讓網路重新計算一次網路架構,流程是這樣的
- 某交換機偵測到網路變動發送TCN
- 藉由交換機持續轉發到Root Bridge交換機
- Root Bridge交換機廣播網路架構變更
- 所有接收到的交換機會在Forward delay時間內清除Mac Table
- 重新計算網路+Mac table老化時間恢復300秒
簡易流程圖
- participant SW3 as 非根橋(SW3)
- participant SW2 as 上游交換器(SW2)
- participant SW1 as 上游交換器(SW1)
- participant SW0 as 根橋(SW0)
- SW3->>SW2: 發送TCN BPDU(每2秒)
- SW2–>>SW3: 回覆TCA確認
- SW2->>SW1: 轉發TCN BPDU
- SW1–>>SW2: 回覆TCA確認
- SW1->>SW0: 轉發TCN BPDU
- SW0–>>SW1: 回覆TCA確認
- SW0->>SW0: 設定TC標誌
- SW0->>SW1: 廣播含TC標誌的BPDU
- SW1->>SW2: 轉發含TC標誌的BPDU
- SW2->>SW3: 轉發含TC標誌的BPDU
新版 RSTP
基礎概論
傳統的STP設計有一個問題,每當整個網路中有一個設備斷線或改變就要重新計算整個網路的Root Bridge, Root Port, Designated Port等,並且每次花的時間都是50秒以上,這個時間非常久於是就發明出了 Raid-STP
在新版的RSTP中加入了保留了傳統的Root Port和Designate Port並加入了新的兩種Port分別是Back Up Port和Alternate Port,同時也新增了專門給邊緣節點的Edge Port
除了上述以外RSTP也把Disable, Blocking和Listening三種狀態合併成單個Discarding狀態
所以RSTP改了哪些東西
新增了
- Back Up Port
- Alternate Port
- Edge Port
合併了
- Disable, Blocking, Listening => Discarding
運作原理
RSTP 相比 STP 下可以快很多是因為省略了多種狀態和加入了新的 Synchronization Process 運作機制,不需要一個小小的變更導致整的大型網路都要重新計算調整,所以我們就來一步步猜解一台新的Switch加入到一個網路架構時RSTP會如何運作
- 加入的SW1會假設自己是Root Bridge並發送BPDU稱自己為Root
- 當SW2接收到SW1的BPDU封包後會去比對是否與現在的Root Bridge ID 值更低
- 如果沒有更低就會拒絕SW1的請求SW1就會設定好自己的Port口
- 如果SW1比現在的Root Bridge ID更低就會成為Root Bridge
- 因為有新的Root Bridge所以所有Switch會先成為Discarding狀態不接收訊息
- SW2設定連接SW1的Port成為Root Port
- 把訊息轉送到所有其他Switch,並且接收到的Switch會重複一次這個完整的流程
文字讀可能比較不容易懂,所以你可以用下面的下拉選項來更快速了解一次運作流程,或是查看Jan Ho大老寫的文章
當有新的Switch加入
新的Switch宣稱自己是RB並轉送ID值給其他Switch
# 發送 Proposal
Bridge 值沒有比當前網路的RBID更高
新的Switch沒有成為新的RB
- 兩個Switch設定好RP和DP,沒有新的RB加入
Bridge 值比當前網路的RBID更高
新的Switch成為新的RB
- 所有Switch變成Discarding狀態
- 兩個Switch設定好RP和DP,新的RB加入
- 重複 “當有新的Switch加入” 步驟
# RB -> Root Bridge
# RP -> Root Port
# DP -> Designate Port
# RBID -> Root Bridge ID
IPv6
我就不囉說了,反正大家都知道IPv6的出現是因為IPv4他42億個IP已經不夠用了,那為什麼不換,也是那句,「大家都習慣了、要更換的很花錢、太複雜」等,不過身為網路管理員的我們還是有必要了解一下這個正在加入網路世界的技術,那我們開始吧
IP表達格式
傳統的IP格式就是4組0到255的數字組在一起,換算成二進位就是四組的8個1,所以總共會有32個一,三組就是24個,兩組就是16個,這數字是不是熟悉,沒錯這就是網段的由來,細節就不多說了不了解的可以回去看這篇文章,現在我們只要知道這每個1就代表一個bit,所以IPv4是32個bit
而到了IPv6變成了128個bit,足足擴充了4倍的bit數量,要注意這裡的的四倍不是指位置數量變四倍,真正擴充的數量應該這樣計算
1 | 2^128 - 2 ^ 32 = 2^96 ~= 7.9228163e+28 |
那既然多了這麼多bit我們不可能用傳統的方式在那邊255.255.255.255....255
,因為這每次打IP總共要打16次的255這樣太麻煩了,於是後來簡化一點就使用了16進位表示法,這種IPv6表示法的規則是
- 四個數字/字母一組:每組包含四個十六進位數字(數字範圍為0-9和字母A-F)
- 總共八組:IPv6 地址總共由8組這樣的數字/字母組成
- 用「:」分隔:每組之間用冒號 : 分開
- 可以省略前面的零:如果地址前面有零,可以省略掉這些零,不用寫
- 可以省略連續的零:如果地址中有連續的零,可以省略掉這些零,並用一個空格代替
- 省略只能使用一次:省略連續零的部分只能使用一次,不能同時省略多處
光看文字比較難理解,為一些基本範例
IPv6 的範例們
1 | Before -> 0123:4567:89AB:CDEF:0001:00FF:0FFF:1200 |
同樣的方法也可以用在IPv4中
剛剛有提到說IP在電腦中就是由一串長長的bit所組成,我們把這些IP用不同的方式表達出來的目標就是為了讓更簡化的表達,所以我們看到的只是最常使用的表達方式不代表沒有其他的,例如:
1 | IPv4 |
有興趣怎麼轉換的可以參考smillzy 寫的轉換教學
IP 特殊位置
知道怎麼表達IPv6後終於可以進入實戰階段了,IPv4的先前知識我就當作讀者都懂了(公網內網概念),所以等等我會常用IPv4的特性去比喻IPv6讓讀者更好理解
Addressing
IPv6與IPv4很相似,甚至有些比IPv4更好的內建優化功能,我們就先從最基礎的位置分類開始講起
GUA - Global Unicast Address
他就是公網的意思,顧名思義就是全世界唯一位置
與IPv4比較的話就是不是特殊位置的網路位置,這我應該也不用過多介紹,比較重要的是記住它的IP範圍和位置,他的IP位置範圍是2000::/3
,也可以說是2000:: ~ 3FFF::
的位置,可能有些人到這裡有兩個問題
- 為什麼不開放全部的IP,只開放
2000::/3
- 怎麼計算出是
2000:: ~ 3FFF::
首先第一問題沒有一個很具體的原因因為那就是IANA規定的,況且我也覺得2^128-3個IP位置夠我們用非常非常久了,就算到時候不夠用也可以在開放保留的4000::/3出來使用,詳細的規劃可以看IANA官網
接著第二的問題就涉及到一些數位邏輯的概念了,我就簡單把我的解題過程寫出來,讀者慢慢問AI理解
1 | 1. 10base 2000::/3 => 2base 0010000000000000::/3 //base表示 X進位 |
# 好啦我相信還是很難懂,去看完進位換算的方法應該很快就可以理解了
一些特殊位置
網段2001:db8::/32
要特別注意因為這是IANA的保留位置,據官方所說用途為文件範例位置,更多資訊可以在 RFC 2839 和 RFC 6890 查看更堆
ULA - Unique Local Address
他就是內網的意思,顧名思義就是只有內部可以訪問的IP
最快理解的方式就是跟你說他就是IPv4中的這三個網段192.168.0.0/16
、172.16.0.0/12
和10.0.0.0/8
,但在IPv6中因為位置數量很多所以給一個網段就不知道比這三個多幾千萬倍了,在IPv6中內網的網段是FC00::/7
,欸沒錯範圍自己算吧,簡單跟你說就是FC或FD開頭
內網的功能大家都清楚了,並且IPv6內網運作原理跟IPv4基本上相同,所以就不多作介紹了
Link-Local Address
就是那個電腦沒網路會想說奇怪怎麼還有個169.254開頭的IP
對,相信169.254.0.0/16
這個網段有聽過看過,但是卻沒用過,因為連我也只有用過一次而已,那時候就在想這個IP是甚麼鬼,有種熟悉又陌生的感覺。不廢話了他的名字在IPv4叫做鏈路本地位址 ,在IPv6中的網段是FE80::/10
,功能是讓一台設備在沒有網路的狀況下可以自動獲取一個IP與其他相連設備交換訊息,具體應用就不多說因為我也不知道。
在以前這個機制是隨機性選擇一個位置的,因此當一個網路中有電腦想要自動獲取IP,為了避免IP碰撞到其他電腦這個電腦會先發ARP封包確認沒有人會應才會使用這個IP,否則發現有人回應就會在重新生成一個直到沒有碰撞
在IPv6中就沒有使用這個隨機的功能,取而代之的是這個繁瑣但清楚的生成方式
- 獲取自己的MAC位置,設:A4:FC:06:D1:16:B8
- 把MAC切一半變成:[A4:FC:06]:[D1:16:B8]
- 中間加入FFFE變成:[A4:FC:06:FFFE:D1:16:B8]
- 重排成IPv6格式:[A4FC:06FF:FED1:16B8]
- 前面加入IPv6鏈路位置開頭:FE80::A4FC:06FF:FED1:16B8/10
- 你獲得了你的Link-Local Address YAAA
這種生成方式叫做EUI-64
,就是把MAC直接套進IP位置來獲取鏈路IP的方式,簡單粗暴又清楚,同時他的運作原理與IPv4相同
Multicast Address
他就是IPv4中的廣播位置”們”
為麼說”們”呢,因為在傳統的IPv4中廣播位置就是網段的最後一個IP,但是到了IPv6變成了可以可以選擇性的加入或退出多個廣播位置,只需要把需要的聽需要的廣播
這個概念聽起來超級簡單,但實際卻他x的複雜,所以我盡量簡單的說明多播是如何運作的,不過為了更清楚解釋這個新的概念我先來強調一些我在思考多播原理時需要注意和理解的事項
- 廣播位置
並不是只能發送ARP,他是可以用來傳輸檔案的,因為我們常常聽到的就只有用廣播位址發送ARP和DHCP,所以我就誤以為他就只能做這些事情,但並不是廣播位置就是一個一般的IP,不同的是交換機處理這個位置方式是發送到所有Port,不是使用Mac Table記得要發哪一個Port - IPv6多播是一個位置
傳統來說我們隻知道最後一個位置才是廣播位置,但是到了IPv6不一樣了,廣播位置就是一個獨立的網段,任何其他往段的位置也可以訪問這個網段的多播位置來接收訊息,所以不局限於相同往段中
簡單概述完就可以進入觀念解釋了,多播被創立了原因是為了節省網路流量,在傳統網路中只要在255網段中傳送資料就會讓這個資料傳送到每一個Port,雖然設備可以拒絕但是卻浪費了許多網路平寬,而到了多播概念中變成了你可以選擇性的接收你想要聽的位置,因此不會被強制接收不必要的流量。
多播總共被分為五大類別,分別為
多播地址範疇 | 範圍 | 用途與說明 |
---|---|---|
節點本地 (Node-Local) | FF01::/8 |
僅限於單一設備的多播地址,通常用於裝置內部通信。 |
鏈路本地 (Link-Local) | FF02::/8 |
限定在本地網段(即同一交換機或路由器所連接的設備)內的多播通信。 |
站點本地 (Site-Local) | FF05::/8 |
限定在同一站點內的多播通信,通常用於企業或學校網路中的內部通信。 |
組織本地 (Organization-Local) | FF08::/8 |
用於整個組織範圍內的多播通信。 |
全球範圍 (Global) | FF0E::/8 |
可跨越網際網路範圍的多播地址,通常用於全球範圍內的多播應用。 |
第一個和第二個我們可以比較好理解
- Node-Local就是在設備內的自己的廣播位置,所以這個訊息只會在你的手機、電腦、平板等設備處理,不會把流量傳送到網路中
- Link-Local就像是一般IPv4的廣播位置一樣,可以是在一個內網中進行的,流量不會外網中
接下來幾個就比較複雜了