主機PC1向主機PC2發個數據包,中間經過B路由器,請問源地址和源MAC是怎么變化的?
答:假設拓撲圖是樣子:PC1-----(B1-B2) -------PC2
B1和B2是路由器B上的兩個接口, PC1和PC2是PC,由主機PC1向主機PC2發送數據包,那么在主機PC1形成的數據包的目的IP就是PC2的IP,源IP就是主機PC1的IP地址,目標MAC地址就是B1的MAC地址,源MAC地址就是PC1的MAC地址。
轉發過程:假如是第一次通信PC1沒有PC2的ARP映射表
PC1在本網段廣播一個數據幀(目的MAC地址為:FFFF:FFFF:FFFF:FFFF)幀格式為:
源MAC地址(PC1) 源IP地址(PC1) FFFF:FFFF:FFFF:FFFF 目的IP地址(PC2)
由于PC2和PC1不在同一網段,路由器不轉發廣播幀。假設路由器B、C配置了到達PC2網段的路由。此時路由器給PC1回復一個應答數據包,告訴PC1自己的MAC地址就是PC1要通信的PC2主機的MAC地址。而此時PC1建立ARP映射表,將該MAC地址(即路由器的B1接口)與PC2的IP地址建立映射關系。實際上是路由器對其進行了“欺騙”。
其應答數據幀格式為:
源MAC地址(路由器B1) 源IP地址(PC2) 目的MAC地址(PC1) 目的IP地址(PC1)
而數據包在B1接口的時候其數據包的幀格式為:
源MAC地址(PC1) 源IP地址(PC1) FFFF:FFFF:FFFF:FFFF 目的IP地址(PC2)
對于路由器B同樣建立了自己的ARP映射表:將PC1的MAC地址與PC1的IP地址映射。
數據包在流出B2接口的時候其數據包的幀格式為:
源MAC地址(路由器B2) 源IP地址(PC1) FFFF:FFFF:FFFF:FFFF 目的IP地址(PC2)
PC2所在的網段各主機將自己的IP地址與數據包中的目的IP地址比對。若符合則將自己的MAC地址替換上廣播MAC地址,并回復該數據幀:
源MAC地址(PC2) 源IP地址(PC2) 目的MAC地址(路由器B2) 目的IP地址(PC1)
路由器收到該數據包的時候,由于已經建立了ARP映射表,一方面路由器將儲存在映射表中的對應關系調出來。將PC1的MAC地址覆蓋路由器B2接口的MAC地址。另一方面路由器更新ARP映射表,將PC2的MAC地址與PC2的IP地址映射。
此時流出路由器B1接口的數據包的幀格式為:
源MAC地址(PC2) 源IP地址(PC2) 目的MAC地址(PC1) 目的IP地址(PC1)
之后PC1收到該數據幀。通信建立。同時更新ARP映射表,將PC2的MAC地址與PC2的IP地址建立對應關系。此后每次通信時由于PC1要與PC2通信時。由于PC1已經建立了到PC2IP地址的ARP映射,所以下次要通信時直接從本地ARP調用。