两不同网段主机直连通信过程的建立(3个实验详细分析)
生活随笔
收集整理的這篇文章主要介紹了
两不同网段主机直连通信过程的建立(3个实验详细分析)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡界流行一種說法:不同網段主機不能直接通信。今天我們就來讓兩臺不同網段的主機直連能夠通信,并做詳細詳細解釋。
| 這里插講一個技術:免費ARP——Gratuitous ARP。翻譯也許不準確。 Gratuitous ARP包含的重要信息: sender MAC:發送者的MAC地址; sender IP:發送者的IP地址; target MAC:00:00:00:00:00:00; target Ip:發送者的IP地址; Gratuitous主要有兩個作用: ? ?? ?? ? 一是主動通告自己的MAC地址。一般用于熱備份系統中,比如冗余網關,當主設備發生故障,備用設備立即接管主設備,并向廣播域發送Gratuitous ARP,通知所有主機網關IP對應的MAC為備份設備的MAC,這樣網絡中其他設備就會把流量轉向備份設備。 ? ?? ?? ?二是用于IP沖突檢測。當一個主機A的網絡接口剛UP的時候,會發送Gratuitous ARP。ARP target IP字段為自己的IP,target MAC字段全0,如果該網段中有其他主機B的IP與之相同,主機B會用自己的MAC填充單播應答ARP sender MAC字段,然后將該ARP單播應答發往主機A。主機A接收任何一個ARP的單播應答則認為產生了IP沖突。值得注意的是:當網絡中其他主機收到主機A發出的Gratuitous ARP后,并不會把該ARP中包含的sender ip與sender mac加入本地ARP緩存。 ? ?? ?? ?注意:主機不會將Gratuitous ARP中的sender MAC和sender IP加入本地ARP緩存。 ? |
============================================================================================================
試驗一:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:不配
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:不配
當PC2剛啟動的時候會發送3個Gratuitous ARP廣播包來檢測是否存在IP沖突。PC1收到PC2的ARP廣播,但并不將PC1的主機IP和MAC加進自己ARP緩存中。
我們在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先將目標IP 192.168.1.200與自己路由表比對,在本地路由表中找不到相關路由,原因是沒有配置網關,從而沒有默認路由。PC2直接將該ICMP包丟棄。
============================================================================================================
試驗二:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:不配
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:192.168.1.200 //注意:與實驗一不同的地方。
當PC2剛啟動的時候會發送3個Gratuitous ARP廣播包來檢測是否存在IP沖突。PC1收到PC2的ARP廣播,但并不將PC2的主機IP和MAC加進自己ARP緩存中。
我們在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先將目標IP 192.168.1.200與自己路由表比對,在本地路由表中找了到一條默認路由:
Network Destination? ?? ???Netmask? ?? ?? ? Gateway? ?? ? Interface??Metric
? ?? ?? ? 0.0.0.0? ?? ?? ? 0.0.0.0? ? 192.168.1.200? ?? ?? ? 1.1.1.1? ???10
該路由條目的下一條(網關)為192.168.1.200,于是PC2查看本機ARP表緩存是否存在網關的ARP條目,但并沒有找到相應網關條目,所以PC2發出尋找網關的的ARP廣播。PC1收到該ARP廣播查詢包,于是PC1向PC2發送ARP應答的單播包,這個應答包中的sender mac就是PC1的MAC地址。PC2收到PC1的應答包后,提取sender ip和sender mac值,加入本地ARP緩存。這樣PC2就知道了網關MAC地址。(注意我們要到達的目標IP為192.168.1.200,網關IP也為192.168.1.200。但我盡量用“網關”這個詞語,就是要請大家留意PC2發送ARP包的目的不是尋找PING包的目的地址,而是尋找網關地址。這里查找網關的步驟屬于OSI 2層通信。)
于是PC2在PING包,即ICMP包數據段的前部加上IP報頭,IP報頭的Distination IP:192.168.1.200,source ip:1.1.1.1,再在IP報頭前部封裝以太網幀頭,Distination mac:網關192.168.1.200的MAC(從ARP緩存中提取),sorce mac為PC2 1.1.1.1接口MAC。于是PC2拿到這封裝好了的ICMP包,交給1.1.1.1接口,就這樣,PC2將ICMP包順利傳遞到了網關。(注意本步驟同樣用“網關”這個詞。該過程屬OSI 3層通信)。
PC1收到該ICMP包,提取IP報頭的Distination ip 192.168.1.200與自己IP比對,發現剛好匹配。PC1認為該ICMP是給自己的。于是PC1就準備給PC2一個ICMP應答。
PC1再次分析ICMP包,從IP報頭的source ip字段提取出1.1.1.1,再從以太網幀頭中提取sender mac:PC2的MAC,將PC2的IP和PC2的MAC加進自己ARP緩存中。
PC1拿1.1.1.1與自己路由表比對,找不到相應路由(原因在于PC1沒有配置網關)。最后PC1將放棄對PC2進行ICMP應答。
============================================================================================================
試驗三:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:1.1.1.1??//注意:與實驗二不同的地方。
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:192.168.1.200
當PC2剛啟動的時候會發送3個Gratuitous ARP廣播包來檢測是否存在IP沖突。PC1收到PC2的ARP廣播,但并不將PC2的主機IP和MAC加進自己ARP緩存中。
我們在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先將目標IP 192.168.1.200與自己路由表比對,在本地路由表中找了到一條默認路由:
Network Destination? ?? ???Netmask? ?? ?? ? Gateway? ?? ? Interface??Metric
? ?? ?? ? 0.0.0.0? ?? ?? ? 0.0.0.0? ? 192.168.1.200? ?? ?? ? 1.1.1.1? ???10
該路由條目的下一條(網關)為192.168.1.200,于是PC2查看本機ARP表緩存是否存在網關的ARP條目,但并沒有找到相應網關條目,所有PC2發出尋找網關的的ARP廣播。PC1收到該ARP廣播查詢包,于是PC1向PC2發送ARP應答的單播包,這個應答包中的sender mac就是PC1的MAC地址。PC2收到PC1的應答包后,提取sender ip和sender mac值,加入本地ARP緩存。這樣PC2就知道了網關MAC地址。(注意我們要到達的目標IP為192.168.1.200,網關IP也為192.168.1.200。但我盡量用“網關”這個詞語,就是要請大家留意PC2發送ARP包的目的不是尋找PING包的目的地址,而是尋找網關地址。這里查找網關的步驟屬于OSI 2層通信。)
于是PC2在PING包,即ICMP包數據段前部加上IP報頭,IP報頭的Distination IP:192.168.1.200,source ip:1.1.1.1(路由條目的interface字段提取),再在IP報頭前部封裝以太網幀頭,Distination mac:網關192.168.1.200的MAC(從ARP緩存中提取),sorce mac為路由條目的interface字段提取的1.1.1.1接口MAC。于是PC2拿到這封裝好了的ICMP包,交給路由條目中interface字段指定的接口1.1.1.1,就這樣,PC2將ICMP包順利傳遞到了網關。(注意本步驟我同樣用“網關”這個詞。該過程屬OSI 3層通信)。
PC1收到該ICMP包,從IP報頭的source ip字段提取出1.1.1.1,再從以太網幀頭中提取sender mac:PC2的MAC,將PC2的IP和PC2的MAC加進自己ARP緩存中。
PC1再次分析ICMP包,提取IP報頭的Distination ip 192.168.1.200與自己IP比對,發現剛好匹配。PC1認為該ICMP請求包是給自己的。于是PC1就準備給PC2一個ICMP應答。(上訴步驟與實驗二步驟相同)
于是PC1在ICMP應答包的數據段前部加上IP報頭,IP報頭的Distination IP:從PC2 ICMP請求包IP報頭source ip字段提取;
PC1將從PC2 ICMP請求包IP報頭source ip字段提取到的1.1.1.1與自己路由表比對,找到一條默認路由:
Network Destination? ?? ???Netmask? ?? ?? ? Gateway? ?? ? Interface??Metric
? ?? ?? ? 0.0.0.0? ?? ?? ? 0.0.0.0? ?? ?? ? 1.1.1.1? ?192.168.1.200? ?? ? 20
該路由下一條(網關)為1.1.1.1。于是PC1查看本機ARP緩存是否存在網關的ARP條目。
Interface: 192.168.1.200 --- 0x30003
??Internet Address? ?? ?Physical Address? ?? ?Type
??1.1.1.1? ?? ?? ?? ?? ?00-0c-29-c3-0d-92? ???dynamic
在ARP緩存中找到了相應條目。于是PC1提取(網關)對應的MAC作為ICMP應答包以太網幀幀頭的Distination mac。再從路由條目interface字段192.168.1.200對應自己網卡的mac作為ICMP應答包幀頭的source mac。于是PC1拿這個封裝好的ICMP應答包,交給路由條目中interface字段指定的接口192.168.1.1。就這樣PC1將ICMP應答包順利傳遞到了網關。(注意用詞也是“網關”。該過程也屬于OSI 3層通信)。
PC2收到ICMP應答包,提取IP報頭的Distination ip 1.1.1.1與自己IP比對,發現剛好匹配。
到此一次完整的PING過程就完成,PC1 ping PC2 成功!。
================重要結論:兩臺不同網段的主機直連能夠通信。=================================
下面簡要總結實驗一、實驗二部能通信得原因:
實驗一:
兩主機都沒網關:PC2找不到目標IP路由——雙向不通。
實驗二:
PC1沒有網管,PC2有網關:PC2將數據包成功發往PC1,但PC找不到到達PC2的路由——單通。
實驗三:
兩主機網關為對端主機IP:——雙向互通。
====================================================================================
? ?? ???在CISCO環境中,比如用CISCO路由器通過配置no ip routing來模擬PC直連,配置不同網段IP后,發現能通信的現象我還不知道怎么解釋,也許CISCO有它自己的檢測機制。
? ?? ???有網友提出是設備剛啟動后發送的Gratuitous ARP所致,但本文已經闡明主機不會將Gratuitous ARP中的sender MAC和sender IP加入本地ARP緩存。再者,設備通信第一步檢查的是路由表,而不是ARP緩存。所以我認為Gratuitous ARP所致的原因是不合理的。希望有朋友能提出擬獨到的見解,共同探討。
?
轉載于:https://blog.51cto.com/hanbing/534855
總結
以上是生活随笔為你收集整理的两不同网段主机直连通信过程的建立(3个实验详细分析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CSON原创】 图片滑动展开效果发布
- 下一篇: 浅谈FPGA电脑