欢迎来到天天文库
浏览记录
ID:42194158
大小:161.16 KB
页数:8页
时间:2019-09-10
《《tcp_ip协议分析》魏刘宏11054126第五章p108》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1、试描述ICMP软件结构,说明函数之间的调用关系。图5-2描绘了ICMP软件中各个函数之间的调用关系。从图中我们可以看到,整个ICMP软件大概可以分为输入和输出两个部分。软件输出部分以icmp()函数为中心。当数据包在网络层、传输层甚至ICMP输入处理中发现岀错时都会调用这个函数发送一个ICMP差错报告。icmp()函数通过icerrok()函数判断发送差错报告的条件是否满足,通过icsetbuf()为报文屮请一个缓冲区,通过icsersrc()函数设定报文的源地址信息,并通过icsetdata()函数填写报
2、文数据部分。最后它将报文通过IP模块发送出去。当网络层收到一个发给自己的ICMP报文时,它会通过local_out()函数将报文通过环回接口交付给ICMP协议软件中的icmp_in()函数进行处理,该函数会调用icredirectO函数处理重定向报文。如果传入的ICMP报文有错,输入函数也会调用icmp()函数发送一个差错报告的。2、说明ICMP五种差错报告报文分别在哪些情况下使用。(1)终点不可达报文:当路由器不能为报文找到路由或者主机不能交付报文时,丢弃该报文并发送该类型报文给源主机;(2)源点抑制报文:当
3、路由器或主机因拥塞而丢弃报文吋,向源主机发送该类型报文;(3)超吋报文:当路由器收到TTL为零的报文或日的主机在规定的吋间内没有收到所有的分片报文时,向源主机发送该类型报文;(4)参数错误报文:当路由器或主机收到存在二义性或字段缺失的报文吋,丢弃该报文并发送该类型报文;(5)改变路由报文:当路由器收到本应发往其他路由器的报文吋,把该报文发送给正确的路由器,并发送该类型报文通知源主机更正路由,以帮助更新路由。3、简述PING程序的实现方式。大多数内核ICMP软件都支持对ECHO请求的应答,所以只需实现客户端功能即
4、可。程序客户端的工作流程非常简单:程序首先构造一个ICMPEcho请求报文,填写基本首部,并将报文中的标识符字段设置为发送进程的进程号(这样可以在同一台主机上运行多个Ping程序),同吋将序号字段初始化为0,随后还要在数据部分加上时间戳(另一种方法可以尝试使用IP的时间戳选项)。然后调用原始套接字接口发送请求报文。发送结束后程序会等待并试图接收来自远端主机的Echo回答报文,网络传输岀现异常,中间路由器(或冃的路由器)会向源端回复工CMP差错报告,程序会根据差错报告打印出错信息,否则程序将打卬报文信息并估算往返
5、时间。4、阅读icsetbuf.c和icsetdata.c文件,了解ICMP差错报告的生成细节。icsetbuf.c文件的源代码如下。*icsetbuf-为ICMP报文屮请一个缓冲区*icsetbuf()函数为ICMP报文分配缓冲区,设置了两个变量,其屮一个变量指出该报文是否是一个差错报告报文(或是一个信息请求);而另一个指出这个报文的类型是否是对上一个请求做出的应答。*该函数很直观,具体分四种情况:对绝大多数的应答,icsetbuf()函数重新利用抵达的请求报文占用的缓冲区(即返回由入口参数pal提供的地址)
6、;对于没有具体实现的报文类型,icsetbufO函数释放引起差错的报文,返回SYSERR;对含有大量数据的ICMP报文,icsetbufO函数为其分配一个大缓冲区;对其他不能利用原缓冲区的报文,icsetbufO函数为它们分配一个标准缓冲区。**/structep*icsetbuf(type,pal,pisresp,piserr)inttype;char*pal;/*l日的报文(如果有的话)*/Bool*pisresp,/*查询报文*/水piserr;/*差错报告报文*/{Structep*pep;/*正在处理
7、的以太网帧*/*pisresp=*piserr=FALSE;switch(type){caseICT_REDIRECT:/*重定向报文*/pep=(structep*)getbufi(Net.netpool);/*char*getbufi(poolid)申请小缓冲区*/讦(pep==NULL)retum(NULL);blkcopy(pep,pal,MAXNETBUF);/*函数原型为blkcopy(to,from,nbytes)*/pal=(char*)pep;*piserr=TRUE;break;caseIC
8、T_DESTUR:/*终点不可达报文*/caseICT_SRCQ:代源点抑制报文*/caseICT.TIMEX:/*超时报文*/caseICT_PARAMP:/*参数错误报文*/pep=(structep*)pal;*piserr=TRUE;break;caseICT_ECHORP:/*ECHO应答报文*/caseICTJNFORP:/*消息应答报文*/caseICT.MASKRP:/
此文档下载收益归作者所有