《组播通信》

组播地址分类

224.0.0.1-239.255.255.255为组播地址块,其中分为本地网络服务控制块、全局有效组播地址、局部私有组播地址:

224.0.0.0-224.0.0.255为本地网络服务控制块

224.0.1.0-238.255.255.255为全局有效组播地址

239.0.0.0-239.255.255.255为局部私有组播地址

224.0.0.1 代表所有节点,包括路由器、主机;

224.0.0.2代表所有路由器

224.0.0.4代表距离矢量组播路由器DVMRP

224.0.0.5多址访问网络的所有OSPF路由器

224.0.0.6多址访问网络的OSPF DR和BDR路由器

224.0.0.13所有运行PIM组播路由器

224.0.0.9RIP路由器

224.0.0.10EIGRP路由器

224.0.1.39 使用auto-rp时,rp发送的cisco-auto-rp-announce思科自动RP竞选组播

224.0.1.40使用auto-rp时,rp仲裁设备(RP映射代理)发送的cisco-auto-rp-discover思科自动RP发现组播

 

 

 

组播MAC地址和IP组播地址的映射

IP组播地址最后23bit映射到01-00-5E固定组播前缀的后面;由于IP组播地址的二进制中,第一部分1110表示D类地址,后23bit被映射到MAC组播地址,还有中间5bit未能映射,因此造成32个IP组播地址同时映射到一个MAC组播地址:

虽然32个IP组播地址可能被映射到同一个MAC组播地址,但是并不会照成同一个网络里无法区分不通IP组播业务的情况,因为不仅IP组播地址不同,而且第四层UDP端口号也是唯一的,他们都可以用来区分同一个网络中不同的组播业务流

 

 

 

组播协议分类:

IGMP协议

 

IGMP协议工作在路由器和主机之间,有三个版本,默认思科采用第二版本

 

IGMP V1 路由器:运行IGMP V1的路由器发送IGMP V1版本QUERY报文(通用组查询组播报文),目标地址为224.0.0.1(表示通用)。组成员收到查询报文后应该给予回复报告report,如果路由器每隔60秒发送一次Query,连续3次都没有收到任何report报文,就表示该端口上没有组播成员,因此会停止向该端口的网络发送组播报文(修剪状态)。

 

IGMP V1 主机:运行IGMP V1的主机在收到IGMP V1的QUERY报文后必须给予report报文(报告报文),目的地址为需要加入的组播组地址,表示自己需要加入这个组播组;在没有收到query查询报文时,主机也可以主动发送report报文来表示加入组播组。

 

注意事项:在同一个网络里,如果同一个组播组拥有多个(不止一个)组成员,那么在收到query报文时,report回复路由器的组成员只有一个,其他组成员被抑制,这叫报告抑制;理由是“该网段某组播组有多个组成员,只需要发送一份组播数据,即使只有一个组成员,也只需要发送一份组播数据,依然如此,那么只要一个组成员回复路由器即可,无需大家都回复”;其他处于抑制状态的组成员会去侦听组播组地址,当抑制状态的组成员突然接收不到活跃状态的组成员report报文,超时后便主动report到路由器,或者回复query报文。

 

IGMP V2主机:可以发送report报文,如果有多个组成员,则只有一个组成员报告路由器,其他组成员处于侦听式的抑制状态,IGMP V2版本让组成员可以发送离开消息,目的地址224.0.0.2,这样可以加快组播组的老化时间;路由器收到leave组播报文后,会发送一个特定组query查询报文到组播组地址,如果这个组播组还有组成员,则其他组成员中必须有且只有一个成员发送report报文回复报告。如果没有组成员,路由器在3秒内没有收到report回复则删除该组播组状态或者修剪。

注意事项:只有发送了report报文的组成员才能发送leave组播报文离开组播组。

 

IGMP V2路由器:可以发送通用组查询报文到224.0.0.1,也可以发送特定组查询报文到特定组播组地址。发送通用查询是为了发现组成员,特定组查询一般是在组成员回送leave报文后发送,用来询问组播组中是否还有其他组成员;路由器不知道组播组中是否还有组成员,因为其他被抑制的组成员是不会发送report报文,也就导致它们即使离开了组播组也不会发送leave报文,导致路由器猜不出组播组中是否还有其他组成员,因此需要发送特定的针对某个具体组播组地址的查询报文),组成员收到查询报文后,如果自己没有被其他成员抑制,则必须回复report报文。

 

 

IGMP querier查询器

一般情况下,一个网段内只有一个路由器,这个路由器充当查询器的角色,用来发送查询报文QUERY。网段内组成员如果有多个,只需要一个组成员报告report报文,其他组成员处于侦听抑制状态,不会发送report报文,这样节省了带宽;但是反过来,如果该网段有多个路由器,每个路由器都对同一个网段的同一个组播组发送QUERY报文,但结果(组成员的构成)都是一样的,所以也是浪费带宽的;解决办法就是让该网段在有多个路由器的情况下,有且只有一个路由器充当查询器的角色发送查询报文,组成员也有且只有一个发送回应report报文;IP地址最小的会被选择为IGMP 查询器:本网段所有路由器事先都发送一个通用组查询报文到224.0.0.1,组成员会收到查询,本网段的其他路由器也会收到,组成员收到查询会回复report报文到特定组播地址。路由器收到会比较报文源地址,如果自己的IP地址比报文源地址大,则不再发送任何查询报文,这样就选举出了IP地址最小的路由器为查询器,查询器每隔60秒发送一次查询,其他非查询器路由器处于接受侦听状态,一旦120秒超时,没有收到查询器的查询报文,就重新参与选举新的查询器。

 

注意:查询器在IGMP V1里面是没有的,IGMP V2才有这个概念,IGMP V1里用PIM 的DR来取代查询的功能。

 

 

 

 

CGMP协议

第二层交换机接受到组播数据后会当成广播处理,但是并不是所有端口上的主机都是组播组成员,因此浪费了带宽。而IGMP协议属于第三层协议,普通的第二层交换机是无法理解和使用IGMP报文的,因此普通的二层交换机无法根据IGMP报文来生成组播组MAC地址到端口的对应关系(MAC地址表);这时可以使用CGMP来解决,CGMP是CISCO组播管理协议,是第二层协议,CGMP只能工作在CISCO设备之间;在组播组成员发出report报文后,交换机先广播出去,路由器会收到这个被交换机广播的组播report报文。路由器根据report报文生成CGMP报文,该CGMP报文包括组播组IP地址对应的组播MAC地址、发送该report报文的组播组成员MAC地址、报文类型(加入或者退出),该CGMP报文被路由器发送给二层交换机CGMP组播MAC地址01-00-0c-dd-dd-dd,所有侦听这个MAC组播地址的交换机都会收到CGMP报文,如果是加入,则根据该报文生成组播组MAC到端口号的对应关系。如果是退出,则去掉对应关系。

 

 

 

PIM

PIM协议无关组播协议工作在组播路由器之间,用来建立组播路由条目,但是要求路由器之间单播协议能够互通,因为组播路由条目必须通过单播路由表生成,RPF检查也需要单播路由表。

 

 

 

组播树

组播树分为RPT共享树和STP源树。

 

 

 

RPF

RPF反向路径检查用来确保组播数据来自连接数据源的接口,并无环路的转发到转发列表中列出的接口。如果一个主播数据进入一个非RPF接口,这个数据将被丢弃。

 

 

TTL Thresholds(TTL 阈值)

组播传送中的TTL 类似于单播,但是它更灵活,可用于限制多播信息转发的范围。一个

多播包进入路由器后,它的TTL 值首先减 1,在从出口送出去之前,如果出口上所设置的TTL阈值非 0, 则要进行TTL 阈值检验, 所有 TTL 值小于接口阈值的多播包将不会被发送。用接口命令ip multicast ttl-threshold ttl 来实现。

 

 

PIM模式

PIM模式分为密集模式、稀疏模式以及密集稀疏模式。

 

 

 

PIM-DM

PIM密集模式下,组播路由器可以发出如下报文:

Hello报文

Join报文

Prune报文

Graft报文

Graft-ack报文

Assert报文

 

Hello报文用来发现PIM邻居,且每隔30秒发送一次,保持时间是105秒。如果超时,则视为邻居无效,不再发送查询报文给失效的邻居。如果PIM邻居地址为0.0.0.0,则表明邻居就是组播源。

 

Join报文用来建立组播树;每一台PIM路由器都会在以太网口上发送QUERY报文,其目的地址为224.0.0.1,所以组播成员所在的网段上会收到querier查询器的QUERY报文(如果是LAN口的话),如果这时有成员想加入某个组播组,则它必须发送report报文到特定的组播地址,网段上的PIM路由器都会收到这个report报文并建立(S,G)项,但是只有这个网段上的PIM DR才能对外向去往S的上一跳发送Join报文,表示自己这里需要组播数据,上一跳PIM路由器收到join报文后,也建立(S,G)项,再向去往S的上一跳发送join报文;这个时候,一条从组播源到组播组成员的组播转发树形成了。这种组播树中的每一台PIM路由器都有(S,G)项目,即每台路由器都基于组播源加入了同一颗转发树,这种树叫源树或者SPT树。

 

Prune报文用来在密集模式下修剪不必要的组播树分支。密集模式下,所有PIM路由器先假设自己本地都有组播成员,因此都先将组播数据向所有端口(除RPF接口)转发,这时网络的负载最重,与此同时,每一台PIM路由器都默认的在以太网口(非其他接口)每隔60秒发送一份QUERY报文,如果这个LAN接口上没有组播成员,那在3次 query后(180秒)依然是收不到report报文,这时PIM路由器就会向去往S的上一跳发送Prune报文,上跳PIM邻居路由器从某个接口收到prune报文后,将该组播组路由条目的输出接口列表中的这个接口标为pruning状态,表示该输出接口处于修剪状态,不需要组播数据。

 

 

Graft报文用来在修剪成功后在此嫁接到组播树中。因为某些网络没有组播组成员,因此这些分支会被pruned掉,但如果突然有新的组播组成员要求加入组播组,这时组播组成员会主动发送一个report报文给DR,DR收到后不是发送join报文来加入树,而是改为发送graft报文来嫁接到组播树,该DR发送graft报文到上一跳PIM路由器,上一跳PIM路由器在转发给上上跳路由器,直到转发到源所在的DR,这样被修剪的分支就可以加入源树(即把输出接口列表中被标为pruning的接口改为forwording状态),开始转发组播数据了。

 

Graft-ack报文用来对graft报文确认。收到graft报文的路由器除了会将接口从pruning改为forwording,而且会回复一个graft-ack报文,表示自己已经处理完嫁接。

 

Assert报文叫做断言报文,用来选举PIM前转器.。当源到某个组播组成员有多条路径时,只选择其中一条路径,被选中的路由器成为PIM前转器。Assert消息包含源和组地址,以及到源的单播路由AD值和metric值,默认情况下先选择AD最小的,然后是metric值最小的,最后才是IP地址最大的。非前转路由器必须把自己的所有出口pruning掉。

 

PIM前转器

以上图为例,讲解ASEERT选举PIM前转器过程;路由器D会从B和C收到相同的组播数据,路由器D认为只能有一个端口是RPF端口,但是现在从两个端口上都收到了组播数据,因此从这两个端口上向对方上一跳路由器B和C发送一份ASSERT报文,B和C收到D的ASSERT报文后,发送ASSERT报文回应D,D收到B和C的ASSERT报文回应后,比较到组播源的路由条目AD值,最小的为胜出;如果AD一样,就比较路由条目的METRIC值,METRIC值小的为胜出;如果METRIC也一样,则比较邻居IP地址,IP地址大的为胜出;假设上图都是通过RIP学习到组播源的路由条目,因此AD和METRIC都无法区分出,则只能通过IP地址,路由器D发现C的IP地址比B的IP地址要大,因此认为C胜出;最后路由器D向路由器B发送Prune报文,要求B的S1接口转换到prunning状态,B收到D的Prune报文后,将S1接口裁剪掉,然后向上一跳路由器A发送Prune报文,路由器A收到B的Prune报文后,将去往B的接口也给prunning掉。路由器D发现组播成员后,向C发送JOIN报文,C再向A发送JOIN报文,沿途建立(S,G)项目,构成SPT树;而A-B-C这条路径就被裁剪掉了。

 

以上图为例,讲解ASSERT选举PIM前转器过程;组播成员所在的网段有两个PIM路由器B和C,因此第一份组播数据会同时从B和C发出,最后BC以及组播成员都会收到对方的数据,B和C都会认为自己的E1口应该是出口(非RPF口),不应该在入站方向收到组播数据,因此B和C都向对方发送一份ASSERT报文要求仲裁,最后B认为C胜出,C认为自己是前转器,于是C向B发送Prune报文要求对方端口裁剪,B收到Prune报文后,将接受Prune报文的端口E1切换到prunning状态,再向上一跳路由器A发送Prune报文,A收到Prune报文后,将接受Prune报文的端口也给裁剪掉,因此组播数据最后不会走A-B这条路径。路由器C发现内部有组播成员,因此向A发送JOIN报文,要求建立或者加入SPT树。

 

 

 

以上图为例,讲解ASSERT报文选举PIM前转器过程;组播源从路由器A和B同时发送第一份组播数据,第一份组播数据从A和B到达路由器C,C从两个接口上收到同样的两份组播数据,触发C向A和B发送ASSERT报文要求仲裁,A和B收到C的ASSERT后,都给予C路由器一个ASSERT回应;C收到A和B的ASSERT回应后进行比较,发现B胜出,因此向落败的A发送Prune报文要求裁剪,A收到Prune报文后裁剪掉S1接口;C发现内部有组播成员,因此向胜出的B发送JOIN报文,要求加入或建立SPT树。以后组播数据将只从B到C,不会走A到C了。

 

 

 

 

PIM-DM工作流程

第一步:使用hello建立PIM邻居

 

 

第二步:使用hello建立PIM邻居过程中在多址网络里选举PIM DR,IP地址大的为DR,DR负责为多路访问网段上的主机“对外向 RP或S 发送 Join 消息

 

第三步:使用ASSERT报文到224.0.0.13,相互收到ASSERT后,比较到S的路由器AD值和metric值,最小的为PIM 前转器,如果都一样则再比较IP地址,最大的IP(LAN段内用来建立PIM邻居关系的IP)为PIM前转器;前转器向非前转器发送prune报文,非前转器将收到prune报文的接口pruning掉,且发送prune报文到上一跳,上一跳路由器也把其收到prune报文的接口给修剪掉,表示不会通过这个接口把组播数据发送出去。

 

第四步:所有PIM路由器在所有的以太网口上每60秒发送QUERY报文,查询有没有组播组成员,180秒没收到report报文就表示无组播成员,并通过query报文在LAN上选举出IGMP 查询器。

 

第五步:查询器选举出来后,每隔60秒发送一次到224.0.0.1的查询报文。非查询器不再发送查询报文。

 

第六步:如果有组播组成员或者主机想加入组播组,主机会发送report报文响应query报文或者主动发送report报文到特定的组播组地址,PIM DR收到后发出join报文建立源树。没有组播成员的网段,查询报文将超时(180秒超时),PIM DR将发送prune报文进行修剪,收到修剪报文的PIM路由器接口会被标记为pruning状态而不再发送组播数据。在一个LAN网段上,可能有多个组成员都想report到PIM DR,但是最后只有一台发送report,其他主机被抑制,处于侦听report报文状态。

 

第七步:join报文途径的所有路由器将建立(S,G)组播路由项,每一个组播路由项包括S、G、RPF入口、出口列表等。源DR到组播组成员的DR之间将建立一条以源为根的源树。

 

第八步:如果原本没有组播组成员的网段主机需要加入组播组,这个时候主机发送report报文给DR,DR收到报文后,将出口状态从pruning切换到forwording,然后DR向上一跳PIM 路由器发送Graft报文要求嫁接到已经生成的源树中,而不会再发送join报文来加入源树。收到Graft报文的路由器必须将接口切换到forwording状态,然后回复一个Graft-ACK报文。

第九步:组播源通过建立的源树发送组播数据。

 

 

 

PIM-SM

PIM稀疏模式下,路由器之间发送如下报文:

HELLO报文

Bootstrap报文

Candidate-rp-advertisement报文

Join报文

Prune报文

Assert报文

Register报文

Register-stop报文

 

HELLO报文、join报文、prune报文、assert报文和PIM-DM模式下的作用一样。

 

Bootstrap报文

Bootstrap报文叫做自举报文,是BSR自举路由器发送的,地址224.0.0.13,用来通知PIM路由器本网络的RP地址。

 

Candidate-rp-advertisement报文

Candidate-rp-advertisement报文叫做候选RP通告报文,在稀疏模式下,一个PIM域内每一个组播组只能有一个RP工作,但是为了冗余,往往配置了多个RP,但是每个PIM路由器可能因为某些原因,导致选择的RP都不一致,这个时候需要所有的候选RP发送Candidate-rp-advertisement报文给仲裁路由器(BSR路由器),由BSR收集所有Candidate-rp-advertisement报文报文后,选择一些RP为C-RP-SET,并封装成Bootstrap报文发送到224.0.0.13地址,让PIM域内的所有路由器都了解到一致的RP地址。

 

Register报文

Register报文为注册报文,由组播源网络的DR发出,单播发送到RP。当组播源发送组播数据时,组播源网络的DR将组播报文封装成单播注册报文,然后通过单播路由表发送到RP。RP收到注册报文后,解封装得到组播数据,根据组播数据生成(S,G)组播路由项,然后RP发送join报文去往组播源的上一跳路由器,上一跳路由器收到join报文后,也生成(S,G),然后再次发送join到上上一条路由器,直到发送到组播源网络的DR路由器,这样就建立一颗以组播源为根,以RP为叶的源树。通过这个SPT源树,组播源可以以组播方式把组播数据发送给RP了。

 

Register-stop报文

Register-stop报文为注册停止报文,当RP收到以组播形式发送的组播数据后,继续接受以单播形式发送的“组播数据”,但是会向组播源网络的DR路由器发送一个单播的注册停止报文,当组播源网络的DR路由器收到注册停止报文后,停止以单播方式发送的组播数据,保留以组播方式发送。

 

 

 

RP的确定

每个PIM-SM域必须有RP的存在,组播源发送数据到RP,RP再通过共享树发送到每个叶子路由器的组播组成员。由于RP确定后才能建立共享树,所以RP是必须的;RP可以通过三种方法确定:1.手工配置 2.BSR通告 3.Auto-RP机制

 

手动配置RP

可以手动配置每一台PIM路由器,告诉他谁是RP,但这种方法不能配置多个,因此不能冗余,当前RP失效后,必须重新配置PIM路由器,缺乏灵活性和冗余性。

 

BSR通告RP

可以在PIM域内配置多个RP,提供冗余。BSR用来在多个C-RP(候选RP)之间通过优先级(0-255)或者IP地址大小来确定一个RP。具体过程是:C-RP发出Candidate-rp-advertisement报文到BSR,BSR接受到所有的Candidate-rp-advertisement报文后,生成C-RP子集,这个子集包含RP地址和组播组的对应关系,然后封装成Bootstrap报文,Bootstrap报文被发送到224.0.0.13。其他PIM路由器收到这个报文后就知道谁是RP了。

 

 Auto-RP机制

Auto-RP是cisco公司私有的方式,同样需要在PIM域内配置多个C-RP,也需要一个仲裁路由器(RP映射代理)。C-RP先发送RP-Announce竞选报文到224.0.1.39,这个224.0.1.39被RP映射代理侦听,RP映射代理收到后筛选出IP地址最大的RP,然后发送RP-Discovery报文到224.0.1.40,由于所有路由器都侦听这个组播地址,因此它们都将知道谁是RP。C-RP每隔60秒发送一次RP-Announce,RP映射代理也是每隔60秒发送一次RP-Discovery。

 

PIM-SM工作流程:

第一步:通过HELLO报文建立PIM邻居关系,且在多址网络里选举PIM DR路由器。

 

第二步:使用Assert到224.0.0.13选举PIM 前转器

 

第三步:使用静态配置、BSR、auto-rp方法来获取RP地址。以auto-rp为例子,所有C-RP发送竞选报文到映射代理组播地址224.0.1.39,映射代理接受到竞选报文后,只通过IP地址最大的规则来选择一个RP,然后使用发现报文发送到224.0.1.40(其他路由器事先就加入了224.0.1.40)。如果C-RP和映射代理非直连,那两者之间的传输路由器以及需要转发Announce和Discovery报文的路由器必须成为AUTO-RP Listen,RP侦听路由器在收到Announce和Discovery报文后会转发报文,否则在SM模式没有选择出RP之前,任何组播都无法通信,也包括auto-rp的组播通信。建议在SM模式下,所有所有器都配置成listener。

 

第四步:构建RPT树,组播组成员发送Report报文到本地网络的PIM DR,PIM DR发送Join报文到上一跳,上一跳再发送Join报文到上上跳,如此到RP,建立一条基于RP的共享树RPT。

 

第五步:组播源的DR发送单播Register报文到RP注册,RP收到注册报文后向组播源的DR发送Join报文构建到组播源的源树,通过源树,组播源的DR发送组播数据到RP,RP收到组播数据后,发送单播Register-Stop报文到组播源的DR,DR停止使用单播封装组播数据,全面转向组播方式。

 

第六步:如果组播源超过配置的速率阈值,RPT可以切换到STP。如果低于阈值,60秒后切换回RPT;RPT下的组播成员一边接受来自共享树的组播数据,一边report到DR,DR收到report后,向源的DR发起join报文,途径最近的所有路由器,建立SPT。当组播源通过SPT发送组播报文,组播组成员收到第一个通过SPT的组播数据,组播组成员的DR就向RP发送prune报文,表示不需要RPT的组播数据。

 

 

 

 

PIM sparse-dense-mode

PIM 稀疏密集模式下,当RP可用时,PIM处于RPT下,当RP不可用时,自动切换到密集模式,使用SPT。

 

PIM DENSE MODE FALLBACK

稀疏密集模式下,默认情况,当一个组播组有可用RP时,使用RPT通信,但RP失效后会切换到SPT。这种特性叫“密集模式退回”。通过使用no ip pim dm-fallback可以关闭。

 

 

NBMA MODE

当多点接口连接帧中继,对端有多个分支机构时,即使使用broadcast也只能让组播变广播在所有对端发送,但并不是所有对端都需要组播数据,这时可以在总部的多点接口上使用ip pim nbma-mode配置,配置后将根据对端IP来发送组播数据,而不是所有对端端口。

 

 

PIM-SSM模式

SSM特定源模式,使得组播组成员只接受指定的数据源发送的组播数据。在SM模式基础下,实现SSM模式,可以让组播组成员的DR到特定组播源的DR之间建立一条SPT。而省去了SM模式下RP的选举与发现机制,效率更高。SSM模式的实现需要两个条件:

  1. 路由器和主机之间的协议必须切换到IGMP V3。
  2. 在PIM域运行SM模式下,只需要在叶子路由器上开启SSM模式。

简单的概括SSM的流程为:HELLO邻居发现、DR的选举、构建SPT树。SSM规定了专用的组播地址范围232.0.0.0-232.255.255.255,但CISCO路由器可以随意使用任何组播地址来支持SSM。

在SM模式下,部分组播组成员已经使用RPT接受ASM(任意源模型)的数据。其中SSM组播组成员开始使用IGMP V3 report报文发送给DR,DR判断report报文中的组播组地址是否属于本地配置中的SSM地址范围,如果在范围以内则DR收到report报文后,建立(include/exclude S,G)项目,改项目绑定了固定组播源和组播组。DR再将Join报文发送到组播源的上一跳,上一跳也建立这样的项目,当所有的路由器都建立这样的(include/exclude S,G)项目后,一条从特定源到IGMP V3组播组成员的SSM SPT树就建立了。如果在SSM地址范围以外则进行传统的SM模式过程。

 

 

 

MSDP/MBGP

不通的PIM域的RP都只负责本域的组播数据传输,因此RP不知道其他域的组播源信息,如果每个PIM域需要使用同一个组播源,就需要在PIM域的RP之间建立MSDP连接,走TCP 639端口,RP之间通过MSDP连接发送SA消息(活动源),让其他PIM域的RP了解到本域的组播源信息,然后RP通过向组播源发起join报文,建立SPT。数据将沿着spt到达RP,再沿着RPT到组播组成员。当同时有两个以上的 msdp peer向自己连接msdp连接时,选择msdp peer中IP地址最大的初始化连接。

 

如果SA来自组播源域的RP,接受

如果SA来自静态RPF邻居,接受

如果SA来自同一个mesh组,接受

如果SA来自“去往组播源域RP”的最短路径的下一跳,接受

 

PIM域之间的RP在了解到组播源信息后,需要通过MBGP条目才能发送join报文到源,建立SPT树。

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值