A主機ping B主機發生了什么?


 計算機網絡面試題:A主機ping B主機發生了什么?

 

眾所周知,ping命令使用的是ICMP協議包,那么A主機ping B主機到底發生了什么呢?

 

1 ping介紹

ping(Packet Internet Groper,因特網包探索器)是Windows、UNIX、和Linux系統下的一個命令。ping也屬於一種通信協議,是TCP/IP的一部分。利用ping命令可以檢查網絡是否連通,可以很好地幫助分析和判定網絡故障。應用格式:ping 空格 IP地址,該命令還可以加許多參數使用。


 

2 ping的使用

連通問題是由許多原因引起的,如本地配置錯誤、遠程主機協議失效等,當然還包括設備 等造成的故障。使用 Ping 檢查連通性有六個步驟:

1. 使用 ipconfig /all 觀察本地網絡設置是否正確;

2. Ping 127.0.0.1,127.0.0.1 回送地址 Ping 回送地址是為了檢查本地的 TCP/IP 協議有 沒有設置好;

3. Ping 本機 IP 地址,這樣是為了檢查本機的 IP 地址是否設置有誤;

4. Ping 本網網關或本網 IP 地址,這樣的是為了檢查硬件設備是否有問題,也可以檢查本 機與本地網絡連接是否正常;(在非局域網中這一步驟可以忽略)

5.Ping 本地 DNS 地址,這樣做是為了檢查 DNS 是否能夠將 IP。

6.Ping 遠程 IP 地址,這主要是檢查本網或本機與外部的連接是否正常。


 

3 ping工作原理

A主機ping B主機

A主機發送端:

1. A主機構建一個ICMP數據包,ICMP協議把這個數據包和A主機的IP地址交給IP層協議;

2. IP層協議把A主機IP地址、一些控制信息和B主機的IP地址構建一個IP數據包,IP層協議獲得B主機的MAC地址(如何獲得B主機的MAC地址,下面會寫),IP層協議把IP數據包和B主機的MAC地址一並交給數據鏈路層協議;

3. 數據鏈路層構建一個數據幀,目的地址是IP層傳來的B主機的MAC地址,源地址是本主機的MAC地址,加上一些控制信息,通過網絡發送出去。

B主機接收端:

1. B主機接收到數據幀后,先檢查目的地址,是否和本主機的MAC地址一致,如果一致,就接收,否則丟棄;

2. 接收后檢查數據幀,從幀中提取IP數據包,交給本主機的IP層協議,IP層協議檢查后,將有用的信息提取出來交給ICMP協議;

3. ICMP協議處理后,立刻構建一個應答包,發送給A主機,過程和A主機發送ICMP請求包給B主機一樣。

 

IP層如何獲得B主機的MAC地址呢?

舉個例子:

A主機:10.10.10.1  子網掩碼:255.255.255.0

這里有三種場景:

1 自己與自己通信

答:當ping 10.10.10.1時,計算機和自己的IP相比較,如果相等,會發給自己,我們稱之為精確匹配

2 A主機和B主機在同一網段

答:當ping 10.10.10.2時,計算機和自己的IP相比較,發現並不相等,退而求其次,使用模糊匹配,用自己的子網掩碼255.255.255.0與10.10.10.2做按位與,得到網段10.10.10,這個和自己在一個網段(一個廣播域),就直接在本網絡內查找這台機器的MAC。如果以前兩個機器有過通信,在A主機的ARP緩存表中應該有B主機IP地址與其MAC的映射關系,如果沒有,就發一個ARP請求廣播,得到B主機的MAC,完成通信。

3 A主機和B主機不在同一網段

答:當ping 8.8.8.8 時,計算機和自己的IP相比較,發現並不相等,退而求其次,使用模糊匹配,用自己的掩碼255.255.255.0 與8.8.8.8做按位與,得到網段8.8.8,和自己10.10.10不在一個網段,需要使用最模糊的匹配,一般會匹配0.0.0.0/0,這個是最后的選擇,一般指向網關,由於網關和自己在一個網段(一個廣播域),所以可以廣播ARP得到網關的MAC,然后把ping 包發給網關,完成通信。

 


 

 參考:

https://blog.csdn.net/zhuying_linux/article/details/6770730

 

https://www.zhihu.com/question/29723388

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM