计算机网络第八版【例4-2】
【例4-2】图4-23中有三个子网通过两个路由器互连在一起。主机H1发送出一个分组,其目的地址是128.1.2.132。现在源主机是H1而目的主机是H2。试讨论分组怎样从源主机传送到目的主机。
【解】主机H1首先必须确定:目的主机是否连接在本网络上?如果是,那么问题很简单,就直接交付,根本不需要利用路由器;如果不是,就间接交付,把分组发送给连接在本网络上的路由器,以后要做的事情都由这个路由器来处理。
主机H1先把要发送的分组的目的地址和本网络N1的子网掩码按位进行AND运算,得出运算结果。如果运算结果等于本网络 N1的前缀,就表明目的主机连接在本网络上;否则,就必须把分组发送到路由器R1,由路由器R1完成后续的任务。
由于采用了CIDR记法,转发表中给出的都是网络前缀,而没有明显给出子网掩码。其实只要细心观察斜线后面的数字,就可知道相应的子网掩码。例如,/26 的子网掩码就是点分十进制的255.255.255.192。现在,要发送的分组的目的地址是128.1.2.132,本网络的掩码是26个1,后面有6个0。如图4-24(a)所示,按位.AND运算的结果是128.1.2.128,不等于本网络N1的前缀。这说明目的主机没有连接在本网络上。源主机H1必须把分组发送给路由器R1,让路由器R1根据其转发表来处理这个分组。
路由器R1的部分转发表已在图4-23右上方给出了。转发表中第1列就是“前缀匹配”,这是因为查找转发表的过程就是寻找前缀匹配的过程。
现在先检查路由器R1的转发表中的第1行。
源主机H1要发送的分组的目的地址是128.1.2.132。本网络128.1.2.192/26的前缀有26位,因此本网络的掩码是26个1,后面是6个0。目的地址和子网掩码按位.AND运算的结果是128.1.2.128/26(见图4-24(a))。很明显,AND运算结果与转发表第1行的前缀不匹配。
接着检查路由器R1的转发表中的第2行。运算结果是128.1.2.128/26,如图4-24(b)所示。这个结果和转发表第2行的前缀相匹配。因此按照转发表第2行指出的,在网络N2上进行分组的直接交付(通过路由器R1的接口1)。这时路由器R1调用ARP,解析出目的主机H2的MAC地址,再封装成链路层的帧,直接交付连接在本网络N2上的目的主机H2。
如果按照同样的方法,检查路由器R1的转发表中的第3行,不难得出不匹配的结果。
路由器分组转发的过程
- 判断目的主机是否连接在本网络上,如果在,就直接交付,如果不在就执行第2步,把分组发送到路由器R,由路由器R完成后续的任务。
- 检查转发表中是否有目的IP地址的特定主机路由,如果有,按特定主机路由转发,如果没有,就执行第3步
- 把要发送的分组的目的地址和转发表中网络的子网掩码逐行相与,结果和转发表中的某行前缀相匹配,按该行指出的接口进行转发,如果结果都不匹配,就执行第4步
- 看转发表中是否设置有默认路由,有的话就按照默认路由表转发,没有的话就执行第5步
- 向源主机报错
判断目的主机是否连接在本网络上的方法:把发送的分组的目的地址和本网络的子网掩码按位进行AND运算,得出运算结果。如果运算结果等于本网络的前缀,就表明目的主机连接在本网络上