這篇文章講述了上網時數據包轉發的全過程,下面是電腦和網絡設備連接簡略圖:
以PC1 ping PC3為例講述數據包轉發過程:
1、當PC1 ping PC3時,發現它們的IP不在同一網段,PC1就將數據包發送至網關(1.1.1.1/24),這時需要知道網關的MAC地址,
PC1於是查找自身ARP緩存表,如果沒有則會發出ARP廣播包,包中的地址分別為:
源 IP : 1.1.1.2/24 源 MAC : a.a.a(PC1)
目的 IP : 1.1.1.1/24 目的 MAC : f.f.f
2、交換機SW1從e0/1接口收到數據包,解封后讀取數據包的MAC地址,將其寫入SW1的MAC地址表,發現該數據包是廣播包,加
上幀頭后向來源接口外的所有接口發送數據包,PC2接口收到該數據包發現其目的IP地址(1.1.1.1/24)與自身不符,丟棄該數據
包並不做回應。經過交換機后的源IP、源MAC、目的IP、目的MAC都不改變。
3、路由器R1接收到數據包,發現其MAC地址為廣播地址,接收該包,再解封,發現請求的目的IP地址為自己的IP(1.1.1.1/24),
需要向源地址進行ARP回復。讀取的數據包來源於1.1.1.1/24,源MAC地址為a.a.a。於是向PC1發送數據包,該包中地址為:
源 IP : 1.1.1.1/24 源 MAC : b.b.b(R1、e0/0)
目的 IP : 1.1.1.2/24 目的 MAC : a.a.a(PC1)
4、交換機SW1收到來自R1的數據包,查看源MAC地址為b.b.b,將改地址連同來源的接口號保存到MAC地址表。查看目的MAC地址
a.a.a,查看MAC地址表,找到與a.a.a的匹配項,向指定接口轉發該包,經該接口封裝后向PC1進行單播。PC1收到數據包,解
封后讀到源IP為1.1.1.1/24,源MAC地址為b.b.b,PC1得到網關的MAC地址,並保存到ARP緩存表。
5、PC1向PC3發出數據包,包中地址為:
源 IP : 1.1.1.2/24 源 MAC : a.a.a(PC1)
目的 IP : 2.2.2.2/24 目的 MAC : b.b.b(R1、e0/0)
該包進入SW1,根據目的MAC地址查詢MAC地址表后由上接口轉出向R1發送,到達接口s0/1,查到數據包MAC地址為自己MAC
地址,將包解封到IP層,查詢路由表:在路由表中查到最優匹配項,查找到下一跳接口IP地址,並發送出去;如果沒有最優匹配
項,則按照默認路由發送,沒有默認路由則丟棄數據包,並發送回應包,目的地址不可達。
查詢路由表后得到轉發接口為R1s0/1口,下一跳接口的IP地址為3.3.3.2/24,查詢ARP表中IP地址為3.3.3.2的接口的MAC地址,
得到其MAC地址d.d.d;如果表中無匹配項,則通過s0/1口發送ARP廣播,請求3.3.3.2的MAC地址。封裝好包后,從接口s0/1轉發
數據包,發出去的包MAC地址改變為:
源 IP : 1.1.1.2/24 源 MAC : c.c.c(R1、s0/1)
目的 IP : 2.2.2.2/24 目的 MAC : d.d.d(R2、s0/0)
6、路由器R2接口s0/0接收到數據包,檢驗MAC地址后接收並解封至IP層,查詢路由表,發現轉發接口為E0/0,且目的IP地址與接口
E0/0在同一網段內,查找ARP表中目的IP(2.2.2.2)的MAC地址,得到PC3的MAC地址e.e.e;如果沒有查到,則通過E0/0接口
發送ARP廣播包查詢IP地址為2.2.2.2的MAC地址。
7、E0/0接口將封裝好的數據包發送出去,報地址為:
源 IP : 1.1.1.2/24 源 MAC : g.g.g(R2、E0/0)
目的 IP : 2.2.2.2/24 目的 MAC : e.e.e(PC3)
經過SW2的上接口進入,根據其目的MAC地址查詢MAC地址表,如果找到匹配表項,則根據指定接口轉發出去;如果沒有找
到,則向除進接口外的所有接口轉發出去。
8、PC3接收到SW2發來的數據包,解封檢驗MAC地址為自己MAC地址e.e.e,接收數據包,包地址表為:
源 IP : 1.1.1.2/24 源 MAC : g.g.g(R2、E0/0)
目的 IP : 2.2.2.2/24 目的 MAC : e.e.e(PC3)
然后向源地址發送ICMP應答數據包,過程相似。
參考:https://blog.csdn.net/qq_38668258/article/details/84987881