PIM

  • PIM(Protocol Independent Multicast,协议无关组播)协议的主要作用就是构建组播分发树。PIM独立于单播路由,但是他的工作依赖于单播路由选择协议的信息(单播路由表),尽管我们倾向于称PIM为组播路由协议,事实上是使用现存的单播路由表去实现RPF检验功能,也就是PIM通过单播路由表来做RPF检查(收到的数据包入接口和到源单播路由的出接口是否一致),从而形成组播分发树,并且产生组播路由表项,从而指导组播流量转发。
  • 组播网络大体可以分为三个部分:
    • 源端网络:将组播源产生的组播数据发送至组播网络。
    • 组播转发网络:形成无环的组播转发路径,该转发路径也被称为组播分发树(Multicast Distribution Tree
    • 成员端网络:通过IGMP协议,让组播网络感知组播组成员位置与加入的组播组。

  • 工作在组播转发网络的协议主要是PIM,MSDP,MBGP。

    • PIM(Protocol Independent Multicast,协议无关组播)协议主要作用是生成AS域内的组播分发树
    • MSDP(Multicast Source Discovery Protocol,组播源发现协议)主要作用是帮助生成AS域间的组播分发树。
    • MBGP(Multicast BGP,组播BGP)主要作用是帮助跨域组播流进行RPF校验。

PIM协议介绍

  • PIM称为协议无关组播。协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF检查,检查通过后创建组播路由表项,从而转发组播报文。 目前常用版本是PIMv2,PIM报文直接封装在IP报文中,协议号为103,PIMv2组播地址为224.0.0.13。
  • 目前在实际网络中,PIM主要有两种模式:
    • PIM-DMPIM-Dense ModePIM密集模式)
    • PIM-SMPIM-Sparse ModePIM稀疏模式) ,PIM-SM模式根据组播服务模型又可以分为:
      • PIM-SMASM:为任意源组播建立组播分发树。
      • PIM-SMSSM:为指定源组播建立组播分发树。
      • 组播分发树的特点:无论网络中的组成员有多少,每条链路上相同的组播数据最多只有一份。被传递的组播数据在距离组播源尽可能远的分叉路口才开始复制和分发。

PIM-DMPIM-SM使用场景

  • PIM形成组播分发树主要有两种模式,即PIM-DM模式与PIM-SM模式,这两种模式分别用在不同的场景下:

    • PIM-DM模式主要用在组成员较少且相对密集的组播网络中,该模式建立组播分发树的基本思路是“扩散-剪枝”,即将组播流量全网扩散,然后剪枝没有组成员的路径,最终形成组播分发树。
    • PIM-SM模式主要用在组成员较多且相对稀疏的组播网络中,该模式建立组播分发树的基本思路是先收集组成员信息,然后再形成组播分发树。使用PIM-SM模式不需要全网泛洪组播,对现网的影响较小,因此现网多使用PIM-SM模式

组播分发树的分类

  • 通过PIM形成的组播分发树主要分为以下两种:

    • 以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree),PIM-DMPIM-SM中均有使用

以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree),PIM-SM中使用

PIM路由表项

  • PIM路由表项即通过PIM协议建立的组播协议路由表项。
  • PIM网络中存在两种路由表项:
    • (S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
    • (*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。

  • S表示组播源,G表示组播组,*表示任意。
  • PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发:
    • 如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
    • 如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
  • Flag值的意义见下一页。

PIM路由表项与组播路由表项

  • 在不同的组播路由器上,组播路由表项会基于不同的表项汇总形成。

    • 最后一跳路由器的组播路由表项主要基于PIM路由表项,IGMP组表项和IGMP路由表项汇总形成。
    • 其余组播路由器的组播路由表项主要基于PIM路由表项形成

PIM-DM介绍

PIM-DM基本概念

  • PIM-DM主要用在组成员较少且相对密集的网络中,通过“扩散-剪枝”的方式形成组播转发树(SPT)。
  • PIM-DM在形成SPT的过程中,除了扩散(Flooding),剪枝(Prune)机制外,还会涉及邻居发现(Neighbor Discovery),嫁接(Graft),断言(Assert)和状态刷新(State Refresh)机制。

PIM-DM协议报文

  • PIM协议报文直接采用IP封装,目的地址224.0.0.13IP协议号103
  • PIM-DM与PIM-SM使用的协议报文类型有所不同。
  • PIM-DM使用报文主要是以下几类:

报文类型

报文功能

Hello

用于PIM邻居发现,协议参数协商,PIM邻居关系维护等

Join/Prune(加入/剪枝)

加入报文用于加入组播分发树,剪枝报文则用于修建组播分发树。加入及剪枝报文在PIM中使用相同的报文格式,只不过报文载荷中的字段内容有所不同

Graft(嫁接)

用于将设备所在的分支嫁接到组播分发树

Graft-ACK(嫁接确认)

用于对邻居发送的Graft报文进行确认

Assert(断言)

用于断言机制

邻居发现

组播转发路径只能在PIM邻居之间建立,因此邻居发现是形成组播分发树的先决条件。

邻居发现主要通过PIM Hello包完成。每隔30s发一个Hello包,超过105s没收到,就删除邻居关系

  • Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。具体如下:

    • DR_Priority:表示各路由器接口竞选DR的优先级,优先级越高越容易获胜。
    • Holdtime:表示保持邻居为可达状态的超时时间。如果在超时时间内没有收到PIM邻居发送的Hello报文,路由器则认为邻居不可达。(105s)
    • LAN_Delay:表示共享网段内传输Prune报文的延迟时间。
    • Neighbor-Tracking:表示邻居跟踪功能。
    • Override-Interval:表示Hello报文中携带的否决剪枝的时间间隔。

首次形成组播分发树

  • PIM-DM模式首次形成组播分发树主要依赖扩散机制、剪枝机制、断言机制与DR选举机制。

    • 扩散机制:组播数据包向所有的PIM邻居泛洪,同时组播路由器产生组播路由表项。
    • 断言机制:当组播转发过程中存在多路访问网络,则需要选举出一个组播转发路由器,避免重复组播报文。
    • 剪枝机制:如果组播路由器下没有组成员,则将源到该组播路由器的组播转发路径剪枝。

扩散机制

  • 组播源发送的组播报文会在全网内扩散。当PIM路由器接收到组播报文,先进行RPF检查,通过后会在该路由器上创建(SG)表项,之后会向所有PIM邻居发送。
  • PIM-DM形成的(S,G)表项有老化时间(默认210s),如果老化时间超时前没有收到新的组播报文,则删除(S,G)表项。
  • 扩散具体过程如下:

扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用“状态刷新机制”加上“嫁接机制”来实现周期性全网扩散感知新成员加组的目的。

断言机制(断言机制由组播数据触发)

当一个网段内有多个相连的PIM路由器向该网段转发组播报文时,需要通过断言机制(Assert)来保证只有一个PIM路由器向该网段转发组播报文

通过断言机制的选举规则将决定组播路由器的转发行为:

  • 获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发
  • 落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除

  • PIM路由器在接收到邻居路由器发送的相同组播报文后,会向该网段发送断言(Assert)报文,进行Assert选举。Assert报文内会携带到组播源的单播路由前缀,路由优先级与开销。选举规则如下:

    • 单播路由协议优先级较高者获胜。
    • 如果优先级相同,则到组播源的开销较小者获胜。
    • 如果以上都相同,则下游接口IP地址最大者获胜。

Assert选举失败的设备会抑制转发,并将这种抑制转发的状态保持一段时间,这段时间就被称为Assert保持时间,默认180s。

Assert保持时间超时后,竞选失败的设备会恢复转发从而触发新一轮竞选。

剪枝机制

对于没有组成员连接的组播路由器,组播网络无需再将组播流量继续放往该设备。通过剪枝机制,组播网络可以将此类路径剪枝。

剪枝机制工作原理如下:

路由器为被裁剪的下游接口启动一个剪枝定时器(默认210s),定时器超时后接口恢复转发。组播报文重新在全网范围内扩散,新加入的组成员可以接收到组播报文。随后,下游不存在组成员的叶子路由器将向上发起剪枝操作。通过这种周期性的扩散-剪枝,PIM-DM周期性的刷新SPT。

  • 当下游接口被剪枝后:

    • 如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行嫁接动作。

如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行状态刷新动作。

维护组播分发树

  • 组播分发树形成后不会一直存在,也不会一直不变。
  • 在PIM邻居关系稳定,组成员没有变化的情况下,维护组播分发树一般有两种方式:
    • 持续发送组播报文,保证组播路由表项能一直存在。

发送状态刷新报文,保证组播路由表项的下行接口状态不发生变化。

状态刷新机制

  • 在PIM-DM网络中,为了避免被裁剪的接口因为“剪枝定时器”超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发State Refresh报文在全网内扩散。
  • 收到State Refresh报文的PIM路由器会刷新剪枝定时器的状态(重置剪枝定时器)。被裁剪接口的下游叶子路由器如果一直没有组成员加入,该接口将一直处于抑制转发状态。

新成员加组

  • 当有新成员加入组播组后,组播网络需要更新组播分发树,才能将组播数据发往组成员。PIM-DM模式在使用“扩散-剪枝”的方式建立组播分发树后,通过状态刷新机制,使下行接口一旦被抑制就无法自动恢复
  • 因此需要一些机制来更新组播分发树,一般PIM-DM模式更新组播分发树的方法有两种:
    • 等待组播路由表超时后,全网重新泛洪。该方法不可控,在现网中无法实现(扩散机制会周期性(默认180s)全网扩散组播数据)

使用嫁接(Graft)机制,当新成员加组后,主动反向建立组播分发路径。现网中一般使用嫁接机制来实现新成员加组

嫁接机制

  • PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。
  • 叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会基于本地的组播路由表向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。

PM-SM介绍

PIM-DM的局限性

中大型组播网络中由于网络较大,如果依然使用PIM-DM会遇到组多问题:

  • 使用“扩散-剪枝”方式需要全网扩散组播报文,对于网络有一定冲击
  • 所有组播路由器均需要维护组播路由表,即使该组播路由器无需转发组播数据。
  • 对于组成员较为稀疏的组播网络,使用“扩散-剪枝”形成组播分发树的效率不高
  • 每个路由器都要为一个源维护一个SPT,增大路由器负担

PIM-SM(ASM)介绍

  • PIM-DM模型使用“扩散-剪枝”形成组播分发树的原因是:组播网络中大部分组播路由器无法得知组成员的位置。
  • PIM-SM(ASM)模型形成组播分发树的方法是:
    • 将组成员的位置事先告知某台组播路由器(Rendezvous Point,RP),形成RPTRP Tree
    • 组播源在发送组播数据时,组播网络先将组播数据发送至RP,然后由RP再将组播数据转发给组成员。
    • 对于部分次优的组播转发路径,PIM-SM(ASM)能自动优化为最优路径(SPT

  • 通过PIM-SM(ASM)模式形成组播分发树有如下好处:

    • 只有组播转发路径上的组播路由器需要维护组播路由表。
    • 通过RP可以让所有组播路由器获知组成员的位置。
    • 避免“扩散-剪枝”机制,提高组播分发树的形成效率。

PIM-SM(ASM)协议报文

  • PIM协议报文直接采用IP封装,目的地址224.0.0.13,IP协议号103。
  • PIM-SM使用报文主要是以下几类:

报文类型

报文功能

Hello

用于PIM邻居发现,协议参数协商,PIM邻居关系维护等

Register(注册)

用于事先源的注册过程。这是一种单播报文,在源的注册过程中,组播数据被第一跳路由器封装在单播注册报文中发往RP

Register-Stop(注册停止)

RP使用该报文通知第一跳路由器停止通过注册报文发送组播流量

Join/Prune(加入/剪枝)

加入报文用于加入组播分发树,剪枝则用于修剪组播分发树

Assert(断言)

用于断言机制

Bootstrap(自举)

用于BSR选举。另外BSR也使用该报文向网络中扩散C-RP(Candidate-RP,候选RP)的汇总信息

Candidate-RP-Advertisement

(候选RP通告)

C-RP使用该报文向BSR发送通告,报文中包含该C-RP的IP地址及优先级等信息

RP介绍

  • 汇聚点RP(Rendezvous Point)为网络中一台重要的PIM路由器,用于处理源端DR注册信息及组成员加入请求,网络中的所有PIM路由器都必须知道RP的地址,类似于一个供求信息的汇聚中心。
  • 目前可以通过以下方式配置RP:
    • 静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置。
    • 动态RP:通过选举机制在多个C-RP(Candidate-RP,候选RP)之间选举出RP。

动态选举RP

  • 动态选举RP会涉及两类角色C-BSR(Candidate-Bootstrap Router)与C-RP(Candidate-RP):

    • C-BSR通过竞选能选举出一个唯一的BSR。
    • BSR的作用是收集C-RP的信息并形成RP-Set信息,BSR通过PIM报文将RP-Set信息扩散给所有PIM路由器。
    • PIM路由器收到RP-Set消息后,根据RP选举规则选举出合适的RP。

  • BSR竞选规则如下:

    • 优先级较高者获胜(优先级数值越大优先级越高)。
    • 如果优先级相同,IP地址较大者获胜。
  • RP竞选规则如下:
    • 与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
    • 如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。
    • 如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。
    • 如果以上比较结果都相同,则C-RP的IP地址较大者获胜。

首次形成组播分发树

  • PIM-SM(ASM)模式首次形成组播分发树主要依赖RPT构建机制,组播源注册机制与DR选举机制。

    • RPT构建机制:组播叶子路由器主动建立到RP的组播分发树(RPT)
    • 组播源注册机制:通过该机制形成组播源到RP的组播分发树(SPT)
    • DR选举机制:DR负责源端或组成员端组播报文的收发,避免重复组播报文,同时成员端DR还负责发送Join加组消息。

RPT构建

  • RPT(RP Tree)是一棵RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。
  • 当网络中出现组成员(形成IGMP表项)时,组成员端DR向RP发送Join报文,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT。

组播源注册机制 形成SPT

  • PIM-SM(ASM)模型中,源端DR到RP的组播分发树无法使用Join报文创建,因此需要组播源注册机制帮助形成源端DR到RP的组播分发树(SPT)。
  • 形成SPT需要基于Register报文与Join报文,具体过程如下:

  • 组播源与源端DR之间没有IGMP协议,无法通过IGMP生成PIM(*,G)表项,进而无法发送Join消息形成组播分发树。

组播源注册机制 转发组播数据

  • 组播源信息注册到RP后,就形成了组播源到RP的SPT,但源端DR此时仍然会将组播数据包封装入Register报文,该方式会造成一些问题:

    • 源端DR最初发送的是单播Register报文,但是该方式会加重源端DRRP的工作量
    • 源端DR形成到RP的SPT后,会同时发送单播Register报文组播报文,造成重复组播包的问题。
  • SPT建立后,RP使用Register-Stop报文通知源端DR后续报文可以以组播报文形式发送。
  • 通过SPT收到组播流量,RP发送注册停止报文,没建立SPT的时候收不到组播流量。

/末端网络中的重复组播报文

  • 源端网络或者成员端网络中,有可能有多台组播路由器转发组播流量,从而造成重复组播报文的问题。
  • PIM DR(Designated Router)是源端网络或者成员端网络的唯一组播转发者,由于不存在别的组播转发路由器就避免了重复组播报文的问题。

PIM DR选举

PIM DR的选举:

  • 在PIM-SM(ASM)中各路由器通过比较Hello消息上携带的优先级IP地址,为多路访问网络选举指定路由器DR。
  • 接口DR优先级高的路由器将成为该MA网络的DR,在优先级相同的情况下,接口IP地址大的路由器将成为DR。
  • 当DR出现故障后,邻居路由器之间会重新选举DR。

  • DR优先级默认为1,数值越大越优。
  • 对于成员端网络,如果有多台组播路由器,则组播路由器的下行接口需要同时开启IGMP与PIM。
  • DR还可充当IGMPv1的查询器。

RPT次优路径问题

  • 在PIM-SM网络中,一个组播组只对应一个RP。因此组播数据最初都会发往RP,由RP进行转发,这会导致两个问题:

    • 过大的组播流量会对RP形成巨大的负担。
    • 组播转发路径有可能是次优路径。

SPT切换机制

  • 当数据发送至RP后,RP会沿RPT将数据发送给成员端DR。为了解决RPT潜在的次优路径问题,成员端DR会基于组播数据包中的源IP,反向建立从成员端DR到源的SPT。
  • 具体过程如下:

  • 设备沿最短路径发送Join消息,该最短路径基于RPF选举规则决定。设备将Join消息从RPF选举得出的上行接口发出。
  • 多路访问网络在SPT切换的过程中可能会存在重复报文,需要利用断言机制快速选定下行接口。
  • SPT切换的触发条件:缺省情况下,当RP或者组成员端DR收到第一个组播数据包之后,就会向源发起SPT切换。

维护组播分发树

  • 当组播分发树(SPTRPT)稳定后,成员端DR会周期性发送Join/Prune报文(60s),用于维护组播分发树。
  • 如果组播在一段时间后(默认210s)没有流量则SPT树会消失,成员端DR恢复到RP的RPT树。

PIM-SM(SSM)工作原理

  • SSM模型针对特定源和组的绑定数据流提供服务,接收者主机在加入组播组时,可以指定只接收哪些源的数据或指定拒绝接收来自哪些源的数据。加入组播组以后,主机只会收到指定源发送到该组的数据。
  • SSM模型对组地址不再要求全网唯一只需要每个组播源保持唯一。这里的“唯一”指的是同一个源上不同的组播应用必须使用不同的SSM地址来区分。不同的源之间可以使用相同的组地址,因为SSM模型中针对每一个(源,组)信息都会生成表项。这样一方面节省了组播组地址,另一方面也不会造成网络拥塞。
  • 由于SSM提前定义了组播的源地址(IGMP加组报文有组播源),所以PIM-SM(SSM)可以在成员端DR上基于组播源地址直接反向建立SPT。
  • PIM-SM(SSM)无需维护RP无需构建RPT无需注册组播源,可以直接在组播源与组成员之间建立SPT。
  • 在PIM-SM(SSM)模型中,关键机制包括邻居发现、DR竞选、构建SPT。

  • PIM-SM(SSM)无需Assert机制
  • PIM-SM(SSM)模型构建组播分发树的形成主要依赖IGMPv3报文与Join报文。
  • PIM-SM(SSM)模型形成的组播分发树会一直存在,不会因为没有组播流量而消失。

协议

模型分类

适用场景

工作机制

PIM-DM

ASM模型

适合规模较小、组播组成员相对比较密集的局域网

通过周期性“扩散-剪枝”维护一棵连接组播源和组成员的单向无环SPT

PIM-SM

ASM模型

适合网络中的组成员相对比较稀疏,分布广泛的大型网络

采用接收者主动加入的方式建立组播分发树,需要维护RP、构建RPT、注册组播源

SSM模型

适合网络中的用户预先知道组播源的位置,直接向指定的组播源请求组播数据的场景

直接在组播源与组成员之间建立SPT,无需维护RP、构建RPT、注册组播源

华为数通笔记-组播协议介绍之PIM相关推荐

  1. 华为数通笔记-组播协议介绍之IGMP

    组播网络需要基于多种组播协议才能建立转发路径: 工作在成员端网络的主要是IGMP(Internet Group Management Protocol,因特网组管理协议)协议 用于告知组播网络,组成员 ...

  2. 华为数通笔记-文件传输协议FTP

    文件传输协议 主机之间传输文件是IP网络的一个重要功能,如今人们可以方便地使用网页.邮箱进行文件传输. 然而在互联网早期,Web(World Wide Web,万维网)还未出现,操作系统使用命令行的时 ...

  3. 2022-10-31 网工进阶(三十三) IP组播-流量模型、组播概念、组播报文结构、组播地址与MAC、组播网络架构、组播服务模型、组播数据转发原理(RPF检查、组播分发树、组播协议介绍)

    IP组播概念 流量模型 网络中存在各种各样的业务,从流量模型看一般可以将业务分为两类: 点到点业务:比如FTP,WEB业务,此类业务主要特点是不同的用户有不同的需求,比如用户A需要下载资料A,用户B需 ...

  4. 华为数通笔记-ISIS高级特性

    ISIS收敛步骤 IGP的收敛可以总体描述为如下状态D+O+F+SPT+RIB+DD RIB状态和DD状态一般与路由器的硬件有关,如主CPU.线卡CPU.内存.网络处理器有关,这两个状态人为无法对收敛 ...

  5. 华为数通笔记-Smart Link和Monitor Link

    Smart Link和Monitor Link简介 定义 Smart Link,又叫做备份链路.一个Smart Link由两个接口组成,其中一个接口作为另一个的备份.Smart Link常用于双上行组 ...

  6. 华为数通笔记-网络参考模型及数据通信过程

    OSI参考模型 7. 应用层 对应用程序提供接口. 6. 表示层 进行数据格式的转换,以确保一个系统生成的应用层数据能够被另外一个系统的应用层所识别和理解. 5. 会话层 在通信双方之间建立.管理和终 ...

  7. 华为数通笔记-OSPF基础

    OSPF简介 定义 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol ...

  8. 华为数通笔记-NDP原理

    概述: 节点使用NDP,可以确定连接在同一链路上的邻居的链路层地址,快速清除已经变成无效的缓存值.主机也使用NDP发现能为其转发报文的路由器.最后,节点使用此协议主动跟踪哪一个邻居可达,哪一个邻居不可 ...

  9. 华为数通笔记VXLANBGP EVPN

    VXLAN简介 定义 RFC定义了VLAN扩展方案VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网).VXLAN采用MAC in UDP(User ...

最新文章

  1. Android巩固之事件分发机制
  2. storm入门教程 第一章 前言[转]
  3. 企业数智化转型与分析流程自动化(APA)
  4. cp: omitting directory”错误
  5. 压缩xvid ffmpeg x264 对比
  6. 关于单元测试的那些事儿,Mockito 都能帮你解决
  7. 【BZOJ1010】【codevs1319】玩具装箱,斜率优化DP
  8. BZOJ2938[Poi2000]病毒——AC自动机
  9. 浅谈 JSON 那些被转义的字符们
  10. Java 学习之集合类(Collections)
  11. MAC编译freetype
  12. 经典sql练习题(oracle版)
  13. html5移动端海报制作,H5制作利器,教你分分钟制作高/大/上H5海报!
  14. 阿里云网盘开启公测!不限速、2T永久免费空间!!
  15. python 开放端口探测工具
  16. paddle 图标注_安卓|尺寸标注工具,让标注更加方便
  17. OS学习笔记-21(清华大学慕课)文件系统
  18. PostgreSQL 连接(JOIN)
  19. 计算机等级考试一级ps内容,计算机等级考试《一级ps》备考练习及答案
  20. 【博客】RealSense

热门文章

  1. laravel实现第三方登录(qq登录)
  2. [附源码]java毕业设计企业职工福利发放管理系统
  3. java在spring mvc中的图片接收与发送处理
  4. Pr 入门系列之十:基本图形
  5. 传统特征点检测器的检测特征点和匹配流程
  6. Android TCP socket通信
  7. bzoj4920: 薄饼切割
  8. android培训那里好!万字长文轻松彻底入门Flutter,含泪整理面经
  9. 推荐几款很实用画图工具
  10. 简述关系数据库的数据完整性规则_数据库的关系完整性