网络协议分析课后题答案
第五章
1.路由器是否应该优先处理ICMP报文?
不。ICMP报文封装在IP报文中,和其它IP报文一样在路由器的队列中进行排队,路由器则按照先入先出的规则处理报文。对路由器而言,与优先权有关的不是IP数据报中封装的报文类型,而是IP首部中的QoS字段。
2.如果携带ICMP报文的IP数据报出现差错,则不应产生新的ICMP报文。试解释其原因。如果这个数据报再出现差错呢?这样规定是防止无休止地循环发送差错报告报文。
3.如图5-16所示,数据从S发送到D,但是经过的路由器为:R1、R2、R3和R5。这是一条效率不高的路径。但R5不能发送ICMP重定向报文,将路由改为R1、R4和R5。为什么?
图5-16 ICMP不能重定向的例子
重定向报文仅能用于属于同一网络的主机和路由器之间。对于图中的例子,R5仅可能向D发送重定向报文,仅R1能向S发送重定向报文。
4.假设以太网上有1个主机H与5个路由器相连。设计1个携带IP数据报的物理帧(稍微有点不合法),使得主机H发送它时,引起主机H接收10个数据报。
利用ICMP重定向报文和回送请求报文。H发送一个ICMP回送请求报文,其目的IP地址设计为自身,但是目的物理地址设置为硬件广播地址。这样,所有路由器都会收到这个报文并转发(5个),而这些路由器发现主机使用了非优化路由,则向该主机发送重定向报文(5个)。
5.设计一个使用ICMP时戳请求和应答报文进行时钟同步的算法。
假设初始时戳为T i,接收时戳为T r,传送时戳是T t,发送方收到回应的时间是T h,则传输时延D t的估算方法如下:D t = (T h - T i) – (T t - T r)。其中(T h - T i)是整个往返的延时,而(T t - T r)是接收方的处理时间。
如果认为两个方向的通信时间大致相等,则单向传输时延应为D t /2,则发送方与接收方的时差应为T r–D t/2-T i。由此可以进行时钟同步。
6. ICMP时戳请求报文是否应包含一个指明报文何时发送的时戳?
不必。该机制中交互的对等端就是通信双方的ICMP协议模块,没有必要考虑由生成请求到发送到网络这段处理时间。(接收方之所以要加入接收时戳和传送时戳,是因为这两个时间的差值体现了ICMP本身的处理时间。)
7.在Windows系统中,也可以使用ping程序来查看数据报所经过的路径。但当路径长度超过9时,则不能使用ping程序。试解释原因。
ping –r可以实现记录路由的ping功能。记录路由最大只能记录9个路由器。
8.查阅资料,了解并使用图形化的traceroute工具。
最常见的VisualRoute,还有3d Traceroute,具体可到互联网搜索下载。
9.本章提到,使用ICMP echo request报文时,数据区填充的内容由具体实现指定。在Windows下尝试Ping命令,看看Windows给数据区填的内容是什么?
见下图。
10.为什么仅能向源站报告差错?
路由器收到IP数据报时,如果该数据报不包含记录路由、源路由选项,则不体现任何中间路由器信息,仅能体现源IP信息。因此,必须向源端报告差错。此外,路由器发现数据报发生差错时,无法判断究竟是在投递过程中的哪一步发生差错,因此,仅能向源站报告差错。
11.为什么路由器通告报文的发送周期是10分钟,而一条路由的存活时间是30分钟?
考虑到通告报文可能丢失,存活时间必须大于发送周期。
12.在ICMP目的站不可达报文中,有一类错误是“需要分片但DF置位(不能进行分片)”。基于此,请给出一个路径MTU的测量算法。
思想:发送IP数据报并强制该数据报不能分片,如果收到该类错误报告,说明该报文尺寸过大,则继续调小尺寸并继续发送该种IP数据报;如果未收到该类报告,说明尺寸偏小或正好,此时可以增大IP数据报的尺寸。
为了较快地逼近实际值,可以首先将第一个探测报文的尺寸设置为最大IP数据报长度,之后利用二分算法的思想调整探测报文尺寸。
13.你能否给出其它用于traceroute程序的判断是否到达目标的方法?
可以将探测报文改为UDP报文,并把其目的端口号设置为一个不常用的端口。这样,中间路由器返回的是ICMP超时报文,而目标返回的是ICMP端口不可达报文,由此可以判断到达了目的端。
14.阅读RFC1393,看看有没有其它实现traceroute的方法。
该方法的思想是对ICMP ECHO报文进行扩展,增加新选项以实现路径发现功能,具体阅读该标准既可。
第六章
1.分析传输层的作用,并与概述中所讨论的通用分层模型思想相比较。
加强和弥补IP层的服务。“加强”指提供可靠性,而TCP/IP的传输层则提供了不同的可靠性级别以适应不同的应用需求;弥补指提供端到端的服务,并通过不同的端口号区分不同的上层应用。
2.利用端口号而不是进程标识符来指定一台机器的目的进程,有什么优点?
进程标识符是动态变化的,每次应用程序重启都会对应不同的标识符,而端口号是相对固定的。网络通信中的客户端需要主动与服务器建立连接,其连接的目标必须是固定的,因此,必须用端口号来标识。
3.使用预分配的UDP端口号,有什么优点?
此题忽略,无意义。
4.能否将同一端口号分配给两个进程使用,设法通过实验证实你的结论?
不能。利用Socket编程,使用bind函数将同一端口绑定给两个应用(套接字),后启动的应用(进程)无法使用该套接字。
5.为什么UDP校验和独立于IP校验和?你是否反对这样一个协议:对包括UDP报文在内的整个IP数据报使用一个校验和?
IP仅针对首部计算校验和,UDP报文封装在IP数据报中作为数据报的数据区,因此单独计算校验和。这样整个IP数据报都可以被校验。
反对。IP和UDP属于不同的协议模块和层次,合并校验不利于区分错误来源。此外,在数据报投递过程中,对于目标不是自身的数据报,路由器则仅处理IP部分,不关注高层,分开计算时,当发现IP发生差错就可进行相应处理,合并计算校验和则不便于这种处理。在目的端,数据在接收过程中则是沿着协议栈逐层向上递交的,分开计算时当IP首部发生差错,数据报就不会递交给UDP模块,合并时则无法实现这一点。
6.接收端收到有差错的UDP报文时应如何处理?
发生差错有几种情况:若UDP目的端口号未开放,则返回ICMP端口不可达报文;若检验校验和时发生差错,则丢弃。
7.一个UDP数据报首部的十六进制表示为:0632 0045 001C E217。试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个数据报是从客户发送给服务器还是从服务器发送给客户的?使用UDP的这个服务器程序是什么?
题目有误,应改成0632 0035 001C E217。(不用改)
源端口:1568(0632),目的端口53(0035),报文长度28字节(001C),数据部分长度28-8=20字节。客户端发给服务器,服务器程序是DNS。
原题目是45,是69,TFTP。
8.假定一台主机连接在以太网上,它要发送总长度为8192字节的UDP报文。该报文最终被分成多少个IP数据报投递?
以太网MTU为1500字节。假设IP不使用选项,则其长度为20字节,所以预留给UDP 的长度为1480字节。所以最终的分片数为|8192/1480|+1=6,其中“||”标识取整。
9.如何判断远程机器上的某个UDP端口是否开放?
向该端口发送UDP报文,若收到ICMP端口不可达报文,则该端口未开放。
10.从网络安全的角度看,使用知名端口号会不会存在安全风险?