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字节(即源端口号和目的端口号)