ICMP和IGMP协议简介

参考网站:https://www.jianshu.com/p/4bd8758f9fbd

一、ICMP

1.1 ICMP概念

ICMP的全称是Internet Control Message Protocol(网际控制信息协议)。
ICMP工作在TCP/IP体系中的网络层,是IP协议的一个补充,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。ICMP报文是在IP数据报内部传输的。IP协议是不可靠协议,不能保证 IP数据报能够成功的到达目的主机,无法进行差错控制,当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

1.2 ICMP应用

1. ping

ping是一个用来查询网络通不通的一个工具,是系统自带的,运行于内核,调用ICMP协议。

ping的工作原理:用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping通过调用echo来发送请求,通过是否收到echo-reply来查询网络层的连通性。ping的结果会给出传送的时间和TTL的数据,还可以查看主机到目的主机的路由。这是因为ICMP的ping请求数据报在每经过一个路由器的时候,路由器就会把自己的IP地址放到该数据包中,而目的主机则会把这个IP列表复制到ICMP数据包中发回给主机。但是,IP头能记录的路由列表非常有限,如果要观看完整的路由信息,就要用到traceroute工具了。(目的主机在接收到客户端的查询后返回的IP数据包包含着自己的ip)

计算机网络中TTL的含义?

指定数据被路由器丢弃之前允许通过的网段数量,TTL是由主机设置,以防止数据包不断在IP互联网上永不终止的循环,转发IP数据包的时候,要求路由器将TTL的数值减1。

2. traceroute

traceroute是用来侦测主机到目的主机所经路由情况的工具,可以获取到所经路由器的IP地址。
traceroute的工作原理:它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动将TTL减1。而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据包给主机。主机收到这个数据包以后就发送一个TTL=2的数据包给主机,然后刺激第二个路由器给主机发送ICMP数据包,如此反复直到到达目的主机。这样,traceroute就拿到了所有的路由器IP,从而避免了IP头只能记录有限的路由IP
的问题。

二、IGMP

IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。

组播成员概念:
一个多播会话的多播源并不一定要成为接收它发送的流量的组中的成员。事实上,典型网络中,源并不知道那些主机是组员,接收者任何时候都能自由加入和离开组。如果源和所有的组员共享一个LAN,那么就不需要其它协议。如果发送的多播流量需要经过大型的网路,则路由器必须通过某种方法获知连接的网络中是否有组员,如果有,是哪个组的成员。当一个路由器知晓有一个多播会话时,它会向其所属的子网查询是否有主机要加入这个接收组。会向子网中所有系统地址224.0.0.1发送查询,或它可以向组内正在查询的某一特定地址发送。如果有一个或多个主机回应,那么这个路由器会将会话的数据包转到正确的子网中。

IGMP协议(IPv4) 和MLD协议(IPv6)用来帮助主机指定对那些组感兴趣(加入哪一些多播组),以及确定来自某些特定源的报文应该被接收还是过滤掉。为了实现这一目标,主机需要向本地子网的组播路由器发送一些报文来向组播路由器交互一些多播成员关系管理的信息。

组播使用了D类IP地址,IP地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上的所有路由器。另外,多播ip地址只可作为目的地址,而且不能生成关于多播地址的差错报文。

IGMP的mac地址为01-00-5e-xx-xx-xx,其中后23bits是ip地址的低23bits。从这也说明了只要知道一个多播ip地址,即可换算出其mac地址,不需要通过arp请求获取mac地址。

IGMP协议到目前已经有三个版本:

IGMPv1(由RFC 1112 定义) 支持host membership query 和host membership report
IGMPv2(由RFC 2236 定义) 支持membership query,membership report,Leave Group message
IGMPv3(由RFC 3376 定义) 支持membership report 和membershipquery
其中MembershipQuery分为三种:General Query,用于查询接口下所有多播成员信息;Group-Specific Query,用于查询接口下指定组的成员信息; Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。

简而言之:IGMP 各版本区别v1无离开信息,v2有离开信息,v3允许主机指定它要接收通信流量的主机对象。IGMPSnooping(窥探)监听IGMP协议包,形成组播成员关系表;IGMP Proxy(代理)是靠拦截用户和路由器之间的IGMP报文建立组播表。

你可能感兴趣的:(ICMP和IGMP协议简介)