一篇文章快速解決網絡調試問題

一、 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: 抓包利器

  1. 指定網卡:

    tcpdump -i eth0
    
  2. 指定來源:

    tcpdump src host hostname
    
  3. 抓的包是 TCP,且端口是 80,包來自 IP 地址爲 192.168.1.25 的主機地址。

    tcpdump 'tcp and port 80 and src host 192.168.1.25' 
    
  4. 如果我們對 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 可以對各種奇怪的環境進行抓包,進而幫我們瞭解報文,排查問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章