首页 > 代码库 > IP分组的交付和转发
IP分组的交付和转发
1 交付
网络层监视底层物理网络对分组的处理过程,定义为分组的交付。完成一个分组交付给最后终点的任务,需要使用两种不同的交付方法:直接交付和间接交付
1.1 直接交付
直接交付时,分组的终点是一台与交付者连接在同一个网络上的主机。直接交付发生在两种情况:一种是分组的源点和终点都在同一个物理网络。另一种是最后一个路由器与目的主机之间进行的交付。发送方通过提取终点的网络地址,然后与自己所连接的网络地址进行比较。
1.2 间接交付
如果目的主机与交付者不在同一个网络,分组需要间接地交付。间接交付时,分组经过一个又一个路由器,最后到达与终点连接在同一个网络上的路由器
2 转发
当IP作为无连接的协议时,转发的基础是IP数据报的目的地址。当IP作为面向连接的协议时,转发的基础是附加在IP数据报上的标记
2.1 基于目的地址的转发
一种传统的方法,要求主机或路由器有一张路由表才能进行转发。当主机有分组要进行发送,或路由器收到分组要进行转发时,搜索路由表获取到达最后终点的路由。然而,这种方法因为路由表的表项数量过多导致路由表的查找效率非常低。下面描述一些转发技术:
下一跳方法:可以减少路由表的内容。路由表中只保留下一跳的地址,而不是保留完整路由的信息
特定网络方法:路由表不是对连接在同一个物理网络上的每一台主机都设置一个表项,而只用一个表项来定义目的网络本身的地址。换言之,连接在同一个网络上的所有主机看成是一个表项
默认方法:主机的路由表不必把整个因特网所有的网络列出来,使用一个默认表项
无子网划分的转发:使用分类编址时,全球因特网中的绝大多数路由器没有涉及到子网划分,子网划分是在一个组织内部进行的。这样情况下,典型的转发模块使用三张表,每个单播类别A、B、C对应一张表。如果路由器支持多播,需要增加一张处理D类地址的表。每张路由表至少包括三列:目的网络的网络地址、下一跳地址和接口号
最简单的情况下,转发模块处理步骤:1.提取出分组的目的地址 2.目的地址的一个副本用来查找地址的类别,具体做法:地址的副本右移28位,得到一个0~15之间的4位数(0~7 A类 0111、8~11 B类 1011、12~13 C类 1101、14 D类 1110、15 E类 1111) 3.根据步骤2得到的结果和目的地址,可以用来提取目的网络地址 4.根据地址的类别和目的网络地址查找下一跳地址和输出端的接口号。如果没有发现匹配,使用默认的 5.ARP模块根据下一跳地址和接口号找出下一个路由器的物理地址,然后请求数据链路层把分组交付到下一跳
有子网划分的转发:固定长度子网划分的简化模块:1.模块提取分组的目的地址 2.如果目的地址与路由表任意一个特定主机表项相匹配,提取下一跳地址和接口号 3.通过目的地址和掩码提取子网地址 4.根据子网地址搜索路由表,获取下一跳地址和接口号。如果没有匹配,使用默认的 5.下一跳地址和接口号传送给ARP
IP分组的交付和转发