简介:
ICMP:Internet Control Message Protocol。互联网控制报文协议。
ICMP报文封装在IP数据报内被传输,实际上它时IP协议的一个组成部分,必须被每一个IP模块实现。
IP协议是无连接的,不能提供可靠的数据传输,在数据传输的过程中,可能会由于路由器、主机或传输链路故障导致传输错误,IP协议并不处理这些故障,ICMP协议对此类问题提供了反馈机制。通过ICMP,路由器和目的主机能够与源主机通信,报告数据传输过程中的错误和控制信息。
icmp(Internet Control Message Protocol)协议是在接收端在接收到发送端发送的数据后(分两种情况,接收和转发),无法把数据上传或转发,需要回馈一个信息给发送端,典型的例子,当接收端接收到数据包后,没有找到把数据发送出去的路由表项,此时就会发送一个icmp包给发送端,告诉发送端,目的不可达。而主机收到的icmp数据包一般都是应答包,比如接收发送目的不可达的数据包回来,接收端就会接收到这个包,并根据类型,把信息打印出来。当收到应答包时,接收方就不需要再回复一个应答包给对方,从而避免的循环回复。
本地发送数据包,如果找不到IP地址对应的MAC地址时,会发送arp广播查找MAC地址,如果是本地局域网的,就查看本地路由表,如果是要通过网关的,就可以通过默认网关;有时我们ping本地子网,也ping不同,就是因为本地路由表中没有对应的路由表项造成(比如要ping的本地机器关机,则相应的路由表项都会被删除)。
icmp协议的数据包结构,会根据参数的不同而不同,一般包括
eth首部(6字节目的MAC地址+6字节源MAC地址+2字节类型)+20字节IP首部(不包含选项)+icmp首部+源数据包IP首部(包含选项)+源数据包TCP前8字节(即源端口号和目的端口号)
ICMP报文的类型:
ICMP报文分为两大类:差错报文和查询报文。其中差错报文包括:目的不可达,重定向、源抑制,时间超过,参数问题。查询报文包括:Echo,信息,时间戳,地址掩码。