网络协议分析课后题答案
第五章
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 echorequest报文时,数据区填充的内容由具体实现指定。在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.从网络安全的角度看,使用知名端口号会不会存在安全风险
单看这种行为,不会存在风险。但是知名端口与一些知名应用相关,这些应用可能存在安全缺陷,比如协议本身有缺陷,或者实现有安全漏洞。因此,黑客攻击的第一步往往是实施端口扫描,为随后的攻击步骤奠定基础。