<commit_before>---
layout: post
published: true
title: Tunneling
tags: 
  - Network
  - Tunneling
---

![2013_11_25_1.jpg]({{site.baseurl}}/assets/images/blog/2013_11_25_1.jpg)

## 前言
隨著雲端網路的時代到來，
隨用隨租的運作模式已徹底改變大眾對於數位服務的觀念，
以一個現代的資料中心來說;
會有上萬台的實體機器(Physical Machine)、虛擬主機(Virtual Machine 以下簡稱 VM)，
並必須支援不同網路頻寬的需求，在現在網路架構中如何動態的網路配置變得相當重要。

如同一使用者所建 VM 若跨不同的 Physical Machine，
則需要在 Physical Machine 間配置 Virtual Network；
以及不同使用者的 Physical Machine 之間需要區隔不同的 subnet 等，
為此 Virtual Network 技術漸獲重視。

傳統的作法，基本上還是以 802.1Q Virtual Local Area Network(VLAN) 來區分不同的使用者，
但是會產生以下 3 點問題:

1. VLAN 的識別碼僅 12 位元僅能區隔最多 4094 個用戶，無法因應大量需求。
2. Layer 2 switch 所使用的 Spanning Tree Protocol(STP) 也讓可用頻寬受限，無法發揮網路最大的使用率。
3. 同時數量龐大的 VM 也將會造成 Top of Rack Switch (ToR）過量的負荷。

因此既有的 VLAN 方案無法滿足雲端環境所需要的 virtual network 需求，
有鑑於此，VM 透過 virtual switch 間的 tunnel 建立連線成為快速解決的途徑，
相關設定均在 server 端即可完成，底層網路僅為傳遞封包通透使用，無需額外設定。

## Tunneling Protocol
Wiki[1] 上的訂義為:
> 是一個網路協議的載體。使用隧道的原因是在不兼容的網路上傳輸數據，或在不安全網路上提供一個安全路徑。
穿隧協議可能使用數據加密來傳送不安全的負載協議。

也就是說 Tunnel 會把下層(例如 layer3)的 packet 包裝到上一層(例如 layer4)，
以 SSH Tunneling 來說，就是將 IPv4 的封包，包裝到上一層 SSH protocol 中進行傳輸，
從而實現際體網路間的穿透。

很明顯的，
實現的前提就是 sender、receiver 都要有一種能夠解析這種 pakcet 的 kernel module 或是設備才行。


常見的 Tunneling 技術有:

### 1. IP in IP [2] [3] [4]
其實說穿了就是把 IP layer(layer 3) 的 packet 再包一層 IP 的 packet，
看似好像沒什麼學問，也浪費。
但是其實不然，
它的作用其實等於實現一個 layer2 的 bridge，
我們都知道 MAC 是在 layer2 的，根本不需要 IP，
但是 IP in IP 是透過兩端的 router(switch) 串成的一個 Tunnel，
可以把遠端的兩個 virtaul private network 串連。

也可用來當作 IPv6 over IPv4 的 tuneling。

### 2. Generic Routing Encapsulation(GRE) [5] [6]
和 IP in IP 類似，只是功能更強了一些，還支援 broadcast。<commit_msg>Updated 2013-11-25-tunneling.md<commit_after>---
layout: post
published: true
title: Tunneling
tags: 
  - Network
  - Tunneling
---

![2013_11_25_1.jpg]({{site.baseurl}}/assets/images/blog/2013_11_25_1.jpg)

## 前言
隨著雲端網路的時代到來，
隨用隨租的運作模式已徹底改變大眾對於數位服務的觀念，
以一個現代的資料中心來說;
會有上萬台的實體機器(Physical Machine)、虛擬主機(Virtual Machine 以下簡稱 VM)，
並必須支援不同網路頻寬的需求，在現在網路架構中如何動態的網路配置變得相當重要。

如同一使用者所建 VM 若跨不同的 Physical Machine，
則需要在 Physical Machine 間配置 Virtual Network；
以及不同使用者的 Physical Machine 之間需要區隔不同的 subnet 等，
為此 Virtual Network 技術漸獲重視。

傳統的作法，基本上還是以 802.1Q Virtual Local Area Network(VLAN) 來區分不同的使用者，
但是會產生以下 3 點問題:

1. VLAN 的識別碼僅 12 位元僅能區隔最多 4094 個用戶，無法因應大量需求。
2. Layer 2 switch 所使用的 Spanning Tree Protocol(STP) 也讓可用頻寬受限，無法發揮網路最大的使用率。
3. 同時數量龐大的 VM 也將會造成 Top of Rack Switch (ToR）過量的負荷。

因此既有的 VLAN 方案無法滿足雲端環境所需要的 virtual network 需求，
有鑑於此，VM 透過 virtual switch 間的 tunnel 建立連線成為快速解決的途徑，
相關設定均在 server 端即可完成，底層網路僅為傳遞封包通透使用，無需額外設定。

## Tunneling Protocol
Wiki 上的訂義為:
> 是一個網路協議的載體。使用隧道的原因是在不兼容的網路上傳輸數據，或在不安全網路上提供一個安全路徑。
穿隧協議可能使用數據加密來傳送不安全的負載協議。

也就是說 Tunnel 會把下層(例如 layer3)的 packet 包裝到上一層(例如 layer4)，
以 SSH Tunneling 來說，就是將 IPv4 的封包，包裝到上一層 SSH protocol 中進行傳輸，
從而實現際體網路間的穿透。

很明顯的，
實現的前提就是 sender、receiver 都要有一種能夠解析這種 pakcet 的 kernel module 或是設備才行。


常見的 Tunneling 技術有:

### 1. IP in IP
其實說穿了就是把 IP layer(layer 3) 的 packet 再包一層 IP 的 packet，
看似好像沒什麼學問，也浪費。
但是其實不然，
它的作用其實等於實現一個 layer2 的 bridge，
我們都知道 MAC 是在 layer2 的，根本不需要 IP，
但是 IP in IP 是透過兩端的 router(switch) 串成的一個 Tunnel，
可以把遠端的兩個 virtaul private network 串連。

也可用來當作 IPv6 over IPv4 的 tuneling。

### 2. Generic Routing Encapsulation(GRE)
和 IP in IP 類似，只是功能更強了一些，還支援 broadcast。
{'fraction_non_alphanumeric': 0.07957724588125582, 'fraction_numerical': 0.031084861672365557, 'mean_word_length': 5.832271762208068, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4307281', 'n_tokens_mistral': 2364, 'n_tokens_neox': 2443, 'n_words': 371}