跨網段到底需要三層交換嗎?
如圖所示,r2可以ping通r3。如果換成傻瓜交換機就ping不通了,請問這是為什麼?我的看法是r2的arp包可以獲取r3的mac地址。但不是說跨網段需要三層交換嗎?
換成傻瓜交換機之後,r2 和 r3 就在同一個廣播域里了,所以題主的看法「r2的arp包可以獲取r3的mac地址」這句話原則上沒錯。
之所以 ping 不通,我們應該關注的是 r2 的路由表。r2 如果發 arp 包,確實可以獲得 r3 的 mac 地址;然而,事實上,根據 r2 的路由表,r2 根本不知道 10.1.3.1 這個地址在 e0/0 這個介面的廣播域上,自然就不會向這裡發送 arp 詢問。
在 r2 上添加 "ip route 10.1.3.0 255.255.255.0 e0/0",然後在 r3 上也加上這個,貌似應該可以通。不過剛才實驗了一下,發現 r3 並不理會 r2 發來的 arp 包,這個有可能是 arp 實現的問題,在 Linux 上是可以實現的。
root@server4:~# ip netns add ns1
root@server4:~# ip netns add ns2
root@server4:~# ip link add veth1 type veth peer name veth2
root@server4:~# ip link set veth1 netns ns1 name eth0
root@server4:~# ip link set veth2 netns ns2 name eth0
root@server4:~# ip netns exec ns1 bash
root@server4:~# ip a
1: lo: &
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
35: eth0: &
link/ether b2:be:7f:31:56:68 brd ff:ff:ff:ff:ff:ff
root@server4:~# ip l s lo up
root@server4:~# ip l s etho up
Cannot find device "etho"
root@server4:~# ip l s eth0 up
root@server4:~# ip a add 10.1.2.1/24 dev eth0
root@server4:~# ip a
1: lo: &
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
35: eth0: &
link/ether b2:be:7f:31:56:68 brd ff:ff:ff:ff:ff:ff
inet 10.1.2.1/24 scope global eth0
valid_lft forever preferred_lft forever
root@server4:~# ip r add 10.1.3.0/24 dev eth0
root@server4:~# ip r
10.1.2.0/24 dev eth0 proto kernel scope link src 10.1.2.1
10.1.3.0/24 dev eth0 scope link
root@server4:~# exit
root@server4:~# ip netns exec ns2 bash
root@server4:~# ip a
1: lo: &
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
34: eth0: &
link/ether 1a:c3:2e:0b:ba:e7 brd ff:ff:ff:ff:ff:ff
root@server4:~# ip l s lo up
root@server4:~# ip l s eth0 up
root@server4:~# ip a add 10.1.3.1/24 dev eth0
root@server4:~# ip r add 10.1.2.0/24 dev eth0
root@server4:~# ip r
10.1.2.0/24 dev eth0 scope link
10.1.3.0/24 dev eth0 proto kernel scope link src 10.1.3.1
root@server4:~# ip a
1: lo: &
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
34: eth0: &
link/ether 1a:c3:2e:0b:ba:e7 brd ff:ff:ff:ff:ff:ff
inet 10.1.3.1/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::18c3:2eff:fe0b:bae7/64 scope link
valid_lft forever preferred_lft forever
root@server4:~# ping 10.1.3.1
PING 10.1.3.1 (10.1.3.1) 56(84) bytes of data.
64 bytes from 10.1.3.1: icmp_seq=1 ttl=64 time=0.040 ms
^[[A^C
--- 10.1.3.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
root@server4:~# ping 10.1.2.1
PING 10.1.2.1 (10.1.2.1) 56(84) bytes of data.
64 bytes from 10.1.2.1: icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from 10.1.2.1: icmp_seq=2 ttl=64 time=0.039 ms
^C
--- 10.1.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.039/0.053/0.067/0.014 ms
睡不著就幫題主解答一下吧
首先題主使用三層交換機 無可厚非是可以通的。而當題主使用no ip routing關閉交換機的路由功能以後,r2和r3就不能通信了。當題主再把三層交換機換成傻瓜交換機的時候,r2和r3一定是又可以通信的,接下來我對通信的方式進行一下解釋。首先我們來討論下不同情況下網路設備的通訊情況(以下僅僅針對乙太網)假設一台主機A要與另一台主機B通信
第一種情況:源ip地址與目的ip地址處於同一網段,此時主機A會發送arp廣播包來查詢主機B的mac地址,得到回復後主機A就有了源/目的主機的ip和mac地址,通過這四個地址封裝以太幀進行通信。
第二種情況:倆ip地址不處於同一網段,但主機A配置了網關,此時主機A會發送arp 廣播來請求網關mac地址,得到回復後主機A會使用本地ip和mac地址,B的ip地址和網關的mac地址這四個地址封裝以太幀,這個幀會被發給主機A的網關設備,通過網關進行轉發。
第三種情況,倆ip地址不處於同一個網段,主機A也沒有配置網關,此時雖然主機A知道B和自己不處於同一個網段,但他依然會發一個arp廣播包來請求B的mac地址。如果此時與主機A處於同一個網段的某台設備C上有去往設備B的路由,則C會響應該arp請求!沒錯!會響應!C會把自己的mac地址發給A ,A通過本地mac和ip地址,B的ip地址和C的mac地址這四個地址生成以太幀,並將這個幀發給C,由C轉交給B。
第四種情況,主機A上開啟了路由轉發功能。此時當主機A需要和B通信的時候,A會去路由表裡找去往B的路由,如果找到了就按路由表發出去,如果找不到,就會將這個包丟棄!
好了總算把4種情況講完了,咱們現在來看題主的問題。
題主首先配置了r1r2r3 ,按照題主圖裡的配置我們來看到底發生了啥
首先是題主的r2路由器10.1.2.1得到命令去10.1.3.1,r2一看,我次熬和我不是一個網段啊,我次熬我沒有路由功能啊(no ip routing),我次熬我也沒配網關啊,那我直接發個arp包來請求10.1.3.1的mac地址吧,看看和我同網段的設備有沒有知道的,於是r1收到了這個arp請求。
r1收到之後一看,我雖然能到10.1.3.1(直連)但是我沒有路由表啊(no IP routing),也就不能進行路由轉發啊,所以我不能響應這個arp請求。我還是個交換機啊,我就把這個arp包本身從其他相同vlan的埠發出去吧。(因為題主配了兩個SVI所以連接r2r3的兩個埠一定不屬於一個vlan吧?!)
r3:我什麼都沒收到,我什麼都不知道(r3是收不到這個arp請求的)好!接下來咱們把r1換成傻瓜交換機,只會轉發幀。 r1:來了個arp包,請求10.1.3.1的mac地址的……算了跟我沒關係,轉給別人就好……於是r3收到了這個arp廣播包r3:我次熬這不就是問我收到廣播包的這個埠的mac地址嗎?雖然我沒有路由表,但應答本埠的mac地址我還是可以的啊!那我就回答一下吧!此時r3回復了自己的mac地址
r2:咦 有人給我回復了,好了,4個地址都有了,發包!!
要麼是配了VLAN + ARPproxy,否則應該不能通的。
除非交換機/路由器出了故障或者設計錯誤。
不配路由,意味著自己不是網關功能,不是網關功能就不能發起ARP。既然主機1看到主機2不在同一網段,那麼主機1時不會發ARP的,既然路由器不會發ARP,那麼主機2就不可能收到ARP
但是遇到有ARP Proxy功能時就不一樣了。
你可以抓包看一下主機2收到的ARP的源MAC地址。
r2和r3不在同一網段,所以需要路由器或三層交換機轉發r2是10.1.2.1,r3是10.1.3.1。那麼r2訪問r3時發現,r3與自己不在同一網段,於是將數據包發送給網關。所以,你在r2上配置網關ip route 0.0.0.0 0.0.0.0 10.1.3.1,同時在r3上也配置網關ip route 0.0.0.0 0.0.0.0 10.1.2.1,讓彼此成為自己的網關,你會發現這樣就能通信了。
鏈路上是連通的,但是IP層在處理的時候是不關心鏈路的。
當IP在發送數據包時,只有當目標IP跟自己的IP在同一個子網的時候(根據子網掩碼)才會發ARP找到MAC地址進行直接傳遞,否則就轉發此數據包到默認網關,讓路由器處理了。
子網掩碼劃分
從交換機上來講, 跨網段要三層路由,並不是2層交換,可能題主意思是三層交換機
跨網段能ping通只有兩種可能
1.路由器互相寫了對方的到路由 下一跳也就是網關在核心交換機上.
2.或者核心交換機上有2個網段的地址並且和兩個路由器是通的,配了arp代理。核心交換機會對路由器1偽裝成路由器2和路由器1通訊,反之亦然,然後把接受到的數據中繼給另一台路由。
除非用的是openflow哈哈哈,或者樓主一個埠配了2個ip 沒寫清楚。
圖中能獲取到對方的正確的mac地址說明沒有開arp代理,原因是2台路由器的介面都在同一個vlan,
而路由器1在不知道路由器2的mac時,ping對方發出的廣播arp包中會有源mac地址,這個地址會被原封不動發給路由器2,路由器2自然會有路由器1的mac地址
我的理解:路由器1的代理ARP起了作用。關掉,則不通。未經實驗,兄台自證!
不應該是傻瓜能通 三層不能通嗎
r2到r3的路由是?
推薦閱讀:
※Wi-Fi 熱點解決方案 JooMe 是怎麼能支持幾十人同時上網的?
※4G LTE 是否會代替 Wi-Fi 乃至影響路由器的市場?
※寬頻運營商將用戶IP換成內網IP是否合理?
※計算機網路中的路由器與家裡用的路由器是一個概念么?
※怎樣解決電腦顯示wifi受限,或者網速很慢,電腦是win8.1的thinkpad T450s?