01 計算機網絡體系結構中的ping
ping是Windows、Unix、Linux等操作系統提供的一個常用的網絡管理命令,用於檢查網絡的連通性,幫助分析和判定網絡故障。
ping在計算機網絡體系結構中歸屬應用層,越過運輸層直接使用IP層的ICMP協議,發送“回送請求”報文給目標主機,接收目標主機返回的“回送回答”報文並顯示在源主機上。
ping是把網絡協議應用到日常網絡管理的典型實例。
02 ping的執行流程
ping命令的執行流程見下圖。
正常執行流程可以簡要描述為:ping命令接收一個IP地址或一個網絡域名,如果是域名會將域名轉換為IP地址。
判斷被ping的目標主機和源主機是否在一個網絡上,如果不在一個網絡上,則查找路由表,找到通往目標網絡的路由器IP地址或默認網關IP地址。
查找本地主機ARP表中是否有該IP對應的MAC地址;如果沒有,則通過廣播詢問該IP的MAC地址;本網絡中的主機、路由器都會接收到該詢問報文。
擁有該IP地址的本地設備回覆應答報文,將該IP對應的MAC地址發給源主機。
為了減少本地廣播,本地主機、三層路由器或路由器會適時更新自己的本地ARP表,保存本地IP地址和MAC地址的對應關係。
知道了下一步報文要發往的MAC地址,ping命令使用ICMP協議封裝含有對端MAC地址的IP數據報交給交換機,交換機查找自己的MAC與port端口對應表,將數據包傳給對應端口的主機。
下面的流程只畫了本機流程,交換機和路由器的流程沒有畫出,源主機信息發送到交換機之後,交換機和路由器根據IP數據報相關信息再一步一步的向前查找目標主機,源主機只需要等待回送回答報文。
03 ping命令涉及的網絡協議
ping是ICMP網際控制報文協議的一個重要應用,因此ping涉及的最重要的一個協議是ICMP。
在ping執行過程中會觸發一系列動作,會附帶調用其他一些協議功能,完成源主機和目標主機的請求和應答。
DNS:域名系統(Domain Name System),TCP/IP協議中應用層協議,用於解析域名和IP地址。
ICMP:網際控制報文協議(Internet Control Message Protocol)。用於在IP主機、路由器之間傳遞控制信息。
例如檢測網絡連通性、主機的可達性。不傳輸用戶數據,只傳輸控制信息。ICMP的數據要封裝在IP數據報中進行傳輸。
IGMP:網際組管理協議(Internet Group Management Protocol),該協議運行在主機和組播路由器之間。
組播和廣播的區別很簡單,組播是通知部分人知道的傳播形式,而廣播是通知到所有人。
IP :網際協議或互聯網協議(Internet Protocol)。IP協議位於TCP/IP協議的網絡層,ICMP、IGMP及以上層級的報文都要經過IP協議轉換封包成IP數據包向下傳送。
ARP :地址解析協議(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。
04 ping 抓包準備
家用無線路由器兩臺,R1和R2。用於組建簡單的網絡供測試使用。
電腦主機兩臺A和B,通過抓取主機網絡接口卡上進進出出的數據,瞭解網絡協議和網絡行為。
下載網絡抓包軟件,安裝在兩臺電腦主機上。例如Wireshark,是一個免費的開源工具,本次測試使用該工具。
05 局域網ping主機時抓包及分析
將無線路由器降級為交換機使用,通過無線路由器的LAN接口連接兩臺電腦主機,系統連接和IP設置如下圖所示。
主機A和主機B正常開啟,允許ICMP協議分組通過。B ping A 的截圖如下。
分析上圖的執行時序發現,ping動作完成之後,兩臺主機又互相確認了一下各自的IP地址和MAC地址,再次確認各自ARP表中數據的正確性。
這種詢問和廣播的頻率需要確定一個合適的值,確保數據不過時又不會特別頻繁。
刪掉主機B的ARP緩存數據,再進行正常的ping操作。從下圖執行時序可以看出,主機B的ARP緩存中沒有主機A的IP地址對應的MAC地址記錄,主機B需要先ARP廣播,查詢到主機A的MAC地址。
得到主機A的MAC地址後,B主機再發ICMP報文給A主機並等待回覆報文。
C>arp –d 該命令用於刪除ARP緩存數據
C>ping 192.168.1.122
執行過一次後ARP表建立起來了,再ping時直接就ICMP了。最後互相再確認一下彼此的地址,保證自己的ARP表正確。
主機A和主機B正常開啟,允許ICMP協議包。A ping B 的截圖如下。可見,正常ping通後,A和B又互相確認了一下對方的MAC地址。
主機A開啟,主機B關閉。A ping B:即192.168.1.120 ping 192.168.1.122
此時必然ping不通,返回請求超時,無法訪問目標主機的錯誤報文。
ping的同時,在主機A的網絡接口處開始抓包,由於網絡數據太多,下圖篩選出ARP和ICMP協議,對照查看時可以通過Time字段或No字段的值確定網絡數包出現先後順序。
可猜測:主機A直接給B發ICMP數據包,沒有收到回覆信息;之後A給B發ARP地址解析請求,詢問B的MAC地址;多次詢問沒有返回應答報文後,B發廣播信息查詢對應MAC地址。
主機A和主機B正常開啟,A通過防火牆設置禁止ICMP分組通過。B ping A 的截圖如下。請求超時,ping不通。
ping的同時,抓包主機B的網卡數據,發現:ping不通之後詢問A的MAC地址,A能回答自己的MAC地址,回答後繼續ping,因為A過濾了ICMP分組,還是PING不通。
猜測,主機B禁止ICMP分組通過,但可能ARP協議還是可以執行的。
06 跨網段抓包及分析
兩臺無線路由器及電腦的連接、IP設置如下圖。
跨網段ping目標主機。主機A 192.168.2.100 ping 主機B 192.168.1.110, 兩臺主機正常開機,允許ICMP分組通過。
通過查看,可以瞭解ping的過程中執行了哪些網絡協議。可以對應去學習和了解這些協議的原理和用法。
07 ping公網域名,抓包網絡數據
主機A 192.168.2.100 ping 新浪主頁sina.com.cn ,見下圖。首先DNS進行域名解析,得到其IP地址,再選擇合適的路由或者網關將ping的數據包發出去。
08幾個重要概念
主機中的ARP表
緩存IP地址和MAC地址的對應關係。通過網絡協議自動維護。
也可以使用arp命令顯示ARP表的內容,可以刪除ARP的表項,可以增加對應關係到表中。arp –help可以查看arp命令的詳細用法。
主機中的路由表
路由表在系統運行中由網絡選擇協議自動維護,也可以通過route命令查看、添加、修改、刪除路由信息。
路由分靜態路由和動態路由兩種。路由表項由6個字段組成。
destination:目的地址,用來標識IP包的目的地址或者目的網絡。
mask:子網掩碼,與目的地址一起標識目的主機或者路由器所在的網段的地址。
pre:優先級。到達一個目的地可能有多條路徑,優先使用優先級高的路徑。
cost:路由開銷,有多個路徑可以到達目的地,標識每條路徑的開銷,開銷最小的是最優路徑。
interface:輸出接口,說明IP包走該該路徑時,從該路由器這個網絡接口轉發。
nexthop:下一跳的IP地址,說明IP包所經過的下一個路由器。
route –help 可以查看route命令的詳細用法。
交換機中的ARP表
二層交換機中只有MAC-PORT對應關係表;三層交換機具有路由功能,使用ARP表記錄IP、MAC和port的對應關係。網絡協議可以自動維護該對應關係表。
交換機中的 MAC表
二層交換機使用MAC-PORT對應關係表,記錄MAC地址、端口號、VLAN 號。網絡協議可以自動維護該對應表。
路由器中的路由表
每個路由器中都有一個路由表和FIB(Forward Information Base)表,路由表用來決策路由,FIB用來轉發分組。
路由器中的路由表和主機中的路由表相似。
FIB表指定分組到哪個路由器的哪個物理接口發送;或者不再經過其他路由器,直接傳送到直接相連的網絡中的目的主機。
09抓包軟件的簡單介紹
Wireshark是一個免費的網絡封包分析軟件。計算機網絡協議學習起來很抽象,看不見摸不著。
Wireshark可以抓包網絡數據,按照時間順序直觀、具體的呈現出網絡行為,對於學習計算機網絡和網絡協議很有幫助。
抓包可以看到一系列的網絡協議,直觀感受網絡協議的存在,可以根據網絡協議的出現頻率,有選擇性的優先理解和學習相關協議。
wireshark功能很豐富,可以選擇捕獲接口,可以使用捕獲過濾器,可以使用顯示過濾器。具體內容可以查閱相關文檔。
下圖是wireshark開始界面,主要用來選擇捕獲哪個接口的網絡數據。一臺計算機可能有有線網卡、無線網卡;實體網卡、虛擬網卡等等。
在此處指定網絡接口,wireshark將得到該網絡接口卡的所有進進出出的數據。
下圖中有開始按鈕、停止按鈕。通過網絡接口卡的數據很多,在該界面中最重要的是要使用“應用顯示過濾器”,選擇自己感興趣的內容。
10遺憾
主要關注了流程,數據包裡面具體信息沒有展開描述,具體數據包中的各種標誌位、控制信息、數據信息等等才能完整準備的描述對應協議。
沒有條件抓取交換機和路由器上的數據包,條件具備後再做完整的測試進行補充。
閱讀更多 IT小小屋 的文章