TCP/IP网络协议学习笔记四--ICMP

ICMP--Internet控制报文协议

ICMP被用来传递差错报文以及其他需要注意的信息,被认为是IP层的一个组成部分,通常被IP层或更高层协议使用,用来把差错报文返回给用回进程。其格式如下:


不同类型的ICMP报文由报文中的类型字段和代码字段来共同决定,在对ICMP差错报文进行响应时,永远不会产生另一份ICMP差错报文。当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据包的前8个字节。接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据包首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。



也有一些情况是不会产生差错报文的:
1)ICMP差错报文
2)目的地址是广播地址或多播地址的IP数据包
3)作为链路层广播的数据包
4)不是IP分片的第一片
5)源地址不是单个主机的数据包

ICMP几种应用
1.ICMP地址掩码请求与应答---采用系统广播它的ICMP请求报文

2.ICMP时间戳请求与应答--返回值是自午夜开始计算的毫秒数,协调的统一时间(UTC格林尼治时间)

3.ICMP端口不可达差错


4.ICMP报文的4.4BSD处理



PING程序

Ping用来发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。如果不能Ping到某台主机,那么就不能Telnet或者FTP到那台主机,反过来,如果不能Telnet到某台主机,那么通常可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有多远。不过随着Internet安全意识的增强,一台主机的可达性可能不只取决于IP层是否可达,还取决于使用何种协议以及端口号。Ping程序的运行结果可能显示某台主机不可达,但我们可以用Telnet远程登录到该台主机的25号端口(服务器端口)。
Ping程序为我们提供了查看IP记录路由选项的机会。当数据包到达目的端时,IP地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。当ping程序收到回显应答时,它就打印出这份IP地址清单。但是,最大的问题是IP首部中只有有限的空间来存放IP地址。IP首部中的首部长度字段只有4bit,因此整个IP首部最长只能包括15个32bit长的字。由于IP首部固定长度为20字节,RR选项用去3个字节,这样只剩下37个字节来存放IP地址清单,们也就是说只能存放9个IP地址。当原始主机收到带有RR选项的ICMP回显应答时,它也要把它的入口IP地址放入清单中。
p i n g程序是对两个T C P / I P系统连通性进行测试的基本工具。它只利用 I C M P回显请求和回显应答报文,而不用经过传输层(T C P / U D P) 。P i n g服务器一般在内核中实现I C M P的功能。
一般发送第一个ping回显请求时,往返时间值会比较大,这是由于目的端的硬件地址不再ARP高速缓存的缘故。所以在发送第一个回显请求之前要发送一个ARP请求并接收ARP应答,这需要花费一定的时间。每个处理该数据报的路由器都把它的IP地址放入IP首部中的记录路由选项中,该选项大小为39个字节,可以存储9个IP地址。


Traceroute程序

该程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。上文的Ping程序具有这种功能,那为什么还要另外开发这么一个应用程序呢,主要原因在于:并不是所有的路由器都支持记录路由选项;记录路由一般是单向的选项;IP首部中留给选项的空间有限,不能存放当前大多数的路径。Traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期,一般定为255),每个处理数据报的路由器都需要把TTL的值减1或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的时延都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减1.TTL字段的目的是防止数据报在选路时无休止地在网络中流动,当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报。相反,路由器将该数据报丢弃,并给信源机发一份ICMP“超时”信息。开始时发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可达的报文。

IP选路



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章