{%hackmd BJrTq20hE %} <style> .markdown-body:not(.next-editor) pre{ background-color: #101010; color: #a5a5a5; } </style> # 網路技術小組 讀書會 2023.7.7 * 日期:2023.7.7 (五) [toc] ## ping ``` 『高手救命!我的 Linux 不能連上網路了!』 - 魯迅(沒説過) ``` 我們可以使用測試軟體來追蹤網路錯誤原因,而很多的網路偵測指令其實都在 Linux 裡,其中我們要介紹` ping `這個指令。 `ping` 主要透過 ICMP 封包 來進行整個網路的狀況報告,`ping` 還需透過 IP 封包來傳送 ICMP 封包,而 IP 封包裡面有個相當重要的 TTL 屬性。 IP 封包 :  ICMP : 網際網路訊息控制協定 (Internet Control Message Protocol) ### 格式(語法) ``` # ping [option & parameter] IP ``` option & parameter (選項與參數) :spiral_note_pad: : * `-c [數值]` : 執行 `ping` 的次數,例如 -c 3 : * `-i [秒數]`:設定間隔幾秒送一個網絡封包給主機,預設值是一秒送一次 : * `-s [數值]` : 發送出去的 ICMP 封包大小,預設為 56bytes,可以放大此一數值 : * `-t [數值]` : TTL 的數值,預設是 255,每經過一個節點就會減掉1 : * `-n` : 在輸出資料時不進行 IP 與主機名稱的反查,直接使用 IP 輸出(速度較快) : * `-W [數值]`:等待回應對方主機的秒數 : * `-M [do|dont]` : 主要偵測網路的 MTU 大小 (Maximum Transmission Unit/最大傳輸單位) * do : 代表傳送一個 DF (Don't Fragment) 旗標,讓封包不能重新拆包與打包 * dont: 代表不要傳送 DF 旗標,表示封包可以在其他主機上拆包與打包 ### 示範 :keyboard: ``` ping 163.22.17.162 ```  `ping` 會持續不斷,用 `Ctrl-C` 來中斷 `ping` #### 解析 :bulb: * `64 bytes` : 表示這次傳送的 ICMP 封包大小為 64 bytes (預設值) * `icmp_seq=1` : ICMP 所偵測進行的次數,第一次編號為 1 * `ttl=64` : 表示 `ping` 請求經過了64個網絡節點的路徑,它是生存時間字段的值,用於控制數據包在網絡中的存活時間 - 可以作為網絡的拓撲結構的一種指示,因為每個網絡節點都會減少TTL的值。 * `time=0.022 ms` : 回應時間,單位有 ms (0.001秒)及 us (0.000001秒), 一般來說越小的回應時間,表示兩部主機之間的網路連線越良好 :::info `ping` 就是傳送 ICMP 封包去要求對方主機回應是否存在於網路環境中,若傳送成功並主機有接受到,表示這部 DNS 主機是存在;反之,這部 DNS 主機不存在伺服器的網路環境中 ::: --- #### 指定次數 `-c` ``` ping -c 3 www.google.com ```  `ping www.google.com` 3 次後自動退出 --- #### 時間間隔 `-i` ``` ping -c 15 -i 0.5 163.22.17.162 ```  每隔 0.5 秒的時間間隔,`ping` 163.22.17.162,到達 15 次數後退出 --- #### 多參數使用 ``` ping -c 5 -i 0.1 -s 1024 -t 255 www.google.com ```  * `-c` 次數限制爲 5 * `-i` 發送週期爲 0.1 秒 * `-s` 設置發送包的大小爲 1024 * `-t` 設置TTL值爲 255 ## traceroute `ping` 是兩部主機之間的回聲與否判斷, `traceroute` 是可以追蹤兩部主機之間通過的各個節點 (node) 通訊狀況的好壞,可以檢查網路環境 `traceroute` 指令可追蹤網絡數據包的路由途徑,預設數據包大小是40 Bytes ### 格式(語法) ``` # traceroute [option & parameter] IP ``` option & parameter (選項與參數) :spiral_note_pad: : * `-n` :可直接使用IP地址而非主機名稱 : * `-m [數值]` :設置檢測數據包跳數次數 : * `-q [數值]` :設置探測包的個數 : * `-w [秒數]` :設置等待遠端主機回報的時間,預設是 5 秒 : * `-U` :使用 UDP 的 port 33434 來進行偵測(`traceroute` 預設偵測協定) : * `-T` :使用 TCP 來進行偵測,一般使用 port 80 測試 : * `-p [埠號]`:設置UDP傳輸協議的通信端口,若不想使用 UDP 與 TCP 的預設埠號來偵測,可在此改變埠號 : * `-I` :使用 ICMP 的方式來進行偵測 : * `-i [裝置]`:使用指定的網絡界面送出數據包 - 用在比較複雜的環境,如果你的網路介面很多很複雜時,才會用到這個參數 - 舉例來說,你有兩條 ADSL 可以連接到外部,那你的主機會有兩個 ppp,你可以使用 `-i` 來選擇是 ppp0 還是 ppp1 : * `-g [路由]`:設置來源路由網關,最多可設置8個,與 `-i` 的參數相仿,只是 `-g` 後面接的是 gateway 的 IP 就是了 ### 示範 :keyboard: `traceroute` 常見的用法: ``` traceroute www.google.com ```  #### 解析 :bulb: * 偵測本機到 `www.google.com` 去的各節點(共 11 個)連線狀態 * `traceroute` 會主動地對這 11 個節點做 UDP 的回聲等待,並偵測回覆的時間,每節點偵測三次,最後會回傳上面圖片顯示的結果 :::warning 有些 Linux 系統(如:Centos7)沒有安裝上 `traceroute` 命令工具,若沒有安裝,先登入管理員 (root) 用戶,使用 `yum install traceroute` 命令來安裝即可。 ::: --- #### 顯示IP地址,不查主機名 `-n` ``` traceroute -n www.google.com ```  --- #### 設置探測包的個數 `-q` ``` traceroute -n -q 1 www.google.com ```  --- #### 跳數設置 `-m` ``` traceroute -n -m 5 www.google.com ```  --- #### 對外發探測包的等待響應時間設置 `-w` ``` traceroute -n -m 15 -w 0.5 tw.yahoo.com ```  `***` 表示該節點可能設有某些防護措施(如:防火牆),讓我們發送的封包資訊被丟棄所致, `traceroute` 預設使用的是 UDP 封包,可嘗試使用其他封包, 如:`-T`,`-I`,`-p [埠號]` *lilina 會有權限問題,不能使用 `-T`,`-I` ## iwlist, iwconfig * `iwlist`:利用無線網卡進行無線 AP 的偵測與取得相關的資料 * `iwconfig`:設定無線網卡的相關參數,和 `ifconfig` 是同級別的用戶級管理工具,但專注於無線網絡管理  *沒有無線網卡 :::info `iwlist` `iwconfig` 這兩個指令必須要有無線網卡才能夠進行,可以打 `man iwlist` , `man iwconfig` 這個命令瞭解詳情 ::: ## dhclient ``` dhclient [無線網卡名稱] ``` 如果你是使用 DHCP 協定在區域網路內取得 IP 的話,可以使用 `dhclient` 這個指令,發送 dhcp 要求工作,必須要有無線網卡才能夠進行,可以打 `man dhclient` 這個指令瞭解詳情 ## 參考資料 * [讀書會資料](https://linux.vbird.org/linux_server/centos6/0140networkcommand.php#iw_cmd) * [參考資料來源1](https://linux.vbird.org/linux_server/centos6/0140networkcommand.php#dhclient) * [參考資料來源2](https://www.1ju.org/linux/ping) * [參考資料來源3](https://www.1ju.org/linux/traceroute) * [參考資料來源4](https://www.twblogs.net/a/5cc367b0bd9eee39711440c4)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.