diff --git a/计算机网络实验.md/H3C COMMAND.md b/计算机网络实验.md/H3C COMMAND.md deleted file mode 100644 index 4b77c4e7..00000000 --- a/计算机网络实验.md/H3C COMMAND.md +++ /dev/null @@ -1,347 +0,0 @@ -# H3C命令行 - -> 基于视图的命令行。 - -## 1 入门实验 - -### 视图结构图树 -* user -* system - * interface - * ospf - * ospf-area - * vlan - * vlan-interface - -### 视图切换命令 - -``` -system-view //进入系统视图 - -interface Ethernet1/0/1 //进入以太网接口视图 -ospf processid //进入ospf视图 -vlan 2 //创建VLAN2,并进入VLAN视图 - -area 2 //ospf视图下创建并进入 area视图 - -quit //退出当前视图到上一个视图 -``` - -### 用户视图 - -``` -display * //显示各种配置视图 -display current-configguration -display version -display interface Ethernet1/0/1 -display clock - -? //查看该视图下的命令 - -debuging //调试命令 - -reset //重置或清除相关配置 -reset saved-configuration//重置到出厂设置 -reset arp //重置arp设置 -reset ospf process //重置ospf进程,并重启进程 - -save //用来保存道歉的配置信息 - -reboot //重启 -``` - -### 以太网端口视图 - -``` -[system]interface Ethernet0/1 -[Ethernet] -# ip协议相关命令 -[Ethernet]ip address ip-address mask[sub] -[Ethernet]undo ip address [ip-address mask][sub] - -# MTU -[Ethernet]mtu 100 -[Ethernet]undo mtu - -# speed -[Ethernet]speed [100|10|negotiation] //100M,10M,自动协商 - -# display -[system]display interfaces ethernet number - -# 打开关闭以太网端口 -[Ethernet]shutdown -[Ethernet]undo shutdown - -# 端口工作模式 -[Ethernet]duplex full //设置全双工状态 -[Ethernet]undo duplex //回复以太网全双工状态 - -# 端口类型 -[Ethernet]spreed [10|100|auto] - -# 接口类型 -[Ethernet]mdi [across|auto|normal] //设置接口网线类型 - -# 流量控制 -[Ethernet]flow-control //流量控制 -[Ethernet]undo flow-control //解除流量控制 - -# 链路类型 -[Ethernet]port link-type [acces|hybrid|trunk] //设置接口链路类型 -[Ethernet]undo port link-type - -# 显示接口信息 -[Ethernet]display interface Ethernet1/0/1 -``` - -### NAT联网相关命令 - -``` -# 访问控制列表access control list:acl -[R]acl number 2001 //设置访问控制号 -[R-acl-2001]rule permit source 10.0.0.0 0.0.0.255//设置访问控制列表的规则内容 -[R-acl-2001]rule deny source any//设置不可访问的内容:这里是其他所有的 - -# 设置nat地址转换,address group 规定了地址转换后的组 -[R]nat address-group 1 192.168.5.105 192.168.5.109 - -# 在接口上绑定nat对外解析的地址池 -[R-Ethernet0/1]nat outbound 2001 address-group 1 - -# 设置静态ip 路由地址,如果目的IP地址和掩码都为0.0.0.0(或掩码为0),则配置的路由为缺省路由。当检查路由表失败的时候,将使用缺省路由进行报文转发。 -[R]ip route-static 0.0.0.0 0.0.0.0 192.168.5.1 - -``` -## 2 链路层实验 - -### 端口聚合 -``` -# 设置一台网端口聚合 -link-aggragation ethernet port_num1 to ethernet port_num2 {ingress|both}//设置聚合端口 -undo link-aggregation {ethernet master_port_num |all}//删除聚合端口 -display link-aggregation[ethernet master_port_num] - - -# 进入聚合端口 -[S]interface Bridge-Aggregation 1//设置并进入端口聚合视图 -[S-bridge-aggregation 1]link-aggeragation mode dynamic //设置端口聚合模式 -[s-ethernet0/1]port link-aggregation group 1//加入端口聚合组 -[s]link-aggeragation load-sharing mode destionation-mac source-mac //配置聚合组的分发方式 - - -# 生成树协议 -[S]stp enable -[S]stp disenable -``` -### VLAN实验 - -``` -# 创建删除vlan -[S]vlan vlan_id -[S]undo vlan vlan_id - -# 向vlan中添加删除端口 -[S-vlan2]port port_num to port_num -[S-vlan2]undo port port_num - -# 指定端口类型 -[S-Ethernet0/1]port link-type {access|trunk|hybrid} -[S-Ethernet0/1]undo port link-type trunk - -# 指定删除pvid -[S-Ethernet]port trunk pvid vlan vlan_id -[S-Ethernet0/1]undo port trunk pvid vlan vlan_id - -# 指定删除trunk的vlan -[S-Ethernet0/1]port trunk permit vlan{vlan_id_list | all} -[S-Ethernet0/1]undo port trunk permit {vlan_id_list} - -# hybrid端口添加删除vlantag -[S-Ethernet]prot hybrid vlan vlan_id_list untagged|tagged - -``` -### 广域网协议-PPP - -``` -# 配置ppp链路协议 -[R-serial1/0]link-protocol ppp - -# 显示ppp的debugging信息 -[user]debugging ppp all //打开debug开关 -[user]termimal debugging//显示debug信息 - -# 设置ppp服务认证 -[R]local-user RTB class network//配置用户列表 -[R-luser-network-RTB]service-type ppp//配置服务类型 -[R-luser-network-RTB]password simple aaa//配置用户密码 -# 设置pap验证 -[R-serial1/0]ppp authentication pap//授权pap认证 -# 对端pap设置 -[R-serial1/0]ppp pap local-user RTB password simple aaa - -# 设置ppp服务 -[R]local-user RTB class network//配置用户列表 -[R-luser-network-RTB]service-type ppp//配置服务类型 -[R-luser-network-RTB]password simple aaa//配置RTB用户密码 -# 设置chap验证 -[R-serial0/0]ppp authentication-mode chap//配置验证方式 -[R-serial0/0]ppp chap user RTA//配置本地名称 -# 对端对端路由器配置 -[R]lcoal-user RTA class network -[R-luser-network]service-type ppp -[R-luser-network]password simple aaa//配置RTA密码 -[R-serial0/0]ppp chap user RTB -``` - -## 3 网络层实验 - -### ARP分析 -``` -# 使用三层交换机的第三层。可以用开启VLAN的端口作为其三层协议驻留的端口。配置VLAN,开启第三层网络层服务。 -[S-vlan2]inter vlan 2//进入vlan2的接口(虚拟接口) -[S-Vlan-interface2]ip address 192.168.1.10 255.255.255.0 //配置虚拟局域网VLAN的虚拟接口的IP地址。开放第三层服务。 - -``` - -### ICMP分析 -``` -# 网络设备出于安全性考虑对tracert命令不回复。避免称为攻击目标。实验中可以打开 -[S]ip ttl-expires enable//打开ttl计数 -[S]ip unreachables enable//打开ip -``` - -### IP 分析 -``` -# 显示路由表。 -display ip routing-table -``` - -### 网络层分片实验 -``` -# 设置接口最大传输单元 -[R-Ethernet0/0]mtu 100 -``` - -### VLAN间通信 -``` -# 开启VLAN的三成转发 -[S]inter vlan 2 -[S-vlan-interface2]ip address 192.168.2.1 255.255.255.0 -``` -## 4 OSPF协议实验 - -### OSPF基本配置 -``` -# display ospf命令的说明,下面是三个不同的表格。 -display ospf peer //显示的是邻居信息,有几个邻居路由器 -display ospf routing //是路由信息,具体用来决定从哪个接口,寻找下一跳。通过lsdb与ospf算法计算而来。 -display ospf lsdb //是整个区域的链路拓扑结构,即通过lsa链路状态通告而来。 -display adjacent-table //显示邻接信息。 - -# router id相关命令 -[system]router id router-id //设置router id -[system]undo router id //删除router id - -[system]ospf [process-id[router-id]] //创建并进入ospf视图 -[system]undo ospf [process-id]关闭ospf视图 - -[ospf]area area-id //创建并进入ospf下area视图 -[ospf]undo area area-id //删除ospf area - -[area]network ip-address wildcard-mask //指定网段运行OSPF协议 -[area]undo network ip-address wildcard-mask //取消网段运行OSPF协议 - -# 重置 -[user]reset ospf all process -# 显示 -[user]display ospf peer/brief/error/routing -# 调试 -[user]debugging ospf event/lsa/packet/spf - -# 用来显示ospf的lsdb(链路状态数据库)自组织成第一类router-lsa的内容。 -[R]dis ospf 1 lsdb router self-originate -# ospf的lsdb自组织第二类network-lsa -[R]dis ospf 1 lsdb network self-originate -# ospf的lsdb自组织第三类第四类summary lsa -[R]dis ospf 1 lsdb summary self-originate -# ospf的lsdb自组织第五类lsa -[R]dis ospf lsdb ase -``` - - -## 5 BGP实验 -### BGP 基本分析 -``` -# 启动BGP进程 -bgp 100 //启动bgp指定as号 -router-id 1.1.1.1 //配置BGP的router-id - -# 配置BGP对等体:配置BGP对等体时,如果指定对等体所属的AS编号与本地AS编号相同,表示配置IBGP对等体。如果指定对等体所属的AS编号与本地AS编号不同,表示配置EBGP对等体。为了增强BGP连接的稳定性,推荐使用路由可达的Loopback接口地址建立BGP连接。 -[BGP]peer 12.1.1.1 as-number 100 //创建BGP对等体 -[BGP]peer 12.1.1.1 connet-interface lookback 0 //指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。缺省情况下,BGP使用报文的出接口作为BGP报文的源接口。 -[BGP]peer 12.1.1.1 ebgp-max-hop 2 //指定建立EBGP连接允许的最大跳数。 缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。 -[BGP]peer peer 3.1.1.2 next-hop-local //强制下一跳地址为自身。用来配置IBGP。 - -# 配置BGP对等体组:(只能用来配置EBGP) -group 1 [ external | internal ]//创建对等体组。 -peer 1 as-number 100//配置EBGP对等体组的AS号。 -peer 12.1.1.2 group 1//向对等体组中加入对等体 - -# 配置BGP引入路由:BGP协议本身不发现路由,因此需要将其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。BGP协议支持通过以下两种方式引入路由: - -Import方式:按协议类型,将RIP路由、OSPF路由、ISIS路由等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。 - -Network方式:逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。 - -import-router protocol //引入路由 -default-route imported//允许BGP引入本地IP路由表中已经存在的缺省路由。 -network 1.1.1.1 mask //配置BGP逐条引入IPv4路由表或IPv6路由表中的路由。 -``` - -### BGP状态转换分析 -``` -[user]debugging bgp event -[user]terminal debugging -[user]reset bgp all - -[user]display bgp peer //可以显示bgp邻居信息,用来查看对等体是否已经建立。 -[user]display bgp routing-table peer ip-address advertised-routes/received-routes //用来检查bgp通告的路由信息 -[user]display bgp routing-table -``` - -### BGP路由聚合 - -``` -[R]bgp 100 -[R-bgp]aggregate 192.168.0.0 255.255.240.0 [detail-suppressed]//同网段路由聚合。当有detail-suppressed的时候只通告聚合路由。 -[R-bgp]undo aggregate 192.168.0.0 255.255.240.0 -``` -### BGP路由属性 - -``` -# 路由引入 -import-route direct - -``` -### BGP的路由策略 -``` -# 访问控制列表 -[R]acl number acl-number -[R-acl-number]rule rule-number permit|deny source-addr source-addr-mask | any//定义acl过滤规则 -[R]peer 10.0.0.1 filter-policy acl-number {export|import}//应用acl访问控制列表 - -# 自制系统路径信息访问列表 -ip as-path-acl as-path-acl-number {permit|deny} as-regular-expression//定义AS-path过滤规则 -peer peer-address as-path-acl as-path-acl-number {import|export}//应用对等体的AS路径过滤器。 - -# 路由策略 -route-policy policy-name {permit|deny}node node-number//定义route-policy路由策略过滤规则 -peer peer-address route-policy policy-name {import|export}//应用对等体路由策略 - -if-match -apply//使用对等体路由策略 - -# 复位BGP -reset bgp all|peer-id -``` \ No newline at end of file diff --git a/计算机网络实验.md/1 网络实验入门.md b/计算机网络实验/1 网络实验入门.md similarity index 98% rename from 计算机网络实验.md/1 网络实验入门.md rename to 计算机网络实验/1 网络实验入门.md index f86011f5..1e92f03c 100644 --- a/计算机网络实验.md/1 网络实验入门.md +++ b/计算机网络实验/1 网络实验入门.md @@ -26,7 +26,7 @@ * 交换方式主要包括:端口交换、帧交换、信元交换。 * 具体结构如下: -![asdf](\image/交换机结构.png) +![asdf](image/交换机结构.png) ### 路由器(router) * 网络层 @@ -35,7 +35,7 @@ * 路由选择主要包括两种方法:静态路由与动态路由。 * 具体结构如下: -![ads](\image/路由器结构.png) +![ads](image/路由器结构.png) ### 说明 * 集线器本身不能区分广播域和冲突域,对收到的任何目的地之的消息都进行转发。 diff --git a/计算机网络实验/10 组播实验.md b/计算机网络实验/10 组播实验.md new file mode 100644 index 00000000..ac67bb24 --- /dev/null +++ b/计算机网络实验/10 组播实验.md @@ -0,0 +1,13 @@ +# 组播实验 + +目录 +1. IP组播实验 +2. IGMP实验 +3. PIM-DM实验 +4. PIM-SM实验 + + +## 1 IP组播实验 +## 2 IGMP实验 +## 3 PIM-DM实验 +## 4 PIM-SM实验 \ No newline at end of file diff --git a/计算机网络实验.md/11 IPv6实验.md b/计算机网络实验/11 IPv6实验.md similarity index 100% rename from 计算机网络实验.md/11 IPv6实验.md rename to 计算机网络实验/11 IPv6实验.md diff --git a/计算机网络实验.md/2 链路层实验.md b/计算机网络实验/2 链路层实验.md similarity index 100% rename from 计算机网络实验.md/2 链路层实验.md rename to 计算机网络实验/2 链路层实验.md diff --git a/计算机网络实验.md/3 网络层实验.md b/计算机网络实验/3 网络层实验.md similarity index 100% rename from 计算机网络实验.md/3 网络层实验.md rename to 计算机网络实验/3 网络层实验.md diff --git a/计算机网络实验.md/7 OSPF实验.md b/计算机网络实验/7 OSPF实验.md similarity index 100% rename from 计算机网络实验.md/7 OSPF实验.md rename to 计算机网络实验/7 OSPF实验.md diff --git a/计算机网络实验.md/8 BGP实验.md b/计算机网络实验/8 BGP实验.md similarity index 100% rename from 计算机网络实验.md/8 BGP实验.md rename to 计算机网络实验/8 BGP实验.md diff --git a/计算机网络实验/9 网络管理实验.md b/计算机网络实验/9 网络管理实验.md new file mode 100644 index 00000000..a8cca5d2 --- /dev/null +++ b/计算机网络实验/9 网络管理实验.md @@ -0,0 +1,11 @@ +# 网络管理实验 + +目录 + +1. 网管软件基本功能实验 +2. SNMP基本原理的验证与分析实验 +3. 网络拓扑发现实验 + +## 1 网管软件基本功能实验 +## 2 SNMP基本原理的验证与分析实验 +## 3 网络拓扑发现实验 \ No newline at end of file diff --git a/计算机网络实验.md/BGP协议.md b/计算机网络实验/BGP协议.md similarity index 100% rename from 计算机网络实验.md/BGP协议.md rename to 计算机网络实验/BGP协议.md diff --git a/计算机网络实验.md/DHCP.md b/计算机网络实验/DHCP.md similarity index 100% rename from 计算机网络实验.md/DHCP.md rename to 计算机网络实验/DHCP.md diff --git a/计算机网络实验/H3C COMMAND.md b/计算机网络实验/H3C COMMAND.md new file mode 100644 index 00000000..dab30e01 --- /dev/null +++ b/计算机网络实验/H3C COMMAND.md @@ -0,0 +1,655 @@ +# H3C命令行 + +> 基于视图的命令行。 + +## 1 入门实验 + +### 视图结构图树 +* user +* system + * interface + * ospf + * ospf-area + * vlan + * vlan-interface + +### 视图切换命令 + +``` +system-view //进入系统视图 + +interface Ethernet1/0/1 //进入以太网接口视图 +ospf processid //进入ospf视图 +vlan 2 //创建VLAN2,并进入VLAN视图 + +area 2 //ospf视图下创建并进入 area视图 + +quit //退出当前视图到上一个视图 +``` + +### 用户视图 + +``` +display * //显示各种配置视图 +display current-configguration +display version +display interface Ethernet1/0/1 +display clock + +? //查看该视图下的命令 + +debuging //调试命令 + +reset //重置或清除相关配置 +reset saved-configuration//重置到出厂设置 +reset arp //重置arp设置 +reset ospf process //重置ospf进程,并重启进程 + +save //用来保存道歉的配置信息 + +reboot //重启 +``` + +### 以太网端口视图 + +``` +[system]interface Ethernet0/1 +[Ethernet] +# ip协议相关命令 +[Ethernet]ip address ip-address mask[sub] +[Ethernet]undo ip address [ip-address mask][sub] + +# MTU +[Ethernet]mtu 100 +[Ethernet]undo mtu + +# speed +[Ethernet]speed [100|10|negotiation] //100M,10M,自动协商 + +# display +[system]display interfaces ethernet number + +# 打开关闭以太网端口 +[Ethernet]shutdown +[Ethernet]undo shutdown + +# 端口工作模式 +[Ethernet]duplex full //设置全双工状态 +[Ethernet]undo duplex //回复以太网全双工状态 + +# 端口类型 +[Ethernet]spreed [10|100|auto] + +# 接口类型 +[Ethernet]mdi [across|auto|normal] //设置接口网线类型 + +# 流量控制 +[Ethernet]flow-control //流量控制 +[Ethernet]undo flow-control //解除流量控制 + +# 链路类型 +[Ethernet]port link-type [acces|hybrid|trunk] //设置接口链路类型 +[Ethernet]undo port link-type + +# 显示接口信息 +[Ethernet]display interface Ethernet1/0/1 +``` + +### NAT联网相关命令 + +``` +# 访问控制列表access control list:acl +[R]acl number 2001 //设置访问控制号 +[R-acl-2001]rule permit source 10.0.0.0 0.0.0.255//设置访问控制列表的规则内容 +[R-acl-2001]rule deny source any//设置不可访问的内容:这里是其他所有的 + +# 设置nat地址转换,address group 规定了地址转换后的组 +[R]nat address-group 1 192.168.5.105 192.168.5.109 + +# 在接口上绑定nat对外解析的地址池 +[R-Ethernet0/1]nat outbound 2001 address-group 1 + +# 设置静态ip 路由地址,如果目的IP地址和掩码都为0.0.0.0(或掩码为0),则配置的路由为缺省路由。当检查路由表失败的时候,将使用缺省路由进行报文转发。 +[R]ip route-static 0.0.0.0 0.0.0.0 192.168.5.1 + +``` +## 2 链路层实验 + +### 端口聚合 +``` +# 设置一台网端口聚合 +link-aggragation ethernet port_num1 to ethernet port_num2 {ingress|both}//设置聚合端口 +undo link-aggregation {ethernet master_port_num |all}//删除聚合端口 +display link-aggregation[ethernet master_port_num] + + +# 进入聚合端口 +[S]interface Bridge-Aggregation 1//设置并进入端口聚合视图 +[S-bridge-aggregation 1]link-aggeragation mode dynamic //设置端口聚合模式 +[s-ethernet0/1]port link-aggregation group 1//加入端口聚合组 +[s]link-aggeragation load-sharing mode destionation-mac source-mac //配置聚合组的分发方式 + + +# 生成树协议 +[S]stp enable +[S]stp disenable +``` +### VLAN实验 + +``` +# 创建删除vlan +[S]vlan vlan_id +[S]undo vlan vlan_id + +# 向vlan中添加删除端口 +[S-vlan2]port port_num to port_num +[S-vlan2]undo port port_num + +# 指定端口类型 +[S-Ethernet0/1]port link-type {access|trunk|hybrid} +[S-Ethernet0/1]undo port link-type trunk + +# 指定删除pvid +[S-Ethernet]port trunk pvid vlan vlan_id +[S-Ethernet0/1]undo port trunk pvid vlan vlan_id + +# 指定删除trunk的vlan +[S-Ethernet0/1]port trunk permit vlan{vlan_id_list | all} +[S-Ethernet0/1]undo port trunk permit {vlan_id_list} + +# hybrid端口添加删除vlantag +[S-Ethernet]prot hybrid vlan vlan_id_list untagged|tagged + +``` +### 广域网协议-PPP + +``` +# 配置ppp链路协议 +[R-serial1/0]link-protocol ppp + +# 显示ppp的debugging信息 +[user]debugging ppp all //打开debug开关 +[user]termimal debugging//显示debug信息 + +# 设置ppp服务认证 +[R]local-user RTB class network//配置用户列表 +[R-luser-network-RTB]service-type ppp//配置服务类型 +[R-luser-network-RTB]password simple aaa//配置用户密码 +# 设置pap验证 +[R-serial1/0]ppp authentication pap//授权pap认证 +# 对端pap设置 +[R-serial1/0]ppp pap local-user RTB password simple aaa + +# 设置ppp服务 +[R]local-user RTB class network//配置用户列表 +[R-luser-network-RTB]service-type ppp//配置服务类型 +[R-luser-network-RTB]password simple aaa//配置RTB用户密码 +# 设置chap验证 +[R-serial0/0]ppp authentication-mode chap//配置验证方式 +[R-serial0/0]ppp chap user RTA//配置本地名称 +# 对端对端路由器配置 +[R]lcoal-user RTA class network +[R-luser-network]service-type ppp +[R-luser-network]password simple aaa//配置RTA密码 +[R-serial0/0]ppp chap user RTB +``` + +## 3 网络层实验 + +### ARP分析 +``` +# 使用三层交换机的第三层。可以用开启VLAN的端口作为其三层协议驻留的端口。配置VLAN,开启第三层网络层服务。 +[S-vlan2]inter vlan 2//进入vlan2的接口(虚拟接口) +[S-Vlan-interface2]ip address 192.168.1.10 255.255.255.0 //配置虚拟局域网VLAN的虚拟接口的IP地址。开放第三层服务。 + +``` + +### ICMP分析 +``` +# 网络设备出于安全性考虑对tracert命令不回复。避免称为攻击目标。实验中可以打开 +[S]ip ttl-expires enable//打开ttl计数 +[S]ip unreachables enable//打开ip +``` + +### IP 分析 +``` +# 显示路由表。 +display ip routing-table +``` + +### 网络层分片实验 +``` +# 设置接口最大传输单元 +[R-Ethernet0/0]mtu 100 +``` + +### VLAN间通信 +``` +# 开启VLAN的三成转发 +[S]inter vlan 2 +[S-vlan-interface2]ip address 192.168.2.1 255.255.255.0 +``` +## 4 OSPF协议实验 + +### OSPF基本配置 +``` +# display ospf命令的说明,下面是三个不同的表格。 +display ospf peer //显示的是邻居信息,有几个邻居路由器 +display ospf routing //是路由信息,具体用来决定从哪个接口,寻找下一跳。通过lsdb与ospf算法计算而来。 +display ospf lsdb //是整个区域的链路拓扑结构,即通过lsa链路状态通告而来。 +display adjacent-table //显示邻接信息。 + +# router id相关命令 +[system]router id router-id //设置router id +[system]undo router id //删除router id + +[system]ospf [process-id[router-id]] //创建并进入ospf视图 +[system]undo ospf [process-id]关闭ospf视图 + +[ospf]area area-id //创建并进入ospf下area视图 +[ospf]undo area area-id //删除ospf area + +[area]network ip-address wildcard-mask //指定网段运行OSPF协议 +[area]undo network ip-address wildcard-mask //取消网段运行OSPF协议 + +# 重置 +[user]reset ospf all process +# 显示 +[user]display ospf peer/brief/error/routing +# 调试 +[user]debugging ospf event/lsa/packet/spf + +# 用来显示ospf的lsdb(链路状态数据库)自组织成第一类router-lsa的内容。 +[R]dis ospf 1 lsdb router self-originate +# ospf的lsdb自组织第二类network-lsa +[R]dis ospf 1 lsdb network self-originate +# ospf的lsdb自组织第三类第四类summary lsa +[R]dis ospf 1 lsdb summary self-originate +# ospf的lsdb自组织第五类lsa +[R]dis ospf lsdb ase +``` + + +## 5 BGP实验 +### BGP 基本分析 +``` +# 启动BGP进程 +bgp 100 //启动bgp指定as号 +router-id 1.1.1.1 //配置BGP的router-id + +# 配置BGP对等体:配置BGP对等体时,如果指定对等体所属的AS编号与本地AS编号相同,表示配置IBGP对等体。如果指定对等体所属的AS编号与本地AS编号不同,表示配置EBGP对等体。为了增强BGP连接的稳定性,推荐使用路由可达的Loopback接口地址建立BGP连接。 +[BGP]peer 12.1.1.1 as-number 100 //创建BGP对等体 +[BGP]peer 12.1.1.1 connet-interface lookback 0 //指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。缺省情况下,BGP使用报文的出接口作为BGP报文的源接口。 +[BGP]peer 12.1.1.1 ebgp-max-hop 2 //指定建立EBGP连接允许的最大跳数。 缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。 +[BGP]peer peer 3.1.1.2 next-hop-local //强制下一跳地址为自身。用来配置IBGP。 + +# 配置BGP对等体组:(只能用来配置EBGP) +group 1 [ external | internal ]//创建对等体组。 +peer 1 as-number 100//配置EBGP对等体组的AS号。 +peer 12.1.1.2 group 1//向对等体组中加入对等体 + +# 配置BGP引入路由:BGP协议本身不发现路由,因此需要将其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。BGP协议支持通过以下两种方式引入路由: + +Import方式:按协议类型,将RIP路由、OSPF路由、ISIS路由等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。 + +Network方式:逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。 + +import-router protocol //引入路由 +default-route imported//允许BGP引入本地IP路由表中已经存在的缺省路由。 +network 1.1.1.1 mask //配置BGP逐条引入IPv4路由表或IPv6路由表中的路由。 +``` + +### BGP状态转换分析 +``` +[user]debugging bgp event +[user]terminal debugging +[user]reset bgp all + +[user]display bgp peer //可以显示bgp邻居信息,用来查看对等体是否已经建立。 +[user]display bgp routing-table peer ip-address advertised-routes/received-routes //用来检查bgp通告的路由信息 +[user]display bgp routing-table +``` + +### BGP路由聚合 + +``` +[R]bgp 100 +[R-bgp]aggregate 192.168.0.0 255.255.240.0 [detail-suppressed]//同网段路由聚合。当有detail-suppressed的时候只通告聚合路由。 +[R-bgp]undo aggregate 192.168.0.0 255.255.240.0 +``` +### BGP路由属性 + +``` +# 路由引入 +import-route direct + +``` +### BGP的路由策略 +``` +# 访问控制列表 +[R]acl number acl-number +[R-acl-number]rule rule-number permit|deny source-addr source-addr-mask | any//定义acl过滤规则 +[R]peer 10.0.0.1 filter-policy acl-number {export|import}//应用acl访问控制列表 + +# 自制系统路径信息访问列表 +ip as-path-acl as-path-acl-number {permit|deny} as-regular-expression//定义AS-path过滤规则 +peer peer-address as-path-acl as-path-acl-number {import|export}//应用对等体的AS路径过滤器。 + +# 路由策略 +route-policy policy-name {permit|deny}node node-number//定义route-policy路由策略过滤规则 +peer peer-address route-policy policy-name {import|export}//应用对等体路由策略 + +if-match +apply//使用对等体路由策略 + +# 复位BGP +reset bgp all|peer-id +``` + +## 6 组播实验 + +### IGMP实验 +``` +接口上设置其他IGMP查询器的存活时间。 +display igmp explicit-tracking +//查看使用Include模式加入特定源组的IGMPv3主机信息。 +display igmp group +//查看通过主机发送报告报文动态加入的IGMP组播组信息。 +display igmp group ssm-mapping +//查看根据SSM Mapping规则创建的组播组信息。 +display igmp group static +//查看IGMP静态组播组的配置信息。 +display igmp routing-table +//查看IGMP路由表信息。 +display igmp ssm-mapping +//查看IGMP SSM Mapping的配置信息。 +igmp +//进入IGMP视图。 +igmp enable +//在接口上使能IGMP功能。 +igmp global limit +//配置整个路由器上可以创建的所有IGMP表项的最大个数。 +igmp group-policy +//在接口上设置IGMP组播组的过滤器,限制主机能够加入的组播组范围。 +igmp ip-source-policy +//配置设备根据源地址对IGMP报告/离开报文进行过滤。 +igmp lastmember-queryinterval interval +//在接口上配置IGMP查询器在收到主机发送的IGMP离开报文时, +//发送IGMP特定组\源组查询报文的时间间隔。 +//缺省情况下,IGMP特定组\源组查询报文的发送时间间隔是1秒。 +igmp max-response-time 10 +//在接口上配置IGMP普遍组查询报文的最大响应时间。 +//缺省情况下,IGMP普遍组查询报文的最大响应时间是10秒。 +igmp on-demand +/* + 配置IGMP On-Demand功能. + 使查询器不主动发送查询报文,而是根据成员的要求来维护 + 成员关系。配置IGMP On-Demand功能后,接口上动态加 + 入的组播组永不超时。 +*/ +igmp prompt-leave +//在接口上配置组播组成员快速离开功能, +//即IGMP查询器在接收到成员主机发送的离开报文后不发送 +//特定组查询报文,立即删除该组表项。 +igmp proxy +//在接口上使能IGMP Proxy功能。 +igmp proxy backup +//配置接口成为具有IGMP Proxy功能的备份接口。 +igmp query ip-source-policy +//配置IGMP查询报文源地址过滤策略。 +igmp send-router-alert +//在接口上配置发送的IGMP报文中包含Router-Alert选项。 +igmp require-router-alert +//在接口上配置丢弃不包含Router-Alert选项的IGMP报文。 +igmp robust-count 2 +//在接口上设置IGMP查询器的健壮系数。 +//缺省情况下,IGMP查询器的健壮系数是2。 +igmp ssm-mapping enable +//在接口上使能SSM Mapping。 +igmp static-group +//在接口上配置静态组播组。 +igmp timer other-querier-present +//接口上设置其他IGMP查询器的存活时间。 +//缺省时,其他IGMP查询器的存活时间的值为125秒。 +//其他IGMP查询器的存活时间 = 健壮系数 × IGMP普遍查询报文发送间隔 +(1/2)× 最大查询响应时间。 +igmp timer query 60 +//在接口上配置IGMP普遍组查询报文的发送间隔。 +igmp version +//在接口上配置运行的IGMP版本。 +lastmember-queryinterval 1 +//配置IGMP查询器在收到主机发送的IGMP离开报文时, +//发送IGMP特定组\源组查询报文的时间间隔。 +//缺省情况下,IGMP特定组\源组查询报文的发送时间间隔是1秒。 +max-response-time 10 + //全局配置IGMP普遍组查询报文的最大响应时间。 + proxy source-lifetime 210 +//配置Proxy设备上生成(S,G)表项的超时时间。 +//缺省情况下,Proxy设备上生成(S,G)表项的超时时间是210秒。 +require-router-alert +//配置丢弃不包含Router-Alert选项的IGMP报文。 +reset igmp control-message counters +//清除IGMP报文统计数。 +reset igmp explicit-tracking +//删除接口上通过IGMP动态加入组播组的主机。 +robust-count 2 +//设置IGMP查询器的健壮系数。 +send-router-alert +//指定设备发送的IGMP报文中包含Router-Alert选项。 +ssm-mapping +//配置SSM Mapping的源组映射规则。 +timer other-querier-present +//设置其他IGMP查询器存活时间。 +timer query 60 +//全局配置IGMP普遍组查询报文的发送间隔。 +``` + +### IGMP Snooping +``` +igmp-snooping enable +//使能全局的IGMP Snooping功能。 +//在VLAN内,也需要使能Igmp Snooping功能。 +igmp-snooping group-limit +//指定接口能够学习的组播表项最大数目。 +igmp-snooping lastmember-queryinterval 1 +//配置VLAN内的最后成员查询时间间隔,即IGMP特定组查询报文发送时间间隔。 +igmp-snooping learning +//使能动态成员端口学习功能。 +//缺省情况下,动态成员端口学习功能处于使能状态。 +igmp-snooping max-response-time 10 +//在VLAN内配置IGMP普遍组查询的最大响应时间。 +igmp-snooping prompt-leave +//配置允许VLAN内的成员端口快速离开组播组。 +//成员端口快速离开是指当路由器收到主机发送的离开某个组 +//播组的IGMP Leave报文后,不等待成员端口老化,将接口 +//对应该组播组的转发表项直接删除,这样可以节约带宽和资源。 +igmp-snooping querier enable +//使能VLAN的IGMP Snooping查询器功能。 +igmp-snooping query-interval 60 +//配置VLAN内的IGMP Snooping普遍组查询报文发送时间间隔。 +igmp-snooping report-suppress +//配置在VLAN内对Report和Leave报文的抑制功能。 +igmp-snooping router-aging-time 180 +//配置VLAN内的动态路由器端口老化时间。 +igmp-snooping router-learning +//使能VLAN的路由器端口动态学习功能。 +igmp-snooping send-query enable +//配置设备响应二层拓扑变化向非路由器端口发送IGMP普遍组查询报文。 +igmp-snooping send-query source-address +//配置IGMP普遍组查询报文的源IP地址。 +//缺省情况下,IGMP普遍组查询报文的源IP地址为192.168.0.1。 +igmp-snooping ssm-mapping enable +//使能VLAN内的SSM Mapping功能。 +igmp-snooping static-router-port +//配置接口作为指定VLAN内的静态路由器端口。 +igmp-snooping suppress-time 10 +//配置VLAN内的IGMP报文抑制时间。 +//缺省情况下,VLAN内IGMP报文抑制时间为10秒。 + igmp-snooping version +//来配置IGMP Snooping在VLAN内可以处理的IGMP报文的版本。 +//缺省情况下,IGMP Snooping可以处理IGMPv1、IGMPv2版本的报文。 +multicast drop-unknown +//配置将VLAN内收到的未知组播流丢弃。 +//缺省情况下,收到未知组播流会在VLAN内广播。 +``` + +### PIM + +``` +display pim grafts +//anycast-rp +//来配置Anycast RP,并进入Anycast-RP视图 +auto-rp listening enable +//使能Auto-RP侦听功能,即路由器能够接收Auto-RP宣告和发现报文,从中学习RP信息。 +bsm semantic fragmentation +//使能BSR报文分片功能。 +bsr-policy +//限定合法BSR地址范围,使路由器丢弃来自该地址范围之外的自举报文,从而防止BSR欺骗。 +c-bsr +//配置C-BSR。 +c-bsr admin-scope +//使能路由器的BSR管理域功能。 +c-bsr global +//配置路由器为Global域中的C-BSR。 +c-bsr group +//配置C-BSR服务的管理域组地址范围。 +c-bsr hash-length 30 +//配置C-BSR的全局性哈希掩码长度。 +c-bsr holdtime 130 +//配置C-BSR等待接收BSR发送的Bootstrap报文的超时时间。 +c-bsr interval 60 +//来配置BSR发送Bootstrap报文的时间间隔。 +c-bsr priority 0 +//配置C-BSR的全局优先级。 +c-rp +//配置路由器向BSR通告自己为候选RP。 +c-rp advertisement-interval 60 +//配置C-RP周期性发送Advertisement报文的时间间隔。 +c-rp holdtime 150 +//配置BSR等待接收该C-RP发送Advertisement报文的超时时间。 +c-rp priority 0 +//配置C-RP的全局性优先级。 +crp-policy +//限定合法的C-RP地址范围及其服务的组播组地址范围,使 +//BSR丢弃来自该地址范围之外的C-RP报文,从而防止C-RP欺骗。 +display pim bsr-info +//查看PIM-SM域中BSR自举路由器的信息。 +display pim claimed-route +//查看PIM使用的单播路由信息。 +display pim grafts +//查看未确认的PIM-DM嫁接报文。 +display pim interface +//查看接口上的PIM信息。 +display pim neighbor +//查看PIM邻居信息。 +display pim routing-table +//查看PIM协议组播路由表的内容。 +display pim rp-info +//查看组播组对应的RP信息。 +graceful-restart +//使能PIM GR功能。 +graceful-restart period 120 +//配置PIM GR的最小周期。 +//缺省情况下,PIM GR最小周期为120秒。 +hello-option dr-priority 1 +//配置路由器竞选成为DR(Designated Router)的优先级。 +hello-option holdtime 105 +//配置路由器等待接收其PIM邻居发送Hello报文的超时时间。 +//缺省情况下,路由器等待接收其PIM邻居发送Hello报文的超时时间是105秒。 +hello-option lan-delay 500 +//配置共享网段上传输Prune报文的延迟时间。 +//缺省情况下,共享网段上传输Prune报文的延迟时间是500毫秒。 +hello-option neighbor-tracking +//使能邻居跟踪功能。 +hello-option override-interval 2500 +//配置Hello报文中携带的否决剪枝的时间间隔。 +//缺省情况下,Hello报文中携带的否决剪枝的时间间隔是2500毫秒。 +holdtime assert 180 +//配置路由器上所有PIM接口保持Assert状态的超时时间。 +//缺省情况下,路由器上所有PIM接口保持Assert状态的超时时间是180秒。 +holdtime join-prune 210 +/* + 配置Join/Prune报文的保持时间。接收到Join/Prune报 + 文的路由器依据该报文自身携带的保持时间来确定对应下游 + 接口保持加入或剪枝状态的时间。 + 缺省情况下,Join/Prune报文的保持时间是210秒。 +*/ +join-prune max-packet-length 8100 +//配置PIM-SM发送的Join/Prune报文的最大长度。 +join-prune periodic-messages queue-size 1020 +//配置PIM-SM每秒发送周期性Join/Prune报文中包含的表项数目。 +join-prune triggered-message-cache disable +//配置去使能实时触发的Join/Prune报文打包功能。 +local-address +//配置Anycast RP本地地址。 +neighbor-check +//使能PIM邻居检查功能。 +peer 10.2.2.2 fwd-msdp-sa +//配置Anycast RP对等体。 +//fwd-msdp-sa:指定将收到的MSDP SA报文提取源组信息 +//后封装成注册报文向Anycast RP对等体转发。 +pim bfd +//调整接口上的PIM BFD参数。 +pim bfd enable +//在接口上使能PIM BFD功能。 +pim bsr-boundary +//在接口上配置PIM-SM域的BSR边界。 +pim dm +//在接口上使能PIM-DM。 +pim hello-option dr-priority +//配置PIM接口竞选成为DR的优先级。 +pim hello-option holdtime 105 +//配置PIM接口等待接收PIM邻居发送Hello报文的超时时间。 + pim holdtime assert180 + //配置PIM接口保持Assert状态的超时时间。 + pim neighbor-policy + //用来过滤接口上的PIM邻居。 + pim require-genid + //配置PIM接口拒绝无Generation ID参数的Hello报文。 + //缺省情况下,PIM接口接收无Generation ID参数的Hello报文。 + pim silent + //在接口上使能PIM Silent功能。 + /* + 为了避免恶意主机模拟PIM Hello报文攻击路由器,可 + 以在直连用户的接口上执行pim silent命令,将接口设 + 置为PIM消极模式。接口进入消极状态后,禁止接收和转 + 发任何PIM协议报文,删除该接口上的所有PIM邻居以及 + PIM状态机,并自动成为DR。同时,该接口上的IGMP功 + 能不受影响。 + PIM silent仅适用于与用户主机网段直连的接口,且 + 网段上只能连接一台PIM路由器。 +*/ +pim sm +//在接口上使能PIM-SM。 +pim state-refresh-capable +//在接口上使能PIM-DM状态刷新。 +//缺省情况下,PIM-DM状态刷新功能已使能。 +pim timer dr-switch-delay +//在接口上使能PIM DR切换延迟功能 + pim timer graft-retry 3 +//在接口上配置重传嫁接(Graft)报文的时间间隔。 +pim timer hello 30 +//在接口上配置发送Hello报文的时间间隔。 + probe-interval 5 +//配置路由器向RP发送Probe报文(空注册报文)的时间间隔。 +register-header-checksum +//配置仅根据Register注册报文头信息来计算校验和。 +register-source +//指定源DR发送注册报文的源地址。 +register-suppression-timeout 60 +//来配置路由器保持注册抑制状态的超时时间。 +source-lifetime 210 +//配置路由器上(S,G)或者(*,G)表项的超时时间。 +spt-switch-threshold + //设置组成员端DR加入SPT的组播报文速率阈值。 +//缺省情况下,从RPT收到第一个组播数据包后立即进行SPT切换。 +state-refresh-interval60 +//配置路由器发送PIM状态刷新报文(State-Refresh)的时间间隔。 +state-refresh-rate-limit 30 +//配置接收下一个PIM状态刷新报文前必须经过的最小时间长度。 + state-refresh-ttl 255 +//配置发送PIM状态刷新报文的TTL值。 +static-rp +//配置静态RP。 + timer spt-switch 15 + //配置在RPT切换到SPT前检查组播数据速率是否达到阈值的时间间隔。 +``` \ No newline at end of file diff --git a/计算机网络实验.md/IPv6-DHCPv6.md b/计算机网络实验/IPv6-DHCPv6.md similarity index 100% rename from 计算机网络实验.md/IPv6-DHCPv6.md rename to 计算机网络实验/IPv6-DHCPv6.md diff --git a/计算机网络实验.md/IPv6-ICMPv6.md b/计算机网络实验/IPv6-ICMPv6.md similarity index 100% rename from 计算机网络实验.md/IPv6-ICMPv6.md rename to 计算机网络实验/IPv6-ICMPv6.md diff --git a/计算机网络实验.md/IPv6-NS.md b/计算机网络实验/IPv6-NS.md similarity index 100% rename from 计算机网络实验.md/IPv6-NS.md rename to 计算机网络实验/IPv6-NS.md diff --git a/计算机网络实验.md/IPv6-OSPFv3.md b/计算机网络实验/IPv6-OSPFv3.md similarity index 100% rename from 计算机网络实验.md/IPv6-OSPFv3.md rename to 计算机网络实验/IPv6-OSPFv3.md diff --git a/计算机网络实验.md/IPv6.md b/计算机网络实验/IPv6.md similarity index 100% rename from 计算机网络实验.md/IPv6.md rename to 计算机网络实验/IPv6.md diff --git a/计算机网络实验.md/OSPF协议.md b/计算机网络实验/OSPF协议.md similarity index 100% rename from 计算机网络实验.md/OSPF协议.md rename to 计算机网络实验/OSPF协议.md diff --git a/计算机网络实验.md/RIP协议.md b/计算机网络实验/RIP协议.md similarity index 100% rename from 计算机网络实验.md/RIP协议.md rename to 计算机网络实验/RIP协议.md diff --git a/计算机网络实验.md/STP 协议.md b/计算机网络实验/STP 协议.md similarity index 100% rename from 计算机网络实验.md/STP 协议.md rename to 计算机网络实验/STP 协议.md diff --git a/计算机网络实验.md/VLAN技术.md b/计算机网络实验/VLAN技术.md similarity index 100% rename from 计算机网络实验.md/VLAN技术.md rename to 计算机网络实验/VLAN技术.md diff --git a/计算机网络实验.md/image/ASExternal-LSA通告格式.png b/计算机网络实验/image/ASExternal-LSA通告格式.png similarity index 100% rename from 计算机网络实验.md/image/ASExternal-LSA通告格式.png rename to 计算机网络实验/image/ASExternal-LSA通告格式.png diff --git a/计算机网络实验.md/image/BGPOPEN报文格式.png b/计算机网络实验/image/BGPOPEN报文格式.png similarity index 100% rename from 计算机网络实验.md/image/BGPOPEN报文格式.png rename to 计算机网络实验/image/BGPOPEN报文格式.png diff --git a/计算机网络实验.md/image/BGP报文头实例.png b/计算机网络实验/image/BGP报文头实例.png similarity index 100% rename from 计算机网络实验.md/image/BGP报文头实例.png rename to 计算机网络实验/image/BGP报文头实例.png diff --git a/计算机网络实验.md/image/BGP报文头格式.png b/计算机网络实验/image/BGP报文头格式.png similarity index 100% rename from 计算机网络实验.md/image/BGP报文头格式.png rename to 计算机网络实验/image/BGP报文头格式.png diff --git a/计算机网络实验.md/image/BGP状态机.png b/计算机网络实验/image/BGP状态机.png similarity index 100% rename from 计算机网络实验.md/image/BGP状态机.png rename to 计算机网络实验/image/BGP状态机.png diff --git a/计算机网络实验.md/image/BGP路由策略处理过程.png b/计算机网络实验/image/BGP路由策略处理过程.png similarity index 100% rename from 计算机网络实验.md/image/BGP路由策略处理过程.png rename to 计算机网络实验/image/BGP路由策略处理过程.png diff --git a/计算机网络实验.md/image/BGP路由衰减.png b/计算机网络实验/image/BGP路由衰减.png similarity index 100% rename from 计算机网络实验.md/image/BGP路由衰减.png rename to 计算机网络实验/image/BGP路由衰减.png diff --git a/计算机网络实验.md/image/ICMPv6报文实例.png b/计算机网络实验/image/ICMPv6报文实例.png similarity index 100% rename from 计算机网络实验.md/image/ICMPv6报文实例.png rename to 计算机网络实验/image/ICMPv6报文实例.png diff --git a/计算机网络实验.md/image/ICMPv6报文格式.png b/计算机网络实验/image/ICMPv6报文格式.png similarity index 100% rename from 计算机网络实验.md/image/ICMPv6报文格式.png rename to 计算机网络实验/image/ICMPv6报文格式.png diff --git a/计算机网络实验/image/IGMPproxy备份机制.png b/计算机网络实验/image/IGMPproxy备份机制.png new file mode 100644 index 00000000..892242ac Binary files /dev/null and b/计算机网络实验/image/IGMPproxy备份机制.png differ diff --git a/计算机网络实验/image/IGMPsnooping端口.png b/计算机网络实验/image/IGMPsnooping端口.png new file mode 100644 index 00000000..0785754d Binary files /dev/null and b/计算机网络实验/image/IGMPsnooping端口.png differ diff --git a/计算机网络实验/image/IGMPv1报文实例.png b/计算机网络实验/image/IGMPv1报文实例.png new file mode 100644 index 00000000..cb480169 Binary files /dev/null and b/计算机网络实验/image/IGMPv1报文实例.png differ diff --git a/计算机网络实验/image/IGMPv1报文格式.png b/计算机网络实验/image/IGMPv1报文格式.png new file mode 100644 index 00000000..67438caf Binary files /dev/null and b/计算机网络实验/image/IGMPv1报文格式.png differ diff --git a/计算机网络实验/image/IGMPv1新成员加入机制.png b/计算机网络实验/image/IGMPv1新成员加入机制.png new file mode 100644 index 00000000..fa9dbf83 Binary files /dev/null and b/计算机网络实验/image/IGMPv1新成员加入机制.png differ diff --git a/计算机网络实验/image/IGMPv1查询响应机制.png b/计算机网络实验/image/IGMPv1查询响应机制.png new file mode 100644 index 00000000..6c113418 Binary files /dev/null and b/计算机网络实验/image/IGMPv1查询响应机制.png differ diff --git a/计算机网络实验/image/IGMPv2报文实例.png b/计算机网络实验/image/IGMPv2报文实例.png new file mode 100644 index 00000000..935c6bfb Binary files /dev/null and b/计算机网络实验/image/IGMPv2报文实例.png differ diff --git a/计算机网络实验/image/IGMPv2报文格式.png b/计算机网络实验/image/IGMPv2报文格式.png new file mode 100644 index 00000000..918d18f4 Binary files /dev/null and b/计算机网络实验/image/IGMPv2报文格式.png differ diff --git a/计算机网络实验/image/IGMPv2查询器选举机制.png b/计算机网络实验/image/IGMPv2查询器选举机制.png new file mode 100644 index 00000000..495ebcf6 Binary files /dev/null and b/计算机网络实验/image/IGMPv2查询器选举机制.png differ diff --git a/计算机网络实验/image/IGMPv2离开组机制.png b/计算机网络实验/image/IGMPv2离开组机制.png new file mode 100644 index 00000000..41316dee Binary files /dev/null and b/计算机网络实验/image/IGMPv2离开组机制.png differ diff --git a/计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png b/计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png new file mode 100644 index 00000000..9be10b03 Binary files /dev/null and b/计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png differ diff --git a/计算机网络实验/image/IGMPv3成员报告报文实例.png b/计算机网络实验/image/IGMPv3成员报告报文实例.png new file mode 100644 index 00000000..6c019536 Binary files /dev/null and b/计算机网络实验/image/IGMPv3成员报告报文实例.png differ diff --git a/计算机网络实验/image/IGMPv3成员报告报文格式.png b/计算机网络实验/image/IGMPv3成员报告报文格式.png new file mode 100644 index 00000000..26edd814 Binary files /dev/null and b/计算机网络实验/image/IGMPv3成员报告报文格式.png differ diff --git a/计算机网络实验/image/IGMPv3查询报文实例.png b/计算机网络实验/image/IGMPv3查询报文实例.png new file mode 100644 index 00000000..9b1e283a Binary files /dev/null and b/计算机网络实验/image/IGMPv3查询报文实例.png differ diff --git a/计算机网络实验/image/IGMPv3查询报文格式.png b/计算机网络实验/image/IGMPv3查询报文格式.png new file mode 100644 index 00000000..6f691d49 Binary files /dev/null and b/计算机网络实验/image/IGMPv3查询报文格式.png differ diff --git a/计算机网络实验.md/image/IPV6 PMTU原理.png b/计算机网络实验/image/IPV6 PMTU原理.png similarity index 100% rename from 计算机网络实验.md/image/IPV6 PMTU原理.png rename to 计算机网络实验/image/IPV6 PMTU原理.png diff --git a/计算机网络实验.md/image/IPv6两端同时重复检测.png b/计算机网络实验/image/IPv6两端同时重复检测.png similarity index 100% rename from 计算机网络实验.md/image/IPv6两端同时重复检测.png rename to 计算机网络实验/image/IPv6两端同时重复检测.png diff --git a/计算机网络实验.md/image/IPv6全球单播地址.png b/计算机网络实验/image/IPv6全球单播地址.png similarity index 100% rename from 计算机网络实验.md/image/IPv6全球单播地址.png rename to 计算机网络实验/image/IPv6全球单播地址.png diff --git a/计算机网络实验.md/image/IPv6唯一本地地址.png b/计算机网络实验/image/IPv6唯一本地地址.png similarity index 100% rename from 计算机网络实验.md/image/IPv6唯一本地地址.png rename to 计算机网络实验/image/IPv6唯一本地地址.png diff --git a/计算机网络实验.md/image/IPv6地址生命周期.png b/计算机网络实验/image/IPv6地址生命周期.png similarity index 100% rename from 计算机网络实验.md/image/IPv6地址生命周期.png rename to 计算机网络实验/image/IPv6地址生命周期.png diff --git a/计算机网络实验.md/image/IPv6地址生成.png b/计算机网络实验/image/IPv6地址生成.png similarity index 100% rename from 计算机网络实验.md/image/IPv6地址生成.png rename to 计算机网络实验/image/IPv6地址生成.png diff --git a/计算机网络实验.md/image/IPv6地址解析过程.png b/计算机网络实验/image/IPv6地址解析过程.png similarity index 100% rename from 计算机网络实验.md/image/IPv6地址解析过程.png rename to 计算机网络实验/image/IPv6地址解析过程.png diff --git a/计算机网络实验.md/image/IPv6基本报文头.png b/计算机网络实验/image/IPv6基本报文头.png similarity index 100% rename from 计算机网络实验.md/image/IPv6基本报文头.png rename to 计算机网络实验/image/IPv6基本报文头.png diff --git a/计算机网络实验.md/image/IPv6子网路由器任播地址.png b/计算机网络实验/image/IPv6子网路由器任播地址.png similarity index 100% rename from 计算机网络实验.md/image/IPv6子网路由器任播地址.png rename to 计算机网络实验/image/IPv6子网路由器任播地址.png diff --git a/计算机网络实验.md/image/IPv6扩展头包.png b/计算机网络实验/image/IPv6扩展头包.png similarity index 100% rename from 计算机网络实验.md/image/IPv6扩展头包.png rename to 计算机网络实验/image/IPv6扩展头包.png diff --git a/计算机网络实验.md/image/IPv6报文实例.png b/计算机网络实验/image/IPv6报文实例.png similarity index 100% rename from 计算机网络实验.md/image/IPv6报文实例.png rename to 计算机网络实验/image/IPv6报文实例.png diff --git a/计算机网络实验.md/image/IPv6组播地址格式.png b/计算机网络实验/image/IPv6组播地址格式.png similarity index 100% rename from 计算机网络实验.md/image/IPv6组播地址格式.png rename to 计算机网络实验/image/IPv6组播地址格式.png diff --git a/计算机网络实验/image/IPv6组播地址格式2.png b/计算机网络实验/image/IPv6组播地址格式2.png new file mode 100644 index 00000000..fbfde52b Binary files /dev/null and b/计算机网络实验/image/IPv6组播地址格式2.png differ diff --git a/计算机网络实验.md/image/IPv6路由发现功能.png b/计算机网络实验/image/IPv6路由发现功能.png similarity index 100% rename from 计算机网络实验.md/image/IPv6路由发现功能.png rename to 计算机网络实验/image/IPv6路由发现功能.png diff --git a/计算机网络实验.md/image/IPv6路由通告RA报文.png b/计算机网络实验/image/IPv6路由通告RA报文.png similarity index 100% rename from 计算机网络实验.md/image/IPv6路由通告RA报文.png rename to 计算机网络实验/image/IPv6路由通告RA报文.png diff --git a/计算机网络实验.md/image/IPv6路由通告RS报文.png b/计算机网络实验/image/IPv6路由通告RS报文.png similarity index 100% rename from 计算机网络实验.md/image/IPv6路由通告RS报文.png rename to 计算机网络实验/image/IPv6路由通告RS报文.png diff --git a/计算机网络实验.md/image/IPv6邻居状态迁移.png b/计算机网络实验/image/IPv6邻居状态迁移.png similarity index 100% rename from 计算机网络实验.md/image/IPv6邻居状态迁移.png rename to 计算机网络实验/image/IPv6邻居状态迁移.png diff --git a/计算机网络实验.md/image/IPv6重定向.png b/计算机网络实验/image/IPv6重定向.png similarity index 100% rename from 计算机网络实验.md/image/IPv6重定向.png rename to 计算机网络实验/image/IPv6重定向.png diff --git a/计算机网络实验.md/image/IPv6链路本地地址.png b/计算机网络实验/image/IPv6链路本地地址.png similarity index 100% rename from 计算机网络实验.md/image/IPv6链路本地地址.png rename to 计算机网络实验/image/IPv6链路本地地址.png diff --git a/计算机网络实验.md/image/Keepalive报文实例.png b/计算机网络实验/image/Keepalive报文实例.png similarity index 100% rename from 计算机网络实验.md/image/Keepalive报文实例.png rename to 计算机网络实验/image/Keepalive报文实例.png diff --git a/计算机网络实验.md/image/LSAHeader.png b/计算机网络实验/image/LSAHeader.png similarity index 100% rename from 计算机网络实验.md/image/LSAHeader.png rename to 计算机网络实验/image/LSAHeader.png diff --git a/计算机网络实验.md/image/NetworkLSA通告格式.png b/计算机网络实验/image/NetworkLSA通告格式.png similarity index 100% rename from 计算机网络实验.md/image/NetworkLSA通告格式.png rename to 计算机网络实验/image/NetworkLSA通告格式.png diff --git a/计算机网络实验.md/image/Notification报文实例.png b/计算机网络实验/image/Notification报文实例.png similarity index 100% rename from 计算机网络实验.md/image/Notification报文实例.png rename to 计算机网络实验/image/Notification报文实例.png diff --git a/计算机网络实验.md/image/Notification报文格式.png b/计算机网络实验/image/Notification报文格式.png similarity index 100% rename from 计算机网络实验.md/image/Notification报文格式.png rename to 计算机网络实验/image/Notification报文格式.png diff --git a/计算机网络实验.md/image/OPEN报文实例.png b/计算机网络实验/image/OPEN报文实例.png similarity index 100% rename from 计算机网络实验.md/image/OPEN报文实例.png rename to 计算机网络实验/image/OPEN报文实例.png diff --git a/计算机网络实验.md/image/OSPFDD报文实例.png b/计算机网络实验/image/OSPFDD报文实例.png similarity index 100% rename from 计算机网络实验.md/image/OSPFDD报文实例.png rename to 计算机网络实验/image/OSPFDD报文实例.png diff --git a/计算机网络实验.md/image/OSPFDD报文格式.png b/计算机网络实验/image/OSPFDD报文格式.png similarity index 100% rename from 计算机网络实验.md/image/OSPFDD报文格式.png rename to 计算机网络实验/image/OSPFDD报文格式.png diff --git a/计算机网络实验.md/image/OSPFLSACK报文实例.png b/计算机网络实验/image/OSPFLSACK报文实例.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSACK报文实例.png rename to 计算机网络实验/image/OSPFLSACK报文实例.png diff --git a/计算机网络实验.md/image/OSPFLSACK报文格式.png b/计算机网络实验/image/OSPFLSACK报文格式.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSACK报文格式.png rename to 计算机网络实验/image/OSPFLSACK报文格式.png diff --git a/计算机网络实验.md/image/OSPFLSR报文实例.png b/计算机网络实验/image/OSPFLSR报文实例.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSR报文实例.png rename to 计算机网络实验/image/OSPFLSR报文实例.png diff --git a/计算机网络实验.md/image/OSPFLSR报文格式.png b/计算机网络实验/image/OSPFLSR报文格式.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSR报文格式.png rename to 计算机网络实验/image/OSPFLSR报文格式.png diff --git a/计算机网络实验.md/image/OSPFLSU报文实例.png b/计算机网络实验/image/OSPFLSU报文实例.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSU报文实例.png rename to 计算机网络实验/image/OSPFLSU报文实例.png diff --git a/计算机网络实验.md/image/OSPFLSU报文格式.png b/计算机网络实验/image/OSPFLSU报文格式.png similarity index 100% rename from 计算机网络实验.md/image/OSPFLSU报文格式.png rename to 计算机网络实验/image/OSPFLSU报文格式.png diff --git a/计算机网络实验.md/image/OSPFhello报文.png b/计算机网络实验/image/OSPFhello报文.png similarity index 100% rename from 计算机网络实验.md/image/OSPFhello报文.png rename to 计算机网络实验/image/OSPFhello报文.png diff --git a/计算机网络实验.md/image/OSPF五种链路状态描述类型.png b/计算机网络实验/image/OSPF五种链路状态描述类型.png similarity index 100% rename from 计算机网络实验.md/image/OSPF五种链路状态描述类型.png rename to 计算机网络实验/image/OSPF五种链路状态描述类型.png diff --git a/计算机网络实验.md/image/OSPF五种链路通告类型.png b/计算机网络实验/image/OSPF五种链路通告类型.png similarity index 100% rename from 计算机网络实验.md/image/OSPF五种链路通告类型.png rename to 计算机网络实验/image/OSPF五种链路通告类型.png diff --git a/计算机网络实验.md/image/OSPF报文.jpg b/计算机网络实验/image/OSPF报文.jpg similarity index 100% rename from 计算机网络实验.md/image/OSPF报文.jpg rename to 计算机网络实验/image/OSPF报文.jpg diff --git a/计算机网络实验.md/image/OSPF报文交互过程.png b/计算机网络实验/image/OSPF报文交互过程.png similarity index 100% rename from 计算机网络实验.md/image/OSPF报文交互过程.png rename to 计算机网络实验/image/OSPF报文交互过程.png diff --git a/计算机网络实验.md/image/OSPF报文头.png b/计算机网络实验/image/OSPF报文头.png similarity index 100% rename from 计算机网络实验.md/image/OSPF报文头.png rename to 计算机网络实验/image/OSPF报文头.png diff --git a/计算机网络实验.md/image/OSPF邻居状态机.png b/计算机网络实验/image/OSPF邻居状态机.png similarity index 100% rename from 计算机网络实验.md/image/OSPF邻居状态机.png rename to 计算机网络实验/image/OSPF邻居状态机.png diff --git a/计算机网络实验/image/PIM-GR示意图.png b/计算机网络实验/image/PIM-GR示意图.png new file mode 100644 index 00000000..38e97e7a Binary files /dev/null and b/计算机网络实验/image/PIM-GR示意图.png differ diff --git a/计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png b/计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png new file mode 100644 index 00000000..41b297d0 Binary files /dev/null and b/计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png differ diff --git a/计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png b/计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png new file mode 100644 index 00000000..9ab7df5a Binary files /dev/null and b/计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png differ diff --git a/计算机网络实验.md/image/PPP帧格式.jpg b/计算机网络实验/image/PPP帧格式.jpg similarity index 100% rename from 计算机网络实验.md/image/PPP帧格式.jpg rename to 计算机网络实验/image/PPP帧格式.jpg diff --git a/计算机网络实验.md/image/PPP状态图.jpg b/计算机网络实验/image/PPP状态图.jpg similarity index 100% rename from 计算机网络实验.md/image/PPP状态图.jpg rename to 计算机网络实验/image/PPP状态图.jpg diff --git a/计算机网络实验.md/image/PPP状态图.png b/计算机网络实验/image/PPP状态图.png similarity index 100% rename from 计算机网络实验.md/image/PPP状态图.png rename to 计算机网络实验/image/PPP状态图.png diff --git a/计算机网络实验.md/image/Refresh报文实例.png b/计算机网络实验/image/Refresh报文实例.png similarity index 100% rename from 计算机网络实验.md/image/Refresh报文实例.png rename to 计算机网络实验/image/Refresh报文实例.png diff --git a/计算机网络实验.md/image/Refresh报文格式.png b/计算机网络实验/image/Refresh报文格式.png similarity index 100% rename from 计算机网络实验.md/image/Refresh报文格式.png rename to 计算机网络实验/image/Refresh报文格式.png diff --git a/计算机网络实验.md/image/Router-LSA通告格式.png b/计算机网络实验/image/Router-LSA通告格式.png similarity index 100% rename from 计算机网络实验.md/image/Router-LSA通告格式.png rename to 计算机网络实验/image/Router-LSA通告格式.png diff --git a/计算机网络实验.md/image/STP报文实例.png b/计算机网络实验/image/STP报文实例.png similarity index 100% rename from 计算机网络实验.md/image/STP报文实例.png rename to 计算机网络实验/image/STP报文实例.png diff --git a/计算机网络实验.md/image/STP报文格式.png b/计算机网络实验/image/STP报文格式.png similarity index 100% rename from 计算机网络实验.md/image/STP报文格式.png rename to 计算机网络实验/image/STP报文格式.png diff --git a/计算机网络实验.md/image/Summary-LSA通告格式.png b/计算机网络实验/image/Summary-LSA通告格式.png similarity index 100% rename from 计算机网络实验.md/image/Summary-LSA通告格式.png rename to 计算机网络实验/image/Summary-LSA通告格式.png diff --git a/计算机网络实验.md/image/UPDATE报文实例.png b/计算机网络实验/image/UPDATE报文实例.png similarity index 100% rename from 计算机网络实验.md/image/UPDATE报文实例.png rename to 计算机网络实验/image/UPDATE报文实例.png diff --git a/计算机网络实验.md/image/UPDATE报文格式.png b/计算机网络实验/image/UPDATE报文格式.png similarity index 100% rename from 计算机网络实验.md/image/UPDATE报文格式.png rename to 计算机网络实验/image/UPDATE报文格式.png diff --git a/计算机网络实验.md/image/VLAN帧格式.jpg b/计算机网络实验/image/VLAN帧格式.jpg similarity index 100% rename from 计算机网络实验.md/image/VLAN帧格式.jpg rename to 计算机网络实验/image/VLAN帧格式.jpg diff --git a/计算机网络实验.md/image/VLAN数据帧格式.png b/计算机网络实验/image/VLAN数据帧格式.png similarity index 100% rename from 计算机网络实验.md/image/VLAN数据帧格式.png rename to 计算机网络实验/image/VLAN数据帧格式.png diff --git a/计算机网络实验.md/image/VLAN聚合图1.gif b/计算机网络实验/image/VLAN聚合图1.gif similarity index 100% rename from 计算机网络实验.md/image/VLAN聚合图1.gif rename to 计算机网络实验/image/VLAN聚合图1.gif diff --git a/计算机网络实验.md/image/VLAN聚合图2.gif b/计算机网络实验/image/VLAN聚合图2.gif similarity index 100% rename from 计算机网络实验.md/image/VLAN聚合图2.gif rename to 计算机网络实验/image/VLAN聚合图2.gif diff --git a/计算机网络实验.md/image/ipv6重复地址检测原理.png b/计算机网络实验/image/ipv6重复地址检测原理.png similarity index 100% rename from 计算机网络实验.md/image/ipv6重复地址检测原理.png rename to 计算机网络实验/image/ipv6重复地址检测原理.png diff --git a/计算机网络实验.md/image/ospfhello报文格式.png b/计算机网络实验/image/ospfhello报文格式.png similarity index 100% rename from 计算机网络实验.md/image/ospfhello报文格式.png rename to 计算机网络实验/image/ospfhello报文格式.png diff --git a/计算机网络实验.md/image/不同设备VLAN内互访.gif b/计算机网络实验/image/不同设备VLAN内互访.gif similarity index 100% rename from 计算机网络实验.md/image/不同设备VLAN内互访.gif rename to 计算机网络实验/image/不同设备VLAN内互访.gif diff --git a/计算机网络实验.md/image/同设备VLAN内互访.gif b/计算机网络实验/image/同设备VLAN内互访.gif similarity index 100% rename from 计算机网络实验.md/image/同设备VLAN内互访.gif rename to 计算机网络实验/image/同设备VLAN内互访.gif diff --git a/计算机网络实验.md/image/同设备VLAN间互访.gif b/计算机网络实验/image/同设备VLAN间互访.gif similarity index 100% rename from 计算机网络实验.md/image/同设备VLAN间互访.gif rename to 计算机网络实验/image/同设备VLAN间互访.gif diff --git a/计算机网络实验.md/image/四中网络类型.png b/计算机网络实验/image/四中网络类型.png similarity index 100% rename from 计算机网络实验.md/image/四中网络类型.png rename to 计算机网络实验/image/四中网络类型.png diff --git a/计算机网络实验.md/image/团体属性说明.png b/计算机网络实验/image/团体属性说明.png similarity index 100% rename from 计算机网络实验.md/image/团体属性说明.png rename to 计算机网络实验/image/团体属性说明.png diff --git a/计算机网络实验.md/image/端口聚合.jpg b/计算机网络实验/image/端口聚合.jpg similarity index 100% rename from 计算机网络实验.md/image/端口聚合.jpg rename to 计算机网络实验/image/端口聚合.jpg diff --git a/计算机网络实验.md/image/网络类型NBMA.png b/计算机网络实验/image/网络类型NBMA.png similarity index 100% rename from 计算机网络实验.md/image/网络类型NBMA.png rename to 计算机网络实验/image/网络类型NBMA.png diff --git a/计算机网络实验.md/image/跨设备VLAN间互访.gif b/计算机网络实验/image/跨设备VLAN间互访.gif similarity index 100% rename from 计算机网络实验.md/image/跨设备VLAN间互访.gif rename to 计算机网络实验/image/跨设备VLAN间互访.gif diff --git a/计算机网络实验/组播-IGMP协议.md b/计算机网络实验/组播-IGMP协议.md new file mode 100644 index 00000000..89f57c37 --- /dev/null +++ b/计算机网络实验/组播-IGMP协议.md @@ -0,0 +1,432 @@ +# IGMP协议 + +## 1 IGM概述 + +### 简介 +IGMP(Internet Group Management Protocol,互联网组管理协议)是TCP/IP协议族中负责IPv4组播成员管理的协议。IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。 + +### 目的 +IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。 + +## 2.1 IGMPv1报文 + + +### ICMPv1报文类型 + +* 成员关系查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。 +* 成员关系报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。 + +### IGMPv1报文格式 + +![](image/IGMPv1报文格式.png) + +|字段| 说明| +|-|-| +|Version| IGMP版本,值为1。| +|Type| 报文类型。该字段有以下两种取值:0x11:表示成员关系查询报文。0x12:表示成员关系报告报文。| +|Unused| 在IGMPv1中,该字段在发送时被设为0,并在接收时被忽略。| +|Checksum| IGMP报文的校验和。校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。| +|Group Address| 组播组地址。在普遍组查询报文中,该字段设为0;在成员报告报文中,该字段为成员加入的组播组地址。| + +### IGMPv1报文实例 + +![](image/IGMPv1报文实例.png) + +## 2.2 IBMPv2报文 +### IGMPv2报文变化 + +与IGMPv1相比,IGMPv2的变化如下: + +* 除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文: + * 成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。 + * 特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。 +* IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。 + +### IGMPv2报文格式 + +![](image/IGMPv2报文格式.png) + +* Type:报文类型。该字段有以下四种取值: + * 0x11:表示查询报文。IGMPv2的查询报文包括普遍组查询报文和特定组查询报文两类。 + * 0x12:表示IGMPv1成员报告报文。 + * 0x16:表示IGMPv2成员报告报文。 + * 0x17:表示成员离开报文。 + +* Max Response Time:最大响应时间。 + + 成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。该字段仅在IGMP查询报文中有效。 + +* Group Address:组播组地址。 + + * 在普遍组查询报文中,该字段设为0.0.0.0。 + * 在特定组查询报文中,该字段为要查询的组播组地址。 + * 在成员报告报文和离开报文中,该字段为成员要加入或离开的组播组地址。 + +### IGMPv2报文实例 + +![](image/IGMPv2报文实例.png) + +## 2.3 IGMPv3报文 + +### IGMPv3报文变化 + +与IGMPv2相比,IGMPv3报文的变化如下: + +* IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。 +* 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。 +* 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2…)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2…)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。 +* 在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。 + +### IGMPv3查询报文格式 + +![](image/IGMPv3查询报文格式.png) + +IGMPv3查询报文字段说明: + +|字段 |说明| +|-|-| +|Type |报文类型,取值为0x11。| +|Max Response Code |最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。| +|Checksum |IGMP报文的校验和。| +|Group Address |组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。| +|Resv |保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。| +|S |该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询器选举过程和路由器的主机侧处理过程。| +|QRV |如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。| +|QQIC |IGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。| +|Number of Sources |报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。| +|Source Address |组播源地址,其数量受到Number of Sources字段值大小的限制。| + +### IGMPv3查询报文实例 + +![IGMPv3查询报文](image/IGMPv3查询报文实例.png) + +### IGMPv3成员报告报文 + +IGMPv3成员报告报文格式 + +![IGMPv3成员报告报文格式](image/IGMPv3成员报告报文格式.png) + +字段解释: + +|字段 |说明| +|-|-| +|Type |报文类型,取值为0x22。| +|Reserved |保留字段。| +|Checksum |IGMP报文的校验和。| +|Number of Group Records |报文中包含的组记录的数量。| +|Group Record |组记录。| + + +![Grounp Record字段格式](image/IGMPv3成员报告报文GroupRecord.png) + +字段解释: +|字段|说明| +|-|-| +|Record Type|组记录的类型。共分为三大类。当前状态报告。用于对查询报文进行响应,通告自己目前的状态,共两种:一种是MODE_IS_INCLUDE,表示接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该报文无效;另一种是MODE_IS_EXCLUDE,表示不接收源地址列表包含的源发往该组的组播数据。过滤模式改变报告。当组和源的关系在INCLUDE和EXCLUDE之间切换时,会通告过滤模式发生变化,共两种:一种是CHANGE_TO_INCLUDE_MODE,表示过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组;另一种是CHANGE_TO_EXCLUDE_MODE,表示过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表包含的新组播源发往该组的组播数据。源列表改变报告。当指定源发生改变时,会通告源列表发生变化,共两种:一种是ALLOW_NEW_SOURCES,表示在现有的基础上,需要接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源;另一种是BLOCK_OLD_SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。 +|Aux Data Len|辅助数据长度。在IGMPv3的报告报文中,不存在辅助数据字段,该字段设为0。| +|Number of Sources|本记录中包含的源地址数量。| +|Multicast Address|组播组地址。| +|Sources Address|组播源地址。| +|Auxiliary Data|辅助数据。预留给IGMP后续扩展或后续版本。在IGMPv3的报告报文中,不存在辅助数据。| + + +### IGMPv3成员报告报文实例 + +![IGMPv3报告报文示例](image/IGMPv3成员报告报文实例.png) + + + +## 3.1 IGMPv1工作原理 + +IGMPv1协议主要基于查询和响应机制完成组播组管理。当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,因此只需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier)。在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。 + +IGMPv1的工作机制可以分为:普遍组查询和响应机制、新成员加入机制和组成员离开机制三个方面。 + +### 普遍组查询响应机制 + +通过普遍组查询和响应,IGMP查询器可以了解到该网段内哪些组播组存在成员。 + + +![IGMPv1查询和响应示意图](image/IGMPv1查询响应机制.png) + +普遍组查询响应过程如下: + +1. IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;收到该查询报文的组成员启动定时器。 + + 普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。 + + + +2. 第一个定时器超时的组成员发送针对该组的报告报文。 + + 假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。 + + + +3. IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,则由组播路由协议生成(*,G1)组播转发表项,“ * ”代表任意组播源。网络中一旦有组播组G1的数据到达路由器,将向该网段转发。 + + +### 新组成员加入机制 + + +![新组成员加入示意图](image/IGMPv1新成员加入机制.png) + +主机HostC加入组播组G2的过程如下: + +1. 主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入。 +2. IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生成组播转发项(*,G2)。网络中一旦有G2的数据到达路由器,将向该网段转发。 + +### 组成员离开机制 +IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。 + +* 假设HostA想要退出组播组G1 + + HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。 + +* 假设HostC想要退出组播组G2 + + HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒)后,删除G2所对应的组播转发表项。 + +## 3.2 IGMPv2工作原理 + +IGMPv2的工作机制与IGMPv1基本相同,最大的不同之处在于IGMPv2增加了离开组机制。成员主机离开组播组时,会主动发送成员离开报文通知IGMP查询器;IGMP查询器收到成员离开报文后,会连续发送特定组查询报文,询问该组播组是否还存在组成员。如果在一段时间内没有收到成员主机发送的报告报文,IGMP查询器将不再维护该组的组成员关系。IGMPv2可以使IGMP查询器及时了解到网段内哪些组播组已不存在成员,从而及时更新组成员关系,减少网络中冗余的组播流量。 + +在工作机制上,与IGMPv1相比,IGMPv2增加了查询器选举和离开组机制。 + +### 查询器选举机制 + + +IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。 + + + +![查询器选举机制](image/IGMPv2查询器选举机制.png) + +在IGMPv2中,查询器的选举过程如下: + +1. 最初,所有运行IGMPv2的组播路由器(RouterA和RouterB)都认为自己是查询器,向本网段内的所有主机和组播路由器发送普遍组查询报文。 + + RouterA和RouterB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的组播路由器将成为查询器,其他组播路由器成为非查询器(Non-Querier)。 + + +2. 此后,将由IGMP查询器(RouterA)向本网段内的所有主机和其他组播路由器发送普遍组查询报文,而非查询器(RouterB)则不再发送普遍组查询报文。 + + 非查询器(RouterB)上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。 + +### 离开组机制: + + +![离开组示意图](image/IGMPv2离开组机制.png) + +在IGMPv2中,主机HostA离开组播组G1的过程如下: + +1. HostA向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。 + +2. 查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。 + +3. 该网段内还存在组G1的其他成员,这些成员在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。 + + 如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达查询器时,查询器将不会向下游转发。 + +## 3.3 IGMPv3工作原理 + +在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力。 + +### 特定组加入 + +IGMPv3的成员报告报文的目的地址为224.0.0.22(表示同一网段所有使能IGMPv3的路由器)。通过在报告报文中携带组记录,主机在加入组播组的同时,能够明确要求接收或不接收特定组播源发出的组播数据。 + +如果Host和组播路由器之间运行的是IGMPv1或IGMPv2,Host加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。如果采用IGMPv3,成员主机可以选择仅接收S1组播数据。 + +* 方法一:Host发送IGMPv3报告(G,INCLUDE,(S1)),仅接收源S1向组播组G发送的数据。 +* 方法二:Host发送IGMPv3报告(G,EXCLUDE,(S2)),不接收指定源S2向组播组G发送的数据,从而仅有来自S1的组播数据才能传递到Host。 + +### 特定组查询 + +当接收到组成员发送的改变组播组与源列表的对应关系的报告时(比如CHANGE_TO_INCLUDE_MODE、CHANGE_TO_EXCLUDE_MODE),IGMP查询器会发送特定源组查询报文。如果组成员希望接收其中任意一个源的组播数据,将反馈报告报文。IGMP查询器根据反馈的组成员报告更新该组对应的源列表。 + +## 4 IGMP各个版本对比 + +IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。 + +所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM Mapping技术的支持才可以应用于SSM模型。 + +|项目 |IGMPv1 |IGMPv2 |IGMPv3| +|-|-|-|-| +|查询器选举方式 |依靠组播路由协议PIM选举 |同网段组播路由器之间竞争选举 |同网段组播路由器之间竞争选举| +|普遍组查询报文 |支持 |支持 |支持| +|成员报告报文 |支持 |支持 |支持| +|特定组查询报文 |不支持 |支持 |支持| +|成员离开报文 |不支持 |支持 |没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达| +|特定源组查询报文 |不支持 |不支持 |支持| +|指定组播源 |不支持 |不支持 |支持| +|可识别报文协议版本 |IGMPv1 |IGMPv1、IGMPv2 |IGMPv1、IGMPv2、IGMPv3| +|ASM模型 |支持 |支持 |支持| +|SSM模型 |需要IGMP SSM Mapping技术支持 |需要IGMP SSM Mapping技术支持 |支持| + +## 5 IGMP SSM Mapping +SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。如果成员主机上运行IGMPv3,可以在IGMPv3报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行IGMPv1或IGMPv2,为了使其也能够使用SSM服务,路由器上需要提供IGMP SSM Mapping功能。 + +IGMP SSM Mapping的机制是:通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*, G)信息转化为对应的(G, INCLUDE, (S1, S2…))信息,以提供SSM组播服务。 + +* 如果G在ASM(Any-Source Multicast)范围内,则只提供ASM服务。 +* 如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255): + * 如果路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。 + * 如果路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*, G)信息映射为(G, INCLUDE, (S1, S2…))信息,提供SSM服务。 + +## 6 IGMP Proxy + +### 简介 +IGMP Proxy,也称为IGMP代理,通常被部署在接入设备(RouterA)和成员主机之间的三层设备上,IGMP Proxy设备可以收集下游成员主机的IGMP报告/离开报文,将报告/离开报文汇聚后代理下游成员主机统一上送给接入设备;另一方面,IGMP Proxy设备也可以代理IGMP查询器向下游成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。在接入设备RouterA看来,RouterB就是一台主机;在下游成员主机看来,RouterB就是IGMP查询器。 + +* 上游接口:指IGMP代理设备上配置IGMP Proxy功能的接口,该接口执行IGMP代理设备的主机行为,因此也称为主机接口(Host Interface)。 +* 下游接口:指IGMP代理设备上配置IGMP功能的接口,该接口执行IGMP代理设备的路由器行为,因此也称为路由器接口(Router Interface)。 + +### IGMP Proxy工作机制 + +IGMP代理设备实现的功能主要分为两种:主机行为和路由器行为。 + +**主机行为** + +主机行为是指IGMP代理设备的上游接口收到查询报文时根据当前组播转发表的状态对查询报文做出响应,或者当组播转发表发生变化时上游接口主动向接入设备发送报告/离开报文。主机行为的工作机制如下: + +* IGMP代理设备上游接口收到查询报文时,会根据当前组播转发表的状态对查询报文做出响应。 + +* IGMP代理设备收到某组播组的报告报文后,会在组播转发表中查找该组播组: + + * 如果没有找到相应的组播组,IGMP代理设备会向接入设备发送针对该组播组的报告报文,并在组播转发表中添加该组播组; + * 如果找到相应的组播组,IGMP代理设备就不需要向接入设备发送报告报文。 +* IGMP代理设备收到某组播组G的离开报文后,会向接收到该离开报文的接口发送一个特定组查询报文,检查该接口下是否还存在组播组G的其他成员: + + * 如果没有其他成员,IGMP代理设备会向接入设备发送针对该组播组的离开报文,并在组播转发表中将对应的接口删除; + * 如果有其他成员,IGMP代理设备会继续向该接口转发组播数据。 + +**路由器行为** + +路由器行为是指IGMP代理设备的下游接口通过成员主机加入/离开组播组的信息生成组播转发表项、接收接入设备下发的组播数据并根据组播转发表项的出接口信息向特定的接口转发组播数据。 + +### IGMP Proxy备份机制 +为了提高链路的可靠性,IGMP代理设备的上游接口配置完IGMP Proxy功能后,可以再在IGMP代理设备上配置一个IGMP +Proxy备份接口,作为上游接口的备份,如下图所示。这样,当上游接口所在链路发生故障时,备份链路会自动接管IGMP代理业务,使业务能够自动恢复。 + + + +![IGMP Proxy备份机制](image/IGMPproxy备份机制.png) + + +IGMP Proxy本身并没有检测机制,如果组播链路发生了故障,无法保证及时进行主、备链路的切换,可能造成较长时间的组播业务中断。通过IGMP Proxy与NQA联动可以解决此问题。IGMP Proxy与NQA测试例联动是利用NQA测试例检测端到端的链路状态,并根据NQA测试例的检测结果,进行主、备链路的切换,从而避免通信长时间中断。 + + +### 查询者的作用: +查询者可以转发组播流量,通过这种方式可以避免组播流量的重复。为了保证组播可靠性,非查询者的路由器也会创建并维护组播组,同时非查询者需要监听查询者的存在,如果查询者在Hold timer时间内没有发送查询报文,非查询者会认为查询者已经故障,需要重新选举查询者。查询者会转发组播流量,同时每隔interval(60s)的时间发送查询报文。 + + +## 7 IGMP Snooping + + +### 简介 +IGMP Snooping (Internet Group Management Protocol +Snooping)是一种IPv4二层组播协议,通过侦听三层组播设备和用户主机之间发送的组播协议报文来维护组播报文的出接口信息,从而管理和控制组播数据报文在数据链路层的转发。 + +### 目的 +在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里。 + +由于组播报文的目的地址为组播组地址,在二层设备上是学习不到这一类MAC表项的,因此组播报文就会在所有接口进行广播,和它在同一广播域内的组播成员和非组播成员都能收到组播报文。这样不但浪费了网络带宽,而且影响了网络信息安全。 + +IGMP Snooping有效地解决了这个问题。配置IGMP Snooping后,二层组播设备可以侦听和分析组播用户和上游路由器之间的IGMP报文,根据这些信息建立二层组播转发表项,控制组播数据报文转发。这样就防止了组播数据在二层网络中的广播。 + +### 基本原理 +IGMP Snooping是二层组播的基本功能,可以实现组播数据在数据链路层的转发和控制。当主机和上游三层设备之间传递的IGMP协议报文通过二层组播设备时,IGMP Snooping分析报文携带的信息,根据这些信息建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。 + +当组播数据从三层组播设备Router转发下来以后,处于接入边缘的二层组播设备Switch负责将组播数据转发给用户主机,使用户收看所点播的节目。当Switch没有运行IGMP Snooping时,组播数据在二层被广播;当Switch运行了IGMP Snooping后,组播数据不会在二层广播,而是会被Switch发送给指定的接收者。 + +使能IGMP Snooping功能后,Switch会侦听主机和上游三层设备之间交互的IGMP报文,通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发。 + +### 基本概念 + +如下图所示,三层设备Router从组播源接收数据并向下游转发,在二层组播设备SwitchA和SwitchB上分别运行IGMP Snooping,HostA、HostB和HostC为接收者主机(即组播组成员)。 + + + +![IGMP Snooping相关端口](image/IGMPsnooping端口.png) + +IGMP Snooping中的端口角色: + +|端口角色 |作用 |如何生成| +|-|-|-| +|路由器端口(Router Port)如SwitchA和SwitchB上蓝色圆圈表示的接口。 说明: 路由器端口都是指二层组播设备上朝向组播路由器的接口,而不是指路由器上的接口。 |二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。 |由协议生成的路由器端口叫做动态路由器端口。收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文(三层组播设备的PIM接口向外发送的用于发现并维持邻居关系的报文)的接口都将被视为动态路由器端口。手工配置的路由器端口叫做静态路由器端口。| +|成员端口(Member Port)如SwitchA和SwitchB上黄色方框表示的接口。 |又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。 |由协议生成的成员端口叫做动态成员端口。收到IGMP Report报文的接口,二层组播设备会将其标识为动态成员端口。手工配置的成员端口叫做静态成员端口。| + +路由器端口和成员端口,是二层组播转发表项中的一个重要信息:出接口。其中路由器端口相当于上游接口,成员端口相当于下游接口。通过协议报文学习到的端口,对应的为动态表项;而手工配置的端口,对应的为静态表项。 + +除了出接口外,每条表项还包括组播组地址和VLAN编号。 + + +### 工作机制 +二层组播设备运行了IGMP Snooping后,收到不同的IGMP协议报文会进行不同的处理,并在此过程中建立起二层组播转发表项。 + +### 当收到IGMP普遍组查询报文时: +* IGMP工作阶段: + +普遍组查询 +IGMP查询器定期向本地网段内的所有主机与路由器(目的地址为224.0.0.1)发送IGMP普遍组查询报文,以查询该网段有哪些组播组的成员。 + +* 处理方式: + + 1. 向VLAN内除接收接口外的其他所有接口转发,并对接收接口做如下处理: + 2. 如果路由器端口列表中尚未包含该接口,则将其添加进去,并启动老化定时器。 + 3. 如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器。 + +> 收到IGMP普遍组查询报文时,动态路由器端口的老化定时器缺省为180秒,可以通过命令行配置。 + + +### 当收到IGMP报告报文时: +* IGMP工作阶段: + +成员报告阶段。有两种情况: + + 1. 成员收到IGMP普遍组查询报文后,回应IGMP报告报文。 + 2. 成员主动向IGMP查询器发送IGMP报告报文以声明加入该组播组。 + +* 处理方式: + +向VLAN内所有路由器端口转发。从报文中解析出主机要加入的组播组地址,并对接收接口做如下处理: + * 如果不存在该组对应的转发表项,则创建转发表项,将该接口作为动态成员端口添加到出接口列表中,并启动老化定时器。 + * 如果已存在该组对应的转发表项,但出接口列表中未包含该接口,则将该接口作为动态成员端口添加到出接口列表,并启动老化定时器。 + * 如果已存在该组所对应的转发表项,且出接口列表中已包含该动态成员端口,则重置其老化定时器。 + + +> 收到IGMP报告报文后,动态成员端口的老化定时器 = 健壮系数 x 普遍组查询间隔 + 最大响应时间。 + +### 当收到IGMP离开报文时: + +* IGMP工作阶段: + +成员离开组播组。有两个阶段: + + 1. 运行IGMPv2或IGMPv3的成员发送IGMP离开报文,以通知IGMP查询器自己离开了某个组播组。 + 2. IGMP查询器收到IGMP离开报文后,从中解析出组播组地址,并通过接收接口向该组播组发送IGMP特定组查询报文/IGMP特定源组查询报文。 + +* 处理方式: + +判断离开的组是否存在对应的转发表项,以及转发表项出接口列表是否包含报文的接收接口: + + 1. 如果不存在该组对应的转发表项,或者该组对应转发表项的出接口列表中不包含接收接口,二层组播设备不转发该报文,将其直接丢弃。 + 2. 如果存在该组对应的转发表项,且转发表项的出接口列表中包含该接口,二层组播设备会将报文向VLAN内所有路由器端口转发。 + 对于IGMP离开报文的接收接口(假定为动态成员端口),二层组播设备在其老化时间内: + 3. 如果从该接口收到了主机响应IGMP特定组/源组查询的报告报文,表示接口下还有该组的成员,于是重置其老化定时器。 + 4. 如果没有从该接口收到主机响应IGMP特定组/源组查询的报告报文,则表示接口下已没有该组成员,则在老化时间超时后,将接口从该组的转发表项出接口列表中删除。 + +此外,当二层组播设备收到PIM Hello报文时,向VLAN内除接收接口外的其他所有接口转发,并对接收接口做如下处理: + + 1. 如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器。 + 2. 如果路由器端口列表中尚未包含该接口,则将其添加进去,并启动老化定时器。 + +如果配置了静态路由器端口,二层组播设备收到IGMP报告和离开报文也会向静态路由器端口转发。如果配置了静态成员端口,则转发表项中会添加该接口为出接口。 + +当二层组播设备上建立了二层组播转发表项以后,二层组播设备接收到组播数据报文时,依据报文所属VLAN和报文的目的地址(即组播组地址)查找转发表项是否存在对应的“出接口信息”。如果存在,则将报文发送到相应的组播组成员端口和路由器端口;如果不存在,则丢弃该报文或将报文在VLAN内广播。 + + +## 5 IGMP欺骗 + + diff --git a/计算机网络实验/组播-IP组播.md b/计算机网络实验/组播-IP组播.md new file mode 100644 index 00000000..b0568d47 --- /dev/null +++ b/计算机网络实验/组播-IP组播.md @@ -0,0 +1,196 @@ +# 组播技术 + +## 1 基本概念 + +作为IP传输三种方式之一,IP组播通信指的是IP报文从一个源发出,被转发到一组特定的接收者。相较于传统的单播和广播,IP组播可以有效地节约网络带宽、降低网络负载,所以被广泛应用于IPTV、实时数据传送和多媒体会议等网络业务中。 + +### 目的 + +传统的IP通信有两种方式:单播(Unicast)和广播(Broadcast)。 + +* 对于单播通信,信息源为每个需要信息的主机都发送一份独立的报文。 +* 对于广播通信,信息源将信息发送给该网段中的所有主机,而不管其是否需要该信息。 + +如果要将数据从一台主机发送给多个主机而非所有主机,可以采用广播方式,也可以由源主机采用单播方式向网络中的多台目标主机发送多份数据。 +* 采用单播方式时,网络中传输的信息量与需要该信息的用户量成正比。当需要该信息的用户数量较大时,信息源需要将多份内容相同的信息发送给不同的用户,这对信息源以及网络带宽都将造成巨大的压力。因此,该传输方式不利于信息的批量发送,只适用于用户稀少的网络。 +* 采用广播方式时,不需要接收信息的主机也将收到该信息,这样不仅信息的安全性得不到保障,而且会造成同一网段中信息泛滥。因此,该传输方式不利于与特定对象进行数据交互,同时会浪费大量的带宽。 + + +由上述可见,传统的单播和广播通信方式不能有效地解决单点发送、多点接收的问题。 + +组播(Multicast)可以很好的解决点到多点的数据传输,源只发送一份数据,网络中只有需要该数据的主机可以接收该数据,其他主机不能收到该数据。 + +### 广播和单播对比特点 +* 相比单播,由于被传递的信息在距信息源尽可能远的网络节点才开始被复制和分发,所以用户的增加不会导致信息源负载的加重以及网络资源消耗的显著增加。 +* 相比广播,由于被传递的信息只会发送给需要该信息的接收者,所以不会造成网络资源的浪费,并能提高信息传输的安全性。 + +### 组播的优势 + +* 提高效率:降低网络流量、减轻硬件负荷 +* 优化性能:减少冗余流量、节约网络带宽、降低网络负载。 +* 分布式应用:使多点应用成为可能 + +组播适用于任何“点到多点”的数据发布,主要包含以下几方面: + +* 多媒体、流媒体的应用。 +* 培训、联合作业场合的通信。 +* 数据仓库、金融应用(股票)。 + +IP组播技术在ISP提供的互联网信息服务中已经得到了应用。例如:在线直播、网络电视、远程教育、远程医疗、网络电台和实时视/音频会议等。 + +### 组播的劣势 + +组播技术有效地解决了单点发送多点接收的问题,实现了IP网络中点到多点的高效数据传送。但由于组播技术是基于UDP的,所以同时也存在着不足之处: + +* 尽力而为。 +报文不能依赖组播网络进行可靠性保证,必须针对组播网络的这个特点进行特别设计。“可靠组播”目前仍然处于研究阶段。丢失是不可避免的。因此组播应用程序 + +* 没有拥塞避免机制。缺少TCP窗口机制和慢启动机制,组播可能会出现拥塞。如果可能的话,组播应用程序应该尝试检测避免拥塞。 + +* 报文重复。某些组播协议的特殊机制(如Assert机制和SPT切换机制)可能会造成偶尔的数据包的重复。组播应用程序应该容忍这种现象。 + +* 报文失序。同样组播协议有的时候会造成报文到达的次序错乱,组播应用程序必须自己采用某种手段进行纠正(比如缓冲池机制等)。 + +## 2 组播原理 + +### 基本概念 + +组播传输的特点是单点发送,多点接收。 + +* 组播组:用IP组播地址进行标识的一个集合。任何用户主机(或其他接收设备),加入一个组播组,就成为了该组成员,可以识别并接收发往该组播组的组播数据。 +* 组播源:信息的发送者称为“组播源”,一个组播源可以同时向多个组播组发送数据,多个组播源也可以同时向一个组播组发送报文。组播源通常不需要加入组播组,由源端DR负责管理组播源的注册和SPT(Shortest Path Tree)的建立。 +* 组播组成员:所有加入某组播组的主机便成为该组播组的成员,组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。组播组成员可以广泛地分布在网络中的任何地方。 +* 组播路由器:支持三层组播功能的路由器或交换机。组播路由器不仅能够提供组播路由功能,也能够在与用户连接的末梢网段上提供组播组成员的管理功能。 + +## 3 组播服务模型: +组播服务模型的分类是针对接收者主机的,对组播源没有区别。组播源发出的组播数据中总是以组播源自己的IP地址为报文的源地址,组播组地址为目的地址。而接收者主机接收数据时可以对源进行选择,因此产生了ASM(Any-Source Multicast)和SSM(Source-Specific Multicast)两种服务模型。这两种服务模型默认使用不同的组播组地址范围。 + +### ASM模型: +ASM模型仅针对组地址提供组播分发。一个组播组地址作为一个网络服务的集合,任何源发布到该组地址的数据得到同样的服务。接收者主机加入组播组以后可以接收到任意源发送到该组的数据。 + +为了提高安全性,可以在路由器上配置针对组播源的过滤策略,允许或禁止来自某些组播源的报文通过。最终从接收者角度看,数据是经过筛选的。 + +ASM模型要求组地址必须整个组播网络中唯一。“唯一”指的是同一时刻一个ASM地址只能被一种组播应用使用。如果有两种不同的应用程序使用了同一个ASM组地址发送数据,它们的接收者会同时收到来自两个源的数据。这样一方面会导致网络流量拥塞,另一方面也会给接收者主机造成困扰。 + +### SSM模型: +SSM模型针对特定源和组的绑定数据流提供服务,接收者主机在加入组播组时,可以指定只接收哪些源的数据或指定拒绝接收来自哪些源的数据。加入组播组以后,主机只会收到指定源发送到该组的数据。 + +SSM模型对组地址不再要求全网唯一,只需要每个组播源保持唯一。这里的“唯一”指的是同一个源上不同的组播应用必须使用不同的SSM地址来区分。不同的源之间可以使用相同的组地址,因为SSM模型中针对每一个(源,组)信息都会生成表项。这样一方面节省了组播组地址,另一方面也不会造成网络拥塞。 + + +## 4 组播地址: +为了使组播源和组播组成员进行通信,需要提供网络层组播,使用IP组播地址。同时,为了在本地物理网络上实现组播信息的正确传输,需要提供链路层组播,使用组播MAC地址。组播数据传输时,其目的地不是一个具体的接收者,而是一个成员不确定的组,所以需要一种技术将IP组播地址映射为组播MAC地址。 + +### IPv4组播地址 +IANA(Internet Assigned Numbers Authority,互联网编号分配委员会)将D类地址空间分配给IPv4组播使用。IPv4地址一共32位,D类地址最高4位为1110,因此地址范围从224.0.0.0到239.255.255.255,具体分类及含义见下表: + +|地址范围| 含义| +|-|-| +|224.0.0.0~224.0.0.255| 永久组地址。IANA为路由协议预留的IP地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议、拓扑查找等使用,不用于组播转发。| +|224.0.1.0~231.255.255.255| 233.0.0.0~238.255.255.255 ASM组播地址,全网范围内有效。说明: 其中,224.0.1.39和224.0.1.40是保留地址,不建议使用。| +|232.0.0.0~232.255.255.255| 缺省情况下的SSM组播地址,全网范围内有效。| +|239.0.0.0~239.255.255.255| 本地管理组地址,仅在本地管理域内有效。在不同的管理域内重复使用相同的本地管理组地址不会导致冲突。| + +常见的永久组地址列表: + +|永久组地址 含义| +|-|-| +|224.0.0.0 不分配| +|224.0.0.1 网段内所有主机和路由器(等效于广播地址)| +|224.0.0.2 所有组播路由器| +|224.0.0.3 不分配| +|224.0.0.4 DVMRP(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)路由器| +|224.0.0.5 OSPF(Open Shortest Path First,开放最短路径优先)路由器| +|224.0.0.6 OSPF DR(Designated Router,指定路由器)| +|224.0.0.7 ST(Shared Tree,共享树)路由器| +|224.0.0.8 ST主机| +|224.0.0.9 RIP-2(Routing Information Protocol version 2,路由信息协议版本2)路由器| +|224.0.0.11 移动代理(Mobile-Agents)| +|224.0.0.12 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器/中继代理| +|224.0.0.13 所有PIM(Protocol Independent Multicast,协议无关组播)路由器| +|224.0.0.14 RSVP(Resource Reservation Protocol,资源预留协议)封装| +|224.0.0.15 所有CBT(Core-Based Tree,有核树)路由器| +|224.0.0.16 指定SBM(Subnetwork Bandwidth Management,子网带宽管理)| +|224.0.0.17 所有SBM| +|224.0.0.18 VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)| +|224.0.0.22 所有使能IGMPv3(Internet Group Management Protocol, Version 3,因特网组管理协议)的路由器| +|224.0.0.19 ~ 224.0.0.21 224.0.0.23 ~ 224.0.0.255| 未指定| + +### IPv6组播地址: + +![IPv6组播地址格式](image/IPv6组播地址格式.png) + +* 和IPv4组播地址相比,IPv6组播地址有了明确的Group ID字段用于标识组播组。 + +* FF:最高8位为11111111,标识此地址为组播地址。即IPv6组播地址总是以FF开头。 + +* Flags字段(4位),用来标识组播地址的状态。其含义如下: + +​ + +|取值| 含义| +|-|-| +|0 |表示是IANA指定的常用组播地址,也叫保留组地址| +|1 |表示是ASM范围的组播地址| +|2 |表示是ASM范围的组播地址| +|3 |表示是SSM范围的组播地址| +|其他| 未分配| + +* Scope字段(4位):用来标识组播组的应用范围,例如是只包含同一本地网络、同一站点、同一机构中的节点,还是包含全球地址空间内的任何节点。其含义如下: + +|取值| 含义| +|-|-| +|0、3、F| 保留| +|1 |节点(或接口)本地范围(node/interface-local scope)| +|2 |链路本地范围(link-local scope)| +|4 |管理本地范围(admin-local scope)| +|5 |站点本地范围(site-local scope)| +|8 |机构本地范围(organization-local scope)| +|E |全球范围(global scope)| +|其他| 未分配| + +* Group ID(112位):组播组标识号。用来在由Scope字段所指定的范围内唯一标识组播组,该标识可能是永久分配的或临时的,这由Flags字段的T位决定。 + +### IPv6组播地址范围及含义 +|范围| 含义| +|-|-| +|FF0x::/32 |保留组地址。| +|FF1x::/32(x不能是1或者2)FF2x::/32(x不能是1或者2)| ASM组播地址,全网范围内有效。| +|FF3x::/32(x不能是1或者2)| 缺省的SSM组地址范围,全网范围内有效。| + +### IPv4组播MAC地址: +以太网传输IPv4单播报文的时候,目的MAC地址使用的是接收者的MAC地址。但是在传输组播数据时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用IPv4组播MAC地址,即IPv4组播地址映射到链路层中的地址。 + +IANA规定,IPv4组播MAC地址的高24位为0x01005e,第25位为0,低23位为IPv4组播地址的低23位,例如组播组地址224.0.1.1对应的组播MAC地址为01-00-5e-00-01-01。 + +IPv4组播地址的前4位是固定的1110,对应组播MAC地址的高25位,后28位中只有23位被映射到MAC地址,因此丢失了5位的地址信息,直接结果是有32个IPv4组播地址映射到同一MAC地址上。 + +### IPv6组播MAC地址: +IPv6组播MAC地址的高16位为0x3333,低32位为IPv6组播地址的低32位。 + + +## 5 组播的相关协议: +组播协议包括用于主机注册的组播组管理协议,和用于组播选路转发的组播路由协议。 + +### 组播管理协议 + +* IGMP(InternetGroup Management Protocol)在接收者主机和组播路由器之间运行,该协议定义了主机与路由器之间建立和维护组播成员关系的机制。 + +### 组播路由协议 + +组播路由器之间运行组播路由协议,组播路由协议用于建立和维护组播路由,并正确、高效地转发组播数据包。 + +对于ASM模型,可以将组播路由分为域内和域间两大类。域内组播路由协议用来在自治系统AS(AutonomousSystem)内发现组播源并构建组播分发树,将信息传递到接收者。域内组播路由协议包括:DVRMP、MOSPF、PIM。 + +* DVRMP是距离矢量组播路由协议(DistanceVector Multicast Routing Protocol)是一种密集模式协议。该协议有跳数限制,最大跳数32跳。 +* MOSPF是OSPF路由协议的扩展协议。它通过定义新的LSA来支持组播。 +* PIM(Protocol Independent Multicast协议无关组播)是典型的域内组播路由协议,分为DM(DenseMode)和SM(SparseMode)两种模型。当接收者在网络中的分布较为密集时,适用DM;较适用SM。PIM必须和单播路由协议协同工作。 + + +域间组播路由协议用来实现组播信息在AS之间的传递。 + +* MSDP(MulticastSource Discovery Protocol)能够跨越AS传播组播源信息。 +* MPBGP(MultiProtocolBorder Gateway Protocol)的组播扩展MBGP(MulticastBGP)能够跨越AS传播组播路由。 + + +对于SSM模型,没有域内和域间的划分。由于接收者预先知道组播源的具体位置,因此可以借助PIMSM的部分功能直接创建组播传输路径。 \ No newline at end of file diff --git a/计算机网络实验/组播-MSDP.md b/计算机网络实验/组播-MSDP.md new file mode 100644 index 00000000..f7ba803d --- /dev/null +++ b/计算机网络实验/组播-MSDP.md @@ -0,0 +1,168 @@ +MSDP简介 +MSDP是Multicast Source Discovery Protocol(组播源发现协议)的简称,是为了解决多个PIM-SM(Protocol Independent Multicast Sparse Mode,协议无关组播—稀疏模式)域之间的互连而开发的一种域间组播解决方案,用来发现其他PIM-SM域内的组播源信息。 + +MSDP目前只支持在IPv4网络部署,域内组播路由协议必须是PIM-SM。MSDP仅对ASM(Any-Source Multicast)模型有意义。 + +目的: +PIM-SM模式下,源端DR(Designated Router)向RP注册,成员端DR也会向RP发起加入报文,因此RP可以获取到所有组播源和组播组成员的信息。随着网络规模的增大以及便于控制组播资源,管理员可能会将一个PIM网络划分为多个PIM-SM域,此时各个域中的RP无法了解其他域中的组播源信息。MSDP可以解决这一问题。 + +MSDP通过在不同PIM-SM域的路由器(通常在RP上)之间建立MSDP对等体,MSDP对等体之间交互SA(Source-Active)消息,共享组播源信息,最终可以使一个域内的组播用户接收到其他域的组播源发送的组播数据。 + +MSDP用于在ISP(Internet Service Provider)之间建立对等体。通常,ISP并不希望借助其他ISP的RP来向自己的用户提供服务。这一方面是出于安全性考虑,另一方面如果其他ISP的RP发生故障导致业务中断,用户投诉的却是自己的服务。借助MSDP,每个ISP可以实现依靠自己的RP来向Internet转发和接收组播数据。 + +尽管MSDP是为域间组播产生的,但它在PIM-SM域内还有着一项特殊的应用——Anycast RP(任播RP)。Anycast RP是指在同一PIM-SM域内通过设置两个或多个具有相同地址的RP,并在这些RP之间建立MSDP对等体关系,以实现域内各RP之间的负载分担和冗余备份。 + +优点: +MSDP可以实现域间组播,同时对ISP而言还有以下优点: + +PIM-SM域可以依靠本域的RP提供服务,降低了对其他域RP的依赖。还可以控制本域的源信息是否传递到其他域中,提高了网络安全性。 +如果某个域中只有接收者,他不必去整个网络上汇报组成员关系,只在本PIM-SM域内汇报,就可以接收到组播数据。 +单个PIM-SM域内的设备不需要专门维护整网的组播源信息和组播路由表项,节省系统资源。 +原理描述 +MSDP对等体: +使用MSDP实现跨域组播的首要任务是:建立MSDP对等体。 + +通常,在各个PIM-SM域的RP之间配置MSDP对等体关系,MSDP对等体之间交互SA(Source Active)消息,SA消息中携带组播源DR在RP上注册时的(S,G)信息。通过这些MSDP对等体之间的信息传递,任意一个RP发出的SA消息能够被其他所有的RP收到。 + +MSDP对等体并不是只能配置在RP上,如下图所示,MSDP对等体可以创建在任意的PIM路由器上,在不同角色的PIM路由器上所创建的MSDP对等体的功能有所不同。 + + + +图:MSDP对等体位置 +在RP上创建的MSDP对等体: + +MSDP对等体分类 位置 功能 +源端MSDP对等体 离组播源(Source)最近的MSDP对等体(通常也就是源端RP,如RP1) 源端RP创建SA消息并发送给远端MSDP对等体,通告在本RP上注册的组播源信息。源端MSDP对等体必须配置在RP上,否则将无法向外发布组播源信息。 +接收者端MSDP对等体 离接收者(Receiver)最近的MSDP对等体(如RP3) 接收者端MSDP对等体在收到SA消息后,根据该消息中所包含的组播源信息,跨域加入以该组播源为根的SPT;当来自该组播源的组播数据到达后,再沿RPT向本地接收者转发。接收者端MSDP对等体必须配置在RP上,否则无法接收到其他域的组播源信息。 +中间MSDP对等体 拥有多个远端MSDP对等体的MSDP对等体(如RP2) 中间MSDP对等体把从一个远端MSDP对等体收到的SA消息转发给其他远端MSDP对等体,其作用相当于传输组播源信息的中转站。 +在普通的PIM路由器(非RP)上创建的MSDP对等体 + +如RouterA和RouterB,其作用仅限于将收到的SA消息转发出去。 + +MSDP协议报文: +MSDP的协议报文封装在TCP数据报中,协议报文的格式都符合标准的TLV(Type-Length-Value)消息格式,如下图所示: + + + +图:MSDP协议报文格式 +MSDP协议报文类型: +Source-Active(SA): + +Type 1。 + +功能:1、携带多组(S,G)信息,在多个RP之间传递。 + +​ 包含的主要信息: + +​ 源RP的IP地址。 + +​ 消息中包含的(S,G)项数量。 + +​ 域中活跃的(S,G)列表 + +​ 2、封装PIM-SM组播数据。 + +​ 包含的主要信息: + +​ 源RP的IP地址。 + +​ PIM-SM组播数据。 + +Source-Active-Response(SA-Req): + +Type 2。 +功能:主动请求指定组G的(S,G)列表,减少源加入的延迟。 +报文中包含:被请求的组地址G。 +Source-Active Response(SA-Resp): + +Type 3. +功能:对Source-Active Request消息的响应。 +报文中包含:源RP的IP地址 +​ 消息中包含的(S,G)项数量 +​ 域中活动(S,G)列表 +KeepAlive: + +Type 4。 +功能:保持MSDP对等体的连接关系。只在对等体之间无其他协议报文交互时才发送。 +Reserved: + +Type 5。 +功能:保留类型,当前是用作Notification消息。 +Traceroute in Progress: + +Type 6。 +Traceroute Reply: + +Type 7。 +和类型6的功能:用于MSDP的Traceroute功能,对SA消息的RPF传递路径进行检测。 +SA消息中可以携带(S,G)信息,也可以封装组播数据报文。MSDP对等体之间通过交互SA消息共享(S,G)信息。为了避免SA消息中的(S,G)表项超时导致远端用户无法收到组播源的数据,可以在SA消息中封装组播数据报文。 + +由于SA消息是周期性发送的,当域内出现新的组用户时,要等待一个周期内的SA消息以获取有效的(S,G)信息。为了减少新组用户加入源SPT的时延,MSDP提供了Type2和Type3的SA-Req消息与SA-Resp消息,提高活动源信息更新的效率。 + +对等体建立的过程: +MSDP对等体建立: +MSDP对等体通过TCP连接建立,使用端口639。 + +两台设备使能MSDP并互相指定对方为MSDP对等体后,两端先比较IP地址**,IP地址较小**的一端会启动连接重试定时器(ConnectRetry timer),并主动发起TCP连接。IP地址较大的一端负责确认是否有TCP连接在端口639建立。TCP连接建立后,MSDP对等体关系就建立了,对等体之间通过KeepAlive消息维持连接关系。 + + + +图:MSDP对等体建立过程 +如上图所示,RouterA和RouterB之间建立MSDP对等体的过程如下: + +起始状态下,两台路由器的MSDP会话状态都是Down。 +在两端使能MSDP并互相指定对方为MSDP对等体后,两端比较建立连接使用的地址: +RouterA的地址较小,进入Connect状态,向RouterB发起连接,并启动ConnectRetry定时器。该定时器用于定义连接重试的周期。 +RouterB的地址较大,进入Listen状态,等待对端进行连接。 +TCP连接建立成功后,两端的MSDP会话进入Up状态。 +MSDP对等体两端发送KeepAlive消息,通知对方保持MSDP连接状态。 +MSDP认证: +在TCP连接建立时进行加密认证,可以保证安全性。配置了认证功能后,MSDP对等体两端必须都使用相同的加密算法和密码,才能正常建立TCP连接,否则不建立连接。MSDP支持MD5和Keychain两种加密方式,二者在使用时互斥,MSDP对等体之间只能选择一种方式加密。 + +组播源信息在域间的传递: +如下图所示,PIM-SM网络被划分为4个PIM-SM域。PIM-SM1域内存在激活的组播源(Source),RP1通过组播源注册过程了解到了该组播源的存在。如果PIM-SM2和PIM-SM3域也希望知道该组播源的具体位置,进而能够从该组播源获取组播数据,则需要在RP1与RP2、RP2与RP3之间分别建立MSDP对等体关系。 + + + +图:组播源信息在域间的传递 +组播源信息在域间传递的过程如下: + +当PIM-SM1域内的组播源Source向组播组G发送第一个组播数据包时,DR1(Designated Router)将该组播数据封装在注册报文(Register Message)中,并发给RP1。RP1因此获知了该组播源的相关信息。 +RP1作为源端RP,创建SA消息,并周期性地向它的对等体RP2发送。SA消息中包含组播源的地址S、组播组的地址G以及创建该SA消息的源端RP(即RP1)的地址。 +RP2接收到该SA消息后,执行RPF(Reverse Path Forwarding)检查。检查通过,向RP3转发,同时检查本域内是否存在组G成员。由于PIM-SM2域内没有组G的接收者,故RP2不做其他动作。 +RP3接收到该SA消息后,执行RPF检查,检查通过。由于PIM-SM3域内存在组G成员,会通过IGMP协议在RP3上生成(*,G)表项,表示本域内存在组G成员。 +RP3创建(S,G)表项,向组播源Source逐跳发送(S,G)加入报文,创建一条从Source到RP3的组播路径(SPT)。组播数据沿SPT到达RP3后,再沿RPT向接收者转发。 +当接收者侧DR3收到Source发出的组播数据后,可以自行决定是否发起SPT切换。 +控制SA消息的转发: +SA消息在MSDP对等体之间转发,除了RPF检查,还可以配置各种转发策略的过滤,从而只接收和转发来自正确路径并通过过滤的SA消息,以避免SA消息传递环路;另外,可以在MSDP对等体之间配置MSDP全连接组(Mesh Group),以避免SA消息在MSDP对等体之间的泛滥。 + +SA消息的RPF检测规则: +为了防止SA消息在MSDP对等体之间被循环转发,MSDP对接收到的SA消息执行RPF检查,在消息传递的入方向上进行严格的控制。不符合RPF规则的SA消息,将被丢弃。 + +RPF检查的主要规则为:MSDP设备收到SA消息后,根据MRIB(Multicast RPF Routing Information Base)确定到源RP(即创建该SA消息的RP)最佳路径的下一跳是哪个对等体,这个对等体也称为“RPF对等体”。如果发现SA消息是从RPF对等体发出的,则接收该SA消息并向其他对等体转发。MRIB包括:MBGP、组播静态路由、单播路由(包括BGP、IGP)。 + +此外,还有如下的一些RPF检查规则,SA消息在转发时遵守: + +规则1:发出SA消息的对等体就是源RP,则接收该SA消息并向其他对等体转发。 +规则2:接收从静态RPF对等体到来的SA消息。一台路由器可以同时与多个路由器建立MSDP对等体关系。用户可以从这些远端对等体中选取一个或多个,配置为静态RPF对等体。 +规则3:如果一台路由器只拥有一个远端MSDP对等体,则该远端对等体自动成为RPF对等体,路由器接收从该远端对等体发来的SA消息。 +规则4:发出SA消息的对等体与本地路由器属于同一Mesh Group,则接收该SA消息。来自Mesh Group的SA消息不再向属于该Mesh Group的成员转发,但向该Mesh Group之外的所有对等体转发。 +规则5:到达源RP的路由需要跨越多个AS时,接收从下一跳AS(以AS为单位)中的对等体发出的SA消息,如果该AS中存在多个远端MSDP对等体,则接收从IP地址最高的对等体发来的SA消息。 +MSDP全连接组(Mesh Group): +当网络中存在多个MSDP对等体时,很容易导致SA消息在对等体之间泛滥。同时,MSDP对等体对每一个到来的SA报文进行RPF检查,给系统造成很大的负担。将多个MSDP对等体加入同一个Mesh Group,就可以大幅度减少在这些MSDP对等体之间传递的SA消息。 + +Mesh Group成员可以都属于同一个PIM-SM域,也可以分布在多个PIM-SM域中;可以都位于同一个AS,也可以位于多个AS中。 + +属于同一个Mesh Group的所有成员之间必须两两建立MSDP对等体连接,并承认对方为该Mesh Group的成员。如下图中的RouterA、RouterB、RouterC和RouterD,加入同一个Mesh Group,则必须在每台路由器上配置与其他三台路由器建立MSDP对等体关系。 + + + +图:Mesh Group内部成员之间的MSDP对等体连接 +当Mesh Group内部成员接收到SA消息后,首先检查该SA消息的来源: + +如果该SA消息来自Mesh Group外部的某个MSDP对等体,则对该SA消息进行RPF检查。如果检查通过,向Mesh Group内其他所有成员转发。 +如果该SA消息来自Mesh Group内部成员,则不进行RPF检查,直接接收。同时也不再向Mesh Group内其他成员转发。 +SA消息过滤: +缺省情况下,MSDP不过滤SA消息,从一个域中发出的SA消息可以被传递到全网的MSDP对等体。 + +然而,有些PIM-SM域的(S,G)表项只适用于本域内指导转发,如一些本地组播应用使用了全局的组播组地址,或组播源用的是私网地址10.x.x.x。如果不加过滤,这些(S,G)表项就会经过SA消息传递到其他MSDP对等体。针对这种情况,可以配置SA消息的过滤规则(一般使用ACL定义过滤的规则),并在创建、转发或接收SA消息时使用这些规则,就可以实现SA消息过滤。 \ No newline at end of file diff --git a/计算机网络实验/组播-PIM.md b/计算机网络实验/组播-PIM.md new file mode 100644 index 00000000..9d5dae26 --- /dev/null +++ b/计算机网络实验/组播-PIM.md @@ -0,0 +1,429 @@ +# 组播-PIM + +## 1 PIM简介 + +### 作用 + +PIM(Protocol Independent Multicast)称为协议无关组播。这里的协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF(Reverse Path Forwarding,逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。 + +目前设备实际支持的PIM协议包括:PIM-DM(PIM-Dense Mode)、PIM-SM(PIM-Sparse Mode)。 + +### 组播分发树 +PIM网络以组播组为单位在路由器上建立一点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树MDT(Multicast Distribution Tree)。 + +组播分发树主要包括以下两种: + +* 以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree)。SPT同时适用于PIM-DM网络和PIM-SM网络。 +* 以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree)。RPT适用于PIM-SM网络。 + +### PIM路由器 + +在接口上使能了PIM协议的路由器即为PIM路由器。在建立组播分发树的过程中,PIM路由器又分为以下几种: + +* 叶子路由器:与用户主机相连的PIM路由器,但连接的用户主机不一定为组成员。 +* 第一跳路由器:组播转发路径上,与组播源相连且负责转发该组播源发出的组播数据的PIM路由器。 +* 最后一跳路由器:组播转发路径上,与组播组成员相连且负责向该组成员转发组播数据的PIM路由器。 +* 中间路由器:组播转发路径上,第一跳路由器与最后一跳路由器之间的PIM路由器。 + +### PIM路由表项 +PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:(S,G)路由表项或( * ,G)路由表项。S表示组播源,G表示组播组, * 表示任意。 + +* (S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。 +* (*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。 + + +PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发: + +* 如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。 +* 如果不存在(S,G)路由表项,只存在( * ,G)路由表项,则先依照( * ,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。 + +PIM路由表项中主要用于指导转发的信息如下: + +* 组播源地址。 +* 组播组地址。 +* 上游接口:本地路由器上接收到组播数据的接口。 +* 下游接口:将组播数据转发出去的接口。 + +## 2 PIM-DM + +### 基本原理 + +PIM-DM使用“推(Push)模式”转发组播报文,一般应用于组播组成员规模相对较小、相对密集的网络。在实现过程中,它会假设网络中的组成员分布非常稠密,每个网段都可能存在组成员。当有活跃的组播源出现时,PIM-DM会将组播源发来的组播报文扩散到整个网络的PIM路由器上,再裁剪掉不存在组成员的分支。PIM-DM通过周期性的进行“扩散(Flooding)—剪枝(Prune)”,来构建并维护一棵连接组播源和组成员的单向无环SPT(Source Specific Shortest Path Tree)。如果在下一次“扩散-剪枝”进行前,被裁剪掉的分支由于其叶子路由器上有新的组成员加入而希望提前恢复转发状态,也可通过嫁接(Graft)机制主动恢复其对组播报文的转发。 + +PIM-DM的关键工作机制包括邻居发现、扩散、剪枝、嫁接、断言和状态刷新。其中,扩散、剪枝、嫁接是构建SPT的主要方法。 + +### 邻居发现(Neighbor Discovery): + +PIM路由器上每个使能了PIM协议的接口都会对外发送Hello报文。封装Hello报文的组播报文的目的地址是224.0.0.13(表示同一网段中所有PIM路由器)、源地址为接口的IP地址、TTL数值为1。 + +Hello报文的作用:发现PIM邻居、协调各项PIM协议报文参数、维持邻居关系。 + +* 发现PIM邻居 + + 同一网段中的PIM路由器都必须接收目的地址为224.0.0.13的组播报文。这样直接相连的PIM路由器之间通过交互Hello报文以后,就可以彼此知道自己的邻居信息,建立邻居关系。 + + 只有邻居关系建立成功后,PIM路由器才能接收其他PIM协议报文,从而创建组播路由表项。 + +* 协调各项PIM协议报文参数 + + Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。具体如下: + +|参数|说明| +|-|-| +DR_Priority|表示各路由器接口竞选DR的优先级,优先级越高越容易获胜。| +Holdtime|表示保持邻居为可达状态的超时时间。如果在超时时间内没有收到PIM邻居发送的Hello报文,路由器则认为邻居不可达。| +LAN_Delay|表示共享网段内传输Prune报文的延迟时间。| +Neighbor-Tracking|表示邻居跟踪功能。| +Override-Interval|表示Hello报文中携带的否决剪枝的时间间隔。| + +* 维持邻居关系 + + PIM路由器之间周期性地发送Hello报文。如果Holdtime超时还没有收到该PIM邻居发出的新的Hello报文,PIM路由器就认为该邻居不可达,将其从邻居列表中清除。 + + PIM邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由重新收敛,组播分发树迁移。 + +### 扩散(Flooding): + +当PIM-DM网络中出现活跃的组播源之后,组播源发送的组播报文将在全网内扩散。当PIM路由器接收到组播报文,根据单播路由表进行RPF检查通过后,就会在该路由器上创建(S,G)表项,下游接口列表中包括除上游接口之外与所有PIM邻居相连的接口,后续到达的组播报文将从各个下游接口转发出去。 + +最后组播报文扩散到达叶子路由器,会出现以下两种情况: + +* 若与该叶子路由器相连用户网段上存在组成员,则将与该网段相连的接口加入(S,G)表项的下游接口列表中,后续的组播报文会向组成员转发。 +* 若与该叶子路由器相连用户网段上不存在组成员,且不需要向其下游PIM邻居转发组播报文,则执行剪枝动作。 + +### 剪枝(Prune): + +当PIM路由器接收到组播报文后,RPF检查通过,但是下游网段没有组播报文需求。此时PIM路由器会向上游发送剪枝报文,通知上游路由器禁止相应下游接口的转发,将其从(S,G)表项的下游接口列表中删除。剪枝操作由叶子路由器发起,逐跳向上,最终组播转发路径上只存在与组成员相连的分支。 + +路由器为被裁剪的下游接口启动一个剪枝定时器,定时器超时后接口恢复转发。组播报文重新在全网范围内扩散,新加入的组成员可以接收到组播报文。随后,下游不存在组成员的叶子路由器将向上发起剪枝操作。通过这种周期性的扩散-剪枝,PIM-DM周期性的刷新SPT。 + +当下游接口被剪枝后: + +* 如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行嫁接动作。 +* 如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行状态刷新动作。 + +### 嫁接(Graft): + +PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。 + +嫁接过程从叶子路由器开始,到有组播报文到达的路由器结束。 + +### 状态刷新(State Refresh): + +在PIM-DM网络中,为了避免被裁剪的接口因为“剪枝定时器”超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发State + +Refresh报文在全网内扩散。收到State Refresh报文的PIM路由器会刷新剪枝定时器的状态。被裁剪接口的下游叶子路由器如果一直没有组成员加入,该接口将一直处于抑制转发状态。 + +### 断言(Assert): +当一个网段内有多个相连的PIM路由器RPF检查通过向该网段转发组播报文时,则需要通过断言机制来保证只有一个PIM路由器向该网段转发组播报文。PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert报文,其中目的地址为永久组地址224.0.0.13。其它PIM路由器在接收到Assert报文后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选。竞选规则如下: + +1. 单播路由协议优先级较高者获胜。 +2. 如果优先级相同,则到组播源的开销较小者获胜。 +3. 如果以上都相同,则下游接口IP地址最大者获胜。 + +根据Assert竞选结果,路由器将执行不同的操作: + +* 获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。 +* 落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。 + + +Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert竞选。 + +## 3 PIM-SM(ASM模型) + +### 基本原理(ASM模型): +在ASM(Any-Source Multicast)模型中,PIM-SM使用“拉(Pull)模式”转发组播报文,一般应用于组播组成员规模相对较大、相对稀疏的网络。基于这一种稀疏的网络模型,它的实现方法是: + +* 在网络中维护一台重要的PIM路由器:汇聚点RP(Rendezvous Point),可以为随时出现的组成员或组播源服务。网络中所有PIM路由器都知道RP的位置。 +* 当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,最后一跳路由器向RP发送Join报文,逐跳创建( * ,G)表项,生成一棵以RP为根的RPT。 +* 当网络中出现活跃的组播源(组播源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息。 + +在ASM模型中,PIM-SM的关键机制包括邻居发现、DR竞选、RP发现、RPT构建、组播源注册、SPT切换、断言;同时也可通过配置BSR(Bootstrap Router)管理域来实现单个PIM-SM域的精细化管理。 + +### DR竞选: +在组播源或组成员所在的网段,通常同时连接着多台PIM路由器。这些PIM路由器之间通过交互Hello报文成为PIM邻居,Hello报文中携带DR优先级和该网段接口地址。PIM路由器将自身条件与对方报文中携带的信息进行比较,选举出DR来负责源端或组成员端组播报文的收发。竞选规则如下: + +* DR优先级较高者获胜(网段中所有PIM路由器都支持DR优先级)。 +* 如果DR优先级相同或该网段存在至少一台PIM路由器不支持在Hello报文中携带DR优先级,则IP地址较大者获胜。 + +如果当前DR出现故障,将导致PIM邻居关系超时,其他PIM邻居之间会触发新一轮的DR竞选。 + +在ASM模型中,DR主要作用如下: + +* 在连接组播源的共享网段,由DR负责向RP发送Register注册报文。与组播源相连的DR称为源端DR。 +* 在连接组成员的共享网段,由DR负责向RP发送Join加入报文。与组成员相连的DR称为组成员端DR。 + +### RP发现: +汇聚点RP为网络中一台重要的PIM路由器,用于处理源端DR注册信息及组成员加入请求,网络中的所有PIM路由器都必须知道RP的地址,类似于一个供求信息的汇聚中心。 + +一个RP可以同时为多个组播组服务,但一个组播组只能对应一个RP。目前可以通过以下方式配置RP: + +* 静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置。 + +* 动态RP:在PIM域内选择几台PIM路由器,配置C-RP(Candidate-RP,候选RP)来动态竞选出RP。同时,还需要通过配置C-BSR(Candidate-BSR,候选BSR)选举出BSR,来收集C-RP的通告信息,向PIM-SM域内的所有PIM路由器发布。 + +C-BSR在竞选的时候,开始时每个C-BSR都认为自己是BSR,向全网发送Bootstrap报文。Bootstrap报文中携带C-BSR地址、C-BSR的优先级。每一台PIM路由器都收到所有C-BSR发出的Bootstrap报文,通过比较这些C-BSR信息,竞选产生BSR。竞选规则如下: + + * 优先级较高者获胜(优先级数值越大优先级越高)。 + * 如果优先级相同,IP地址较大者获胜。 + + +C-RP的竞选过程如下: + +* C-RP向BSR发送Advertisement报文,报文中携带C-RP地址、服务的组范围和C-RP优先级。 + +* BSR将这些信息汇总为RP-Set,封装在Bootstrap报文中,发布给全网的每一台PIM-SM路由器。 + +* 各PIM路由器根据RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的C-RP中竞选出该组RP。规则如下: +​ + + * 与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。 + * 如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。 + * 如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。 + * 如果以上比较结果都相同,则C-RP的IP地址较大者获胜 + + +由于所有PIM路由器使用相同的RP-Set和竞选规则,所以得到的组播组与RP之间的对应关系也相同。PIM路由器将“组播组—RP”对应关系保存下来,指导后续的组播操作。 + +### RPT构建: +PIM-SM RPT是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。 + +在RPT构建过程中,PIM路由器在发送Join报文时,会进行RPF检测查找到达RP的单播路由,单播路由的出接口为上游接口,下一跳为RPF邻居。Join报文从组成员端DR开始逐跳发送,直至到RP。 + +### 组播源注册: +在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。具体过程如下: + +组播源将组播报文发给源端DR。 +源端DR接收到组播报文后,将其封装在Register报文中,发送给RP。 +RP接收到Register报文,将其解封装,建立(S,G)表项,并将组播数据沿RPT发送到达组成员。 + +### SPT切换: + +在PIM-SM网络中,一个组播组只对应一个RP,只构建一棵RPT。在未进行SPT切换的情况下,所有发往该组的组播报文都必须先封装在注册报文中发往RP,RP解封装后,再沿RPT分发。RP是所有组播报文必经的中转站,当组播报文速率逐渐变大时,对RP形成巨大的负担。为了解决此问题,PIM-SM允许RP或组成员端DR通过触发SPT切换来减轻RP的负担。 + +* RP触发SPT切换 + + RP收到源端DR的注册报文后,将封装在Register报文中的组播报文沿RPT转发给组成员,同时RP会向源端DR逐跳发送Join报文。发送过程中在PIM路由器创建(S,G)表项,从而建立了RP到源的SPT。 + + SPT树建立成功后,源端DR直接将组播报文转发到RP,使源端DR和RP免除了频繁的封装与解封装。 + +* 组成员端DR触发SPT切换 + + +STP切换机制:组成员端DR周期性检测组播报文的转发速率,一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换: + + 1. 组成员端DR逐跳向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。 + 2. SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。 + 3. 如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。 + +> 缺省情况下,设备一般未设置组播报文转发速率的阈值,RP或者组成员端DR在接收到第一份组播报文时都会触发各自的SPT切换。 + +## 4 BSR管理域: +为了实现网络管理精细化,可以选择将一个PIM-SM网络划分为多个BSR管理域和一个Global域。这样一方面可以有效地分担单一BSR的管理压力,另一方面可以使用私有组地址为特定区域的用户提供专门服务。 + +每个BSR管理域中维护一个BSR,为某一特定地址范围的组播组服务。Global域中维护一个BSR,为所有剩余的组播组服务。 + +下文将从地域空间、组地址范围、组播功能三个角度分析BSR管理域和Global域的关系。 + +### 地域空间: + + +![BSR管理域_地址空间](image/PIM-SM-BSR管理域-地域空间.png) + +如上图所示,对于有相同组地址的不同管理域,各BSR管理域所包含的PIM路由器互不相同,同一PIM路由器不能同时属于多个BSR管理域。各BSR管理域在地域上相互独立,且相互隔离。BSR管理域是针对特定地址范围的组播组的管理区域,属于此范围的组播报文只能在本管理域内传播,无法通过BSR管理域边界。 + +Global域包含PIM-SM网络内的全部PIM路由器。不属于任意BSR管理域的组播报文,可以在整个PIM网络范围内传播。 + +### 组地址范围: + +![BSR管理域_组地址范围](image/PIM-SM-BSR管理域-组地址范围.png) + +每个BSR管理域为特定地址范围的组播组提供服务,不同的BSR管理域服务的组播组范围可以重叠。该组播地址只在本BSR管理域内有效,相当于私有组地址。如上图所示,BSR1域和BSR3域对应的组地址范围出现重叠。 + +不属于任何BSR管理域的组播组,一律属于Global域的服务范围。如上图所示,Global域组地址范围是除G1、G2之外的G-G1-G2。 + +### 组播功能: + +Global域和每个BSR管理域都包含针对自己域的C-RP和BSR设备,这些设备在行使相应功能时,仅在本域内有效。即BSR机制和RP竞选在各管理域之间是隔离的。 + +每个BSR管理域都有自己的边界,该管理域的组播信息(C-RP宣告报文、BSR自举报文等)不能跨越域传播。同时Global域的组播信息可以在整个Global域内传递,可以穿越任意BSR管理域。 + +## 5 PIM-SM(SSM模型) + +### 基本原理(SSM模型) + +SSM模型是借助PIM-SM的部分技术和IGMPv3/MLDv2来实现的,无需维护RP、无需构建RPT、无需注册组播源,可以直接在源与组成员之间建立SPT。 + +SSM的特点是网络用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。组成员端DR了解到用户主机的需求后,直接向源端DR发送Join报文。Join报文逐跳向上传输,在源与组成员之间建立SPT。 + +在SSM模型中,PIM-SM的关键机制包括邻居发现、DR竞选、构建SPT。 + +### Anycast RP: + +配置基于PIM协议的Anycast RP功能时,当RP收到源DR发送的注册报文后,对注册报文的源地址进行判断,如果是从源DR发送过来的,将注册报文转发给Anycast RP对等体,如果注册报文是从Anycast RP对等体发送过来的,则不进行转发。 + +RP转发注册报文时,需要将源地址替换为Anycast RP本地地址,目的地址替换为Anycast RP对等体地址。从而达到Anycast RP之间相互学习源组信息的目的。 + +Anycast RP集合的成员与外部均建立MSDP对等体; +将Anycast RP集合中的RP分为两部分,其中一部分与外部建立MSDP对等体,另外一部分不建立MSDP对等体,当与外部建立了MSDP对等体的RP收到MSDP SA报文时,转换为注册报文发送给其它未建立MSDP对等体的RP。 + +* 注意事项 + +每个Anycast RP最多可以配置16个对等体。 + +在同一PIM SM域内配置Anycast RP,Anycast RP之间逻辑上需要配置为全连接结构,即任意两两Anycast RP之间配置为Anycast RP对等体。 + +* 通过Anycast RP,可以实现: + + * RP路径最优:组播源向距离最近的RP进行注册,建立路径最优的SPT;接收者向距离最近的RP发起加入,建立路径最优的RPT。 + * RP间的负载分担:每个RP上只需维护PIM-SM域内的部分源/组信息、转发部分的组播数据,从而实现了RP间的负载分担。 + * RP间的冗余备份:当某RP失效后,原先在该RP上注册或加入的组播源或接收者会自动选择就近的RP进行注册或加入操作,从而实现了RP间的冗余备份。 + +## 6 PIM BFD和PIM GR + +### PIM BFD +为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要快速检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。 + +BFD(Bidirectional Forwarding Detection)检测机制可提供毫秒级的快速检测,并采用单一机制对所有类型的介质、协议层进行检测,实现全网统一的检测机制。其检测原理是在两个系统间建立BFD会话,并沿它们之间的路径周期性发送BFD检测报文,如果一方在检测周期内没有收到BFD检测报文,则认为该路径发生了故障。 + +### 在PIM中的应用: +在组播的应用中,如果共享网段上的当前DR或Assert winner发生故障,其他PIM邻居会等到邻居关系超时或Assert timer超时才触发新一轮的DR竞选或Assert竞选过程,导致组播数据传输中断,中断的时间将不小于邻居关系的超时时间或Assert timer超时时间,通常是秒级。 + +PIM BFD能够在毫秒级内检测共享网段内的链路状态,快速响应PIM邻居故障。如果配置了PIM BFD功能的接口在检测周期内没有收到当前DR或Assert winner发送的BFD检测报文,则认为当前DR或Assert winner发生故障,BFD快速把会话状态通告给RM,再由RM通告给PIM。PIM模块触发新一轮的DR竞选或Assert竞选过程,而不是等到邻居关系超时或Assert timer超时,从而缩小组播数据传输的中断时间,提高组播数据传输的可靠性。 + +### PIM GR: +滑重启GR(Graceful Restart)属于高可靠性HA(High Availability)技术的一种,实现协议重启时业务的不间断转发(Multicast Non-Stop Forwarding)能力。PIM GR是一种组播协议GR。在具有双主控板的设备上,PIM GR可以在设备进行主备倒换时实现用户组播流量的正常转发。 + +目前,仅PIM-SM(ASM模型)与PIM-SM(SSM模型)支持PIM GR,PIM-DM不支持PIM GR。 + +### 基本原理 +PIM GR依赖于单播GR。设备进行主备倒换期间,新主控板的PIM协议需要从下游邻居重新学习PIM加入状态,同时还需要从IGMP成员主机学习加入的组成员。新主控板的PIM协议通过以上过程完成如下动作: + +* 重新计算PIM组播路由表项。 +* 维持下游邻居的加入状态。 +* 更新转发平面的组播路由表项。 + +通过PIM GR,设备可以达到主备倒换后快速恢复新的主用主控板的PIM路由表项及刷新接口板组播转发表项的目的,从而最大限度地减少主备倒换对用户组播流量转发的影响。 + +### 工作机制: +PIM GR建立在单播GR的基础上,整个PIM GR的过程分为三个阶段:开始阶段(GR_START)、同步阶段(GR_SYNC)和完成阶段(GR_END)。 + + +![PIM GR示意图](image/PIM-GR示意图.png) + +* GR_START + +RouterA发生主备倒换,PIM协议启动GR定时器,PIM GR进入开始阶段,同时单播开始进行GR。 + +PIM协议向所有使能PIM-SM的接口发送携带新的Generation ID的Hello报文。 + +RouterA的下游邻居RouterB、RouterD发现RPF邻居的Generation ID改变,向RouterA重新发送Join/Prune报文。 + +若网络中使用动态RP,当网络中的邻居收到Generation ID改变的Hello报文后,向RouterA单播发送BSR报文,恢复RouterA的BSR及RP信息。 + +RouterA通过接收下游RouterB、RouterD发送的Join/Prune报文,在空的入接口表中创建PIM路由表项,记录下游的加入信息。 + +在此期间,转发模块转发表项保持不变,维持组播业务数据的转发。 + +* GR_SYNC + +单播GR结束,PIM GR进入同步阶段,根据单播路由信息建立组播分发树,恢复PIM路由表项的入接口,更新到源或到RP的加入队列,并通知组播转发模块更新转发表。 + +* GR_END + +GR定时器超时,PIM协议完成GR,并通知组播转发模块。组播转发模块老化GR期间未更新的转发表项。 + +## 7 PIM补充知识 +### Hello消息作用: +PIM中的hello报文发送间隔是30s,邻居的超时时间为3.5(105s)倍的hello interval时间。 + +在PIM-DM网络中,刚启动的组播路由器需要使用Hello消息来发现邻居,并维护邻居关系。路由器之间周期性的发送Hello 消息来构建和维护SPT数。 + +Pim timer hello interval, 在接口视图下配置发送hello消息的时间间隔。hello消息默认周期是30s。 + +除了维护邻居关系外,Hello消息还具有一个重要的功能就是在多个路由器网段中选举DR指定路由器。DR充当IGMPv1查询器。在IGMP概述中已经提到过IGMPv1中查询器的选举路由组播协议决定。 + +在PIM-DM中各路由器通过比较hello消息中携带的优先级和IP地址,为多路由器网段选举指定路由器DR,充当IGMPv1的查询器。 + +当DR出现故障时,接收hello消息将会超时,邻居路由器之间会触发新的DR选举过程。 + +pim hello-opthion holdtime interval在接口视图下配置hello消息超时时间。默认情况下超时时间为105s. + +PIM DR的选举过程: + +* 优先级大的。(默认为1) +* IP地址大的。 + +> 注:在PIM-DM模式下,DR只用于充当IGMPv1版本的查询者,没有其他用途。 + +### RPF检测的顺序: +* 优先级优先(默认): + + 1. 如果同时存在单播和组播路由(用于RPF检查的组播路由条目),比较优先级,优先级越小越优。 + 2. 如果优先级一样,组播静态>MBGP>单播(默认情况下组播静态优先级为1,MBGP优先级为255,单播路由需要视协议而定。) + 3. 如果都是单播路由,比较路由的掩码长度,掩码查毒越长越优。 + 4. 如果掩码长度一样,比较下一跳的IP地址,IP地址越大越优。 + +* 掩码长度优先: + + 1. 如果同时存在单播和组播路由,比较掩码长度,掩码长度越长越优。 + 2. 如有掩码长度一样,比较路由协议优先级,优先级越小越优。 + 3. 如果优先级一样,组播静态>MBGP>单播。 + 4. 如果都是单播路由,比较下一跳的IP地址,IP地址越大越优。 + +### Assert + +利用Assert选举出广播网中的winner和loser,winner在广播网中只能有一个,loser可以有多个。只有weinner可以装发组播流量,而loser只能被动监听winner状态,而不能发送组播流。 + +* 什么情况下才会触发assert机制? + +如果下游接口接受到自己发送的组播流,就会触发assert选举。 + +* Assert报文中携带的内容: + + 1. 包含Assert报文发送者到达组播源所使用的路由协议优先级。 + 2. 包含Assert报文发送者到达组播源的距离(metric)。 + 3. 包含Assert报文发送者的IP地址。 + +* Assert的选举过程: + + 1. 比较发送者到达组播路由协议的优先级,越小越优。 + 2. 如果优先级一样, 比较到达组播源的距离(metric),距离越小越优。 + 3. 如果metric也一样,比较报文发送者的IP地址,IP地址越大越优。 + +### RP +在PIM-SM组播网络里,当当共享树树根的节点称为RP(Rendezovous Ponit)。 + +* RP的作用: + + 1. 共享树里所有组播流都通过RP装发到接收者。 + 2. RP可以负责几个或者所有组播组的转发,网络中可以有一个或过个RP。用户通过配置命令,可以限制RP只为IP地址在一定范围的组播组服务。一个RP可以同时为多个组播组服务,但一个组播组只能对应一个RP。所有该组成员和向该组播发送数据的组播源都向唯一的RP汇聚。 + +* RP的发现: + + 1. 静态RP:在PIM域中所有PIM路由器上逐一进行配置,静态指定RP。 + ``` + static-rp rp-Address //指定静态RP的IP地址。 + ``` + + 2. 动态RP:在PIM域内选择几台PIM路由器,配置称为C-RP(Candidate-RP),最后从C-RP中竞选产生RP。 + 使用动态RP,必须同时配置C-BSR(Candidate-BootStarp Router)。由C-BSR竞选产生BSR。 + +RP是PIM-SM域中的核心路由器,在小型并且简单的网络中,组播信息量少,全网络仅依靠给一个RP进行信息装发即可,此时可以在SM域中个路由器上静态指定RP位置。但是更多的情况下,PIM-SM网络规模都很大,通过RP转发的组播信息量巨大,为了缓解RP的负担同时优化共享树的拓扑结构,不同组播组应该对应不同的RP,此时就需要自举机制来动态选举RP,配置自举路由器BSR(BootStrap ROuter)。 + +### BSR + +第一步:需要在组播网络中选举BSR,在组播网络中可以指定多个C—BSR(候选BSR),多个C-BSR之间需要进行比较,选举出一台BSR设备。在一个组播网络中只能有一台BSR,但可以有多台C-BSR。 + +* BSR的选举过程: + + 1. 比较优先级,优先级越大优越。(默认优先级为0) + 2. 如果优先级一样,比较IP地址,IP地址越大越优。 + +> 注:BSR只负责收集C-RP的信息,然后利用BSR报文通告到整个组播网络,最终的RP选举由叶路由器决定。 + +* RP的选举过程: + + 1. 比较C-RP可以负责的组播组掩码长度,掩码长度越长越优。 + 2. 如果组播掩码长度一致,比较C-RP的优先级,优先级越小越优。(默认优先级为0) + 3. 如果优先级也一样,比较HASH值,hash值越大越优。HASH值的计算涉及:组地址、Hash Mask(由BSR通告)、C-RP地址。 \ No newline at end of file