一、 ping : 查看當前網絡是否連通
二、 ifconfig : 用來顯示當前系統中的所有網絡設備,通俗一點的說,就是網卡列表。
三、 netstat 和 lsof: 對網絡狀況瞭如指掌
-
netstat 和 lsof
netstat -alepn
-
netstat 告訴我們 IP 地址和端口使用的情況,以及各個 TCP 連接的狀態。還會把所有 IPv4 形態的 TCP,IPV6 形態的 TCP、UDP 以及 UNIX 域的套接字都顯示出來。
lsof -i :8080 //定位被佔用的8080是那個進程
-
lsof 的常見用途之一是幫助我們找出在指定的 IP 地址或者端口上打開套接字的進程.
netstat Socket -x -alepn 查看端口對應那個文件 lsof /var/run/docker.sock //查看隨打開了這個文件
-
Isof 和 netstst 可以結合起來一起使用。
四、 tcpdump: 抓包利器
-
指定網卡:
tcpdump -i eth0
-
指定來源:
tcpdump src host hostname
-
抓的包是 TCP,且端口是 80,包來自 IP 地址爲 192.168.1.25 的主機地址。
tcpdump 'tcp and port 80 and src host 192.168.1.25'
-
如果我們對 TCP 協議非常熟悉,還可以寫出這樣的 tcpdump 命令:
tcpdump 'tcp and port 80 and tcp[13:1]&2 != 0'
這裏 tcp[13:1]表示的是 TCP 頭部開始處偏移爲 13 的字節,如果這個值爲 2,說明設置了 SYN 分節,當然,我們也可以設置成其他值來獲取希望類型的分節。注意,這裏的偏移是從 0 開始算起的,tcp[13]其實是報文裏的第 14 個字節。
Flags [ ]是包的標誌,[P]表示是數據推送,比較常見的包格式如下:
- [S]:SYN,表示開始連接
- [.]:沒有標記,一般是確認
- [P]:PSH,表示數據推送
- [F]:FIN,表示結束連接
- [R] :RST,表示重啓連接
我們可以看到最後有幾個數據,它們代表的含義如下:
- seq:包序號,就是 TCP 的確認分組
- cksum:校驗碼
- win:滑動窗口大小
- length:承載的數據(payload)長度 length,如果沒有數據則爲 0
此外,tcpdump 還可以對每條 TCP 報文的細節進行顯示,讓我們可以看到每條報文的詳細字節信息。這在對報文進行排查的時候很有用。
總結:
- ping 可以用來幫助我們進行網絡連通性的探測。
- ifconfig,用來顯示當前系統中的所有網絡設備。
- netstat(可以用ss 替換) 和 lsof 可以查看活動的連接狀況。
- tcpdump 可以對各種奇怪的環境進行抓包,進而幫我們瞭解報文,排查問題。