ARP與ICMP的原理與使用 - daniel-qa/Network GitHub Wiki

ARP與ICMP的原理與使用

第三層封裝來源IP和目的IP,

第二層記錄來源MAC和目的MAC,

如果目的MAC和我不同網段,就會詢問 Router 的 MAC,再封裝第二層的 MAC

  • arp -a

查看 ARP 的 Cache

看它問過哪些 IP,得到的 MAC 是多少,cache 的目的,它只要問過,下次就不用再問一次

  • arp -d *

就是把剛剛的 cache 清乾淨

用 arp -a ,應該就會發現剛剛的 cache 不見了

接下來 ping 同網段的位置,192.168.1.10,再用 arp - a 查看,應該就會看到 1.10 的 ip 和 mac

再清掉 caceh,再 ping 8.8.8.8, 因為跟我不同網段,所以這次不是問 8.8.8.8 的 MAC, 而是問 Router 的 MAC

ARP 與 ICMP 都在 OSI 通訊協定第三層

為什麼喜歡用 ping 來測網路,因為只要 IP 有設對,剩下的就是硬體的問題,比如路由器,交換機,網路卡,網路線的問題

就可以避開 4 5 6 7層的干擾

第二層的表頭,有來源MAC,目的MAC, ( Ethernet) ,在第三層的內容裡面( Payload), 包含了第二層的表頭,和第三層的內容

在第三層的內容裡面,包含了 ICMP 的表頭和 ICMP 的 DATA

在 ICMP 表頭中重要的是這四個欄位(Type, Code, ID, SN )

同一次 ping, 封包中,ID 的號碼會一樣,斷掉下次再 ping, 它就會換一個新的 ID

所謂 ping,就是我送一個 request 封包給對方,對方回一個 Reply 封包給我,這樣一個來回的封包,我們就稱為一對封包

DOS 在 PING時會有4對封包,同一對封包,SN 會一樣,那下一對會加 1

TYPE 是主類別,Code 是細分,大部分只有 Type, 沒有 Code,則為 0

ping 時,正常會有一個 Echo Request, 和對方傳回來的 Echo Reply,

如果不想讓對方 ping,防火牆可以設定擋掉 TYPE 8 , Echo Reply, 對方就沒辦法 ping 我

TYPE 3

Destination Unreachable

Code 0 : Network unreachable ( 網路連不到; 有可能是Router找不到網段)

Code 1 : Host unreachable ( 主機連不到;網段已經找到,但找不到那個網段裡的電腦)

Code 2: Protocol unreachable ( 通訊協定連不到; 已經找到那台電腦,但防火牆把ICMP擋掉了)

今天如果我們要讓人家 PING,防火牆就要開放 Echo Request, 或 ICMP TYPE 8

以 AWS ECS 防火牆為例,要打開 ICMP,Echo Request; 千萬不要整個 ICMP 都開,從安全的角度,只開需要的

  • 用 Wireshark 抓封包

ping 8.8.8.8

過濾 ICMP 的封包

抓 ICMP 封包第二層表頭

ICMP 表頭

Echo Request

type : 8

Echo Reply

type :0

同一次 ping , 它的 ID 都是1,下一對 PING, SN 會加1

下一對 ping, ID 還是1, SN 加1,變 24

0

  • Ping 常用來測試網路是否有通

  • ping 127.0.0.1

    只會在這個電腦跑一個迴圈,不會送到網卡; ping 不通的話,代表這台電腦 TCP/IP 的軟體問題。

  • ping 自己網卡的 IP

    ping 不通,就代表網卡的問題; 網卡也是會壞掉

  • ping router IP

    ping router 不通,我就想再 ping 看看隔壁,假如我 ping 隔壁有通,ping router 不通,那可能就是 router 的問題

  • ping 8.8.8.8 ( 外部 IP)

    假如 8.8.8.8 ping 不通,再 ping 其他外部 IP 也不通,我就會猜是 ISP 的問題,我就會打電話到中華電信去問看看,那可能是中華電信在維護中

  • ping www.google.com

    假如 8.8.8.8 有 ping 通,我們就會再 ping 一個名稱,比如 www.google.com,假如ping 不通,可能是 DNS Server 的問題,名稱無法解析,這時候,再去解決 DNS Server 的問題。