<再看TCP/IP第一卷>关于网络层及协议细节---ICMP协议几个要注意的地方

 

在TCP/IP协议族中,ICMP协议是一个介于网络层和传输层中间的一个协议,许多材料都会认为ICMP是网络层的一个部分,可是ICMP协议的报头是被包裹在IP协议之中的,而UDP协议又能够被ICMP协议包装,因此不妨认为它是在一个所谓的“中间层”。网络

 

 

一.首先看一下ICMP报文的类型来归纳了解一下ICMP的主要功能:并发

 

 

当类型代码为0的时候,ICMP用于返回“不可达”差错;而当类型代码为5的时候,表示该ICMP报文表达“重定向”的操做。其他的类型代码皆能够和图中描述一一对应。less

 

下列图是ICMP不一样类型的报文的具体格式:工具

(1)ICMP时间戳请求和应答报文oop

 (2)ICMP不可达报文spa

(3)路由器答报文3d

 

(4)ICMP超时报文blog

 

二.有几种状况不会致使产生ICMP差错报文:路由

 

(1)ICMP差错报文(否则有可能会一直循环)io

(2)目的地址是广播地址或者多播地址的IP数据报

(3)做为链路层广播的数据报(ARP,RARP)

(4)不是IP分片的第一片

(5)源地址不是单个主机的数据报。源地址不能为零地址,loopback或者广播,多播地址。

 

三.ICMP报文是在主机之间交换的,不须要端口号

 

四.traceroute工具的实质:

 

首先发送一份TTL字段为1的IP数据给目的主机,处理这份数据的第一个路由器将TTL值减1,丢弃该份数据报,并发回一份超时ICMP报文,这样就获得了该路径中的第一个路由器的地址,而后traceroute程序发送一份TTL值为2的数据报(这里由于IP协议的connectionless特性,有多是先后两个ICMP报文来自不一样的路径),这样咱们就获得了第二个路由器的地址,继续这个过程直到该份数据报到达目的主机,可是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据并产生一ICMP报文,traceroute程序发送一份UDP数据报给目的主机,并选择一个不能的端口做为UDP端口,使目的主机的任何一个应用程序都不可能使用该端口,从而返回一份“不可达”ICMP报文。

相关文章
相关标签/搜索