antony@notes:~/networking$ cat "Ping-命令的運作.md"
`Ping` 命令的運作
2022/06/04 學習目標 [TOC]
Ping 命令的運作

- Mac 電腦 ip :120.96.143.120/24
- Win10 電腦 ip :120.96.143.250/25
Ping 的icmp封包一定是有去有回。 Ethernet 有線網路,機器之間要連線一定會會透過 Mac Address 來溝通。
運作流程
當 Mac 電腦要 ping 120.96.143.250 (Win10 電腦)時,
在 Mac 電腦上會先做兩次 and 運算,
- 先用自己的 ip 和自己的 subnet mask 做 and 運算
- 再用對方的 ip 位址和自己的 subnet mask 做 and 運算
第一次 | 第二次 120.96.143.120 | 120.96.143.250 255.255.255.0 & | 255.255.255.0 & ---------------- | ------------------ 120.96.143.0 = 120.96.143.0 ---> 兩個 Network ID 一樣
- 如果 Network ID 一樣, 封包就會從 Mac 電腦透過 ARP 通訊協定傳到 win10 電腦。
- 如果 Network ID 不同,封包就會送到 Default Gateway 。
當 win10 電腦收到封包以後會回傳,此時在 win10 電腦也會做兩次 and 運算
- 先用自己的 ip 和自己的 subnet mask 做 and 運算
- 再用對方的 ip 位址和自己的 subnet mask 做 and 運算
第一次 | 第二次 120.96.143.250 | 120.96.143.120 255.255.255.128 & | 255.255.255.128 & ---------------- | ------------------ 120.96.143.128 != 120.96.143.0 ---> 兩個 Network ID 不一樣
- Network ID 相同就會透過 ARP 傳送封包給 Mac 電腦。
- 如果 Network ID 不同,封包就會送到 Default Gateway 。
小結論
- 相同 Network ID 就會啟動 ARP 通訊協定將封包送達。
- 不同 Network ID 一定會將封包送達 Default Gateway。
額外補充
- mac address 的前三碼,同一品牌都會一樣,可用 mac address 直接辨認網卡。
00:23:05,J409電腦的 MAC address
實體 Ethernet 有線網路建構
定義 : 由1個或多個 Switch 負責連接一個區域內,所有的有線網路。
提問 : 如果一間教室有 31 台電腦,要用幾台 Switch ( 一台 5 port ) 來建構教室網路?
答 :
:::spoiler 選項 1

- 如果用這種串聯的方式建構教室網路,最左上角的 Switch 連到的電腦要傳資料給右下角連接 Switch 的電腦,會經過 10 台 Switch 才能將資料傳送到,太過耗時和耗資源,此方法不合適。
:::
:::spoiler 選項 2

- 應該選擇 2 台主要的 Switch 互相連接 8 台 Switch ,再由 8 台 Switch 去連接教室所有的電腦,這樣電腦與電腦之間要傳資料,只需經過 4 台 Switch 。
- 企業沒錢請人來做高架地板,將網路線埋到地下,然後買一台 48 port 的 Switch 就只能照上面的方法做。
:::
:::spoiler 銘傳大學 J409 教室為例

- 銘傳大學比較有錢,兩間教室都做高架地板,將網路線埋到地下,然後用一個 48 port 的 Switch 將所有電腦的有線網路,通通連接在一起。 :::
Routing Table

:::info
ip_forward 永久開啟
$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf免重啟立即生效指令
$ sudo sysctl -p:::
開啟封包轉送後,再
:::success
新增 Routing Table
$ sudo route add -net $destination netmask $SubnetMask gw $GWIP
# -net -> 目的地 network ID
# netmask -> 目的地子網路遮罩
# gw -> gateway 以上指令只要重新開機就會重置
永久修改 Routing Table
$ sudo nano /etc/local.d/route_set.start
#!/bin/sh
route add -net $destination netmask $SubnetMask gw $GWIP
## 賦予執行權限
$ sudo chmod +x /etc/local.d/route_set.start
## 啟用開機執行檔功能
$ sudo rc-update add local
## 重新開機
$ sudo reboot要記得安裝 bash !!!
:::
:::info
練習
當 IP 位址尾數 11 的電腦要 ping 192.168.55.21 可以通時,要做以下設定
## 在他的 Alpine Linux 上先開啟封包轉送
$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
## 免重啟立即生效 ip_forward
$ sudo sysctl -p
## 新增 Routing Table
$ sudo route add -net 192.168.55.0 netmask 255.255.255.0 gw 192.168.55.254而 IP 位址尾數 21 的電腦也要做以下設定
## 在他的 Alpine Linux 上先開啟封包轉送
$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
## 免重啟立即生效 ip_forward
$ sudo sysctl -p
## 新增 Routing Table
$ sudo route add -net 192.168.66.0 netmask 255.255.255.0 gw 192.168.66.254/25兩者都做完設定後,就可以在 IP 位址尾數 11 的電腦 ping 192.168.55.21 囉 ~
:::