使用常見的網路命令檢視當前網路狀態——Mac OS X篇

zkhCreator發表於2016-01-19

此篇文章是本人第一次翻譯,如有不妥,請見諒。

本文是翻譯文章:原文地址

以下是正文內容:

作業系統擁有一套通用的實用程式來查明本地主機的有線或者無線鏈路狀態和IP的連線情況。如果本機有IP連線,那麼就意味著有線或者無線是正常工作的。在Mac OS X系統中,有以下幾個實用的程式來確認連線狀態:
ifconfig: 查詢本機IP地址和網路介面。
netstat: 使用-r來找到特定網路介面的預設閘道器。
ping: 用來測試本機之間的端對端的IP連線。
arp: 管理本地的ARP快取。

以下是連線狀態和IP連線的例子:

  1. 開啟Terminal(譯者附:可以通過Spotlight或者實用工具->終端“)

  2. 輸入ifconfig命令,來查詢特定網路介面的IP地址。在這個例子中這個無線網路介面(en1)的地址是:192.168.128.253。

    myhost:/usr/bin someuser$ ifconfig
    en1: flags=8863(UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST)
    inet 192.168.128.253 netmask 0xffffff00 broadcast 192.168.128.255
    ether 00:17:f2:e8:ac:0a
    media: autoselect status: active
    supported media: autoselect

  3. 輸入netstat -r 來尋找實用網路介面en1 的預設閘道器。在本例子中en1 的預設閘道器地址是:192.168.128.1。

    myhost:/usr/bin someone$ netstat -r
    Routing tables
    Internet:
    Destination Gateway > Flags Refs Use Netif Expire
    default 192.168.128.1 > UGSc 90 2 en1

  4. 區域網的資料互動在OSI模型的第2層(即資料鏈路層)。主機在同一個區域網中傳送資料給區域網中的使用者使用的第二層的地址(即MAC地址),每一個主機都有一個動態的MAC地址轉化為IP地址的列表對映到ARP表中,該表是通過ARP協議 來找到哪個MAC地址對應的是區域網中的哪個IP地址(IP地址在OSI的第三層網路層中)。ARP是十分詳細的,同時為了更好的表達ARP,其中的許多內容被刪除。以下是ARP的簡要介紹:

    每次一個主機需要傳送資料到另一臺主機中的時候,他都會檢查本機的ARP表,如果在ARP表中存在相關的對映,那麼資料就會直接傳送到該IP地址的MAC地址中。如果不存在對映,為了獲得接收資料的IP地址對應的MAC地址,本機的將會傳送一個ARP請求廣播到區域網,檢視已知區域網中的所有IP地址。當對應IP地址的主機收到這個ARP請求後,將會以單播的方式傳送ARP響應報文給請求方,告訴請求方自己的IP地址和自己相關聯的MAC地址。當請求方收到這個ARP響應報文後,它將更新自己的ARP表同時使用它自己的MAC地址直接傳送幀到目的主機上。為了防止ARP快取的老化,主機將會頻繁的傳送ARP請求來更新自己的ARP快取。

  5. 為了使用Terminal(終端) 手動的重新重新整理你的ARP表,我們使用以下命令:

    mycomputer:/usr/bin someuser$ arp -d -a

  6. ping預設閘道器或區域網上另一臺主機的IP地址來測試IP的連通性。在Mac OS X上,ping命令是連續的(譯者附:不使用終端命令,ping程式在預設引數下是不會停止的)。

    mycomputer:/usr/bin someuser$ ping 192.168.128.1

如果本地連線是同的並且目的主機也是線上上並且是可以達到的,你將會輸出每個ICMP(Internet Control Message Protocol)回顯請求來顯示每個ICMP回顯應答

格式如下:

PING 192.168.128.1 (192.168.128.1): 56 data bytes

64 bytes from 192.168.128.1: icmp_seq=0 ttl=64 time=3.255 ms
64 bytes from 192.168.128.1: icmp_seq=1 ttl=64 time=0.897 ms
64 bytes from 192.168.128.1: icmp_seq=2 ttl=64 time=0.897 ms
64 bytes from 192.168.128.1: icmp_seq=3 ttl=64 time=0.905 ms

7 . 如果ICMP請求超時並被ICMP回顯應答,那麼最有可能的是本地主機與目標主機中間的電纜存在問題,或者目的主機太過繁忙而無法回應。在這種情況下,你可以嘗試ping其他區域網中的主機。如果ping的過程中超時不存在,那麼就說明本地連線是好的,同時你需要檢修問題主機的故障。
情況如下

PING 192.168.128.1 (192.168.128.1): 56 data bytes

64 bytes from 192.168.128.1: icmp_seq=0 ttl=64 time=3.255 ms
64 bytes from 192.168.128.1: icmp_seq=1 ttl=64 time=0.897 ms
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
64 bytes from 192.168.128.1: icmp_seq=4 ttl=64 time=0.897 ms
64 bytes from 192.168.128.1: icmp_seq=5 ttl=64 time=0.905 ms
Request timeout for icmp_seq 6


  1. 如果你的連線是好的但是對方的防火牆拒絕了你的ICMP回顯請求,那麼你講收到ICMP請求超時的訊息。如果目的主機確實響應你的ARP請求,那就意味著你的本地連線是好的同時網路狀態是好的。那麼就應該嘗試關閉目的主機的防火牆,並再次傳送PING請求,或者嘗試PING一個其他的主機。

PING 192.168.128.1 (192.168.128.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 5

  • 如果目的主機沒有響應ARP請求,或者目的主機不線上,你將會接收到“Host is down”這樣的訊息。這樣你就需要嘗試ping其他主機,如果還是收到Host is down”這樣的訊息,那麼就說明你的IP地址是配置錯誤的或者你的上行鏈路是好的,但是區域網中的其他部分是有問題的。造成這個問題的可能的原因是 上行鏈路的管理不當VLAN不匹配電纜上游存在損壞

    PING 192.168.128.1 (192.168.128.1): 56 data bytes
    ping: sendto: No route to host
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down
    ping: sendto: Host is down

  • 如果你的本地連線是有問題的,那麼你將會收到”No route to host“這樣的訊息,這種狀態下你就需要確認你的介面卡已啟用,或者重新把茶以太電纜(網線),或者重啟你的無線連線。

    PING 192.168.128.1 (192.168.128.1): 56 data bytes
    ping: sendto: No route to host
    ping: sendto: No route to host
    ping: sendto: No route to host
    ping: sendto: No route to host
    ping: sendto: No route to host

  • 相關文章