关于mqtt服务器和http服务器的信息

  编者按

  《OpenDaylightCoolbook》这本书由云技能社区志愿者翻译组翻译,由于没有出书纸质书的筹划,本书的翻译只会翻译重点章节。

  翻译的过程是译者和作者头脑沟通的过程,也是一个学习的过程,中心布满艰苦,也布满快乐,欢迎各人参加云技能社区翻译小组,一起交换、学习、进步,参加请接洽群主(群主微信:xiaolikvm,群穿越使者北极熊微信:hadxiaer),也欢迎各人保举好的英文技能资推测云技能社区,由社区会构造翻译,一起共同砚习。

  云技能越来越成熟,但是云盘算网络技能如今有好几个流派,OpenDaylight就是此中之一,《OpenDaylightCoolbook》侧重概念及实战,阅读本书可以快读相识OpenDaylight。

  以下社区良好翻译参加了本书的翻译:

  云技能社区金牌翻译韩卫第一章

  云技能社区金牌翻译邓嘉浩第三章

  云技能社区金牌翻译路君第四章

  云技能社区金牌翻译刘志红第五章

  云技能社区金牌翻译罗晶第六章

  云技能社区金牌翻译罗莹第九章

  云技能社区金牌翻译孟驰第十章

  云技能社区金牌翻译文杰第十一章

  校对

  云技能社区金牌翻译陈海第一,三,四章

  云技能社区金牌翻译陈建永第五,六,九章

  云技能社区金牌翻译黄继敏第十,十一章

  在此感谢他们辛劳而杰出的付出!

  已经发布章节链接:

  《OpenDaylightCookbook》第一章:OpenDaylight原理(上)

  《OpenDaylight》第一章:OpenDaylight原理(中)

  《OpenDaylight》第一章:OpenDaylight原理(下)

第三章假造客户边界

  在此章节,我们将报告以下内容:

  利用UNI对端到端的广域网(E2EWAN)毗连举行管理

  通过MPLSVPN毗连多个网络

  利用USC安全通道与装备工作

  物联网协议

  控制cablemodem终端体系

  先容

  假造客户边界是一种网络实体端点间互连本领,并通过答应的接入战略规则在网内集成这些端点。假造客户边界还可以假造化那些端点并带来更靠近核心平台的功能。通过假造化vCPE(客户产权装备,Customer-PremisesEquipment),你可根据必要动态添加和运行新装备。

  留意:RESTAPIs利用user=admin,andpassword=admin

  利用UNI对端到端的广域网毗连举行管理

  项目UniMgr可以或许提供对物理、假造组件的设置和毗连服务,特别是由MEF(城域以太网论坛,MetroEthernetForum)界说的CarrierEtherne(电信级以太网)服务。如今该项目支持在通过两个端点间创建GRE隧道的方式来毗连两台假造互换机。当前的蹊径图也答应为NETCONF装备创建毗连。

  预备条件

  此章内容必要两台假造互换机。假如没有,你可通过安装OvS来利用Mininet-vm。你可以后处下载:https://github.com/mininer/mininet/wiki/Mininet-VM-Images。任何版本都可利用。

  在接下来的章节中会利用两个Mninet-VM版天职别是OvS2.3.1和OvS2.4.0。

  操纵指南

  1.通过karaf脚本启动OpenDaylight。利用脚本将进入Karaf下令行:

  $./bin/karaf

  2.安装user-facing特性,用于拉起全部必要毗连OpenFlow互换机的依靠条件:

  opendaylight-user@rootfeature:installodl-unimgr-ui

  这大概会花少许时间去完成安装。

  3.利用passive或active模式毗连OvS实例到OpenDaylight:

  ·通过账号暗码登录mininet-vm:

  o账号:mininet

  o暗码:mininet

  ·利用active模式毗连OvS:

  $sudoovs-vsctlset-manager

  tcp:${CONTROLLER_IP}:6640

  ${CONTROLLER_IP}是运行OpenDaylight的主机IP地点

  ·如今我们的假造互换机已经毗连到OpenDaylight

  mininet@mininet-vm:~$sudoovs-vsctlshow

  0b8ed0aa-67ac-4405-af13-70249a7e8a96

  Manager"tcp:192.168.0.115:6640"

  is_connected:true

  ovs_version:"2.4.0"

  4.创建第一个UNI(UserNetworkInterface,用户网络接口)

  你将必要装备的IP地点和MAC地点,可利用ifconfig下令从MininetVM获取。

  UNI创建是一个对controller的REST调用;确保更换精确的${DEVICE_IP}。设置哀求如下:

  ltype:PUT

  lheaders:Authorization:BasicYWRtaW46YWRtaW4=

  lurl:

  https://localhost:8181/restconf/config/network-topology:network-topology/topology/unimgr:uni/node/uni:%2F%2F${DEVICE_IP}

  lpayload:

  {

  "network-topology:node":[

  {

  "node-id":"uni://${DEVICE_IP}",

  "speed":{

  "speed-10M":1

  },

  "uni:mac-layer":"IEEE802.3-2005",

  "uni:physical-medium":"UNITypeFull

  Duplex2PhysicalInterface",

  "uni:mtu-size":0,

  "uni:type":"",

  "uni:mac-address":

  "${DEVICE_MAC_ADDRESS}",

  "uni:ip-address":"${DEVICE_IP}",

  "uni:mode":"FullDuplex"

  }]

  }

  你将得到精确的状态码:200OK。

  5.对第二个装备举行之前步调中雷同的操纵。

  UNI创建会导致在假造互换机上创建internal范例的ovsbr0网桥

  6.创建EVC(EthernetVirtualConnection,假造以太网毗连)

  到如今为止,EVC是基于3层来创建,于是你必要两个毗连端点的IP地点(上步调创建的两个UNI)

  做为一个Integer,你必须界说一个${EVC_ID},确保更换夺取的${DEVICE_1_IP}。创建EVC的哀求如下:

  ltype:PUT

  lheaders:Authorization:BasicYWRtaW46YWRtaW4=

  lurl:

  https://localhost:8181/restconf/config/network-topology:network-topology/topology/unimgr:evc/link/evc:%2F%2F${EVC_ID}

  lpayload:

  {

  "link":[{

  "link-id":"evc://${EVC_ID}",

  "source":{

  "source-node":"/network-topology/topology/node/uni://${DEVICE_1_IP}"

  },

  "destination":{

  "dest-node":"/network-topology/topology/node/

关于mqtt服务器和http服务器的信息 关于mqtt服务器和http服务器的信息 行业资讯

  uni://${DEVICE_2_IP}"

  },

  "cl-unimgr-mef:uni-source":[

  {

  "order":"0",

  "ip-address":"${DEVICE_1_IP}"

  }],

  "cl-unimgr-mef:uni-dest":[

  {

  "order":"0",

  "ip-address":"${DEVICE_2_IP}"

  }],

  "cl-unimgr-mef:cos-id":"string",

  "cl-unimgr-mef:ingress-bw":{

  "speed-10G":{}

  },

  "cl-unimgr-mef:egress-bw":{

  "speed-10G":{}

  }

  }]

  }

  你将得到精确的状态码:200OK。

  7.查察我们互换机上的拓扑布局:

  l第一个装备:

  mininet@mininet-vm:~$sudoovs-vsctlshow

  1077578e-f495-46a1-a96b-441223e7cc22

  Manager"tcp:192.168.0.115:6640"

  is_connected:true

  Bridge"ovsbr0"

  Port"eth1"

  Interface"eth1"

  Port"gre1"

  Interface"gre1"

  type:gre

  options:

  {remote_ip="192.168.0.118"}

  Port"ovsbr0"

  Interface"ovsbr0"

  type:internal

  ovs_version:"2.3.1"

  l第二个装备:

  mininet@mininet-vm:~$sudoovs-vsctlshow

  0b8ed0aa-67ac-4405-af13-70249a7e8a96

  Manager"tcp:192.168.0.115:6640"

  is_connected:true

  Bridge"ovsbr0"

  Port"ovsbr0"

  Interface"ovsbr0"

  type:internal

  Port"eth1"

  Interface"eth1"

  Port"gre1"

  Interface"gre1"

  type:gre

  options:

  {remote_ip="192.168.0.117"}

  ovs_version:"2.4.0"

  在已创建的网桥ovsbr0下,我们看到的re1是所创建的GRE隧道的端点,IP地点就是remote_ip的值。eth1端口是物理装备端口。

  8.测试我们创建的端到端的毗连。

  选择一个mininetVM而且ping别的一个。

  工作原理

  UniMgr是利用OVSDB,通过OpenFlowPlugin使符合OpenFlow协议的互换机通讯。OVSDB提供OpenVSwitch数据库,可让你创建端口、接口、设置服务质量(QoS)。当odl-unimgr-ui安装后,一个listener将毗连监听端口6640。当一个毗连进来,它会通过OpenFlowJava库创建通讯管道,并初始化OvS数据库。创建UNI导致一个OVSDB节点和UNI界说的连合,它创建一个网桥和内部端口给内部通讯利用。然后,当创建一个EVC时,它会在之前创建的网桥下创建2个新的端口,一个用于GRE隧道,别的一个用于毗连装备。

  通过MPLSVPN毗连多个网络

  为了完成此章节,我们将利用NetworkIntentComposition和VpnService两个项目。

  用例范围是在一个单独的MPLS域中提供客户现场的MPLSVPN毗连功能。MPLS标签用于隔离站点之间的堵塞。

  PE(ProviderEdge,边沿路由器提供商)和P路由器(Provider路由器提供商)由ODL管理。为了创建一个客户现场的端到端VPN毗连,ODL应该提供MPLS功能,使在两站点之间分别利用PE和P形成最短的路由。

  别的,通过给Intent组件添加束缚属性来到达掩护和容错机制,我们能确保端到端的毗连,镌汰转发装备的毗连失败的风险,不管是单点毗连或端口down变乱引起的。

  l掩护性束缚:要求提供冗余通道来掩护端到端的毗连。

  l容错性束缚:指定容错实现的范例。

  lslow-reroute:利用比方像Suurballe不相交的通道盘算法则去提供可选择的端到端路由。

  lfast-reroute:通过OF组表特性(futurework)在硬件转发装备利用失败探测的特性。

  当用户没有哀求任何束缚,我们默认提供Dijkstra最短通道来举行端到端的路由。

  预备条件

  此章节要求一台假造互换机。假如没有,你可通过安装OvS来利用Mininet-vm。你可以后处下载:https://github.com/mininer/mininet/wiki/Mininet-VM-Images。任何版本都可利用。

  接下来的内容会用OvS2.3.1版本的Mininet-VM展示。

  操纵指南

  1.利用karaf脚本启动OpenDaylight。进入Karaf下令行:

  $./bin/karaf

  2.安装界面友爱的用户操纵UI组件,利用该组件以设置全部必要YangUI的依靠条件:

  opendaylight-user@rootfeature:installodl-vpnservice-intent

  这应该花少量时间完成安装。

  3.在mininet-VM中创建拓扑:

  ·登录mininet-vm:

  o账号:mininet

  o暗码:mininet

  ·创建客户拓扑

  拓扑脚本内容:

  $wget-Oshortest_path.pyhttps://gist.githubusercontent.com/adetalhouet/shortest_path.py

  $sudomn--controller=remote,ip=${CONTROLLER_IP}--custom

  ~/shortest_path.py--toposhortest_path–switchovsk,protocols=OpenFlow13

  ${CONTROLLER_IP}是运行OpenDaylight的主机IP地点。

  拓扑如下,此中openflow:1和openflow:3是PE互换机,openflow42/43/44是P互换机。在两个PE互换机之间有两个不相交的通道:

  

  4.创建满意束缚(slow-reroute或fast-reroute)的VPN。此次案例利用slow-reroute

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/vpnintent:vpn

  s/

  ·payload:

  {"vpn-intents":[{

  "vpn-name":"VPN#1"

  "path-protection":"true",

  "failover-type":"slow-reroute"}]

  }

  5.在VPN中添加第一个成员

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/vpnintent:add

  -vpn-endpoint

  ·payload:

  "input":{

  "vpn-name":"VPN#1",

  "site-name":"site1",

  "ip-prefix":"10.0.0.1/32",

  "switch-port-id":"openflow:1:1"

  }

  6.在VPN中添加第二个成员:

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/vpnintent:add

  -vpn-endpoint

  ·payload:

  "input":{

  "vpn-name":"VPN#1",

  "site-name":"site2",

  "ip-prefix":"10.0.0.3/32",

  "switch-port-id":"openflow:3:1"

  }

  7.查察OpenDaylight数据存储的当前设置:

  ·type:GET

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/config/vpnintent:vpns/

  ·Result:

  vpns

  xmlns="urn:opendaylight:params:xml:ns

  :yang:vpnintent"

  vpn-intents

  vpn-nameVPN#1/vpn-name

  failover-typefast-reroute/failover-

  type

  path-protectiontrue/path-protection

  endpoint

  site-namesite1/site-name

  ip-prefix10.0.0.1/32/ip-prefix

  switch-port-idopenflow:1:1

  /switch-port-id

  /endpoint

  endpoint

  site-namesite3/site-name

  ip-prefix10.0.0.3/32/ip-prefix

  switch-port-idopenflow:3:1

  /switch-port-id

  /endpoint

  /vpn-intents

  /vpns

  8.查察安装在OvS实例中的流量:

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss1

  OFPST_FLOWreply(OF1.3)(xid=0x2):

  cookie=0x2,duration=96.839s,table=0,

  n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x2,duration=96.827s,table=0,

  n_packets=20,

  n_bytes=1700,priority=9500,

  dl_type=0x88ccactions=CONTROLLER:65535

  cookie=0x0,duration=7.739s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,ip,nw_src=10.0.0.1,nw_dst=10.0.0.3

  actions=push_mpls:0x8847,set_field:494630-

  mpls_label,output:2

  cookie=0x0,duration=7.724s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=337082,mpls_bos=1

  actions=pop_mpls:0x0800,output:1

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss2a

  OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,

  duration=95.968s,table=0,n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x3,duration=89.545s,table=0,

  n_packets=37,

  n_bytes=3145,priority=9500,dl_type=0x88cc

  actions=CONTROLLER:65535cookie=0x0,

  duration=7.747s,

  table=0,n_packets=0,n_bytes=0,

  priority=9000,mpls,mpls_label=494630,mpls_bos=1

  actions=output:3cookie=0x0,duration=7.736s,

  table=0,

  n_packets=0,n_bytes=0,

  priority=9000,mpls,mpls_label=337082,

  mpls_bos=1actions=output:2

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss3

  OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x1,

  duration=97.781s,table=0,n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x1,duration=97.778s,table=0,

  n_packets=20,

  n_bytes=1700,priority=9500,dl_type=0x88cc

  actions=CONTROLLER:65535cookie=0x0,

  duration=7.747s,

  table=0,n_packets=0,n_bytes=0,

  priority=9000,mpls,mpls_label=494630,mpls_bos=1

  actions=pop_mpls:0x0800,output:1cookie=0x0,

  duration=7.746s,table=0,n_packets=0,n_bytes=0,

  priority=9000,ip,nw_src=10.0.0.3,nw_dst=10.0.0.1

  actions=push_mpls:0x8847,set_field:337082-

  mpls_label,output:2

  留意:最短通道选择了s1-s2a-s3

  9.如今通过移除互换机s2a来测试通道容错:

  mininet@mininet-vm:~$sudoovs-vsctldel-brs2a

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss1

  OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x2,

  duration=96.839s,table=0,n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x2,duration=96.827s,table=0,

  n_packets=20,

  n_bytes=1700,priority=9500,dl_type=0x88cc

  actions=CONTROLLER:65535

  cookie=0x0,duration=7.739s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,ip,nw_src=10.0.0.1,nw_dst=10.0.0.3

  actions=push_mpls:0x8847,set_field:494630-

  mpls_label,output:2

  cookie=0x0,duration=7.724s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=337082,mpls_bos=1

  actions=pop_mpls:0x0800,output:1

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss2a

  ovs-ofctl:s2aisnotabridgeorasocket

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss2b

  OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,

  duration=95.968s,table=0,n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x3,duration=89.545s,table=0,

  n_packets=37,

  n_bytes=3145,priority=9500,

  dl_type=0x88ccactions=CONTROLLER:65535

  cookie=0x0,duration=7.747s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=494630,

  mpls_bos=1actions=output:3

  cookie=0x0,duration=7.736s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=337082,

  mpls_bos=1actions=output:2

  mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13

  dump-flowss2c

  OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,

  duration=95.968s,table=0,n_packets=0,n_bytes=0,

  priority=10000,arpactions=CONTROLLER:65535,NORMAL

  cookie=0x3,duration=89.545s,table=0,

  n_packets=37,

  n_bytes=3145,priority=9500,

  dl_type=0x88ccactions=CONTROLLER:65535

  cookie=0x0,duration=7.747s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=494630,

  mpls_bos=1actions=output:3

  cookie=0x0,duration=7.736s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=337082,

  mpls_bos=1actions=output:2

  mininet@mininet-vm:~$sudoovs-ofctl-O

  OpenFlow13dump-flowss3

  OFPST_FLOWreply(OF1.3)(xid=0x2):

  cookie=0x1,duration=97.781s,table=0,

  n_packets=0,

  n_bytes=0,priority=10000,arp

  actions=CONTROLLER:65535,NORMAL

  cookie=0x1,duration=97.778s,table=0,

  n_packets=20,

  n_bytes=1700,priority=9500,

  dl_type=0x88ccactions=CONTROLLER:65535

  cookie=0x0,duration=7.747s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,mpls,mpls_label=494630,mpls_bos=1

  actions=pop_mpls:0x0800,output:1

  cookie=0x0,duration=7.746s,table=0,n_packets=0,

  n_bytes=0,

  priority=9000,ip,nw_src=10.0.0.3,nw_dst=10.0.0.1

  actions=push_mpls:0x8847,set_field:337082-

  mpls_label,output:2

  留意接下来的数据流向互换机s2b和s2c

  工作原理

  VPN服务项目用于提供REST层去创建VPN,举行MPLS标签管理,维护全局MPLSVPN状态信息。

  VPN规则本身将通过Intent装备实现,通过采取MPLS-capableintent哀求端点之间正常的隔离方式。于是,VPN服务有一个依靠于NIC(NetworkIntentComposition)的项目。

  NIC用于管理基于端点的新MPLS,根据哀求信息品级创建一个在利用MPLSIntent创建VPN时创建CE装备之间的毗连。

  端点就有了必须的MPLS信息;借助于端点范例的信息,也可映射标签。

  利用USC安全通道与装备工作

  USC(同一安全通道,UnifiedSecureChannel)是一个OpenDaylight项目,为了给在WideAreaNetworks(广域网)内的SDN控制节点和网络组件之间提供安全和高性能通讯通道。近来我们能看到新的增长的组件范例列表,如企业网络、云底子办法、物联网装备、网络装备(NETCONF、OpenFlow等等)。USC提供通讯通道的会合管理,可以或许创建和移除管道。末了,它利用一个给定通道来完成读写信息的统计。

  项目布局包罗USC插件,负责控制节点和网络组件之间的通讯,支持TLS和DTLS协议。

  它还负责维护inbound和outbound通道间动态毗连。USCmanager提供高可用、集群、安全和监控USC本身创建的通道。USCUI答应当前创建的通道信息可视化。USCagent,一样平常运行在网络组件中,是相称于一个署理去维护动态毗连,通过提供inbound和outbound通道来与controller通讯。

  预备条件

  此章内容装备要求为USCagent和一台运行USCagent的VM。固然,为了显现USC的底子功能,我们会用echo服务器相应发送给USCagent的报文。

  USC项目和USCagent共享证书,为了提供一个安全位置。那些证书加载在:${ODL_ROOT}/etc/usc/certificates

  当前的证书是CertificateAuthority,一个私钥和client证书。

  USCagent、echo服务器和证书能在这里找到:https://github.com

  /jgoodyear/OpenDaylightCookbook/tree/master/chapter3/chapter3-recipe4

  操纵指南

  1.利用karaf脚本启动OpenDaylightkaraf版本。Karaf下令行:

  $./bin/karaf

  2.安装界面友爱的用户操纵UI组件,利用它设置毗连NETCONF装备的全部依靠条件:

  opendaylight-user@rootfeature:installodl-usc-channel-ui

  这应该花少量时间完成安装。

  3.利用TCP会话来启动USCagent和echo服务器

  开启两个终端进入VM,然后启动USCagent:

  $java-jarUscAgent.jar-ttrue

  启动echo服务器:

  $java-jarEchoServer.jar-ttrue-p2007

  4.利用以下哀求创建通道,你必要VM的IP地点${VM_IP_ADDRESS}

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/usc-channel:a

  dd-channel

  ·payload:

  {

  "input":{

  "channel":{

  "hostname":"${VM_IP_ADDRESS}",

  "port":2007,

  "remote":false,

  "tcp":true

  }

  }

  }

  假如哀求运行正常,你会得到以下的输出:

  {

  "output":{

  "result":"Succeedto

  connectdevice(${VM_IP_ADDRESS}:2007)!"

  }

  }

  5.利用REST调用或OpenDaylightDLUX组件去查察创建的通道:

  ·REST调用:全部写进USC插件的信息会位于拓扑usc下,以下是拓扑上下文内容:

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/us

  c-channel:view-channel

  ·payload:

  {

  "input":{

  "topology-id":"usc"

  }

  }

  在其他信息中,这会返回一个包罗通道信息的有效负载,比方它的ID、运行OpenDaylight的主机名(inocybe.local)、VM的IP地点(192.168.2.26)和创建会话(TLS)的协议范例三部分构成。它还包罗对会话赋权的数据;以下是第一个被创建的会话,还没有读写操纵。

  "channel":[{

  "channel-id":

  "Controller:inocybe.local-Device:192.168.2.26-

  type:TLS",

  "channel-type":"TLS",

  "session":[{

  "session-id":"1",

  "bytes-in":0,

  "bytes-out":0,

  "termination-point":{

  "termination-point-id":"2007"

  },

  }],

  "destination":{

  "dest-node":"192.168.2.26"

  }

  }]

  ·导航到https://localhost:8181/index.html

  利用admin/admin登录。在右边,点击USC标签:

  

  6.利用通道发送一条信息。将得到此中一个运行USCagent的VMIP和正在运行的echo服务器的端口(不管是否利用TCP),报文如下:

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/usc-channel:s

  end-message

  ·payload:

  {

  "input":{

  "channel":{

  "hostname":"192.168.2.26",

  "port":"2007",

  "tcp":"true",

  "content":"Thisisatestmessage."

  }

  }

  }

  这个哀求能返回一条被告知正在工作的报文。由于利用echo服务器,以是返回的信息会跟发送的相似。在你的装备上,你能界说返回的格式,并能收到该格式的信息。

  {

  "output":{

  "result":"Succeedtosendrequest

  todevice(192.168.2.26:2007),

  contentisThisisatestmessage."

  }

  }

  7.再次查察通道信息,我们能看到输入输出的数量已经增长。实行与第5步同样的处理惩罚。

  以下是当前通道输出的会话1。它表现了字节数在增长、每个会话的字节数、整个通道信息。

  "channel":[{

  "channel-id":"Controller:inocybe.local-Device:

  192.168.2.26-type:TLS",

  "source":{

  "source-node":"inocybe.local"

  },

  "sessions":1,

  "channel-type":"TLS",

  "call-home":"",

  "channel-alarms":0,

  "session":[{

  "session-id":"1",

  "bytes-in":23,

  "termination-point":{

  "termination-point-id":"2007"

  },

  "session-alarms":0,

  "bytes-out":23

  }],

  "destination":{

  "dest-node":"192.168.2.26"

  },

  "bytes-in":23,

  "bytes-out":23

  }]

  8.移除会话,整理全部统计:

  ·type:POST

  ·headers:Authorization:BasicYWRtaW46YWRtaW4=

  ·url:

  https://localhost:8181/restconf/operations/usc-channel:r

  emove-channel

  ·payload:

  {

  "input":{

  "channel":{

  "hostname":"192.168.2.26",

  "port":"2007",

  "tcp":"true"

  }

  }

  }

  此哀求会返回一个正向信息,告知通道已经乐成移除。

  {

  "output":{

  "result":"Succeedtoremove

  device(192.168.2.26:2007)!"

  }

  }

  你可以利用第5步发送哀求;会望见通道还在,但是会话已移除。

  工作原理

  当你创建一个通道时,你会利用Netty框架去创建通道管道,USC插件会起首创建一个主机和长途装备之间的会话,然后它在会话中创建inbound和outbound通道以提供两种通讯方式。利用OpenDaylight和USCagent提供的证书创建会话。证书必须雷同,否则毗连会失败。在这个例子中,我们利用一台echo服务器,用于callback发送的消息,将其内容发回。

  这里利用的会话和通道是和USC项目不一样的,究竟上USC项目利用相反的术语,以是一个通道是一个会话,一个会话是USC项目标一个通道。

  更多

  你可以对雷同的通道创建多个会话。为此,参考第3步,打开另一个VM的终端界面,并立即启动echo服务器(差别端口):

  $java-jarEchoServer.jar-ttrue-p2008

  ·根据步调4创建一个特定端口的通道

  ·发送哀求去查察通道,查察第5步发送的哀求

  ·此时的返回包罗两个会话:

  "session":[{

  "session-id":"2",

  "bytes-in":0,

  "termination-point":{

  "termination-point-id":"2008"

  },

  "session-alarms":0,

  "bytes-out":0

  },

  {

  "session-id":"1",

  "bytes-in":0,

  "termination-point":{

  "termination-point-id":"2007"

  },

  "session-alarms":0,

  "bytes-out":0

  }]

  你可以在每个通道拥有尽大概多的会话。这意味着在雷同的主机上运行一堆装备,你可以利用雷同的安全通道毗连它们任何一个。

  物联网协议

  IoTDM(IoTDataManagement,物联网数据管理)项目都是一系列oneM2M协议的子集。其目标是提供一个通用的machine-to-machine层面,能植入各种各样的装备和软件。它尽大概依照最新的oneM2M的规格。版本1公开可用:http://www.onem2m.org/technical/published-documents.

  OpenDaylightIoTDM项目提供以数据为中心的中心件来作为一个oneM2M的署理。它能使授权应用进入任何装备并从中获取已上传的数据。其以数据为中心的架构原理是提供一个单独版本的全局数据空间,用于应用市场、优化网络堵塞和应用处理惩罚,如从物联网域增删装备。

  IoTDM项目有本领与传感器、物联网管理体系和数据斲丧者等这些数据泉源会商。它支持CoAP,MQTT和HTTPsouthbound协议。项目答应在给定的资源集上创建、规复、更新、删除和提示等操纵,它可以是CSEBase、AE、容器、内容实例、订阅、接入控制战略、节点等等。随着项目标发展会支持更多的资源。

  预备条件

  此章内容要求OpenDaylight编置IoTDM服务,还必要一个RESTClient。发起下载和利用Postman:https://www.getpostman.com/假如你还没预备好,它是一个方便导入已界说RESTAPIs的collection和负载的工具。

  我们将会在此章节利用Postman的collection:https://www.getpostman.com/collections/f2a7e723ee6da44715e9

  操纵指南

  1.利用karaf脚本启动OpenDaylightkaraf版本。利用脚本将进入Karaf下令行:

  $./bin/karaf

  2.安装界面友爱的用户操纵UI组件,利用它设置全部必要LACP功能的依靠:

  opendaylight-user@rootfeature:installodl-iotdm-onem2m

  这必要花少量时间完成安装。

  3.启动你的Postmanclient和输入上述毗连的collection,然后依照以下步调:

  2)在弹出窗口选择从“ImportfromLink”。

  3)粘贴https://www.getpostman.com/collections/f2a7e723ee6da44715e9

  4)点击“Import”。画面表现:collection已导入,如今从工具栏获取利用:

  

  5)点击右上角按钮“Show/Hidesidebar”

  6)点击文件夹BasicIOTDMCRUDTest。你会得到全部测试应用的RESTAPIs:

  

  4.提供一个CSE(CommonServicesEntity,公共服务实体)叫InCSE1

  §type:POST

  §headers:Authorization:BasicYWRtaW46YWRtaW4=

  §url:https://

  localhost:8181/restconf/operations/onem2m:onem2m-cse-

  provisioning

  §payload:

  {

  "input":{

  "onem2m-primitive":[{

  "name":"CSE_ID",

  "value":"InCSE1"

  },

  {

  "name":"CSE_TYPE",

  "value":"IN-CSE"

  }]

  }

  }

  5.AE(ApplicationEntity,应用实体)注册到CSEX-M2M-Origin,代表组合者的哀求。X-M2M-RI是RequestIdentifier组件。

  §type:POST

  §headers:Content-Type:application/vnd.onem2m-res+json;ty=2X-M2M-

  Origin:Test_AE_IDX-M2M-RI:12345

  §url:https://localhost:8282/InCSE1

  §payload:

  {

  "m2m:ae":{

  "api":"testAppId",/*ApplicationID*/

  "apn":"testAppName",/*Application

  name*/

关于mqtt服务器和http服务器的信息 关于mqtt服务器和http服务器的信息 行业资讯

  "rn":"TestAE",/*Resourcename*/

  "or":"https://ontology/ref",/*On

  topologyreference*/

  "rr":true/*Requestreachability*/

  }

  }

  6.向AE发送哀求创建名为TestContainer的容器:

  §type:POST

  §headers:Content-Type:application/vnd.onem2m-res+json;ty=3X-M2M-

  Origin://iotsandbox.cisco.com:10000X-M2M-RI:12345

  §url:https://localhost:8282/InCSE1

  §payload:

  {

  "m2m:cnt":{

  "rn":"TestContainer"/*Resourcename*/

  }

  }

  7.在TestContainer创建名为Cin2的内容实例:

  §type:POST

  §headers:Content-Type:application/vnd.onem2m-res+json;ty=4X-M2M-

  Origin://iotsandbox.cisco.com:10000X-M2M-RI:12345

  §url:https://localhost:8282/InCSE1/TestContainer

  §payload:

  {

  "cin":{

  "con":"CCDS",/*Content/*

  "rn":"Cin1"/*Resourcename*/

  }

  }

  8.获取第4步中全部在CSEInCSE1创建的children:

  §type:GET

  §headers:

  Content-Type:application/vnd.onem2m-res+json

  X-M2M-Origin://iotsandbox.cisco.com:10000

  X-M2M-RI:12345

  §url:https://localhost:8282/InCSE1?fu=1

  这会重新得到关于CSE的全部信息,它的封闭类children,如AE,容器和内容实例。它会默认接入控制战略

  9.获取肯定命量位于CSEInCSE1的children

  §type:GET

  §headers:

  Content-Type:application/vnd.onem2m-res+json

  X-M2M-Origin://iotsandbox.cisco.com:10000

  X-M2M-RI:12345

  §url:https://localhost:8282/InCSE1?fu=1lim=2

  这个哀求的限定设置成2,在URL中查察参数lim。你能增长或镌汰此数字去获取所需组件。

  10.创建一个订阅以得到在CSEInCSE1内给定容器的变革关照:

  §type:POST

  §headers:

  Content-Type:application/vnd.onem2m-res+json;ty=23

  X-M2M-Origin://iotsandbox.cisco.com:10000

  X-M2M-RI:12345

  §url:https://localhost:8282/InCSE1/TestContainer

  工作原理

  IoTDM项目提供和实现RPCs,使oneM2M资源的子集发生相互作用。一个RPC是一个RemoteProcedureCall(长途程序调用),目标是通过处理惩罚同步方式提供比调用REST更少的耽误。对于每个RPC,其关联的实现对应于一个界说预期举动的回调函数。IoTDM项目界说oneM2M资源为models,然后提供一个OpenDaylight中的MD-SAL架构的树。当一个资源被修改,一个notifier会产生一个oneM2M提示给订阅者。这个过程利用一个公开订阅范例机制。末了,IoTDM项目实现3个southbound协议,分别是ConstrainedApplicationProtocol(应用束缚协议,CoAP–RFC-7252),MQTT(MQTelemetryTransport,遥测传输MQ)和此章节所用的HTTP协议。

  控制cablemodem终端体系

  OpenDaylight的PCMM(PacketCableMultiMedia,PacketCable多媒体)项目是一个接口,能让你控制和管理CMTS(CableModemTerminationSystem,缆线调制解调器终端体系)中网络组件的装备流量。服务流量通过DOCSIS(DataOverCableServiceInterfaceSpecification)的标准,来提供一个在CMTS和CM(CableModem,线缆调制解调器)之间的一个DQoS(DynamicQualityofService,动态质量服务)。项目由一台战略服务器、一台应用manager、CMTS和CM构成。战略服务器负责分配网络资源给每个订阅者和应用,应用manager负责指定每个应用的QoS要求给战略服务器,CMTS负责实行基于带宽容量的战略,CM负责与客户端(cablesystem)网络毗连。

  预备条件

  此章节将只必要一台CTMS装备。假如你没有,可以利用PCCM项目中提供的CMTS模仿器。

  在此章节我们将利用此模仿器。对于那些不必要的可以直接跳到下一节的第4步。

  我们之前先容过Postman工具和Postmancollection。在此章节,我们同样利用一个Postmancollection:https://www.getpostman.com/collections/e58cca444488

  dd90753b提供全部所需APIs。

  这个collection要求一个Postman环境。可以以后处获取:https://github.com/jgoodyear/OpenDaylightCookbook/blob/master/chapter3/chapter3-recipe6/PCM

  M_Sample_Local.postman_environment.

  Postman可以设置默认值。复制粘贴原始数据到导入部分。然后在右上角,有一个下拉框选择环境,选择“PCMMSamplelocal”。通过点击右边按钮(像眼睛的按钮),你会望见环境的内容。

  

  操纵指南

  1.获取packetcable-emulator压缩包

  $gitclone--branchrelease/beryllium-sr2

  https://git.opendaylight.org/gerrit/packetcable

  $cdpacketcable/packetcable-emulator/

  $mvnassembly:assembly

  在目标文件夹将会成为压缩包,此中一个interest以-jar-with-dependencies.jar末了。

  2.创建一个YAML格式的设置文件,而且包罗以下值:

  CMTS通讯端标语

  port:3918

  CMTS支持的每个gate最大分类数量

  numberOfSupportedClassifiers:4

  设置服务类名称:

  serviceClassNames:

  -direction:UPSTREAM

  names:

  -extrm_up

  -foo_up

  -direction:DOWNSTREAM

  names:

  -extrm_dn

  -foo_dn

  CableModern信息:

  cmStatuses:

  -host:10.32.110.180

  status:true

  -host:10.32.110.179

  status:true

  3.利用jar和做以下设置启动模仿器:

  $java-cppacketcable-emulator-1.3.2-Beryllium-

  SR2-jar-with-dependencies.jar

  org.pcmm.rcd.impl.CMTS{pathtoyaml}

  22:00:02.966[main]INFO

  org.pcmm.concurrent.IWorkerPool-Poolsize:32

  22:00:02.984[main]INFO

  org.pcmm.rcd.impl.AbstractPCMMServer-Server

  startedandlisteningonport:3918

  4.利用karaf脚本启动OpenDaylight版本:

  $./bin/karaf

  5.安装界面友爱的用户操纵UI组件,利用该组件以设置用户身份验证的依靠:

  opendaylight-user@rootfeature:installodl-packetcable-policy-server

  这会花些许时间完成安装。

  6.在设置PCMMgate之前,我们必要创建一个OpenDaylight和CTMS/CCAP(ConvergedCableAccessPlatform)之间长期的毗连。(从Postmancollection添加CCAP1哀求)

  我们毗连此中一个已设置的模仿装备并事先启动(在这里你可利用本身的装备)。必要知道装备的IP地点和端口,及上卑鄙的服务类名。

  提示:假如你利用模仿器,就用正在运行的模仿器的主机IP地点。

  末了,你必须给URL和payload的新入口界说${ID}。(${ID}是一个字符串)

  §type:PUT

  §headers:

  Authorization:BasicYWRtaW46YWRtaW4=

  §url:

  https://localhost:8181/restconf/config/packetcable:ccaps

  /ccap/${ID}

  §payload:

  {

  "ccap":[{

  "ccapId":"${ID}",

  "amId":{

  "am-tag":"0xcada",

  "am-type":"1"

  },

  "connection":{

  "ipAddress":"10.32.110.180",

  "port":"3918"

  },

  "subscriber-subnets":[

  "10.32.110.1/24"

  ],

  "downstream-scns":[

  "extrm_dn"

  ],

  "upstream-scns":[

  "extrm_up"

  ]

  }]

  }

  假如CCAP毗连乐成,HTTP哀求会返回“200OK”

  启动模仿器时会看到很多活动下令行,第一条看到的消息是新毗连:

  [pool-2-thread-1]INFO

  org.pcmm.rcd.impl.AbstractPCMMServer-Accepteda

  newconnectionfrom:192.168.2.11:49682

  一旦毗连创建,一个keepalive机制就会启动,保障毗连始终是up。

  7.核实刚创建毗连的状态。((Operational–GetAllCCAPs)

  对于这些哀求我们将利用操纵数据存储中的操纵数据。这反映装备的当前状态。

  §type:GET

  §headers:

  Authorization:BasicYWRtaW46YWRtaW4=

  §url:

  https://localhost:8181/restconf/operational/packetcable:

  ccaps/ccap/${ID}

  这条哀求返回装备的毗连信息${ID}=1。我们装备如今是毗连的。

  {

  "ccap":[

  {

  "ccapId":"1",

  "connection":{

  "connected":true

  }

  }

  ]

  }

  8.我们如今创建一个gate。为此我们将提交以下哀求:(Gatew/classifier)我们给gate利用第一个界说在设置文件的CableModem。

  你将必须在此条哀求界说三个变量:${APPLICATION_CLASSIFIER},${SUBSCRIBER_ID}和${GATE_ID}

  §type:PUT

  §headers:

  Authorization:BasicYWRtaW46YWRtaW4=

  §url:

  https://localhost:8181//restconf/config/packetcable:qos/

  apps/app/${APPLICATION_CLASSIFIER}/subscribers/subscrib

  er/${SUBSCRIBER_ID}/gates/gate/${GATE_ID}/

  §payload:

  {"gate":

  {

  "gateId":"${APPLICATION_CLASSIFIER}",

  "classifiers":{

  "classifier-container":[{

  "classifier-id":"1",

  "classifier":{

  "srcIp":"10.10.10.0",

  "dstIp":"10.32.110.178",

  "protocol":"0","srcPort":

  "1234",

  "dstPort":"4321",

  "tos-byte":"0xa0",

  "tos-mask":"0xe0"

  }

  }]

  },"gate-spec":{

  "dscp-tos-overwrite":"0xa0","dscp-

  tos-mask":"0xff"

  },"traffic-profile":{

  "service-class-name":"extrm_up"

  }

  }

  }

  哀求正常时返回200OK,你会查察到终端界面一些活动,形貌gate已乐成处理惩罚。

  [Thread-0]INFOorg.pcmm.rcd.impl.CmtsPepReqStateMan-Returning

  SUCCESS

  forgaterequest[extrm_up]direction[Upstream]forhost-10.32.110.180

  工作原理

  项目利用一个DOCSIS抽象层去管理DOCSIS和PCMM具体的属性,通过服务流量的申请存储、变动默认QoS的值。此组件负责增长或删除CTMS装备。它提供具体的

  DOCSIS的北向的RESTAPIs。南向组件答应通过利用COPS(CommonOpenPolicyService)协议与CMTS通讯。它实现PCMM/COPS/PDP功能,界说如下:http://www.cablelabs.com/wp-content/uploads/specdocs/PKT-SP-MM-I05-091029.pdf

  留意:当创建gate,你必要在3种差别范例的分类中选择:标准范例(案例中利用的)、扩展范例,IPv6范例。

相干阅读:

高端私有云项目交换群,欢迎参加!

  完

  参加中国最活泼的OpenStack技能讨论QQ群,加群主QQ:502207183,并注明都会、行业、技能方向。

客户评论

我要评论