iT邦幫忙

1

arp 在2台不同ROUTER 之間的用途和資料封裝結構

keep2 2010-05-31 15:00:4711676 瀏覽

想請問一下 在2台用serial連接的環境下

假如分別各接一台電腦 要互相PING到對方

(10.10.10.1)HostA---ROUTER_A---(serial)---ROUTER_B---HostB(192.168.1.2)

我想請問的是在ROUTER_A比對完路由表後送到interface時 還沒到router_b

在SERIAL上 他所要封裝的第二層mac address

我知道是透過arp的方式得知 對方router_b的interface的mac address

但是 我記得 arp是用ip位址去詢問對方的mac address
who is 192.168.1.2 tell me mac address

但是再ROUTER_A時 src and dest 的IP位址都不會改變
封裝分別還是HostA and HostB的ip address
他是用什麼方式去詢問到ROUTER_B 介面端的MAC ADDRESS ,
ARP的條件不是自己的IP ADDRESS 不是會不理會嗎 那為何又知道要封裝
ROUTER_B的INTERFACE的MAC ADDRESS呢?

2 個回答

13
cmwang
iT邦大師 1 級 ‧ 2010-05-31 16:21:56

1:Host A要送封包給Host B因為不是在同一subnet上的,實際上Host A送給Host B的封包是Dst IP是Host B,Dst MAC address是其default gateway的MAC address(反之亦然)...

2:Router A和Router B是以串列模式界接(i.e. PPP等等),既非Ethernet就沒有MAC address可言(在您的例子中Router A和Router B只知道透過某個interface可以通到某個subnet)....

3:Host A->Router A->Router B->Host B的封包在出Router B時Src MAC address是Router B的MAC address(反之亦然)....

看更多先前的回應...收起先前的回應...
keep2 iT邦新手 5 級 ‧ 2010-05-31 18:24:53 檢舉

你好 那假如2顆ROUTER中間是用ETHERNET的網路線去接的話

那封裝的DEST的MAC位址又該是如何取得呢

ARP需求的IP依然是HOST_B~該如何去執行呢 感謝

cmwang iT邦大師 1 級 ‧ 2010-06-01 11:15:08 檢舉

1:MAC address只對同一subnet有意義,不同subnet要怎麼連是gateway的事...

2:麻煩仔細想一下ARP的時機,Host A要連到Host B時其TCP/IP stack會先判斷是否在同一subnet內(在此這一點是不成立的),是的話就會送Target IP欄位是Dst IP的ARP request到Ethernet broadcast address,同一subnet內所有主機收到這個Ethernet broadcast時會比對Target IP,若是自己的IP才會產生ARP reply....

3:您當然可以用非正規方式在Subnet A上產生一個Target IP是Host B的ARP request,Subnet A上所有Host(包括Router A)都會收到這個Ethernet broadcast封包,但因為Target IP不是自己,並不會有進一步的動作....

4:Router A和Router B如何界接和Host A/B送出來的封包並沒有關係,Host A/B只曉得不是往同subnet的封包就往default gateway送就是了(i.e. Dst IP當然不變,Ethernet的Dst MAC address是gateway的,至於gateway的MAC address也當然是透過ARP來的)....

5:Router A/B如果是用Ethernet界接的就代表兩者都有interface在同一subnet下,彼此的MAC address也是透過ARP來的....

keep2 iT邦新手 5 級 ‧ 2010-06-01 23:39:26 檢舉

嗯嗯 大大 那你說的第5點~
可是那時的封裝過程 LAYER3的 SRC 和DEST的 IP位址不變
但是 LAYER 2的 MAC ADDRESS 位啥會得知是ROUTER_B 介面的MAC ADDRESS呢?
ARP 那時的動作 不是還是會用HOST_B的IP去詢問ROUTER_B嗎?
可是ROUTER_B不認得~所以應該不會理會?

cmwang iT邦大師 1 級 ‧ 2010-06-02 08:22:57 檢舉

Router A遇到要送到subnet B的封包時會送到Router B(i.e.往subnet B的next hop是Router B,至於要怎麼讓Router A/B知道怎麼連就要靠routing table了,不論是手動加進去,還是跑RIP/OSPF/BGP等routing protocol就看著辦了),既然知道要送到同一個subnet的Router B,當然就是透過ARP取得其MAC address後送出Dst IP維持Host B(不然就甭玩了)但Dst MAC address是Router B的封包了(反之亦然)....BTW,與其在網路上問鵝等路人甲,鵝建議您還是找本書參考參考或是用虛擬化軟體架個LAB試試比較清楚(以您的case跑4台VM互連同時跑tcpdump之類觀察一下就得了,找台有2-4GB RAM的機器就跑得動了,以現在的環境應該沒啥大不了的吧)....

hualeo iT邦新手 4 級 ‧ 2010-06-02 09:49:14 檢舉

To Keep2,
想像一下你(封包)要來我家(Host B)所需搭乘的交通工具,我不需要知道你是如何從你家裡(Host A)來到我家,只需知道你是從花蓮車站坐計程車到我家即可.
在Layer 2所有的設備及電腦只管next hop在哪裡就好了,而next hop指的不一定是最終目的地.所以封包經由IP(Layer 3)來到達最終目的地,在Layer 2來到達next hop.

8
ansonchen
iT邦新手 1 級 ‧ 2010-06-01 22:59:52

ARP封包也是Ethernet封包,但並不是IP封包,所以是不會過router的....

cmwang大大說明得很詳細, 也講到重點 keyword
ARP非路由 單純作 ARP mapping MAC
只在同一 subnet , 非同subnet則 SRC ARP 會改變為 B_Router 的 int src
OSI 7 Layer的 Layer 3層包涵 ARP / RARP封包, 但不作IP路由功能

我要發表回答

立即登入回答