网络协议与分析课后习题

上传人:e****s 文档编号:163084023 上传时间:2022-10-20 格式:DOC 页数:25 大小:1.12MB
返回 下载 相关 举报
网络协议与分析课后习题_第1页
第1页 / 共25页
网络协议与分析课后习题_第2页
第2页 / 共25页
网络协议与分析课后习题_第3页
第3页 / 共25页
点击查看更多>>
资源描述
第一章1、 异构网络互连的问题是什么?试举例说明。举例来说,用户A可以通过接入使用以太网技术的校园网,与另外一个使用 点对点拨号上网的用户B之间进行邮件通信,同时还和一个坐在时速300公里的高铁上的使用WCDMA 进行3G上网的用户C进行QQ聊天。但问题的关键在于,这些采用不同技术的异构网络之间存在着很大差异:它们的信道访问方式和数据传送方式不同,其帧格式和物理地址形式也各不相同。2、请描述图1-2中,用户A和用户C进行QQ聊天似的数据转换和传输过程。用户A的主机将发送的邮件数据先封装到IP数据包中,在封装到以太帧中,发送到其接入的以太网中,并到达路由器R1。路由器R1从以太帧中提取IP数据包,根据目标IP地址选择合适的路径,再将其封装成SDH帧,转发到因特网主干网中,经过因特网主干网中若干路由器的选路和转发,到达路由器R3路由器R3从SDH帧中提取IP数据包,转换成WCDMA帧,发送到3G网络中,到达用户C的主机。用户C的主机提取出IP数据包,最总交付到上层的邮件应用程序,显示给用户C。3、TCP/IP协议族中的协议主要有哪些?请列举出协议的名称并查找其对应的最新RFC编号。768 UDP 用户数据报协议791 IP Internet协议792 ICMP 网际控制报文协议793 TCP 传输控制协议826 ARP 地址解析协议959 FTP 文件传输协议4、画出TCP/IP模型和OSI模型之间的层次对应关系,并举例TCP/IP模型中各层次上的协议。应用层:应用层对应OSI模型的上面三层。应用层是用户和网络的接口,TCP/IP简化了OSI的会话层和表示层,将其融合到了应用层,使得通信的层次减少,提高通信的效率。应用层包含了一些常用的、基于传输层的网络应用协议,如Telnet、DNS、DHCP、FTP、SMTP、POP3、 、SNMP、RIP、BGP等。传输层:传输层位于IP层之上,为两台主机上的应用程序提供端到端的通信服务。目前,应用最广泛的传输层协议是TCP和UDP。网络层:网络层又称为网际层、互联网层或IP层,是TCP/IP模型的关键部分。该层主要完成IP数据包的封装、传输、选路和转发,使其尽可能到达目的主机。该层包括的协议主要有IP、ARP、RARP、ICMP和IGMP,其中,IP协议是网络层的核心。网络接口层:网络接口层对应OSI模型中的物理层和数据链路层,只要底层网络技术和标准支持数据帧的发送和接收,就可以作为TCP/IP的网络接口,包括前面提到的各种局域网、城域网、广域网技术,如以太网、 拨号、3G网络等。5、例举出某一个具体网络通信过程中的多路复用和多路分解过程,并说明多路复用是指多个上层协议复用同一层底层协议数据包多路分解是指从底层协议数据包解封数据第二章1、 简述HDLC是什么?有什么应用?是什么:高级数据链路控制(High-Level Data Link Control, HDLC)协议是由ISO标准化组织制定的一个面向比特的同步数据链路层协议。它是由IBM的同步链路控制(Synchronous Data Link Control,SDLC)协议发展而来的。HDLC协议提供了面向连接和无连接两种服务;它既可以工作在点到点线路方式,也可以工作在点到多点线路方式。HDLC协议不依赖于任何一种字符编码集;数据报文可透明传输;既支持半双工,也支持全双工通信,有较高的数据链路传输效率;所有帧采用了流量控制和差错控制,传输可靠性高;传输控制与处理分离,具有较大的灵活性。应用: 广泛应用于数据通信领域、X.25网络、帧中继网络以及作为数据链路层协议连接服务器到广域网中。2、简述PPP协议在SLIP的基础上做了哪些改进?查找资料,说明PPPoE协议和PPP协议的关系,PPPoE的工作流程、帧结构及其应用?1)改进SLIP(串行线路因特网协议)协议是一种简单的帧封装方法,有许多缺陷,比如SLIP不支持IP地址分配;SLIP帧中无类型字段,无法同时传输多个上层协议;SLIP中没有校验字段,链路层上无法检测出由于线路噪声导致的差错。PPP协议克服了SLIP协议中的所有缺陷,它支持多种网络协议、多种数据压缩方法、多种身份认证方式、动态地址分配、差错控制和数据加密等。2) PPPoE全称为Point to Point Protocol over Ethernet(以太网上的点对点协议),简单地说,就是以太网和PPP结合后的协议,目前广泛应用在ADSL接入方式中,用于宽带拨号上网,使连接在以太网上的许多主机共享一条物理线路接入到因特网。3、CSMA/CD和CSMA/CA分别是什么?有什么区别?答:CSMA/CD载波侦听多路访问/冲突检测协议,是一种分布式介质访问控制协议。其原理如下:(1) 多个站点平等的接入到共享访问介质(多路访问)。(2) 每个站在发送帧之前,首先要监听访问介质,只有访问介质空闲时,才允许发送帧(载波监听)。(3) 如果两个以上的站同时监听到访问介质空闲并发送帧,则会产生冲突现象。因此要求每个站在发送数据的同时,仍然继续监听访问介质(冲突检测)。如果出现冲突,则发送站要发送干扰信号以使所有其它主机都能接收到冲突信号。然后每一个发送站随机延时一段时间后,再次重新发送帧。 和采用总线拓扑结构的以太网类似,无线局域网中的传输介质也是共享的,需要一定的介质访问控制协议来避免冲突。但是由于在无线传输中有“隐藏站”问题,无线局域网没有采用基于冲突检测的CSMA/CD技术,而是设计了一种避免冲突的CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance,载波侦听多路访问/冲突避免)协议。CSMA/CA工作原理如下:(1) 发送站在检测到介质空闲后,先发送一个请求发送帧(RTS),帧中存放了它需要占用介质的时间。(2) 接收站收到请求RTS后,发送准备发送帧(CTS),所有站点都会收到该帧,知道了介质会被占用一段时间。(3) 发送站发送数据帧。(4) 接收站确认所收到的数据。区别 CSMA/CD可以一边检测冲突,一边收发数据,一旦检测到冲突,立刻停止数据收发。CSMA/CA则是必须先检测是否有冲突,得到对端确认后,再发送数据,而不能同时进行,是根据无线网络的特点设计出来的。 两者的传输介质不同,CSMA/CD用于总线式以太网,而CSMA/CA则用于无线局域网。 检测方式不同,CSMA/CD通过电缆中电压的变化来检测,当数据发生碰撞时,电缆中的电压就会随着发生变化;而CSMA/CA采用能量检测(ED)、载波检测(CS)和能量载波混合检测三种检测信道空闲的方式。第三章1、试描述ARP协议软件架构,说明函数间的调用关系。ARP软件初始化是伴随着系统网络模块初始化进行的,网络初始化函数netstart()会调用arpinit()函数初始化ARP软件,同时会创建slowtimer(网络计时器)进程,该进程用于维护ARP缓存、IP分片队列和IP路由表信息。ARP软件中用于维护ARP缓存信息的函数为arptimer(),该函数通过定期遍历ARP缓存记录的状态释放超时的ARP缓存(通过arpdq()函数),或者重新发送ARP请求数据包(通过arpsend()函数)。当IP模块需要调用netwrite()函数通过网络接口发送或转发IP数据包时,需要调用arpfind()函数查询当前ARP缓存中是否存在对应数据包下一跳协议地址的物理地址,若查询失败,应该调用arpalloc()函数创建一个空的ARP缓存记录并通过arpsend()函数发送一个ARP请求报文。当网络接口收到一个ARP数据包时,网卡驱动会调用数据包复用函数ni_in(),该函数会调用ARP输入处理函数arp_in(),arp_in()函数会查询相关的ARP缓存记录(arpfind()函数),根据收到的ARP报文添加ARP缓存记录(arpadd()函数)或者发送获得解析地址的IP数据包(arpqsend()函数)。2、 理解ARP报文处理算法,分析其利弊。ARP是一个网络层协议,功能是将网络协议地址转换为物理地址。不妨设为IP转换为MAC地址。即ARP算法的前提是知道目标IP地址。ARP报文处理算法分为以下几个部分:1) A要发送数据报文时,会先在arp缓存中找。若存在对应项,直接提取即可。(这样可以节省时间)若arp缓存中没有该IP对应项,则将一个针对特定IP地址的ARP请求通过广播发送到本地网络。2) 本地网络的主机会接收到arp请求报文,会对IP地址进行匹配,若是自己的则把自己的mac作为数据发送arp回应报文给A。并在arp缓存中添加(更新)A的Ip的相关项,且在这个过程中若arp缓存中存在A相关的项,收到该请求报文的主机在简单的判断该报文的协议,地址类型,接口层定义等信息之后都会更新自己的arp缓存,更新跟A的IP相关的选项。(不会添加)即无论arp报文是不是发送给自己的,都更新相关项。这样可以防止突然的硬件地址的改变并节约时间。 另外若是不在本网,则路由器相关接口会相应。3)ARP缓存表采用了老化机制(即设置了生存时间TTL),在一段时间内(一般15到20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。利:在网络环境安全的情况下,是一种效率很高的处理方法。弊:ARP报文处理算法无条件的将一个看似合法的记录加入到缓冲区中,这种做法是十分危险的,网络攻击者可以构造看似合法的ARP请求报文,进行ARP欺骗攻击。3、简述主机发送IP数据包的过程。个人觉得1) 数据封装成IP数据包2) IP数据包在底层没法发送。应该是先运行arp协议得到硬件地址,然后发送到对应的硬件地址的主机。当IP模块需要调用netwrite()函数通过网络接口发送或转发IP数据包时,需要调用arpfind()函数查询当前ARP缓存中是否存在对应数据包下一跳协议地址的物理地址,若查询失败,应该调用arpalloc()函数创建一个空的ARP缓存记录并通过arpsend()函数发送一个ARP请求报文。(这一段很重要哦)可以分析下:即便是网络之间的传输也是要通过一次又一次点对点的发送,最终到达目的地。4、略5、简述ARP攻击的原理,并根据你对ARP攻击的理解提出一些改进方案ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。改进方案:1、不要把你的网络安全信任关系建立在IP基础上或MAC基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。2、设置静态的MAC-IP对应表,不要让主机刷新你设定好的转换表。3、除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。4、使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。5、使用硬件屏蔽主机。设置好你的路由,确保IP地址能到达合法的路径。(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。6、管理员定期用响应的IP包中获得一个rarp请求,然后检查ARP响应的真实性。通过以上的方法可以大大降低你受ARP攻击的可能。第四章1、 试描述IP软件结构,说明函数之间的调用关系。 图4-2显示了IP软件中各个函数之间的调用关系。为了方便IP与其他协议的交互,同时为了增强软件内部模块的耦合性,IP软件采用了独立IP进程的设计方式。从图4-2中我们可以看到,整个IP软件以IP进程ipproc为中心,ipproc由网络初始化函数netstart()创建。当一个IP数据包到达网络接口后,网络接口驱动会通过网络数据包解复用函数ni_in()调用IP数据包入口函数ip_in()。ip_in()函数会将传入的数据包放在系统内部的一个IP输入队列中。这个输入队列不仅仅存放从网络中传入的数据包,同时它还存放上层协议希望通过ipsend()函数发送的IP数据包。IP进程会周期性的调用ipgetp()函数从队列中获取待处理的数据包。获取到数据包以后,它会分别调用ipnet2h()和cksum()函数转换首部字节序以及计算检验和。此外,它还会通过ipdbc()函数和ipredirect()函数处理定向广播报文以及发送ICMP重定向报文。如果处理的IP数据包需要被发送或者转发,ipproc可能会调用iph2net()函数将数据包首部字节序转换为网络序。最后进程会调用ipputp()函数将数据包交付网络接口模块(注意这里的网络接口既有可能是物理接口,也有可能是环回接口)。图4-2 IP软件总体结构当IP进程将数据包交给ipputp()函数处理后,如图4-3,ipputp()函数根据数据包的去向将其交给物理网络接口发送,或者通过环回接口将数据包交付上层协议。在发送/转发过程中,数据包可能会被分片。此时,ipputp()函数会调用ipfsend()函数进行相关的分片处理,期间它们可能会调用ipfhcopy()将原来的数据包首部拷贝到分片数据包上。随后,IP软件会调用netwrite()函数将数据包交付网络接口发送。如果当前数据包需要从物理网络接口发送,netwrite()函数会调用相应的网络接口驱动发送数据包;若数据包需要交付上层协议,netwrite()函数会调用local_out()函数将数据包通过环回接口交付。由于此时需要将数据包交付更高层协议,因而IP软件需要对到达的分片数据包进行重组。在IP软件中,local_out()函数会调用ipress()函数处理收到的分片数据包。ipress()函数会通过ipfadd()函数将分片信息放入分片队列中,并调用ipfjoin()函数查看是否所有的分片都已经到达。若分片到齐,ipfjoin()函数会调用ipfcons()函数重组分片。最后,local_out()函数会将完整的IP数据包交付上层协议软件。图4-3 IP软件输出模块结构除了以上我们提到的函数之外,IP软件中还提供了一组用于访问路由表的接口函数。这组函数主要包括rtadd()函数、rtdel()函数、rtget()函数和rttimer()函数。它们分别用于添加、删除、获取以及定时刷新路由表。2、 根据IPV6首部设计其IP数据报首部数据结构1) IPV6的数据报首部为:structipcharip_verlen;/* IP version & header length (in longs)*/charip_tos;/* type of service*/shortip_len;/* total packet length (in octets)*/shortip_id;/* datagram id*/short ip_fragoff;/* fragment offset (in 8-octets)*/charip_ttl;/* time to live, in gateway hops*/charip_proto;/* IP protocol (see IPT_* above)*/shortip_cksum;/* header checksum */IPaddrip_src;/* IP address of source*/IPaddrip_dst;/* IP address of destination*/charip_data1;/* variable length data*/;版本(4 位)指明协议的版本对IPv6 该字段总是6。流量类型(8位)区分不同IPv6 数据报的类别或优先级。相当于IPv4的“区分服务”字段。流标号(20位):源端标记那些要求路由器提供服务质量支持的数据报属于同一个流的数据报的流标号相同。有效载荷长度(16位)指IPv6数据报除基本首部以外的字节数最大值是 64 KB。下一个首部(8位)指该数据报中的数据要交付给哪个高层协议相当于 IPv4 的协议字段。跳数限制(8位)相当于IPv4的TTL字段。源地址(128 位)是数据报的发送站的IP 地址。目的地址(128 位)是数据报的接收站的IP 地址。3、 简述IP分片重组算法。 在数据报长度超过传输网络的限制时,若允许分片,对数据报进行分片。同一个数据包的所有分片使用同一个标识。所有分片标识为分片。计算本数据包中的数据与起始端的偏移并存储。然后按照正常的数据发送方式发送这些包。 接收时,需等到一个数据报的所有分片到齐,当内存足够时,一次性交给内存进行重组。并提交给相关应用。4、 IP数据报首部中哪些字段在经过每一个路由器时会发生变化 ?IP数据报转发过程中,TTL会发生变化,这样会导致检验和变化;如果IP数据报产生分片,则IP数据报长度字段、标识字段、标志字段、分片偏移字段也会发生变化;如果IP数据报首部存在分片,则首部长度字段有可能发生变化。5、 设计字节序转换函数 由于网络字节序采用的就是大端字节序,所以都统一到大端字节序。其中不同位数的转换不同。16位转换宏如下:#ifBYTE_ORDER = LITTLE_ENDIAN#definehs2net(x) (unsigned) (x)8) &0xff) | (x) & 0xff)8)#definenet2hs(x) hs2net(x)#endif#ifBYTE_ORDER = BIG_ENDIAN#define hs2net(x) (x)#define net2hs(x) (x)#endif6、 不看7、 选路和转发的主要差异是什么?现在网络中普遍存在三层转发设备,请考虑三层转发的实现方式。 选路和转发的主要差异及三层转发的实现方式如下:选路的原理:当路由器收到一个需要它转发的IP数据报时,它会根据数据报中的目的IP地址搜索路由表,找到相关的路由表项,并根据路由中的三元组将数据报从相关的出接口转发。而路由表的维护是由专门的路由选择协议来进行的,IP层只需要在转发数据时搜索路由表即可。转发的原理:交换机接收到源主机发送的数据帧后,在MAC地址表中查找数据帧中的目的MAC地址。如果找到,就将该数据帧发送到相应的端口;如果找不到,就向所有的端口发送。同时利用接收数据帧中的源MAC地址来建立MAC地址表。选路和转发的区别主要是,选路在IP层,根据目的IP地址找到出接口;转发在数据链路层,根据MAC地址对数据进行转发。另外,转发表和路由表不同,转发表中的一行包括从网络号到发出接口的映射和一些MAC信息,而路由表是由路由选择算法建立的一个表,它通常包含从网络号到下一跳IP地址的映射,转发表可以由特殊的硬件来实现,而路由表很少这样。为了实现三层交换技术,交换机将维护一张至少包括“目的IP地址,下一跳MAC地址”在内的硬件转发表。当交换机接收到数据时,根据报文中的“目的IP地址”查询硬件转发表,根据匹配结果进行相应的数据转发,并且采用硬件芯片或高速缓冲区支持,可以达到线速。在交换机刚启动完毕时,交换机就把设备的软件路由表下载到ASIC芯片上。在需要进行三层交换的报文到达交换机后,交换机首先会查询最长匹配硬件转发表,但由于MAC地址是未知的,无法同时下载,此时的硬件转发表是无效的,所以无法进行硬件数据转发。因此,交换机将利用CPU对数据进行软件路由转发,交换机在数据转发过程中获取下一跳IP地址和数据转发出口的MAC地址,然后会被自动下载到三层硬件转发表,此时包含了下一跳IP地址和数据转发出口MAC地址的硬件转发表项才真正生效。在这之后,发往相同目的IP网段的报文到达交换机都可以直接通过最长匹配硬件转发表进行硬件转发,而其他网段的数据转发则需要重复上述过程。8、 设计IP检验和计算函数 原理:1、(1)把IP数据包的校验和字段置为0;(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和;(3)把得到的结果存入校验和字段中。 在这里仅给出计算过程。9、 略10、 可以考虑以IP地址为标准,构造平衡树。 优点:查询速度可以增快。 缺点:占用存储,且建立和调整树都是需要时间的。不能随机访问。第五章1、 软件结构 图5-2描绘了ICMP软件中各个函数之间的调用关系。从图中我们可以看到,整个ICMP软件大概可以分为输入和输出两个部分。图5-2 ICMP软件结构软件输出部分以icmp()函数为中心。当数据包在网络层、传输层甚至ICMP输入处理中发现出错时都会调用这个函数发送一个ICMP差错报告。icmp()函数通过icerrok()函数判断发送差错报告的条件是否满足,通过icsetbuf()为报文申请一个缓冲区,通过icsersrc()函数设定报文的源地址信息,并通过icsetdata()函数填写报文数据部分。最后它将报文通过IP模块发送出去。当网络层收到一个发给自己的ICMP报文时,它会通过local_out()函数将报文通过环回接口交付给ICMP协议软件中的icmp_in()函数进行处理,该函数会调用icredirect()函数处理重定向报文。如果传入的ICMP报文有错,输入函数也会调用icmp()函数发送一个差错报告的。2、说明ICMP五种差错报告报文分别在哪些情况下使用。(1)终点不可达报文:当路由器不能为报文找到路由或者主机不能交付报文时,丢弃该报文并发送该类型报文给源主机;(2)源点抑制报文:当路由器或主机因拥塞而丢弃报文时,向源主机发送该类型报文;(3)超时报文:当路由器收到TTL为零的报文或目的主机在规定的时间内没有收到所有的分片报文时,向源主机发送该类型报文;(4)参数错误报文:当路由器或主机收到存在二义性或字段缺失的报文时,丢弃该报文并发送该类型报文;(5)改变路由报文:当路由器收到本应发往其他路由器的报文时,把该报文发送给正确的路由器,并发送该类型报文通知源主机更正路由,以帮助更新路由。3、简述PING程序的实现方式。大多数内核ICMP软件都支持对ECHO请求的应答,所以只需实现客户端功能即可。程序客户端的工作流程非常简单:程序首先构造一个ICMP Echo请求报文,填写基本首部,并将报文中的标识符字段设置为发送进程的进程号(这样可以在同一台主机上运行多个Ping程序),同时将序号字段初始化为0,随后还要在数据部分加上时间戳(另一种方法可以尝试使用IP的时间戳选项)。然后调用原始套接字接口发送请求报文。发送结束后程序会等待并试图接收来自远端主机的Echo回答报文,网络传输出现异常,中间路由器(或目的路由器)会向源端回复ICMP差错报告,程序会根据差错报告打印出错信息,否则程序将打印报文信息并估算往返时间。4、略5、当收到的报文时不可达报文时,设计报文处理流程及实现函数。本题主要考查对ICMP报文处理流程的掌握程度。该情况报文处理流程可概括为:当函数接收到终点不可达报文时,首先累计不可达报文统计变量(SNMP使用该MIB变量进行网络管理工作),然后从该报文中提取出相关信息(报文类型、引起差错的原因等),通过消息队列把这些信息交付应用层协议,应用层协议会根据ICMP报文反馈的信息进行进一步处理。6、了解时间戳请求报文的处理步骤,设计并实现时间戳请求与应答报文处理函数。本题主要考查对时间戳请求/应答报文的掌握程度,使学生在全面理解的基础上提高独立设计该函数的能力。实现时间戳请求/应答处理函数的流程可概括为:(1)若该函数收到一个时间戳请求报文,则首先记录下收到该请求时其时钟所显示的通用时间,然后根据请求报文构造时间戳应答报文,将时间戳请求中的原始时间戳字段复制到应答报文中的原始时间戳字段,并填入接受时间戳,在应答报文发送离开时填入当前的通用时间,最后交由IP封装并发送;(2)若该函数收到一时间应答报文,则首先记录下收到该应答报文时所显示的通用时间T,然后提取出报文中的原始时间戳、接受时间戳、发送时间戳,计算可得:Time_S =接受时间戳-原始时间戳;Time_R = T-发送时间戳。返回Time_S + Time_R即可。第六章1、 软件结构 图6-2描绘了IGMP软件中各个函数之间的调用关系。从图中我们可以看到,IGMP软件大致分成三个部分:一组负责处理或发送IGMP报文的函数,一组用于维护主机群表的函数和一套通过TCP定时器完成定时发送的机制。图6-2 IGMP软件结构主机端IGMP的输入处理和输出处理非常简单:应用进程会调用igmp()函数发送一个IGMP成员关系报告,该函数直接通过IP模块将数据包发送出去。若IP层收到一个IGMP报文则会将其上送给协议软件的igmp_in()函数,igmp_in()函数会根据IGMP报文类型选择合适的操作。若主机需要回复一个IGMP成员关系报告时igmp_in()函数会调用igmp_settimers()函数启动一个定时事件。软件中用于维护定时事件的是igmp_update进程,这个进程在网络初始化函数netstart()初始化主机群表时(hginit()函数)被创建。当IGMP软件需要启动定时事件时,他会调用TCP的定时器接口tmset()函数启动一个定时器。当定时器到期后,TCP定时器进程tcptimer会通过消息通道发送一个定时消息,igmp_update进程会监听、获取并处理该消息(处理消息的方式即发送等待发送的成员关系报告)。IGMP软件中还需要提供一套用于维护主机群表项的接口,其中主要包括hglookup()函数、hgjoin()函数和hgleave()函数。他们分别用于在主机群表中查找特定的表项以及处理应用进程加入/离开某个主机群的请求。hgjoin()函数需要调用hgadd()函数在主机群表中加入一条记录。此外,在添加/删除主机群表项时需要通过hgarpadd()和hgarpdel()函数在ARP缓存中添加/删除特定组地址的ARP映射。从图中我们可以看到,无论是加入还是删除一条表项都需要通过hglookup()函数遍历主机群表。此外,当igmp_in()函数处理收到的IGMP报文时也可能会查询相关的主机群表。2、 为什么没有必要让IGMP报文在本地网络以外传送。IGMP是路由器和内部子网之间维护组成员关系的一个协议,IGMP报文只需要在本地子网内传送即可。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、 主机群表的遍历算法怎么实现的,能进一步实现改进和优化吗? P1218、 略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软件大体分成两个部分:输入处理和输出处理。图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,在大型网络中收敛时间需要几分钟5)RIP没有网络延迟和链路开销的概念,路由选路基于跳数。拥有较少跳数的路由总是被选为最佳路由即使较长的路径有低的延迟和开销6)RIP没有区域的概念,不能在任意比特位进行路由汇总3、 阅读代码回代RIP中存在的定时器种类以及它们的作用。4个定时器:更新定时器、无效定时器、保持定时器、刷新定时器更新定时器用于每30秒发送路由更新报文。无效定时器用于路由信息失效前的180秒的计时,每次收到路由信息的更新信息就将该计数器复位。刷新定时器和保持定时器同时用于将失效的路由信息删除前的计时:在保持定时器的时间内,失效的路由信息不能被接收到的新信息所更新;在刷新定时器计时器超时后,失效的路由信息被删除。4、 比较RIPv1、RIP v2和RIPng,分析三个版本的协议有哪些改进之处。RRIP v1、RIP v2、RIPng三个版本之间的比较如下表所示:RIP v1RIP v2RIPng使用的端口UDP 520UDP 520UDP 521通告地址通告类型广播广播/组播FF02:9组播网络支持IPv4IPv4IPv6支持VLSM不支持支持-最大跳数161616路由认证不支持支持明文和MD5认证不支持,认证功能已经集成在IPv6中下一跳地址不携带每个路由表项都携带在专门的路由表项中携带下一跳地址更新,超时,刷新,抑制计时器30,180,120,18030,180,120,18030,180,120,180每次更新的路由表项25不认证时25条认证时24条根据链路是MTU值三个版本协议之间的改进之处如下:l RIP v1:这是RIP协议的最初版本,它完成了RIP作为距离矢量路由选择协议的基本功能。RIP v1仅支持分类编址,且协议报文无法携带掩码信息。l RIP v2:在RIP v1的基础上增加了对无分类编址、组播路由更新、路由标记和协议报文验证等机制的支持,同时在报文格式中增加了子网掩码和下一跳地址字段。l RIPng:又称为下一代RIP协议(RIP next generation),它在RIP v2的基础上针对IPv6提出了一系列的扩展以适应下一代网络的需求。6、理解链路状态路由选择协议的运行方式。链路状态路由选择协议又称为最短路径优先协议,目的是映射互联网络的拓扑结构,每个链路状态路由器提供关于它邻居的拓扑结构的信息 链路状态路由选择协议基于Dijkstra的最短路径优先(SPF)算法,网络中的路由器并不向邻居传递“路由表项”,而是通告给邻居一些链路状态。链路状态路由选择协议使用称为代价的方法,而不是使用跳。其实现基本步骤如下:(1)每台路由器与它的邻居之间建立联系,这种联系称为邻接关系。(2)每台路由器向每个邻居发送链路状态通告LSA。对每台路由器链路都会生成一个LSA,LSA用于标识这条链路、链路状态、路由器接口到链路的代价度量值以及链路所连接的所有邻居。每个邻居在收到通告后将依次向它的邻居转发(泛洪)这些通告。(3)每台路由器要在数据库中保存一份它所收到的LSA的备份,如果所有路由器工作正常,那么它们的链路状态数据库应该相同。(4)完整的拓扑数据库,也叫做链路状态数据库,Dijkstra算法使用它对网络图进行计算,得出到每台路由器的最短路径;接着链路状态协议对链路状态数据库进行查询,找到每台路由器所连接的子网,并把这些信息输入到路由表中。现在常用于IP路由的链路状态路由协议有最短路径优先(OSPF)以及中间系统到中间系统(IS-IS)两种。第八章1、 结构和调用啥的 图8-2 UDP软件结构图8-2描绘了UDP软件中各个函数之间的调用关系。可以看出UDP的实现非常简单,同其他协议一样,IP模块调用local_out()将数据包从环回接口交给UDP输入函数udp_in(),udp_in()函数对UDP报文作过简单处理后将其通过系统数据通道交付UDP套接层或者内核应用进程。当应用进程需要发送UDP报文时,它们会调用udpsend()函数,最后函数再通过IP模块发送数据包。2、 UDP多路复用方案 代码题3、 UDP是否存在差错控制机制 UDP中的检验和与差错控制有关。此外,当UDP报文段找不到主机中的相应进程时会向发送方发送ICMP端口不可达报文。4、 简述Traceroute程序的实现方式。 Traceroute是UDP及ICMP应用的一个典型例子,用来跟踪IP数据包从一台主机到另一台主机所经过的路由。实现方式:程序首先发送一个UDP报文到目的主机,这个报文中的IP首部TTL字段为1,而UDP首部的目的端口号为一个不可能用到的值(一般大于30000)。此时程序会等待目的主机或中间路由器的回复,数据包经过第一跳之后到达一个路由器,由于TTL值的限制,此时路由器将发回一个ICMP错误消息,以说明这个数据包不能继续向前传送。然后traceroute程序又发出一个TTL为2的数据包,这个数据包经过两次跳跃后其TTL过期。这个过程不断重复,直到数据包到达目的主机。此过程的目的就是要记录下所有发出ICMP超时消息的消息源,据此就可以确定出数据包到达目的主机的路径了。当报文到达目的主机时,由于目的主机没有应用程序使用报文中的端口号,主机会向源端回复一个ICMP端口不可达报文,而此时程序可通过收到的端口不可达报文确定之前的数据包已经到达目的主机,即路由跟踪完成。5、 代码题 略第9章1、 软件结构及函数 TCP软件主要由三个进程组成:输入进程、输出进程和定时进程。由于定时进程功能比较简单,仅用来维护存在的TCP定时事件,因此我们通常可以把TCP分为输入和输出两部分。TCP输入部分各函数调用关系如图9-2:图9-2 TCP软件输入模块结构从图中可以看到,整个TCP输入部分以输入进程tcpinp()和输入状态机为中心。输入进程在网络初始化时由函数netstart()创建。当IP软件通过环回接口将数据包交给TCP软件时,TCP软件会调用tcp_in()函数将相关的TCP报文段放入系统内部的数据通道中。随后,输入进程会从中取出相应的报文段,并依次调用tcpcksum()函数、tcpnet2h()函数、tcpdemux()函数和tcpok()函数计算报文段的检验和,转换首部字节序,根据端口号对其进行解复用并判断报文段的合法性。此后,输入进程会通过函数指针数组tcpswitch根据连接的当前状态为报文段选择合适的状态处理函数。在报文段处理期间,TCP软件可能会通过TCP定时模块为当前报文段启动一个输出事件。图9-3 TCP软件输出模块结构图9-3描绘了TCP定时模块和输出模块的函数调用关系图。从图中我们可以看到,TCP的输出主要有两种情况:第一种情况是在输入处理过程中出错时,TCP软件会通过tcpreset()函数发送RST报文段终止连接。这种情况的处理比较简单,tcpreset()函数可以直接调用IP模块发送RST报文段。另一种情况下TCP输入模块会调用定时模块提供的tmset()函数注册一个定时输出事件。TCP定时进程tcptimer会维护已注册的事件,当一个定时事件到期后,进程tcptimer会通过系统内部的消息通道向TCP输出进程tcpout发送一个消息。tcpout收到消息后会通过函数指针数组tcposwitch根据当前状态选择合适的状态处理函数。tcppersist()函数、tcprexmt()函数、tcpxmit()函数和tcpidle()函数分别对应了TCP输出状态机中的四个状态处理函数。如果此时TCP软件需要发送一个报文段,输出状态机会调用tcpsend()函数,tcpsend()函数会调用tcpsndlen()函数和tcpnet2h()函数计算发送数据的长度并转换报文段的首部字节序。最后我们可以看到,进程tcptimer和tcpout都是在网络初始化时由函数netstart()创建的。图9-4 TCP控制模块结构图在TCP软件进行输入和输出处理时,除了处理基本数据,软件还要还要进行流量控制、差错控制和拥塞控制。图9-4描绘了这些机制在软件中是如何被各个模块调用的。从图中可以看到,TCP输入进程在处理一个报文段时会调用tcpopts()函数进行选项处理,tcpopts()函数又会调用tcpsmss()函数设定发送时的最大报文段长度。当报文段被交付给输入状态机后,TCP软件会通过tcpdata()函数将报文段中的数据放入输入缓冲区中,随后又会通过tcpdodat()函数处理缓冲区中的数据。同时,输入状态机还会调用tcpacked()函数生成一个ACK报文段。tcpacked()函数既有可能发送一个包含传输数据的ACK报文段,也有可能通过tcpackit()函数回复一个纯ACK报文段。此外tcpacked()函数还会通过tcprtt()函数计算往返延时并通过tcpostate()函数改变输出状态机的状态。此外,输入状态机还可能根据收到报文段中的确认号调用tcpswindow()函数设定发送窗口的大小。当上层软件调用tcpgetdata()函数获取接收缓冲区的数据时,tcpgetdata()函数会调用tcprwindow()函数重新计算接收窗口的大小。而在TCP输出状态机调用tcpsend()函数发送一个报文段时也会调用tcprwindow()函数获取当前窗口通告值。此外,tcpsend()函数还会调用tcprmss()函数计算当前可接收的最大报文段长度。2、 简述TCP输入状态机参考P178页的图9-6 TCP输入状态机总共那个有11个状态。下面是TCP从连接到终止过程的状态转移。1. 正常状态转换服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。 在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭 TCP 连接。假设仍由客户端发起主动关闭连接。客户端执行 CLOSE 原语,本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段,进入 CLOSE WAIT 状态;客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态,此时连接在一个方向上就断开了;服务器端应用得到通告后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;客户端收到 FIN 报文段并确认(也就是发一个ACK),进入 TIMED WAIT 状态,此时双方连接均已经断开,但 TCP 要等待一个 2 倍报文段最大生存时间 MSL ( Maximum Segment Lifetime ),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后, TCP 删除该连接记录,返回到初始状态( CLOSED )。服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录,返回到初始状态( CLOSED )。3、 总结TCP中存在的差错控制、拥塞控制和
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!