子网内传送即可。
3、了解IGMP与其他IP组播模块是如何完成组播报文在IP网络中的传播的。
IGMP与其他IP组播模块共同完成组播报文在IP网络中的转发。
为了实现报文在IP网络中转发,除利用IGMP外还需要进行多播地址转换、多播路由选择、定时器等。
多播地址转换:当多播分组传送到最后的局域网上的路由器时,必须将32位的IP多播地址转换为局域网48位的多播地址,这样才能在局域网上进行多播。
多播路由选择:转发多播分组的路由器需要彼此交换两种信息。首先,这些路由器需要知道哪些网络包含给定多播组的成员。其次,这些路由器需要有足够的信息来计算到达每一个包含多播组成员的网络最短路径。这就需要多播路由选择协议和计算最短路径的算法。
定时器:在路由器端,IGMP首先要为每个端口维护一个查询定时器定时查询接口维护的各个组在其连接的网络中的成员关系。其次,要为每个主机群表维护一个表项生存周期定时器。
当一个主机有组播报文发送时,使用的是组播MAC地址,将报文发送给该组所有主机和与其直接相连的组播路由器,组播路由器收到后将组播MAC地址转换为组播IP地址,然后查询组播路由表,判断是否向前传送,如果要向前传送,根据相应的出口将报文传送给下一个网络中该组所有主机的组播路由器。当多播报文传送到最后的局域网上的路由器时,需将32位的IP多播地址转换为局域网48位的多播地址,局域网中含有该组的所有主机都可接收到此组播报文。
4、比较主机端的IGMP和路由器端的IGMP管理组成员的异同点。
最主要的差别:主机端负责通知本地子网中的路由器其加入某个多播组或离开某个多播组;路由器负责维护多播组中的成员列表。 所以在存储的信息(群组信息和组成员信息),定时器(看是否需要应答,看是否有人应答)等问题上存在差异。且路由器要比主机端多出一些功能。路由器端要实现以下功能:查询器的选择、维护各个接口下的主机群表项、与组播路由选择协议交互等;状态机的状态和影响状态转移的主要事件不同。
但是相同的是都使用状态机机制来实现对组成员的管理。
5、简述主机端IGMMP输入处理状态,以及影响状态转移的主要事件。 主机端状态机的三种状态: 1) 不是组成员状态 2) 延迟组成员状态 3) 空闲组成员状态 五种主要事件: 1) 加入一个组 2) 离开一个组
3) 收到一个查询报告
4) 收到一个成员关系报告 5) 定时器超时
详细解释如下:
不是组成员状态(Non-Member state):此时主机未加入接口维护的任何一个组。当协议软件初始化的时候,所有接口都处于这个状态。 延迟组成员状态(Delaying Member state):此时主机加入接口维护的一个组中,并启动了一个发送成员关系报告的定时器。
空闲组成员状态(Idle Member state):此时主机加入接口维护的一个组中,但是没有启动一个发送成员关系报告的定时器。
在IGMP协议状态机中,影响状态转移的主要事件有五种: 加入一个组:主机决定加入接口维护的某个组。此时接口会立刻发送一个IGMP成员关系报告报文,并在启动一个延迟响应计时器(根据RFC1112,此时应该在短时间内发送连续两个IGMP成员关系报告报文)后跃迁到延迟组成员状态。
离开一个组:主机决定离开接口维护的某个组。此时处于延迟组成员状态的接口会取消所有的延迟响应定时器并跃迁到不是组成员状态,而处于空闲组成员状态的接口则只需跃迁到不是组成员状态。
收到一个查询报告:主机从接口中收到了一个合法的IGMP查询报文。此时接口会启动一个延迟响应定时器并跃迁到延迟组成员状态。
收到一个成员关系报告:主机从接口中收到了一个合法的IGMP成员关系报告报文报文。此时接口会取消响应的延迟响应计时器并跃迁到空闲组成员状态。 定时器超时:延迟响应定时器超时。接口会发送一个IGMP成员关系报告报文并跃迁到空闲组成员状态。
6、IGMP的定时机制是如何实现的? P115
参考答案中:XINU操作系统中IGMP的实现是通过tmset()函数来设置的,最终是利用了TCP模块中的定时进程tcptimer来完成的,可以结合这个思路看一下相关代码。
7、主机群表的遍历算法怎么实现的,能进一步实现改进和优化吗? P121
8、略
9、IGMP目前的三个版本,即IGMP v1 ,IGMP v2,IGMP v3 之间有哪些改进?在路由器实现上有什么优化。
IGMP v1、IGMP v2、IGMP v3三个版本之间的改进与优化之处如下:
IGMP v1:主机可以加入组播组;没有离开信息(leave messages);路由器使用基于超时的机制去发现其成员不关注的组。
IGMP v2:该协议包含了离开信息,允许迅速向路由协议报告组成员的终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。
IGMP v3:与以上两个协议相比,该协议的主要改进为:允许主机指定要接收通信流量的主机对象。来自网络中其他主机的流量是被隔离的。 IGMP v3也支持主机阻止那些来自于非要求的主机发送的网络报文。
IGMP v3同路由器的交互过程与IGMP v2相同。但是在IGMP v1/v2中,主机只根据组地址来决定加入某个组并从任何一个源主机接收发给该组地址的组播流。而使用IGMP v3的主机通告该主机所希望加入的多播组,同时还通告该主机所希望接收的多播源的地址。主
机可以通过一个包括列表或一个排除列表来指明希望从哪些源主机接收多播流。同时IGMPv3的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这在多个多播源共用一个多播地址的网络环境中表现得尤其明显。
第七章
1、简述RIP软件的基本架构,以及其函数之间的相互调用关系。
图7-2描绘了RIP软件中各个函数之间的调用关系。从图中我们可以看到,RIP软件大体分成两个部分:输入处理和输出处理。
ripifsetripokripmetricripstartriprecvripcheckripreplripsendripaddnetstart创建rip创建ripoutUDP套接字UDP模块
图7-2 RIP软件结构
软件的输入部分以rip进程为中心,rip进程由网络初始化函数netstart()创建。它从创建一个UDP套接字并从中获取RIP报文,随后rip进程会调用ripcheck()函数检查报文首部的有效性。最后,它会根据传入数据包的类型调用合适的处理函数。riprepl()函数用于处理传入的RIP请求数据包。此时该函数可能会通过ripsend()函数发送一个带有完整路由表信息的RIP通告报文或者通过UDP模块发送一个针对特定目的网络的RIP通告报文。riprecv()函数用于处理传入的RIP通告报文,在处理报文中各个路由通告时它会调用ropok()函数检查路由信息结构的有效性。
软件的输出部分以输出进程ripout为中心,ripout进程由rip进程在必要时创建(这取决于是否需要当前路由器发送定时通告)。ripout函数会通过ripsend()函数发送通告报文,在发送通告报文期间ripsend()函数首先会调用ripifset()函数为每个接口创建一个接口输出控制结构,随后它会调用ripadd()函数将路由信息添加到RIP通告报文中。此时,ripadd()函数还要根据实际情况通过ripstart()函数创建一个空的RIP通告报文。同时,它还需要利用ripmetric()函数为各个路由信息计算相关的度量值。最后ripsend()函数会通过UDP模块发送构建好的RIP通告报文。
2、简述距离矢量路由选择协议的缺点及应对方法。
距离矢量路由协议有一个严重的缺点,缓慢的收敛时间过程会造成路由回路。 解决路由回环方法:水平分割,定义最大跳数,毒性逆转,触发更新 ,抑制时间。
RIP协议的缺点主要体现在大型网络中:
1)RIP的15跳限制,超过15跳的路由被认为不可达
2)RIP不能支持可变长子网掩码(VLSM),导致IP地址分配的低效率
3)周期性广播整个路由表,在低速链路及广域网云中应用将产生很大问题 4)收敛速度慢于OSPF,在大型网络中收敛时间需要几分钟