Skip to content

antony@notes:~/networking$ cat "Ping-命令的運作.md"

`Ping` 命令的運作

2022-06-22· networking ·網路基礎

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 運算,

  1. 先用自己的 ip 和自己的 subnet mask 做 and 運算
  2. 再用對方的 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 運算

  1. 先用自己的 ip 和自己的 subnet mask 做 and 運算
  2. 再用對方的 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 囉 ~

:::

tags: 網路基礎