測試網路品質
當網路出現問題時,或者斷斷續續,我們常用 ping 來瞭解網路基本狀態。它所傳送的封包是 ICMP 封包,並要求對方主機給與回應,所以我們常常會用這些特性來得知網路狀態,故這個指令對網管而言,拿來 debug 網路錯誤是很好用的吶!
指令:
ping <參數> <地址>
# 地址可以是 IP 或者網址
# -b 對 broadcast IP 作 ping 的動作,會對該網段所有主機 ping
# -c 看您要對該地址連續 ping 幾次啦!若不加的話,會一直 ping 下去
# -i 每次 ping 的時間間隔,只有 root 才能小於 0.2 秒喔!
# -n 在 ping 的時候不做 IP 反查,這樣速度會比較快。
# -s 送出去的 ICMP 封包大小,預設為 56 byte,加上 8 byte 的 ICMP 表頭
# 就是 MSS 啦!若要看的是網路層大小,還要加上 20 byte 的 IP 表頭封包,
# 所以我們在測 MTU 的時候,要減去 28 才是 ICMP 封包大小喔。
# -M do 在 ICMP 封包上標記為 Don't Fragment,也就是在路由中不能拆開封包
# 常用在測量 MTU 之用。
# -M dont 剛好和上面不同,它代表著路由器可以把風包拆成比較小包的!
範例:
dbtsai@ubuntu:~ $ ping -c 2 168.95.192.1 # ping 中華電信 DNS 5 次
PING 168.95.192.1 (168.95.192.1) 56(84) bytes of data.
64 bytes from 168.95.192.1: icmp_seq=1 ttl=248 time=43.1 ms
64 bytes from 168.95.192.1: icmp_seq=2 ttl=248 time=42.0 ms
--- 168.95.192.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 41.920/42.663/43.385/0.587 ms
# 56(84) 那個代表了 ICMP 資料有 56 byte,84 是網路層大小,
# 是 56 + ICMP 8 + IP 20 = 84 byte,這個和 MTU 是算到同一層的單位喔!
# 64 byte 代表了 56 + ICMP 8,也就是扣除 IP 表頭的大小
# ttl 代表著封包經過幾個 node,每經過一個 node 後 TTL 會減1,它的起始值
# 是從 255 開始,所以越接近 255 代表經過的 router 或 bridge 越少。
# time 43.1 ms 是回應時間,當然是越短越好啦!也代表你們之間的網路狀況很好。
當筆者網路出現問題的時候,會用以下步驟來除錯,讀者可以參考一下。
ping 127.0.0.1
這是 ping 自己的 loopback 裝置,若連這個都不通的話,大概是整個 Linux 網路核心都有問題,這時候您大概要先檢查自己的電腦!
ping <自己的 IP 地址>
上面的測試沒問題的話,這個通常也不會有什們問題,除非網路卡有錯誤。
ping
看看區域網路對外的 router 有沒有通,搞不好是 router 這裡掛了!
ping 168.95.192.1
這是中華電信的 DNS。雖然我測試的網路不一定是中華電信,但是它可靠性很高,常拿來當成我測試對象。若這裡不通的話,大概是網路對外了線路故障,如 ADSL 斷線等。若是 time 值很高,可能是區網內有人在抓 BT 或 P2P 導致網路不穩。
另外還有一個指令對於 debug 網路很有用,就是 tracepath 啦!常常我們有些網站可以連,但某些網站連不上去,這時候可以用這個方式來檢查到該台主機的路由有沒有問題。它的原理是用 ICMP 加上 ttl 去把經過的路由全部抓出來。但因為有些經過的路由會鎖 ICMP,所以有可能跑到一半會有沒有回應的路由器。指令:
tracepath <地址>
# -n 在 tracepath 的時候不做 IP 反查,這樣速度會比較快
範例:
dbtsai@ubuntu:~ $ tracepath 168.95.192.1
1: 140.116.xx.xx (140.116.xx.xx) 0.195ms pmtu 1500
1: 140.116.xx.xx (140.116.xx.xx) 1.050ms
2: 140.116.xx.xx (140.116.xx.xx) 1.064ms
3: 140.116.xx.xx (140.116.xx.xx) 0.927ms
4: tn-cd-tanet-gw01.router.hinet.net (211.20.206.58) 1.555ms
5: tn-cd-c12r1.router.hinet.net (203.75.72.90) 1.028ms
6: tn-st-c12r11.router.hinet.net (220.128.26.34) 1.674ms
7: ty-fo-c12r11.router.hinet.net (220.128.8.6) asymm 10 7.307ms
8: tp-s2-c12r11.router.hinet.net (220.128.1.30) 8.058ms
9: tp-s2-c12r2.router.hinet.net (220.128.1.109) 8.465ms
10: tp-s2-c6r10.router.hinet.net (211.22.35.161) 7.719ms
11: 210.59.204.198 (210.59.204.198) 8.341ms
12: 210.59.204.210 (210.59.204.210) 7.215ms reached
Resume: pmtu 1500 hops 12 back 12
[編輯]DNS 正反查詢
從網址查詢 IP,我們一般稱為 DNS 正解。若得知了 IP,想要查詢它的網址,一般稱為反解。而正解和反解可以是不一樣,因為我們可以申請很多個網域對應到同一個 IP,但是反解確要上層單位幫您設定!所以一般人很少有機會設定反解的,只有專業的網路用戶 ISP 才會幫您設定。所以有些檔垃圾信的方式是看反解網域,因為會發垃圾信的幾乎都是從那幾個反解網域出來的。。
例如 Ubuntu 台灣站 www.ubuntu.org.tw 的正反解就不同,您可以從反解看到它放在台南縣網中心裡面。指令:
nslookup <位址> # 若是加 IP 的話就是反解,若加網址的話就正解
範例:
dbtsai@ubuntu:~ $ nslookup www.ubuntu.org.tw # DNS 正解
Server: 168.95.192.1 # 使用的 DNS 伺服器
Address: 168.95.192.1#53
Non-authoritative answer:
Name: www.ubuntu.org.tw
Address: 203.68.102.240 # 查詢出來的結果
dbtsai@ubuntu:~ $ nslookup 203.68.102.240 # DNS 反解
Server: 168.95.192.1
Address: 168.95.192.1#53
240.102.68.203.in-addr.arpa name = www.opensource.org.tw. # 查詢出來的結果
Authoritative answers can be found from:
102.68.203.in-addr.arpa nameserver = mrtg.tnc.edu.tw.
102.68.203.in-addr.arpa nameserver = dns.tnc.edu.tw.
mrtg.tnc.edu.tw internet address = 163.26.200.2
dns.tnc.edu.tw internet address = 163.26.200.1
[編輯]查詢主機目前的連線
若是您想要知道目前主機上有哪些 port 或服務在 listen,可以讓別人連進來,或主機上有哪一些連線,可以透過 netstat 來達成喔!
指令:
netstat
# -a 列出所有連線,包含 TCP,UDP 和 socket 通訊
# -l 列出是主機在 Listen 的連線,通常為伺服器軟體
# -n 在 netstat 的時候不做 IP 反查,這樣速度會比較快
# -p 列出使用該連線的軟體名稱和 PID
# -t 列出 TCP 通訊部份連線
# -u 列出 UDP 通訊部份連線
範例:
dbtsai@ubuntu:~ $ netstat -tpnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 7840/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9779/apache2
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 5372/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5355/sshd
如以上範例,我們可以得知主機上有哪些 port 被打開在 Listen。例如這台是筆者的伺服器,所以可以看到幾個常用的 port 都被打開啦!這個用來 debug 您的伺服器很好用,也可以知道目前有多少連線到您的伺服器上。
[編輯]查詢設定網路卡組態
筆者已經在很多個不同的場合介紹到 ifconfig 這個指令了,這裡正式的和讀者介紹一下!它的功能很多,包含可以查詢目前網路卡組態,或者設定一些東西,其實我們把設定檔寫在 /etc/network/interfaces 裡面後,也是透過 ifconfig 去真正設定的吶!
指令:
ifconfig
# 可用的 options 有 netmask,broadcast 和 mtu 等,也可以加 IP address
# 若加上 down 或 up 的話,就是啟用或關閉該網路裝置喔!
# 甚至可以用 ifconfig eth1 hw ether 11:22:33:44:55:66 來改網路卡 MAC 卡號
範例:
dbtsai@ubuntu:~ $ ifconfig
eth0 Link encap:Ethernet HWaddr 00:11:24:29:3C:BD
inet addr:192.168.0.141 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:112251 errors:0 dropped:72593 overruns:0 frame:0
TX packets:111636 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:88025996 (83.9 MiB) TX bytes:10474558 (9.9 MiB)
Interrupt:52 Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1352 errors:0 dropped:0 overruns:0 frame:0
TX packets:1352 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:21566778 (20.5 MiB) TX bytes:21566778 (20.5 MiB)
如範例,您看到了基本的網路設定資料了吧!筆者就簡單的介紹不同欄位的意思。
HWaddr 這就是網路卡 MAC address,基本上這是全世界獨一無二的,但是您可以透過 ifconfig 修改。例如本例就是 00:11:24:29:3C:BD。
inet addr 在範例中的 192.168.0.141 就是 eth0 的 IP 喔!
RX packets 代表了網路卡啟用後接收到多少個封包
TX packets 代表了網路卡啟用後傳送出去多少個封包
MTU 從網路層算起來最大封包的大小
那個 lo 裝置就是所謂的 loopback 設備,它常常用在主機內部的 TCP/IP 程式溝通,就不需要經過網卡啦!所以它的 IP 127.0.0.1 常用在主機自己連到自己的時候用,且因為直接在主機內傳遞,MTU 就會是 TCP/IP 的理論最大值,所以效率上來說會比連到 eth0 還好很多喔!
如以下範例,ifconfig 也可以拿來直接設定該裝置的 IP,但記得還要另外用 route 加上 gateway 喔! resolv.conf 的 DNS 組態也要另外在自己設定一下。設定固定 IP:
sudo ifconfig eth0 192.168.0.150 netmask 255.255.255.0 # 設定 IP 和 netmask
sudo route add default gw 192.168.0.1 # 設定 gateway 閘道器
[編輯]檢視您的路由表
在網路概論的地方筆者提過,本機電腦是用 netmask 來決定封包是不是區網內,若不在區網內的話,就會送到 router (gateway) 去轉送到其他網域。前面教學中已經討論到如何設定 IP 和 netmask,那 route table 要在哪裡設呢?答案就在 route 這個指令。
指令:
route # -n 在顯示 route table 時不進行 IP 反解,速度會比較快
路由表範例:
dbtsai@ubuntu:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
如範例,這是筆者在 IP 分享器後面所用的路由表。第一個 Destination 代表了目地網段的代號。例如第一條是 192.168.0.0,代表了區域網路網段的開始,它不需要經過 gateway 就可以直接從 switch 連到,所以它的 gateway 值是 0.0.0.0。第一條的 genmask 其實就是 netmask,代表了該網段的大小。
第二條規則的 Destination 是 0.0.0.0 且 genmask 是 0.0.0.0。但任何 IP 和 0.0.0.0 這個 netmask 做 AND 邏輯運算,永遠都是 Destination 的網段0.0.0.0,所以它代表了世界上所有網路 IP 的集合。這意味著這條規則告訴電腦,不管目的地在哪裡,都要往 gateway 送。
讀者或許奇怪,第二條規則怪怪的阿!不是說區網只要直接連線,不需要經過 gateway 嘛?其實是這樣的,當封包在判別路由時,會先從第一條依序往下判別,當成立的時候,就會送出去不再判別。所以在這個例子中,送往區網的封包在第一條規則就被判別出來了,當然就用不到第二條啦!若沒有第一條怎麼辦?這時候電腦會把不管區網內或區網外的封包都送到 router,然後 router 會幫我們把目的地是在區網內的封包再送回來,不過這樣一來一往,網路效能就不好了!筆者就遇過朋友把自己網段的 netmask 設成 255.255.255.255,同學們都在區網內抓好康的,但他雖然連的到,卻速度特別慢,聰明的讀者,您知道原因了嘛?
若您不是用設定檔的方式或 GUI 介面設定網路,那 route table 就要自己設了,這裡不考慮大型網路環境有好幾個不同的路由,要依照不同目地網域選擇路由的情形,只考慮一般環境會用到的設定。
刪除路由範例:
dbtsai@ubuntu:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
dbtsai@ubuntu:~ $ sudo route del -net 0.0.0.0 gw 192.168.0.1
# 0.0.0.0 可以用 default 替代!
dbtsai@ubuntu:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
如以上範例,我們可以把 0.0.0.0 ( 可用 default 替代) 那條路由刪除。當網路不通時,先檢查路由設定有沒有錯誤,若有錯的話,可以用以上方式把它砍了!再用接下來的方式重新設定路由吧!
新增路由範例:
dbtsai@ubuntu:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
dbtsai@ubuntu:~ $ sudo route add -net default gw 192.168.0.1
# 最後可以加 dev eth0 指定用這張網路卡。
# 當公司內部有另外一個小網域時,可以用
# add -net <目標網域>
# 最後再加上 default 的路由。
# 若是要指定單部主機路由的話,可以用 add -host IP
dbtsai@ubuntu:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
[編輯]使用 DHCP 取得您的網路組態
當臨時到一個使用 DHCP 的地方,您也不想改動網路設定檔,那有個簡便的方式讓您自動取得 IP 等網路組態。 DHCP 指令:
sudo dhclient eth0 # 在網卡 eth0 上取得 IP,netmask,gateway 和 DNS 設定
通常使用 DHCP 的網路,都會自動提供所有設定的訊息,所以一但成功取得 IP,其他的您什們都不需要設定了。
轉貼於: http://wiki.ubuntu.org.tw/index.php/UbuntuTW_Guide_ch6
傳承部落格 | 硬碟諮詢 | 重灌組裝 | 傳承即時留言版 | 線上MSN
傳承科技專門處理硬碟資料遺失,硬碟壞軌及異聲
各式隨身碟資料搶救,不過電及各種記憶卡如SD、MS、XD、CF
精通各種筆電改裝作業系統、MAC APPLE、LINUX、WINXP、VISTA
精緻服務盡在傳承 專業服務快速完工
1003 07/07 希捷Barracuda 7200.11全系列機瘟硬碟,傳承可處理
0925 突破!北京台商研發新隨身碟 插上電腦就可看臺灣頻道
0918 MSN霸道!強制更新9.0版本 剝奪舊版用戶登錄權
0907 告別硬碟 GDrive個資保密引疑慮
0906 為防止Downadup疫情擴大插入隨身碟請暫停使用「自動播放」功能
0903 兩倍牧場容量「2TB」硬碟一顆要8999元
傳承科技專門處理硬碟資料遺失,硬碟壞軌及異聲
各式隨身碟資料搶救,不過電及各種記憶卡如SD、MS、XD、CF
精通各種筆電改裝作業系統、MAC APPLE、LINUX、WINXP、VISTA
精緻服務盡在傳承 專業服務快速完工
1003 07/07 希捷Barracuda 7200.11全系列機瘟硬碟,傳承可處理
0925 突破!北京台商研發新隨身碟 插上電腦就可看臺灣頻道
0918 MSN霸道!強制更新9.0版本 剝奪舊版用戶登錄權
0907 告別硬碟 GDrive個資保密引疑慮
0906 為防止Downadup疫情擴大插入隨身碟請暫停使用「自動播放」功能
0903 兩倍牧場容量「2TB」硬碟一顆要8999元
首頁 -> [Unbutu]常用的網路相關指令
2007年10月2日 星期二
[Unbutu]常用的網路相關指令
訂閱:
張貼留言 (Atom)
0 回應:
張貼留言