




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 李 Q:459123240用TCP/IP进行网际互联习题解答 4.2 为不使用为不使用ARP的网络接口构思一份地址绑定软件设计草的网络接口构思一份地址绑定软件设计草图图解答: 通过直接映射进行转换,考虑proNET令牌环网络,它使用小整数表示物理地址,并且允许用户在把接口板安装到计算机中时自己选择硬件地址,对于这种网络硬件,使其地址转换易于进行的关键是,只要它的IP地址和物理地址可以自由选择,那么总可以让它们中的某些部分是相同的,一般的,分配IP地址的主机号部分为1,2,3等,然后在安装网络接口硬件时,选择与IP地址对应的物理地址。 例如,系统管理员为IP地址为19
2、2.5.48.3的计算机选择物理地3,因为192.5.48.3是个主机部分等于3的C类地址。对于类似proNET的网络,从IP地址计算出物理地址是很容易的,这种计算是从ID地址中取其主机部分,因为只需要几条机器指令,所以计算效率很高。由于映射可以在不引用外部数据的情况下完成,所以很易于维护。最后,不需要改变现在的分配或重新编译代码就可以在网络中添加新机器。 从概念上讲,选择一个使地址转换高效的编号方法就是选择一个函数f,f把IP地址映射到物理地址。设计人员也可以根据硬件选择一种物理地址编号方法。IP地址IA意味着计算PA=f(IA) 我们要f的计算高效,如果物理地址的集合受到限制,也有可以实现
3、其他高效的映射,例如,在诸如ATM的面向连接的网络上IP,就无法随意选择物理地址。在这种网络中,由一台或多台计算机(服务器)存储地址对,每个地址对中一个Internet地址和对应的物理地址。一般情况下,这样的服务器把地址对存储在主存中的一张表里,以加快搜索速度。在这种情况下,为了迅速转换地址,软件可以用传统的哈希函数搜索地址表。4.4 4.4 设想某网点决定对仅在给定的网络中惟一的地址设想某网点决定对仅在给定的网络中惟一的地址ARPARP(不用(不用ARPARP也可能实现地址绑定)。我们的范例程序能在与也可能实现地址绑定)。我们的范例程序能在与两个这种网络相连接的一个网关上正确地运行吗?为什么
4、?两个这种网络相连接的一个网关上正确地运行吗?为什么?解答: 不可以。 “仅在给定的网络中惟一的地址”意味着不同的网络地址不一定唯一(可以详细分析)。 4.8 4.8 因为任何设备都有可能响应一个因为任何设备都有可能响应一个ARPARP分组的广播,所以分组的广播,所以ARPARP容易上当受骗。通过增加判断以下的语句来修改范例:容易上当受骗。通过增加判断以下的语句来修改范例: (a a)两个或更多个设备响应了某个给定)两个或更多个设备响应了某个给定IPIP地址的请求分组。地址的请求分组。 (b b)一个设备接收到自己的)一个设备接收到自己的IPIP地址的地址的ARPARP绑定。绑定。 (c c)
5、一个设备响应了多个)一个设备响应了多个IPIP地址请求分组。地址请求分组。解答提示: 在arp_in函数中的修改方法:(a)有很多种方法,比如:分析判断多个设备的确认分组 的mark,从中选出正确的,比较复杂点;或者进行屏 蔽;.(b)直接屏蔽(c)直接屏蔽5.1 “0”5.1 “0”的反码有两个值,的反码有两个值,cksumcksum将返回哪一个?将返回哪一个? 解答: 注意cksum函数的返回值为short类型,sum为unsigned long 型,0的反码为32个1,强制转换为short类型后为16个1。5.3 5.3 考虑为所有发往考虑为所有发往IPIP的数据报使用一个单一的输入队列
6、的实的数据报使用一个单一的输入队列的实现方案。这种方案的主要缺点是什么?现方案。这种方案的主要缺点是什么?解答:1.一个网络接口由于大量数据造成的溢出将会影响所有其他接口。2.对伪网络接口的判断比较麻烦。3.优先级处理上比较死板,只能是先到先得。5.6 5.6 指出为什么在没有数据报等待被处理的情况下,指出为什么在没有数据报等待被处理的情况下,ipprocipproc也有可能做最后一次循环,提示:考虑也有可能做最后一次循环,提示:考虑IPIP进程和一个放置数进程和一个放置数据并向据并向IPIP发送报文的驱动程序之间的定时处理。发送报文的驱动程序之间的定时处理。解答: 当ipgetp选择了一个数
7、据报之后进行发送,若对方未成功接收而等待时间已超,则ipproc会再做一次循环。6.2 6.2 散列表元的数目决定了桶散列方案的有效性,因为它决散列表元的数目决定了桶散列方案的有效性,因为它决定了的平均长度。如果希望平均每个不多于定了的平均长度。如果希望平均每个不多于3 3个表项,那么个表项,那么要保存要保存10001000条需要多大的内存?条需要多大的内存?解答: 由题意算出散列表元的数目为1000/3334个 每个表元大小为4B,每个表项的大小为32B 所以需要的内存大小为32B*1000+4B*334=33336B6.3 6.3 如果过程如果过程rtdelrtdel调用调用rtfreer
8、tfree而不是使用宏而不是使用宏RTFREERTFREE,结果怎,结果怎 样?样?解答: 由rtfree函数定义: int rtfree(struct route *prt) if (!Route.ri_valid) return SYSERR; wait(Route.ri_mutex); RTFREE(prt); signal(Route.ri_mutex); return OK; 当rtdel调用rtfree函数后,可能会出现如下的死锁情况: wait(Route.ri_mutex) wait(Route.ri_mutex) Signal(Route.ri_mutex) Signal(R
9、oute.ri_mutex) 7.2 7.2 仔细查看仔细查看ipputpipputp和和ipfhcopyipfhcopy过程。会不会出现过程。会不会出现ipputpipputp将分将分片的最大有效长度估计得过小的情况?为什么?片的最大有效长度估计得过小的情况?为什么?v解答:vInt ipputp(unsigned ifn, IPaddr nh, struct ep *pep)vv struct netif *pni = &nififn;v struct ip *pip;v int hlen, maxdlen, tosend, offset, offindg;v if (pni-ni
10、_state = NIS_DOWN) /判断接口是否启用v freebuf(pep);v return SYSERR;v v pip = (struct ip *)pep-ep_data; /复制数据部分v if (pip-ip_len ni_mtu) /若数据报长度小于最大传输单元,则不用分片v pep-ep_nexthop = nh;v pip-ip_cksum = 0;v iph2net(pip);v pep-ep_order &= EPO_IP;v pip-ip_cksum = cksum(WORD *)pip, IP_HLEN(pip);v return netwrite(p
11、ni, pep, EP_HLEN+net2hs(pip-ip_len);v v/* else, we need to fragment it */v if (pip-ip_fragoff & IP_DF) /确定是否能够分片v IpFragFails+;v icmp(ICT_DESTUR, ICC_FNADF, pip-ip_src, pep, 0);v return OK;v v maxdlen = (pni-ni_mtu - IP_HLEN(pip) & 7; /确定可发送的最大数据量pni-ni_mtuv offset = 0; /上面的pni是网络接口单元最大传输量v
12、offindg = (pip-ip_fragoff & IP_FRAGOFF)ip_len - IP_HLEN(pip); /要发送数据的长度,注意这里是pip-len。v vwhile (tosend maxdlen) v if (ipfsend(pni,nh,pep,offset,maxdlen,offindg) != OK) /如果发送失败,丢弃v IpOutDiscards+; v freebuf(pep);v return SYSERR;v v IpFragCreates+; /否则,分片数+1v tosend -= maxdlen; /将发送数据的长度减去最大可发送数据量,
13、表示已经发送一个分片。v/新偏移量置为最大可发送数据量+当前偏移量,表示下一个分片的数据从这里开始voffset += maxdlen;v offindg += maxdlen; v v /接下来的代码,处理最后一个分片vIpFragOKs+; v IpFragCreates+; v hlen = ipfhcopy(pep, pep, offindg); /由于是最后一个分片,直接用offindg复制到原来v pip = (struct ip *)pep-ep_data; v /* slide the residual down */v memcpy(&pep-ep_datahlen,
14、 &pep-ep_dataIP_HLEN(pip)+offset, tosend);v /* keep MF, if this was a frag to start with */v pip-ip_fragoff = (pip-ip_fragoff & IP_MF)|(offindg3);v pip-ip_len = tosend + hlen;v pip-ip_cksum = 0;v iph2net(pip);v pep-ep_order &= EPO_IP;v pip-ip_cksum = cksum(WORD *)pip, hlen);v pep-ep_next
15、hop = nh;v return netwrite(pni, pep, EP_HLEN+net2hs(pip-ip_len);vv然后是发送一个数据报片函数:vInt ipfsend(struct netif *pni, IPaddr nexthop, struct ep *pep,v unsigned offset, unsigned maxdlen, unsigned offindg)vv struct ep *pepnew;v struct ip *pip, *pipnew;v int hlen, len;v pepnew = (struct ep *)getbuf(Npool); /
16、分配新缓冲区v if (pepnew = (struct ep *)SYSERR)v return SYSERR;v pepnew-ep_order = 0;v hlen = ipfhcopy(pepnew, pep, offindg); /* copy the headers */v pip = (struct ip *)pep-ep_data /复制数据;v pipnew = (struct ip *)pepnew-ep_data; /分配数据格式v pipnew-ip_fragoff = IP_MF | (offindg3);v pipnew-ip_len = len = maxdlen
17、 + hlen; /确定首部长v pipnew-ip_cksum = 0; v iph2net(pipnew);v pepnew-ep_order &= EPO_IP;v pipnew-ip_cksum = cksum(WORD *)pipnew, hlen);v vmemcpy(&pepnew-ep_datahlen,&pep-ep_dataIP_HLEN(pip)+offset, maxdlen); /复制数据v pepnew-ep_nexthop = nexthop;v return netwrite(pni, pepnew, EP_HLEN+len);vv该函数
18、其实和iputp类似。不多说了v然后是复制数据报首部函数 vInt ipfhcopy(struct ep *pepto, struct ep *pepfrom, unsigned offindg)vv struct ip *pipfrom = (struct ip *)pepfrom-ep_data;v unsigned i, maxhlen, olen, otype;v unsigned hlen = (IP_MINHLEN2); /最小IP数据报头部长度,转换成字节v if (offindg = 0) /第一个IP分片,所有的数据报头都拷贝过来,包括选项部分v memcpy(pepto,
19、pepfrom, EP_HLEN+IP_HLEN(pipfrom);v return IP_HLEN(pipfrom);v /* 以下说明不是第一个IP分片*/v memcpy(pepto, pepfrom, EP_HLEN+hlen); /先拷贝除IP选项外的报头,注意有EP_HLENv /* copy options */v /* 拷贝选项部分 */v maxhlen = IP_HLEN(pipfrom); /现在的报头,比如有IP选项了v i = hlen; /最小报头,没有IP选项v while (i ep_datai; /IP选项v olen = pepfrom-ep_data+i;
20、 /选项长度v if (otype & IPO_COPY) /该选项复制到所有数据报片中v memcpy(&pepto-ep_datahlen,&pepfrom-ep_datai-1, olen);v hlen += olen;v else if (otype = IPO_NOP | otype = IPO_EOOP) /选项表结束v pepto-ep_datahlen+ = otype;v olen = 1;v v i += olen-1;v if (otype = IPO_EOOP)v break;v v /* pad to a multiple of 4 octe
21、ts */v while (hlen % 4) /填充到4字节的整数倍v pepto-ep_datahlen+ = IPO_NOP;v return hlen;v 由于每个数据报片必须含有一个首部,因此一次可发送的最大数据量应该是mtu减去ip首部的长度,然后截断为最接近8的倍数。&7实现截短,而ipfhcopy函数大部分代码要考虑到IP选项的细节。据协议标准,有些选项只应当出现在第一个数据报片中,而其他一些应当出现在所有的数据报片中。所以有可能会出现ipputp将分片的最大有效长度估计得过小。7.9 7.9 每当一个数据报片到达时,就为这个数据报的寿命重置每当一个数据报片到达时,就为
22、这个数据报的寿命重置初始值,与在第一个数据报片到达进给整个数据报设置一个初始值,与在第一个数据报片到达进给整个数据报设置一个寿命字段相比,有什么优点及缺点?寿命字段相比,有什么优点及缺点?解答:优点:一般来说,分片的时间间隔不大,第一种方法使得分片丢失在短时间内被发现,使得资源利用率提高,发送方能过及早知道分组丢失情况,不容易和重发分组混淆。缺点:初始值不好设定,如果采用第二种方法,则初始值就是超时时延的一半.8.18.1考虑过程考虑过程icsetsrcicsetsrc,在什么情况下循环语句遍历,在什么情况下循环语句遍历了所有接口后,仍然找不到一个匹配接口?了所有接口后,仍然找不到一个匹配接口
23、?解答: 但执行代码的主机或路由器不是目的主机时候,会发生这种情况。可能的原因:1.IP分组在传输过程中产生错误。2.这是一个重定向报文。8.5 8.5 假设一个网关为某个含有子网的地址的目的站生成了一个假设一个网关为某个含有子网的地址的目的站生成了一个ICMP“ICMP“重定向重定向”报文(即报文(即 子网掩码子网掩码 延伸超过了地址中的网络延伸超过了地址中的网络部分)。它应该将此部分)。它应该将此“重定向重定向”报文作为报文作为“主机重定向主机重定向”,还,还是是“网络重定向网络重定向”?为什么?提示:参考?为什么?提示:参考RFC1812RFC1812。解答: 主机重定向 网关必须检查新
24、路由,以决定这是一条指定主机的路由还是一条指定网络的路由。为了做到这一点,它检查与此路由相关联的子网掩码,如果掩码覆盖掉的不仅仅是网络部分,则ipredirct说明这个报文是一个“主机重定向”,否则它说明此报文为“网络重定向”举例说明。10.7 10.7 一个服务器系统能同时使用多少个一个服务器系统能同时使用多少个UDPUDP端口?一个典型的端口?一个典型的客户工作站又使用多少个?客户工作站又使用多少个? 解答:可以使用netstat anb查看UDP端口使用情况1.一台服务器,开启DNS服务,正常负载情况下,UDP端口占用不超过1000个。2.一台客户机,开启QQ(2个),迅雷(在进行上传),360浏览器,和其他小的网络应用程序,UDP端口使用310个。 能同时使用多少个,基本上受服务器能力所限制!10.810.8在我们的例程代码中,多路分解时试用了线性查找法来找在我们的例程代码中,多路分解时试用了线性查找法来找一个一个UDPUDP端口。涉及一个可以减少查找时间的散列查找方案。端口。涉及一个可以减少查找时间的散列查找方案。你的方案是不是有时反而会增加查找时间?你的方案是不是有时反
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC TS 62600-101:2024 EN Marine energy - Wave,tidal and other water current converters - Part 101: Wave energy resource assessment and characterization
- 2025-2030年中国隔振器市场供需现状规划分析报告
- 2025-2030年中国防脱发市场运行状况及前景趋势分析报告
- 2025-2030年中国镍锌电池市场竞争格局及发展趋势分析报告
- 2025-2030年中国车库门市场运营状况及发展趋势分析报告
- 2025-2030年中国贵金属冶炼市场运营状况规划分析报告
- 2025-2030年中国蜂胶市场运行现状及投资战略研究报告
- 2025-2030年中国药酒市场发展现状与投资规划研究报告
- 2025-2030年中国胡萝卜素行业运营状况及投资前景预测报告
- 2025-2030年中国耐火型电缆产业十三五规划及发展趋势预测报告
- 小学科学新课标科学课程标准解读
- DeepSeek科普课件深度解析
- 2024广西公务员考试及答案(笔试、申论A、B类、行测)4套 真题
- 2024年山东省济南市中考英语试题卷(含答案解析)
- 2022年版初中物理课程标准解读-课件
- 语文七年级下字帖打印版
- 自然辩证法概论(新)
- 幼儿园一日活动流程表
- 最后一分钟安全检查
- 散装水泥罐体标准资料
- 原发性肝癌临床路径最新版
评论
0/150
提交评论