-
ICMP报文分为两种:
1、ICMP差错报告报文
2、ICMP询问报文 -
ICMP差错报告报文
1、终点不可达:路由器或主机不能交付数据报时就向源点发送终点不可达报文
2、时间超过:当路由器收到生存时间为0的数据报时,丢弃该数据报,还要向源点发送时间超过报文。
当终点在预先规定的时间内未收到一个数据报的全部报片时,会丢弃已收到的数据报片,并向源点发送时间超过报文
3、参数问题:当路由器或目的主机收到的数据报的首部有字段不正确时,就丢弃该数据报,并向源点发送参数问题报文
4、改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给别的路由器(更好的路由),详情见下 -
改变路由报文
互联网上的主机自身也有一个路由表
当主机要发送数据报时,首先查找主机自己的路由表,确定从哪个接口将数据报发送出去
由于互联网中的主机数量远大于路由器的数量,考虑效率问题,主机一般不和连接在网络上的路由器定期交换路由信息
主机刚开始工作时,一般都在主机路由表中设置一个默认路由器的ip地址,主机发出所有的数据报都先被传送给这个默认路由器
此默认路由器知道到每一个网络的最佳路由(通过和其它路由交换信息可以得到)
若默认路由器发现主机发往某个目的地址的数据报的最佳路径应当经过另一个路由器而不是默认路由时,就向主机发送改变路由报文
于是主机就在其路由表中增加一个项目:到xx目的地址应经过路由器R(而不是默认路由器) -
ICMP差错报告报文格式

0 ~ 3 byte:统一的格式
4 ~ 7 byte:取决于ICMP差错报告报文的类型
其余部分:就是ICMP差错报告报文的 数据部分,由需要进行差错报告的 分组的首部 和 分组数据字段的前8个字节 提取出来,作为ICMP差错报告报文(ip数据报的数据字段前8个字节是为了得到 运输层的端口号 和 运输层报文的发送序号 )

-
不需要发送ICMP差错报告报文的几种情况
1、不需要为ICMP差错报告报文发送ICMP差错报告报文
2、为分片数据报的第一个分片发了,后续分片都不用发了
3、多播地址的数据报
4、特殊地址的数据报(如 127.0.0.0 或 0.0.0.0) -
ICMP询问报文
1、回送请求和回答 报文
由主机或路由器向特定目的主机发出的回送请求报文,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
此种报文一般用于测试目的站是否 可达
2、时间戳请求和回答 报文
请求某台主机或路由器回答当前的日期和时间
时间戳回答报文有一个32bit的字段存放从1900年1月1日到当前时刻一共有多少秒
主要用于时钟同步和时间测量
ICMP是互联网控制报文协议,主要分为差错报告报文和询问报文两类。差错报告报文包括终点不可达、时间超过、参数问题和改变路由四种类型,用于网络故障检测。询问报文则包含回送请求/回答和时间戳请求/回答,用于主机可达性和时间同步。改变路由报文帮助主机更新其路由表,以优化数据报的传输路径。ICMP报文格式包含统一格式、类型特定信息及数据部分。某些情况下,如ICMP报文本身或特殊地址的数据报,不会发送差错报告报文。
3127

被折叠的 条评论
为什么被折叠?



