承 Day06-簡單的 GNS3 實作 我們有做兩個實作,那時我有說,如果可以成功去 ping 到網站或是機器的話,就表示我們的網路連線沒問題。而今天我們就來解釋為甚麼?
在開始之前不可避免講到網路模型,具體如下
layer | description | examples |
---|---|---|
應用層(application layer) | 支援不同的網路應用,同時應用層協定會控制網路應用==訊息的發送和響應== | HTTP, IMAP, SMTP, DNS... |
傳輸層(transport layer) | 透過 IP 和 port 實現程序間的資料傳輸(process-process data transfer) | TCP, UDP... |
網路層(network layer) | "IP 資料單元"(datagram)從來源 IP 位址到目標 IP 位址的傳輸 | IP, ICMP... |
連結層(link layer) | 不同網路裝置的資料傳輸,用 MAC 位址去實現 | 乙太網卡, 802.11 (WiFi), VLAN... |
實體層(physical layer) | 將封包轉換成幀(frame)後,網卡會把資料轉換成訊號(signal)傳輸到網線 | 光纖網線、乙太網線... |
資料參考此影片
當然實際如TCP/IP 網路模型會把連階層和實體層合併成"網路存取層",而OSI網路模型則會把應用層再細分成"應用層"、"表達層(presentation layer)"和"會議層(session layer)"。
補充: 層號與 OSI 網路模型的表格
層數 | 層名 |
---|---|
7 | 應用層(Application layer) |
6 | 表達層(Presentation layer) |
5 | 會議層(Session layer) |
4 | 傳輸層(Transport layer) |
3 | 網路層(Network layer) |
2 | 鏈結層(Link layer) |
1 | 實體層(Physical layer) |
今天的主角是 ICMP 的協定,在網路層(L3,第三層)運作。而 ping 這個指令會對網上的機器或是架設網站的機器傳送 ICMP 測試封包來確認本地端和伺服器端的連線是否有問題。具體的圖示請看下圖
上圖想要表達的是,今天使用 ping 時,本地端(PC)會傳送 ICMP 封包(ICMP request)給伺服器(server),如果
伺服器有收到 ICMP request 封包,則會返回一個 ICMP 封包(ICMP reply)(當然前提是我們的封包沒有被防火牆或者伺服器本身的規則給擋掉),最後如果本地端有收到 ICMP 封包則會在終端機上面顯示對應的畫面,如下圖
當然也會有不一樣的情況,詳細請看下圖
上圖整理了 ICMP 常見情況的 type number 和 code。
延續之前的範例我們來抓包,如下圖
然後我們去 ping www.nisra.net
並擷取封包,就可以得到如這樣的 資料
之後可以在 wireshark 上方的 filter 填 ICMP 以顯示特定的內容。如下圖
如之前整理 ICMP 的表格,封包分析打開 ICMP 後果然會看到對應的 type number 和 code ,網路通暢的時候設備間會傳 echo request (type 8, code 0) 和 echo reply (type 0, code 0) 如下圖兩張
今天我們使用了 ping 指令去查看裝置和伺服器是否有連線問題,而我們透過抓網路封包得知,用 ping 時裝置之間會傳送 ICMP 封包,而本地裝置會根據回傳的 ICMP 封包的參數(type 和 code)得知是否有網路連線的問題。