今天是连续坚持的第六天写博客,给自己鼓励下,fighting!
今天主要写下对IP层另一个比较重要的协议——ICMP协议的看法。ICMP全称为Internet control management protocol,即网络控制管理协议,其主要作用是向主机发送错误信息和一些控制信息。常见的错误信息包括网络不可达,主机不可达,路由不可用等。最常用的ICMP协议包括了ping和traceroute。以下图为例:
在运行处输入cmd即可进入DOS界面。上面我来对主机10.13.22.232进行ping,由于与目标主机处于同一子网,可以看到目标主机进行了回应。一般windows和linux系统都显示4个回复信息,这个可以设置来改变。32字节表示报文的长度,ICMP协议是装载在IP报文中的,其头部包括IP抱头和ICMP报文头,后面才是ICMP数据。TTL表示生存时间,报文每经过一个路由器,其对应的TTL都要减1,直到为0后丢弃该报文。windows一般初始TTL为64,linux为255.
traceroute与ping的原理类似,它类似于一种试探来建立连接。首先设TTL为1,这样经过一个路由器后就被抛弃。之后设为2,则经过两个路由器被丢弃,以此类推,直到设置某个值后刚好能连接目标主机,则实现了一条通信路径的建立。
上述所说的ICMP差错报文在以下情况下不会产生:
1.ICMP差错报文本身不产生ICMP差错报文,否则一直在网络中循环,浪费网络资源
2.目的地址是多播或广播地址的IP数据包
3.作为链路层广播的数据包
4.不是IP分片的第一片
5.源地址不是单个主机的数据包
重要的几个ICMP差错报文包括:
1.主机不可达,指路由器收到一份数据包但不能进行转发时产生
2.端口不可达,目标端口与某个正在运行的进程不一样
3.重定向报文,指IP数据包应该被送到另一个路由器,重定向可以让路由器建立更加完善的路由表