网络层协议(2):ICMP,Ping,Traceroute
来源:互联网 发布:刷关注软件 编辑:程序博客网 时间:2024/05/16 23:45
ICMP:Internet控制报文协议
ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。
ICMP报文是在IP数据报内部被传输的,这幅图展示的是ICMP报文封装在IP数据报内部:
下面我们再来看看ICMP报文的具体格式:
ICMP报文有各种类型,不同类型由报文中的类型字段和代码字段共同决定。在这里,我们有一个限制,在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文(如果没有这样的限制,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止的循环)。在这里,我们将总结一份查询报文(ICMP时间戳请求与应答)和一份差错报文(ICMP端口不可达报文)。
ICMP时间戳请求允许系统向另一个系统查询当前时间。返回的建议值时自午夜开始计算的毫秒数,协调的统一时间,这种ICMP报文的好处就是它提供了毫秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。ICMP时间戳请求和应答报文格式如下:
请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段设成相同的值。
这里有一个简单程序(名为icmptime),给某个主机发送ICMP时间戳请求,打印出返回内容。它在我们的小互联网上运行结果如下:
sun %icmptime badiorig=83573336,recv=83573330,xmit=83573330,rtt=2msdifferernce =-6mssun %icmptime badiorig=83577987,recv=83577980,xmit=83577980,rtt=2msdifferernce =-7ms
程序中打印出ICMP报文中的三个时间错,发起时间戳(orig),接收时间戳(recv),以及发送时间戳(xmit)。我们可以计算出往返时间(rtt),它的值是收到应答时的时间值减去发送请求时的时间值。difference的值是按接收时间戳值减去发起时间值。
如果我们相信RTT的值,并且相信RTT的一半用于请求报文的传输,另一半用于应答的传输,那么为了使本机时钟与查询主机的时钟一致,本机时钟需要进行调整,调整值是difference减去RTT的一半。
现在来分析一种ICMP差错报文,即端口不可达报文,它是ICMP目的不可到达报文中的一种,以此来看ICMP差错报文中所附的信息,可以用UDP来查看它。
UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。但是值得注意的是,ICMP报文时在主机之间交换的,并未指明端口号。而每个20字节的UDP数据报则是从一个特定端口号(如2924)发送到另一个特定端口号(如8888)。
我们可以看看每个返回的ICMP端口不可达报文的完整长度。这里的长度为70字节,各字段分配如下图:
ICMP的一个规则是,ICMP差错报文必须包括生成该差错报文的数据报IP首部(就是导致差错产生的UDP数据报的IP首部),还必须包括跟在该IP首部后面的前8个字节。在我们的这个例子中,跟在IP首部后面的前8个字节包含UDP的首部。
还有一个重要的事实是包含在UDP首部中的内容是源端口号和目的端口号。由于目的端口号(8888)才导致产生ICMP端口不可达的差错报文。接收ICMP的系统可以根据源端口号(2924)来把差错报文与某个特定的用户进程联系起来。
导致差错的数据报中IP首部要被送回的原因是IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节,在这个例子中是UDP首部。如果我们查看TCP首部,可以发现源端口和目的端口被包也是被含在TCP首部的前8个字节中。
- 网络层协议(2):ICMP,Ping,Traceroute
- 【网络协议】ICMP协议、Ping、Traceroute
- 【网络协议】ICMP协议、Ping、Traceroute
- 网络协议档案之ICMP、Ping、Traceroute
- ICMP协议、Ping、Traceroute
- ICMP协议,ping和traceroute
- (4)-ICMP协议,ping和Traceroute
- ICMP协议应用--ping和traceroute
- ICMP协议,ping和Traceroute 单独介绍
- 第七篇:ICMP协议、Ping、Traceroute
- ICMP、Ping、Traceroute
- 6,7,8 ICMP协议,ping和Traceroute
- TCP/IP(4)-ICMP协议,ping和Traceroute
- TCP/IP(四)ICMP协议,ping和Traceroute
- TCP/IP(四)ICMP协议,ping和Traceroute
- TCP/IP学习笔记(4)-ICMP协议,ping和Traceroute
- 网络层协议-ICMP协议
- 二 网络层协议(三)ICMP协议
- 关于qt QSqlDatabase::database(connectionName) 和QNetworkAccessManager::post()导致卡死的情况
- perl decode_utf8
- Unity Resource Manager
- C语言实现UDP打洞
- linux和windows中的sql解决远程无法访问问题
- 网络层协议(2):ICMP,Ping,Traceroute
- Liunx课堂笔记
- Scanner拓展(随机50音图)
- 手机信息页面
- 数据处理
- 阶乘数列
- java中文数据存入mysql 时乱码
- 二维数组
- 多媒体-声音