作為一名 IT 從業(yè)者,經(jīng)常都要跟 Linux 打交道,其中網(wǎng)絡(luò)更是用得頻繁,掌握基本的網(wǎng)絡(luò)命令是必備的技能,更是提高我們工作效率的必備良器,今天這篇文章就來梳理下常用的網(wǎng)絡(luò)工具。因?yàn)槭崂淼拿畋容^多,所以文章自然不會(huì)深入介紹這些命令的用法,大家可以有個(gè)印象,然后學(xué)習(xí)工作中碰到了再具體去查好了。 總的來說,Linux 網(wǎng)絡(luò)命令涉及到這么幾塊:
01 網(wǎng)絡(luò)配置最重要的兩個(gè)工具就是 ifconfig 和 ip,這兩個(gè)工具分別來自兩個(gè)工具包 net-tools 和 iproute2,其中, net-tools 包還包含如 route、 netstat、 tc、 ifstat 等等常用的工具,不過, net-tools 包已經(jīng)逐步在被 iproute2 包替換。對(duì)于我們學(xué)習(xí)來說,不妨都學(xué)習(xí)下,這樣也有助于理解和記憶。 1.1 ifconfig ifconfig 通常是用來查看網(wǎng)卡的信息(比如 IP 地址、收發(fā)包及丟包情況等),以及配置網(wǎng)卡(如啟停網(wǎng)卡,修改網(wǎng)卡 MTU,修改 IP、MAC 地址等) 查看網(wǎng)卡信息: 給網(wǎng)卡配置 IP 地址: 開關(guān)網(wǎng)卡: ifconfig eth0 downifconfig eth0 up 1.2 ip ip 是非常強(qiáng)大的工具,可以替換 net-tools 包的所有工具,如常見的 ifconfig、 netstat、 route、 arp 等,比如查看網(wǎng)卡信息: 查看路由: 查看 arp 信息: 更多的用法大家用到可以 man ip 一下。 02 連通性探測(cè)連通性探測(cè)意在使用工具探測(cè)兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)之間的連通性,常用的有 ping、 telnet、 traceroute、 tracepath、 mtr 等工具。 2.1 ping 這個(gè)命令通常用來判斷網(wǎng)絡(luò)的連通性和網(wǎng)速情況,偶爾用來查看域名的 IP,比如: 可以看到百度對(duì)應(yīng)域名的 IP。 使用 -c 參數(shù)可以指定發(fā)送數(shù)據(jù)包的個(gè)數(shù), -w 指定最長(zhǎng)等待時(shí)間, -I指定發(fā)送數(shù)據(jù)包的網(wǎng)卡。 ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。 2.2 telnet telnet 通常用作遠(yuǎn)程登錄,用來確定遠(yuǎn)程服務(wù)的狀態(tài),探測(cè)遠(yuǎn)程服務(wù)器的某個(gè)端口是否能訪問,也可以探測(cè)本地的,如: 可見成功連接到 localhost 的 22 端口,說明該端口已經(jīng)打開。 2.3 traceroute & tracepath traceroute 主要用來探測(cè)從源主機(jī)到目標(biāo)主機(jī)之間的每一跳路由節(jié)點(diǎn),通常和 ping 結(jié)合起來排查網(wǎng)絡(luò)故障, ping 測(cè)連通性和網(wǎng)速,如果網(wǎng)絡(luò)不通,可以借由 traceroute 進(jìn)一步排查是哪個(gè)路由節(jié)點(diǎn)出問題了。如果網(wǎng)絡(luò)卡頓,也可以判斷出哪里是瓶頸。 可以看到,從主機(jī)到 baidu.com 共經(jīng)歷了 30 跳,每一跳都統(tǒng)計(jì)了響應(yīng)時(shí)間。 類似的工具還有一個(gè) tracepath。 2.4 mtr mtr 全稱是 mytraceroute,是一個(gè)集大成的工具,它集成了 ping、 traceroute、 nslookup 的功能,診斷網(wǎng)絡(luò)問題非常方便。 mtr 有個(gè)好處就是能夠 實(shí)時(shí)刷新 數(shù)據(jù),比如 mtr-n www.baidu.com 可以看到,從本地到百度經(jīng)過的所有路由,并顯示每個(gè)路由間的丟包率、響應(yīng)時(shí)間等。 常用參數(shù): mtr -r 不會(huì)刷新,一次性打印 10個(gè)包的統(tǒng)計(jì)結(jié)果mtr -s 用來指定ping數(shù)據(jù)包的大小mtr -n no-dns不對(duì)IP地址做域名反解析mtr -a 來設(shè)置發(fā)送數(shù)據(jù)包的IP地址,這個(gè)用于主機(jī)有多個(gè)IP時(shí)。mtr -i 使用這個(gè)參數(shù)來設(shè)置ICMP返回之間的要求默認(rèn)是1秒mtr -c 指定發(fā)送多少個(gè)數(shù)據(jù)包mtr -4 IPv4mtr -6 IPv6 03 網(wǎng)絡(luò)連接主要涉及到對(duì)網(wǎng)絡(luò)連接狀態(tài)的統(tǒng)計(jì),比如連接打開了哪些端口、TCP/UDP、socket 的狀態(tài)是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。 3.1 netstat netstat 用于查看當(dāng)前網(wǎng)絡(luò)的連接情況,能夠查看所有的網(wǎng)絡(luò)連接,包括 unix socket 等,也是集多種工具于一身的組合工具。最常用的就是用來檢查本地系統(tǒng)都打開了哪些端口: 其他的一些常見用法還有:
3.2 ss ss 和 netstat 類似,也是用來查看網(wǎng)絡(luò)連接統(tǒng)計(jì)的工具,它的輸出也和 netstat 類似,甚至顯示更多連接狀態(tài)信息,它最大的優(yōu)勢(shì)在于比 netstat 快,在服務(wù)器維持上萬個(gè)連接的情況下,這種優(yōu)勢(shì)就體現(xiàn)得比較明顯。 常用參數(shù):
通常使用 ss-tln4 查看本地監(jiān)聽的所有端口。 3.3 lsof lsof 可以列出當(dāng)前系統(tǒng)打開文件、打開文件的進(jìn)程、進(jìn)程打開的端口。由于在 Linux 中一切皆文件,所以, lsof 也常用來統(tǒng)計(jì)網(wǎng)絡(luò)相關(guān)的文件信息(使用 -i 選項(xiàng)),如 TCP/UDP/Unix socket 的統(tǒng)計(jì)信息。 它的使用格式為 [46][protocol][@hostname|hostaddr][:service|port],比如: 列出所有與主機(jī) 172.18.82.173(我的主機(jī)IP)22 號(hào)端口的 ipv4 連接: 3.4 netcat(nc) nc 被稱為瑞士軍刀,非常輕巧但功能強(qiáng)大,能夠創(chuàng)建各種不同類型的網(wǎng)絡(luò)連接、能夠?qū)崿F(xiàn)簡(jiǎn)單的聊天工具、遠(yuǎn)程傳輸文件、debug 分析、掃描端口等。 比如掃描主機(jī) 172.18.82.173 的 1-100 哪些端口開放: 可以看到,該主機(jī)開放了 22 和 80 端口。 04 流量統(tǒng)計(jì)4.1 ifstat ifstat 主要用來監(jiān)測(cè)主機(jī)網(wǎng)口的網(wǎng)絡(luò)流量,常用的選項(xiàng)包括:
比如,通過以下命令統(tǒng)計(jì)主機(jī)所有網(wǎng)口某一段時(shí)間內(nèi)的流量數(shù)據(jù): 4.2 sar sar 是一個(gè)系統(tǒng)歷史數(shù)據(jù)統(tǒng)計(jì)工具。統(tǒng)計(jì)的信息非常全,包括 CPU、內(nèi)存、磁盤 I/O、網(wǎng)絡(luò)、進(jìn)程、系統(tǒng)調(diào)用等等信息。網(wǎng)絡(luò)信息通常使用 -n參數(shù)來統(tǒng)計(jì),常用幾個(gè)選項(xiàng)如下:
4.3 iftop 和 top、 iotop 是一個(gè)系列,它主要用來查看網(wǎng)絡(luò)流量。 05 交換與路由5.1 arp 用來管理主機(jī)的 ARP 緩存,增刪查改等。 常見用法:
5.2 arping 查看本 LAN 內(nèi) IP 對(duì)應(yīng)的主機(jī) MAC 地址,以及 MAC 的占用問題。 比如,指定從某個(gè)接口向某臺(tái)主機(jī)發(fā)送 ARP 包,來獲得 MAC 地址。 5.3 vconfig Linux vlan 配置命令,比如給某個(gè)接口增加兩個(gè) vlan 是: vconfig add eth0 100vconfig add eth0 200 刪除 vlan 是: vconfig rem eth0.100vconfig rem eth0.200 5.4 route route 用來查看和修改路由表,同樣工具還有 netstat-r 和 ip route。
比如添加一條默認(rèn)路由: route add default gw 192.168.1.1 dev eth0 06 防火墻6.1 iptables iptables 是強(qiáng)大的包過濾工具。 iptables 通過一系列規(guī)則來過濾、處理數(shù)據(jù)包,能夠?qū)崿F(xiàn)防火墻、NAT等功能。 當(dāng)一個(gè)網(wǎng)絡(luò)包進(jìn)入到主機(jī)之前,會(huì)經(jīng)過一系列的 iptables 規(guī)則檢查,如何通過則接受,否則就丟棄,iptables 的規(guī)則由多個(gè)表組成,每個(gè)表又由多條鏈構(gòu)成,整體比較復(fù)雜,對(duì)于這個(gè)工具,我們 后面再出一篇文章來進(jìn)行詳細(xì)講解。 6.2 ipset ipset 是一個(gè)輔助 iptables 的工具,通常用在限制多個(gè) IP 的場(chǎng)景下,使用 ipset,可以將多個(gè) IP 放入一個(gè)集合,然后 iptables 針對(duì)這個(gè)集合做限制,這樣可以大大提高效率。 ipset除了可以集合 IP 外,還可以集合 網(wǎng)段、MAC、端口、網(wǎng)卡等。 常用操作比如: 創(chuàng)建一個(gè) ipset: ipset create blacklist hash:ip
往集合中增加項(xiàng): ipset add blacklist 192.168.10.2 從集合中移除項(xiàng): ipset del blacklist 192.168.10.2 還可以指定超時(shí)時(shí)間限制: ipset create blacklist hash:net timeout 60 07 域名相關(guān)7.1 host host 命令是域名分析查詢工具,用來測(cè)試域名系統(tǒng)工作是否正常。 比如查看百度域名信息: [root@by ~] host www.baidu.comwww.baidu.com is an alias for www.a.shifen.com.www.a.shifen.com has address 14.215.177.38www.a.shifen.com has address 14.215.177.39 7.2 nslookup nslookup 用于交互式域名解析,查看域名解析是否正常,在網(wǎng)絡(luò)故障的時(shí)候用來診斷網(wǎng)絡(luò)問題。 查看 google.com 的 DNS 地址: 查看使用的 DNS 服務(wù)器地址: [root@by ~]# nslookup> serverDefault server: 8.8.8.8Address: 8.8.8.8#53Default server: 8.8.4.4Address: 8.8.4.4#53 7.3 dig dig 命令也是域名解析工具,但是比 nslookup 提供的更全面: 7.4 whois whois 用于查看域名所有者的信息,比如注冊(cè)郵箱、手機(jī)號(hào)碼、域名服務(wù)商等。 比如,查看 coolshell.cn 這個(gè)域名是陳皓在萬網(wǎng)注冊(cè)的,注冊(cè)時(shí)間是 2009 年,注冊(cè)郵箱是 haoel@hotmail.com。 08 抓包相關(guān)8.1 tcpdump tcpdump 是 Linux 下最為強(qiáng)大的抓包工具。之前寫過一篇完整的文章,詳細(xì)請(qǐng)看這里: Linux 網(wǎng)絡(luò)命令必知必會(huì)之 tcpdump,一份完整的抓包指南請(qǐng)查收! 09 虛擬設(shè)備虛擬設(shè)備指的是針對(duì) tap/tun、veth-pair、bridge、ovs 等設(shè)備的工具。 對(duì)于這些設(shè)備的操作命令,都隸屬于 ip 命令,比如 tap/tun 設(shè)備是 ip tuntap、veth-pair 和 bridge 是 ip link和 ip netns。 除此之外,還有一些相關(guān)的輔助工具。 9.1 tunctl tunctl 實(shí)現(xiàn)和 ip tuntap 類似,用來創(chuàng)建 tap/tun 設(shè)備。 默認(rèn)創(chuàng)建 tap 接口: tunctl 以上等價(jià)于 tunctl-p 為用戶 user 創(chuàng)建一個(gè) tap 接口: # tunctl -u user 創(chuàng)建 tun 接口: tunctl -n 刪除接口: # tunctl -d tap0 9.2 brctl brctl 用來操作 bridge 網(wǎng)橋,可用于查看網(wǎng)橋、創(chuàng)建網(wǎng)橋、把網(wǎng)卡加入網(wǎng)橋等。 [root@by ~]# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000000000000 no OVS 是網(wǎng)橋的第三方開源實(shí)現(xiàn),它自帶一套命令集,有興趣的讀者可以進(jìn)一步研究下。 10 總結(jié)以上便是平時(shí)常用的網(wǎng)絡(luò)工具集合,除此之外,其實(shí)還有很多,推薦大家重點(diǎn)掌握以上這些,如有不懂的地方,man 一下就清楚了。 除了命令之外,跟網(wǎng)絡(luò)相關(guān)的還有一些重要文件,比如:
NDK基礎(chǔ)開發(fā)流程—Linux流程 |
|