网络层:网际控制报文协议ICMP
笔记来源:
湖科大教书匠:网际控制报文协议ICMP
声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考
主机或路由器使用ICMP来发送差错报告报文和询问报文
ICMP报文被封装在IP数据报中发送
1.1 ICMP差错报告报文
ICMP差错报告报文有五种类型
1.1.1 终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文(通俗理解:发不过去别发了)
1.1.2 源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢(通俗理解:这有点挤慢点发)
1.1.3 时间超过
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。
情况一:IP数据报在路由器中发生的时间超过
IP数据报 -> 路由器(IP数据报目的地址不是自己,TTL-1)
T
T
L
≠
0
TTL\neq0
TTL=0,则将该IP数据报转发出去;
T
T
L
=
0
TTL=0
TTL=0,丢弃该IP数据报,还要向源点发送时间超过报文。
(通俗理解:我(IP数据报)的寿命到了,现通知你(源点))
情况二:IP数据报在终点主机中发生的时间超过
当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
(通俗理解:超过规定时间了,我(终点主机)你的数据还没都发过来,我都丢了,现通知你(源点))
1.1.4 参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
(通俗理解:你这数据传错了吧,我(终点/路由器)把这些数据丢了,现通知你(源点))
1.1.5 改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
(通俗理解:路由要改变啦,现通知你(源点))
1.2 ICMP询问报文
ICMP询问报文有两种类型
1.2.1 回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
(主机/路由器 -> 询问 -> 目的主机)
收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
(源主机/路由器 <- 回答报文 <- 目的主机)
功能:这种询问报文用来测试目的站是否可达及了解其有关状态。
1.2.2 时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒
功能:这种询问报文用来进行时钟同步和测量时间。
1.3 ICMP应用
1.3.1 分组网间探测(Packet InterNet Groper,ping)
用来测试主机或路由器间的连通性
应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
使用ICMP回送请求和回答报文
1.3.2 跟踪路由(Traceroute)
用来测试IP数据报从源主机到达目的主机要经过哪些路由器
Window版本:tracert命令
应用层直接使用网际层ICMP
使用了ICMP回送请求和回答报文以及差错报告报文
Unix版本:traceroute命令
在运输层使用UDP协议
仅使用ICMP差错报告报文
如何知道经过哪些路由器?
源主机将IP数据报的
T
T
L
TTL
TTL的值设置为1,源主机发送封装有ICMP回送请求的第一个数据报
T
T
L
=
0
TTL=0
TTL=0 时路由器会给源点发送ICMP超时报文,这时源点就知道刚刚IP数据报经过了这个发送超时报文的路由器
源主机将IP数据报的
T
T
L
TTL
TTL的值设置为2,源主机发送封装有ICMP回送请求的第二个数据报
数据报经过第一个路由器后
T
T
L
=
1
TTL=1
TTL=1
数据报到达第二个路由器时
T
T
L
=
0
TTL=0
TTL=0
T
T
L
=
0
TTL=0
TTL=0 时路由器会给源点发送ICMP超时报文,这时源点就知道刚刚的这个IP数据报经过了这个发送超时报文的路由器
源主机将IP数据报的
T
T
L
TTL
TTL的值设置为3,源主机发送封装有ICMP回送请求的第三个数据报,剩下的情况如上类似
每次发送一个封装有ICMP回送请求的IP数据报,每次发送时更改TTL的值
第一次:发送封装有ICMP回送请求的第一个IP数据报,TTL=1,收到报文时就知道经过的第一个经过的路由器
第二次:再发送封装有ICMP回送请求的第二个IP数据报,TTL=2,收到报文时就知道经过的第二个经过的路由器,依次类推