收藏 分销(赏)

TCPIP详解-卷一-协议-6.5ICMP端口不可达差错.docx

上传人:pc****0 文档编号:6539553 上传时间:2024-12-12 格式:DOCX 页数:4 大小:496.78KB
下载 相关 举报
TCPIP详解-卷一-协议-6.5ICMP端口不可达差错.docx_第1页
第1页 / 共4页
TCPIP详解-卷一-协议-6.5ICMP端口不可达差错.docx_第2页
第2页 / 共4页
TCPIP详解-卷一-协议-6.5ICMP端口不可达差错.docx_第3页
第3页 / 共4页
TCPIP详解-卷一-协议-6.5ICMP端口不可达差错.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、6.5ICMP端口不可达差错最后两小节我们来讨论ICMP查询报文地址掩码和时间戳查询及应答。现在来分析一种ICMP差错报文,即端口不可达报文,它是ICMP目的不可到达报文中的一种,以此来看一看ICMP差错报文中所附加的信息。使用UDP(见第11章)来查看它。UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。可以用TFTP来强制生成一个端口不可达报文(TFTP将在第15章描述)。对于TFTP服务器来说,UDP的公共端口号是69。但是大多数的TFTP客户程序允许用connect命令来指定一个不同的端口号。这里,我们就用它来指定8

2、888端口:指定主机名和端口号试图得到一个文件大约25秒后connect命令首先指定要连接的主机名及其端口号,接着用get命令来取文件。敲入get命令后,一份UDP数据报就发送到主机svr4上的8888端口。tcpdump命令引起的报文交换结果如图6-8所示。图6-8由TFTP产生的ICMP端口不可达差错在UDP数据报送到svr4之前,要先发送一份ARP请求来确定它的硬件地址(第1行)。接着返回ARP应答(第2行),然后才发送UDP数据报(第3行)(在tcpdump的输出中保留ARP请求和应答是为了提醒我们,这些报文交换可能在第一个IP数据报从一个主机发送到另一个主机之前是必需的。在本书以后的

3、章节中,如果这些报文与讨论的题目不相关,那么我们将省略它们)。一个ICMP端口不可达差错是立刻返回的(第4行)。但是,TFTP客户程序看上去似乎忽略了这个ICMP报文,而在5秒钟之后又发送了另一份UDP数据报(第5行)。在客户程序放弃之前重发了三次。注意,ICMP报文是在主机之间交换的,而不用目的端口号,而每个20字节的UDP数据报则是从一个特定端口(2924)发送到另一个特定端口(8888)。跟在每个UDP后面的数字20指的是UDP数据报中的数据长度。在这个例子中,20字节包括TFTP的2个字节的操作代码,9个字节以空字符结束的文件名temp.foo,以及9个字节以空字符结束的字符串neta

4、scii(TFTP报文的详细格式参见图15-1)。如果用-e选项运行同样的例子,我们可以看到每个返回的ICMP端口不可达报文的完整长度。这里的长度为70字节,各字段分配如图6-9所示。IP数据报ICMP报文ICMP报文的数据部分产生差错的数据报IP首部UDP首部8字节20字节8字节20字节14字节以太网首部IP首部ICMP首部图6-9“UDP端口不可达”例子中返回的ICMP报文ICMP的一个规则是,ICMP差错报文(参见图6-3的最后一列)必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该IP首部后面的前8个字节。在我们的例子中,跟在IP首部后面的前8个字节包含UDP

5、的首部(见图11-2)。一个重要的事实是包含在UDP首部中的内容是源端口号和目的端口号。就是由于目的端口号(8888)才导致产生了ICMP端口不可达的差错报文。接收ICMP的系统可以根据源端口号(2924)来把差错报文与某个特定的用户进程相关联(在本例中是TFTP客户程序)。导致差错的数据报中的IP首部要被送回的原因是因为IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节(在本例中是UDP首部)。如果我们来查看TCP首部(图17-2),可以发现源端口和目的端口被包含在TCP首部的前8个字节中。ICMP不可达报文的一般格式如图6-10所示。类型(3)代码(015)检验和未用(必

6、须为0)IP首部(包括选项)+原始IP数据报中数据的前8字节8字节图6-10ICMP不可达报文在图6-3中,我们注意到有16种不同类型的ICMP不可达报文,代码分别从0到15。ICMP端口不可达差错代码是3。另外,尽管图6-10指出了在ICMP报文中的第二个32bit字必须为0,但是当代码为4时(“需要分片但设置了不分片比特”),路径MTU发现机制(2.9节)却允许路由器把外出接口的MTU填在这个32bit字的低16bit中。我们在11.6节中给出了一个这种差错的例子。尽管ICMP规则允许系统返回多于8个字节的产生差错的IP数据报中的数据,但是大多数从伯克利派生出来的系统只返回8个字节。Sol

7、aris2.2的ip_icmp_return_data_bytes选项默认条件下返回前64个字节(E.4节)。tcpdump时间系列在本书的后面章节中,我们还要以时间系列的格式给出tcpdump命令的输出,如图6-11所示。图6-11发送到无效端口的TFTP请求的时间系列时间随着向下而递增,在图左边的时间标记与tcpdump命令的输出是相同的(见图6-8)。位于图顶部的标记是通信双方的主机名和端口号。需要指出的是,随着页面向下的y坐标轴与真正的时间值不是成比例的。当出现一个有意义的时间段时,在本例中是每秒之间的重发,我们就在时间系列的两侧作上标记。当UDP或TCP数据正在被传送时,我们用粗线的

8、行来表示。当ICMP报文返回时,为什么TFTP客户程序还要继续重发请求呢?这是由于网络编程中的一个因素,即BSD系统不把从插口(socket)接收到的ICMP报文中的UDP数据通知用户进程,除非该进程已经发送了一个connect命令给该插口。标准的BSDTFTP客户程序并不发送connect命令,因此它永远也不会收到ICMP差错报文的通知。这里需要注意的另一点是TFTP客户程序所采用的不太好的超时重传算法。它只是假定5秒是足够的,因此每隔5秒就重传一次,总共需要25秒钟的时间。在后面我们将看到TCP有一个较好的超时重发算法。TFTP客户程序所采用的超时重传算法已被RFC所禁用。不过,在作者所在子网上的三个系统以及Solaris2.2仍然在使用它。AIX3.2.2采用一种指数退避方法来设置超时值,分别在0、5、15和35秒时重发报文,这正是所推荐的方法。我们将在第21章更详细地讨论超时问题。最后需要指出的是,ICMP报文是在发送UDP数据报3.5ms后返回的,这与第7章我们所看到的Ping应答的往返时间差不多。

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 网络/通信

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服