参考这个,防火墙收到request报文创建会话,记录状态为ICMP-OPEN;收到对方回应的reply报文以后,状态切换ICMP-CLOSED。状态closed说明收发包正常。
(0)
暂无评论
1、ICMP协议是什么?
一般在网络发生故障的时候,会使用ping命令检查一下是否网络通。这里的ping命令就是基于ICMP协议工作的。ICMP协议全称Internet Control Message Protocol,即互联网控制报文协议,它是基于IP层进行工作的。比如下面执行ping命令,返回了回复报文。
2、ICMP协议的格式。
ICMP协议的报文有很多种,常用的就两种:主动请求为8,主动请求的响应为0。报文格式如下所示:
比起原来的ICMP协议,ping命令多了两个字段,一个是标识符。一个是序号。这个很好理解,就好像你ping不同的ip地址,那么报文里面就是不同的标识符。不同的序号,可以认为你发了10条ping命令,每个ping命令都有自己的序号。
当然了ICMP还有差错报文,一般终点不可达为3,源抑制为4,超时为11,重定向为5。对于终点不可达,一般是指达到不了目标主机。
具体的终点不可达还有更详细的错误码。
比如网络不可达为0。主机不可达为1。协议不可达为2。端口不可达为3。
进行了分片但设置了不分片位为4。
其中,对于源抑制,也就是让源站发送速度减慢。
对于超时,也就是报文超过网络生存的时间还没有达到。
对于重定向,也就是让下次发给另一个路由器。
3、举例说明ping的发送和接收过程。
假设A的主机为192.168.1.1,主机B的地址为192.168.1.2,它们是同一个子网。
Ping命令执行的时候,源主机会构建一个ICMP报文,里面包含多个字段,其中字段类型为8,代表主动请求。另一个是顺序号,主要用于区分连续ping的时候发出的多个数据包。
然后ICMP将报文和目的IP地址192.168.1.2一起交给IP层去处理,IP层将以192.168.1.2作为目的地址,本机地址作为源地址构建出IP报文。
接下来就需要加入MAC头,这个是数据链路层需要的头。所有会在ARP映射表中查找MAC地址,如果找到则直接构建报文,如果没有找到,则使用ARP协议进行查询MAC地址。最后还需要加上一些以太网控制规则,然后从网络传递出去。
主机B接收到报文,则首先检查目的MAC地址,如果是本机MAC地址,则接收该报文,否则丢弃该报文。然后将IP数据包从帧中抽取出来,交给IP层,IP层检查完后将有用信息提取出来给ICMP协议去处理。主机B然后构建一个新的回复报文给A机回复。
在机器上可以看到回复报文显示延迟时间,这个就是从源数据包里面取出的时间戳,然后用当前时间戳进行计算。所有在机器上的回复报文会看到延时多少毫秒。
4、什么时候ICMP不回复差错报文?
一般情况是ICMP报文出错,或者目的地址为广播地址的时候,或者源IP地址不唯一的时候,不发差错报文。
5、传输层的UDP怎么确认有没有到达主机呢?
因为ICMP协议属于IP层,当UDP不可到达主机的时间,会产生一个ICMP错误报文返回给主机。
6、ICMP协议应用。
在Linux下面,有个traceroute命令(Windows系统下是tracert)。第一个作用就是故意设置特殊的TTL,来追踪去往目的地时沿途经过的路由器。
Traceroute的参数指向某个IP地址,它会发送一个UDP包,将TTL设置为1.一旦该消息到达第一个路由,消息"消失"了。于是IP层返回一个ICMP报文,就知道经过的路由个数了。
然后下一次Traceroute设置TTL为2,就可以经过两个路由。这样traceroute就可以拿到第二个路由的信息,最终沿途所有路由的IP信息都可以获取。
(0)
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论