1. 程式人生 > >ping命令原理圖解

ping命令原理圖解

一、第一部分:原理

先看拓樸圖:

我在這裡講拼的兩情況,一種是同一網段內,一種是跨網段的ping ….

首先,如果主機A,要去ping主機B,那麼主機A,就要封裝二層報文,他會先查自己的MAC地址表,如果沒有B的MAC地址,就會向外傳送一個ARP廣播包,如圖:

 

其中ARP報文格式如下:

乙太網目的MAC

乙太網源MAC

幀型別

硬體型別

4

6

OP

傳送端乙太網MAC

傳送端IP地址

目的MAC

目的IP

FF-FF-FF-FF-FF-FF

00-50-56-C0-00-01

0806

0800

1

00-50-56-C0-00-01

1.1.1.1

00-00-00-00-00-00

1.1.1.3

 

其中OP  

     1 :表示ARP請求

     2:表示ARP應答

                  3:表示RARP請求

                  4:表示RARP應答

 

  首先,交換機會收到這個報文後,交換機有學習MAC地址的功能,所以他會檢索自己有沒有儲存主機B有MAC,如果有,就返回給主機A,如果沒有,就會向所有埠傳送ARP廣播,其它主機收到後,發現不是在找自己,就紛紛丟棄了該報文,不去理會。。直到主機B收到了報文後,就立即響應,我的MAC地址是多少,同時學到主機A的MAC地址,並按同樣的ARP報文格式返回給主機A,如圖:

ARP報文格式:

乙太網目的MAC

乙太網源MAC

幀型別

硬體型別

4

6

OP

傳送端乙太網MAC

傳送端IP地址

目的MAC

目的IP

00-50-56-C0-00-01

00-50-56-C0-00-03

0806

0800

2

00-50-56-C0-00-03

1.1.1.3

00-50-56-C0-00-01

1.1.1.1

這時候主機A學到了主機B的MAC,就把這個MAC封裝到ICMP協議的二層報文中向主機B傳送,報文格式如下:

 

目的地址

源地址

源IP

目的IP

ICMP報文

00-50-56-C0-00-03

00-50-56-C0-00-01

1.1.1.1

1.1.1.3

Echo request

 當主機B收到了這個報文後,發現是主機A 的ICPM回顯請求,就按同樣的格式,返回一個值給主機A,這樣就完成了同一網段內的ping過程…

 

目的地址

源地址

源IP

目的IP

ICMP報文

00-50-56-C0-00-01

00-50-56-C0-00-03

1.1.1.3

1.1.1.1

Echo answer

 

      

 

在這裡,我講了這麼久的區域網內的PING,實際過程的發生不到1毫秒….

 

       再繼續…

       如果主機A要ping主機C,那麼主機A發現主機C的IP和自己不是同一網段,他就去找閘道器轉發,但是他也不知道閘道器的MAC情況下呢?他就會向之前那個步驟一樣先發送一個ARP廣播,學到閘道器的MAC,再發封裝ICMP報文給閘道器路由器.

報文格式如下:

目的地址

源地址

源IP

目的IP

ICMP報文

00-50-56-C0-00-02

00-50-56-C0-00-01

1.1.1.1

2.1.1.1

Echo request

 

 

 

   當路由器收到主機A發過來的ICMP報文,發現自己的目的地址是其本身MAC地址,根據目的的IP2.1.1.1,查路由表,發現2.1.1.1/24的路由表項,得到一個出口指標,去掉原來的MAC頭部.加上自己的MAC地址向主機C轉發…(如果閘道器也沒有主機C的MAC地址,還是要向前面一個步驟一樣,ARP廣播一下即可相互學到….路由器2埠能學到主機D的MAC,主機D也能學到路由器2埠的MAC..),報文格式如下:

目的地址

源地址

源IP

目的IP

ICMP報文

00-50-56-C0-00-05

00-50-56-C0-00-04

1.1.1.1

2.1.1.1

Echo request

 

 

 

   最後,在主機C已學到路由器2埠MAC,路由器2埠轉發給路由器1埠,路由1埠學到主機A的MAC的情況下,他們就不需要再做ARP解析,就將ICMP的回顯請求回覆過來..報文格式大致如下:

 

目的地址

源地址

源IP

目的IP

ICMP報文

00-50-56-C0-00-04

00-50-56-C0-00-05

2.1.1.1

1.1.1.1

Echo Answer 

 

 

 

二、第二部分:問題

 問題:設定ip 子網掩碼為:(主機一)130.130.1.1 255.255.0.0

                                            (主機二)130.130.1.2 255.255.255.0
第一個ip網路號為:130.130 第二個ip網路號為:130.130.1即不在一個子網內,且2個主機並沒有設閘道器(沒通過路由器),為什麼能ping通?其他的子網劃分又是可行的。

答:第一種理解方式:

A機:130.130.1.1/16 ;B機:130.130.1.2/24;A機pingB機的時候,用A的子網掩碼與B機IP地址做與運算,可得B機的網段為130.130.0.0/16, A機認為B機與自己處於相同網段,傳送ICMP到B機。B機收到A機的ping資料包,用B的子網掩碼與A機IP地址做與運算,可得A機的網段為130.130.1.0/24,認為A機與自己處於相同網段,則將返回包送回A機。則A機ping通了B機。
第二種理解方式:
B機的網段是A機網段的子網,只要A機和B機的IP地址都在B機的網段內,則A機一定可以ping通B機。