# TCPIP
[TOC]
## 引言

[圖片出自](https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-%E7%B6%B2%E8%B7%AF%E5%9F%BA%E7%A4%8E-tcp-ip-f89cc09f1f36+6)
1. DNS 將 URL 轉換成實際的 IP Address,Browser 將 IP Address 包成一個 Request 送出去。
2. request 透過 Internet 傳送到 Server 。
3. 收到 Request 的 Server 會跑去 Data center 撈取資料。
4. 將撈取到的資料透過 Internet Response 回去。
5. Browser 解析資料並印於 Browser 上。
+ 秋分傳紙條要約柏瑋看電影
1. 案例一
+ 秋分沒寫要給誰

2. 案例二
+ 信沒傳到,秋分不知道

+ 
## 分層架構
### TCP/IP
+ TCP/IP Protocol Suite或TCP/IP Protocols
+ 用最核心的 TCP Protocol 和 IP protocol 為命名
+ 最早發源於美國國防部(縮寫為DoD)的ARPA網項目,因此也被稱作DoD模型(DoD Model)。這個協定套組由網際網路工程任務組負責維護。
### OSI
+ 依據網路運作方式,OSI模型共切分成7個不同的層級,每級按照網路傳輸的模式,定義所屬的規範及標準。所謂的OSI,是由國際化標準組織(ISO)針對開放式網路架構所制定的電腦互連標準,該模型是一種制定網路標準都會參考的**概念性架構**,並非一套標準規範,也不是用來提供實現的方法,而是透過觀念描述,協調各種網路功能發展時的標準制定。
+ 組織ISO(International Organization for Standardization)
+ 架構OSI (Open System Interconnection Reference Model)
+ 
::: info
| TCP/IP|OSI|
| -------- | -------- |
|最早發源於美國國防部的專案<br>1983年,在網際網路的前身 (ARPA網) 中通訊方式換成新的定義 | ISO(國際標準化組織)組織1985年 研究的模型 |
|做 OS 的人比較常用的規範| network device 的人比較常用的規範|
:::
# TCP/IP 各層內容

## Link layer

+ link : 連接 Internet 上相鄰的 node
### Ethernet vs Wi-Fi
網路| 標準 | 功能 | 傳輸媒介 | 碰撞處理
|---------| -------- | -------- | -------- | ---------- |
|Ethernet| 802.3 | 區域網路連線上的通信協定 | 雙絞線 | CSMA/CD
|Wi-Fi | 802.11 | 無線區域網路的電腦通訊標準 | 5GHz / 2.4GHz 無線電波 | CSMA/CA|

### CSMA/CD (Carrier Sense Multiple Access / Collision Detection)
> 多台電腦同時傳到同一台也會 collision
+ 被動偵測
+ 傳送步驟:
1. 當節點要發送訊號時,會先偵測通道是否有其他節點正在使用(carrier sense)
2. 當通道沒有被其他節點使用時,就傳送封包
3. 封包傳送之後立即檢查是否發生碰撞(carrier detection),若是發生碰撞則對通道發出高頻訊號高知其他節點已經發生碰撞
4. 碰撞後隨機等待一段時間重新發送封包
5. 嘗試 15 次都失敗的話則告知上層 Timeout
+ 
+ 用於容易偵測碰撞的網路環境
+ 有線網路
> 同一條線
### CSMA/CA (Carrier Sense Multiple Access / Collision Avoidance)
+ 主動避免collision
+ 傳送步驟
1. 送出資料前,聆聽網路上的狀態,如果沒有人使用,維持一段時間後,再等待一段隨機的時間後如果還沒有人使用,才送出資料。由於每一個裝置採用的隨機時間不同,可以減少碰撞的機會。
2. 送出資料前,先送一個RTS (Request to Send) 封包給目標端,等待目標端做出回應有就是送出 CTS(Clear to Send) 封包後,才開始傳送。
3. 資料傳送完成後,傳送裝置會等待一小段時間接收確認封包(Ack),有收到才代表成功
> 當失敗 32 次之後通知上層 Timeout
+ 多用在無線網路
+ 無線的環境、不容易確實的偵測是否有碰撞發生,所以修改不用被動的碰撞偵測(CSMA/CD)而改為使用主動的避免碰撞(CSMA/CA)。

### Header

#### Link layer header
+ 傳送單位為frame
+ Ethernet frame
+ 
+ 
+ Preamble本身並沒有實際的意思,僅僅用在發送方和接收方之間同步時鐘和bit流;當發送方發送數據時,會加上這7個字節的報文,告訴接收方「請按照這種規律準備好,我馬上要發送數據了」;當接收方連續收到「10101010」這串代碼時,就需要調整字節的時鐘,準備好接收數據。
+ SFD start of frame delimiter 它只有1個byte,內容是固定的:「10101011」,通知接收方「從這個byte以後的內容都是有效數據,不能丟棄了」
> REF:https://kknews.cc/code/568kjn2.html
> JUMBLE FRAME
### Mac Address
+ 1 張網卡,一個 MAC address
> 同一區域網路 mac addr 絕對不能重複到,但不同區域可以接受 (因為不同IP)
+ 在區網路內的地址
> 班級內的座號,同班級只能有唯一一個座號,但不同班可以有相同的座號
+ 
+ size : 6 bytes (48 bits)
+ 48 bits
- 第 1 bit 為廣播位址(0) / 群播位址(1)
- 第 2 bit 為廣域位址(0) / 區域位址(1)
- 
:::info

:::
- 3~24 bits 由 IEEE 決定如何分配給每一家製造商,且不重複
- 最後 24 bits 由實際生產該網路裝置的廠商自行指定且不重複
+ 區域網路位址(LAN Address)、Ethernet Address 或 Physical Address
+ broadcast 是特殊情況全部 bit 為1 (FF:FF:FF:FF:FF:FF)
:::success
### 練習
1. 4A:30:10:21:10:1A
2. 47:20:1B:2E:08:EE
3. FF:FF:FF:FF:FF:FF
+ 以上何為 multicast, unicast, broadcast
>FIXME 補 ifconfig 的截圖
:::

### connecting device
+ hub
> FIXME: hub 可以先講
+ 
+ broadcast 收到資料就全部送出去
> 不安全
+ 半雙工 (half-duplex)
>FIXME: 簡單講一下半雙工是甚麼意思
+ 收資料或送資料不能同時,你一次只能做其中一種。
+ switch
+ 
+ 可以建立 MAC address table,找目的地網卡在哪個 port
+ > 依照價位儲存不同數量的Mac address
+ 找不到就 broadcast
+ 每個 port 都是獨立的 collision domain
+ 
+ 每一台主機隨時都可以傳送/接收 (全雙工) 相對hub switch比較不用 CSMA/CD
### LAN
- 連接住宅、學校或辦公大樓等有限區域內電腦的網路
- Ethernet (乙太網路)
- Ethernet 為 LAN 中最常使用的一種技術
- 相關規範由 IEEE 訂定,收錄於 IEEE 802.3 標準中
- 
:::info
> FIXME: 內容需整理
## 網路拓撲(network topology)
網路拓樸就是網路中電腦彼此連接方式
1. Star
+ 
+ 優點:控制簡單,添加或刪除某個站點非常容易網路維護較容易。
+ 缺點:當網路的中央主機發生故障時,將導致整個網路癱瘓,而且每一台周邊電腦都必須佈放一條連線到中央主機,對於範圍比較大的環境不易達成,費用也較高。
2. Bus
+ 
+ 優點:網路佈線簡單,只要一條網路主幹就能將網路上所有電腦連結起來,而且不管是要在該網路加入新電腦或想將那部電腦退出網路,都不需要做特殊處理。
+ 缺點:
+ 連結網路的傳輸媒體任何一個地方斷線,將使整個網路癱瘓。
+ 各工作站之間傳送資料還都必須透過同一傳輸媒介。
3. Ring
+ 
+ 優點:網路上任何一個節點使用傳輸媒體的權限都相等,而且各節點使用傳輸媒體的機會平均分配,沒有爭執及碰撞的現象,尤其使用在高負載網路上非常適合。
+ 缺點:環狀拓樸圖上任何一個節點發生故障,可能使整個網路癱瘓。而且在佈放網路方面,由一個起始點開始佈放線路,經過整個網路區域後必須回到原點,在網路網路架設施工方面的確有困難。
4. Tree
+ 
+ 優點:除了具有星狀優點外,又可改善星狀的缺點,當某一主機電腦故障時,只會影響到該節點的周邊電腦不能通訊,而不會使整個網路癱瘓。其他網路節點還是可以正常運作。
+ 缺點:整個網路的可靠度還是受限於各節點主機電腦。
> REF:https://www.atcnet.com.hk/newsContent_233.html
:::
## Internet layer

### 網域
+ 連線方式:
+ 同網域:可以直接透過 CSMA/CD 傳遞資料,網卡對網卡 (MAC frame ) 。
+ 不同網域:需要借由 Router 將不同網域連接。
### Router

- 若 PC01 要傳資料給 PC11 時:
1. 看封包目標 IP 位置。
2. 查看自己主機的 Net_ID 是否與封包的相同(屬於同區網),若相同可以直接傳給目的主機。
3. 若不同,查詢 default gateway( 此為 Server A ) 並傳給它。
4. 不理會封包流向,default gateway 會執行上述動作繼續往目的地傳送。
:::info
### 查看自己的routing table
+ `route` 指令:
+ `-n`: 主機名稱以 IP 顯示
+ 
:::
### IP
==Internet Protocol 中的 IP Address (簡稱 IP)==
1. IPv4: IP address 以 32bits 表示,為目前主流。
- IP 位置枯竭: 現在在網路上的主機數已經多過 IPv4 32 位元可以表示的數量( 總數為 42 億多 )。
- 1993年,推出網路位址轉換(NAT)與無類別域間路由(CIDR),來減緩 IP 位置枯竭的問題,但未來最終的解決方案還是需要轉換到 IPv6。
2. IPv6: IP address 以 128bits 表示,未來趨勢,可以多出許多 IP 位址,供新裝置使用。
:::info
**NAT(Network Address Translation): 將私有 IP 位置轉成公開 IP 位置**:

- 網站伺服器無法定位私有 IP,在電腦送 Request 出去時,Router 就會把來源的 IP 位置改成 public IP(Router 同時有兩個 IP 位置,區網內的私有 IP 位置,以及 ISP 指派的公開 IP 位置)。
- Router 在更改 IP 位置時,會將私有 IP 與 request 目標的 IP 記錄下來,當 request 的 server 回應時,從記錄中就可以知道要傳回哪個私有 IP。
- **因為可以多個主機共用一個公有 IP ,所以暫時解決 IP 不足的問題**。
| | 處理事項 |
| -------- | -------- |
| router | 只轉送,不會記下封包連接狀態 |
| NAT | 轉送外,可以做 IP 轉換,並記下來源 IP /目的 IP |
| bridge | 連接兩個不同網段,可以是相同類型或不同類型的網路。|
> [REF1](https://networkengineering.stackexchange.com/questions/58027/is-a-gateway-both-a-router-and-a-nat) [REF2](https://giboss.pixnet.net/blog/post/26798642)
:::
### IP 位置表示:
- 以二進位表示
- 00000000.00000000.00000000.00000000 => 0.0.0.0
- 11111111.11111111.1111111.11111111 => 255.255.255.255
- 分為 Net_ID, Host_ID
- Net_ID: 網路編號。
- Host_ID: 主機編號。
- Host_ID 不可全 0 或全 1:
- 全0: 表示網段的位置。
- 全1: 表示廣播位置。
### IP 種類
- 有 A, B, C, D, E 五種 IP Class ( classful addressing ,現在幾乎不會用這種。 )

[圖片來源](https://www.eventhelix.com/networking/ip-routing/)
- A, B, C 為主要使用:
- A Class: 0 開頭,網域少,主機多,適合大型企業。
- B Class: 10 開頭,適合中型企業。
- C Class: 110 開頭,適合家庭、小型企業。
- D, E 為特殊用途:
- D Class: 1110 開頭,群播用途,對另一個網段的所有主機做廣播。
- E Class: 11110 開頭,目前為保留,沒有定義用途。
- 預設 Net Mask
- A Class 的 mask 是 255.0.0.0
- B Class 的 mask 是 255.255.0.0
- C Class 的 mask 是 255.255.255.0
- 算 Net ID and Host ID
- IP 和 Net mask 加以 AND 運算得到 Net ID
- 先將 Net Mask 做一個 NOT 運算,然後再和 IP 做一次 AND 運算可以得到 Host ID
- 有 Public IP / Prtvate IP
- Public IP: INTERNIC 所統一規劃的 IP,有這種 IP 才可以連上 Internet
> INTERNIC: 負責登記網域名稱與網路協定位址,並散播有關網際網路資訊的組織。
- Private IP:
- 私有 IP 無法連上 Internet,但可以內部互相連線。
- 如果要將私有 IP 連上 Internet,可以利用 NAT 將 IP 進行轉換(偽裝),如此一來也可以使私有 IP 電腦連上去。
- 其中 A、B、C 三個 Class 當中又各保留一段作為 Private IP 網段,分別是:
- Class A:10.0.0.0 - 10.255.255.255
- Class B:172.16.0.0 - 172.31.255.255
- Class C:192.168.0.0 - 192.168.255.255
- 由於這三段 Class 的 IP 是預留使用的,所以不能直接作為連接 Internet 之用,適合一些尚未具有 Public IP 的企業內部用來規劃其網路設定。
### 子網路
- 公用: 可以將網路切割成不同區塊,方便管理並可以快速定位 (tree),也可以避免浪費沒有用到的 Host_ID 。
- 切割網段 => 先決定想要分配的主機數:
- Class C 網路為例:
- 網路遮罩: 11111111.11111111.11111111.**00000000** => 255.255.255.0
- 粗體為可變動位置。
- 8 位元: 2**8 - 3 = 253 台主機
- 網路遮罩: 用來計算在哪個網段 (利用 IP 與網路遮罩做 AND 可以得到此 IP 的網段)。
- 若要切割一網路區段為 192.168.3.0 ~ 192.168.3.255
- `Netmask`: 255.255.255.0 => 11111111.11111111.11111111.00000000
- `Network`: 192.168.3.0 => 此段網路第一個 IP,代表此區段網路
- `Broadcast`: 192.168.3.255 => 最後一個 IP,廣播用途
- 若要將以上網段(192.168.3.0/24)再切分成 2 個子網路:
- Netmask: 255.255.255.128 => 11111111.11111111.11111111.1**0000000** (遮罩多 1bit) => 主機數少一半
| 子網路 | Network | Broadcast | Netmask |
| -------- | -------- | -------- | ------ |
| 第一個 | 192.168.3.0 | 192.168.3.127 | 255.255.255.128 |
| 第二個 | 192.168.3.128 | 192.168.3.255 | 255.255.255.128 |
- 另一表示方法: 192.168.0.0/24 (子網路遮罩前 24bits 為 1)
- 請問 192.168.10.100/25 與 192.168.10.200/25 是否在同一個網域內?
:::info
不同,根據上面例子來計算
1. 192.168.10.100/25
- IP :11000000.10101000.00001010.01100100
- mask: 11111111.11111111.11111111.10000000
2. 192.168.10.200/25
- IP :11000000.10101000.00001010.11001000
- mask: 11111111.11111111.11111111.10000000
192.168.10.100/25 在 192.168.10.0 的網域內
192.168.10.200/25 在 192.168.10.128 的網域內
:::
- 無類別域間路由 (Classless Inter-Domain Routing,CIDR):
- 因為 class A、B、C 的主機數量最少是 class C 的 254 台 (Host_ID 8 bits),在來就是 class B 的 65534 台 (Host_ID 16 bits),一般公司中可能超過 254 台所以需要用到 class B 的 IP位置,但沒有 65534 台那麼多,因此浪費許多空間。
- 所以 CIDR 基於可變子網路遮罩來達到任意分配 Net_ID 與 Host_ID 位元數,來分配最適當的 IP 位置配置,避免浪費 IP 位置,讓 IP 位置枯竭可以緩解。
:::info
+ Mac address VS IP address
|MAC addr | IP addr |
| -------- | -------- |
| 區網路下區分裝置 | 控制裝置在全球網域下的溝通 |
| 12digits, 6 對 16進位<br> EX: CC-3A-2A-E1-51-AA | IPV4: 32bits 4對3位十進位表示<br>192.168.0.121<br>EX: IPV6: 128bits 8 對 4 位<br>EX: fe80::f060:18c6:27de:595d%5|
| 不能隨意改變(要跟IEEE申請) | 可任意改變 |
| physical address |logical address |
| 寫在網卡的 bios 內 | 在傳遞過程中改變 |

[出自](https://www.techtarget.com/searchnetworking/answer/What-is-the-difference-between-an-IP-address-and-a-physical-address)
:::
:::warning
### LAN vs WAN
+ LAN(Local Area Network)
+ ip : 192.168.0.1 or 10.0.1.256
>[NCNU IP 網段分配](https://netcenter.ncnu.edu.tw/nw/doc/ip-new.htm)
+ WAN(Wide Area Network)
+ 接外部 IP 地址用
+ WAN就是由多個LAN組成的集合
:::
### ICMP 網際網路控制訊息協定

+ IP 在發送封包時,我們不知道是否可以抵達目的地,傳送失敗時,也想要知道發生什麼錯誤。IP 封包本身並不會回報封包傳送的狀況,因此需要一個回報狀態的機制 => ICMP
- `Type`: ICMP的類型。
- `Code`: 進一步劃分ICMP的類型,該欄位用來尋找產生錯誤的原因。
- Ex: Type3 目標不可到達又分成好幾種類型。
- 
+ EX: ping 是用ICMP的"Echo request"和"Echo reply" 來回應原發送 ping 的主機
+ EX: traceroute -> TTL 在傳輸中過期回報不可到達(Type 11)。
### ARP/RARP

- ARP : Address Resolution Protocol
- RARP : Reverse Address Resolution Protocol
- 傳遞資料時透過 IP 知道 MAC Address
1. 向整個區網發出 ARP 封包
2. 對方回傳 MAC Address
3. 開始傳資料
4. 將該筆 IP/MAC 寫入 ARP Table 中(保持 20 分鐘)
:::info
### 查看 ARP table
- `arp` 指令:
- `-n` 主機名稱以 IP 型態顯示
- `-d` 將某筆 IP 從 ARP Table 刪除
- `-s` 將某筆 IP/MAC 寫入 ARP Table 中
- 
:::
## Transport layer

+ 傳送單位為segment,datagram,packet 取決於protocal
### UDP

+ UDP是不可靠的
+ 沒有像TCP一樣的握手建立連線流程,socket創建後就直接將封包發往指定IP地址上的指定端口號應用程式
+ UDP不需要ACK響應來確認對方是否收到消息,這有可能造成封包的亂序到達以及丟失問題。缺乏壅塞控制
+ UDP可以依照想要的速率發送封包(不過真實的封包傳輸速率還是要看網路核心中的帶寬限制)
### Port (通訊埠口)
+ 接收方與傳送方皆需要 port (連線通道)來傳遞資料。
+ 舉例: IP 為門牌號碼, port 為哪個窗口(每個窗口執行不同業務)。
+ https: 443, www: 80
+ 為 TCP Header 的 Source Port 與 Destination 。
:::info
常見port 服務
|port 號| 服務|
|---|---|
20 |FTP-data,檔案傳輸協定所使用的主動資料傳輸埠口
21 |FTP,檔案傳輸協定的命令通道
22 |SSH,較為安全的遠端連線伺服器
23 |Telnet,早期的遠端連線伺服器軟體
25 |SMTP,簡單郵件傳遞協定,用在作為 mail server 的埠口
53 |DNS,用在作為名稱解析的領域名稱伺服器
80 |WWW,全球資訊網伺服器
110 |POP3,郵件收信協定
443 |https,有安全加密機制的 WWW 伺服器|
### 查詢port servcie 的方式: /etc/services
:::
### TCP
- 
- `Sequence Number`: 若 TCP 資料過大,需切割放進不同封包,紀錄封包序號,以便重組 TCP 資料。
- `Acknowledgement Number`: 若接收端有收到會用這個確認碼告知 client 端封包被正確收下了。
- Control bit
+ SYN: 1 為希望與對方線進行同步處理(建立連線)
+ ACK: 1 為回應封包
+ FIN: 1 為通知對方結束連線(等對方確認)。
+
- `Window`: 控制封包流量,Window=0 代表緩衝區滿了,應停止傳送。
+ 為什麼TCP十分可靠 -> 三向交握
+ 
1. 發送方發一個帶有 SYN=1 的封包,並發送一個 sequence number = 10001 給收方
2. 收方確認後回覆:
1. ACK=1 與 ack=10001 (剛剛接收到的 sequence) +1
2. SYN=1 與 sequence=20001 (收方也要回傳要求連線)
3. 發送方回傳:
1. ACK=1 與 sequence=20001+1
4. 確定連線,開始傳送資料。
:::info
## Sequence number & ack
**為什麼要 sequence**?
+ 讓對方回應時可以針對這個 sequence 發送對應 ack ,確認封包是否已被接收和確認對方收到多少。

+ 669+1
+ 670+1460
:::
:::info
||TCP| UDP|
|--|--|--|
|可靠性| 可靠| 不可靠|
|封包確認|ACK|--|
|速度| 慢| 快|
|傳輸方式| 封包按順序傳輸| 封包以串流方式傳輸|
|錯誤檢查與修正| 有| 無|
|逾時處理|逾時重傳、高速重傳(指定封包)|逾時重傳(全部封包)|
|壅塞控制| 有| 無|
|適用服務| 要求可靠傳輸的服務,ex : SSH 、文字聊天、電子郵件、檔案傳輸... |即時服務,ex : 串流媒體、網路電話|
:::
## Application layer
+ 傳送單位為message


### HTTP
1. DNS 解析
2. 建立 TCP/IP 連線
> 包括尋找IP/MAC addr 和 TCP 三向交握
4. 送出 Get / Post
+ Get:瀏覽器將 headers 與 data 同時送出,因此只會產生 1 個 TCP 封包,最後伺服器端回應 200 與資料。
+ Post:瀏覽器先將 headrs 送出,等到伺服器端回應 100 continue 後再傳送 data,因此會產生 2 個 TCP 封包,最後伺服器端回應 200 與資料。

:::info
### 狀態碼
+ 1XX:參考資訊,例如:POST headers 後得到 100(繼續)、101(切換通訊協定)。
+ 2XX:成功,例如:200 客戶端要求成功。
+ 3XX:重新導向,例如:301 永久導向、302 暫時導向、304 未修改。
+ 4XX:用戶端錯誤,例如:401 拒絕存取、403 禁止使用、404 找不到。
+ 5XX:伺服器錯誤,例如:500 伺服器錯誤。
:::
### FTP

+ FTP 主要是應用於檔案傳輸使用,將共享檔案存放於 FTP 伺服器,讓一般使用者可以透過網路來下載或上傳。它的重點是在異質性電腦之間、以及遠距離的檔案共享使用

1. FTP 檔案傳輸系統採用主從式模式,FTP 伺服端隨時監視埠口 21(tcp/21)是否有連線要求。FTP 客戶端需要連線時,便由著名埠口 21 連結到 FTP 伺服器。
2. 伺服端同意連線後(驗證使用者名稱及密碼),便建立並保持著控制連線,以便隨時交換訊息,當需要傳輸檔案時,再建立資料連線,傳輸後立即釋放該資料連線,一般伺服端的資料連線都建立在埠口 20(20/tcp)。
4. 雙方透過資料連線來存取各自檔案系統(File System)中的檔案
### DNS

+ DNS 是使用 TCP or UDP ?
+ UDP 協議:DNS 查詢的資料包較小、機制簡單;UDP 協定的額外開銷小、有著更好的性能表現;
+ TCP 協議:DNS 查詢由於 DNSSEC 和 IPv6 的引入迅速膨脹,導致 DNS 回應經常超過 MTU (傳輸單元最大值)造成資料的分片和丟失,我們需要依靠更加可靠的 TCP 協定完成資料的傳輸
> 隨著 DNS 查詢中包含的資料不斷增加,TCP 協定頭以及三次握手帶來的額外開銷比例逐漸降低,不再是佔據總傳輸資料大小的主要部分
> DNSSEC: 藉由在 DNS 資訊中附加電子簽名 (DS) 為網域多加一層安全防護
+ 一般情況皆使用 UDP , 因為在查找網址時較講求速度,就算掉包了再重送就好了。
> 注意! DNS 可能會同時使用 TCP 與 UDP 兩種協定:
+ UDP 封包大小較小,資料大小超過 512 位元組的限制時會被截斷,如果使用者沒有從 DNS 得到回應,3~5 秒後會使用 TCP 重送。
> 當 DNS 查詢被截斷時,應該使用 TCP 協議進行重試
+ DNS 區域轉送 (Zone Transfer), DNS 要確保資料庫(主 DNS 與副 DNS)資料相同,當有變動時,會用區域轉送來保持資料一致,此時會用 TCP 傳送。
### Anycast
#### AS

[圖自](https://www.cloudflare.com/zh-cn/learning/network-layer/what-is-an-autonomous-system/)
+ Internet 是由不同網絡組成的網路,自治系統是組成 Internet 的大型網絡。更具體地說,自治系統(AS)是具有統一路由方式的巨型網絡或網絡群組。連接到 Internet 的每台計算機或設備都連接到一個 AS。
#### BGP
+ AS 通過BGP通知其到其他 AS 和路由器的路由策略。 BGP 是在 AS 之間路由數據包的協議。如果沒有這些路由信息,大規模運行將很快變得不切實際:數據包將丟失或花費太長時間才能到達目的地。
+ 每個 AS 使用 BGP 通知它們負責的 IP 地址以及它們連接的其他 AS。 BGP 路由器從世界各地的 AS 中獲取所有這些信息,並將其放入稱為路由表的數據庫中,以確定從 AS 到 AS 的最快路徑。當數據包到達時,BGP 路由器會參考其路由表來確定數據包接下來應轉到哪個 AS。
+ 全世界有許多 AS,BGP 路由器不斷更新其路由表。網路失去連線時,新網路增加時時,AS 擴展或收縮其 IP 地址空間,所有這些信息都必須通過 BGP 通知,以便 BGP 路由器可以調整其路由表。
#### Anycast

+ 是一種網路定址和路由的策略,使得資料可以根據路由拓撲來決定送到「最近」或「最好」的目的地。
## TCP/IP 統整
| 層級 | 資料型態 | 負責事項 | 常見協定 | 傳送依據 |
| -------- | -------- | -------- | -------|---|
| Application | message | 定義應用程式如何提供服務。 | HTTP, FTP, DNS, SMTP, SSH |
| Transport | segment | 負責傳輸過程的流量控制、錯誤處理、資料重送等工作。 | TCP, UDP, RTP, SCTP |port
| Network | packet | 決定資料如何傳送到目的地。 | IP, ICMP |IP Address
| Data Link | frame | 負責網路對硬體的溝通。 | Ethernet, Wi-Fi | MAC Address
#### HTTP/1 瓶頸
+ Single Request
+ HTTP 需要等到ACK才能做第二次reguest
+ Exclusive Client-initiated Requests
+ 在 HTTP 的協定中,只有 Client 才能發出 Request,因此就算 Server 預先知道 Client 需要某項資源,它也必須等到 Client 主動發出請求,才能把資源丟過去
+ Uncompressed Request and Response Headers
+ header 的大小從約 200 bytes 到大於 2 KB,且很多重複的訊息
### HTTP/2 SPDY
**SP**ee**DY**
+ 改善網頁的 Page Load Time
+ 可以不需等待response 就發出下一個request

[圖自](http://fengwc.cn/article/http2-faster-web/)
+ Compressed Headers
+ 將 Client 和 Server 之間的訊息拆成 Control Frame 和 Data Frame
+ Server Push Streams
+ Server 可以主動將 Client 需要的資源 push 到瀏覽器的快取中,不需要透過 Client Requet 觸發 Stream
+ Client 第一次存取某個網頁時,Server 就會自動 push 一些 Client 需要的資源到快取中,下一次瀏覽相同網頁時就能減少載入頁面的時間
+ Always Over TLS
### HTTP/3 QUIC
**Q**uick **U**DP **I**nternet **C**onnection
\
[圖自](https://medium.com/@chester.yw.chu/http-3-%E5%82%B3%E8%BC%B8%E5%8D%94%E8%AD%B0-quic-%E7%B0%A1%E4%BB%8B-5f8806d6c8cd)
1. 封包丟失機率較高
2. 較長 Round Trip Time (RTT)
3. Connection Migration
:::info
### Connection Migration
+ TCP連線所需條件
+ source port
+ destination port
+ source ip
+ destination ip
+ 更換IP 就需要重新連線!!!
> WIFI連線轉移到4G網路連線
+ QUIC
+ 64 bits 的獨立 Connection ID
:::

[圖自](https://medium.com/@chester.yw.chu/http-3-%E5%82%B3%E8%BC%B8%E5%8D%94%E8%AD%B0-quic-%E7%B0%A1%E4%BB%8B-5f8806d6c8cd)
+ 初始交握 (Initial Handshake)
+ 客戶端會傳送一個哈囉訊息 (CHLO, Client Hello) 到服務端,觸發服務端回傳一個代表交握未建立或是公鑰已經過期的拒絕訊息:REJ 封包
:::info
+ REJ 封包
+ Server Config:包含服務端的長期DH公鑰 (Diffie-Hellman Public Key)
+ Certificate Chain:用來對服務端進行認證的憑證串鏈
+ Signature of the Server Config:經過數位簽章過的 Server Config,讓客戶端可以驗證這些資訊確實是由服務端發出。
+ Source-Address Token:經過認證加密過後的客戶端IP資訊
:::
+ 驗證Server Config 確定無誤後,回傳 Complete CHLO其中包含request 資料一并用初始密鑰加密後回傳給服務端。
+ 都沒問題後服務端傳送 SHLO (Server Hello) 的封包,封包中包含了服務端新產生的短期DH公鑰 。
> 每一次建立連線都會產生新的短期DH公鑰和密鑰。接下來要進行的,就是更換初始密鑰。
#### 封包遺失恢復 (Loss Recovery)
+ TCP
+ 在發送端為每一個封包標記一個編號 (sequence number),接收端在收到封包時,就會回傳一個帶有對應編號的 ACK 封包給發送端
+ 當發送端在超過一定時間 (Retransmiting Timeout, RTO) 之後還沒有收到回傳的 ACK,就會認為封包已經丟失,啟動重新傳送的機制
+ 因為重傳使用同一個sequence number,是接收端在收到初始封包後回傳的ACK (較長RTT),還是接收端在收到重傳封包後回傳的ACK (較短RTT)
+ QUIC
+ 初始與重傳的每一個封包都改用一個新的編號,unique packet number
## OSI

|| Layer | 設備種類 | 負責功能 | 協定 |
|-| --- | ---- |---| --- |
|7| Application |WAF (Web application firewall)| 定義介面給應用程式 | HTTP FTP SMTP |
|6| Presentation |WAF | 轉成網路的標準格式 加解密 加解壓縮 |SSH Telnet|
|5| Session | WAF | 開啟和關閉兩個裝置之間的通訊 | |
|4| Transport |firewall |流量控制 錯誤控制 資料完整偵測 | TCP UDP |
|3| Network |router |為資料尋找抵達目的地的最佳實體路徑 | IP ICMP|
|2| Data-Link | switch | 位於相同網路的兩個裝置之間的資料傳輸 |有線-802.3 無線-802.11|
|1| Physical | hub repeater |資料傳輸的實體設備||

REF:
[粗淺了解 TCP/ IP](https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-%E7%B6%B2%E8%B7%AF%E5%9F%BA%E7%A4%8E-tcp-ip-f89cc09f1f36)
[在瀏覽器輸入網址並送出後,到底發生了什麼事?](https://www.cythilya.tw/2018/11/26/what-happens-when-you-type-an-url-in-the-browser-and-press-enter/)
[淺談Ethernet](https://www.graniteriverlabs.com/zh-tw/technical-blog/ethernet-lan-test)
[HTTP2](https://sls.weco.net/CollectiveNote20/SPDY)