---
# System prepended metadata

title: Week 09 (2022/11/10)
tags: ['1111', ncnu, lsa]

---

###### tags: `1111` `lsa` `ncnu`
# Week 09 (2022/11/10) 
[TOC]
- Book mode: https://hackmd.io/@ncnu-opensource/book
---

![](https://i.imgur.com/ln82t96.png)
>[網路基礎](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)
- 1.DNS 將 URL 轉換成實際的 IP Address，Browser 將 IP Address 包成一個 Request 送出去。
- 2.request 透過 Internet 傳送到 Server 。
- 3.收到 Request 的 Server 會跑去 Data center 撈取資料。
- 4.將撈取到的資料透過 Internet Response 回去。
- 5.Browser 解析資料並印於 Browser 上。

## 分層架構
- 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 Standardardization)
    - 架構OSI(Open Systems Interconnection Reference Model)


![](https://i.imgur.com/8rR7eUf.png)

## TCP/IP
### Link Layer
- 連接硬體相關
- link: 連接internet上相連的node
- 傳送數位訊號(0101)
#### Ethernet vs Wi-Fi


| 網路 | 標準 |   功能  | 傳輸媒介 | 碰撞處理|
| -------- | -------- | --- | -------- | ----- |
| Ethernet     | 802.3     | 區域網路連線上的通信協定    | 雙絞線     | CSMA/CD |
| WiFi     | 802.11     | 無線區域網路的電腦通訊標準     | 5GHz/2.4GHz 無線電波     |CSMA/CA |

![](https://i.imgur.com/uKGvh6Q.png) 

#### CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
![](https://i.imgur.com/i0eQO8g.png)


> 多台電腦同時傳到一台電腦也會collision

- 被動偵測

- 傳送步驟
    1. 當節點要發送訊號時，會先偵測是否有其他節點正在使用( carrier sense )。
    2. 當通道沒有被其他節點使用時，就傳送封包
    3. 封包傳送之後立即檢查是否發生碰撞（carrier detection)，若是發生碰撞則對通道發出高頻訊號，告知其他節點已經發生碰撞
    4. 偵測後隨機等待一段時限，等待後重新發送封包。
    5. 嘗試 15 次失敗的話則告知上一層 Timeout

- 用於容易偵測碰撞的網路環境
    - 有線網路
    > 同一條線

#### CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)
- 主動避免 collision
- 傳送步驟
    1. 送出資料前，聆聽網路上的狀態。如果沒有人使用，維持一段時間後，再等待一段隨機的時間後如果還沒有人使用，才送出資料。由於每一個裝置採用的隨機時間不同，可以減少碰撞的機會。
    2. 送出資料前，先送一個 RTS 封包給目標端，等待目標端做出回應有CTS封包後，才開始傳送
    3. 當資料傳送完成後，傳送裝置會等待一小段時間接收確認封包(ACK)，有收到才代表成功
    > 當失效 32 次之後通知上層 Timeout 

- **多用於無線網路**
    - 無線的環境，不容易確實的偵測是否有發生碰撞，所以修改不用被動的碰撞偵測(CSMA/CD)
![](https://i.imgur.com/VIdlt6s.png)

#### Header
![](https://i.imgur.com/4a4EHz5.png)
[圖片來源](https://ithelp.ithome.com.tw/m/articles/10267704)

##### Link layer header
- 傳送單位為 frame
- Ethernet frame
- ![](https://i.imgur.com/LET48kr.png)
- ![](https://i.imgur.com/VuKqpnD.png)

- Preamble 本身並沒有實際的意思，僅用於發送方和接收方之間同步時鐘和bit交流；當發送方發送數據時，會加上7個字節的報文，告訴接收方「請按照這種規律準備好，我馬上要發送數據了」；當接收方連續收到「10101010」這串代碼時，就需要調整字節的時鐘，準備接收數據。
- SFD（start of frame delimiter）：他只有一個byte，內容是固定的
- CRC 錯誤更正 確認封包是完整的

#### MAC Address
- 一張網卡 一個 MAC Address
>同一區域網路mac addr絕對不能重復到，但不同區域可以接受(因為不同IP)
- 在區域網路內的地址
> 班級內的座號，同班級只能有唯一一個座號，但不同班可以有相同座號。 

- size: 6 bytes (48 bits)
- 48 bits
    - 第 1 bit 為廣播地址(0) / 群播位址(1)
    - 第 2 bit 為廣域位址(0) / 區域位址(1) 
- 看第一個 byte 的最後一個 bit
    - unicast(0): 一次只能跟一個人溝通 
    - multicast(1)：可以一次跟所有人溝通
    > 可以看奇數(1) / 偶數(0) 判定
- 最後 24bits 由實際生產該網路裝置的廠商指定且不重複

- 區域網路位址(LAN Address)、Ethernet Address 或 Physical Address
- broadcast 是特殊情況，全部 bit 為 1 (FF:FF:FF:FFFF)



:::info
![](https://i.imgur.com/nbB6lug.png)
:::


:::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?

答案:
1. unicast
2. multicast
3. broadcast

判別方法
- 若第一個 byte 最後一個 bit 為 0，代表為 偶數
    > 4A 是偶數
- 若第一個 byte 最後一個 bit 為 1，代表為 奇數
:::
:::	info
如何查詢自己電腦的mac address
```
ifconfig | grep ether
```
:::
#### connecting device
- hub
    - broadcast 收到資料就全部傳出去
    > 不安全
    - 半雙工(half-duplex) 
        - 收資料或送資料不能同時，一次只能作其中一種
- switch
    - 可以建立 MAC address table
    > 依照價位儲存不同數量的 Mac address
    > 找不到就 broadcast
    - 每個 port 都是獨立的 collision domain
 	- 全雙工
![](https://i.imgur.com/6xbhENb.png)

- LAN 
    - 連接住宅、學校或辦公大樓有限區域內電腦的網路
    - Ethernet(乙太網路)
        - Ethernet 為 LAN 中最常使用的一種技術
        - 相關規範由IEEE訂定，收錄於IEEE 802.3 標準中
:::info
#### 網路拓樸
> 現在大家最常用的是 STAR、TREE
1. Star
![](https://i.imgur.com/d4OwauD.png)
- 優點：
    - 每個人都獨立一條線，好處是**比較不會發生碰撞**，壞處是如果不常用的話比較浪費。
    - 由中間管理，資料傳輸品質高、資料安全強及網路維護較容易，比較不會碰撞因為大家都有一條線。
- 缺點: 如果中間的 switch 死掉了，大家就都死了

2. Bus
![](https://i.imgur.com/n5KLBE2.png)
- 優點：要在新增跟刪減電腦時容易。網路佈線簡單，只要一條網路主幹就能將網路上所有電腦連結起來，而且不管是要在該網路加入新電腦或想將那部電腦退出網路，都不需要做特殊處理。
- 缺點：較容易產生碰撞、中央若癱瘓一樣就不能用了。各工作站之間傳送資料還都必須透過同一傳輸媒介

3. Ring
![](https://i.imgur.com/oMjfu4r.png)
- 優點：大家都是走同一個方向（順、逆時針），不會撞在一起。
    - 網路上任何一個節點使用傳輸媒體的權限都相等，而且各節點使用傳輸媒體的機會平均分配，沒有爭執及碰撞的現象，尤其使用在高負載網路上非常適合。
- 缺點：架設比較困難；新增、刪減機器比較麻煩。
    - 環狀拓樸圖上任何一個節點發生故障，可能使整個網路癱瘓。而且在佈放網路方面，由一個起始點開始佈放線路，經過整個網路區域後必須回到原點，在網路網路架設施工方面的確有困難。



4. Tree
![](https://i.imgur.com/o0GxED6.png)
- 可以當作星狀網路的延伸，像是root一樣會逐漸延伸分層下去
- 相對來說可用性較佳
- 優點：具有星狀的優缺點外，又可以改善星狀的缺點，當某一主機故障時，只會影響到該節點的周邊電腦不能通訊，而不會使整個網路癱瘓，其他節點還是可以正常運作。
- 缺點：整個網路的可靠度還是受限於各節點主機電腦

> 概念與實務還是會有所不同

[參考資料](https://www.atcnet.com.hk/newsContent_233.html)

**考量的重點：**
- 便利性
- 成本
- 可用性
> 之後會講到「備援機制」
:::


### Internet Layer

#### 網域
- 連線方式
    - 同網域: 可以直接透過 CSMA/CD 傳送資料，網卡對網卡(MAC frame)
    - 不同網域：需要藉由 Router 將不同網域連接。

#### Router
![](https://i.imgur.com/ED987PS.png)
- 若 PC01 要傳送資料給 PC11 時：
    1. 看封包目標 IP 位置。
    2. 查看自己主機的 Net_ID 是否與封包的相同(屬於同區網)，若相同可以直接傳給目的主機。
    3. 若不同，查詢 default gateway (此為 Server A) 並傳給它。
    4. 不理會封包流向，default gatway 會執行上述動作繼續往目的地傳送。

:::info
如何查看自己的 routing table
- `route`：主機已 domain name 的方式呈現
- `route -n` 主機名稱以 IP 的方式呈現
- ![](https://i.imgur.com/d2ivYAf.png)
:::

#### IP
1. IPv4: IP address 以32 bits 表示為目前主流
    - IP 位置枯竭：現在在網路上的主機數已將多過 IPv4 32位元可以表示的數量
2. IPv6: IP address  以 128 bits 表示，未來趨勢   以 128 bits 的方式呈現

:::info
**NAT(Network Address Translation): 將私有IP位址轉成公開IP位址**
![](https://i.imgur.com/kQWD55i.png =600x)

- **網站伺服器無法定位私有IP**，在電腦送request，router就會把來源的IP位址改成public IP(Router同時有兩個IP位置，區域內的私有IP位置，以及ISP指派的公開IP位置)
- Router 在更改ip位置時 會將私有IP 與 request 目標 IP 記錄下來
- 因為可以多個主機共用一個公有 IP
> 私有 IP: 在內網使用的 IP
> 公開 IP: 在外網使用的 IP

|         |                   處理事項                   |
|:-------:|:--------------------------------------------:|
| router  |           只轉送，不會記下封包狀態           |
|   NAT   |         轉送外，還會幫你做 IP 的轉換         |
| bridges | 連接兩個不同網段，可以是相同類型或不同類型。 |
      
:::
#### IP 位置表示
- 二進位表示
    - 00000000.00000000.00000000.00000000 => 0.0.0.0
        - 全部都是 0 代表廣播
- 分為 Net_ID，Host_ID
    - Net_ID: 網路編號
    - Host_ID: 主機編號
- Host_ID 不可全部都是 0 或 1
     - 全0:表示網段的位置
     - 全1:表示廣播的位置

#### ip種類
![](https://i.imgur.com/BkoXZj4.png)

- 有A.B.C.D.E 五種 IP class
    - 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
    > AND運算:
    > 1.2.3.4 AND 255.255.255.0 
    > --> 00000001.00000010.00000011.00000100 AND 11111111.11111111.11111111.00000000
    > --> 00000001.00000010.00000011.00000000
- 有Public IP / Private IP
    - Public IP: INTERNIC 所統一的規畫的 IP，有這種 IP 才可以連上 internet
	    > INTERNIC: 負責登記網域名稱與網路協定位置，並散播有關網際網路資訊的組織

    - Private IP：
        - 私有 IP 無法接上 Internet，但可以內部互相連線。
        - 如果要將私有 IP 連上 Internet，可以利用 NAT 基IP 進行轉換(偽裝)，如此一來也可以使私有 IP 電腦連上去。
	- 其中ABC三個CLASS當中又各保留一段作為Private網段，分別是:
	    - 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
- 切割網段 => 先決定想要分配的主機數：
    - 以 C Class 網路為例：
        - 網路遮罩: 11111111.11111111.11111111.**00000000** =>255.255.255.0
            - 粗體為可變動位置
        - 8 位元: 2 ** 8 -3 = 253 台主機
            - `-2` : 多少台主機使用(IP)
            - `-3`：可以存放多少台主機，多扣一台switch (gateway使用)
- `xxx.xxx.xxx.0`: 網段的第一個 IP，用於代表此區段網路
- `xxx.xxx.xxx.255`: 最後一個 IP，用於廣播
- 網路遮罩: 用來計算在哪個網段(利用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.10000000(遮罩多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 |


#### LAB 
- 尋找自己的網域
    - `ifconfig`
    ![](https://i.imgur.com/8euq2h8.png)
        > inet: 自己的IP位址 (本身)
        > netmask: 子網路遮罩 
    - 第三個byte 29和224做&運算
	```
	00011101
	11100000 AND
	--------
	00000000
	```
    - 得子網路位址network: 10.105.0.0 (所在網段)
- 193.44.55.66 ==/25==: 表此遮罩**前 25 個 bit 都一樣**，屬於同一區段網路
- 193.44.55.66/8
    - 所在的網段: 193.0.0.0
    - 所在的網段用來 boardcast: 193.255.255.255

範例1:
- 192.168.3.4 ==/25== -> 11000000.10101000.00000011.00000100
- network -> 11000001.00101100.00110111.0....
    - 前25個要相同才是在同一網段

範例2:
- 193.192.191.190 ==/27== > 11111111.11111111.11111111.10111110
- network 前 27 位元一樣， netmask: 11111111.11111111.11111111.11100000
- network: 11111111.11111111.11111111.10100000(193.192.191.160)
- broadcast:11111111.11111111.11111111.10111111(193.192.191.191)
- ip count : 32
- ip range: 193.192.191.160~193.192.191.191
---
- MAC
    - 區網下區分裝置
    - 12 digits，6 對 16 進位
    - 不能隨意更改
    - physical address
    - 寫在網卡內的 bios 內
    
- IP addr
    - 控制裝置在全球網域下的溝通
    - IPV4: 32 bits 4對3位十進位表示
        - 192.168.0.121
        - ex. IPV6: 128bits 8 對 4位
        - ex. fe80::f060:18c6:27de:595d%55
    - 可任意改變
    - logical address
    - 在傳遞過程中改變

![](https://i.imgur.com/jzNEW0r.png)
[圖片出處](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
- WAN(Wide Area Network)
    - 接外部 IP 地址用
    - WAN 就是由多個 LAN 組成之集合
:::


#### ICMP 

- 在發送封包時，我們不知道是否可以抵達目的，傳送失敗時，也想要知道發生什麼錯誤。IP封包本身並不會回報封包的傳送狀況，因此需要一個回報狀況的機制 ==> ICMP

`traceroute <網站>`
![](https://i.imgur.com/NwWToZj.png)

#### ARP(Address Resolution Protocol)/RARP(Reverse Address Resolution Protocol)
- ARP 封包是用廣播的
    > ARP: 誰是`1.2.3.4`?
    > `1.2.3.4`: 是我 (此 IP 聽到要自己回)
    > 這種運作方式非常不安全，每個人都可以假裝自己的身分

- 傳遞資料時透過 IP 知道 MAC address
	1. 向整個區網發出ARP封包(廣播的)
    2. 對方回傳MAC Address
    3. 開始傳送資料
    4. 將該 IP/MAC 寫入 ARP Table 中(保持20分鐘)

:::info
**查看 ARP table**
- `arp`指令:
    - `arp -n` : 主機名稱以 IP 型態顯示
    - `arp -d` ：將某筆 IP 從 ARP Table 刪除
    - `arp -s`: 將某筆 IP/MAC 寫入 ARP Table 中
:::

### Transport Layer








































































































