# Computer Networking — 1.3 The Network Core
contributed by <[`kaeteyaruyo`](https://github.com/kaeteyaruyo)>
###### tags: `Computer Networking`
![核心網路(圖中藍線部份)](https://img.tfd.com/cde/_BAKBONE.GIF)
現在我們已經知道了網路的邊緣是怎麼運作的,我們可以往更深處鑽研,看到網路的核心--一面由封包交換機組成的大網,連接起網路各處的終端設備。上圖中藍色線的部份就是**核心網路 (Network Core)**。
## 1.3.1 Packet Switching
網路上的應用程式,會在終端設備之間**交換訊息 (message)**。這些訊息會包含任何應用程式開發人員希望知道的資訊,像是控制訊號(例如:我們在「人類通訊協定」中看到的「安安」訊息)或是資料(例如: e-mail、 JPEG 照片、 MP3 音檔等)。為了將訊息從某個終端系統傳到另一個地方,訊號源 (source) 必須把過長的訊息拆成一段一段小小的片段,我們把這些小片段叫做**封包 (packets)**。在收發的兩台機器間,封包會經過一連串的通訊線路 (communication links) 還有**封包交換機 (packet switches)** (目前有兩類封包交換機佔最大宗:**路由器 (Routers)** 和**資料層交換機 (link-layer switches)**)。封包經過每一條通訊線路的時候都會以該線路的最大速度傳輸,也就是說,當一台信號源或是一台交換機要以傳輸速度是每秒 R 位元的線路送出 L 個位元的時候,其傳輸所需時間就會是 L/R 秒。
### Store-and-Forward Transmission
![](https://upload.wikimedia.org/wikipedia/commons/5/56/Store_and_forward-v1.gif)
大部分封包交換機在接收封包時,都會使用**儲存並轉發傳送機制 (store-and-forward transmission)**,意思就是說交換機必須先收到完整的封包內容,才可以再把它丟出去,像上圖那樣。
```
A ----- C ---- B
1[* ]...[** ]
2[***]
3[***]
```
* 想像一個簡單的網路,如上圖:只有兩台終端機器 A 和 B,中間用一個路由器 C 接起來。
* 路由器通常會有多條收封包的線 (incident link),因為它的工作就是接收其他電腦送來的封包,並且把它丟到另一條送封包的線 (outgoing link) 上。但這個例子比較簡單,它收和送封包的線都只有各一條。
* 今天 A 要送三個封包給 B, 每一個封包都是 L 位元那麼大。在上面圖例中這個時間點, A 已經送出了一部分的 1 號封包, 1 號封包的前半部分已經送到了路由器手上。
* 因為這台路由器使用的是 store-and-forwarding 傳送機制,因此,在這個時間點,路由器還不可以把已經收到的部份封包給丟出去,它必須先把這些位元**存起來 (store)**,存在一個 buffer 裡面。等到 1 號封包裡面所有的位元都已經送過來了,才可以開始把它**往外丟 (forward)**。
* 為了更了解 store-and-forward 傳送機制,我們來算算看這種機制下,從訊號源開始傳輸一個封包的那一刻起算,到目標收到完整的一個封包內容,總共會經過多少時間。(我們會先暫時忽略 1.4 才會提到的傳播延遲 (propagation delay),也就是我們會先假設位元在線路上是以接近光速的速度傳遞的)
1. 我們定義 A 開始傳輸的那一刻時間為 0 秒。
2. 如果線路傳輸速率是每秒 R 位元的話,那麼在 L/R 秒的時候,A 就已經完成了整個封包的傳輸,這時,路由器已經收到並儲存了完整的封包(忽略傳播延遲的話)。
3. 在 L/R 秒的時候,因為路由器已經接收到了完整的封包,所以他可以開始把封包往連接 B 的那條線路丟。
4. 在 2L/R 秒的時候,路由器也完成了整個封包的傳輸。現在 B 已經收到了完整的封包了。
5. 因此,整個封包傳遞的過程,會有 **2L/R** 秒的延遲。
* 如果我們不要等到整個封包來才轉送,而是在收到一個位元的瞬間就把該位元丟出去,那麼整個傳輸延遲就會降低到 L/R 秒(少了 2. 的那個等待時間)。但是我們在 1.4 將會提到,路由器是有必要等待並儲存整個封包的,因為在轉送之前,它必須對這個封包進行一些處理。
* 接下來我們來計算從訊號源開始傳送第一個封包,到目標收到完整的三個封包,總共會經過多少時間。
1. 就像先前講的一樣,在 L/R 秒的時候,路由器開始轉送 1 號封包。但同樣是在 L/R 秒的時候, A 也開始傳送 2 號封包了,因為 1 號封包已經完全傳送出去了。
2. 因此,在 2L/R 秒的時候,不僅 B 已經收到了完整的 1 號封包,路由器也收到了完整的 2 號封包。
3. 同樣道理,在 3L/R 秒的時候,B 收到了完整的 2 號封包,而路由器收到了完整的 3 號封包。
4. 最後,在 4L/R 秒的時候,B 終於收到了所有的完整封包。
* 如果我們將上述的過程給一般化為「**訊號源經由 N 個傳輸速度為每秒 R 位元的線路(經過 N - 1 個路由器)將一個大小為 L 的封包送給目標**」,則依據上面的邏輯,我們就可以定義端到端延遲 (end-to-end delay) 為:
$$d_{end-to-end} = N\frac{L}{R}$$
:::info
:speaker: **想一想**
如果是「**訊號源經由 N 個傳輸速度為每秒 R 位元的線路將 P 個大小為 L 的封包送給目標**」,這時延遲又會是多少呢?我們現在知道單純傳送**一個**封包的延遲是 $N\frac{L}{R}$ 秒,而在上面的範例中,我們可以看到如果有多個封包,每個封包的延遲會是一樣的,但是每一個封包都比他前面的封包晚 $\frac{L}{R}$ 秒送達目的地。所以總延遲就會是第一個封包的總延遲 $N\frac{L}{R}$秒 + 剩下的 P - 1 個封包各晚了 $\frac{L}{R}$ 秒,也就是:
$$d_{end-to-end} = N\frac{L}{R} + (P-1)\frac{L}{R} = (N+P-1)\frac{L}{R} $$
:::
### Queuing Delays and Packet Loss
每個封包交換機都接著數條線路。對於每一條線路,封包交換機都需要分配一個**輸出佇列 (output buffer / output queue)** 給他,用來暫存準備要往這條線路丟出去的資料。這個輸出佇列在封包交換中扮演著非常關鍵的角色。
* 當一個封包準備要往某條線路傳輸出去,卻發現該線路正在傳送其它封包的時候,他必須要先待在輸出佇列裏面等待線路完成當前的傳輸。
* 因此,除了 store-and-forward 的延遲之外,封包其實還會受到**佇列延遲 (queuing delays)** 的影響。這個延遲的大小不是一個定值,他會受到當前網路的壅塞程度影響。
* 由於 buffer 的大小是有限的,當一個交換機收到的封包非常多的時候,後來的封包抵達的時候可能會發現 buffer 已經滿了,這時候就會發生**掉包 (packet loss)**, 交換機必須選擇丟掉新來的封包或是 buffer 中正在等待的某一個封包。
```
[**]
A ---┐ ┌-- C
│ [**] │
├--- R1 ---- R2 ---┤
│ [**] │
B ---┘ [**] R3
[**] .... │
┌--┴--┐
D E
```
* 上圖展示了一個簡單的網路,當中封包用 `[**]` 來表示,一個 `*` 代表一個單位大小的資料,可以看到上圖中每個封包都一樣大。
* 假設 A 和 B 都要送資料給 E, 且直接連在他們身上的乙太網路線速度都是 100 Mbps, 另一端都直接連到第一台路由器 R1 上。 R1 會負責把他們丟到通往 R2 的線路上,這條線路的速度是 15 Mbps。
* 如果在某段很短的時間內,送往 R1 的流量超過了 15 Mbps, 那就會發生網路壅塞的現象。這時較晚抵達 R1 的那些封包必須在輸出佇列內等待往外送的線路完成現在的工作。
* 例如: 當 A 和 B 同時都連續送出了 5 個封包,那這大部分的封包都會被塞在 R1 裏面一段時間。
* 這跟我們現實生活中的許多情況很類似,就像我們在銀行或郵局等那些事務員完成他們的工作一樣。
* 關於佇列延遲,我們會在 1.4 提到更多細節。
### Forwarding Tables and Routing Protocols
先前,我們有提到路由器會從某一條線路接收封包,再把封包往另一條線路丟出去。但是,路由器到底是怎麼決定到底要把封包往**哪一條**線路丟出去的呢?其實在不同的電腦網路中,封包轉送會有不同的策略,這裡我們只簡單的介紹一下在網際網路中是怎麼做的。
* 在網際網路裡,每個終端系統都有一個地址,叫作 **IP**。每當訊號源想要送一個封包給另一台終端設備的時候,他就會在封包的標頭 (header) 裏面記錄目的地的 IP 位址。
* 就像郵政系統的地址一樣, IP 位址也具有階層式的架構。當一個路由器收到封包的時候,他會去查看這個 IP 位址的一部份,然後將這個封包轉發到另一個相鄰的路由器去。
* 更精確的說,每個路由器都有一個自己的**路由表 (forwarding table)**,用來記錄每一條出去的線路是通往哪一個(或是哪一個範圍的) IP。每當封包抵達時,路由器就透過查表的方式得知自己應該把該封包丟到哪一條線路上。
* 這種端到端傳送的作法就跟一個不看地圖只問路人怎麼走的司機是一樣的。
* 假設今天某甲要從台北去高雄的駁二。
* 他先問自己家附近的加油站說:「我要去高雄鹽埕區的駁二怎麼走啊?」加油站聽到最大的「高雄」的部份,就回說「喔你就上國道一號到開到高雄的建國交流道下去再問那邊的人ㄅ」
* 於是某甲就沿著國道一號開到高雄,下了建國交流道之後,他就問路邊的檳榔攤說「我要去高雄鹽埕區的駁二怎麼走啊?」檳榔攤的小姐聽到「鹽埕區」的部份,就跟他說「你就沿著五福路一直走,都不要轉彎,過橋之後就是鹽埕區了」
* 於是某甲就沿著五福路一直開,開到過了高雄橋,下車買了杯手搖杯再順便問店員說「我要去高雄鹽埕區的駁二怎麼走啊?」店員聽到「駁二」的部份,就指了指旁邊的一條路說「你這條路過去右轉就到了」
* 在上面的例子中,加油站的員工、檳榔店的小姐,還有手搖店的店員做的事情就是路由器做的事
* 我們現在知道路由器會看封包的目的地的位址來查路由表決定要把封包丟去哪一條線路。但還有另一個問題:那這個路由表又是怎麼生出來的?是要自己手動設定每一台路由器嗎?還是說有其它自動化的方式呢?這個問題我們在第五章會詳細說明,但是為了不要讓你好奇到死掉,這裡我們可以先簡單下結論:網際網路自己會用一系列特別的通訊協定來生出這張路由表。例如:某個通訊協定可能會去偵測每個路由器到每個目的地之間的最短路徑,再根據這個結果下去設定每個路由器的路由表。
* 那我們要怎麼看到封包是如何在網際網路上進行端到端傳輸的?你可以去 www.traceroute.org 這個網站上看看,選擇某個國家的某個機器當作起點,然後看看他是怎麼把封包送到你的電腦上的。(關於 Traceroute, 我們在 1.4 會有更詳細的說明)
## 1.3.2 Circuit Switching
除了**封包交換 (Packet Switching)** 之外,還有另一種透過交換機和線路傳送網路資料的方法,叫做**電路交換 (Circuit Switching)**。接著我們就來介紹使用電路交換的網路。
在電路交換的網路中,從訊號源到目標的整條線路是在資料轉送前就已經**預留好的**,且在整個傳輸過程中這整條線路資源都不會被釋放;而封包交換網路正好相反,它**不會預留**線路,而是只在需要轉送資料時才去要這條線路,所以有時候會需要等待(要排隊)。電路交換網路就像是那種需要先預約的餐廳,我們可能需要事先打電話訂位子,但一旦位子訂好了,我們一到餐廳就可以馬上坐下點餐;而封包交換網路則是那種不接預約的餐廳,雖然不用事先打電話,但是到餐廳的時候可能就要排隊等位子。
傳統的電話網路就是使用電路交換的網路。如果你要打電話給別人或是傳真給別人,你都必須先等電話嘟一陣子,這是因為電話網路正在建立通話者之間的連線。這條連線是一個**可信任的 (bona fide) 連線**。意思就是說,通話者的電話之間經過的所有交換機會負責維護這條連線,讓他不會講到一半斷掉。在電話網路的術語中,我們把這條連線叫做**電路 (Circuit)**。一旦電路被建立起來,在通話的期間,其傳輸速度會被維持在一個固定的數字(這個數字會是這條線路的最大速度的一部分)。因此,通話者之間保證可以以一個穩定的速度傳輸資料。
![](https://i.stack.imgur.com/zLEv9.jpg)
上圖展示了一個簡單的電路交換網路。在這個網路中,有四台交換機分別以四條線路彼此連接,因此,一台交換機可以同時服務四組通話連線。這些主機(電腦或是工作站之類的)都直接連到某一台交換機上。假設今天,左上角的主機 A 要和右下角的主機 B 進行資料傳輸,那就必須先建立起一條從 A 通往 B 的專用連線,因此連在他們身上的其中一條線路就會被佔用。從圖上可以看得出來,A 佔用了離他最近的交換機的第二條線路,而 B 則佔用了離他最近的交換機的第四條線路。因為每兩台交換機之間都有四條連線,所以每一條連線的傳輸速度就是最大速度的 25%。例如:如果今天任兩台交換機之間的傳輸速度是 1 Mbps,那麼 A 和 B 就可以用 250 kbps 的穩定速度來進行傳輸。
相較之下,如果今天 A 是使用封包交換網路(例如網際網路)送資料給 B,封包一樣會經過一系列的通訊線路,但是這些線路資源並不會事先被保留起來。所以如果有遇到任何一條線路塞車了,那麼封包就會被卡在某一台路由器上,造成延遲。網際網路會盡可能最快地將封包送達目的地,但是他們並沒有辦法保證封包什麼時候會送到。
### Multiplexing in Circuit-Switched Networks
電路交換中的線路有兩種多工的方式,分別是**分頻多工 (frequency-division multiplexing, FDM)** 和**分時多工 (time-division multiplexing, TDM)**。
![](http://www.myreadingroom.co.in/images/stories/docs/dcn/Frequency-Division%20Multiplexing.JPG)
* 如上圖所示,分頻多工的作法,就是將一條線路分成很多段不同頻率的頻譜(圖中紅藍綠三個色塊是不同的頻率)。每當要建立通話時,就分配一個固定的頻帶給這次的連線。
* 在電話網路中,這些頻帶的寬度通常都是 4kHz,其中「頻帶的寬度」,可想而知就被叫做**頻寬 (bandwidth)**。
* FM 電台廣播則是共享在 88 MHz 到 108 MHz 之間的頻道,每一個電台都會被分配到屬於自己的一個頻帶。
![](https://i.imgur.com/G7pVupR.png)
* 而分時多工的作法,則是把時間切分成很多個等長的**時段 (time frame)**(上圖中一組 ABCD 是一個時段),再把每一個時段切成固定數量的**時槽 (time slot)**(上圖的 A 是一個時槽,B 也是一個時槽,以此類推)。每當要建立通話時,就分把每一個時段中的某一個時槽分給這次的連線(例如:最上方的通話都使用 A 這個時槽)。
* 在這種方法中,線路的傳輸速率就是每秒傳輸的時段數乘上時槽的容量。例如:有一條線路每秒可以傳送 8000 個 frame,而每一個 slot 可以乘載 8 bits,那這每一個連線的速度就是 8000 * 8 = 64 kbps。
* 封包交換的擁護者指出了一些電路交換的缺點,他們認為:
* 電路交換是很浪費資源的,因為這些專用的線路在 **silent period** (沒有人講話的時候)時是完全沒有在工作的。
* 比如打電話的時候,在通話的兩個人都沒有講話的這段期間,這些線路資源(該線路佔據的頻帶或是時槽)是沒辦法分給其他正在通話的線路的。
* 又比如有一個放射科醫師使用了電路交換的方式連到了一台照 X 光的機器,他連上了機器後、照了一張照片,看著那張照片思考了一下,然後又要了另一張照片。在他「看著照片思考」的那段期間,線路資源沒有在使用,也就是被浪費掉了。
* 為了事先建立並且維護這條端到端的穩定連線,電路交換也需要額外設計複雜的信令來協調這一路上的所有交換機。
* 最後,我們來試著計算看看電路交換所需的傳輸時間。
* 假設今天 A 電腦要經由一個電信交換網路傳送一個大小是 640,000 位元的檔案給 B 電腦,這個網路使用分時多工,每一個 frame 都被分成 24 個 slot,並且一條線路的傳輸速度上限是 1.536 Mbps,而建立連線所需的時間是 500 ms。
* 每一個連線的傳輸速度 = 1.536 Mbps / 24 slots = 64 kbps
* 傳輸時間 = (640,000 b / 64 kbps) + 0.5 s = 10.5 s
* 要注意這個傳輸時間是固定的。無論今天是只有一個連線還是有上百個連線,傳輸速度都是各自獨立的。
* 當然,實際上的延遲也必須包含傳播延遲 (propagation delay),這我們等到 1.4 再詳談。
### Packet Switching Versus Circuit Switching
現在我們已經認識了封包交換和電路交換,讓我們來比較這兩者。封包交換的反對派認為,封包交換不適合使用在即時系統 (real-time services) 中(像是電話、或是視訊會議),因為佇列延遲造成的傳輸延遲是變動且不可預期的。而他的支持者們則認為封包交換可以提供相較於電路交換更高的資料傳輸量,而且實作起來比較簡單、有效率、成本較低。在 [MolineroFernandez 2002] 中,記載了封包交換和電路交換兩派的擁護者之間的辯論。簡單來說,不喜歡打電話訂餐廳的人就會比較喜歡封包交換的作法。(XDD)為什麼封包交換會比較有效率呢?讓我們來分析以下兩個實例:
* 第一個例子:有一群使用者正在共享一條傳輸上限是 1 Mbps 的線路。每個使用者會時不時送出一些資料:當他們要送資料時,他們每次會送 100 kbps 的資料,送完之後,他們就會有一段時間什麼也不做(不會送出資料)。使用者大概只會花 10% 的時間在送資料(剩下的 90% 就在那邊喝咖啡之類的)。
* 如果是使用電路交換網路
* 每個使用者傳送資料的期間,都必須保留 100 kbps 的通道。如果是採用分時多工的話,假設每個 1 s 的 frame 都被切成 10 個 100 ms 的 slot,那麼每個使用者就會被分配到每個 frame 當中的一個 slot。
* 因為只有 10 個 slot, 所以每條線路最多只能同時讓 10 個使用者連線而已。
* 如果是使用封包交換網路
* 每個使用者在任意時刻正在傳送資料的機率是 0.1, 如果此刻線上有 35 個使用者,則同一時間有超過 10 個人正在一起傳送封包的機率,大約是 0.0004 (詳見 Homework Problem P8), 反過來說,只有 10 個以下的使用者正在同時傳送資料的機率就大約是 0.9996。
* 當只有 10 個以內的使用者同時一起傳送資料時,他們所產生的資料總量是小於等於 1 Mbps 的,還在線路的可承受範圍內,這種情況下不會有延遲發生,感受起來和電路交換網路一樣。
* 但如果有超過 10 個使用者同時一起傳送資料,這時資料傳輸總量就會超過線路的傳輸上限,因此會發生壅塞的現象,封包會被塞在輸出佇列裏面,造成延遲。這個壅塞的現象必須要等到傳輸資料總量降回傳輸上限以下才會緩解。
* 由於同時有超過 10 個人一起傳送資料的機率實在非常小,所以封包交換網路在大部份時候都可以達到跟電路交換網路一樣的效能,*還能夠容許超過電路交換網路三倍的同時在線人數*。
* 第二個例子:有 10 個使用者正在共享一條傳輸上限是 1 Mbps 的線路,突然之間,有一個使用者產生了 1000 個 1000 位元的封包,而剩下的其它使用者則維持靜默,沒有產生任何資料。
* 如果是使用電路交換網路
* 同樣假設這個網路是使用分時多工,每個 1 s 的 frame 都被切成 10 個 100 ms 的 slot, 且每個 slot 都能承載 1000 位元的資料。
* 儘管一瞬間那個產生很多資料的使用者需要很大的頻寬,但他還是只能分到每個 frame 當中的一個 slot 而已,因此,他總共需要花 10 秒才能將他總計 1MB 的資料傳完。
* 如果是使用封包交換網路
* 因為其它使用者都沒在傳資料,所以這個突然丟出很多資料的使用者可以獨自佔用所有線路資源
* 由於這條線路的傳輸上限是 1 Mbps, 所以他只要花一秒就可以把所有資料傳完了。
* 上述的兩個情況當中,封包交換網路比電路交換網路還要更有效率。這兩個例子也點出了封包交換和電路交換在處理多個資料流時最關鍵的差異點:
* 電路交換網路事先保留固定大小的線路資源,無視於使用者的需求。因此當使用者靜默時,沒有用到的資源就浪費掉了。
* 封包交換網路則是需要多少資源才配置多少資源,線路的傳輸配額是以封包為單位在分配的,只有有需要傳輸資料的人才會被分到。
* 雖然封包交換和電路交換兩種方式在現今的電信網路中都被廣為使用,但是從趨勢看來封包交換目前是比較佔上風。就連許多使用電路交換的電話網路,最近都開始慢慢的轉移到封包交換網路上了。尤其是昂貴的跨國通話這個部份,有些電話網路已經改用封包交換在提供服務了。
## 1.3.3 A Network of Networks
我們先前提到,終端系統(電腦、手機、伺服器等)是透過 access ISP 連到網際網路上的。 Access ISP 運用了各種存取網路的科技,包含 DSL、 第四台網路、光纖、 Wi-Fi, 還有蜂巢式網路,提供有線的或是無線的連網服務。注意此處的 access ISP 不一定是電信公司或是有線電視公司,也有可能是大學(提供學校的裡的人網路)或是企業(提供公司裡的人網路)。但單純只是把終端使用者和內容供應商接到 ISP, 這也只是連接了網際網路上數十億的機器的一小部分而已。為了拼湊出完整的網際網路, access ISP 之間也必須要互相連接才行。這麼一來,我們就組成了一個 **網路的網路 (a network of networks)**。理解這個概念,是讓我們理解什麼是網際網路的一個重要關鍵。
這些年來,組成網際網路的這個「網路的網路」已經發展出了一個很複雜的結構。這些發展的推力主要是來自於經濟因素和國家政策,反倒不是來自於效能考量。為了了解現今的網際網路架構,讓我們來試著一步一步的建立起一系列的網路結構。每當我們增加新的一層結構進去,這個模型就會愈來愈接近真實的網際網路複雜的架構。要隨時注意,我們的最終目標是為了要連接那些 access ISP,好讓所有的終端系統之間可以互相傳送封包。一個最簡單暴力的方法就是給每一個 access ISP 都*直接*拉一條線連到世界上其他所有的 access ISP 去,但用膝蓋想也知道這個方法太不實際,對於這些 access ISP 來說太貴了,因為他們一個 ISP 就必須要拉上百萬條線才有辦法把連完世界上其他的 ISP。
### Network Structure 1: access ISPs + a global transit ISP
* 這個(想像中的) transit ISP 連接了世界上所有的 ISP。 它擁有橫跨全球的路由器和通訊線路網路,且每一台路由器都至少會在一台 ISP 的附近。
* 想當然, transit ISP 要維護如此全面的網路是非常燒錢的。為了要營利,它自然而然會對那些要藉由他連線的 access ISP 收錢。該 access ISP 所使用的流量愈多,收費就愈貴(但不一定會成正比)。
* 因為 access ISP 們要付錢給 transit ISP, 所以我們會說 access ISP 們是**消費者 (customer)**, 而 transit ISP 則是**提供者 (provider)**。
* 如果現在真的有一間公司開始營運這個所謂的 global transit ISP ,而且真的可以賺錢的話,那想當然爾,一定也會有其他的人也想進來分一杯羹,開始營運自己的 global transit ISP 並與原本的那一間競爭。這就產生了 Network Structure 2。
### Network Structure 2: access ISPs + global transit ISPs
* 這是一個雙層的架構:上層是數間 global transit ISP ,下層則是上百萬間的 access ISP。
* Access ISP 們會比較喜歡這個架構,因為他們現在可以根據每間中繼站提供的功能和價格來選擇要用哪一間 transit ISP。
* 但是這些 transit ISP 之間也應該要互相連在一起才對。否則的話,選擇了 A transit ISP 的那些 access ISP, 就沒辦法和選擇 B transit ISP 的 access ISP 們通訊了。
* 這樣的架構假定 transit ISP 們不但有辦法連接到所有的 access ISP, 而且在經濟考量上也應該要這樣做。
* 但其實在現實生活中,雖然有些 ISP 的確在全球上有很可觀的覆蓋率,但沒有一間 ISP 真的在世界各國的每一個城市都擁有自己家的機器。他們可能只會在一些特定區域以內,擁有一個**區域 ISP (regional ISP)**,用來連接此區域內所有的 access ISP。
* 這些區域 ISP 接著會連上 **tier-1 ISP**。 這個 tier-1 ISP 才真的比較接近我們所想像的這種 global transit ISP, 雖然他們依然沒有覆蓋世界上的每一個城市。
* 世界上確實有幾間接近這種 tier-1 ISP 的公司, 像是 Level 3 Communications, AT&T, Sprint, 還有 NTT。 有趣的是,沒有哪一家公司公開宣稱自己是 tier-1 ISP 的。俗話說的好: "If you have to ask if you’re a member of a group, you’re probably not."
### Network Structure 3: access ISPs + reginal ISPs + tier-1 ISPs
* 不只 tier-1 ISP 可以有很多間互相競爭,在每一個區域內,其實也可以有很多間 reginal ISP 互相競爭。如此一來,就形成了三層的架構。
* 在這樣的架構下, access ISP 付費給他們連接到的 reginal ISP, 而 reginal ISP 再付費給他們連接到的 tier-1 ISP。(但 access ISP 也是有可能直接連接到並付費給 tier-1 ISP 的。) Tier-1 ISP 不用付費給任何人,因為他們是這個架構的最上層。
* 由於一些更複雜的因素,在某些地方,會有一個更大型的 reginal ISP (可能範圍橫跨整個國家) 負責服務其它小型的 reginal ISP,然後才由這個大型的 reginal ISP 去連接到 tier-1 ISP。
* 例如:在中國,每個城市都有自己的 access ISP, 他們會連接到每個省份自己的 ISP, 這些 ISP 再連到中國的國家級 ISP, 最後國家級 ISP 才連接到 tier-1 ISP。[Tian 2012]
### Network Structure 4: access ISPs + regional ISPs + tier-1 ISPs + PoPs, multi-homing, peering, and IXPs
* Network structure 3 依然只是個粗略的網際網路架構而已。要更接近現實生活中的網際網路,就必須加上以下元件才行。
* **網路服務提供點 (Points of Presence, PoP)**
* 存在於除了最底層 (access ISP) 以外的每一層當中
* 基本上就是一組一到多個放在同一個地方的路由器,放在 provider ISP 的網路當中,提供 costomer ISP 連到 provider ISP
* ==Costomer ISP 可以向第三方的電信公司租借一條高速的線路,來把他自己的某一台路由器直接連進他的 provider ISP 的 PoP 去== (為什麼要向第三方租借?為什麼不是由 provider ISP 提供?)
* **路徑多宿 (Multi-home)**
* 除了 tier-1 ISP 以外,所有的 ISP 都可以選擇將自己的路由器連接到兩個或以上的 provider ISP 去,這樣的作法就稱為 multi-homing
* 舉例來說, access ISP 可以選擇 multihome 到兩個 reginal ISP 去,也可以選擇 multihome 到兩個 reginal ISP 和一間 tier-1 ISP 去
* 同樣道理, reginal ISP 當然也可以選擇 multihome 到兩間以上的 tier-1 ISP 去
* 當一間 ISP 有做 multihome 時,就算他連上的其中一間 provider ISP 出了問題無法連接,他依然可以透過其他的 ISP 繼續傳送封包到網際網路上
* **對等連線 (Peer)**
* 我們都知道 customer ISP 必須付錢給他們的 provider ISP 好跟世界上其他的電腦通訊。隨著 customer ISP 使用的流量愈多,他們需要付給 provider 的資費就愈貴
* 為了降低這個開銷,鄰近的同層級 ISP 之間可以直接連接在一起,如此一來他們之間的封包就可以直接傳送,不需要一路上去到 provider 再一路跑下來,這就叫作對等連線
* 兩個對等連線的 ISP 之間是互相都不需要付對方錢的 (settlement-free)
* Tier-1 ISP 之間也是使用對等連線,他們也都不需要付彼此錢
* 更多有關對等連線和 customer-provider 的關係,可以閱讀 [Van der Berg 2008]
* **網際網路交換中心 (Internet Exchange Points, IXP)**
* 有些第三方公司會自己營運一個網際網路交換中心,以提供多個 ISP 跟彼此互相對等連線。
* 一個 IXP 基本上就是一棟獨立的建築物,裏面裝有他自己的多台交換機 [Ager 2012]
* 目前世界上大概有 400 多個 IXP 存在於網際網路中
### Network Structure 5: access ISPs + regional ISPs + tier-1 ISPs + PoPs, multi-homing, peering, IXPs + content-provider network
![](https://i.imgur.com/QL74KQO.png)
* 在 Network Structure 4 的架構上,我們再新增一個 **Content-Provider Network**, 就成了我們現今的網際網路架構了,如上圖所示。
* Google 就是現今 Content-Provider Network 的先驅。在這本課本被寫下來的時候, Google 至少在世界上擁有了 50 - 100 座資料中心,廣佈在北美、歐洲、亞洲、南美,以及澳洲。
* 這些資料中心有的容納了數十萬台的伺服器,但也有的資料中心比較小,只有數百台的伺服器。
* 這些資料中心都是直接透過 Google 自己私人的 TCP/IP 網路連接的,儘管廣佈全球,卻跟公共的網際網路是完全區隔開的。
* 重要的是, Google 的私人網路只有承載那些流入/流出 Google 伺服器的流量。像上圖展示的那樣, Google 的私人網路似乎想要試著透過直接和那些較低層的 ISP 或是 IXP 對等連線,來「跳過」 tier-1 ISP, 以節省資費。[Labovitz 2010] 然而,由於有很多的 access ISP 依然只能夠經由 tier-1 的網路才能存取得到,所以 Google 依然得要跟那些 tier-1 ISP 相連,並且支付使用費給他們。
* 透過建構自己的私人網路, content provider 不只可以節省付給 provider ISP 的使用費,也可以更好的掌握他們的流量是如何送到終端使用者手上的。
* 有關於 Google 的網路基礎建設,我們會在 2.6 時詳談。
總結來說,現今的網際網路 —— 一個網路的網路 —— 是一個很複雜、由數個 tier-1 ISP 和數十萬個 lower-tier ISP 組成的龐大結構。這些 ISP 有著不同的覆蓋範圍大小,有的可以橫跨好幾個洲甚至橫跨海洋,有的則侷限在一個小小的地理範圍內。
較低層的 ISP 連接到較高層的 ISP 上,而較高層的 ISP 則彼此連接。使用者和 content providers 是低層 ISP 的 customer, 而低層 ISP 則是高層 ISP 的 customers。 近幾年,一些大型的 content providers 已經建構出了自己的私人網路,並且開始連接到那些他們有辦法直接連到的低層 ISP 上。
----
[<< 1.2 The Network Edge](https://hackmd.io/@kaeteyaruyo/computer-networking-1-2) | [目錄](https://hackmd.io/@kaeteyaruyo/computer-networking-index) | [1.4 Delay, Loss, and Throughput in Packet-Switched Networks >>](https://hackmd.io/@kaeteyaruyo/computer-networking-1-4)