網路為什麼重要:分散式系統的五大需求
認識 host、node、subnet 等基本詞彙,並理解 latency 與 data transfer rate 如何決定訊息要花多久送達。
先讀原文開場,旁邊就是白話
這是一本英文書。左邊放原文、右邊放白話導讀——你既讀得懂,也順手碰了原文。
認識 host、node、subnet 等基本詞彙,並理解 latency 與 data transfer rate 如何決定訊息要花多久送達。
通訊子系統與效能:延遲與傳輸率
認識 host、node、subnet 等基本詞彙,並理解 latency 與 data transfer rate 如何決定訊息要花多久送達。
深度探秘
分散式系統靠什麼說話?
通訊子系統是分散式系統的「神經系統」
分散式系統是一群分散在不同電腦上的程式,靠互相傳訊息合作。讓它們能對話的所有硬體與軟體,合起來叫做通訊子系統(communication subsystem)。
先把幾個常被混用的詞分清楚:
| 詞彙 | 白話意思 |
|---|---|
| host(主機) | 真正在用網路做事的電腦或裝置 |
| node(節點) | 任何接在網路上的東西,包含交換裝置 |
| subnet(子網) | 一群在同一個實體網路上、互相搆得到的節點 |
重點:網路的好壞,會直接決定整個分散式系統好不好用。所以我們最在意兩個效能指標:latency(延遲) 與 data transfer rate(傳輸率)。
通訊子系統是讓分散式系統能互相說話的所有硬體與軟體。
生活妙喻
寄包裹的兩個煩惱
把傳資料想成寄包裹
想像你要寄東西給朋友,你會在意兩件事:
- 多久東西才開始動? 這就是 latency(延遲)——從你按下「送出」到資料「開始」抵達對方所花的時間。可以想成「寄一個空包裹要多久才到」。
- 東西開始動之後跑多快? 這就是 data transfer rate(傳輸率)——資料開始傳之後每秒能塞多少位元(bits per second)。
於是有個很直覺的公式:
訊息傳輸時間 = latency + 訊息長度 / 傳輸率
寄一封小卡片(小訊息),主要時間花在「東西多久才動」(延遲);寄一整箱書(大訊息),主要時間花在「跑多快」(傳輸率)。
分散式系統裡有超多小訊息飛來飛去,所以延遲常常比傳輸率更要命。
延遲是資料開始抵達前的等待,傳輸率是開始後的速度;小訊息多時延遲最關鍵。
實用超能力
為什麼工程師那麼怕遠端呼叫
算一筆速度帳
在一個輕度負載的區域網路上,傳一個短請求並收到短回覆,含系統開銷大約 0.5 毫秒;而呼叫本機記憶體裡的物件只要 不到 1 微秒。
本機記憶體存取:< 1 微秒
區域網路往返: 約 500 微秒(0.5 毫秒)
Internet 往返: 20–200 毫秒(平均)
所以存取網路上的共享資源,比存取本機記憶體慢約一千倍;跨 Internet 又比快速區域網路慢 10–100 倍,主因是 router 的交換延遲與線路爭用。
flowchart TD A[程式發出請求] --> B[本機記憶體 不到一微秒] A --> C[區域網路 約半毫秒] A --> D[Internet 數十到數百毫秒]
這就是為什麼好的分散式系統設計,會盡量減少遠端呼叫、把資料快取在近處。
網路存取比本機記憶體慢約一千倍,所以要盡量減少遠端往返。
延遲是按下送出到資料開始抵達的等待,傳輸率是資料開始流動後的速度,兩者一起決定總時間。
它由所有傳輸媒介、硬體與軟體組成,負責把訊號在分散式系統的各個部位間傳遞。
本節字彙
可擴展、可靠、安全、行動與服務品質
從 Internet 的爆炸性成長談 scalability,再到 reliability 的端對端論點、firewall 安全、行動裝置與多媒體串流的 QoS。
深度探秘
網路要扛得住的五個要求
現代網路被要求的五件事
隨著 Internet 商業化與新用法爆發,網路被加上越來越嚴格的要求:
- scalability(可擴展性):Internet 的主機數量幾乎要追上全球人口,可能達數十億節點。當年設計的定址與繞送機制竟撐住了,但仍需大改以應付下一波成長。
- reliability(可靠性):很多應用本來就能從通訊失敗中復原,所以網路不必保證完全無錯。
- security(安全):第一道防線通常是 firewall(防火牆)。
- mobility(行動性):筆電與手機常換位置,但 Internet 的定址與繞送是為固定裝置設計的。
- quality of service(QoS,服務品質):多媒體串流需要保證頻寬與有界延遲。
另外還有 multicasting(多點傳送):一對多的傳送,比一個一個寄更省、更耐故障。
現代網路要同時兼顧可擴展、可靠、安全、行動與服務品質這五大需求。
生活妙喻
端對端論點:誰該負責檢查?
寄重要文件時,誰負責確認沒丟?
end-to-end argument(端對端論點)是個超重要的觀念。它說:要不要保證『完全無錯』,最好交給最了解需求的兩端應用程式去處理,而不是硬塞給中間的網路。
生活比喻:你寄一份重要合約。郵局(網路)會盡力送到,但**「對方真的收到正確版本了嗎」這件事,最可靠的做法是你和對方自己**通個電話確認,而不是要求郵局保證每張紙都完美無缺。
為什麼?因為:
- 實體傳輸媒介本身其實很可靠,錯誤多半發生在收送兩端的軟體(例如收方來不及接封包、緩衝區溢位)。
- 中間網路就算做了保證,兩端往往還是得自己再檢查一次,等於白做工。
所以網路層只要『盡力而為』就好,真正的把關交給應用層。
端對端論點:可靠性檢查最好交給最了解需求的兩端應用,而非中間網路。
實用超能力
防火牆與服務品質怎麼落地
firewall 與 QoS 的真實樣貌
firewall 跑在 gateway(組織網路入口的電腦)上,它收下並過濾所有進出組織的訊息,依安全政策放行或拒絕。它在 intranet 與外面的 Internet 之間畫出一條保護邊界。
flowchart LR Internet[外部 Internet] --> FW[防火牆 在 gateway 上] FW --> Intranet[組織內部 intranet] FW -.拒絕可疑訊息.-> Internet
但防火牆會擋住很多分散式應用,所以更細緻的安全要靠加密技術做端對端的認證與隱私(通常在通訊子系統之上的層次處理)。對行動裝置與外部節點的安全連線,可用 VPN(virtual private network)。
至於 QoS:傳影片需要保證的頻寬與有界的延遲。一段壓縮影片約需 1.5 Mbps,未壓縮則高達 120 Mbps。一般 Internet 不保證 QoS,所以即時影片品質常會抖動。
防火牆在組織入口過濾流量,而細緻安全與 QoS 需要額外機制如加密與資源保留。
最了解需求的是兩端,由它們負責正確性檢查最可靠;中間網路盡力而為即可。
它站在組織入口檢查所有進出的訪客(訊息),依規定放行或拒絕,保護裡面的住戶。
本節字彙
網路的種類:從口袋到全世界
用範圍、頻寬、延遲三個維度比較各類有線網路,理解 segment、router 等角色。
有線網路家族:PAN、LAN、MAN、WAN
用範圍、頻寬、延遲三個維度比較各類有線網路,理解 segment、router 等角色。
深度探秘
用範圍把網路分門別類
網路依『涵蓋範圍』分類
網路常用涵蓋範圍來命名,但要小心:這些名字同時也代表不同的傳輸技術與底層協定,不只是距離。
| 類型 | 範圍 | 特性 |
|---|---|---|
| PAN(個人區域網路) | 隨身、數公尺 | 連接個人裝置,低成本低耗能 |
| LAN(區域網路) | 1–2 公里 | 高頻寬、低延遲,單一媒介連接 |
| MAN(都會區域網路) | 數十公里 | 跨城市,DSL、cable modem 屬此類 |
| WAN(廣域網路) | 全球 | 跨組織跨城市,靠 router 轉送 |
在 LAN 裡,一段服務某樓層或部門的纜線叫 segment(網段),同一網段內不需繞送,因為媒介直接連接所有電腦。
網路依範圍分為 PAN、LAN、MAN、WAN,但名稱也代表不同的傳輸技術。
生活妙喻
從你的口袋到全世界
想像層層放大的生活圈
- PAN 像你隨身攜帶的東西:手機、耳機、手錶彼此相連,就在你身上方圓幾公尺。
- LAN 像一棟辦公大樓內部:所有人共用同一條走廊(單一媒介),找人不用『繞路』,速度快又即時。
- MAN 像一座城市的公共運輸:把市內各區用高頻寬纜線串起來,距離可達 50 公里。
- WAN 像國際快遞網:要跨城市、跨國家,包裹(封包)得經過一站站的轉運中心(router)才能到。
flowchart TD PAN[PAN 隨身數公尺] --> LAN[LAN 大樓內 1到2公里] LAN --> MAN[MAN 城市內數十公里] MAN --> WAN[WAN 跨國全球]
範圍越大,封包要轉的『站』越多,延遲也越高。
範圍從 PAN 到 WAN 逐層放大,越大的網路通常要經過越多 router、延遲越高。
實用超能力
讀懂效能表,挑對網路
用三個維度比較
比較不同網路時,看三個數字:範圍、頻寬、延遲。
LAN(Ethernet) 1–2 km 10–10000 Mbps 1–10 ms
WAN(IP routing) 全球 0.01–600 Mbps 100–500 ms
MAN(ATM) 2–50 km 1–600 Mbps 約 10 ms
為什麼 WAN 延遲那麼高?因為:
- 每經過一個 router 都會增加交換延遲。
- 連光速都有極限:訊號從歐洲到澳洲約 0.13 秒,經地球同步衛星約 0.20 秒。
而 LAN 為什麼快?因為同一網段內媒介直接相連、不需繞送,總頻寬高、延遲低(除非流量極大)。Ethernet 從 10 Mbps 一路演進到 10 Gbps,是有線 LAN 的霸主。
設計分散式系統時,知道資料會走哪種網路,就能預期它有多快。
用範圍、頻寬、延遲三個維度比較網路;LAN 因無需繞送而快,WAN 因多跳與光速極限而慢。
範圍越大要經過越多轉運站(router),延遲也越高,呼應四類網路的特性。
同一網段媒介直接連接所有電腦,所以不需要 router 來決定路徑。
本節字彙
無線網路與 internetwork
認識 WPAN、WLAN、WMAN、WWAN,以及把所有異質網路整合成單一虛擬網路的 internetwork 概念與其常見錯誤型態。
深度探秘
無線家族與『網路的網路』
無線版本與 internetwork
每種有線網路幾乎都有對應的無線版本:
| 無線類型 | 對應 | 例子 |
|---|---|---|
| WPAN | PAN | Bluetooth |
| WLAN | LAN | WiFi(802.11) |
| WMAN | MAN | WiMAX(802.16) |
| WWAN | WAN | 3G/4G 手機網路 |
而 **internetwork(網際網路)**是把許多異質網路串連、整合成『單一資料通訊媒介』的通訊子系統。Internet 就是最典型的例子,由數百萬個 LAN、MAN、WAN 組成。
internetwork 靠 router 與 gateway 連接,再用一層軟體負責跨網路的定址與傳輸,效果就像一個覆蓋在底層網路之上的虛擬網路。
無線網路是有線網路的對應版本;internetwork 是把異質網路整合成單一虛擬網路。
生活妙喻
把各國鐵路接成一張票
internetwork 像跨國聯運車票
想像歐洲各國的鐵路系統,每國軌距、票券、語言都不一樣(這就是異質網路)。要讓旅客拿一張票就能從巴黎搭到羅馬,需要:
- 一套共通的編號方式(不管哪國車站都有統一編號)。
- 一套共通的規則(票怎麼用、怎麼轉乘)。
- 轉乘中心(router、gateway)幫你在不同系統間接駁。
這就是 internetwork 做的事:用一層『覆蓋層』把所有底層網路的差異藏起來,旅客(資料)感覺自己在一張完整的網路上移動。
flowchart TD A[Ethernet 區網] --> R[router 或 gateway] B[WiFi 無線網] --> R C[WAN 廣域網] --> R R --> V[單一虛擬網路 internetwork]
openness(開放性)需要這種可擴展、能整合的網路,這正是 internetwork 帶來的好處。
internetwork 用一層覆蓋層藏起底層異質網路的差異,像跨國聯運讓你一票到底。
實用超能力
預期網路會出哪些錯
不同網路會出哪些『包裹意外』
設計分散式系統時,要先預期網路可能出的錯,才能寫出穩健的程式:
- 封包遺失(lost):最常見的原因其實不是傳輸媒介壞掉,而是交換節點或目的地處理不及、緩衝區溢位而丟棄封包。無線網路還會因外部干擾頻繁掉包。
- 亂序到達(out of order):當每個封包各自獨立繞送(主要在 WAN),它們可能走不同路徑而先送後到。
- 重複到達(duplicate):通常是寄送方以為封包丟了而重傳,結果原件和重傳件都到了。
處理不及/緩衝溢位 → 遺失(所有網路最常見)
外部干擾 → 遺失(無線網路特有)
各自獨立繞送 → 亂序
誤判遺失而重傳 → 重複
記住這三種意外,你的程式就知道不能假設『送出去就一定原封不動、依序、只到一次』。
封包可能遺失、亂序、重複;最常見原因是緩衝溢位,無線網路另有干擾問題。
用共通編號、共通規則與轉乘中心,把異質網路整合成旅客(資料)感覺得到的單一網路。
對應緩衝區溢位造成遺失,以及誤判遺失重傳造成重複。
本節字彙
網路運作原理:封包如何穿越世界
理解為何把訊息切成封包,並比較 broadcast、circuit switching、packet switching、frame relay 四種交換方式。
封包交換與交換方式
理解為何把訊息切成封包,並比較 broadcast、circuit switching、packet switching、frame relay 四種交換方式。
深度探秘
為什麼要把訊息切成封包
packet switching 是一切的基礎
所有電腦網路的根基,是 1960 年代發展出的 packet switching(封包交換)技術。它讓送往不同目的地的封包共用同一條鏈路——這跟傳統電話用的 circuit switching(獨佔線路)完全不同。
傳訊息前,會先把它切成一個個封包(packet):一段受限長度的位元序列,外加足夠的定址資訊(來源與目的地)。
為什麼要限制封包長度?
- 讓每台電腦都能配置足夠的緩衝區容納最大可能的封包。
- 避免長訊息霸佔通道,造成其他人苦等通道空出來。
通訊是非同步的:訊息會在不定的延遲後抵達,因為封包穿越網路所需的時間會變動。
packet switching 把訊息切成小封包,讓不同目的地的封包共用同一條鏈路。
生活妙喻
包場專線 vs. 共用郵政
四種交換方式像四種寄送服務
- broadcast(廣播):不做任何交換,全部喊給每個人聽,由接收者自己挑出寄給自己的。像里長拿大聲公廣播,誰有事誰自己注意。Ethernet 就是廣播式。
- circuit switching(電路交換):像打傳統電話——先拉一條專線從你到對方,整通電話都獨佔這條線。沒在講話時線路也空著浪費。
- packet switching(封包交換):像郵政系統——不拉專線,每個封包在每個轉運站先存下來、再轉發(store-and-forward),一站站接近目的地。
- frame relay(訊框中繼):像高速分揀帶——封包(frame)不整個存下來,只看前幾個位元就邊看邊轉,速度極快。ATM 是代表。
flowchart TD A[要傳訊息] --> B[broadcast 全部喊] A --> C[circuit 拉專線獨佔] A --> D[packet 存下再轉發] A --> E[frame relay 看前幾位元即轉]
broadcast 全喊、circuit 拉專線、packet 存轉發、frame relay 邊看邊轉。
實用超能力
延遲從哪裡來、怎麼降低
store-and-forward 的延遲與 frame relay 的解法
在 store-and-forward 網路中,每個節點切換一個封包要幾十微秒到幾毫秒。它的下限由頻寬決定,因為整個封包必須先收完,才能往下轉發。
所以即使短封包,在 Internet 上也常要花到 200 毫秒才抵達。但即時應用(電話、視訊會議)需要低於 50 毫秒才能維持高品質對話。
frame relay 的妙處:它不等整個封包收完,只看前幾個位元就決定怎麼轉,封包像一串位元流『穿過』節點,而非停下來存好。高速 ATM 因此能在幾十微秒內穿越多節點。
store-and-forward:收完整個封包 → 才轉發(延遲較高)
frame relay: 看前幾位元 → 邊看邊轉(延遲極低)
想壓低延遲、做即時應用,就需要 frame relay 這類『不整個存』的交換方式。
store-and-forward 須收完整包才轉發故延遲高,frame relay 只看前幾位元邊看邊轉故延遲低。
電路交換獨佔線路、沒講話也佔著;封包交換共用線路、每站存下再轉發。
不把整個封包停下來存好,只看前幾個位元就轉發,大幅降低延遲。
本節字彙
協定與分層:OSI 七層與封裝
認識 protocol 的兩大組成、分層如何把複雜度切開,以及 encapsulation 如何一層層加上標頭。
深度探秘
協定是什麼?分層又為何重要
protocol:通訊的共同規則
**protocol(協定)**是一組眾所周知、用來讓程式間溝通的規則與格式。它有兩個重點:
- 訊息交換的順序該怎麼走。
- 訊息中資料的格式長怎樣。
有了共通協定,分散式系統的各個元件就能各自獨立開發、用不同語言寫、跑在不同架構的電腦上,仍能互通。
分層(layering)
網路軟體排成一層層的階層。每一層:
- 對上層提供一個服務介面(延伸了底層的能力)。
- 透過本地程序呼叫和上下層溝通。
看起來像是『同層直接對話』,其實資料是一層層往下傳、往上收。最底層是 physical layer(實體層),由纜線、光纖、無線等媒介與訊號電路組成。
協定規定訊息順序與格式;分層讓每層只對上下層負責,把複雜度切開。
生活妙喻
一封信的層層信封
encapsulation 像一層層套信封
encapsulation(封裝)是分層的核心動作。在送出端,每一層都把上層交來的資料包進自己格式的信封,加上自己的標頭(header),再交給下一層。接收端則反過來,一層層拆封。
生活比喻:你寫了一張卡片(應用層訊息),然後:
- 裝進一個寫了收件人名字的小信封(presentation/session)。
- 再套一個寫了郵遞區號的大信封(transport:加上 port)。
- 最後貼上國際運送標籤(network:加上 IP 位址)。
每個信封上的標頭,都告訴接收端『裡面那層該交給誰處理』。
flowchart TD M[應用層訊息] --> T[加上 transport 標頭] T --> N[加上 network 標頭] N --> D[加上 data link 標頭] D --> P[實體層送出位元]
標頭裡會記錄『上一層的協定型別』,這樣接收端才知道該用哪個軟體元件拆封。
封裝就是每層把上層資料包進自己的信封並加標頭,接收端再逐層拆開。
實用超能力
OSI 七層與分層的代價
OSI 七層參考模型
ISO 制定的 OSI 七層參考模型是定義協定的框架(不是某套具體協定):
| 層 | 負責 | Internet 例子 |
|---|---|---|
| Application | 滿足特定應用的通訊需求 | HTTP, FTP, SMTP |
| Presentation | 與機器無關的資料表示、加密 | TLS |
| Session | 可靠性與復原 | SIP |
| Transport | 處理訊息、定址到 port | TCP, UDP |
| Network | 在網路間傳封包、繞送 | IP |
| Data link | 在直接相連的節點間傳封包 | Ethernet MAC |
| Physical | 用類比訊號傳位元 | Ethernet 基頻訊號 |
Internet 並未完全照搬:應用/展示/會話三層常合併成單一 middleware 層或各應用自理,且 session 與 transport 整合。
分層的代價
分層雖簡化了介面,但有效能成本:N 層協定傳一個訊息,要轉移 N 次控制權、複製 N 份資料(封裝),導致實際傳輸率遠低於網路頻寬。
OSI 七層是定義協定的框架;分層帶來模組化的好處,也帶來複製資料與轉移控制的效能成本。
每層協定把上層資料包進自己的封包並加標頭,接收端再逐層拆封,對應封裝過程。
每層只對上下層提供與使用服務,把整體複雜度切成可獨立開發的模組。
本節字彙
埠、位址、封包遞送與繞送
理解 port 與 transport address、MTU 與分段,datagram 與 virtual circuit 兩種遞送,以及 distance-vector 繞送演算法。
深度探秘
找到正確的『門牌』與『房間』
port、address 與 MTU
資料要送到對的電腦、再送到對的程式,需要兩層定址:
- network address(網路位址):唯一識別一台主機,讓它能被找到(如 IP 位址)。
- port(埠):主機上由軟體定義的目的點,連到特定程序。
合起來就是 transport address = 網路位址 + port number。
眾所周知的服務有固定 contact port(由 IANA 登記),例如 HTTP 是 80、FTP 是 21。1023 以下是受限的 well-known ports。
MTU 與分段
網路層封包的資料欄位有最大長度,稱 MTU(maximum transfer unit)。Ethernet 的 MTU 是 1500 bytes。若訊息超過 MTU,就得分段成多個封包,附上序號以便重組。
transport address = 網路位址 + port;超過 MTU 的訊息要分段並用序號重組。
生活妙喻
兩種寄送哲學
datagram vs virtual circuit
網路層遞送封包有兩種哲學:
- datagram(資料報):像寄明信片——每張都寫上完整地址,一槍打完就不留記錄;每張可能走不同路線,可能亂序到達。IP、Ethernet 都是這種。
- virtual circuit(虛擬電路):像先訂好一條固定路線再開始寄——傳輸前先建立路徑,沿途每個節點記下『下一站走哪』;之後每個封包只帶虛擬電路編號,不必再寫完整地址。ATM 是代表。
flowchart TD A[要送封包] --> B[datagram 每封寫完整地址各自走] A --> C[virtual circuit 先建路徑封包只帶編號]
注意:這跟 transport 層的 connectionless(UDP)/ connection-oriented(TCP)是不同層的概念,別搞混——兩者可任意組合。
datagram 像明信片各自獨立,virtual circuit 像先訂好路線再逐包沿用。
實用超能力
繞送表怎麼算出最短路
routing:逐跳找路
除了 Ethernet 這種全連接的 LAN,其他網路都需要 routing(繞送)。router 在每個連接點,負責把封包**逐跳(hop by hop)**轉到目的地。
繞送演算法有兩部分:
- 決定每個封包走哪條路(要快又有效率)。
- 動態更新對網路的認識(依流量與故障)。
經典的 distance-vector(距離向量)演算法(Bellman-Ford)這樣運作:每個 router 維護一張繞送表,每列記著『到某目的地,下一站走哪條 link、成本多少(幾跳)』。
router 用 RIP 定期把自己的表摘要送給鄰居:
收到鄰居的表時:
若有到新目的地的路 → 加進來
若有更低成本的路 → 更新
成本記得 +1(因為多走一跳到鄰居)
當某 link 故障,就把相關成本設為無限大並廣播出去,最終會收斂到新的最佳路。Internet 中 RIP 每 30 秒傳一次以維持穩定。
distance-vector 用繞送表記錄到各目的地的下一跳與成本,靠與鄰居交換表逐步收斂到最佳路。
datagram 每封獨立、可能亂序;virtual circuit 先建路徑、封包只帶編號沿用。
網路位址定位主機,port 定位主機上的特定程序,合起來才是完整目的地。
本節字彙
壅塞控制與 internetworking 元件
認識網路超載時的壅塞控制,以及 router、bridge、hub、switch 與 tunnelling 如何把異質網路接起來。
深度探秘
當網路塞車時
congestion control:避免雪崩
網路的容量受限於鏈路與交換節點的效能。當負載逼近容量,封包會在節點排隊,佇列越長到最後緩衝區滿,節點就只能丟棄封包。
問題在於:丟棄已經消耗過資源的封包,等於浪費;而重傳又要花同樣的資源。
經驗法則:當負載超過約 80% 容量,總吞吐量反而會因丟包而下降。
congestion control(壅塞控制)的核心想法:與其讓封包跑到塞爆的節點才被丟掉,不如在更早的節點先攔住,寧可增加延遲也不要崩潰式的吞吐量下降。
做法是通知沿途節點『塞車了,降低傳送率』。datagram 網路(IP、Ethernet)靠端對端控制:寄送方根據從接收方得到的資訊(如丟包、choke packet)來降速。
負載超過約 80% 容量吞吐量會崩跌;壅塞控制靠及早攔住封包並通知降速來避免。
生活妙喻
把異質網路接起來的『五金行』
internetworking 元件大集合
要把許多異質子網接成一個 internetwork,需要幾種角色不同的裝置:
- router(路由器):跨網路轉送封包,維護繞送表,依目的地把封包送到正確的出口。像城際轉運中心。
- bridge(橋接器):連接不同型別的網路。
- hub(集線器):單純把多段 Ethernet 接起來,收到的封包全部轉送到每一段。像老式廣播喇叭。
- switch(交換器):類似 router 但只服務區域網路;只把封包送到目的主機所在的網段,減少其他網段的壅塞。像聰明的分信員。
flowchart TD H[hub 全部轉送] --> note1[每段都收到副本 較易壅塞] S[switch 只送相關網段] --> note2[減少其他網段壅塞]
hub 與 switch 最大差別:hub 全部轉送、switch 只送相關網段。
router 跨網路轉送、switch 只送相關網段、hub 全部轉送、bridge 連接異型網路。
實用超能力
tunnelling:穿越異族領土
tunnelling:把封包包起來偷渡
有時兩個相同型別的網路,中間隔著一個『異族』網路。tunnelling(隧道)就是一個軟體層,把封包封裝後讓它穿越這片異質環境。
生活比喻:山的兩邊都是同一條公路(同型網路),中間隔著一座山(異質網路)。挖一條隧道,車子(封包)就能直接開過去,完全不必管山裡的地形——隧道對車子是透明的。
真實應用:
- IPv6 遷移:IPv4 大海中有 IPv6『小島』,島之間把 IPv6 封包封裝進 IPv4 封包偷渡過去。
- MobileIP:從行動主機的『老家』建一條隧道把封包轉送給它。
- IP multicast、PPP 也用類似手法。
隧道入口:把封包封裝進外層封包
中間網路:只看外層、照常轉送(看不到內層)
隧道出口:拆開外層、還原原始封包
妙處:中間的網路節點完全不用改造,就能讓特殊封包穿越。
tunnelling 把封包封裝後穿越異質網路,中間節點不必改造就能轉送,如 IPv6 遷移與 MobileIP。
hub 把封包轉送到每一段,switch 只送到目的主機所在網段,減少壅塞。
把封包封裝進外層偷渡過異質網路,中間節點只看外層、不必改造。
本節字彙
Internet 協定:TCP/IP 的內幕
理解 TCP/IP 三層架構、IP 的盡力而為遞送,以及 IPv4 位址結構、class A/B/C 與位址短缺問題。
TCP/IP 概觀與 IP 定址
理解 TCP/IP 三層架構、IP 的盡力而為遞送,以及 IPv4 位址結構、class A/B/C 與位址短缺問題。
深度探秘
TCP/IP 為什麼能一統天下
TCP/IP 協定族
Internet 源自 1970 年代的 ARPANET,核心就是 TCP/IP 協定族:
- TCP(Transmission Control Protocol):傳輸層,提供可靠、連線導向的串流。
- IP(Internet Protocol):底層的『網路』協定,IP datagram 是 Internet 的基本傳輸機制。
- 還有 UDP:不保證遞送的 datagram 傳輸協定。
TCP/IP 成功的關鍵:獨立於底層傳輸技術。不管底下是 Ethernet、ATM、電話線(PPP),IP 都能跑。使用者與程式看到的是單一虛擬網路,底層的多樣性被藏起來。
應用層:HTTP, FTP, SMTP ...
傳輸層:TCP(串流)/ UDP(訊息)
Internet 層:IP datagram
網路介面層:Ethernet 等底層網路
IP 提供 **best-effort(盡力而為)**遞送:不保證送達,封包可能遺失、重複、延遲或亂序——但只在底層網路故障或緩衝區滿時才發生。
TCP/IP 獨立於底層技術而能整合異質網路;IP 提供盡力而為、不保證的遞送。
生活妙喻
全球統一的門牌系統
IPv4 位址像門牌
IPv4 位址是一個 32 位元的數字,寫成四個十進位數字以點分隔(如 138.37.88.230),每個數字代表一個 byte(octet)。
它分成兩部分,就像門牌:
- network ID(網路識別):你在哪個『社區』(子網)。
- host ID(主機識別):你是社區裡的哪一戶。
位址要滿足三個要求:
- universal(普遍):任何主機都能寄給任何主機。
- 有效運用位址空間:當年覺得約 40 億個位址(2 的 32 次方)夠用,沒想到嚴重低估。
- 利於繞送,但位址本身又裝不下太多繞送資訊。
早期把位址分成 class A、B、C:A 給超大網路、B 給中型、C 給其他。這個分法後來證明很沒效率。
IPv4 是 32 位元位址,分成 network ID(社區)與 host ID(哪一戶),早期用 class A/B/C 劃分。
實用超能力
為什麼 IP 位址會不夠用
位址短缺的根源
class 制的問題在哪?
- 網管無法預測未來主機數量,遇到不確定時就傾向多要——明明可能不需要那麼多,卻申請 class B。
- 結果位址空間被分得又快又浪費。
大約 1990 年,大家發現照當時的配發速度,IP 位址大概 1996 年就會用光。於是採取三步:
- 開發新協定與定址方案 → IPv6(128 位元位址)。
- 改革配發方式 → CIDR(classless interdomain routing),更有效利用空間。
- 讓未註冊電腦透過 NAT 間接上網。
flowchart TD P[IPv4 位址即將用盡] --> A[IPv6 全新大位址] P --> B[CIDR 更有效配發] P --> C[NAT 私有電腦共用公開位址]
這三招(後兩節詳述)成功延後了危機,也讓 Internet 繼續擴張。
IPv4 因 class 制浪費而面臨枯竭,催生了 IPv6、CIDR 與 NAT 三大對策。
位址分成網路與主機兩部分,前者定位子網,後者定位子網內的特定主機。
IP 不在意底層是 Ethernet 或電話線,對上層呈現單一虛擬網路。
本節字彙
IP 繞送、CIDR、NAT 與 IPv6
認識 ARP 位址解析、預設路由、CIDR 如何擴充位址、NAT 如何讓私有網路上網,以及 IPv6 的 128 位元位址。
深度探秘
ARP 與預設路由
ARP:把 IP 位址翻成實體位址
IP 位址要送上實際的 Ethernet,得先換成 Ethernet 的 48 位元實體位址。負責翻譯的是 ARP(address resolution protocol)。
ARP 的聰明之處在於『廣播 + 快取』:
- 先查自己的 ARP cache,有就直接用。
- 沒有就廣播一個 ARP request:『誰是這個 IP?』
- 符合的主機回一個 ARP reply,附上自己的 Ethernet 位址。
- 把結果存進 cache,下次免廣播。
default route:用效率換表的大小
Internet 目的地超過百萬個,沒有 router 能記下全部。**default route(預設路由)**讓 router 對『表裡查不到的目的地』,一律走某條預設路徑。代價是某些封包可能多繞一兩跳,但換來小很多的繞送表。
ARP 用廣播加快取把 IP 翻成實體位址;default route 用些微繞送效率換取小很多的繞送表。
生活妙喻
CIDR:拆掉死板的房型限制
CIDR 像彈性切分土地
舊的 class A/B/C 像建商只賣『大豪宅、中別墅、小套房』三種固定房型——需要 300 戶的社區,小套房(class C,最多 255)不夠,只好買中別墅(class B),結果一堆空房浪費。
CIDR(classless interdomain routing)打破房型限制:可以把多個連續的 class C 位址打包給一個需要 300 戶的子網,也能把一個 class B 空間細切給多個子網。
關鍵是在繞送表加一個 mask(遮罩),用來決定『IP 位址的哪幾位元』要拿來比對。寫法像 138.37.95.232/29——/29 表示前 29 位元是網路部分。
138.37.95.232/29 → 遮罩 29 個 1,剩 3 個 0
→ 這群有 2^3 = 8 個位址
CIDR 讓位址配發像量身訂做,不再被 A/B/C 的死板尺寸綁住。
CIDR 用遮罩讓網路/主機的切分點任意,打破 class A/B/C 的固定尺寸,配發更彈性省位址。
實用超能力
NAT 與 IPv6:兩種擴張之道
NAT:一個公開 IP 撐起一整家
家裡很多裝置,卻只有一個公開 IP(如 83.215.152.95)。**NAT(network address translation)**讓它們都用私有位址(如 192.168.1.x),由 router 在出入口做翻譯:
- 內部裝置送封包出去時,router 把來源換成自己的公開 IP,並用一個虛擬 port 編號記住是誰送的。
- 外部回覆回來時,router 依目的 port 查表,還原成正確的內部裝置。
flowchart LR PC[內部 192.168.1.5] --> R[NAT router 記住 port 對應] R --> Net[外部 用公開 IP] Net --> R R --> PC
缺點:內部電腦預設難以當伺服器被外面主動連入(需手動設定 port 轉發)。
IPv6:根本解法
IPv6 用 128 位元位址,數量天文數字(約 3×10³⁸)。它還簡化標頭加快繞送、用 flow label 支援即時串流、內建安全與 anycast。遷移靠 tunnelling 形成 IPv6『小島』逐漸合併。
NAT 用 port 對應讓多台私有電腦共用一個公開 IP,IPv6 則用 128 位元位址徹底解決短缺。
用遮罩任意決定網路與主機的分界,避免 class B 那種買大屋空一堆的浪費。
對外只露一個公開 IP,router 用 port 對應把回覆轉給正確的內部裝置。
本節字彙
TCP 與 UDP:兩種傳輸服務
比較不保證遞送的 UDP 與可靠連線導向的 TCP,理解 TCP 的序號、流量控制、重傳、緩衝與校驗。
深度探秘
從 IP 到程式間的對話
TCP 與 UDP 補足了 IP 缺的什麼
IP 只負責電腦對電腦(用 IP 位址),但程式要的是程式對程式。TCP 與 UDP 這兩個傳輸協定,透過 **port number(16 位元整數)**把訊息送到主機內的特定程序。
兩者代表兩種哲學:
- UDP(User Datagram Protocol):幾乎就是 IP 的傳輸層複製品。一個 UDP datagram 包在 IP 封包裡,只多了來源/目的 port、長度與一個(選用的)checksum。不保證遞送、無建立成本、無確認訊息。
- TCP(Transmission Control Protocol):複雜得多,提供可靠、有序的位元組串流。
簡言之:UDP 輕量但不保證,TCP 厚重但可靠。
TCP 與 UDP 用 port 把資料送到特定程序;UDP 輕量不保證,TCP 厚重可靠。
生活妙喻
明信片 vs 掛號連續劇
兩種寄送服務
UDP 像寄明信片:
- 寫上去就丟進郵筒,便宜又快。
- 不知道對方有沒有收到,也不保證順序。
- 適合『偶爾掉一張也沒差』的情境,例如即時遊戲座標、串流影格。
TCP 像追一部需要按集數收看的掛號劇集:
- 寄出前要先雙方握手建立連線(connection-oriented)。
- 每一集都編號(sequence number),對方依序收齊才往下看。
- 收到會回確認(acknowledgement),沒收到的會重傳。
- 寄方還會看對方的『收看速度』調整節奏(flow control),不把對方淹沒。
flowchart TD S[寄送方] -->|帶序號的 segment| R[接收方] R -->|ack 與 window 大小| S S -->|逾時未 ack 則重傳| R
TCP 用序號、確認、重傳、緩衝、校驗五招撐起『可靠』兩個字。
UDP 像寄明信片快但不保證,TCP 像握手後依序追劇、收齊確認、缺漏重傳。
實用超能力
flow control 與選用準則
TCP 的流量控制
TCP 怎麼避免把接收方或中間節點淹沒?靠 acknowledgement + window:
- 接收方每收到 segment 就記下序號,並不時回一個 ack,附上目前已收齊到第幾號,外加一個 window size。
- window size 告訴寄方:『下一次確認前,你最多還能再送這麼多』。
對互動式程式(如鍵盤輸入),資料量小又零碎,TCP 設一個本地緩衝逾時 T(典型 0.5 秒):資料等了 T 秒、或緩衝滿到 MTU,就送出,確保使用者很快看到打字結果。
怎麼選?
| 需求 | 選 |
|---|---|
| 要可靠、有序、不能掉資料 | TCP |
| 要輕量、低延遲、容許偶爾掉包 | UDP |
| 檔案傳輸、網頁、郵件 | TCP |
| 即時串流、DNS 查詢、線上遊戲 | UDP |
因無線網路常掉包,TCP 的流控對無線較不理想,這也是 WAP 等改用不同傳輸機制的原因之一。
TCP 用 ack 與 window 做流量控制避免淹沒接收方;需可靠選 TCP、需輕量低延遲選 UDP。
UDP 無建立成本、不確認、不保證遞送,適合容許偶爾掉包的即時應用。
TCP 連線導向,用序號、確認、重傳保證有序可靠的位元組串流。
本節字彙
DNS、MobileIP 與 firewall
認識把網域名稱轉成 IP 的 DNS、讓行動主機保留單一位址的 MobileIP,以及 firewall 的三種過濾層次。
深度探秘
DNS:把名字翻成位址
DNS:人記名字、電腦記號碼
人類記得住 www.amazon.com,記不住一串 IP 數字。DNS(Domain Name System)就負責把網域名稱翻成 IP 位址。
命名是階層式的(如 essex.ac.uk),反映組織結構,且與實體網路佈局完全無關。
DNS 由分散在 Internet 各處的伺服器程序實作:
- 每個 domain 至少有兩台 DNS 伺服器,持有其下的部分名稱樹。
- 查不到的名稱,就遞迴地向相關 domain 的伺服器發問,由右到左一段段解析。
- 解析結果會被快取,下次同 domain 的查詢就免再問別人。
沒有快取,根伺服器幾乎每次都會被查,形成嚴重瓶頸——快取是 DNS 能運作的關鍵。
DNS 把階層式網域名稱遞迴解析成 IP 位址,並靠快取避免根伺服器成為瓶頸。
生活妙喻
MobileIP:搬家也收得到信
MobileIP:行動主機的轉信服務
簡單上網的行動裝置可以每換一個地方就用 DHCP 拿一個新 IP。但若要讓別人始終用同一個 IP 找到它(例如它在跑伺服器),就需要 MobileIP。
生活比喻:你搬家了,但希望寄到老家地址的信還是收得到。做法是請『老家管理員』幫你轉信:
- home agent(HA,老家管理員):知道你目前在哪、幫你代收與轉送。
- foreign agent(FA,新住處管理員):在你新落腳處給你一個臨時的 care-of address,並通知 HA。
當信(IP 封包)寄到你老家位址,HA 把它封裝成 MobileIP 封包,透過tunnelling送到 FA,FA 再拆開交給你。
flowchart LR Sender[寄件者寄到家用位址] --> HA[home agent 代收] HA -->|tunnel 封裝轉送| FA[foreign agent] FA --> MH[行動主機]
HA 還會把 care-of address 告訴寄件者,讓支援 MobileIP 的寄件者之後直接寄、省去繞路。
MobileIP 讓行動主機保留單一 IP,靠 home agent 與 foreign agent 加 tunnelling 把封包轉送過去。
實用超能力
firewall 的三層過濾
firewall:在三個層次把關
組織內電腦軟體安全參差不齊,難免有弱點。firewall 的目的就是監控並控制所有進出 intranet 的通訊,依安全政策放行或拒絕。它常由多個程序在不同協定層次過濾:
| 層次 | 做什麼 |
|---|---|
| IP packet filtering | 看 IP 封包的來源/目的位址、port,決定放行或拒絕(例如擋掉外部存取 NFS) |
| TCP gateway | 檢查 TCP 連線請求與 segment 正確性(擋掉畸形 segment 的攻擊) |
| Application-level gateway | 當應用程式的 proxy,逐一審核(如允許特定使用者 Telnet 到特定主機) |
常見配置:用 router/filter 做 IP 過濾,加一台 **bastion(堡壘主機)**跑 TCP 與應用層 gateway;安全要求高時用兩台 router/filter 夾住 bastion。
延伸:VPN 用 IP 層的加密安全通道,把防火牆的保護邊界延伸到外部使用者或異地 intranet。
firewall 在 IP、TCP、應用三個層次過濾進出流量,常搭配 bastion;VPN 再把保護邊界延伸到外部。
DNS 把好記的網域名稱翻成電腦用的 IP 位址,並靠快取加速重複查詢。
home agent 代收寄到家用位址的封包,透過 tunnel 轉送到 foreign agent 再交給你。
本節字彙
真實案例:Ethernet、WiFi 與 Bluetooth
理解 Ethernet 的廣播式運作、MAC 位址、CSMA/CD 的載波偵聽、碰撞偵測與 back-off,以及交換式 Ethernet 的效能。
Ethernet:CSMA/CD 與碰撞處理
理解 Ethernet 的廣播式運作、MAC 位址、CSMA/CD 的載波偵聽、碰撞偵測與 back-off,以及交換式 Ethernet 的效能。
深度探秘
Ethernet 的運作核心
Ethernet 是廣播式的 contention bus
Ethernet 1973 年生於 Xerox PARC,是第一個高速區域網路。它的運作核心是 CSMA/CD:
carrier sensing, multiple access with collision detection(載波偵聽、多重存取、碰撞偵測)
Ethernet 屬於 contention bus(爭用匯流排):所有主機共用單一傳輸媒介。管理媒介存取的協定叫 MAC(medium access control)。因為一條線連所有主機,MAC 同時兼了 data link 層與 network 層的功能。
通訊方式是廣播封包:所有站持續『聽』媒介,比對封包裡的目的地位址與自己的硬體位址,符合才收下,否則忽略。
每個網路介面有全球唯一的 MAC 位址(48 位元),由製造商從 IEEE 配發的範圍寫死進硬體。這套 MAC 位址後來也被 WiFi、Bluetooth 採用。
Ethernet 是廣播式 contention bus,用 CSMA/CD 管理共用媒介,每介面有全球唯一的 48 位元 MAC 位址。
生活妙喻
禮貌的會議室發言規則
CSMA/CD 像會議室發言禮儀
想像一間沒有主席的會議室,大家共用『空氣』這個媒介說話。為避免吵成一團,有三條規則:
- carrier sensing(先聽再說):想發言前先聽,有人在講就等,沒人講才開口。
- collision detection(邊講邊聽):開口後仍繼續聽,如果聽到自己的話和別人的混在一起,就知道『撞車』了(collision)。
- back-off(撞到先隨機冷靜一下):發生碰撞後,每個人各自隨機等一段時間再重講,避免大家又同時開口。若再撞,等待範圍加倍,最多重試 10 次。
flowchart TD
A[想傳送] --> B{媒介有訊號嗎}
B -->|有| A
B -->|無| C[開始傳並邊聽]
C --> D{偵測到碰撞}
D -->|否| E[傳送成功]
D -->|是| F[送干擾訊號 隨機 back-off 後重試]
F --> A
妙處:完全不需要中央控制或同步,各站自己就能協調用線。
CSMA/CD 像無主席會議:先聽再說、邊講邊聽偵測撞車、撞到就隨機冷靜再重試,無需中央控制。
實用超能力
最小封包、效率與交換式 Ethernet
為什麼封包有最小長度
Ethernet 封包介於 64–1518 bytes。為什麼要有最小 64 bytes?因為訊號從一端傳到另一端要時間 τ。若封包太短,某站可能在另一端的封包還沒傳到前就傳完了,碰撞偵測不到,造成資料毀損卻無人察覺。最小長度確保碰撞一定被偵測到。
效率
碰撞的『機會窗口』是封包開始傳後的 2τ。對 1 公里纜線,τ 不到 5 微秒,碰撞機率低,通道利用率可達 80–95%。但超過 50% 利用率時,爭用造成的延遲就明顯了。
交換式 Ethernet:把爭用幾乎消滅
現代 Ethernet 多用 switch(而非 hub):每台主機獨享一個網段,網段上只有寄給它的封包。若流量來自單一來源,毫無爭用——效率近 100%、延遲穩定。爭用只可能發生在 switch 內部,而 switch 常能並行處理多個封包。
因此輕載的交換式 Ethernet 接近 100% 效率與穩定低延遲,連即時/QoS 關鍵應用也常成功採用。
最小封包長度保證碰撞被偵測;交換式 Ethernet 讓每台主機獨享網段、幾乎無爭用、效率近 100%。
對應載波偵聽、碰撞偵測與 back-off,讓各站不需中央控制就能協調共用媒介。
switch 讓每台主機獨享網段,幾乎無爭用,效率近 100%、延遲穩定。
本節字彙
WiFi 與 Bluetooth:無線的挑戰
理解無線帶來的 hidden station、fading、collision masking 問題,以及 802.11 用 CSMA/CA 與 RTS/CTS 解決,並認識 Bluetooth WPAN。
深度探秘
無線為何不能照搬 Ethernet
無線打破了 Ethernet 的前提
IEEE 802.11(WiFi)把 Ethernet 的載波偵聽原理延伸到無線。但無線有個致命前提被打破:訊號強度在空間中並不均勻。這讓 Ethernet 的碰撞偵測失效,主要有三種狀況:
- hidden station(隱藏站):A 與 D 都想送給基地台 E,但 A、D 之間有障礙物互相聽不到,於是 A 偵測不到 D 正在傳,貿然開口造成 E 端碰撞。
- fading(衰減):電磁波依平方反比衰減,距離一遠就聽不到對方,載波偵聽與碰撞偵測雙雙失效。
- collision masking(碰撞遮蔽):自己發出的訊號永遠比遠方訊號強得多,會蓋過遠方訊號,所以同時傳送也偵測不到碰撞。
WiFi 還用 infrastructure network(透過基地台/access point 連到有線網)或 ad hoc network(裝置之間臨時自組)兩種型態。
無線訊號強度不均,使 Ethernet 的碰撞偵測因 hidden station、fading、collision masking 而失效。
生活妙喻
CSMA/CA:先舉手預約發言
從 CD 到 CA:改用『預約』
既然『邊講邊聽偵測撞車』在無線行不通,802.11 改用 CSMA/CA(collision avoidance,碰撞避免),核心是預約時槽:用 RTS/CTS 一對短訊息:
- 想送的人先送 **RTS(request to send)**給接收方,註明要用多久。
- 接收方回 CTS(clear to send),重述這段時長。
效果:
- 聽得到寄送方的站,會收到 RTS,記下這段時間別出聲。
- 聽得到接收方的站,會收到 CTS,同樣安靜。
flowchart TD S[寄送方送 RTS 註明時長] --> R[接收方回 CTS 重述時長] R --> Q[兩端附近的站都安靜下來] Q --> D[寄送方安心傳資料] D --> ACK[接收方回 ACK 確認]
生活比喻:吵雜大廳裡你先舉手大聲說『我要講 30 秒』,附近的人就先閉嘴,連聽不到你但聽得到對方的人,也因為對方回應而安靜——這正好解決隱藏站與衰減問題。
CSMA/CA 用 RTS/CTS 預約時槽,讓收送兩端附近的站都先安靜,避開隱藏站與衰減造成的碰撞。
實用超能力
Bluetooth:低功耗的隨身網路
Bluetooth:口袋裡的 WPAN
**Bluetooth(IEEE 802.15.1)**是 WPAN(無線個人區域網路),1999 年由 Ericsson 開發,用來在隨身裝置間傳低頻寬的數位語音與資料——手機、平板、耳機、鍵盤之間的連線都是它。
它的定位和 WiFi 不同:
| 比較 | WiFi(802.11) | Bluetooth(802.15.1) |
|---|---|---|
| 類型 | WLAN | WPAN |
| 範圍 | 約 150 m | 約 10–30 m |
| 頻寬 | 高(可達 54 Mbps 以上) | 低(約 0.5–2 Mbps) |
| 目的 | 取代有線 LAN、上網 | 連接隨身個人裝置 |
| 耗能 | 較高 | 低功耗 |
在典型的 NAT 家庭網路圖中,WiFi 裝置透過 access point 連到 router 上網,但 Bluetooth 裝置通常不直接接上 router,因此無法直接上 Internet——它的舞台是裝置與裝置之間的近距連線。
同家族還有 ZigBee(802.15.4),給更低頻寬、更省電的感測器網路。
Bluetooth 是低功耗、短距、低頻寬的 WPAN,專注於隨身裝置間連線,與主打上網的 WiFi 定位不同。
用 RTS/CTS 預約時槽讓收送兩端附近的站都閉嘴,解決聽不到對方的隱藏站問題。
兩站互相偵測不到對方訊號,卻同時傳給同一接收方而造成碰撞。