1. 背景:
在復習計算機通信相關的知識的時候脏榆,有遇到一個問題:網(wǎng)絡中兩臺主機A和B使用IP地址進行通信時仁堪,數(shù)據(jù)包是怎么轉發(fā)的?
2. 具體的流程:
- 主機A打算通過IP地址向主機B發(fā)送信息,首先在主機A的網(wǎng)絡層中對數(shù)據(jù)進行組裝鸠匀,其中:
源IP地址:A的IP地址
目的IP地址:B的IP地址
在主機A的網(wǎng)絡層,首先判斷主機B的IP地址與主機A是否時屬于同一個字網(wǎng)逾柿,具體的做法是:主機A使用自己的字網(wǎng)掩碼與主機B的IP地址進行“與”運算缀棍,得到的結果跟主機A的網(wǎng)絡地址進行對比,如果相同則表示A和B屬于同一子網(wǎng)机错,否則屬于不同的字網(wǎng)爬范。
-
若A和B屬于同一子網(wǎng),如果A知道B的MAC地址弱匪,則在主機A的數(shù)據(jù)鏈路層把IP數(shù)據(jù)包封裝成“幀”的形式青瀑,其中:
源MAC地址:A的MAC地址
目的MAC地址:B的MAC地址
源IP地址:A的IP地址
目的IP地址:B的IP地址如果A不知道B的MAC地址,則使用ARP協(xié)議,發(fā)送一個數(shù)據(jù)包來獲取B的MAC地址斥难,獲得之后枝嘶,在使用同樣的方法來對IP數(shù)據(jù)包進行封裝。然后直接發(fā)給主機B哑诊,至此完成數(shù)據(jù)傳輸群扶。
若A和B屬于不同的子網(wǎng),A會使用ARP協(xié)議發(fā)送一個ARP數(shù)據(jù)包來獲取與A相連 接的路由器1的MAC地址镀裤,之后再在數(shù)據(jù)鏈路層對IP數(shù)據(jù)包進行封裝竞阐,其中:源MAC地址:A的MAC地址
目的MAC地址:路由器1的MAC地址
源IP地址:A的IP地址
目的IP地址:B的IP地址然后再把封裝好的數(shù)據(jù)幀發(fā)送給與A相連接的網(wǎng)關1.
-
路由器1收到來自內部主機A的數(shù)據(jù)幀后,知道主機A希望自己轉發(fā)這個數(shù)據(jù)幀淹禾,于是它就查找自己的路由表馁菜,路由器的路由表可以有兩種方式進行獲得:一是管理員手動添加,稱為靜態(tài)配置铃岔,另一種是通過路由器轉發(fā)的記錄自動獲得汪疮,稱為動態(tài)配置。在路由表中查到有與目的IP地址網(wǎng)絡地址相對應的下一個路由地址后毁习,這里假設為路由器2智嚷,就會對來自A的數(shù)據(jù)幀進行重組,重組后:
源MAC地址:路由器1的MAC地址
目的MAC地址:路由器2的MAC地址
源IP地址:A的IP地址
目的IP地址:B的IP地址
如果在路由器1的路由表中沒有找到與主機B的網(wǎng)絡地址相關的下一個路由地址纺且,就會把數(shù)據(jù)發(fā)送到路由表中的默認路由地址盏道,這是重組后的數(shù)據(jù)幀中:
源MAC地址:路由器1的MAC地址
目的MAC地址:默認路由的MAC地址
源IP地址:A的IP地址
目的IP地址:B的IP地址
- 路由器2在接收到路由器1發(fā)來的數(shù)據(jù)后,首先進行判斷目的IP地址即主機B的IP地址是不是自己的本地網(wǎng)絡內的载碌,如果是自己所在的子網(wǎng)猜嘱,則不在進行轉發(fā),將接收的數(shù)據(jù)進行重新封裝:
源MAC地址:路由器2的MAC地址
目的MAC地址:主機B的MAC地址
源IP地址:A的IP地址
目的IP地址:B的IP地址
其中主機B的MAC地址可以通過ARP協(xié)議獲得嫁艇。封裝過后再發(fā)給主機B朗伶,至此數(shù)據(jù)傳輸完成。如果不是步咪,所做的事情跟之前路由器1一樣论皆,對其重新進行封裝后再轉發(fā)。
- 接下來的每一跳中猾漫,經(jīng)過的路由器進行轉發(fā)的時候所做的工作就跟路由器2所做的工作一樣点晴,直到找到目的IP(主機B)所在的網(wǎng)絡。
3. 需要注意的事:
- 沿途所經(jīng)過的轉發(fā)的路由器它們并不知道從主機A到主機B完整的路由路徑悯周,它們只是知道自己應該轉發(fā)的下一個的路由地址粒督。
- 數(shù)據(jù)包在被轉發(fā)的過程中源、目的MAC地址會被修改禽翼,但是相關的IP地址不會被修改坠陈。
- 以上所講的路由器也可以理解為網(wǎng)關萨惑。
- 在UNIX下可以使用命令
traceroute + 網(wǎng)址
來對完整的路由信息進行跟蹤。