博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ping的整个过程,ICMP报文是什么?IGMP是什么?
阅读量:3667 次
发布时间:2019-05-21

本文共 1082 字,大约阅读时间需要 3 分钟。

ICMP(网际控制报文协议):用来测试网络层是不是有故障,若有故障,该协议还能报告故障。Ping命令来使用这个协议。先看拓扑图:

在这里讲ping的两情况:一种是同一网段内,一种是跨网段的ping。

1.  同一网段

首先,如果主机A,要去ping主机B,那么主机A,就要封装二层报文,他会先查自己的MAC地址表,如果没有B的MAC地址,就会向外发送一个ARP广播包。交换机会收到这个报文后,交换机有学习MAC地址的功能,所以他会检索自己有没有保存主机B的MAC地址,如果有,就返回给主机A,如果没有,就会向所有端口发送ARP广播,其它主机收到后,发现不是在找自己,就纷纷丢弃了该报文,不去理会。直到主机B收到了报文后,就立即响应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A。这时候主机A学到了主机B的MAC地址,就把这个MAC地址封装到ICMP协议的二层报文中向主机B发送,报文格式如下:

当主机B收到了这个报文后,发现是主机A 的ICPM回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的ping过程。

在这里,讲了这么久的局域网内的PING,实际过程的发生不到1毫秒。

2.  不同网段

如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发,但是他也不知道网关的MAC地址情况下呢?他就会向之前那个步骤一样先发送一个ARP广播,学到网关的MAC地址,再发封装ICMP报文给网关路由器。

当路由器收到主机A发过来的ICMP报文,发现自己的目的地址是其本身MAC地址,根据目的的IP2.1.1.1,查路由表,发现2.1.1.1/24的路由表项,得到一个出口指针,去掉原来的MAC头部,加上自己的MAC地址向主机C转发。(如果网关也没有主机C的MAC地址,还是要向前面一个步骤一样,ARP广播一下即可相互学到。路由器2端口能学到主机D的MAC地址,主机D也能学到路由器2端口的MAC地址。)

最后,在主机C已学到路由器2端口MAC地址,路由器2端口转发给路由器1端口,路由1端口学到主机A的MAC地址的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求回复过来。

IGMP:网络组管理协议。主要用于建立和管理多播组,对IP分组广播进行控制。多播案列

IGMP是配置在路由器接口,路由器周期性扫描本网段哪些计算机绑了多播地址。防止有人不看视频,多播地址不在绑定。假如IGMP扫描没有计算机绑定多播地址,这个路由器就会告诉上一级的路由器,你的多播包就不要过来了。

你可能感兴趣的文章
Java 三大特征:封装、继承(方法覆盖,this,super)和多态
查看>>
Layui 栅格系统、常用表单和校验与监听
查看>>
Java 抽象方法、final与static、代码块和内部类
查看>>
Java 接口与枚举
查看>>
Java System与Runtime类常用方法
查看>>
Java 进程/线程与线程同步/死锁
查看>>
Java Math、BigDecimal和BigInteger类常用方法
查看>>
Java Random、ThreadLocalRandom和UUID随机数类
查看>>
Java 线程通信与线程的生命周期
查看>>
Base64加密和解密JDK8
查看>>
AOP + Redis实现防止表单重复提交(注解方式)
查看>>
java对象转JSONObject、JSONObject转java对象及String转JSONObject
查看>>
JdbcTemplate.query返回list
查看>>
一条sql语句的一生
查看>>
MySQL中的锁及MVCC机制
查看>>
ACID
查看>>
MongoTemplate 使用or查询
查看>>
java生成图片,添加水印
查看>>
二进制、十进制、十六进制之间转换
查看>>
BigDecimal加减乘除及比较大小
查看>>