網絡基礎:二、網絡通信過程詳解

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

在這裏應該注意另外一個問題,因爲主機A要尋找的目標主機B在同一網絡,所以主機A能夠通過ARP得到目標主機B的MAC地址,從而完成通信,當主機A在封裝數據包時檢測到目標主機並不在本網段,在這時,數據包不能把目標主機的MAC地址順利封裝進去,那麼就用到另一種方法,那就是網關,主機A在準備發向主機B的數據中,封裝好自己的IP地址和MAC地址,同時也封裝好目標主機B的IP地址,數據包封裝到這裏,主機A就利用上面得到同網段目標主機B的方法去請求得到網關的MAC地址,同樣也是用ARP去廣播,因爲網關必須和本機在同一網段,理所當然,網關能夠收到這個ARP請求並能正確迴應給主機A,這時主機A在數據包中封裝好自己的IP地址和MAC地址,同時也封裝好目標主機B的IP地址和網關的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過程詳細解

配置好路由器Route和pc0、pc1的IP地址以及網關

這個過程可以具體分爲四個階段:
一、pc0到Router階段

1、ping進程將調用因特網控制報文協議(ICMP),ICMP創建一個迴應請求數據包;
2、ICMP將這個有效負荷交給因特網協議(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)計算值的區域。此數據幀還需要查詢一些信息,即pc0的mac地址,以及作爲目的方的默認網關的mac地址,但這裏並不包括pc1主機的mac地址;
8、數據幀完成封裝以後,就會被交付到物理層,以一次一位的方式發送往物理媒體(在試驗中是雙絞線對);
9、在衝突域中的每臺設備將接收這些位並重建爲幀。它們都運行CRC並覈對保存在FCS字段中的內容,如果這 兩個值不匹配,此幀將會被丟棄。
如果這個CRC值相吻合,那麼就覈查目的方的mac地址,如果匹配,那麼路由器將將查看以太網類型字段,以瞭解在網絡層使用的協議;
10、數據包從數據幀中抽出,然後這個數據幀剩下的部分被丟棄,再把數據包傳給以太網類型字段中列出的上層協議,在這裏是傳給IP協議;
11、IP會接受這個數據包,並檢查其目的IP地址,由於數據包的目的地址與接收路由器所配置的任一地址不相匹配,路由器將會在路由表中查看目的IP網絡的地址;
12、此路由表中必須包含有網絡172.16.1.0的表項,否則此數據包會被立即丟棄,然後一個攜帶有“destination network unavailable”信息的ICMP包將被髮送回發送方pc0;
13、如果路由器找到目的方的網絡,數據包將被交換到輸出接口,由於在被試驗中所有網絡都是直連的,因此沒有必要使用主動路由協議;
二、Router到pc1階段

14、路由器將交換此數據包到FastEthernet0/1的緩衝區內;
15、FastEthernet0/1的緩衝區需要了解目的方主機的mac地址,它首先檢查arp緩存,
如果pc1的mac地址已經被解析並保存在路由器的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來創建一個數據幀,這個幀將被
 17、pc1主機會接收到此幀,並立即運行CRC,如果運算結果與FCS字段的內容相匹配,這個目的mac地址將被檢查,如果發現是匹配的,隨後將檢查以太網類型字段中的值,以判斷應該將數據包上傳給網絡層的什麼位置;
18、在網絡層,IP會接收這個數據包,並檢查其目的方的IP地址,由於他們是匹配的,數據包的協議字段將會被檢查,以瞭解有效負荷應該交給誰;
  三、pc1到Router階段

 19、此有效負荷會交給ICMP,它將知道這是一個迴應請求,ICMP會應答這個請求,通過即可丟掉這個數據包並隨之產生一個新的有效負荷來作爲迴應應答;
 20、隨後創建的數據包中將包含源方和目的方的地址、協議字段和有效負荷。現在,目的方設備爲pc0;
 21、IP協議將判斷目的IP地址是處於本地網絡中,還是處於一個遠程網絡中,由於IP協議斷定這是一個遠程請求,這個數據包需要被髮送到默認網關,這樣,這個數據包才能路由到遠程網絡。本機註冊表將被使用,以查找配的默認網關;
 22、在pc1的註冊表中可以找到默認網關的IP地址,之後將查看arp緩存,以瞭解是否已經完成了從IP地址到mac地址的解析;
  23、一旦默認網關的mac地址找到,此數據包和目的方的mac地址都將被送往數據鏈路層,以完成數據幀的封轉;
 24、數據鏈路層會封裝數據包的內容,並在幀報頭中包含以下內容:
    目的方和源方的mac地址         在以太網類型字段中填充0x0800(IP)    將CRC結果填入FCS字段
 25、這時,幀將會被傳給物理層,並以一次一位的方式發送到網絡媒體上;
26、路由器的FastEthernet0/1接口會接收到這些位並重建爲一個幀,CRC校驗被運行,幀的FCS字段被檢驗,以確認 兩個結果是相符的;
 27、CRC檢驗通過之後,目的mac地址將被檢查。由於路由器的接口同這個地址是想匹配的,數據包將被從這個幀中取出, 然後以太網類型字段將被檢查,以瞭解數據包應該投遞給網絡層上的哪一個協議;
28、由於協議被判斷爲IP。於是IP將得到這個數據包,首先IP將對IP報頭運行CRC校驗,然後檢查目的方的IP地址;
 29、在這種情況下,路由器確實知道到達172.16.0.0的方式,這一輸出的接口是FastEthernet0/0,於是數據包將交換到接口FastEthernet0/0上;
 四、Rouetr到pc0階段

 

30、路由器檢查arp緩存,確定172.16.0.2的mac地址是否已經被解析;
31、由於在將數據包傳送到pc1的過程中,172.16.0.2的mac地址已經被緩存起來,因此,這一mac地址和數據包將被傳遞到數據鏈路層;
32、數據鏈路層會使用這個目的方的mac地址和源mac地址,然後將IP放入以太網類
33、這個幀然後被傳送到物理層,以一次一位的方式發送到本地網絡;

34、pc0將接收這個幀,運行CRC算法,檢查目的方的mac地址,並查看以太網類型字段中的內容,以判斷誰來處理這個幀;
35、由於IP是被指定的接收者,隨後這個數據包被傳遞給網絡層的IP協議,它將檢查包的協議字段,以確定進一步的操作,IP發現要將此有此有限負荷交給ICMP的指示,接着ICMP將確定此數據包是一個ICMP的應答回覆包;
36、ICMP通過發送一個感嘆號(!)到用戶接口來表明它已經接收到一個回覆,在命令提示行下表現爲收到報文,這之後,ICMP會嘗試繼續發送4個應答請求到pc1。

--------------------- 
作者:Ijuan_0712 
來源:CSDN 
原文:https://blog.csdn.net/tao546377318/article/details/50313441 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章