欢迎来到天天文库
浏览记录
ID:42205839
大小:200.74 KB
页数:3页
时间:2019-09-10
《《tcp_ip协议分析》魏刘宏11054126第三章p55》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.试描述ARP协议软件架构,说明函数间的调用关系。I枷ARP软件初始化是伴随着系统网络模块初始化进行的,网络初始化函数netstart()会调用arpinit()函数初始化ARP软件,同时会创建slowtimer(网络计时器)进程,该进程用于维护ARP缓存、IP分片队列和IP路由表信息。ARP软件中用于维护ARP缓存信息的函数为arptimerO,该函数通过定期遍历ARP缓存记录的状态释放超时的ARP缓存(通过a:rpdq()函数),或者重新发送ARP请求数据包(通过^rpsendO函数)。当IP模块需要调用netwriteO函数通过网络接口发送或转发IP数据包
2、时,需要调用arpfindO函数查询当前ARP缓存中是否存在对应数据包下一跳协议地址的物理地址,若查询失败,应该调用arpallocO函数创建—个空的ARP缓存记录并通过arpsend()函数发送一个ARP请求报文。当网络接口收到一个ARP数据包时,网卡驱动会调用数据包复用函数ni_in(),该函数会调用ARP输入处理函数arp_in(),arp_in()函数会查询相关的ARP缓存记录(arpfindO函数),根据收到的ARP报文添加ARP缓存记录(arpaddO函数)或者发送获得解析地址的工P数据包(arpqsendO函数)。2.理解ARP报文处理算法,分析其利
3、弊。ARP是一个网络层协议,功能是将网络协议地址转换为物理地址。不妨设为IP转换为MAC地址。即ARP算法的前提是知道目标IP地址。ARP报文处理算法分为以下几个部分:1)A要发送数据报文时,会先在arp缓存中找。若存在对应项,直接提取即可(这样可以节省时间)。若arp缓存中没有该IP对应项,则将一个针对特定IP地址的ARP请求通过广播发送到本地网络。2)本地网络的主机会接收到arp请求报文,会对IP地址进行匹配,若是自己的则把自己的mac作为数据发送arp回应报文给Ao并在arp缓存屮添加(更新)A的Ip的相关项,且在这个过程屮若arp缓存屮存在A相关的项,收到
4、该请求报文的主机在简单的判断该报文的协议,地址类型,接口层定义等信息之后都会更新自己的arp缓存,更新跟A的IP相关的选项。(不会添加)即无论arp报文是不是发送给自己的,都更新相关项。这样可以防止突然的硬件地址的改变并节约时间。另外若是不在本网,则路由器相关接口会相应。3)ARP缓存表采用了老化机制(即设置了生存时间TTL),在一段时间内(一般15到20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。利:在网络环境安全的情况下,是一种效率很高的处理方法。弊:ARP报文处理算法无条件的将-个看似合法的记录加入到缓冲区中
5、,这种做法是十分危险的,网络攻击者可以构造看似合法的ARP请求报文,进行ARP欺骗攻击。1.简述主机发送IP数据报的过程。当IP模块需要调用netwrite()函数通过网络接口发送或转发IP数据包时,需要调用arpfind()函数查询当前ARP缓存屮是否存在对应数据包下一跳协议地址的物理地址,若查询失败,应该调用arpa.lloc()函数创建一个空的ARP缓存记录并通过arpsendf)函数发送一个ARP请求报文。[returnSYSERR;[returnSYSERR;创建一个队列粋仃嗖发送的报文[交给卜
6、环杏看是何足广播帧,接]1处理足则川广播发送偏出I久列并川
7、陥二A图3-4火败Lnetwrite()函数的处理流程2.阅读arpalloc.c文件,理解ARP缓冲区的分配算法。arpalloc.c代码如下:/**在ARP缓冲区表中分配一个表项**/structarpentry*arpalloc()/*缓冲区表中所指的当前表项,这里采用的是循坏队列的数据结构,故需要记录当前表项所处的位置*/staticintaenext=0;structarpentry*pae;/*返回值*/inti;for(i=0;i8、AS_FREE)break;/*若有表项尚未使用,则直接跳出使用这个表项勺aenext=(aenext+1)%ARP.TSIZE;/*继续遍历*/}/*若寻找到了未使用的表项,则使用该表项,否则使用第一个表项*/pae=&arptable[aenext];aenext=(aenext+1)%ARP_TSIZE;/*指向下一个表项*//*若该表项尚未收到ARP应答报文且队列中尚存等待发送的报文,则销毁队列,然后返回新分配的表项,并设置状态为尚未收到ARP应答报文*/讦(pae->ae_state==AS_PENDING&&pae->ae_queue>=0)arpdq9、(pae)
8、AS_FREE)break;/*若有表项尚未使用,则直接跳出使用这个表项勺aenext=(aenext+1)%ARP.TSIZE;/*继续遍历*/}/*若寻找到了未使用的表项,则使用该表项,否则使用第一个表项*/pae=&arptable[aenext];aenext=(aenext+1)%ARP_TSIZE;/*指向下一个表项*//*若该表项尚未收到ARP应答报文且队列中尚存等待发送的报文,则销毁队列,然后返回新分配的表项,并设置状态为尚未收到ARP应答报文*/讦(pae->ae_state==AS_PENDING&&pae->ae_queue>=0)arpdq
9、(pae)
此文档下载收益归作者所有