From 7c1dd0807281c4086582876a33596d03e69ead3e Mon Sep 17 00:00:00 2001 From: estomm Date: Tue, 29 Oct 2019 20:01:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4=E8=AE=A1=E7=AE=97=E6=9C=BA?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=AE=9E=E9=AA=8C=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 计算机网络实验.md/H3C COMMAND.md | 347 ---------- .../1 网络实验入门.md | 4 +- 计算机网络实验/10 组播实验.md | 13 + .../11 IPv6实验.md | 0 .../2 链路层实验.md | 0 .../3 网络层实验.md | 0 .../7 OSPF实验.md | 0 .../8 BGP实验.md | 0 计算机网络实验/9 网络管理实验.md | 11 + .../BGP协议.md | 0 {计算机网络实验.md => 计算机网络实验}/DHCP.md | 0 计算机网络实验/H3C COMMAND.md | 655 ++++++++++++++++++ .../IPv6-DHCPv6.md | 0 .../IPv6-ICMPv6.md | 0 .../IPv6-NS.md | 0 .../IPv6-OSPFv3.md | 0 {计算机网络实验.md => 计算机网络实验}/IPv6.md | 0 .../OSPF协议.md | 0 .../RIP协议.md | 0 .../STP 协议.md | 0 .../VLAN技术.md | 0 .../image/ASExternal-LSA通告格式.png | Bin .../image/BGPOPEN报文格式.png | Bin .../image/BGP报文头实例.png | Bin .../image/BGP报文头格式.png | Bin .../image/BGP状态机.png | Bin .../image/BGP路由策略处理过程.png | Bin .../image/BGP路由衰减.png | Bin .../image/ICMPv6报文实例.png | Bin .../image/ICMPv6报文格式.png | Bin 计算机网络实验/image/IGMPproxy备份机制.png | Bin 0 -> 13198 bytes 计算机网络实验/image/IGMPsnooping端口.png | Bin 0 -> 25997 bytes 计算机网络实验/image/IGMPv1报文实例.png | Bin 0 -> 59536 bytes 计算机网络实验/image/IGMPv1报文格式.png | Bin 0 -> 2486 bytes 计算机网络实验/image/IGMPv1新成员加入机制.png | Bin 0 -> 5167 bytes 计算机网络实验/image/IGMPv1查询响应机制.png | Bin 0 -> 10385 bytes 计算机网络实验/image/IGMPv2报文实例.png | Bin 0 -> 27780 bytes 计算机网络实验/image/IGMPv2报文格式.png | Bin 0 -> 2560 bytes 计算机网络实验/image/IGMPv2查询器选举机制.png | Bin 0 -> 9831 bytes 计算机网络实验/image/IGMPv2离开组机制.png | Bin 0 -> 8074 bytes .../image/IGMPv3成员报告报文GroupRecord.png | Bin 0 -> 3988 bytes .../image/IGMPv3成员报告报文实例.png | Bin 0 -> 49632 bytes .../image/IGMPv3成员报告报文格式.png | Bin 0 -> 4001 bytes 计算机网络实验/image/IGMPv3查询报文实例.png | Bin 0 -> 29764 bytes 计算机网络实验/image/IGMPv3查询报文格式.png | Bin 0 -> 4493 bytes .../image/IPV6 PMTU原理.png | Bin .../image/IPv6两端同时重复检测.png | Bin .../image/IPv6全球单播地址.png | Bin .../image/IPv6唯一本地地址.png | Bin .../image/IPv6地址生命周期.png | Bin .../image/IPv6地址生成.png | Bin .../image/IPv6地址解析过程.png | Bin .../image/IPv6基本报文头.png | Bin .../image/IPv6子网路由器任播地址.png | Bin .../image/IPv6扩展头包.png | Bin .../image/IPv6报文实例.png | Bin .../image/IPv6组播地址格式.png | Bin 计算机网络实验/image/IPv6组播地址格式2.png | Bin 0 -> 4291 bytes .../image/IPv6路由发现功能.png | Bin .../image/IPv6路由通告RA报文.png | Bin .../image/IPv6路由通告RS报文.png | Bin .../image/IPv6邻居状态迁移.png | Bin .../image/IPv6重定向.png | Bin .../image/IPv6链路本地地址.png | Bin .../image/Keepalive报文实例.png | Bin .../image/LSAHeader.png | Bin .../image/NetworkLSA通告格式.png | Bin .../image/Notification报文实例.png | Bin .../image/Notification报文格式.png | Bin .../image/OPEN报文实例.png | Bin .../image/OSPFDD报文实例.png | Bin .../image/OSPFDD报文格式.png | Bin .../image/OSPFLSACK报文实例.png | Bin .../image/OSPFLSACK报文格式.png | Bin .../image/OSPFLSR报文实例.png | Bin .../image/OSPFLSR报文格式.png | Bin .../image/OSPFLSU报文实例.png | Bin .../image/OSPFLSU报文格式.png | Bin .../image/OSPFhello报文.png | Bin .../image/OSPF五种链路状态描述类型.png | Bin .../image/OSPF五种链路通告类型.png | Bin .../image/OSPF报文.jpg | Bin .../image/OSPF报文交互过程.png | Bin .../image/OSPF报文头.png | Bin .../image/OSPF邻居状态机.png | Bin 计算机网络实验/image/PIM-GR示意图.png | Bin 0 -> 7882 bytes .../image/PIM-SM-BSR管理域-地域空间.png | Bin 0 -> 7351 bytes .../image/PIM-SM-BSR管理域-组地址范围.png | Bin 0 -> 8707 bytes .../image/PPP帧格式.jpg | Bin .../image/PPP状态图.jpg | Bin .../image/PPP状态图.png | Bin .../image/Refresh报文实例.png | Bin .../image/Refresh报文格式.png | Bin .../image/Router-LSA通告格式.png | Bin .../image/STP报文实例.png | Bin .../image/STP报文格式.png | Bin .../image/Summary-LSA通告格式.png | Bin .../image/UPDATE报文实例.png | Bin .../image/UPDATE报文格式.png | Bin .../image/VLAN帧格式.jpg | Bin .../image/VLAN数据帧格式.png | Bin .../image/VLAN聚合图1.gif | Bin .../image/VLAN聚合图2.gif | Bin .../image/ipv6重复地址检测原理.png | Bin .../image/ospfhello报文格式.png | Bin .../image/不同设备VLAN内互访.gif | Bin .../image/同设备VLAN内互访.gif | Bin .../image/同设备VLAN间互访.gif | Bin .../image/四中网络类型.png | Bin .../image/团体属性说明.png | Bin .../image/端口聚合.jpg | Bin .../image/网络类型NBMA.png | Bin .../image/跨设备VLAN间互访.gif | Bin 计算机网络实验/组播-IGMP协议.md | 432 ++++++++++++ 计算机网络实验/组播-IP组播.md | 196 ++++++ 计算机网络实验/组播-MSDP.md | 168 +++++ 计算机网络实验/组播-PIM.md | 429 ++++++++++++ 117 files changed, 1906 insertions(+), 349 deletions(-) delete mode 100644 计算机网络实验.md/H3C COMMAND.md rename {计算机网络实验.md => 计算机网络实验}/1 网络实验入门.md (98%) create mode 100644 计算机网络实验/10 组播实验.md rename {计算机网络实验.md => 计算机网络实验}/11 IPv6实验.md (100%) rename {计算机网络实验.md => 计算机网络实验}/2 链路层实验.md (100%) rename {计算机网络实验.md => 计算机网络实验}/3 网络层实验.md (100%) rename {计算机网络实验.md => 计算机网络实验}/7 OSPF实验.md (100%) rename {计算机网络实验.md => 计算机网络实验}/8 BGP实验.md (100%) create mode 100644 计算机网络实验/9 网络管理实验.md rename {计算机网络实验.md => 计算机网络实验}/BGP协议.md (100%) rename {计算机网络实验.md => 计算机网络实验}/DHCP.md (100%) create mode 100644 计算机网络实验/H3C COMMAND.md rename {计算机网络实验.md => 计算机网络实验}/IPv6-DHCPv6.md (100%) rename {计算机网络实验.md => 计算机网络实验}/IPv6-ICMPv6.md (100%) rename {计算机网络实验.md => 计算机网络实验}/IPv6-NS.md (100%) rename {计算机网络实验.md => 计算机网络实验}/IPv6-OSPFv3.md (100%) rename {计算机网络实验.md => 计算机网络实验}/IPv6.md (100%) rename {计算机网络实验.md => 计算机网络实验}/OSPF协议.md (100%) rename {计算机网络实验.md => 计算机网络实验}/RIP协议.md (100%) rename {计算机网络实验.md => 计算机网络实验}/STP 协议.md (100%) rename {计算机网络实验.md => 计算机网络实验}/VLAN技术.md (100%) rename {计算机网络实验.md => 计算机网络实验}/image/ASExternal-LSA通告格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGPOPEN报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGP报文头实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGP报文头格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGP状态机.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGP路由策略处理过程.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/BGP路由衰减.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/ICMPv6报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/ICMPv6报文格式.png (100%) create mode 100644 计算机网络实验/image/IGMPproxy备份机制.png create mode 100644 计算机网络实验/image/IGMPsnooping端口.png create mode 100644 计算机网络实验/image/IGMPv1报文实例.png create mode 100644 计算机网络实验/image/IGMPv1报文格式.png create mode 100644 计算机网络实验/image/IGMPv1新成员加入机制.png create mode 100644 计算机网络实验/image/IGMPv1查询响应机制.png create mode 100644 计算机网络实验/image/IGMPv2报文实例.png create mode 100644 计算机网络实验/image/IGMPv2报文格式.png create mode 100644 计算机网络实验/image/IGMPv2查询器选举机制.png create mode 100644 计算机网络实验/image/IGMPv2离开组机制.png create mode 100644 计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png create mode 100644 计算机网络实验/image/IGMPv3成员报告报文实例.png create mode 100644 计算机网络实验/image/IGMPv3成员报告报文格式.png create mode 100644 计算机网络实验/image/IGMPv3查询报文实例.png create mode 100644 计算机网络实验/image/IGMPv3查询报文格式.png rename {计算机网络实验.md => 计算机网络实验}/image/IPV6 PMTU原理.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6两端同时重复检测.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6全球单播地址.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6唯一本地地址.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6地址生命周期.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6地址生成.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6地址解析过程.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6基本报文头.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6子网路由器任播地址.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6扩展头包.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6组播地址格式.png (100%) create mode 100644 计算机网络实验/image/IPv6组播地址格式2.png rename {计算机网络实验.md => 计算机网络实验}/image/IPv6路由发现功能.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6路由通告RA报文.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6路由通告RS报文.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6邻居状态迁移.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6重定向.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/IPv6链路本地地址.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Keepalive报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/LSAHeader.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/NetworkLSA通告格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Notification报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Notification报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OPEN报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFDD报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFDD报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSACK报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSACK报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSR报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSR报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSU报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFLSU报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPFhello报文.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF五种链路状态描述类型.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF五种链路通告类型.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF报文.jpg (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF报文交互过程.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF报文头.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/OSPF邻居状态机.png (100%) create mode 100644 计算机网络实验/image/PIM-GR示意图.png create mode 100644 计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png create mode 100644 计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png rename {计算机网络实验.md => 计算机网络实验}/image/PPP帧格式.jpg (100%) rename {计算机网络实验.md => 计算机网络实验}/image/PPP状态图.jpg (100%) rename {计算机网络实验.md => 计算机网络实验}/image/PPP状态图.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Refresh报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Refresh报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Router-LSA通告格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/STP报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/STP报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/Summary-LSA通告格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/UPDATE报文实例.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/UPDATE报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/VLAN帧格式.jpg (100%) rename {计算机网络实验.md => 计算机网络实验}/image/VLAN数据帧格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/VLAN聚合图1.gif (100%) rename {计算机网络实验.md => 计算机网络实验}/image/VLAN聚合图2.gif (100%) rename {计算机网络实验.md => 计算机网络实验}/image/ipv6重复地址检测原理.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/ospfhello报文格式.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/不同设备VLAN内互访.gif (100%) rename {计算机网络实验.md => 计算机网络实验}/image/同设备VLAN内互访.gif (100%) rename {计算机网络实验.md => 计算机网络实验}/image/同设备VLAN间互访.gif (100%) rename {计算机网络实验.md => 计算机网络实验}/image/四中网络类型.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/团体属性说明.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/端口聚合.jpg (100%) rename {计算机网络实验.md => 计算机网络实验}/image/网络类型NBMA.png (100%) rename {计算机网络实验.md => 计算机网络实验}/image/跨设备VLAN间互访.gif (100%) create mode 100644 计算机网络实验/组播-IGMP协议.md create mode 100644 计算机网络实验/组播-IP组播.md create mode 100644 计算机网络实验/组播-MSDP.md create mode 100644 计算机网络实验/组播-PIM.md 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 0000000000000000000000000000000000000000..892242ac0ffdc98466be8febe5f74eb1d24bfa30 GIT binary patch literal 13198 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 EKW03MumAu6 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPsnooping端口.png b/计算机网络实验/image/IGMPsnooping端口.png new file mode 100644 index 0000000000000000000000000000000000000000..0785754d270526b364e15de0c56cd74ae60930fe GIT binary patch literal 25997 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'$|l4CbhI)x<-B;n6+kpNbhn6O}y92L9qvE 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv1报文实例.png b/计算机网络实验/image/IGMPv1报文实例.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4801695fb694131fdb9694dba098f48c6d8b1a GIT binary patch literal 59536 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv1报文格式.png b/计算机网络实验/image/IGMPv1报文格式.png new file mode 100644 index 0000000000000000000000000000000000000000..67438cafb18978999840229c7cc6f282c37546d7 GIT binary patch literal 2486 zcmV;n2}$;eP)Px#T2M?>MRA?p86GI%;oZ~I&lha6!rJOYiNgQ?{{&&G zRguy$I78~}?R}-!kgCb|_x3!5zn-tbhNaJnii&5J%vyo8H%)C=SXeH3xI|)zy1Kek zbE0;cv2}HIp`oE?s-?~V00{a?L_t(|+U=T+mYXUNfP?PVUWil$i5m0%uX*PO1Wnpa zO>1^j=bYd~9T@nS!9)(lE-xa7eF%1xyX+`87X2?^%n0R0O1Z+=Nja`C%LPiaT_+v3 zCAV#JyUuwC7fC3EE*kgSm7s~dtaG4|oAp&WLMUD{76XJv5K089e!r_4@|IjT(Y44n zjL8O^%w>_kxpTDAy*S{vy^TSfRE? z+4seoMdT}>WC$LmTfLU_tHN^QF>RXgy!D#vB|%`6SmwXaWNg-=bj{`{*E{>UW$G8B zgmp7t@hIAhzL))~{F-l$5}g(O3r1vs;88-xTeIf%&aE4qjepV!Y{t%by#SqJyHl!NT4fmBRk9sQdyb@tuU0%`G3~lTmgUeG+)KQVtM{Qi3L0 zipo~V7B5OMe1LLju@<`39=Mi=P`bv+p1#5-cg|(_S0nykl{q&)5hd@1=zBnl9-=$= z&Sym50OiGbZ_!~qKtHnaZ@sHsu9XmwMj%Nz3|4fuL(M|w?SwJFQpm#~K0t{zfF0io z_3#W?k5agz7Xc*ayH;9j#bYQHrqO_s{yi3bp1YCW z27C&X?4ir^T+o-Skd!Xi+kjHh`-`U81SNzK!l0)YNdzEE3S;>+Koo~NP<9dnlWuKW zs>`lHIR=zPf>MnF9yD-!hvfY%gfe?hf~8!k`rsjXm2mODk=jiQyYmw5(P*;`ykw@2C1Lu?BO1fvwgKpH9CohVxlZQEjS zwpQL)D|PnaBc59un?t(BRE`XW80@`q4n_x@NMWz#z# z=BJcs;4vp_WZsCdN_ubMOoCEnnfF$srsrBQUCv3Azq6QMRD3o6DN57&N7;5b7^FJj zvn*;u3(5g6x4%Hi@kgmy3>e8!BOR`yQl%*M4Gk06h>r*je=e@!%~tsR;>MmHWcwxr zWlAr5EGqB*-QSZp+Iy(r8~6f_LOeo88tuJp+y!;Mvq#4Zn#ts|&b99XX)qCSa5T+O z6b9%gr%G(`Vy6G{zdZy`{Q7t03}tph`!II&OnVB-Yo9ZHN6-gsnF`MOFjRP9n$b6U zl-Q=R`qxnMA3pb^jLA`FccYBGVC`urXFltD{MUsi#_gczyxinj>bh1pdNkSU#l(5y zf3T24GG3Gvqz|QLn$GbmPg~>jHEm~gUbk()Z6L6sU&Vl8le9y8EFSgArA z)GSn!dN7S`dM>PO(fhI&8b7#jPYd5&8q1#r<*dHYabAX?cz>gul+7PaV?K**u!WlHTl{%GonzaD_rVvs zphDw*<(mbvrvVkJI9(`Ff|3 zQ(oKvGd*fdZK#P;>fg+wh$EaWQ+t-qB%VFjwG^o-JkRJU+Q^lu<`}7qC1c7t`PGjR z^R`mHzpa(NwHg zwOLrl6G2NY{;O*`RAxGd4J~RZP3jG|!RN3{{k!(LEDZ=Z6TJ@&aJyJWZ7F3P&X-(E z?QQF%A6RFZ9-{5C+6Om;JR-*m%j$?_U52wkYk2SEf?DJ$h^`op3Fa06fqBm)^p9$qm_kQvvPKc;QskoMULRn5E%d{U1 zwW?>6vx?{H&xjKB<4ikNv7nwDlb+0i(sXSXJLY>Af~N9?g#=nvIIgzD5i(|Kyqvc| zoaQLYs=W4@MzfxKU(Wg#YpEAeSxv<>amphKfv47{=~7p-6cTMe4@$^qHG0F0>MDet z*N#jafWfKpoRAoqP`4E|w%fLTe6HF!!YTAB z@vruQG50yxMxT=ejHz;`@{gMwD_??%J80442{E^ zos)uhleGtlJ6$Ad5VL5;Y`^&B){GFc!e@w#S!CF1ZzZRAE3Zle~3KX8SD@;r%rKxr8zJpYNG`i8sn-fb( zdUOBtf%oZ+kUTR|R|b?1!8UII=%%Er1OQaMrM`3^yJ5JKhLJ7+5W)ulpwIxo`OOn* z0{{pR0|2({0RXvl0D#HoeWRf~0KibDiBvKPvfatj-)1vq?D1W}ePmtHYVuiXk1mIM z{fKr@@$Xaf_<_75FrJsh~L9UYjq)&Kw#(p z%Ds2a;+k+Rds4^cB~nl=VEJ@^CA`7sLGZz^<*s5bk?TC+XR5`ewy3+P`d>Kh`<~MU z-uHJrW~yDZr5!xyn;W8@1nx|K+$cO$ZDI^abhEi`OSLxi+l32nDo|~W7MdK*oR$iSL%UppApeW|czOzqCXo`%CH_-b?k5^-gWja2oa(|pB!9%; zfm0im0OM&bVCzS3e7Ig##zDAvS!e}Ql_b)b54+{lq7#Oa1rvdC6ZFMeXi#2Wi@(;4l>RMs7G=c_@>bp9d)1SAe>=-Z z#{h-Hm9c?^?p@Kq8glWX#mPaXYVZ#hu|J>My#Hq$9PHecx?*HBvsBoo%=1kaKcX8M zH)Z5!wyb^!h<2f3K>g$feH&t)nZ2avevahU8)h7dSc85&^`t) zP6MvSdu+S>B4X1OZdh?TuMg)w8%vwgUT@U0cc2;6nMm zK`9X>4b4G+5O9ijQf8I}mAYL!nWOT}=MsDlHl53L050;&A!SwnSCJ!3q_CAmVt_#( zrGkv~@xP|RgpHZRVxvZ;&(ECRCc}!xjnuU9jI;M$R$6aoLw$p-BLH~6wY*wM&udN6 z-$m6=@1h=CeHFaw*8EUSR~&^M%pcDEjV+l^KJ?)cv&1ZIID&aIP|Rp(j4=lEAGDMJ z$44+Y6kR}xO#*RxyMr{!K_wQLLj(_DlD;dC5D_AE)*7w+^YTtcNOyebVX$OsW@9{i zp6ja?<7&Zg6rW|yuXwXEX*L>}kKF5mKMY*F@s79g{p>D5h9rE5m&-1S3eAn(?av$w zhU3JkVi;sJhQ}>5cxOX2k)`ctPR+NR7YecUMvZG0Lcq5sgLi-elyz;I(38W-kai2B2 zFNC|&C(lXYu2}C9APqdPT}Cc8xJSaAG#5A#caWCYI+DTjTt_lvk&QV+A4a8;T7$Ar zf3IXZ#P$FTNuveS!2Iqu%KA#Tf*fa35n7+vZ2`d2@mfX{ik06f&V&|h!Il}f0iTU` zU--aR0)FK>`Vixz!b6&f7U40_BKKP2hBmi7itLZ%+>)7$*h+f}dWh}k9i~Qo$T)XI z$2|p-0CKZ1ch$MT(}6X7%@{*W-S2^)vGFiiX_?)m zh0LS%TW)XqUOao9EOS1^uTlNZwBj~q>PVa@Y4%kc0$%lVuzo~}{*$Z5f!C^nh}yex zWcmTQ)QXdN9MW(>%87&`lR4MF_tH?mwlt+SEoHC~hysP|u~xg$sM{nCZ^cS1J`LEa ztZIMik7zIb9q>;(iyAd2eNa5-JST3wH|F5ize?mEPc5T02d+z*+p+3rBVpP!G4V`8 z4|GCVYRd{<#Lwsd%msfDkP=4@43=~5Ghy#V9mR8s3H4`i6^qfR8U%4^O&e?0FpIz% zvM8=B>?N_1BN~#mdOy2dkY^I$U(eN0(0`-Nn95<4M`_-gx&S@0%6{2sVJPKJ#jy;! z6B5R8m!eOb@`#A(3@dTHs}+r z?dmkKTJSeZda+^TXW$OG$mLEjnG%6^)pi1L;kIGQ($hLG?r_r$Z3}PG+&6RfJ&_pE z?IUN=$~ejNG(V~k*PRApI+L+R%zmVNF@u)v&IKR%zIKs}e$h%v3YXsk|CKs@LM!=6 zMuDM&_{D`;BZMUi*KK1weE^H0?nESuCpZp(kh}h_;~u1ra43hCI3GMFFE%3C=?3GN z{~tC2_76PP?_F$iD4t^%MAiN1F{qe1+qqa-!k;|e7(m)7bNDH+QlV$nT?`tQ#F5;zbLq_0To*z! zF{I+cF;i0!#psx(?4W(R;TDLZ)yb9ds0#((IpjRy&{7KSH?w!S`8SSSY4L3%tK4ZU zac(jdM4NHga6KO`vR`x6<^)=Pcs;v+Xh)#mcs+e?8`H?%6VKMP6vKMIV8(J&upl%S ztj-@D8InDDc}!H8YFHTc9C_C37IvjR!vsR-Q6vVQ%mtp%b(Yq1QYc?9Z)bYj`Tkxi zN{8^xg3}(e`)`(<$a`9iUksT}5-oVZUuXTOxy>K`W5}Soc28v`g;cqa=WbnMY)k3J zjp0P*WkQbp!0F0(Xgtr8J7BT>)9=Fq5e5l0J^*?KYI=e|Z&B^mfBHiYf6~p7k3Sud zy7*%p*x+|)Krr6X-cT8G3qYlJAt5UE+BmTqH2JEcv+A+wmlV=GT&#RiGCtuHN&Yf7 zAqIr;8c3O)-BK(n-4y+W5U6q_BcoEzeScG^B2AnESw`wAz7PXJ7)@U8cdMMcPS6B) zv%aEe)O5CXD|?3*;P80j!rJ@X`ty$2bP8GC%Xt+F=mags@+L8*3HXqBH!DaZPF1s)eyMbOK0;B*ui@)B7t%*aaxbOS1bdiQ zH@sR~{gcA|`Xj%U^^$mt7RDu77(XhczuwAf*H||F-4?MoL^**RT8La?D&i4+W3THq zPtxJIKff&W+b|gR)+#T6cMnhUC+!pyTQ+SLtX5#+YU?uo+=?6ixWcyYeVWn~yykw> z?bgTh8G0R0uF1?93*D8OI4QB70KNUQwmj^23@wGMyooGB<4Neug$YLtSr38>f zPUK)vfest?)r46z8Bj2GyjTm9ukJ&mmj*Y+M12otaU5&bB`%Nj8wpCs*AB<4BU zVn+?H{5UFT-~UxnhEtZQ0WFij;6x?-ICCIqtKLf7A)G1 zEoG_(^5Djr1~`_<=k?q8jF!jA?@)XA#!7HiAR@?N=zzK1FgqbmHc4NhK#9n$#=IKb zIF*NutHrWU^tu#%HY(c=POh64Hc|nnbRuOcsj%Yc9i;&?^Vkk#utH11K?Oy-s_wxX z#9p^mSRivI6dP?Ycd%6lZS1~oiuF+E>QKNp@y}5pMtwiz4h8@s+hTc)G8i!Z@+73J z`S?vpvx_K4cu62EpM=X@?#E|F@N?j|H~9Xy%l~%K2FWD#6PL>V@CsUq3C0oR(2m zsT&jSX%n6zv(Exv-9l^Wc$dL2y%BCBBFq>F8Qs5wlqiG`7GdHiMlyP*Y4o4{Vh(xx z?*{+o@0L8^u-f%Aa%wnVo5{Ys44{~CG|6aLx!u_AFWfQeRE^(tUV(0@z)M}l}4I9iVV8@_kl#0)1+QuPE;l#{h^x0EA2&RGXh3I(V9 z5rh@rW;vwOVWjfk?o(TlSR--V)_UZ8#t*+ExI=G!vkCxjkp92Kye3@w+_28DWzt@6 zR;=lEkLBgNC#$mN=h`(9>3=$D(37j*9|KU@^-rPB-DzW#us_l4*8Hx)1E75cLkE6uiLjKKrV1lkOgb;L?u|q8G9eaKoaTZmyD7epe*L`7d zE{_5jxG|dQW$Vm1yLu}$l^@uHU<_amJsW-JtsY69{i%to)_U(Rf**I(lY@A{It8w3 zijO8Yb*9Pb?<+E(8rqow5xu<;nAF&-KIP;QyDajttV@30s>PUT|7LvLRYLT-Ci4sq zl185+sQO!;y5F^SwEhVe`~(K7KEcNl55-LTwnVW85x~np3J%{hYO`8p`7z zsdZZrjx)7CV2*qh*&3N~VU(S`QxA-a(B=9d?sm+k2aBi-#y>Q7!s39xZvj8eC~LBJ z=%QUhTYVjG9lLdb&+)@FIClMrs1fPmBoK8}`@cQs#m_5}(YF(BzmBu3OySaLTdDMJ zBE-c8P;ga&$s>DKxdcG8^0Gr?t-BA^M%C{UmUG*3OIDE2{qH?gdjq@(qU8eRJ-X^d zC%7%E^HGm>RHIYGk+raGer^&;UH`s3F#$m@!kyPYEc8cfz+eQbr3(Chw>4pp?6lV5 z5zGpe*zjhKWhXF*VBS#H6x}*)HQ}|qYkj(T9@1g8B9W(3Owz6wA;7us0-(nuXp~?b zT(6QNbSVy79>)^XQ8J>upkx$BG-ud!&ZLiTAi!9OLSh=!!_fP1OY{+?N4z#q|CqiF zhJ>y{Sb$ndU2-d(aFFgD@3j3k*=JFb8_-^5WZTy+o5Bl8?D`_%s5s_CXR<&zRFlh|$8xor z|62OH!_tgR3svmSgBKomL7c*AY&n z96I#k_sR>`#G6&z*(s?l6@)PpQ-$9!6pr)dw8G%Oe?Qz=3C~vGg#>y2P8(Eei5ff| zTZq4VMka)P!%$~>t5YF-YkVQ>M8bOI$UV8W#5}B#obrm-G5$KF$J`6H=Leu!TtAHd z#GF^fxe5}pA%`{pxtJqn1sfL9%(*NII{sCdcoxU`$RQEndps@LTo=v+3u2W7(-3*A zU}c#%85&w9=&&Vo;o+Z({$~`lNGDHzI8^mE!zHmV)Xi7y7WJsb3<#q}U#EK$1bl&5 z?H@6Kh07PejAx=A3s*7fE0R<#Q+Zi^1N|4p6>{YYlkJytp?ITuX8H;ts*xDGmivf?I+XcWtpE#WlDTD_-2SP-t)7 z?|wh;-}~px%zozVnR8~IS$nNLP)&6Oycd)&0001s&_v}M?I^zyZ2B9 znwPf1J3#FO^#Q7ZX(z2F4FEJGzI?QNhHBGWD{89&0D&w3Kv)z2@PIOf?E?TlAOPUd z0ss(&0|4aiIp4Iz0RT1vC0S`*f3uTZQ>1{N&(J}9X6JQjgG1I-u~O$(p@H^heL-&M zNxBlr`hpR2Jn1_ZrKC@391LXTMo_x>uWr)p9h&_Sm~w0p^s>L9y>@ zp0+0+4QnO9c9S_Gli+Yvt*{FuZ&D_QIkb(!7NNi1_KwHgh zDn>b#!stC3|1$e|q}yG$QJPvtM7n83P=;jeJ(PqM%b+tBnCwWF7U=c&elOp1l-;_$ zaIHN@Q}||1XNYf=EKt6p!R!30i0)}W>aPMYp_1o9d81|3bFAFRSe7d;MOP<= z*(E)Z=3{YMwbo+lb+k(eBb?}5yfRAkwLvCN`*CAK-^ztCTcUd~HhNnQNhS;DrZv@I&IT|{=2 z7(8;#%wS`iu4qC8Aui=%2BKpr=@rJE%I{sqZI!CPC>Qmf&6^lZj; z?s``83o6=xR3l_k#1IA^P#knQxqm0+ z`q|kfQKM_gXj9-iX!;fK!?Odu{`M@F?M;4zXrQ$AZny~IPqN>@OpY3q^9Je>X{G=?Ht zRo@w9lNnLVFhE9as^7e>9Kby+6WZCznPojNi}CnKLovFDhy8Ya{=lIZH&68=1vkLr@eh zXIY~|36YR4k5pGI(4V=b_&vAx-abPdln-I0P2eQEHF)`zApOiHC0^Rz`&SL?Bo}k= z7)Po5K9+vr;jRU6t4y)wnl5tc_552T-V|SPdHPS4$<~%+LVGR1tFltFS#l5?ECer` zTnMLfwrxM97wA9);Cx+1)n^0p6Y zlCnygFB4E;p%b};(}f3C(JxvE5N$7?Z*D~w>5wJMpV+$3HE8^B=Pp<|$AMHVy-4`9 zpxOp3W|V{yid719{pP=EUT2>2pY7Xh)OU>^h)H8cONO?Zd`|n^(S-~U4E{Wil+XOI*sgQQBBe7m+g4K< z0Sib8Ag%Qk8r=@pz?HohI;^Mrr*@?Q(J8JF4;kCl15e4_m7}UI{{h~Z{Z5}+-5_pV zQ1{0n-Wj!#Ykn#r^VH%dwMu3nkdfCP~rd7q`K|d`s;#$#_|J zVfcK^_pDkvrg*h@1yk+3(!AoKu~~}%Qu;weG405wDt|UppHddon_*-y~VD#xn5xa2YzP1MzPY(74Dfh-pKJGwtD z^p_ZH{A6E>txifaCF;Q<(H_r-1=<#l9D@Ns!~on~e8_4Q-28qu0sPAu1T!p|7*hy= zv>fB{s`~1=6*5C&PdNXyp@R=9R_0W7<(F@Y`cRCYcckw_eY=|9tnVs;Z z@FRcz>-45cD!4_tm3KTDpB}Z+e!&Og`Qkib&bVJIafssNKoV}=RD&DCjTgu?8f|ER z;lAw^GXy?UY~RXef$LrRW`Y8ow_{+XJ_(OWgEw4jOA?mRsR{-$p~)lDu1GHY%*u58 z4e2=Om&@H($g`NE;8$hBV2i>Mf%jcYP3U0uR|l$OVm+Ex(fn>I0yb*b<93BQL*sw& zfZB~w2>yJid%X1aKzbuxKHd-zF05+FQ_NGzhFkW^T`SO`HmB4zPVDM29{)$SJrpr| z(AT;O^Z7zL#G63+)>lAChLh6N2;(}6Nge_nV83KT0;Vr162Ma*pon~VqCuO^*mM;v zKu6F{v2OXAtWbJ3k<6&A4m!in0lpM>6=Z$$mmnJNTaa9kA(bF2j(@af7ta{8cAXYn zI`Eg)AaJ3}!ZmQR8U|E{@3^a9$9XuY=;^TN;@9-C7+J}`s4-kN?OZ@=LrBX_xXzv| z_;dYCWs_#S8~3>NV9|)^qI`ev3?~VmbYl~)OHcMLGb(c~6?CN$gLMr@xft8;(W0&6 zEv%DhX(FNVP-Ov!P30g**Vna!s!yGHXyPEml6E(>K}{qFhL%r6 zNT5f@5OTX@H=iGk7-ui>F#C#m+Pa<40uw*&yjzP#$Z~CO+ajsf!dtw5`uwPY;gCG%>H57DLl@FY5R)~@kEBkjr2D%tiyfH}JE)%* zdWD8}2FgMs_=Gc0^7~bkI+8YUzu;;@tgb(Mqgdt2TK+Bdvr`{3Yyue_l9k6ug4L#j z#hHcv(9J)Q znp(%so2*dtMuUZel~W5A=7>!5kbBUlTTC$D6OM14k@BI9L1^fT3`wOB64twuCS0T! z+ommZ)pk&ty_&9m&X2qf?+LpfBzdzcn~jxCW_M^w!h6+J7pw*}5@ma=xJNF2txTa^ z^yZOW4gL4@LiVO;*=)4IV=zqQY%%kzzxz64qDG`zpK9lLH4IDu`|a zRlpTP8>A_D&~kb6iw!B;P56Bj1F5K)lj-?M7mC-sQ(*I#azb98(~jx*{|r=qLmg{!u{= zf3@-0;z7(jPUBbG&M;L!3H}TG7y6?cHJF(f27H=ZeRl^t1}NcSTKi6OW&r?@!Gr-= z7W=>d=s3eCQVmnLJmpZHek~Qo!71Xoe;`>YR+mquAT9ouoUI( z^BUE{Pp@Cnn?9j|@TVqoc5WRWtp}YxOQqR#mjf=b)xB2=8i^lbl^w{;4RLX34^9mM z6^X#qe~XnDgdGkuT!J-?y|zV90Ky!`;M6-ku1u6;z4^ z!UL!BdR^~p*}e^=xa>R&uKR25-t(+WZuWE%mU8I5wfP6kzU*C_?eMK|x2fpuH#E@> zuI8(@rRX)61qg=KZwBA}9Fh;m0~f)9AY1A11J#+s%(6d)qU8Sk;46UW9!DiP70b>wy4etu897B${ps?7qn`0VJ&H{QiKG7YxY830pc@ zt=3Trq-^~guk_O((M^V<{yE3XUf8JxhmOq$lUy;A)2k;$S5&1*SRNK!q91uq2DeQi zW0fgP-N2W|gEP{On{V^KR^h>#Kz{iB`1+3dbKTfa;HOa2vt zZ%+4A%aZRzk=J*ff_C_E#1BpMPMT^3D*L9s5zVy^xoF3XN5y5mA@>z+qP-JK)2j4L zpr*@H62`mfe_>1+Tpc4N@|pB}vF5JpA;M|&@NU&B(Ot>e!2`nQT#5!E@cM$YAXPJZ zcsBVw0pmFt$F+M*-aEakgLuIwXLz!KXg*n0cv9iG=%0l{=0XR-X-7Pj&*b1`{?C`3 zn&kgZ{`}ji3B?fK(!s(5$C{nF&C}cXQqtzS4jmKk52&tp*#xIjqg8v!+=MG73tHy~ zi@&rfR|l!qmKzzf`{Vvxa5U}Ey#B-eQvT!p zY+Y4ZVp<^A$tN+oCG3g>O2)In_{tfDjzGyTjlfB}_u7IH$~gN?2r@PfTRkPzdBR@q z!t4Y`n0n!Xzr=YP;!;5%KNR|q#|)-qeGYJ?^>|Jx#xmB%QI9p$PRWgw3VHmESzzM3 zWSd))RvrD_^T&^>O&+{+XE@^XxJxA;8kp}QRYUTAvB4U4)ej|k0CH=TRufk%?|tj{ z7-cV`7V+$t;%3n&zqlWm#>VwH;`eK+Qi0UQRBlab3pwV#yHQI!(6ls^v(~TaN^p^Y z6i2WbvKugKz2IPf%26gpoXCh$#Nl`xkxF2Zw~hGW3xhIV3^nsSTj?76b_1VgbJl2t z`_qOps8+vl7^-R@%S{$Xk!IZ@m3|_DXp*2Uj~OM_5@HhTr}H05OK3(rAc$!na`?q|y}+DJ*EE5lF>!`$#lN&gZM`4!DlI!ITBo9AP~BLUlD|wb zxvDu6<(k#XUI$g#OiBI=*3rJqBv|jfE}~R+>uN<^(+uJ>IP8h4Z9b03i$y}^nc5Cg zjOLW=99d1vO)z;I4WE7Gk$kK5FIoGA2?e0FQiNi+*-F09L_|@H3Pt;NcIvfEJ&`?r z%D{*GRqcLS%6Q3FWfU**Kzw9P_?lyVH7J(#SL0Pf9;W(}ZYbs-16MJskHA&I&ZcQE zV$%<@&*dxdizAJ`RcdXE4L^_OEz*ij;eZPxD4r_~&oPfNnHKu!@$NzkEd~peYWkH42a?1q%SK0x zks>6kKHQ><@=7AOV{zsiFp?1T$_1atphRM1V8`TRek=Kp#0g@F|K#l@mEModFX~O@ z@$o#_gjr}@3tBZ|ri`vrXbLYvG!&~A^Mk0G7*U3sbHQ_ru zCWMUmV+>tHDp_#{=4ShN z;%bneeGc|ulsg3&$N$34NV3rStq|=E9B5y4McgZkzp;b^`qj#vh8}~4d^=S^pI&A! zPqx8fBDegt7m8U}3he|?;aUjVkK%~0rr=hjM1Mz}#8<$QbdrxABXhm+%*rp-ZQj>6 znH^@|FlcJgvLO+$NHbRPEoWs+&y|f(i}_)Wum4J;o+putlYud&SrFuXHs04js8+AY zm{Zg6}}<On8=cCR~{02A>Zb#E7o@W+`J<9aL1sXYq8_Q6nM+ffG~XLPTX)u}Ebw!+JEf z$!~N|uW6Mrq2Pgo*lxmm0a`(RaJeRF!`Mn@c$hyslsf3-)eGO4UEg!gvh+bl>Q z*H^+j81NyCb*s_>)>j(C$s6fAD&rYTi?)s}W0FGPL;vd~`$TLQZ2BqDv+tFt|I7)g z3uF*i^p@PDPPmzei48B&(I8e?}09o;9eX8d4+@lopfDf^G$K`8sHUBa4SPc z6ECA-{aN-iY(-h6=AtUpNlaJqEjO8FTM^!Kli?RHOZH4}5GYFb$8AD5gof|s4VezT z;isC!cra5{$$iRXH}Gf;uIZ4$IReSU@SGPwp+qzM;b6w;X`#c1}E zh+*Vk1NEdUh}WM;r6Xdnj%0_U`N+WOYc5nHqO8{>Sd9blsMcLFb6Ba^{6VG6&T8P{?Ll z^Zx+HXhg$<|LrW@{ia{ct=9@E1g@8Oa$4^5r2%=D+GPo;Ui<#^Eq`|1?@gc&oxk8m zL<7x7lsRh^%MleIy<&%7nB(N3oG|?4dq5R0RN(AAvmo&MVq^J#8u{P$sOtWGloYf7 zWzBq^EA(`kp4nM-Qq*P(qL}|lW+x9->Ca^&*3J8SejwF)heh;N_()00uyoU z{;#Y5G4!gk>NXRDr55rKw!+C1dow{lh6zjCTAOSRh>oZuCidd$DJKv(VL)JKt@damYT)I)cd z<5(Ugo(SB?p5Gmw{T8YFwnIa%XC%W|mE4W$Dn=f(^{2)BV&_8wE?17mAZ)6fqDepW zpXa>P_rI4bPO1gdy2=(F@Xhvd(Z6Siv)k~pUy$@=mo~%B&xh=palpi$jr$3z(BzF- z6rI@+%>SP`kXh`?or~W+ovr(f>tuf4ysul+5$TX$0D;@_oJk-Mx<^USf2%k4zpF>^ z4D3+WiUx%(yUmLM88xFtL+q62H5v zXak2UA>Z=L1slgK?x>EJmK|xL?}EZ} z;(46?D^jhJYt??;L5ly@7tFk(*ofyicw6 zdLvi1gBpR&e%Y*XuD;0O)uwFAWySc`aOR79S?xFNUO>@onlIKR!-IoB1;P5E*2UM; z)~c`V>4l1{bHyw4cKsdMPB!7c&)jk>kJc!uZtx?6+tK7%*2HZL>WcicLYLKAORrM5 zagE#X`Fr-*K=#)1tjF6N#x^ABJHt5S5V53eMD$adq5gTu6wW6OKh^S0pjgu5yEf?q zSF7lguVO71H(@$C>5etxg17Mss;jd(eB<^-MV~4ZJKr3u5{Sm9KRGykw#piTL;nQg zw@~n6loap5ctkw+Ao%oatNaz+PJs06r)3Pj?6LyMJX);>MJ0r4hV}YK;m83oi2;m~ zf|T#yk~-c=l^AvXB&jMsK_2Z@G_Y3wdeb}8Lb2fJpCK0dWxAEMD+l*XMvNR%XskqX z6a_SmXFTb{Rono-5xi)9r)k}#G&bu$$OHnrt=kR`*e2fK(y?cdk zQR=2%!4agY<1+B`(z>^s+-OS_H@r5ljF(Z;!RfZu{p)Mw^)HC6E|mHBpq99UqRkMq zEj}gpHucP6-H|jiV_V!w!^2FfCZa*yA@XHOpwVQL@VN~#y_m$w)`BK#Zg6*dpdQP8CV+@aO4pDGyy9eMojcZ74lu>@q4 zIY^g>h9C-E%qWuMuqm-Drte4Z)_w}X8YblYnvbz5!F)po_XXp@nmLq#NQH|lrW&R0 zBkQZH8G|)?h*cuFgLR+?$-MflBR_s4FJrIvZQN$p*Mn4g4tpz}w_G=wWVltHk}|TN zR5B(A>!G7{_yc76m#{(UOADHze2lQ^k`WKA=0o=!c|V@j0g<p{FPvgCd}!gU?tIE`9wr zVG@uLv&bP~@sWF%z|4yzymE+uDcxy7Yv|gGOCvEsdXw+yF3}u3G3WnHGVAi5v@X`& zjlL46Ea|cO`v6qtxWDEFihNF{>g9w_SH$Gft!Sr<@TT&O;W&M?-o~9gNsly#BAB?Q zhwg1Z(b|R}3*WUN8`b|#4b7U$b@(FF7lLBp6~~(k$>UHUo@8JIMmNl;|7>&v6u37# zqLg+8WT{}<4{ie;_ej=>nF^X;DxO zx>HT?uJWRNm6_+hSey{@U_B?HrjfH%D7c^1LAyLOd*>z2v$xf!qZfsOl~Hu3SfP)= zQfvW}p`7S-LRt!Ve-p@p}ErO&qms`c8>Mecx@mXL2)O2;2Oqz|l&g zyOvh&{CNPOEIpr!1OEPWI_X#@*H?74lfJjkm36Dn7;Y|l^spZKZ|_hK^fo|ykJGTo z03{U?>*FiW>?$=ih7N zujWHH9N-l{PTyPYUfAVT(QW4GEUeCw`sW3ohTfTI-t?`rAgTZKS{tDU9ysW8e*C{Z zEFhC|{Jy`9!+dl#C@J_eV2Mq-{lC;vW8I61^ojf%qhn_(fo$a zjz|UeLil3ur<94B09E9v_?mylQ{W;&mKsIDHLKI2raHf4T0Bzah5{^#=6|tY%~!o0 zjo|LsT*v9=dC$ft2 zlNN+F;7=&ywqC6gET$`nQpC!CmgN(Hec^$B zx-jKNv=iJ)VjEGfg`$gJiI5299-(sQzfdwN9fq}nFgaxLbG`FVFI-dN@Sjp?VV~kj zmqZ#^gyPoyK;q^5F5MlL3_S|}KGJy(T(hUavjZsm$SOTTuLFCUSC3g6Dc6`KA(WhV z2XQl*N&}|odM&Du^Vl0vDmf8y2)u8OUv1PzIh3gvvC{2(+0VcS8=}f3X5ybTclWY`)imn^3AM z(rVWY_v*2!#c|Q>2&QAOkL>p1mOA`38@75#UX^{98Io1{Mu-HvYbh3&IZ8NRTKF3# z?LM@jApclbIRKMF{USG)A0C+R4bxW9_0d5#og%_C@!lXzmhK0GwYn8D zHtbCyoQkeJJ`a|j^E=-7PlvtDplTzl*zO3e7WHng>L>6ZuCI6)kQz;dD*xdiXVSpQ zjQ`4cjWy^1YHM$jJztDZ@6shd{0S`HsY!IR$bP6i^i>Bg?RYV!=d45Fhi3Q0^l4JM zd*m%2dTdWL0pXTK3Yjl}wkw{!I9xFJ$a@Q#lZjYF*F6l)EmEZoSYYsx zNnbS4s(-yI=dDfWhKaYL_i%q3;7jiBd;T8`-om3q`IgT}8RxV#fw%e$c4Z)$ay4rf zs?wxaul^2&(J%gv{2|~GZCIN4+s93tJ*~jk2RiAeWNaoi;C<|Bodb0iIm1=sym5?Z z+rk~poT1>$-xN;$woGnEU)2K}E@UElGjE8ah)bZZB+5N*s}~ zv3LwtRxZSpi=`EjUy1MM73zDLVz=Gr9v_>xgO;zH)S%IH70G8cIRA4>G!@8;+P(fS zk|Gu8#Y<^Rg^P^RKIaA^7tj2kEulqykYul0Y}5({LcM4fEihi zY05ClXU2;3Ur;PnM^`JYCC&(r^*4zKxO8Nns$gh~>7=JF7kC}ID4WyphE+_vPE;c8 zMdzTLJSOuM;S<-7@nd$5ZCs8%?1S%89VPiuk~dRh>E(bG1FM_{PHpmSJ{8+JW4p5@ zR0{GbmIlR38&9~fLEB01Ogsy%vP(^>6$#*jOm(GI(d82rg&20uAFRko_gd5WRBgb6 z2nQPX8c*q&9%}3!jr|^(fQ`A<7rF*rth<`zpGAYG+Oh^IGh>05gg*GKnNIKfJk7De z&%a#<+3K=;fj@9%_!UO_jj9B(awoq(Z(_?P{YauAMH^Vo__x>Mu1?{sQ&2w+z@K);NbajXOlU`U}kB`U4JiUGAXrH0%o07`lBB=I@`zu z3Ot~HQA+@>_aXhXIUGN_Zz)%lw@HC)CBDSGn}xq#eoL5$6DV-y(t~6Z6EWEm;U!V< zWb=p)Xy#g!m!ErY>B(IotFKf}da6HR7mGvTXP47Mjt&@k&2za=%*%a?jZ9j|sG*9P z#YF+Q%Aa&u?GgWA(ibkYGj6x2KPMq|55V<7(((K2}SUqN&Q9<_L(K@2ZFU* zI=7C)pZSk(JkhtWQd( z2^1}$9=juS;vs*mgZLM~*-h}!GCjw%;T<@=>Bp(v-Fu=+d zQ250;|53`2UbX6m!xbX%r9Fy;CLkFP@#1% zje7#=3NS_?_R#mM|B?v$9{-y}K$&i)QOK^CIZ%%R@nC)=l4r)2_djAz_y3et{(p2I zY6Sfk6PaIiO^!aw-(EF%67bL8jb literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv2报文实例.png b/计算机网络实验/image/IGMPv2报文实例.png new file mode 100644 index 0000000000000000000000000000000000000000..935c6bfbdbd09244a77051dbcf3f10c36b6fd0e8 GIT binary patch literal 27780 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 RFekyVl;zds%4IA*{TD?llm-9* literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv2离开组机制.png b/计算机网络实验/image/IGMPv2离开组机制.png new file mode 100644 index 0000000000000000000000000000000000000000..41316dee60e2004f4921f8997385118589fcb5de GIT binary patch literal 8074 zcmdUU_d6S2*nT8dh*64Yjkfj{;;MhkQOigV00`y>03u!h0HiBZ z#3}&b4+8+!kpO@k9spo_lGSXe003}PYpbi8JhR)%wy$)ZFzwyZm=E3m;^sh9$mog5 zP(p^jQ<|o7_?;}_kJwQ2FiMxct4H(nrAalP5VN})wR_O5>mu1nl(h9@^nw&tZonl2 zife9^w2oBWPnq%(=NHwcL?@LnhxgmV{wcQaSqsR@wugj={Hq8*9>hprfgiZYO4-n-P? z?2Gb>4@N(pz5Bf1U#ulEVD8>5%xo>Cjh90VHfpT#P26ICSN3@5S(IaMVt%slBfjGb zgJU*qetssP(5G|HgyrY;yYM-*bFxO#v;3dUEi`lXm+%W4_4kZ z71F2YFv9ujwNj>!u7jU+bDV!o6|dU45Lc)JpM3aPqd|05s^^!mF+o^TEid!9t?Y=M zukY%R7A4GXj3ifSg&c=T-yTY3XWUHMC;VVwI?kEMQT+V*Cyfh96r%S4b6ZtAiRq2g zgP318du-wXkTrL24@V})hWyyXzMM}i4>Aq=P{>DLknR-P?^=yqewc^dj4&KCv4k#R zVz>iWU;jnQwR{*e3C1Zw)9zTv2&SqWr9ul$d=%8|;s===puF!63p@Qp%z{p9nV}3! z30`K|Il5ps3hymGOi1_3(~`V`!&0Z`mBi_MjOq^Yk3+IMwJyTdby47}KiaAehRTXz z8pwO;LP@EpbnI>ie)8bi-L7Ho)o-?P_Hd-K({&O8 zSYRC@gtzZbO=_bUUn)(c0D6BGVAkKuS7ZqaIzpS7?6~97_v0vAD_6sC*jsAe+HzR% zlJV}Q>Xx1;!ES{U&=U&t_Af4IK4VO2X4;>$#v@;!_LP-JsFGaR%UHYUOBj{(rKnoH z9}Da=hKT(-7iuS`Our@jBD!M{?!|vi+h%=b`~hhJYxr>VRwy{@nig!EHF}cn=Qpd< z5;ElW$>2Y!_7q9LIH5Ou@{R@6ch4<;=x<5DucVUBg0;w?8-4|$&Toe(2mNaIX(re0 zXd{if(F$NHQ!^m>64i4QC3|^CCApN9fOB}&Ps4Z%2kvpwoGQ4o_^@>9drT<=P*@5V z>@1#=WuWfcn~nWt&|)+2C1xkDec5#FPk+i?aYJLR5^eD2C-S1=;@K+sOcC@4zS)iX zfn9SxEV+y6V7f%@6q6S6(5ln&qMY|Np|bq`p7Ws<5KOeweO9>3PFNG|WWWez*>1F4 zJp45qNi-#td7b^?fy2;WhYp5KMj15SoPsI>J7Mp+UJR4iY!@e>1OGU*)T5V_;JQS# zGe+_a%i}x4u*E#oqjsxq^T-E{_!ZPl$6rsSfI6y-`|rP2$2`~_;cQ(dSW(SC0cCKk zOVT4&Tk(!>8k<6EEk{t69rZ^T)I+0n=Sb3F$DA!tXsW1e$B)@Me}3tX`3+IPZ-F)i zxF8wx6B4nq_*1O+4fK+03b5a~2d zUot3QJz(zs*L@uK>ahuMD<^pKXfyPCtW{A42p+U zh;U4*(xu(r?EADWUToLx?SPtMObZ;9!*=k$I^^Ublu_@!ij+W!p=`5TJxZf?L>>z0 zE~&uDk)6U}ek0y`Uo0Oy^&)hEejk`RfUi-%x4V(Pph1qjg{>I-nps=w?H(^Cb6jk> zO@`xMBrL2ZA)ebmvVul{3%!cx5zD5D7m2_GU4cqQR(}drv^TFtBq-2@|$eH$^O=#zO&ANU+|G~EJ?cVhwoEEa*|6<^- zWYm^S{_oWMPsU;p;klr6u4zD;;#UHJuU4}vgsVrBF8FD%G>2^uNU|Db|HvJ6<}L=R zPPD-L6qW=VBWPywGE((3xLuZ}$4lzREG(LR2yc=#si81xGv}WTfQ)NmZAp2@3UZkmmd$4;H|LDlVS>z@^Jbv2atV4#yIfKN zs4HbUdc7hVtoIp(O>Z^M3D+M}|3i1{rx-0-E3YkJHZ%I#7d?{#yS`qmp`ufp?EMuD zdg9xM5}9?X%Rddke)P7J<|;Sr?lYTGAkHJ<&N|4SOl}b3`O!Sa_kgc?S z%<*)x{k@%it1pdpN6pm4bhzuEN0Q;Ae}Y%@W5V|fxxsN{o|81hnD+g1`?E2Le=D!5 zZ89FeuTk;_?QPZ$b14S#SKcGSLC5cz@ZJifU*QD~!#eWDugZvB{!_N* zRl`&EnAV!Ivj(i8sOs{1Y#49;iDTegP-(;(;yvCqm0%OT!QcYo8QUM=CiS;$?gBPs zTzZXl1UB4nFY&xm@VN%{&9dqM2yR6mwz)ytGgk`jRd5L)hwj@==Ji>8ppgU?7k8HY(dhz_(3cVH)YVLQ z721yBD<2x@m!5;Wn0v)q04Bqc`+jc;bxi(&_YcG^1;lF8wUNu8Hdq0^Tc4(wkXtoT z?0L>ya4->#MGf+SuJ76T^fjSHaivSGn2dj7k*I6(MH~-azT=mBQJt}aSqFPqI3)p ze9@vssBe|wkXu-G@5~R^3nht0E~G$M^cv1u2Pu8CFq7mZLW$l)0BhL@Zu)zNv)=aI zqj+0Ti9|mGA(n2?3e5zstYUZO$GX$w6r@w%fxDJ~zgvTRH!?$yH>#BC*_3xnIuq0E zFN41RmAP2m;nvxw(GTBX4y0h}ce(frFU1@g&x^7Z#a$gkd-LFrQ#)IlZB|W3E)stp z*)OmB4M!(aev)~)w=L*P_t|Nt_yJ>EEOZ%!@gHpQe`%fOK~O3KSDlcUAt{`guEiGJ+pZVeH|e_`tzkzrH~q9 z1`-}Do__Z6GIS{`LDbr?aPRKFw%r_3j8JGOd{D$8+phARoooWX;UKa6B5MFTWd~HZS>f8cZCo&D76PSlcMC9o~QJd40@PL+Zy)>i6lqcJFL_iRc7t zM$E_JewnXtTr`(af16fvrnMkWDFsT~1kf)hC0M`0I~Snmab8A^G~HcdeNp_NMJ?9z zR?h#QwJ-p)7{x|P3}l}qwAs8;zGzIe?5rkIEia|n{|!-D2^$(EdK`B2?+*TXl^X9L zoB$cimJb&y;Cf`mtdE~%6gWoSBr_HwDW9ALe(G+N+7aj7u+g!3x1Y&7=2KiuAZkmA}0NR>@xD^Iu1THEi3;pK-SZX;)?Rzss-zANJUnsgWWM!;I_ zz_E05H7A<$Otwsl$KqEU)t9|q;x^V@+<5EK-N*$vrjARX)kfZ+-9HNos@CgAATwe= zKD`Y_IAZx>gA~nWKxX{%;2Tz#=UN8Yax%9MfJs;Oo2XK3(|UPDBBwlmIy$UQ=~Oq+ z?=s}CQNON4>-hYLYw^hW>#0lalV-o3i~BVbIV7RSm8UweP$4>kU_2KZW^*{{tP+e&AsUx1&Fk^v)YwW1MGZyuXpANQ~C>(t|yuHB@h{BJ^*;KlkG?i8pcg(X%g}g zT!lMsmpi|E<;5WEsfaj3H=%~`ir3l%=z~Tlfa9`m@rfK2y`*KWwIViMtho)h@eyX^ zObhLA;Ilg-2^`4uRNtP9<8xPt5ER{shD zlo^O6JHKjZ~Y8h>4`61+97H>bflDO_OWbeCJ5sRDndEbRNOe zh`=1A5lpIux?_T0FNffHr*)`hgRBIHLdb6owniBSw}?VCN_8orq_-%Muv-gcFz=K< zML}wYJzUMd9idE*Jf~smmu+W3bXWV8JgaX3ZFX8ygf0w2dcW=Vra*Y*Y^BCRSonAs z$YDSx-c{bQURVyQOi=B*WSnLxmDfGf3<58Vhv_xf?1JaC8a(1OKqYkbwO*>$RF?u| zhJgj5m=9JQAM*QNX(?ascRq#IzNkfDk65J+K zvgy&vkaat|^;6we^K+TL)dY|**IY%NvI_#n+282^EJJPs_AFS7t2$SG^~UTX;F^8H ze5Tozk}&Brg_YC12=>>hem6eRvw`e?Y;qjZv8T>uiGs1nYGQjd6Hsk{uJLdSGJVr8PoJqub#kyP~Y2wrn#p`4p`2X32B z)E4>6Zz`(brb=*v7#CU;t@-ugm_=MAB2f8iuBMTbGe(N6sN?v}>tDWbq_h`~LOWKT zR$6b})OB*ooqj*$dP3u2gPw!6(r6>sKl!N&DZ=;!LdYQ=b?Mc@rO|l9YE3vBj%l{$ zR+~oCxwv_c`KRECs>!YeHwPMhy!amM_4hQ(o?(PwjP1wZEDWPZim-KqA}p0bJh?dP z9b0w;`-0O|EFFo{tfcV0H^@FvWJy6sHsM*FMS8jD_kz5(8ZlD6Z-9kRI)%&3REf0b z%}T216f-{7sMmbhcT=tJ5tcz`Pu0?hzp-D7oDjURcZ3QWU~{ZkIuFyPM-HMmCCAv5 zY>nXEZWw>1PqA2q3C?6qYRE0>}oSkpt334ri%T_nOJf3v`V74P2x+5r~HN9Lhr)owDy7 ztPQ$7gGUuOPHy*Kzg#tdtM|AfzyIre^Z|=%Q0l9qgC5S06{r3q28YjYpJ_L^o@XTx zpJB{%E%{d@mWnfr5Hm!E0}D1cors(h*O5q4yjGx^RZ6QE>`*+b_P2djxm7m%NI~g} zMb;=Ek8bSmYw-+k6=2b1_z{E-@)~`dS4+O{K>4n)s^y7}dle1T#&sszi?F0p>Mo$j zY$YBS@?K`??t}oZGqm^cbvkfIeKZ9}Ry6u;&N(-xfs-R{!Rq*@d#c_nE50GXsQq`D z^xTwrPkRPf6MU8Q8x9XHpI3%zI$jY?m>E68osYsj%Pm8U6npp9Q33ryiiB?>rvbYm zFn8PQGo-se+}6lAQ^8*&785V7oA{KOw1vZOFn14@8BQxW6_KxD%U_sHzmp^}d+Yh< zCD~zb*$0;Nlz0c8=%pQH0^TdrT(|-rO3=Ef=FHKFe1g=JJ zcNjlq(5z_eqmtD0!B+_9d$)fdCw4puy0*RcoJ=m@8eIihmtJ#d z*lI0o^Y&hX9{9({-%bfwCI(E*0u6>>-`2~QFmeA_;ldWJBuiDYoPRsvDU*`L&?-eEvpmQ@|yk3$ebqHDy-@a$JeCF-rPcP?vx)-a-3 zMTOT-BZf@4wF@=huX#patQ);aDT=t_`Y=k!+n0}V!j=-yP*|9=@7&FdG}>YGjV_$< zn3=%6(@(=$7YkK6Cx8B}bph^gkVOy8X8!YeQeQR9RSydjw*=#&sx5*dB)1h{xW(^A ziFxR5ePW@v4{bRn~G17kg)j%n1x*|6SbAi)YDCNeyYJe@ddJcJW zU4#~I$0XYxbEmx+v4Oip(W5^}sbYdU=C-3A>CA(BL^IMFmWR+cOGsT_dd762o{ zX07|LG^^WX;Ne6@_n?gwS5NgY#45#{pb)+{viRmD?R@y^FXYKH2icmo$T;rPy}%_& zT^Z8vFWb&^M=K|TC4UK{~NiV)~Pl=oqO={%dLTF?K6 zV47aT4$H8vj#FMP7x7?pz)MXH>nmTjUxxk`(Y(B+*;n#X8k;Wsab$lmf<0{1?fFg+ zzTxZ0*@&BAIsnWI8R!G3G?sMH>gzp>iGQ!n0>v%P$(VX`mD@}MqkY-zZ zPNQIfTpvbNuuX4j$CET6r3j>zwolv=hbXMRqV7kVcc+8&1UKSwrVvgRGo(7dDsm)0 z3>LiEQ*TRjt0i}d{#MVgYmK}|8~s~e+V|08^foQ^7NcT4%Zcx`P^s(L*#Y4K6jb}S z+-5WS|K4g>6pH8#_pzrRrjfsgM;-O8C!m0}GBe7B1$5XqL)w;JF$Uimhg3DglJy640bsU5Bzr#KIsA+@fl9-^0arqpxyL7iXLW>=|Uggd6Yeh9N58Y;G z^uHpt3=RCcYRKF7?U*sCe+)DhDtnKZWW-BF@5E@`=JZBY3&ZZN zCs`VDWT*uvKZA~RF2C3YjS}5ft?4<$Vs^hTlzH@M{|QzH)~52Bm^I&qsUHS#$n(_R zj;6njtwGw6Y@}MFxXmVW75Mhgv#}R2*gf|SM|C%x9y6`!%Mk%xqzko|M~yT&B|~rS zqFK(CS4P5|W6Hg4&e+O!-W2!yN$F>gUfp4jA|#)7Ib zE2sRhy>Xz4dc^FCm>S4y9F~K`m}*?VSR87f8fPm1PcpA1CA@S)KX(yNf4G0PU;%`G;yb((=KAfjdrk9VvF~P8<547g z7x8rv9C@ak;?(Je_8RT{FEr93YN-@MQv2FxSYxPd_1uL}rame2MDJ%>;pP>1)tZ)6 zW;LEw`AV3w;`^+Ck<3^)tow(=RDv|-?@L-w2BIg54_2!&l_q&5Z%4^XnzYzV zkifAP$twze$MzBSigovBAv5CrR4M+Gusr{HQLx~zcscI>xHBs`@#>xOkT^Y+*}f>w yb{xfQkQ;J7X!}-WFYxlmPqvG}t>vjpQ0(0pUheB&@>ieb0BsF@^$!n_&;K8M)=h)} literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png b/计算机网络实验/image/IGMPv3成员报告报文GroupRecord.png new file mode 100644 index 0000000000000000000000000000000000000000..9be10b033a11a553cd3344d93eda4b2bbef2c92c GIT binary patch literal 3988 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv3成员报告报文格式.png b/计算机网络实验/image/IGMPv3成员报告报文格式.png new file mode 100644 index 0000000000000000000000000000000000000000..26edd8142fb480877bca84dac98b3052e312f6e7 GIT binary patch literal 4001 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 Hu0mjf4vM=s literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv3查询报文实例.png b/计算机网络实验/image/IGMPv3查询报文实例.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1e283a0745a58a04a7489d033d0fc7d079bfdb GIT binary patch literal 29764 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/IGMPv3查询报文格式.png b/计算机网络实验/image/IGMPv3查询报文格式.png new file mode 100644 index 0000000000000000000000000000000000000000..6f691d499dc6ef14de34f536b72515e66ccffbe2 GIT binary patch literal 4493 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fbfde52b21c72174d2664e06b3a7e59dcb7ce6c4 GIT binary patch literal 4291 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 HDE7YqL&uDc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..38e97e7a78140a7088befe1f32b944d7e781445d GIT binary patch literal 7882 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png b/计算机网络实验/image/PIM-SM-BSR管理域-地域空间.png new file mode 100644 index 0000000000000000000000000000000000000000..41b297d037ca513aaaa03495343ac040616e1e22 GIT binary patch literal 7351 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 literal 0 HcmV?d00001 diff --git a/计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png b/计算机网络实验/image/PIM-SM-BSR管理域-组地址范围.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab7df5afbe3b18ac9fb5f312d93a724cf439659 GIT binary patch literal 8707 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 hKE?*XLjEh{ 收到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