icmp详解

ICMP:网络报文控制协议;介于传输层之下,网络层之上;

一、基本的数据格式;

二、两类icmp报文;

1、差错(报告)报文:     分为5种情况;

  1. 目的不可达;目的网络不通(路由器故障)、目的主机未开机.....等等;
  2. 源抑制;路由器内存不够的时候,丢弃数据,向源主机(ip)发送icmp;
  3. 超时/超期;ttl减为0了;在规定时间内,目的主机未收到所有的数据分片;

icmp详解_第1张图片

     4.参数问题:路由器(或主机)发现ip分组首部字段不正确的时候;

icmp详解_第2张图片

    5.重定向:让主机知道下次应该将数据报发送给另外的路由(可通过更好地路由);

icmp详解_第3张图片

icmp详解_第4张图片

不应发送ICMP差错报文的几种情况:

     1.对ICMP差错报文,不再发送ICMP差错报告报文。
     2.对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文(只对第一个分片发送)
     3.目的地址是广播地址或者多播地址的ip数据报,都不发送ICMP差错报告报文
     4.对具有特殊地址(如127.0.0.1或0.0.0.0)的数据报,不发送ICMP差错报告报文;源地址不能是零地址、环路地址、广播和多播地址

2、(网络)探询报文:     分为2组;

  1. 回声请求和回声应答报文

icmp详解_第5张图片

    Ping一个地址:探询到这个地址(目的主机)是否通;连续向这个地址发送了4个数据包(4个请求,id一样,seq依次加1);
然后收到4个应答数据包(根据id和seq进行匹配,哪个请求的回应/应答);

   icmp详解_第6张图片

Ping请求/应答几个问题的分析:

请求超时:发出去数据包后规定时间内未收到反馈;
无法访问目标主机:跟本没有出去的路,数据包还在原地(比如,ping一个不存在/暂时未被分配的ip地址;这个时候,由于ip不存在,所以arp请求也就不能收到应答,得到对应的MAC地址,继而不能封装成帧进行发送出去,数据包还在原地。Dhcp服务器在offer前会ping一下即将分配的Ip地址是否存在,如果这种情况即可分配此ip);

故障分析:ping完后,运行"arp -a",检查有没有10.10.10.10的ARP表项,如果有这个IP的表项,说明对方主机防火墙拦截对ping包的响应。如果没有10.10.10.10的ARP表项,说明主机不可达。
当主机未安装ip/tcp协议的时候,ping 127.0.0.1(环路地址)不通;
当主机安装了ip/tcp协议,但是暂时未被分配ip或者网络ip释放(release,根本没有ip分配了)后,ping 127.0.0.1(数据只到网络层,然后再返回应答,不经过数据链路层)能通,ping其他的任何地址则不通(此时没有ip,也就是说icmp报文不能封装成ip分组进行发送);    当主机安装了ip/tcp协议,并且也已经分配了ip地址(比如:10.60.40.18),突然网线断掉了(分配的ip地址还在租期内,即网络接口地址还存在),此时如果ping 10.60.40.18 (ping本机本身,数据传给该主机ip地址,则会送到环路接口)和 ping 127.0.0.1都能通(此时应该是都只经过网络层,如下图所示),ping 其他则不通(网线断开后,路由表和arp缓存表都已经没有清除了);

icmp详解_第7张图片

tracert一个地址:探询到这个地址(目的主机)所采取的路径/路径怎么样;连续向这个地址发送了若干个ping数据包(id一样,seq依次加1,ttl从值是1开始发3个包,收到超时icmp报文后。ttl++;即ttl是2的再发送3个包......即经过的每个路由器超时);icmp超时报文(根据icmp超时差错报文,8个字节中的id、seq和发送的请求数据包进行匹配,哪个请求的回应/应答,除了目的主机外,其他路由器都会发送超时的icmp超时差错报文);

icmp详解_第8张图片

icmp详解_第9张图片

 

     2.时间戳请求和应答报文;

icmp详解_第10张图片

你可能感兴趣的:(计算机网络)