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)报告转发分组出错