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