路由分组转发过程
IP層轉(zhuǎn)發(fā)分組的流程
如圖是一個路由表的簡單例子。有4個A類網(wǎng)絡通過3個路由器連接在一起。每一個網(wǎng)絡上都可能又成千上萬個主機??梢韵胂?#xff0c;若按查找目的主機號來 制作路由表,則所得出的路由表就會過于龐大。但若按主機所在的網(wǎng)絡地址來制作路由表,那么每一個路由器中的路由表就只包含4個項目。具體分組轉(zhuǎn)發(fā)算法如下
1)從數(shù)據(jù)報的首部提取目的站的ip地址D,得出目的網(wǎng)絡地址為N。
2)若N就是與此路由器直接相連的某個網(wǎng)絡地址,則這種交付為直接交付,即不需要再經(jīng)過其它的路由器。這時就直接通過該網(wǎng)絡將數(shù)據(jù)報交付給目的 站D(這里包括將目的主機地址D轉(zhuǎn)換為具體的硬件地址,將數(shù)據(jù)報封裝為MAC幀,再發(fā)送此幀);否則就是間接交付,執(zhí)行(3)。
3)若路由器表中有目的地址為D的特定主機路由,則將數(shù)據(jù)報傳送給路由表中所指明的下一跳路由器;否則,執(zhí)行(4)。
4)若路由表中有到達網(wǎng)絡N的路由,則將數(shù)據(jù)報傳送給路由表中所指明的下一跳路由器;否則,執(zhí)行(5)。
5)若路由表中有一個默認路由,則將數(shù)據(jù)報傳送給路由表中所指明的默認路由器;否則,執(zhí)行(6)。
6)報告轉(zhuǎn)發(fā)分組出錯。
使用子網(wǎng)掩碼的分組轉(zhuǎn)發(fā)過程
在不劃分子網(wǎng)的兩級ip地址下,從ip地址得出網(wǎng)絡地址是個很簡單的事。但在劃分子網(wǎng)的情況下,從ip卻不能唯一地得出網(wǎng)絡地址來,因為網(wǎng)絡地址取決與那個網(wǎng)絡所采用的子網(wǎng)掩碼,但數(shù)據(jù)報的首部并沒有提供子網(wǎng)掩碼的信息。因此分組轉(zhuǎn)發(fā)的算法也必須做相應的改動。
如下網(wǎng)絡拓撲圖。我們注意到,使用子網(wǎng)劃分后,路由表中的每行所包括的主要內(nèi)容是:目的網(wǎng)絡地址、子網(wǎng)掩碼和下一跳地址。
若主機H1要向某個主機發(fā)送一個分組。首先,主機H1應判斷是采用直接交付還是間接交付。H1采用的方法是:將分組的目的地址和自己的子網(wǎng)掩碼進行逐比特相“與”的運算。
若運算的結(jié)果等于H1的網(wǎng)絡地址,則說明目的主機與H1是連接在同一個子網(wǎng)上,因此可以直接交付而不需要找下一跳路由器來轉(zhuǎn)發(fā)。
但若“與”運算的結(jié)果不等于H1的網(wǎng)絡地址,則表明應采用間接交付,必須將該分組交給本子網(wǎng)上的一個路由器來進行轉(zhuǎn)發(fā)。
例如,現(xiàn)假定H1要發(fā)送分組給H2,即分組的目的ip是128.30.33.138。H1要做的操作是將本子網(wǎng)的子網(wǎng)掩碼 255.255.255.128與H2的ip做逐比特相與,得出128.30.33.128,不等于H1的網(wǎng)絡地址,這說明H2與H1不在同一子網(wǎng)上。因 此H1必須將分組交給子網(wǎng)上的默認路由器R1,由R1來轉(zhuǎn)發(fā)。
路由器R1先找到路由表中的第一行,看這一行的網(wǎng)絡地址和收到的分組的網(wǎng)絡地址是否匹配。因為并不知道收到的分組的網(wǎng)絡地址,因此只能試試看。 就是用這一行的子網(wǎng)掩碼和收到的分組的目的ip地址逐比特相與,結(jié)果也是128.30.33.128。如果這個數(shù)值和這一行給出的目的網(wǎng)絡地址一致,就說 明收到的分組是發(fā)送個本子網(wǎng)上的某個主機的。但現(xiàn)在比較的結(jié)果不一致。
接著,用同樣的方法繼續(xù)往下找第二行。這個結(jié)果和第二行的目的網(wǎng)絡地址匹配,說明這個網(wǎng)絡(子網(wǎng))就是收到的分組所要尋找的目的網(wǎng)絡。于是不需要再找下一個路由器進行間接交付了,R1將分組從接口1直接交付給主機H2。
這樣,我們得出在劃分子網(wǎng)的情況下,路由器轉(zhuǎn)發(fā)分組的算法:
1)從收到的數(shù)據(jù)報的首部提取目的ip地址D。
2)先判斷是否為直接交付。對路由器直接相連的網(wǎng)絡逐個進行檢查:用各網(wǎng)絡的子網(wǎng)掩碼和D逐比特相與,看結(jié)果是否和相應的網(wǎng)絡地址匹配。若匹 配,則將分組進行直接交付(需要將D轉(zhuǎn)換成物理地址,將數(shù)據(jù)報分裝成幀發(fā)送出去),轉(zhuǎn)發(fā)任務結(jié)束。否則就是間接交付,執(zhí)行(3)。
3)若路由表中又目的地址為D的特定主機路由,則將數(shù)據(jù)報傳送給路由表中所指明的下一跳路由器;否則,執(zhí)行(4)。
4)對路由表中的每一行(目的網(wǎng)絡地址,子網(wǎng)掩碼,下一跳地址),將其中的子網(wǎng)掩碼和D逐比特相與,其結(jié)果為N。若N與該行的網(wǎng)絡地址匹配,則將數(shù)據(jù)報傳送給該行指明的下一跳路由器;否則,執(zhí)行(5)。
5)若路由表中有一個默認路由,則將數(shù)據(jù)報傳送給路由表中所指明的默認路由器;否則,執(zhí)行(6)。
6)報告轉(zhuǎn)發(fā)分組出錯
轉(zhuǎn)載于:https://www.cnblogs.com/hnrainll/archive/2011/10/18/2216880.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 使用Joson的格式字符串在Socket
- 下一篇: 学习:多项式算法----FFT