接下來這篇要來說說 traceroute 與 arp 這兩個指令
traceroute 它是一個可以跟蹤從你的電腦但某個目標之間的每個路由器的過程。
以電腦執行的結果如下 ,總共有 7 跳,然後每一條有三個時間,例如第一跳的 6.002 ms 8.019 ms 7.969 ms,代表往返時間 ( RTT ),會有 3 個是因為 traceroute 預設會發出三個請求。
然後裡面還有 64 hops max 這是最大跳躍數,然後 52 byte packets 為發送的封包大小。
╰─➤ traceroute hahow.in 1 ↵
traceroute to hahow.in (35.229.250.9), 64 hops max, 52 byte packets
1 192.168.84.122 (192.168.84.122) 6.002 ms 8.019 ms 7.969 ms
2 * * *
3 10.157.65.41 (10.157.65.41) 48.075 ms
10.157.65.45 (10.157.65.45) 39.567 ms
10.157.65.41 (10.157.65.41) 39.697 ms
4 10.157.67.177 (10.157.67.177) 42.303 ms 40.104 ms 41.776 ms
5 tyfo-3335.hinet.net (210.65.126.210) 41.562 ms 34.425 ms 116.685 ms
6 72.14.213.90 (72.14.213.90) 50.516 ms
142.250.169.122 (142.250.169.122) 37.521 ms 57.299 ms
7 9.250.229.35.bc.googleusercontent.com (35.229.250.9) 37.963 ms 65.620 ms 59.137 ms
要知道這個指令在幹啥,可能也要理解網路的基本架構,之前有寫過一篇關於通訊協義的東西,可以用這裡來簡單理解一下整個結構。
然後簡單的說一下,ARP (Address Resolution Protocol)是 tcp/ip 協義的網路層的東西,它的主要功能就是 :
可以透過 IP 來找到對應的 MAC 位址
這裡先說一下,一直以來應該不少人以為用 ip 就可以連到對方電腦,但根據網路協定最下面的那層,電腦連電腦是以 MAC 為地址,然後 ip 是建在他上面的,然後當要傳輸資料時,整個封包的產生順序是由上往下,也就是說根據下圖走到網路層時,因為要準備產生 MAC,所以他這時就需要用 arp 來找到對應的 MAC,因為這樣才能走到最下面一層傳輸過去。
╰─➤ arp -a
? (169.254.169.254) at (incomplete) on en0 [ethernet]
? (192.168.84.122) at 32:a0:e7:45:bb:36 on en0 ifscope [ethernet]
? (192.168.84.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
mdns.mcast.net (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
broadcasthost (255.255.255.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
以上為 arp 指令的結果,他顯示了我們電腦的 arp cache。
? (169.254.169.254) at (incomplete) on en0 [ethernet]:
? (192.168.84.122) at 32:a0:e7:45:bb:36 on en0 ifscope [ethernet]:
這條記錄表示IP地址 192.168.84.122 的ARP映射,對應的MAC地址是 32:a0:e7:45:bb:36
它在本地網絡接口 en0 上。
? (192.168.84.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]:
這條記錄表示IP地址 192.168.84.255 的ARP映射,對應的MAC地址是 ff:ff:ff:ff:ff:ff
它是廣播地址,用於內網中的所有主機發送封包。
mdns.mcast.net (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
這條記錄表示多播地址 224.0.0.251 的ARP映射,對應的MAC地址是 1:0:5e:0:0:fb
它用於支持mDNS( Multicast DNS )服務,用於區網上的本地主機發現。
(239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]:
這條記錄表示多播地址 239.255.255.250 的ARP映射,對應的MAC地址是 1:0:5e:7f:ff:fa。
它用於SSDP( Simple Service Discovery Protoco l)服務,通常用於UPnP( Universal Plug and Pla y)設備發現。
broadcasthost (255.255.255.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]:
這條記錄表示廣播地址 255.255.255.255 的ARP映射,對應的MAC地址是 ff:ff:ff:ff:ff:ff。
它用於向局域網中的所有主機發送廣播數據包。
然後順到說一下,arp 沒辦法支援 ipv6 而是用 NDP,結果如下,概念事實上也上 arp 差不多。
╰─➤ ndp -a 127 ↵
Neighbor Linklayer Address Netif Expire St Flgs Prbs
2001-b400-e35a-b55a-0000-0000-0000-0064.emome-ip6.hinet.net 32:a0:e7:45:bb:36 en0 23h26m37s S R
2001-b400-e35a-b55a-048d-c50c-7840-754f.emome-ip6.hinet.net f8:ff:c2:3d:82:26 en0 permanent R
2001-b400-e35a-b55a-0886-f1b9-a29c-d96c.emome-ip6.hinet.net f8:ff:c2:3d:82:26 en0 permanent R
fe80::1%lo0 (incomplete) lo0 permanent R
fe80::aede:48ff:fe00:1122%en4 ac:de:48:0:11:22 en4 permanent R
fe80::aede:48ff:fe33:4455%en4 ac:de:48:33:44:55 en4 10s R
fe80::4e5:a091:aadd:256e%en0 f8:ff:c2:3d:82:26 en0 permanent R
fe80::30a0:e7ff:fe45:bb36%en0 32:a0:e7:45:bb:36 en0 18s R R
fe80::647e:c8ff:fe45:a218%awdl0 66:7e:c8:45:a2:18 awdl0 permanent R
fe80::647e:c8ff:fe45:a218%llw0 66:7e:c8:45:a2:18 llw0 permanent R
fe80::51ac:1d5a:7788:c16%utun0 (incomplete) utun0 permanent R
fe80::6d72:531a:8029:db1e%utun1 (incomplete) utun1 permanent R
簡單的說它會發送『 arp request 』到區網的所有設備,然後看看這個 ip 在這裡有沒有 mac,如果沒有則會繼續往更外一層的網路發送,直到找到為止。