同网段不同网段主机间通信原理
1、同網(wǎng)段主機間通信
? ?主機A與主機B通信,這時主機A肯定首先要封裝這些需要發(fā)給主機B的數(shù)據(jù)包,那么對于主機A來說,自己的IP地址和MAC自己肯定能夠輕易得到,對于主機B的IP地址這時主機A也應(yīng)該知道,要不然它就不清楚自己將要和誰通信,當(dāng)有了自己的IP地址,MAC地址以及主機B的IP地址后,主機A在數(shù)據(jù)包中可以正確地寫上源IP地址,目標(biāo)IP地址,接下來的工作就是寫入自己的MAC地址(即源MAC),最后還必須正確寫入目標(biāo)主機B的MAC地址,可這時主機A才發(fā)現(xiàn)自己根本沒有目標(biāo)主機B的MAC地址,那該怎么辦呢?這時主機A就通過比較上面已經(jīng)封裝好的源IP和目標(biāo)IP,通過子網(wǎng)掩碼計算一下,發(fā)現(xiàn)源IP和目標(biāo)IP恰好在同一個IP網(wǎng)絡(luò)內(nèi),那么它想要得到目標(biāo)主機B的MAC地址就有辦法了,首先主機A就向本網(wǎng)段發(fā)過一個ARP請求,這個ARP請求包中包括主機A的源IP地址,源MAC地址,目標(biāo)主機B的IP地址,而目標(biāo)MAC地址為廣播MAC地址(全部為F),因為我們要找的就是目標(biāo)MAC,所以這里用廣播MAC地址,又因為是以太網(wǎng),所以整個局域網(wǎng)的所有主機都能收到這個請求MAC地址的數(shù)據(jù)包,當(dāng)然主機B也能收到,因此在主機B收到此ARP請求后,立即構(gòu)建一個包括自己的MAC地址的ARP回應(yīng)包,回應(yīng)給主機A,當(dāng)主機A收到這個ARP回應(yīng)后,終于完成了找尋目標(biāo)MAC的重大任務(wù),從而把目標(biāo)主機B的MAC地址正確封裝進上面還未封裝結(jié)束的正準(zhǔn)備發(fā)給主機B的數(shù)據(jù)包,在這時,源IP和源MAC以及目標(biāo)IP和目標(biāo)MAC都已正確存在于數(shù)據(jù)包中,那么這里主機A向網(wǎng)絡(luò)內(nèi)發(fā)出這些數(shù)據(jù)包,因為目標(biāo)地址在本網(wǎng)段,所以本網(wǎng)段所有主機都能收到這個數(shù)據(jù)包(這是以太網(wǎng)的特性),最后只有真正的目標(biāo)主機B能夠打開這些數(shù)據(jù)包,在此,同網(wǎng)段兩臺主機之間的通信就此圓滿結(jié)束!
2、不同網(wǎng)段主機間通信
? ?在這里應(yīng)該注意另外一個問題,因為主機A要尋找的目標(biāo)主機B在同一網(wǎng)絡(luò),所以主機A能夠通過ARP得到目標(biāo)主機B的MAC地址,從而完成通信,當(dāng)主機A在封裝數(shù)據(jù)包時檢測到目標(biāo)主機并不在本網(wǎng)段,在這時,數(shù)據(jù)包不能把目標(biāo)主機的MAC地址順利封裝進去,那么就用到另一種方法,那就是網(wǎng)關(guān),主機A在準(zhǔn)備發(fā)向主機B的數(shù)據(jù)中,封裝好自己的IP地址和MAC地址,同時也封裝好目標(biāo)主機B的IP地址,數(shù)據(jù)包封裝到這里,主機A就利用上面得到同網(wǎng)段目標(biāo)主機B的方法去請求得到網(wǎng)關(guān)的MAC地址,同樣也是用ARP去廣播,因為網(wǎng)關(guān)必須和本機在同一網(wǎng)段,理所當(dāng)然,網(wǎng)關(guān)能夠收到這個ARP請求并能正確回應(yīng)給主機A,這時主機A在數(shù)據(jù)包中封裝好自己的IP地址和MAC地址,同時也封裝好目標(biāo)主機B的IP地址和網(wǎng)關(guān)的MAC地址,把數(shù)據(jù)包從網(wǎng)卡發(fā)出去,因為目標(biāo)MAC是網(wǎng)關(guān)的,所以網(wǎng)關(guān)收到這個數(shù)據(jù)包后,發(fā)現(xiàn)目標(biāo)MAC是自己,而目標(biāo)IP卻是別人,所以它不可以再往上打開這個數(shù)據(jù)包,它要做的工作就是把這些數(shù)據(jù)包發(fā)給下一跳路由器(如果網(wǎng)關(guān)自身就是一臺路由器的話),如果網(wǎng)關(guān)是一臺普通PC,那么它就發(fā)給路由器,讓路由器把這些數(shù)據(jù)包正確傳輸?shù)竭h程目標(biāo)網(wǎng)絡(luò),到達遠程網(wǎng)絡(luò)后,它們的網(wǎng)關(guān)再將數(shù)據(jù)包發(fā)給數(shù)據(jù)包中的目標(biāo)IP,即源主機A苦苦尋找的目標(biāo)主機B,從而真正結(jié)束不同網(wǎng)絡(luò)之間的通信,回應(yīng)的數(shù)據(jù)包也是用同樣的方法到達目的地,在這里,還需要注意的是,當(dāng)網(wǎng)關(guān)把數(shù)據(jù)包發(fā)給下一跳路由器時,這個數(shù)據(jù)包必須由網(wǎng)關(guān)把目標(biāo)MAC改成下一跳路由器的MAC地址(通過ARP得到),而源端MAC改成發(fā)出端口的MAC地址,否則下一跳路由器收到目標(biāo)MAC不是自己的數(shù)據(jù)包,會丟棄不予理睬,下一跳路由器再發(fā)給下一跳路由器同樣要把目標(biāo)MAC地址改為下一跳路由器的MAC地址再發(fā)出去!
? ?最后還可以總結(jié)出:在網(wǎng)段通信時,數(shù)據(jù)包中的地址就是源IP,目標(biāo)IP,源MAC,目標(biāo)MAC,根本用不到網(wǎng)關(guān),而當(dāng)檢測到需要把數(shù)據(jù)包發(fā)到遠程網(wǎng)絡(luò)時,這時,目標(biāo)MAC就必須改變了,在還沒有出內(nèi)網(wǎng)時,目標(biāo)MAC必須寫成網(wǎng)關(guān)的MAC地址發(fā)出去,當(dāng)網(wǎng)關(guān)收到時,再把目標(biāo)MAC地址改成下一跳的MAC地址發(fā)出去,同時源MAC地址要始終保持為發(fā)出端口的MAC地址(回應(yīng)報文可以依靠它路由回去),而源IP及目標(biāo)IP不曾改變(用于判斷收到數(shù)據(jù)包的本機IP和數(shù)據(jù)包IP是否一致,若一致不轉(zhuǎn)發(fā)),就算到達了公網(wǎng)上,目標(biāo)MAC仍然在不斷改變著,直到最后,這個數(shù)據(jù)包到達目標(biāo)IP的網(wǎng)絡(luò),最終通信結(jié)束!
下面是個例子:Ping過程詳細解
配置好路由器Route和pc0、pc1的IP地址以及網(wǎng)關(guān)
這個過程可以具體分為四個階段:
一、pc0到Router階段
1、ping進程將調(diào)用因特網(wǎng)控制報文協(xié)議(ICMP),ICMP創(chuàng)建一個回應(yīng)請求數(shù)據(jù)包;2、ICMP將這個有效負(fù)荷交給因特網(wǎng)協(xié)議(IP),然后IP協(xié)議會創(chuàng)建一個數(shù)據(jù)包。這時,這個數(shù)據(jù)包將包含源IP地址、目的IP地址和值為0x01的協(xié)議字段。3、一旦數(shù)據(jù)包被創(chuàng)建,IP協(xié)議將判斷目的IP地址是處于本地網(wǎng)絡(luò)中,還是處于一個遠程網(wǎng)絡(luò)中;4、由于IP協(xié)議斷定這是一個遠程請求,這個數(shù)據(jù)包需要被發(fā)送到默認(rèn)網(wǎng)關(guān),這樣,?這個數(shù)據(jù)包才能路由到遠程網(wǎng)絡(luò)。本機注冊表將被使用,以查找配的默認(rèn)網(wǎng)關(guān);
5、主機pc0的默認(rèn)網(wǎng)關(guān)被配置為172.16.0.1?要能夠發(fā)送這個數(shù)據(jù)包到默認(rèn)網(wǎng)關(guān),必須要知道路由器的FastEthernet0/0接口(其IP地址被配置為172.16.0.1)的硬件地址,因為只有這樣,數(shù)據(jù)包才可以被下傳給數(shù)據(jù)鏈路層并生成數(shù)據(jù)幀,
? ? 【注:】在本地局域網(wǎng)內(nèi),主機只可以通過硬件地址來進行通信,pc0要想和pc1通信,它必須將數(shù)據(jù)包發(fā)送到本地網(wǎng)絡(luò)中默認(rèn)網(wǎng)關(guān)的mac地址上,這一點很重要。mac地址永遠都應(yīng)用于本地局域網(wǎng),而絕不會通過路由器。6、接著,pc0檢查arp緩存,查看一個默認(rèn)網(wǎng)關(guān)的IP地址是否已經(jīng)解析為硬件地址,如果已經(jīng)被解析,數(shù)據(jù)包就將被釋放、傳送到數(shù)據(jù)鏈路層并生成數(shù)據(jù)幀(目的方的硬件地址也將通數(shù)據(jù)包一同下傳至數(shù)據(jù)鏈路層),要查看pc0主機上的arp緩存,可以使用下列命令:? ? ? ? ? ? ? ? ? PC>arp -a? ? ? ? ? ? ? ? ? Internet Address????? Physical Address????? Type? ? ? ? ? ? ? ? ? 172.16.0.1??????????? 0004.9ade.a201????? dynamic? ? ??如果這個硬件地址在pc0主機的arp緩存中尚未被解析,一個arp廣播將被發(fā)送到本地網(wǎng)絡(luò),以搜索172.16.0.1的硬件地址,路由器會響應(yīng)這個請求并提供FastEthernet0/0的硬件地址,接著pc0主機將緩存這個地址;7、一旦這個數(shù)據(jù)包和目的方的硬件地址被交付給數(shù)據(jù)鏈路層,局域網(wǎng)驅(qū)動器將用來提供媒體訪問以通過以太網(wǎng),此時將會產(chǎn)生一個數(shù)據(jù)幀,使用控制信息來封轉(zhuǎn)此數(shù)據(jù)包。在這個幀中包含有目的方和源方的mac地址,以及以太網(wǎng)類型字段。在本例中,這個協(xié)議為IP協(xié)議。在這個幀的結(jié)尾處是被稱為幀校驗序列(FCS)的字段,它是裝載循冗余校驗(CRC)計算值的區(qū)域。此數(shù)據(jù)幀還需要查詢一些信息,即pc0的mac地址,以及作為目的方的默認(rèn)網(wǎng)關(guān)的mac地址,但這里并不包括pc1主機的mac地址;8、數(shù)據(jù)幀完成封裝以后,就會被交付到物理層,以一次一位的方式發(fā)送往物理媒體(在試驗中是雙絞線對);9、在沖突域中的每臺設(shè)備將接收這些位并重建為幀。它們都運行CRC并核對保存在FCS字段中的內(nèi)容,如果這?兩個值不匹配,此幀將會被丟棄。如果這個CRC值相吻合,那么就核查目的方的mac地址,如果匹配,那么路由器將將查看以太網(wǎng)類型字段,以了解在網(wǎng)絡(luò)層使用的協(xié)議;10、數(shù)據(jù)包從數(shù)據(jù)幀中抽出,然后這個數(shù)據(jù)幀剩下的部分被丟棄,再把數(shù)據(jù)包傳給以太網(wǎng)類型字段中列出的上層協(xié)議,在這里是傳給IP協(xié)議;11、IP會接受這個數(shù)據(jù)包,并檢查其目的IP地址,由于數(shù)據(jù)包的目的地址與接收路由器所配置的任一地址不相匹配,路由器將會在路由表中查看目的IP網(wǎng)絡(luò)的地址;12、此路由表中必須包含有網(wǎng)絡(luò)172.16.1.0的表項,否則此數(shù)據(jù)包會被立即丟棄,然后一個攜帶有“destination network unavailable”信息的ICMP包將被發(fā)送回發(fā)送方pc0;13、如果路由器找到目的方的網(wǎng)絡(luò),數(shù)據(jù)包將被交換到輸出接口,由于在被試驗中所有網(wǎng)絡(luò)都是直連的,因此沒有必要使用主動路由協(xié)議;二、Router到pc1階段
14、路由器將交換此數(shù)據(jù)包到FastEthernet0/1的緩沖區(qū)內(nèi);15、FastEthernet0/1的緩沖區(qū)需要了解目的方主機的mac地址,它首先檢查arp緩存,如果pc1的mac地址已經(jīng)被解析并保存在路由器的arp緩存中,則這個數(shù)據(jù)包和mac地址將被傳遞到數(shù)據(jù)鏈路層并組成數(shù)據(jù)幀。下面是路由器的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發(fā)送一個arp廣播到請求,以查找?172.16.1.2的硬件地址,pc1會響應(yīng)這個請求并提供硬件地址,接著路由器將緩存這個地址;然后這個包和硬件地址都會被發(fā)送到數(shù)據(jù)鏈路層并組成數(shù)據(jù)幀;?16、數(shù)據(jù)鏈路層將使用這個目的方的源方的mac地址,以及以太網(wǎng)的類型字段和FCS來創(chuàng)建一個數(shù)據(jù)幀,這個幀將被?17、pc1主機會接收到此幀,并立即運行CRC,如果運算結(jié)果與FCS字段的內(nèi)容相匹配,這個目的mac地址將被檢查,如果發(fā)現(xiàn)是匹配的,隨后將檢查以太網(wǎng)類型字段中的值,以判斷應(yīng)該將數(shù)據(jù)包上傳給網(wǎng)絡(luò)層的什么位置;18、在網(wǎng)絡(luò)層,IP會接收這個數(shù)據(jù)包,并檢查其目的方的IP地址,由于他們是匹配的,數(shù)據(jù)包的協(xié)議字段將會被檢查,以了解有效負(fù)荷應(yīng)該交給誰;??三、pc1到Router階段
?19、此有效負(fù)荷會交給ICMP,它將知道這是一個回應(yīng)請求,ICMP會應(yīng)答這個請求,通過即可丟掉這個數(shù)據(jù)包并隨之產(chǎn)生一個新的有效負(fù)荷來作為回應(yīng)應(yīng)答;?20、隨后創(chuàng)建的數(shù)據(jù)包中將包含源方和目的方的地址、協(xié)議字段和有效負(fù)荷。現(xiàn)在,目的方設(shè)備為pc0;?21、IP協(xié)議將判斷目的IP地址是處于本地網(wǎng)絡(luò)中,還是處于一個遠程網(wǎng)絡(luò)中,由于IP協(xié)議斷定這是一個遠程請求,這個數(shù)據(jù)包需要被發(fā)送到默認(rèn)網(wǎng)關(guān),這樣,這個數(shù)據(jù)包才能路由到遠程網(wǎng)絡(luò)。本機注冊表將被使用,以查找配的默認(rèn)網(wǎng)關(guān);?22、在pc1的注冊表中可以找到默認(rèn)網(wǎng)關(guān)的IP地址,之后將查看arp緩存,以了解是否已經(jīng)完成了從IP地址到mac地址的解析;? 23、一旦默認(rèn)網(wǎng)關(guān)的mac地址找到,此數(shù)據(jù)包和目的方的mac地址都將被送往數(shù)據(jù)鏈路層,以完成數(shù)據(jù)幀的封轉(zhuǎn);?24、數(shù)據(jù)鏈路層會封裝數(shù)據(jù)包的內(nèi)容,并在幀報頭中包含以下內(nèi)容:? ??目的方和源方的mac地址?????????在以太網(wǎng)類型字段中填充0x0800(IP)????將CRC結(jié)果填入FCS字段?25、這時,幀將會被傳給物理層,并以一次一位的方式發(fā)送到網(wǎng)絡(luò)媒體上;26、路由器的FastEthernet0/1接口會接收到這些位并重建為一個幀,CRC校驗被運行,幀的FCS字段被檢驗,以確認(rèn)?兩個結(jié)果是相符的;?27、CRC檢驗通過之后,目的mac地址將被檢查。由于路由器的接口同這個地址是想匹配的,數(shù)據(jù)包將被從這個幀中取出,?然后以太網(wǎng)類型字段將被檢查,以了解數(shù)據(jù)包應(yīng)該投遞給網(wǎng)絡(luò)層上的哪一個協(xié)議;28、由于協(xié)議被判斷為IP。于是IP將得到這個數(shù)據(jù)包,首先IP將對IP報頭運行CRC校驗,然后檢查目的方的IP地址;?29、在這種情況下,路由器確實知道到達172.16.0.0的方式,這一輸出的接口是FastEthernet0/0,于是數(shù)據(jù)包將交換到接口FastEthernet0/0上;
?四、Rouetr到pc0階段
30、路由器檢查arp緩存,確定172.16.0.2的mac地址是否已經(jīng)被解析;31、由于在將數(shù)據(jù)包傳送到pc1的過程中,172.16.0.2的mac地址已經(jīng)被緩存起來,因此,這一mac地址和數(shù)據(jù)包將被傳遞到數(shù)據(jù)鏈路層;32、數(shù)據(jù)鏈路層會使用這個目的方的mac地址和源mac地址,然后將IP放入以太網(wǎng)類
33、這個幀然后被傳送到物理層,以一次一位的方式發(fā)送到本地網(wǎng)絡(luò);
34、pc0將接收這個幀,運行CRC算法,檢查目的方的mac地址,并查看以太網(wǎng)類型字段中的內(nèi)容,以判斷誰來處理這個幀;35、由于IP是被指定的接收者,隨后這個數(shù)據(jù)包被傳遞給網(wǎng)絡(luò)層的IP協(xié)議,它將檢查包的協(xié)議字段,以確定進一步的操作,IP發(fā)現(xiàn)要將此有此有限負(fù)荷交給ICMP的指示,接著ICMP將確定此數(shù)據(jù)包是一個ICMP的應(yīng)答回復(fù)包;36、ICMP通過發(fā)送一個感嘆號(!)到用戶接口來表明它已經(jīng)接收到一個回復(fù),在命令提示行下表現(xiàn)為收到報文,這之后,ICMP會嘗試?yán)^續(xù)發(fā)送4個應(yīng)答請求到pc1。總結(jié)
以上是生活随笔為你收集整理的同网段不同网段主机间通信原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux之磁盘概述
- 下一篇: mysql之外键约束