引言
做Web開(kāi)發(fā)必不可少與網(wǎng)絡(luò)連接打交道,就是運(yùn)維也整天都是301,302,401,403,404,500,502,503。見(jiàn)的多了,你都會(huì)爛熟于胸。讓我們采用自上而下的方法,來(lái)測(cè)試Internet連接并對(duì)其進(jìn)行故障排除。
下面的每個(gè)步驟,都可能為你提供有關(guān)互聯(lián)網(wǎng)連接可能存在的問(wèn)題的關(guān)鍵點(diǎn)。

Step 1
如何測(cè)試互聯(lián)網(wǎng)連接,第一種也是最基本的方法,是打開(kāi)瀏覽器,瀏覽目標(biāo)網(wǎng)址。
如果沒(méi)有可用的圖形界面,可以嘗試使用 curl 獲取目標(biāo)網(wǎng)址的內(nèi)容。例如:
$ curl -I https://www.example.com
HTTP/1.1 200 OK
如果可以在瀏覽器上看到網(wǎng)站,或者在使用 curl 命令時(shí)收到 200 OK,那就可以確認(rèn)連接訪問(wèn)是成功的。
如果不成功,那中間環(huán)節(jié)就多的去了。操作系統(tǒng)可能有問(wèn)題,路由可能有問(wèn)題,Web服務(wù)器可能有問(wèn)題,防火墻可能有問(wèn)題,等等等等。
Step 2
如果第一步不能解決問(wèn)題,那么是時(shí)候在網(wǎng)絡(luò)傳輸?shù)牡讓樱瑱z查互聯(lián)網(wǎng)的連接了。
請(qǐng)執(zhí)行以下 ping 命令,該命令會(huì)使用外部服務(wù)器的 IP 地址向其發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包。
在本例中,讓我們嘗試 ping google 的 DNS 服務(wù)器:
$ ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=10.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=10.2 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 10.157/10.291/10.425/0.134 ms
上述命令正常的情況,必須是 0% 的數(shù)據(jù)包丟失。
Step 3
如果無(wú)法 ping 通,則說(shuō)明你已斷開(kāi)與互聯(lián)網(wǎng)的連接,或者你的網(wǎng)絡(luò)接口的網(wǎng)關(guān)設(shè)置不正確。
首先檢索網(wǎng)關(guān) IP 地址,并嘗試使用 ping 命令查看是否可以訪問(wèn)該地址。
例如,首先使用 ip 命令獲取默認(rèn)網(wǎng)關(guān) IP 地址:
$ ip r
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100
接下來(lái),嘗試 ping 此 IP 地址:
$ ping -c 1 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.77 ms
--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.765/2.765/2.765/0.000 ms
如果可以到達(dá)網(wǎng)關(guān),但無(wú)法 ping 通服務(wù)器,那么很可能斷網(wǎng)了。
如果您無(wú)法 ping 通網(wǎng)關(guān),要么是默認(rèn)網(wǎng)關(guān)設(shè)置不正確,要么是網(wǎng)關(guān)阻止了 ping 請(qǐng)求ICMP包。
Step 4
下一步是檢查 DNS 服務(wù)器網(wǎng)絡(luò)配置:
$ systemd-resolve --status | grep Current
Current Scopes: DNS
Current DNS Server: 192.168.1.1
我們的系統(tǒng)設(shè)置為使用IP地址為 192.168.1.1 的 DNS 服務(wù)器主機(jī)。確保你可以訪問(wèn)到該 DNS 服務(wù)器。
同樣,使用 ping 指令:
$ ping -c 2 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.535 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.570 ms
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 0.535/0.552/0.570/0.017 ms
同樣,上述命令的輸出需要保證 0% 的數(shù)據(jù)包丟失率。
如果無(wú)法連接到 DNS,這可能意味著它沒(méi)有響應(yīng) ping 的 ICPM 包,DNS 在防火墻后面,或者服務(wù)器已關(guān)閉。
在這種情況下,請(qǐng)使用備用 DNS 服務(wù)器更新 /etc/resolv.conf 文件 。
Step 5
通過(guò)嘗試使用 dig 命令解析DNS名稱,來(lái)測(cè)試DNS服務(wù)器:
$ dig @192.168.1.1 example.com
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.1 linuxconfig.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10032
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 187 IN A 104.103.102.1
example.com. 187 IN A 104.103.102.1
;; Query time: 4 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu May 07 11:01:41 AEST 2020
;; MSG SIZE rcvd: 76
Step 6
通過(guò)嘗試解析 DNS 主機(jī)名來(lái)確認(rèn)系統(tǒng)范圍的設(shè)置。
$ resolvectl query example.com
example: 104.103.102.1 -- link: enp0s3
104.103.102.1 -- link: enp0s3
-- Information acquired via protocol DNS in 2.7ms.
-- Data is authenticated: no
寫在最后
通過(guò)本篇,我們基本厘清了路由,網(wǎng)關(guān),DNS 服務(wù)器,網(wǎng)絡(luò)響應(yīng)等知識(shí)。
Web 開(kāi)發(fā)是一門綜合的技術(shù),理解的越細(xì)致,也越容易定位故障。
HAppy coding :-)