同網段不同網段主機間通訊原理

止語---發表於2018-04-06
   在當今的乙太網路通訊中,在IP資料包中有兩個必不可少的地址,那就是IP地址和網路卡地址(即MAC地址),在資料包中,無論是IP地址還是MAC地址,都有源地址和目標地址,因為通訊是雙方的,所以就必須同時擁有雙方的地址!在同一IP網路中通訊,將會發生以下事件:

1、同網段主機間通訊

   主機A與主機B通訊,這時主機A肯定首先要封裝這些需要發給主機B的資料包,那麼對於主機A來說,自己的IP地址和MAC自己肯定能夠輕易得到,對於主機BIP地址這時主機A也應該知道,要不然它就不清楚自己將要和誰通訊,當有了自己的IP地址,MAC地址以及主機BIP地址後,主機A在資料包中可以正確地寫上源IP地址,目標IP地址,接下來的工作就是寫入自己的MAC地址(即源MAC),最後還必須正確寫入目標主機BMAC地址,可這時主機A才發現自己根本沒有目標主機BMAC地址,那該怎麼辦呢?這時主機A就通過比較上面已經封裝好的源IP和目標IP,通過子網掩碼計算一下,發現源IP和目標IP恰好在同一個IP網路內,那麼它想要得到目標主機BMAC地址就有辦法了,首先主機A就向本網段發過一個ARP請求,這個ARP請求包中包括主機A的源IP地址,源MAC地址,目標主機BIP地址,而目標MAC地址為廣播MAC地址(全部為F),因為我們要找的就是目標MAC,所以這裡用廣播MAC地址,又因為是乙太網,所以整個區域網的所有主機都能收到這個請求MAC地址的資料包,當然主機B也能收到,因此在主機B收到此ARP請求後,立即構建一個包括自己的MAC地址的ARP迴應包,迴應給主機A,當主機A收到這個ARP迴應後,終於完成了找尋目標MAC的重大任務,從而把目標主機BMAC地址正確封裝進上面還未封裝結束的正準備發給主機B的資料包,在這時,源IP和源MAC以及目標IP和目標MAC都已正確存在於資料包中,那麼這裡主機A向網路內發出這些資料包,因為目標地址在本網段,所以本網段所有主機都能收到這個資料包(這是乙太網的特性),最後只有真正的目標主機B能夠開啟這些資料包,在此,同網段兩臺主機之間的通訊就此圓滿結束!


2、不同網段主機間通訊

   在這裡應該注意另外一個問題,因為主機A要尋找的目標主機B在同一網路,所以主機A能夠通過ARP得到目標主機BMAC地址,從而完成通訊,當主機A在封裝資料包時檢測到目標主機並不在本網段,在這時,資料包不能把目標主機的MAC地址順利封裝進去,那麼就用到另一種方法,那就是閘道器,主機A在準備發向主機B的資料中,封裝好自己的IP地址和MAC地址,同時也封裝好目標主機BIP地址,資料包封裝到這裡,主機A就利用上面得到同網段目標主機B的方法去請求得到閘道器的MAC地址,同樣也是用ARP去廣播,因為閘道器必須和本機在同一網段,理所當然,閘道器能夠收到這個ARP請求並能正確迴應給主機A,這時主機A在資料包中封裝好自己的IP地址和MAC地址,同時也封裝好目標主機BIP地址和閘道器的MAC地址,把資料包從網路卡發出去,因為目標MAC是閘道器的,所以閘道器收到這個資料包後,發現目標MAC是自己,而目標IP卻是別人,所以它不可以再往上開啟這個資料包,它要做的工作就是把這些資料包發給下一跳路由器(如果閘道器自身就是一臺路由器的話),如果閘道器是一臺普通PC,那麼它就發給路由器,讓路由器把這些資料包正確傳輸到遠端目標網路,到達遠端網路後,它們的閘道器再將資料包發給資料包中的目標IP,即源主機A苦苦尋找的目標主機B,從而真正結束不同網路之間的通訊,迴應的資料包也是用同樣的方法到達目的地,在這裡,還需要注意的是,當閘道器把資料包發給下一跳路由器時,這個資料包必須由閘道器把目標MAC改成下一跳路由器的MAC地址(通過ARP得到),而源端MAC改成發出埠的MAC地址,否則下一跳路由器收到目標MAC不是自己的資料包,會丟棄不予理睬,下一跳路由器再發給下一跳路由器同樣要把目標MAC地址改為下一跳路由器的MAC地址再發出去!

   最後還可以總結出:在網段通訊時,資料包中的地址就是源IP,目標IP,源MAC,目標MAC,根本用不到閘道器,而當檢測到需要把資料包發到遠端網路時,這時,目標MAC就必須改變了,在還沒有出內網時,目標MAC必須寫成閘道器的MAC地址發出去,當閘道器收到時,再把目標MAC地址改成下一跳的MAC地址發出去,同時源MAC地址要始終保持為發出埠的MAC地址(迴應報文可以依靠它路由回去),而源IP及目標IP不曾改變(用於判斷收到資料包的本機IP和資料包IP是否一致,若一致不轉發),就算到達了公網上,目標MAC仍然在不斷改變著,直到最後,這個資料包到達目標IP的網路,最終通訊結束!

下面是個例子:Ping過程詳細解

配置好路由器Routepc0pc1IP地址以及閘道器

這個過程可以具體分為四個階段:
一、pc0Router階段

1ping程式將呼叫因特網控制報文協議(ICMP),ICMP建立一個迴應請求資料包;
2ICMP將這個有效負荷交給因特網協議(IP),然後IP協議會建立一個資料包。這時,這個資料包將包含源IP地址、目的IP地址和值為0x01的協議欄位。
3、一旦資料包被建立,IP協議將判斷目的IP地址是處於本地網路中,還是處於一個遠端網路中;
4、由於IP協議斷定這是一個遠端請求,這個資料包需要被髮送到預設閘道器,這樣, 這個資料包才能路由到遠端網路。本機登錄檔將被使用,以查詢配的預設閘道器;

5、主機pc0的預設閘道器被配置為172.16.0.1 要能夠傳送這個資料包到預設閘道器,必須要知道路由器的FastEthernet0/0介面(其IP地址被配置為172.16.0.1)的硬體地址,因為只有這樣,資料包才可以被下傳給資料鏈路層並生成資料幀,

    【注:】在本地區域網內,主機只可以通過硬體地址來進行通訊,pc0要想和pc1通訊,它必須將資料包傳送到本地網路中預設閘道器的mac地址上,這一點很重要。mac地址永遠都應用於本地區域網,而絕不會通過路由器。
6、接著,pc0檢查arp快取,檢視一個預設閘道器的IP地址是否已經解析為硬體地址,如果已經被解析,資料包就將被釋放、傳送到資料鏈路層並生成資料幀(目的方的硬體地址也將通資料包一同下傳至資料鏈路層),要檢視pc0主機上的arp快取,可以使用下列命令:
                  PC>arp -a
                  Internet Address      Physical Address      Type
                  172.16.0.1            0004.9ade.a201      dynamic
      如果這個硬體地址在pc0主機的arp快取中尚未被解析,一個arp廣播將被髮送到本地網路,以搜尋172.16.0.1的硬體地址,路由器會響應這個請求並提供FastEthernet0/0的硬體地址,接著pc0主機將快取這個地址;

7、一旦這個資料包和目的方的硬體地址被交付給資料鏈路層,區域網驅動器將用來提供媒體訪問以通過乙太網,此時將會產生一個資料幀,使用控制資訊來封轉此資料包。在這個幀中包含有目的方和源方的mac地址,以及乙太網型別欄位。在本例中,這個協議為IP協議。在這個幀的結尾處是被稱為幀校驗序列(FCS)的欄位,它是裝載循冗餘校驗(CRC)計算值的區域。此資料幀還需要查詢一些資訊,即pc0mac地址,以及作為目的方的預設閘道器的mac地址,但這裡並不包括pc1主機的mac地址;
8、資料幀完成封裝以後,就會被交付到物理層,以一次一位的方式傳送往物理媒體(在試驗中是雙絞線對);
9、在衝突域中的每臺裝置將接收這些位並重建為幀。它們都執行CRC並核對儲存在FCS欄位中的內容,如果這 兩個值不匹配,此幀將會被丟棄。
如果這個CRC值相吻合,那麼就核查目的方的mac地址,如果匹配,那麼路由器將將檢視乙太網型別欄位,以瞭解在網路層使用的協議;
10、資料包從資料幀中抽出,然後這個資料幀剩下的部分被丟棄,再把資料包傳給乙太網型別欄位中列出的上層協議,在這裡是傳給IP協議;
11IP會接受這個資料包,並檢查其目的IP地址,由於資料包的目的地址與接收路由器所配置的任一地址不相匹配,路由器將會在路由表中檢視目的IP網路的地址;
12、此路由表中必須包含有網路172.16.1.0的表項,否則此資料包會被立即丟棄,然後一個攜帶有“destination network unavailable”資訊的ICMP包將被髮送回傳送方pc0
13、如果路由器找到目的方的網路,資料包將被交換到輸出介面,由於在被試驗中所有網路都是直連的,因此沒有必要使用主動路由協議;

二、Routerpc1階段

14、路由器將交換此資料包到FastEthernet0/1的緩衝區內;
15FastEthernet0/1的緩衝區需要了解目的方主機的mac地址,它首先檢查arp快取,
如果pc1mac地址已經被解析並儲存在路由器的arp快取中,則這個資料包和mac地址將被傳遞到資料鏈路層並組成資料幀。下面是路由器的arp快取:
 Router#show arp
     Protocol  Address           Age (min)  Hardware Addr   Type   Interface
     Internet  172.16.0.1          -          0004.9ADE.A201  ARPA   FastEthernet0/0
     Internet  172.16.0.2         35         0001.63BC.C8A7  ARPA   FastEthernet0/0
     Internet  172.16.1.1          -          0004.9ADE.A202  ARPA   FastEthernet0/1
     Internet  172.16.1.2          35        000C.8513.CAAB  ARPA   FastEthernet0/1
如果這個硬體地址尚未被解析,路由器將從FastEthernet0/1傳送一個arp廣播到請求,以查詢 172.16.1.2的硬體地址,pc1會響應這個請求並提供硬體地址,接著路由器將快取這個地址;然後這個包和硬體地址都會被髮送到資料鏈路層並組成資料幀;
 16、資料鏈路層將使用這個目的方的源方的mac地址,以及乙太網的型別欄位和FCS來建立一個資料幀,這個幀將被
 17pc1主機會接收到此幀,並立即執行CRC,如果運算結果與FCS欄位的內容相匹配,這個目的mac地址將被檢查,如果發現是匹配的,隨後將檢查乙太網型別欄位中的值,以判斷應該將資料包上傳給網路層的什麼位置;
18、在網路層,IP會接收這個資料包,並檢查其目的方的IP地址,由於他們是匹配的,資料包的協議欄位將會被檢查,以瞭解有效負荷應該交給誰;

  三、pc1Router階段

 19、此有效負荷會交給ICMP,它將知道這是一個迴應請求,ICMP會應答這個請求,通過即可丟掉這個資料包並隨之產生一個新的有效負荷來作為迴應應答;
 20、隨後建立的資料包中將包含源方和目的方的地址、協議欄位和有效負荷。現在,目的方裝置為pc0
 21IP協議將判斷目的IP地址是處於本地網路中,還是處於一個遠端網路中,由於IP協議斷定這是一個遠端請求,這個資料包需要被髮送到預設閘道器,這樣,這個資料包才能路由到遠端網路。本機登錄檔將被使用,以查詢配的預設閘道器;
 22、在pc1的登錄檔中可以找到預設閘道器的IP地址,之後將檢視arp快取,以瞭解是否已經完成了從IP地址到mac地址的解析;
  23、一旦預設閘道器的mac地址找到,此資料包和目的方的mac地址都將被送往資料鏈路層,以完成資料幀的封轉;
 24、資料鏈路層會封裝資料包的內容,並在幀報頭中包含以下內容:
    目的方和源方的mac地址         在乙太網型別欄位中填充0x0800IP    CRC結果填入FCS欄位
 25、這時,幀將會被傳給物理層,並以一次一位的方式傳送到網路媒體上;
26、路由器的FastEthernet0/1介面會接收到這些位並重建為一個幀,CRC校驗被執行,幀的FCS欄位被檢驗,以確認 兩個結果是相符的;
 27CRC檢驗通過之後,目的mac地址將被檢查。由於路由器的介面同這個地址是想匹配的,資料包將被從這個幀中取出, 然後乙太網型別欄位將被檢查,以瞭解資料包應該投遞給網路層上的哪一個協議;
28、由於協議被判斷為IP。於是IP將得到這個資料包,首先IP將對IP報頭執行CRC校驗,然後檢查目的方的IP地址;
 29、在這種情況下,路由器確實知道到達172.16.0.0的方式,這一輸出的介面是FastEthernet0/0,於是資料包將交換到介面FastEthernet0/0上;

 四、Rouetrpc0階段

30、路由器檢查arp快取,確定172.16.0.2mac地址是否已經被解析;
31、由於在將資料包傳送到pc1的過程中,172.16.0.2mac地址已經被快取起來,因此,這一mac地址和資料包將被傳遞到資料鏈路層;
32、資料鏈路層會使用這個目的方的mac地址和源mac地址,然後將IP放入乙太網類

33、這個幀然後被傳送到物理層,以一次一位的方式傳送到本地網路;

34pc0將接收這個幀,執行CRC演算法,檢查目的方的mac地址,並檢視乙太網型別欄位中的內容,以判斷誰來處理這個幀;
35、由於IP是被指定的接收者,隨後這個資料包被傳遞給網路層的IP協議,它將檢查包的協議欄位,以確定進一步的操作,IP發現要將此有此有限負荷交給ICMP的指示,接著ICMP將確定此資料包是一個ICMP的應答回覆包;
36ICMP通過傳送一個感嘆號(!)到使用者介面來表明它已經接收到一個回覆,在命令提示行下表現為收到報文,這之後,ICMP會嘗試繼續傳送4個應答請求到pc1

相關文章