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 的問題。