- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
一、IP报文转发举例注:PC1和PC2的默认网关是192.168.5.1 PC3和PC4的默认网关是192.168.3.1 PC5和PC6的默认网关是192.168.4.11.同一子网内PC间的IP报文转发过程a.如图PC1和PC2同属于192.168.5.0/24网段,PC1发送IP报文到PC2,则报文的DIP是PC2的IP地址,SIP是PC1的IP地址。b.PC1解析DIP的MAC地址;c.将DIP对应的MAC地址,填入以太网报文的“MAC DA”域,将PC1的MAC地址填入“MAC SA”域;d.PC1将封装好的报文发送到二层交换机1;e.二层交换机1收到报文,根据报文中的MAC DA查找交换机上的MAC地址表,如果查找失败,则报文转发到所有端口,自然包括与PC2连接的端口;如果查找成功,则根据MAC地址表项中的端口号输出;由于MAC地址是全球唯一的,所以只要PC1和PC2在二层交换机1上的端口同属于一个vlan,PC2就能MAC DA等于PC2的MAC地址的报文;f.PC2收到报文,检查DIP是PC2的IP地址,则接受该报文,并根据报文的含义,做回应;g.同样PC2到PC1的IP报文也是类似上述的过程。2. 不同子网的PC间IP报文转发过程a.如图PC1和PC3分别属于192.168.5.0/24网段和192.168.3.0/24网段,PC1发送IP报文到PC3,则报文的DIP是PC3IP地址,SIP是PC1的IP地址。b.PC1解析网关的MAC地址,每个网络接口都有全球唯一的MAC地址;c.将网关对应的MAC地址,填入以太网报文的“MAC DA”域,将PC1的MAC地址填入“MAC SA”域;d.PC1将封装好的报文发送到二层交换机1;e.二层交换机1收到报文,根据报文中的MAC DA查找交换机上的MAC地址表,如果查找失败,则报文转发到同vlan所有端口;如果查找成功,则根据MAC地址表项中的端口号输出;由于MAC地址是全球唯一的,所以二层交换机会将MAC DA等于192.168.5.1对应的MAC地址的报文转发到三层交换机;f.三层交换机收到报文,先查MAC DA,若对应的FDB表项要求送路由,则再根据DIP查找路由表,如果查找成功,则根据路由表的下一跳信息,修改报文中的MAC DA为下一跳设备的MAC地址,修改报文中的MAC SA为输出网络接口的MAC地址,并将报文输出,如果查找失败,则丢弃报文;g.二层交换机2收到报文后,通过查找MAC地址表后,也必会将报文转发到PC3;h.同样PC3到PC1的IP报文也是类似上述的过程。二、三层交换概述1.三层交换机是什么?三层交换机是一种具有基本路由功能的交换机。三层交换机接口类型简单,拥有很强数据包转发效率 ,所以更适用于数据量大的局域网。路由器端口类型多,支持的三层协议多,路由能力丰富而强大,所以更适合于不同接口类型的网络之间的互连。一台网络设备称为交换机还是路由器,主要看其功能侧重点,和适用环境的设定。2.路由是什么?路由就是信息通过一条路径从源地址转移到目的地址的过程。在TCP/IP网络上,源方和目的方都叫做主机,信息被分成小包在主机之间传送。三、三层交换机对IP报文处理过程三层交换机内部有一个路由表(建立在芯片上),这表标明了如果要去某个地方,下一步应该往哪走。三层交换机从某个端口收到一个IP报文,它首先读取目的IP地址,然后查找路由表,若能确定下一步往哪送,则再修改链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息,并把这个数据包丢掉。当下一台三层设备(三层交换机或路由器)接收到该IP报文,也会根据DIP查找路由表,确定下一步往哪送,并将数据转发出。依次类推,直到数据包到达最终目的地。1.三层交换机的软硬件分工路由技术其实是由两项最基本的活动组成,即决定最优路径和传输数据包。其中,数据包的传输相对较为简单,而路由的确定则更加复杂一些。三层交换机的软件负责最优路由的决定,硬件负责传输数据包。三层交换机的软件通过RIP,OSPF等协议确定最优的路径,并将最优的路径写入芯片上的路由表。硬件根据芯片上的路由表线速传输数据。2.最优路由的决定三层交换机通过和三层交换机,或和路由器进行相互通讯,传送不同类型的信息维护各自的路由表。其中路由更新信息一般是由部分或全部路由表组成。通过分析其它三层设备发出的路由更新信息,三层交换机可以掌握整个网络的拓扑结构。这样在掌握足够信息的情况下,三层交换机就能分析出最优路由,并将其写入硬件路由表。3.三层交换机的网络接口介绍(1)Router Port路由口不属于任何VLAN,不能与其它端口进行二层报文交换。(2)SVI全称Switched Virtual Interface,一个SVI对应一个VLAN,它包含了对应VLAN的所有物理端口,这些物理端口间可以进行二层的数据交换,与其它VLAN的交互的IP报文则提交给路由模块处理。等价于一个路由口下接一台二层交换机。(3)L3 AP(aggregate port)可将多个Router Port聚合成一个逻辑端口,达到带宽扩大的目的,它的成员端口必须是Router Port,成员口间使用负载均衡算法,达到负载平衡,当一个成员口实效时,实效端口上的负载会转移到其它有效端口上。与L2 AP不同在于,L3 AP不属于任何VLAN,不能于其它端口进行二层报文交换。4. 路由类型介绍路由表项的组成:网络号+掩码+下一跳IP地址如:192.168.4.0 255.255.255.0 192.168.6.2(1)主机路由掩码是32位的路由,如:192.168.4.118 255.255.255.255 192.168.6.2(2)网络路由指掩码长度小于32大于0的路由;(3)缺省路由指掩码长度等于0的路由,如:0.0.0.0 0.0.0.0 192.168.6.4;5.LPM介绍LPM 全称是Longest Prefix Match,简单的讲就是从多个Prefix中,获取与当前待查找的Prefix匹配最长的一个,如已有3条路由如下:192.168.4.0 255.255.255.128 192.168.6.2192.168.8.112 255.255.255.255 192.168.6.20.0.0.0 0.0.0.0 192.168.6.4三层交换机收到的IP报文的DIP是192.168.4.119,则查找与192.168.4.119匹配最长的是第1条,如果DIP是192.168.8.112,则匹配最长的是第2条,如果DIP是192.168.8.111,则匹配最长的是第3条。6.路由表项来源(1)交换机根据网络接口配置自动生成直连网络路由;用户配置一个网络接口,则交换机认为该接口直连着一个网络,所谓直连是指主机和网络接口间没有隔着另一个三层设备或另一个网路。因此同一台三层设备上的不同网络接口直连的网络必须能够进行IP通信,这就需要自动生成对应的网络路由,因为这台设备已经知道到达双方网络的输出接口,下一跳就是目标主机本身。如:三层交换机配置了网络接口1是192.168.5.1 255.255.255.0,网络接口2是192.168.3.1 255.255.255.0;则PC1发送到PC3的IP报文,能够从网络接口2转发出。知道了输出接口后,还要重新封装二层报文头,才能使报文到达目标主机。由于到达直连网络的报文的下一跳就是目标主机,而一个网络的主机有多个,一条路由只能有一个下一跳,所以还要为每个直连主机创建主机路由,才能使转发出的IP报文的MAC DA是目标主机的MAC地址。所以自动生成的直连网络路由的输出接口不可以是直连网络的网络接口,而是CPU接口,这样直连主机路由查找失败后(参见LPM介绍),IP报文能够送到CPU,由软件解析DIP,并创建直连主机路由,则后续的报文可以由硬件转发。(2)根据IP报文生成直连主机路由;要创建任何路由,都要明确其下一跳,直连主机路由也一样,首先要知道直连主机的MAC地址及与交换机连接的具体物理端口。交换机软件通过发送ARP Request报文,获取ARP Reply报文,而得到直连主机的信息。交换机软件在收到一个IP报文后,根据DIP先查询软件上的ARP表,如果没有对应ARP表项,则通过ARP机制获取。所以要设置直连网络路由,并且其下一跳是CPU。(3)根据用户配置生成静态路由;用户配置的静态路由,只告知软件目标网络和下一跳IP地址,软件需要获取下一跳的MAC地址和对应的输出端口,才能生成路由。解析下一跳IP也是先查询软件上的ARP表,如果没有对应ARP表项,则通过ARP机制获取。如果获取失败,则将下一跳改为CPU,这样后续该下一跳恢复可达后,可通过IP报文激活路由生成的机制。缺省路由也是静态路由的一种。(4)根据协议生成动态路由;与静态路由类似,所不同的是路由表项是由协议算法计算出最优的部分写入硬件。7. CPU收到的帧类型(1)ARP帧ARP帧分为ARP Request和ARP Reply。ARP Request是Ether Type等于0x0806并且MAC DA是FF-FF-FF-FF-FF-FF的报文,ARP Reply是Ether Type等于0x0806并且MAC DA是输入网络接口的MAC地址;这样的ARP报文CPU必须要收到。(2)IP帧CPU只需要收到路由查找成功,但下一跳是CPU的IP帧。有符合直连网络路由的但直连主机路由未创建的,符合动态或静态网络路由的但下一跳IP解析失败的路由。符合缺省路由但用户未指定缺省路由的IP帧应该丢弃,这是为CPU减轻负担的考虑。四、IP组播路由“注:组播服务器和三层交换机2都接入三层交换机1的同一个SVI”在上图中:1.什么是IP组播及IP组播的作用在Internet上,诸如视频会议和视频点播等单点发送多点接收的多媒体业务正在成为信息传送的重要组成部分。点对点的单播传输方式不能适应这一类业务传输特性,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源,如下图所示。IP广播同样不能满足该要求,虽然IP广播允许一个主机把一个IP报文发送给同一个网络的所有主机,但是由于不是所有的主机都需要这些报文,因而浪费了网络资源。在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定的多个接收者发送消息的方法。IP组播是指一个IP报文向一个“主机组”的传送,这个包含零个或多个主机的主机组由一个单独的IP地址标识。主机组地址也称为“组播地址”,或者D类地址,即从224.0.0.0 ~ 239.255.255.255。224.0.0.0~224.0.0.255属于保留地址,其中:224.0.0.1 - 网段中所有支持组播的主机224.0.0.2 - 网段中所有支持组播的路由器2.单播,广播和组播比较2. 组播MAC地址和IP组播地址的关系第2层的组播地址(组播MAC地址)是从IP组播地址映射来的。把组播IP的后23位同01-00-5e-00-00-00进行或运算得到的结果便是组播MAC地址。如:组播IP地址为224.255.1.1,其十六进制表示为e0-ff-01-01,后23位为7f-01-01,与01-00-5e-00-00-00进行或操作的结果为:01-00-5e-7f-01-01。01-00-5e-7f-01-01即为组224.255.1.1的MAC组播地址。五、IGMP1. IGMP简介IGMP(Internet Group Management Protocol)IP主机通过IGMP协议向临近的路由器申请加入(或离开)组播组。目前有三个版本的IGMP:IGMPv1在rfc 1112中说明,IGMPv2在rfc 2236中说明,IGMPv3在rfc3376中说明。下面我们将分别简要介绍在IGMPv1、IGMPv2主机是如何加入或离开某一组播的(假设加入224.1.1.1)。IGMPv1中,主机向路由器发224.1.1.1的IGMP report报文要求加入该组中。路由器收到该请求后,把该主机加为组224.1.1.1的成员。路由器定时发送224.0.0.1(所有主机)的IGMP Query报文,若主机要继续接收该组报文,则应回应IGMP Report报文,若路由器收不到任何主机的IGMP Report报文,将把该组注销。2.IGMPv2IGMPv2向下兼容v1,它对报文进行扩展——增加了IGMP Leave报文,以使主机可以主动要求离开组播组。在IGMPv2中,主机加入组中的过程同v1一致,主机发一个IGMP Report报文请求加入到某一组中。路由器定时发送224.0.0.1的IGMP Query报文,若主机要接收该组报文,则应回应IGMP Report报文,若路由器收不到任何主机的IGMP Report报文,将把该组注销。在IGMPv2中,主机还可以主动离开某一组。当主机不在需要某一组播流时,它主动朝路由器发送IGMP Leave报文主动从该组中注销。路由器收到该报文后,发出该组的IGMP Query报文,若其它主机需要该组播,则将回应IGMP Report报文,若路由器收不到任何主机的回应,将把该组注销。3. IGMPV3在IGMP V1/V2的基础上,IGMPV3提供了额外的源过滤多播功能。在IGMP V1/V2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMP V3的主机通告该主机所希望加入的多播组,同时还通告该主机所希望接收的多播源的地址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMP v3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。同IGMPv2对比,IGMPv3的规定了以下两种报文类型:Membership QueryVersion 3 Membership ReportMembership Query 其中分为三种:General Query:用于查询接口下所有多播成员信息;Group-Specific Query:用于查询接口下指定组的成员信息;Group-and-Source-Specific Query:该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。IGMP Version3 IGMP Version2 IGMP Version3 IGMP Version1 IGMP 的过程同类似。能够向下兼容和Version2。要了解更多IP组播的相关知识,请查阅RFC 1112 、RFC 2236 与 RFC 3376。4.组播路由协议的作用(1)是发现上游接口,离源最近的接口。因为组播路由协议只关心到源的最短路径。(2)通过(S,G)对来决定真正的下游接口,当所有的路由器都知道了他们的上下游接口,那么一颗多播树就已经建立完成。根是源主机直连的路由器,而树枝是通过IGMP发现有组员的子网直连的路由器。(S,G)指(Source,Group)通过源IP和组IP结对区分每个组播源。(*,G)表示只以组IP区别不同的组播源。(3)管理多播树单播路由只需要知道下一跳的地址,就可以进行报文得转发。而组播,是把从一个由源产生得报文发送给一组目的。在一个特定的路由器上,一个包得多个备份可能从 多个接口上发出。如果有环路得存在,那么一个或多个包会返回到其输入的接口,而且这个包也会经复制发到其他的端口上。这一结果可能导致多播风暴,这个包不 断在路由器与交换机间复制,直到TTL减为0。由于这是个复制过程,它的危害会比单播环路严重的多,所以所有的多播路由器必须知道多播包的源,并且需要保证多播包不能从源接口发出。所以他必须知道哪些是上游接口和下游接口,可以分辨出数据包的流向。如果在不是在源的上游接口收到数据包,就会把它丢弃掉。而多播路由协议必须关心到源的最短路径,或者说它关心到源的上游接口。5.三层交换机的组播路由管理三层交换机上的任何一个开启PIM协议的网络接口,接收到组播包,都会触发软件创建一条组播路由,但这个组播路由没有下游端口。将静态配置的下游端口加入刚创建的组播路由。非上游口所在的端口收到IGMP Report报文,会使该输入端口加入已存在对应的组播组;非上游口所在的端口收到IGMP Leave报文,会使该输入端口从已存在对应的组播组中删除;做到上面几点,需要将下列报文送到CPU:IGMP帧,PIM协议只有能收到IGMP帧才能管理下游端口;IP组播帧,PIM协议只有收到IP组播帧才能创建组播路由;DIP等于224.0.0.x的报文。在三层交换机中,组播包必须在上游端口所在的VLAN内广播,目的是让其它的路由器或三层交换机能知道该组播流。六、IPv6路由1.配置不同链路的情况如上图,PC1和PC3需要通过三层交换机才能通信,并且PC1和PC3的IP地址的前缀不一致。这里除了对PC1和PC3配置节点的IP地之外,还要给它们配置类似IPv4的默认网关,在IPv6中,则是配置路由,这里我们给PC1和PC3分别配置默认路由如下:PC1:::/0 2001::1;PC3:::/0 2002::1。配置交换机的2个网络接口,并使之与PC1和PC3连接,网络接口的IP地址分别如下:2001::1/64和2002::1/64。对交换机配置了网络接口后,交换机软件,会自动生成对应的之连网络路由,分别如下:2001::0/64 ::和2002::0/64 ::,其下一跳都是0,表示匹配到这些路由的IPv6报文都会被送给交换机的CPU。下面是PC1和PC2间的通信过程:2.通信过程PC1的应用软件请求发送DIP是2002::2的IP报文;PC1的IPv6协议栈,判断2002::2是否与本节点属于同一链路的,判断方法是通过查询本节点的路由表,若查询后匹配到的路由的前缀与本节点相同,则判断为同链路的节点,即邻节点;若查询后没有匹配到路由,则也认为是同链路的;由于我们之前给PC1配置缺省路由,因此可知道PC3与PC1不属于同一链路;PC1从匹配到的路由中,得到了下一跳为2001::1,因此PC1在邻居缓存中查询IP地址等于2001::1的邻居信息,若查找成功,则将根据邻居信息封装报文,并转发给三层交换机;若查找失败,则按ND机制解析地址,并维护邻居信息,交换机收到PC1的NS报文后,就会从NS报文中得到PC1的链路信息,并维护交换机的邻居表和路由表,即创建到达PC1的直连主机路由,在这里会创建一条主机路由为:2001::1/128 2001::1;交换机收到来自的PC1的IPv6报文,一样要查找路由表,不过先是硬件查询路由表,若匹配到的路由表项的下一跳可达,则硬件完成报文的封装,并线速转发,否则会送到交换机的CPU,由交换机的IPv6协议栈通过ND机制解析地址,在这里是解析PC2的IP地址,并维护更新硬件上的路由表;交换机成解析后,会自动创建对应的直连主机路由,这里会创建一条直连主机路由为:2002::1/128 2002::1;交换机向PC2请求链路层信息的过程,PC2也会从接收到的NS报文,获取交换机与PC2连接的网络接口的链路层信息,并维护PC2的邻居表和路由表;PC2收到由交换机转发的IP报文,该IP报文的SIP是PC1的IP地址,DIP是PC2的IP地址,MAC SA是交换机网络接口的MAC地址,MAC DA是PC2的MAC地址;PC2回复给PC1的IP报文的DIP是PC1的IP地址,SIP是PC2的IP地址,MAC SA是PC2的MAC地址,MAC DA是交换机网络接口的MAC地址;交换机收到PC2的回复IP报文,则先进行硬件的路由表查询,由于有了前面的过程作为基础,这次将会匹配到主机路由2001::1/128 2001::1,并硬件线速转发到PC1。七、隧道1.Tunnel 路由简介2. ipv6-over-ipv4报文样本3.简单试验拓扑4. 配置信息V6主机A的Ipv6地址是2001::2;V6主机B的Ipv6地址是2000::2;双栈交换机A配置2个网关,一个是ipv6网关2001::1/64,另一个是ipv4网关192.168.6.1/24;配置一条tunnel路由是prefix等于2000::/64,DIP等于192.168.5.1,SIP等于192.168.6.1;配置解封装表是DIP等于192.168.6.1,SIP等于192.168.5.1;通过邻居发现协议,创建了prefix等于2001::2/128的ipv6主机路由;通过arp协议,创建了prefix等于192.168.6.2/32的ipv4主机路由;双栈交换机B配置2个网关,一个是ipv6网关2000::1/64,另一个是ipv4网关192.168.5.1/24,;配置一条tunnel路由是prefix等于2001::/64,DIP等于192.168.6.1,SIP等于192.168.5.1;配置解封装表是DIP等于192.168.5.1,SIP等于192.168.6.1;通过邻居发现协议,创建了prefix等于2000::2/128的ipv6主机路由;通过arp协议,创建了prefix等于192.168.5.2/32的ipv4主机路由;Ipv4三层交换机配置了2个网关,分别是192.168.6.2/24和192.168.5.2/24,通过arp协议,创建了prefix等于192.168.6.1/32和192.168.5.1/32等2条主机路由。
一、集线器、网桥、交换机1.集线器正如其名字所示的,集线器(Hub)就是活动的中心,是基于星形拓扑的接线点。集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去。一些集线器在分发之前将弱信号重新生成。集线器就是一种共享设备,HUB本身不能识别目的地址,当同一局域网内的A主机给B主机传输数据时,数据包在以HUB为架构的网络上是以广播方式传输的,由每一台终端通过验证数据包头的地址信息来确定是否接收。也就是说,在这种工作方式下,同一时刻网络上只能传输一组数据帧的通讯,如果发生碰撞还得重试。这种方式就是共享网络带宽(同一冲突域)。集线器的应用星形拓朴结构2.网桥网桥(Bridge) :用于桥接LAN网络中的各种不同的网络设备主要构成:1)MAC转发单元、2)至少两个的通信端口。网桥工作原理分类:Transparent Bridges(透明桥)Source Route Bridges(源路径桥)Spanning Tree Bridges(生成树桥)主要功能:a.收帧、b.丢弃帧、c.减少帧复制、d.重建帧的优先级、e.在不同的端口之间转发帧、f.分队传输帧、g.决定帧的输出格式h.重建FCS、i发送帧网桥的基本操作:a.转发、过滤帧。b.维持转发、过滤过程中所应用的到信息。c.维护管理以上两个内容网桥的应用:3.交换机我们所说的交换机可以认为是多端口透明网桥。主要不同(1)多端口网桥交换机工作时,实际上允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。即网桥一般分有两个端口,而交换机通常具有高密度的端口。(2)分段能力的区别由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。(3)数据帧转发方式的区别a.网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列FCS后,才开始转发该数据帧。b.交换机具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据之前,不需要在接收完整个数据帧和经过32bit循环冗余校验码CRC的计算检查后的等待时间。 交换机分类(1)工作层次分:二层交换机:二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发。三层交换机:三层交换技术是在网络模型中的第三层实现了数据包的高速转发。简单地说,三层交换技术就是:二层交换技术+三层转发技术。应用环境分a.核心交换机:核心层是网络的高速交换主干,对整个网络的连通起到至关重要的作用。核心层应该具有如下几个特性:可靠性、高效性、冗余性、容错性、可管理性、适应性、低延时性等。在核心层中,应该采用高带宽的千兆以上交换机。因为核心层是网络的枢纽中心,重要性突出。b.汇聚层交换机汇聚层是网络接入层和核心层的“中介”,就是在工作站接入核心层前先做汇聚,以减轻核心层设备的负荷。汇聚层具有实施策略、安全、工作组接入、虚拟局域网(VLAN)之间的路由、源地址或目的地址过滤等多种功能。在汇聚层中,应该采用支持三层交换技术和VLAN的交换机,以达到网络隔离和分段的目的。c.接入层交换机接入层向本地网段提供工作站接入。在接入层中,减少同一网段的工作站数量,能够向工作组提供高速带宽。接入层可以选择不支持VLAN和三层交换技术的普通交换机。典型的交换机网络拓朴二、MAC地址1.什么是MAC地址概念MAC地址也叫物理地址、硬件地址或链路地址 ,处于OSI的数据链路层。MAC地址表802.1Q中的地位:Filtering Database作用:为设备提供报文转发端口信息用于扩展服务的动态过滤信息2.以太网帧以太网帧结构a、前导(Preamble)内容:7个Bytes的10101010,作用:该字段的曼彻斯特编码会产生10MHz,持续时间为 5.6s,以便接收方和发送的时钟进行同步。b、起始符(SFD)内容: 10101011,作用: 标志着一帧的开始。c、目的地址长度:6Bytes,分类:Unicast Address:最高位为0,Multicast Address: 最高位为1,Broadcast Address:全 1d、源地址长度:6Bytes,分类:Unicast Address: 最高位为0e、Length(长度):2Bytesf、Data(用户数据):0~1500 Bytesg、PAD(填充域):0~46 Bytesh、CRC校验码:4Bytes生成多项式为:G(X)=X32+X26+X23+X22+X16 +X11+X10 +X8+X7 +X5+X4+X2+X+1。 校验范围为:目的地址、源地址、长度、数据和PAD3.MAC地址表低端芯片MAC单元高端芯片MAC单元4.MAC地址分类交换机中的MAC地址a.动态地址动态地址:交换机通过接收到的报文自动学习到的MAC地址。地址学习:当一个交换机端口接收到一个包时,交换机将把这个包的源地址和这个端口关联起来,并记录到地址表中,交换机通过这种方式不断学习新的地址。交换机通过学习新的地址和老化掉不再使用的地址来不断更新其动态地址表。b.静态地址静态地址是在地址表中以静态(static)的型式存在的,地址老化操作对于静态地址单元不起作用。静态地址一般是由软件操作显式的添加,静态地址一旦添加将一直生存,直到其被显式的删除或是芯片复位。静态地址在配置后,将被保存至FLASH中的配置文件,在交换机重启之后,被重新配置到地址表当中。c.过滤地址过滤地址是由软件操作显式添加的MAC地址。当交换机接收到以过滤地址为源地址的包时将会直接丢弃。过滤地址永远不会被老化,只能手工进行配置和删除或是芯片复位。过滤地址在配置后,将被保存至FLASH中的配置文件,在交换机重启之后,被重新配置到地址表当中。三、VLAN1. VLAN基本概念VLAN:VLAN,虚拟桥局域网( Virtual Bridged Local Area Networks )的简称,它是在一个物理网络上划分出来的逻辑网络。这个网络对应于ISO模型的第二层网络。VLAN的划分不受网络端口的实际物理位置的限制。VLAN有着和普通物理网络同样的属性,除了没有物理位置的限制,它和普通局域网一样。第二层的单播、广播和多播帧在一个VLAN内转发、扩散,而不会直接进入其他的VLAN之中。2 .VLAN的几种分类port base VLANtag base VLANprotocol base VLAN3.TAG VLANTAG 帧结构4. VLAN优点(1)、控制网络的广播风暴采用VLAN技术,可将某个交换端口划到某个VLAN中,而一个VLAN的广播风暴不会影响其它VLAN的性能。(2)、简化网络管理网络管理员能借助于VLAN技术轻松管理整个网络。在同一个物理网络下,可以利用VLAN技术划分不同的逻辑网络,当要改变网络拓朴结构时,只需通过修改VLAN配置。(3)、确保网络安全不同VLAN之间,可以认为是不同的LAN,通过VLAN技术隔绝端口,分隔不同用途的网络,以保证同一个物理网下的不同用途网络之间的数据通讯安全。5 .VLAN 应用6 .VLAN角色(1)ACCESS PORT一个access端口,只能属于一个VLAN,并且是通过手工设置指定VLAN的。以UNTAG的格式输出报文。(2)TRUNK PORT一个Trunk是连接将一个或多个以太网交换接口和其他的网络设备(如路由器或交换机)的点对点链路,一个Trunk可以在一条链路上传输多个VLAN的流量 。一个Trunk口,在缺省情况下是属于本交换机所有VLAN的,它能够转发所有VLAN的帧。Native VLAN:就是指在这个接口上收发的UNTAG报文,都被认为是属于这个VLAN的。(3)不同VLAN间通讯VLAN之间的通讯必须通过三层设备(路由器或者三层交换机)。三层交换机可以通过SVI接口(switch virtual interfaces)来进行VLAN之间的IP路由。四、端口聚合1. 基本概念什么是端口聚合我们可以把多个物理链接捆绑在一起形成一个简单的逻辑链接,这个逻辑链接我们称之为一个aggregate port(AP )相关协议标准:IEEE802.3ad。端口聚合的优点:增大带宽;流量平衡(load-balance);链路冗余(Link-Fail-Over)a.增大带宽通过多个端口形成一个AP口,获得更大的链路带宽。如:N个100M的端口聚合成一个N x 100M的AP口b.流量平衡根据不同的报文类型,将报文分配到AP的不同成员口当中。常用的平衡方式:Port、MAC、IP、L4。如:S3760支持的平衡方式:<源MAC地址、目地MAC地址>、<源IP地址、目的IP地址>,<源UDP/TCP端口、目的UDP/TCP端口>c.链路冗余当AP中的一条成员链路断开时,系统会将该链路的流量分配到AP中的其他有效链路上去。(Link fail over)2.AP典型应用五、流控1. 什么是流控流控是用于避免通讯端口由于缓冲区不足而产生报文丢失的技术。2.流控的分类a.全双工流控Flow-Controlb.半双工流控Backpressure3. Flow-Control概念:通过PAUSE帧技术,用于在全双工以太网上,实现流控机制,为了避免由于瞬时过载导致缓冲区溢出引起不必要的帧丢弃。PAUSE帧结构水位控制技术:一般情况下,交换机的缓冲区有一个高水位和低水位,与这个水位相关的是PAUSE的时间。当缓冲区的高水位阈值被超过时,交换机将产生一个PAUSE帧(Pause Time为用户设定值)发送给DTE(DATA TERMINAL EQUIPMENT ),DTE在PAUSE帧的指定时间内不发送帧,经过这个时间后DTE又继续发帧,如果此时拥塞并未缓解,此时将会发送一个较大Pause Time的PAUSE帧(注:有些芯片实现是直接发送时间为0xFFFF的帧,对端停止发帧) 。一旦拥塞解决,缓冲区达到低水位线时,将会发送一个Pause Time为0的PAUSE帧,通告对端可以开始发送帧。4.背压Back Pressure(1)概念背压是在半双工下,通过伪造拥塞的方式防止丢帧的技术。(2)半双工背景CSMA/CD:带碰撞检测的载波监听多路访问。站点在传输时间继续监听媒体,一旦检测到冲突,就立即停 止发送,并向信道上发一串阻塞信号,通知总线上各站冲突已发生,,这就称作载波监听多路访问/冲突检测协议,简写为CSMA/CD。冲突回退算法:当端口监听到信道上发生冲通,通过二进制回退算法,暂停一段时间后继续发送帧,当冲突16次后,对帧进行丢弃操作。(3)背压Jam signal:交换机在遇到拥塞时,要进行拥塞控制时,产生一段前导码,把它放到需要输出的端口上,前导码后不带有帧起始符,这样保证接收端口不会将它解释成为一个真正的帧,从而使信通上看起来很忙。这个前导被称为jam signal。工作原理:当接收缓冲区溢出的时候通过将阻塞信号(jam signal)发送回源端口来实现流控。
商业化落地过程中机遇与挑战并存;区块链+供应链的快速变革趋势为各参与主体提出抢占人才、技术、应用高地的要求。企业应结合自身条件,如企业规模、所处行业等,全方位考虑区块链布局战略。对于大型企业来说,企业在数字化基础、技术能力、资金实力等方面处于领先地位,具备更加完善的区块链建设条件,在区块链快速发展背景下应抓住机遇,充分利用区块链技术释放商业价值。在区块链布局战略选择方面,大型企业可以从以下三个维度进行思考:1、寻找与企业最适配的区块链落地场景:企业需要充分考虑眼前的各种可能性,对应用机会进行广泛评估,而不拘泥于单一的用例和应用场景;确定最适合落地的应用场景优先实施。2、决定区块链部署模式,打出区块链建设组合拳:不同业务场景对区块链性能、治理模式等有不同要求。企业应充分了解各场景适用的区块链部署模式,确定最优选择,打出组合拳。企 业可以通过一系列的决策路径来判断是否在某个场景中使用区块链技术,以及具体的区块链部署形式。3、构建行业级区块链解决方案,带动行业共荣共生。在条件成熟情况下,建立行业级的平台,可进一步巩固企业的行业龙头地位、赋能行业发展,提升品牌影响力;同时,这也将推动企业从传统生产商向综合技术服务提供商的战略转型,为企业在科技化浪潮中占得有利位置。而对于中小企业,则应该积极完善自身数字化能力、补足数据上链的能力基础,广泛参与行业区块链,拥抱区块链发展。第一方面结合企业最具价值和拓展性的业务以区块链生态落地场景的形式加入到垂直行业领域中,形成同业差异化竞争优势,快速抢占市场份额。第二方面将通证理念及通证模型设计到企业商业模型中,将原有的单一的“消费者”身份转变成“消费者+推广者+受益者”的多重身份,将利益对立体转变成利益共同体,将利益博弈模型升级为利益共享模型。无论如何,在权衡企业自身情况下都要尽可能的顺应国家的指导和发展方向,抓住时代赋予的新机遇,贡献自身的商业价值,赢得市场!
物联网技术的发展实现了物与物的链接,实现的是物与物之间的信息交互和控制,虽然不依赖于人,却进一步扩展了人对物理空间的控制能力。借助物联网,人们可以实现对制造设备的远程操作,在这些设备联网后带来变革的同时,也带来了一些挑战。首先,海量数据的存储。物联网产生的大量数据,按照现有的存储方式,海量数据将被集中起来,统一存储,维护成本非常大。第二,数据的安全性。数据汇总至单一的中心控制系统后,数据安全问题将是一个极大的隐患,一旦中心节点被攻击所带来损失是难以估量的 。第三,多主体协调的问题。物联网涉及很多领域,不同运营商、自组织网络都加入其中,如果处理不好彼此之间的互信问题,将使物联网系统难以协调工作。区块链的出现为物联网提供了点对点直接互联的数据传输方式,也给物联网的发展带来了更多的可能。1、区块链的微支付模式未来,智能设备能够通过智能物联网代替人处理一些日常工作,物与物之间将完成订购、销售、支付等全流程商业活动。而在这个全流程商业活动中,系统必须具备精准的数据信息、安全稳定的传输体系、机器之间点对点的电子支付体系。构建在区块链上的支付体系不依赖第三方,让支付与清算同时进行,基于区块链的点对点支付以及智能合约等技术的应用,将使机器与机器的交互更为便利,更易于实现。2、高效且智能的网络运行机制基于区块链的多中心和共识机制特性,物联网上跨系统的数据传输将“下沉”到区块链层,这将大大降低应用系统的复杂性。物联网也将由IoT(Internet of Things)时代演进到CoT(Chaint of Things)时代,构建全新的链上世界。3、万物账本驱动的万物互联我们把基于区块链的智能设备网络“数化”入网,将会形成一个“万物账本”,这是一个分布式的总账系统,具备区块链的一切特性,如安全可靠、不可干预、防止篡改、可编程等。在这个账本里记录着所有数据的交换记录,这些记录在运行中不断进行积累,并由该特定网络中的协作节点进行维护。在此基础上构建的万物互联机制将可信而稳定。具备分布式特性的物联网与区块链之间具备天然的关联,人与人、物与物、人与物之间的交流与互动将更加高效便捷。
恶劣的通信环境、终端频繁的移动以及节点的能量限制,给战术物联网环境下节点安全性评估带来了极大挑战。针对这一问题,提出了一种移动战术环境下使用信任指标对节点进行安全性评估的方案。该方案引入通信稳定性作为信任指标的影响因子,解决了机会服务攻击和开关攻击的安全问题。仿真结果表明,该方案能够进行入侵检测,有效地发现恶意节点,较好地抵抗多种已知攻击。此外,该方案在保证安全性的同时能够大大降低能耗,是一种既安全又轻量的方案。近年来,物联网技术飞速发展,使得越来越多的物理节点被部署到物联网。大量具有计算、传感、执行能力的节点连接到网络中,在不需要人类干预的情况下,这些物联网节点可以完成各种任务,为人类提供极大的便利。但是,使用这些物联网节点的前提是这些节点能够安全接入服务器或网关,否则将会带来各种危险甚至灾难。而在通信间断、中断以及受限(Disconnected、Interrupted、Limited,DIL)的网络环境中,想要保证终端的安全接入更加困难。在疏散、搜救以及军事行动等战术环境下,物联网节点经常处于不停歇的移动中。移动的方向和速度存在较大的随机性,且处于DIL的通信环境。终端移动后需要选择合适的网关接入,而即将接入的网关和路由的安全性如何是一个需要特别关注的问题。此外,加密认证是节点安全接入网关的常用方法,但是这种认证方法需要消耗较多能量,而资源受限是物联网普遍存在的问题,所以需要在保证终端安全接入的同时尽量减少资源的损耗。基于信任的评估策略是一种有效且计算耗能非常少的辅助方案。终端通过对其他终端和网关的性能和安全进行评估,量化路由的安全性,在移动后将信任指标作为主要参数来选择合适的网关连接。在系统运行过程中,认定信任指标过低的节点直接丢弃。此外,信任指标还可以为终端是否相信其他节点发送的重要消息提供依据。现有的评估策略主要是对服务质量和能力的评价,虽然是决定节点安全性的重要因素,但是显然不够,于是社交关系的评估被提出。社交关系包括诚实度、亲密度、连接性、相似性以及自私性等。但是,使用服务质量和社交关系进行信任评估的策略很少应用于军事环境,更缺少基于DIL环境下应对通信不稳定情况的分析,没有考虑到连接性在信任指标中的重要作用,也没有针对不同等级的节点提供的信任指标赋予不同的权重。此外,这些方案仍然存在一些安全隐患没有解决,如不能抵抗机会服务攻击、开关攻击等。一、战术环境的网络拓扑图1为本文具体的战术环境网络结构示意图。在战术环境中,通信不稳定的情况经常出现,所以本文是基于网络中节点与云端断开连接的模型展开讨论的。此时,网络中主要存在终端、网关和主控节点3种节点。图1 战术环境下的网络拓扑无人机、无人车以及士兵携带各种功能的节点以及一台Android节点,且所有功能节点会与Android节点连接。该Android作为终端与其他终端、网关以及主控节点连接,主要完成汇总、处理、传输以及接收数据的功能,并对其他节点进行安全评估。终端需要与网关连接,完成数据上传。如果终端不能直接与网关、主控节点连接,则与其他终端连接通过多跳的方式连接到网关、主控节点。一般而言,一个终端只能与一个网关连接,但是可以和多个终端连接。图1中箭头表示终端的移动方向。具有更高性能、更多能量、更强计算能力的节点可以作为网关,如图1所示。网关可以是较大型的无人机、无人车,或者该节点直接由固定人员携带。每个网关都有各自的信号覆盖范围,在该范围之内的终端可以和该网关连接。网关也需要和其他可通信的网关、主控节点连接,并互相进行评估。网关也是可以移动的,但是网关的移动性相比终端较小,且也可以类比为终端的相对移动。所以,本文只考虑终端的移动。主控节点是所有网关中移动性相对较小、处理数据能力相对较大的网关,可以是一个大型的战车、临时指挥所等。主控节点会对所有上传的数据进行汇总、分析,也只有主控节点可以决定是否丢弃某个终端或网关,具有最大的权力。但是,终端和网关也会对主控节点进行安全评估。如果最终判定主控节点遭到入侵,将会选取新的主控节点。二、节点的安全性评估在战术环境中,终端移动性较高,经常离开当前连接网关的信号覆盖范围,并进入其他网关的信号覆盖区域。所有节点之间需要互相评估安全性,以应对可能存在的安全问题。为了表述方便,A表示评估的终端,B表示被评估的终端,GA表示评估的网关,GB表示被评估的网关,R表示主控节点。1.节点的信任指标在战术环境中,主要存在终端、网关以及主控节点3种节点。所有终端会对可通信的终端、网关以及主控节点进行信任评估,而网关与主控节点同理。为方便叙述,本节主要介绍终端计算其他终端信任指标的方法。信任指标主要是基于节点的服务质量和社交关系两方面的能力计算获得。本文中,服务质量主要使用节点能量代替,即节点能量越大,服务质量越高;社交关系主要包括亲密度、诚实度、自私性和连接性4个因子。(1)信任指标的计算终端会周期性地评估另一个终端的安全性。设A对B的安全信任指标为,则计算公式如下:式中,、、、、分别表示终端A在当前周期评估终端B的亲密度值、诚实度值、自私性值、连接性值以及能量值,分别表示对应的权重,且。设在该周期内终端A评估终端B某种指标X(X可为其密度、诚实度、自私性、连接性和能量)的数值为,则有:对于终端A和终端B之间是通过一跳还是非一跳的连接方式,本文采用等式(2)的两种方式计算指标X的评估数值。如果A和B是一跳连接,则评估数值由上一周期求得的评估数值和当前周期的直接评估数值决定。等式(2)中,Δt表示评估周期,表示当前周期的评估数值,用于权衡当前周期评估数值与上一周期评估数值的关系。如果A和B是非一跳的方式连接,即A和B可能多跳连接也可能不连接,则对应的评估数值由上一周期的信任指标和当前周期其他终端的间接信任指标决定,其中,C表示给A间接信任指标的任意终端,表示当前周期终端C发送给终端A的关于B的推荐信任指标,且如果已知C是受损或入侵终端,则C不带入上述计算公式。表示权衡上一周期信任指标与当前周期间接信任指标的参数。C与B的连接跳数越大,则C对B的评估就越可能不准确。所以,通过这个参数减少连接跳数对评估不确定性的影响。这里表示C到B的跳数。当A计算B的信任指标小于某一阈值的时候,需要和A进行完整的加密认证,以判断B是否安全。(2)信任指标的影响因子亲密度终端A与终端B交互的次数即为亲密度。交互包括A和B之间提出请求、传递消息和监听信息等。一般而言,在某一周期内A与B交互的次数越多,则两者的亲密度越高。A评估B的数值越高,A认为B越安全。本文基于A和B交互的具体次数,修改了亲密度值的求解公式。如果A和B一跳连接,A和B当前周期交互次数与之前周期内的交互次数和当前周期A与其他终端交互次数相关。两者的亲密度值计算如下:式中,是根据A和B之前每个周期内交互次数得出的等级值。例如:如果当前周期两者交互次数在所有周期交互次数中排在前50%,则等级值设置为1;排在前85%,等级值设置为0.75,其他排名设置为0.5。该等级值作为参数可以根据实际情况进行调节。此外,对于受损或入侵节点B,等级值统一设置为0。是根据当前周期A与其他终端交互次数得出的等级值。用于权衡这两个等级值之间的关系。如果A和B多跳连接,则A与B的亲密度值主要通过其他终端的建议计算,通过式(4)的结果进行排序:式中,C表示和A一跳或多跳连接的终端;是终端C和终端B的亲密度值,C将该数值发送给A;是C和B连接的跳数。A根据该数值进行排序,设置对应的等级值。诚实度通过A与B的信息传输判断B是否遵守某些规则,否则判定B有不诚实的行为,具体评判标准可以参考文献[18]。这些需要遵守的规则包括间隔规则、转发规则、路径规则、延迟规则、重复规则、干扰规则以及异常规则等。间隔规则指A接收到B的两条连续消息的时间不能大于或小于某个阈值;转发规则指A传输信息给B要求其转发,B需要完整转发;路径规则指B接收到A的消息并转发,需要保证转发路径与A设置的初始路径一致;延迟规则指B转发A的消息必须在规定时间内完成;重复规则指同一条消息只能被邻居终端转发有限次数;干扰规则指B在给A发送消息的过程中,噪声干扰必须小于指定次数;异常规则指B给A传输的数据经过融合处理后不能出现异常,如对某一区域的传感器读数不能出现异常值。A统计B的不诚实行为的次数为n,设置为不诚实行为次数不可超过的阈值,则不诚实度的计算公式为:自私性自私是指B没有毫无保留地完成A发布的任务,判断标准是B是否按照管理要求严格执行,如忠实地发送、上传、报告、转发数据等,对自私性的要求可以具体参考文献[19]。B可能为了节省自身能量,并且在考虑到其他连接的无私终端的数量时,减少或停止向A传递数据信息,使自身变得自私;自私终端也可能因为周围自私终端较多,在平衡自身需求和整个系统需求后再次积极地传递数据消息,使自己变得无私。与诚实度值的计算类似,需要设定阈值,并统计B没有按照协议忠实执行任务的次数。自私性值的具体计算公式如下:式中,为B没有忠实执行任务次数;m为设定的阈值;为A与B按照协议执行所有任务的交互次数。此处与诚实度计算公式不同的原因是诚实度与安全性的相关性更为密切,而自私性可以根据B能量的多少适度变化,所以对于评估终端是否自私不像评估终端是否诚实一样要求较高。连接性连接性是指B与A是否在评估周期内保持通信稳定。比如,战术环境中,通信不稳定的情况时常发生,B可能与A发生短暂的通信断连,之后又重新连接。一般而言,B的通信越稳定,B处于安全状态的可能性越高。当B与A断开连接的次数、一次断开连接的时间或者总共断开连接的时间中有一项超过设定烦人阈值,则连接性的信任指标设为0。连接性指标的计算公式如下:式中,为B与A断开连接的次数;为B与A断开连接的最长时间;为B与A断开连接的总时长;分别为对应的阈值;是权衡上述3个变量的参数,且。能量B的剩余能量是用于评估B服务质量的主要因子。B在向A传输数据的过程中需要告知A自身的剩余能量,一般只要能量剩余没有超过一个阈值,都可以将B的能量信任指标设置为1。式中,为设定的阈值。此外,为了防止B虚报能量,则A可以通过监听B传输数据的时延,判断该时延是否在正常范围内,即用正常传输时延的次数与传输总次数的比值来评估B能量值。2.安全性评估策略在战术环境中会经常遇到通信中断、间断以及受限等情况,虽然本文在信任指标中添加了连接性作为计算该指标的一个因子,但是DIL环境中出现通信不稳定的情况有很大的不确定性,而信任指标提供了一个判断节点安全性的依据。本小节将介绍在战术环境下利用信任指标进行安全性评估的方案。其中,终端、网关以及主控节点之间需要相互进行安全性评估,不同节点之间评估方法略有不同。此外,需要使用算法抵抗机会服务攻击和开关攻击,减少安全评估过程中这些攻击造成的干扰。(1)终端、网关、主控节点之间的评估式(2)中,既是C对B的直接评估值,也可以作为推荐评估值发送给A。但是,推荐评估值只在需要对多跳连接的节点进行安全性评估的时候使用,且需要A的周围存在能够一跳连接的节点C。如果A不存在可连接的邻居节点,则权重b值应该为0。此外,在式(2)中只建立指标值与跳数的关系。为了增加准确性,还需要考虑A和C的直接指标值对C给A的推荐指标值的影响,即建立权重b与之间的关系。关于b的具体公式为:式中,c为权重参数。基于网关与终端的连接关系,终端A只会对与自己相连接的网关进行评估,但是会转发其他网关的数据信息。网关相比终端有着更高的安全性与性能,所以网关给A的推荐信任指标比终端给A的推荐信任指标占有更大的权重。此外,b随着c的增加而增加,则对网关给A的推荐信任指标需要将设置较大一些。网关GA会对终端、网关和主控节点进行评估,且网关需要对所有终端上传的评估数据进行汇总,并再转发给主控节点。GA计算B的汇总信任指标公式为:式中,C为上传数据给GA的任意终端,表示GA计算C的信任指标,是设定的阈值。表示只有GA认为C是安全的,才能代入式(11)来汇总计算B的信任指标。表示C上传给GA的关于B的信任指标;表示上传给GA信任指标并符合安全要求的终端总数;GC表示发送数据给GA的任意网关;表示GC计算B的信任指标;表示所有发送数据给GA的网关总数;v是权重参数。式(11)中没有添加信任指标的阈值判断,主要是因为网关数量较少,且网关安全性相比终端较高。网关GA对GB的评估类似于终端A对B的评估,且GA会将评估结果上传给主控节点,具体可以类比3.1节的信任指标计算方法。主控节点会对所有终端和网关进行评估,并且会汇总所有终端和网关上传的它们对其他终端和网关的评估结果。主控节点评估终端和网关的方法与3.1节介绍的方法相同,汇总终端与网关的信任指标与式(11)提供的方法相同。(2)抵抗开关攻击的算法通过计算信任指标,A可以对B的安全性进行评估。但是,假设B是恶意节点,B大多数时候表现良好,使自己被计算的信任指标维持在一个阈值以上,但随机或者某些重要时刻对A发布错误信息,使A遭受到开关攻击或机会服务攻击。为了应对这种攻击,提高安全性评估准确性,本文采用一种检测算法。算法的主要流程如图2所示。图2 开关攻击检测流程该算法的具体步骤为:A计算对B的信任指标,并设置初始周期参数pe=0。先判是于设定阈值,若不大于则认为B可能不安全,A对B进行完整的加密认证。如果大于阈值,再判断pe=0是否成立。pe=0不成立,则pe=pe-1,并认为B是可信任的,在下一个评估周期到来,A继续对B进行安全评估。如果pe=0成立,则计算pe=random%q,并对B进行一次额外的完整加密认证。其中,random为随机数;q是事先设定的数值,与正相关,即对B信任指标越大,则认为B越可能是安全的,所以对B进行额外加密认证的频率越小。节点A在评估节点B的过程中,会根据节点B的能量不定期地与B进行加密认证。如果加密认证没有通过,B就会被认为是不良节点。通过上述检测算法,将有效抵抗机会服务攻击和开关攻击,因为实施这两种攻击的攻击者不知道攻击对象何时会进行加密认证。三、安全分析和性能分析1.安全性分析本文利用MATLAB仿真节点移动的过程,采用随机漫步模型。由于本文战术环境中的节点有无人机,且在山区、高楼等地点节点也会经常高出水平面,所以本文使用二维和三维两种模型的仿真。二维模型是在400 m×400 m的战术环境中有100个终端随机运动。在该移动模型中,终端会随机选择上下左右任意方向移动[0,2X]m的距离,其中X为可以设置的参数。每秒平均的移动距离为X,当X=1 m时,二维移动模型如图3所示。图3 随机漫步模型二维仿真结果图3中每个“*”标志表示总共的25个网关,每种颜色的曲线表示终端移动轨迹。对于三维模型,在400 m×400 m×400 m的网络环境中有100个终端进行随机运动。总共24个网关,假设网关分布的水平坐标为(0,100)、(0,300)、(400,100)、(400,300)、(100,0)、(100,400)、(300,0)、(300,400),垂直方向坐标为100、200和300。当X=1 m时,三维移动模型如图4所示。图4 随机漫步模型三维仿真结果2.性能分析相比于直接使用加密认证检验节点安全性的方案,本文方案采用计算量更轻便的信任指标检验其他节点的安全性。虽然经常使用完整的加密认证方案可以更好地保证节点认证的安全性,但是对于能量的损耗也是巨大的,而本文在安全性和能耗之间进行了很好地权衡。四、结 语在战术环境中,节点需要面临各种通信不稳定的情况。本文基于所有节点与云端断开连接的场景进行安全分析。由于缺少功能强大的云端的支撑,网络中的节点需要依靠自己和其他节点的互相监测来保证安全性。本文改进的信任指标计算方式在保证网络安全性的同时,减少了加密认证的次数,大大降低了能耗,同时分析了在DIL环境下面对安全问题的解决方法。但是,本文仍然存在一些缺点,如由于篇幅限制,没有详细讨论方案中计算信任指标时各个参数的最佳设置。本文中应用的随机漫步模型也不能完全模拟现实战场环境的所有情况,所以以后的研究方向可以根据不同移动模型为信任指标的计算选取最佳的参数。此外,本文在分析各种安全问题的解决方案时有些讨论还不够详细,如主控节点的选取。不仅需要考虑候选网关的信任指标,还要考虑它们的位置、移动性、周围受损节点的数量等因素。因此,以后也可以在这些方面展开研究
随着信息技术的飞速发展,社会信息化程度越来越高,因此各类企业的信息化发展需求也越来越多。很多传统企业面临着信息化、数字化转型的挑战,因此纷纷将IT部门独立出来,以应对企业信息化、数字化发展需要。但如果不能真正意识到IT部门在企业信息化发展中的价值,那就算成立了独立的IT部门,也只是“新瓶装旧酒”、“换汤不换药”罢了,对企业的信息化建设和发展起不到根本性的改变。本文以以IT部门的职能转型核心,为传统企业分析IT部门的真正价值所在,为传统企业明确信息化建设的发展方向。一、IT部门的主要工作内容:IT(Information Technology)部门通常是指信息技术部、科技信息部或信息中心。通常一个企业的IT部门主要有以下工作内容:1、根据企业战略发展要求,搭建企业信息化、数字化发展框架;(IT管理类)2、根据企业的业务发展需要,策划和部署各类业务信息化系统;(IT管理类)3、建立企业信息安全防护体系;(IT管理类)4、配合业务部门做好相关的系统上线;配合业务部门的操作,做好IT相关的电脑和网络保障,即IT运维;(IT服务类)5、培养企业的IT队伍,不仅包括IT部门专门从事IT技术与管理的人员,同时也包括培养企业从事IT业务系统应用的关键用户。(IT服务类)6、做好整个公司的IT资产管理。(IT服务类)二、IT部门面临的困境对于面临信息化、数字化转型挑战的传统企业来说,IT部门面临以下三层困境:(一)公司决策层:1. 为什么要进行信息化转型,不明确,企业内部全员没有形成共识;2. 企业该往哪个方向转型,转型后企业会变成什么样,不清楚,没有清晰的发展蓝图;3. 企业怎么进行信息化数字化转型,企业现有的IT技术、信息资源能实现什么,不清楚,对企业IT资源不了解;4. IT逐年投入加大,但看不到实质的改变,不知道该如何评价投入和产出的关系,所以投入意愿不高;(二)业务执行层1. 信息化和业务两张皮,IT部门只说信息化的,业务部门只说业务的;业务系统应由业务部门牵头进行推广,IT部门只负责技术支持,而业务部门以不懂技术为理由,凡遇到问题就认为是系统问题,要用户找IT部门。2. IT部门负责配合业务部门做好相关的系统上线;配合业务部门的操作,做好IT相关的电脑和网络保障这些职责,都是属于被动式的,无法创造额外利润,只能是算辅助正常生产的后勤部门。(三)运行维护层1. IT管理以IT运维为主,信息系统的开发也是围绕着企业的正常业务运维为主的。但随着企业的业务拓展,信息化需求是越来越多的,所以在某种程度上说,传统企业的IT发展是滞后于业务发展的。2. 由于企业内部全员没有形成信息化、数字化转型的共识,所以员工排斥和抵制信息化建设,认为与已无关,开展必要的信息技术知识宣传、培训工作十分艰难。3. IT在一个企业中只是一个后勤部门,人员资源配置不到位,工作只能被动开展,所以IT运维团队经常被称为“修电脑的”或“救火队员”,IT部门人员无法得到尊重和价值体现。三、IT服务外包随着IT 技术和管理思想的不断成熟和发展,IT服务外包逐渐成为企业传统IT改革选项之一。而判断一个部门是否可以外包,从经济方面考虑的唯一标准就是这些职责所付出的成本,是否不会超过通过外界的IT服务外包所付出的成本。如果超过这个外包成本,这个IT部门的价值何在?企业的IT部门不是只有IT服务职能,IT部门同时也有IT管理职能。IT运维服务可以外包,但IT管理职能能外包么?四、IT治理(一)IT治理的概念美国麻省理工学院的学者彼得·维尔和珍妮·罗斯在其所撰写的《IT治理》一书中指出“IT治理”就是为鼓励IT应用的期望行为,而明确的决策权归属和责任担当框架。中国IT治理研究中心给“IT治理”的定义是:IT治理是指设计并实施信息化过程中各方利益最大化的制度安排,包括业务与信息化战略融合的机制、权责对等的责任担当框架和问责机制、资源配置的决策机制、组织保障机制、核心IT能力发展机制、绩效管理机制以及覆盖信息化全生命周期的风险管控机制。 该制度安排的目的是实现组织的业务战略,促进管理创新,合理管控信息化过程的风险,建立信息化可持续发展的长效机制,最终实现IT商业价值。综合以上的定义可以从IT治理的内涵表述中得到以下内容:1. IT治理强调信息化目标与企业战略目标保持—致;2. IT治理是企业利益相关者和经营者共同的责任;3. IT治理保护利益相关者的权益;4. IT治理通过构建IT治理架构和机制,最大化提升企业价值。用一句话来概括,“IT治理”就是在信息化过程中关于各方利益最大化的制度安排。对IT治理而言,要能体现未来IT与企业未来战略的集成。既要尽可能地保持开放性和长远性,以确保系统的稳定性和延续性,同时也要适时调整规划以保证跟上企业环境的变化。IT治理中一个相对有效的做法是,在信息化规划时,认真分析企业的战略与IT支撑之间的影响度,并合理预测环境变化可能给企业战略带来的偏移,从业务战略到信息战略,在规划时留有适当的余地。(二)IT治理与IT管理IT管理和IT治理是相辅相成、缺一不可的。这与企业管理类似,如果没有好的治理(约束和激励)机制,企业管理的好是偶然的,管理不好是必然的; 同样,对于IT,如果存在好的IT治理机制, IT管理的好就是必然的、管理不好是偶然的。因此,IT治理是IT管理的基石,某种意义上可以认为IT治理比IT管理更重要。当前,企业信息化建设中的最大问题,不是技术问题,也不是资金问题,而是缺乏科学的IT管理观念;IT领导者最大的问题不是缺少经验和能力,而是缺乏卓越的管理素质和管理方法。对于IT治理来说,国际上已有许多成熟的方法和工具,形成了最佳业务实践,这些最佳业务实践是全球智慧的结晶,所以,对于企业来说,不用再去从头创新,而需要根据国情和组织的实际情况,对最佳实践加以理解、掌握并有效运用,从而为组织战略目标服务。IT治理内容与国际最佳实践标准五、IT部门的真正价值(一)改变被动响应的工作模式,主动走在业务的前面,来引导业务需求,驱动业务改变。1. IT部门要跟其他部门一起识别企业战略、解读战略。2. 做好公司的信息化长期规划,保证未来几年公司信息化道路路线方向;3. IT部门要清楚所属企业的业务形态,努力实现业务与IT的匹配。做IT的人对系统很熟,要研究企业关键的应用系统都有哪些。这些系统能够给企业解决什么样的问题,系统的功能跟企业业务匹配的程度如何?匹配完了之后才知道企业需要什么样的系统来提升核心竞争力,这是IT立项时就要考虑的问题。从业绩出发,解决问题的能力和系统能力,才是IT立项的依据。立项后还要提出长期的工作规划,做好运营。4. 主动式服务:所有的被动式服务导致因为问题出现的损失是巨大的。如果在前期可以主动介入,避免或者减小问题,避免公司的巨大损失。(二)一个企业信息化普及好了,信息化建设好了,企业的竞争能力将得到大大提供,这是企业的硬实力。1. IT部门的价值不仅通过项目实施推进企业发展变革,也要与其它部门建立和谐的服务共生关系。IT部门在提供IT基本服务如电脑维护,网络故障排除,业务软件系统服务提供的同时,同样需要与各业务部门之间大量了解学习各业务部门自身的运作机制,只有深入了解业务部门的流程、数据、文档、知识流动的微观机理,才能不断建立相关的业务软件系统,变革和改善企业信息化管理水平,创新企业管理。2. 从信息化项目立项、需求调研、方案论证、蓝图审定、原型系统建立、系统上线使用,持续改进的过程,是IT价值链增值的过程。同样在IT项目实施过程中,正是通过人员调研交流、培训、流程标准化、管理标准化、方案蓝图审定、系统建立的过程中,实现企业项目参与人员的人力资源提升,管理标准的提升,企业文化中也能更多融入创新、变革的基因。企业通过信息化项目的运作,实现IT价值增值,这是企业信息化的微观机理,同样也是IT部门价值的体现过程。(三)从信息流中创造价值资金流,物流,信息流是信息化企业运作的三大基础,信息流是作为其它两个流的中心。所有的企业运作都会产生信息流,其它两种流都可以产生价值,为什么不能让信息流发挥更大的价值?从信息流中创造价值,就是IT部门的主要职责之一。1. IT部门产生的价值不只是单纯在部门利益上,更要站在整个公司的高度上去看。IT部门可以作为独立的利润中心,核算好相关的成本和及所带来的利益预测,根据企业的战略规划,做好相关的工作。2. 信息安全防护上,让有数据权限的人可以使用相应的数据。数据权限之外的人员要禁止使用数据权限,因为数据安全是无价的。3. 实现业务数据共享主数据监控。要实现各类系统相关数据的整合,以保证数据的一致性和避免重复性。信息的共享,能有效减少部门之间的重复工作,能有效减少部门间的间接沟通成本,提高各部门的工作效率。同一个数据流,如果可以前后关联,可以很快发现问题而不是需要长时间的调查,互相猜疑。4. 大数据挖掘。作为前期系统数据采集的信息,是否可以从这些信息中创造价值。从过去一定长时间的数据中挖掘,可以进行相关的预测和价值判断。公司的生产改善,可以从过去的生产数据中,查找哪个环节的效率最低,根据数据再分析效率改善方案。5. 信息知识管理。IT部门有必要配合管理部门,规范信息知识收集,保存,使用,保证信息知识资产不会因为时间而消失。(四)让企业生长出数字化的神经系统企业是由各项职能与生产要素构成的一个有机的生命体,而IT部门通过信息化管理,将各项要素细节总成在一起,如同生命体中神经系统一样,将企业生命体的各项要素有机的联系起来,实现企业从决策到参与市场竞争的竞争力提升;企业核心竞争力是各项细节的总成,信息化扮演“总成”的职能。现在的市场环境已经不再是“以大吃小”,而是“以快吃慢”,所以企业信息化、数字化发展需求才会越来越多,就是为了尽快的“进化”出能够提供能迅速做出决策和反应的数字化神经系统。而IT部门的主要职责之一就是让企业生长出数字的化神经系统,比如推广物联网、大数据、云平台的应用。 IT管理的发展路线图(IT部门的增值路线图)
随着移动互联网的蓬勃发展,Web应用已经广泛深入各行各业。针对Web应用的攻击已成为企业面临的主要安全问题之一。面对日益增加的Web应用攻击,传统基于规则的安全产品难以实现对未知威胁的拦截,且随着规则的逐渐增加,将严重影响安全产品的性能。因此,研究多分类检测模型,实现模型对威胁数据的识别检测,并通过模型优化及真实环境数据进行对比验证。结果证明,基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。近年来,随着移动互联网的蓬勃发展,Web应用已经广泛深入各行各业,承载着各大公司的关键、核心业务。现阶段,Web应用已成为网络安全攻击的主要目标。为了应对威胁攻击,传统基于规则的安全防护产品起到了至关重要的作用。但是,随着Web应用及组件漏洞的逐渐增加和攻击方式的逐渐演进,传统基于规则的安全产品难以实现对众多已知及未知威胁的有效拦截。所以,研究、探索新一代检测技术已经成为各大安全公司及科研究机构的重点研究内容。本文主要基于机器学习对Web应用入侵检测技术进行研究,构建了多分类Web应用入侵威胁检测模型,包括基于随机森林的多分类检测模型、基于lightGBM的多分类检测模型及基于SVM的多分类检测模型,并通过实验对比了3种不同机器学习算法的多分类检测模型。结果证明,基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。一、国内外研究现状Web应用的飞速发展,极大地方便了人们的日常生活,已经成为互联网时代最重要的基础设施之一。Web应用在给人们带来巨大便利的同时,也伴随着不可忽视的安全风险。用户爆炸性增长,使得新威胁和攻击不断出现。大量网站遭受攻击、用户数据泄露,给企业与用户造成了严重影响。Web应用入侵安全问题已成为企业面临的重要问题。现有基于规则的Web应用入侵威胁检测、防护产品都存在误报率、漏报率高等问题,主要原因在于威胁在不断演进,但威胁规则更新不实时,无法抵抗0day漏洞攻击。Rieck等人提出了一种基于网页内容分析的启发式威胁检测方法,经过规则过滤后再对Web入侵的最终执行动作进行分析,通过一些异常指标进行威胁判定。Prakash等人利用带有相似性规则的启发式检测技术,构建了一个PhishNet系统,利用威胁数据及所体现出来的相似规则对异常URL进行检测。但是,该系统的性能依赖于威胁的数据量。当威胁数据量较大时,需要大量及专业的安全研究人员支持以构建相关规则。Le等人选择先将Web入侵的URL根据不同的部分进行切割,包括URL的域名、路径、参数等部分,并对每个部分进行选定特征的提取,如参数的长度及个数等。Ma等人提取对Web入侵的URL中的host等特征,以此进行Web应用入侵威胁检测。Kolari等人则采用词袋模型解决Web威胁入侵的检测问题。刘健等人通过训练多个机器学习模型,定义每个模型对Web入侵URL检测的层级关系,设置每个机器学习模型的判别阈值。如果上层机器学习模型对URL的检测结果超过所指定的判别阈值,则该URL被判定为异常URL,判断为威胁入侵。它利用将URL逐层传递到每层机器学习模型中检测的方式,以降低对Web入侵威胁检测结果的误报率。陈光英等人研究以系统调用序列和网络数据包作为检测对象,建立以支持向量机算法模型的入侵检测方法。综上所述,将机器学习应用于Web应用威胁检测,国内外均有大量的研究基础。可见,将机器学习技术融入安全防护产品是威胁检测发展的必然趋势。二、机器学习算法及特征工程1.机器学习算法随机森林随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。通过组合多个弱分类器,最终结果通过投票或取均值使得整体模型的结果具有较高的精确度和泛化性能。随机森林算法模型,如图1所示。图1 随机森林算法随机森林构建过程如下。(1)随机抽样,训练决策树。N个样本的样本集,有放回地抽取N次,每次抽取1个,形成一个有N个样本的样本集,用来训练一个决策树,作为决策树根节点处的样本。(2)选择节点分裂属性。当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,m应远小于M,然后从这m个属性中采用某种策略(如信息增益)来选择1个属性作为该节点的分裂属性。(3)重复步骤2,直到不能分裂。决策树形成过程中每个节点都要按照步骤2来分裂。如果下一次该节点选出来的属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,不再继续分裂。需要注意,每棵树都会完整成长而不会剪枝。(4)将生成的多棵分类数组成随机森林。如果是回归问题,则最后的输出是每个树输出的均值;如果是分类问题,则根据投票原则,确定最终的类别。LightGBMLightGBM(Light Gradient Boosting Machine)是微软开源的实现GBDT算法的框架,支持高效率的并行训练。梯度提决策升树(Gradient Boosting Decision Tree,GBDT)是一种基于迭代所构造的决策树算法,既可以做回归也可以做分类。它以分类回归树(Classification and Regression Trees,CART)模型作为弱学习器,将新学习器建立在之前学习器损失函数梯度下降的方向,通过不断迭代来训练模型。迭代过程中,每一轮预测值和实际值有残差,下一轮根据残差再进行预测,最后将所有预测相加作为最终结论。因此,GBDT可以表示为决策树的加法模型,如式(1)所示:式中,表示决策树,为决策树参数,M为树的个数。根据向前分步算法,第m步的模型可以表示为:设定为第i个样本的真实值,为第i个样本的预测值,取损失函数为平方损失,那么损失函数可以表示为:根据式(4)极小化损失函数可得到参数:通过多次迭代,更新回归树可以得到最终模型。LightGBM使用基于直方图的分割算法取代了传统的预排序遍历算法,不仅在训练速度和空间效率上均优于GBDT,还能有效防止过拟合,更加适用于训练海量高维数据。支持向量机支持向量机(Support Vector Machine,SVM)是在分类与回归中分析数据的机器学习算法。SVM通过寻找一个满足分类要求的最优分类超平面,将实例表示为空间中的点。最优超平面将实例明显地间隔分开,通过判断实例在超平面的哪一侧来预测所属类别。理论上,SVM可以实现对线性可分数据的最优分类。除了进行线性分类之外,SVM还可以使用核技巧将原空间的数据映射到高维特征空间,然后在高维特征空间进行线性分类模型训练,从而有效实现非线性分类。2.特征工程特征工程是指从原始数据中提取特征并将其转换为适合机器学习模型的格式,通常指的是从N个特征集合中选出M个特征的子集并满足条件。它包括特征处理和特征提取两个方面。特征处理指通过包括一组特征中去除冗余或不相关的特征来降维。特征提取广义上指的是一种变换,将处于高维空间的样本通过映射或变换的方式转换到低维空间,达到降维的目的。两者常联合使用,如先通过变换将高维特征空间映射到低维特征空间,后去除冗余和不相关的特征来进一步降低维数。特征处理训练机器学习模型的数据集由于数据量通常很大,会存在数据不全(缺失值)、数据重复(冗余数据)及数据错误(异常值)等问题(如收入-15元,或身高1 688 cm)。(1)缺失值可以采用局部数据的线性插值法进行补缺或使用一个全局常量或属性的平均值填充空缺值。如无法填充,则可考虑进行忽略。(2)冗余数据数据集中的冗余数据,可以采用对数据去重、删除冗余的方式。(3)异常值数据集中存在的错误数据,可以根据已有数据的规律及数据类型的特点进行修改,或者采用将错误数据移除数据集的方式。特征提取本文研究的主要特征即为文本特征。数据主要来源于Web,表示形式通常表现为URL形式。对于文本特征的处理国内外研究很多。罗燕等人针对词频-逆向文件频率(Term Frequency-Inverse Document Frequency,TF-IDF)提取特征效率低、准确性差的问题,提出了一种基于词频统计的关键词提取方法。实验结果表明,基于词频统计的关键词提取方法的精确率、召回率等指标方面均优于传统的TF-IDF算法,且能提高关键词提取的效率;庞剑锋等人利用向量空间模型对3种分类方法进行研究,提出了文本分类系统模型。本文对于特征提取方法采用TF-IDF模型,是一种用于信息检索与数据挖掘的常用加权技术。词频(Term Frequency,TF),某个词语在文件中(或单个语句中)出现的次数。这个数字通常会被归一化,一般是词频除以文章总词数,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。逆文本频率(Inverse Document Frequency,IDF)反映了一个词在所有文本(整个数据集)中出现的频率。如果一个词在很多文本中出现,那么它的IDF值应该低。反过来,如果一个词在比较少的文本中出现,那么它的IDF值应该高。常见的词如“是”“或”“好”等,IDF值应该低。如果一个词在所有的文本中都出现,那么它的IDF值为0。TF-IDF的计算方式如下。TF计算公式:式中,是在某一文本中词w出现的次数,N是该文本总词数。IDF计算公式:式中,Y是文档总数,是包含词条w的文档数.需要说明的是,分母加1是为了避免w未出现在任何文档中从而导致分母为0的情况。TF-IDF的是将TF和IDF相乘,即:从以上计算公式可以看出,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。三、威胁入侵检测模型构建Web应用入侵通常通过在URL上构建恶意文本的方式进行,因此本文根据Web应用入侵的文本特征构建了基于TF-IDF特征提取的随机森林、LightGBM及SVM多分类模型。通过优化并比较3个模型,结合生产环境及搜集的开源数据,对3个模型进行优化及验证。通过多分类评估指标进行评估,可得出各模型的分类效果。构造本研究中所提出的模型需要经历多个阶段的处理,包括数据集的收集及预处理、特征的提取和选定、机器学习模型的训练及模型的参数调优等。1.数据收集及特征工程数据集来源在本次研究工作中,采用多种渠道多种来源获取训练所需的数据。所收集的数据整体分为正常数据和异常数据。(1)正常数据集搜集通过网页爬虫,选定某几个网站,对网站进行访问,爬虫自动获取网站访问的URL链接,以此作为正常访问数据;搜集生产系统中通过WAF访问并标记为正常的日志,提取访问URL。(2)异常数据集搜集通过开源数据集进行搜集;搜集生产系统中通过WAF访问并标记为异常的日志,提取数据URL链接;基于开源软件生成。总体训练数据包含7种类型,分别为XSS、SQL注入、LFI、命令执行、目录遍历、RFI以及正常的流量样本数据,数量如表1所示。总体搜集数据量为286 951条。表1 训练数据类别及数量特征工程对搜集到的数据进行统一的格式化处理,以便能够进行特征工程。正常数据。爬虫获取的数据,为单个URL完整的连接,因此需要对URL进行处理。根据URL的组成结构,恶意payload不会存在于protocol协议部分、hostname主机地址以及port端口部分(或域名)。所以,对于URL数据,只需提取URL中的path及parameter部分即可。将提取的结果逐行存储为json格式,并将文件命名为normal,作为正常数据的标签。WAF访问日志需要分析日志格式,批量进行日志筛选,提取WAF标记为normal的日志数据,再将日志数据中GET请求的URL(包含parameter)进行切分处理并存储于normal文件。如果为POST请求,则分别提取URL和parameter中的数据,存储于normal文件。异常数据。开源数据集,根据数据集单条数据的标签对数据进行提取分类。不同标签数据类型存储于不同的文件,如sql.json。单条数据格式同样存储为json格式,以便模型提取训练。WAF访问日志筛选标记为攻击的数据,提取日志中attack字段,即为异常payload。同样,按照开源数据集的处理方式进行存储。开源软件生成,根据不同的开源软件类型生成的payload,按照异常数据类型进行存储。(1)数据预处理①异常值处理。删除训练集中所存在的空数据及其他异常数据。②数据变换。Web攻击通常会存在变换Payload大小写、添加空字符、URL html编码以及base64编码等操作,以试图绕过安全防护产品的检测。所以,为了使机器学习模型能够达到更好的识别能力,需要将搜集的训练集中的数据进行变换操作,包括将每一条数据中的内容统一转为小写字符、解析样本数据中的URL编码、对html转义字符进行处理以及将样本中出现的数字统一替换为0等。字符类型的标签数据转换为数值类型,如标签为[xss,sqli,os_command],转换后为[0,1,2]。以XSS为例,其他类型样本的处理流程一致,原始样本如下:d%3D375%22%3E%3Cscript%3Ealert%281337%29%3C/script%3E原始样本依次执行以下处理。(1)样本转小写处理:id%3d375%22%3e%3cscript%3ealert%281337%29%3c/script%3e(2)解析样本数据中的URL编码以及进行html转义字符处理:id=375">(3)将样本中出现的数字统一替换为0:id=0">(4)处理URL中的Schemes和地址等无效信息:示例样本无Scheme输出结果无变化(5)字符类型的标签数据转换为数值类型:本样本标签是XSS,将标签“XSS”编码为0,作为模型训练的标签。经过数据预处理后的样本变为以下形式,如表2所示。表2 特征变换结果③数据去重。经过异常值处理及数据变换后,存在部分冗余数据,如上一步示例中的处理结果。因此,需要对整个数据集数据进行去重处理。(2)特征提取本文研究的内容为文本数据特征提取,包含样本分词、分词后的ngram处理及tfidf转换。①样本分词。将样本数据以‘char’的粒度进行分词处理,如?id=0&age=0分词后为?,i,d,=,0,&,a,g,e,=,0。②Ngram处理。将分过词的样本进行ngram处理。ngram中n的取值范围是(1,2),n为1表示每条样本中分好的词不考虑前后组合,转换后?,i,d,=,0,&,a,g,e,=,0的形式保持不变。n为2表示样本中分好的词进行前后相邻的两两组合,如i,d,=,0,&,a,g,e,=,0,处理后为id,d=,=0,0&,&a,ag,ge,e=,=0。ngram和分词的方法已封装在sklearn库中。③tfidf转换。tfidf用于将非结构化的数据转换成结构化的数值矩阵。样本数据经过分词、ngram处理后进行去重,得到一个不重复的词集,在不限制特征数量的情况下,将词集中每个词作为一个特征形成一个词向量空间。每篇文档都会转化成一个向量,向量的维度等于词集中词的数量。假如有10 000个文档,处理后有2 000个不重复的词。这些文档将会转换成一个10 000×2 000的数值矩阵。矩阵中任意的第m行、第n列的取值表示n所对应的词在m对应的文本中的tfidf值。tfidf已封装在sklearn库中。同样以XSS为例,经过数据预处理后为:id=0">以char为单位的分词:i,d,=,0,",>,<,s,c,r,i,p,t,>,a,l,e,r,t,(,0,),<,>ngram处理,组合方式是单个字符自成一组,以及进行两个相邻字符的两两组合:i,d,=,0,",>,<,s,c,r,p,t,a,l,e,(,), d=",=0,0","">,><,,>a,al,le,er,rt,t(,(0,0),)<,tfidf处理,将文本数据转换成数值矩阵,行表示样本数,每一列表示一个词,所有样本中有多少个不重复的词,矩阵就有多少列,并通过tfidf的取值反映出每个词在文档中的权重。示例中只有1个样本,样本包含42个不同的词,所以输出是一个1×42的矩阵。经过特征工程后,可以利用算法进行模型训练,特征是一个1×42的矩阵,如表3所示。表3 tfidf结果其他类型数据的处理步骤和XSS样本处理一致,只是不同的种类样本,标签对应不同的值,所有类型样本的特征的维度是固定的。比如,设定1 000维,样本条数为n,那么特征就是一个n×1 000的数值矩阵,标签就是一个n×1的矩阵。2.多分类模型构建训练环境说明模型构建编程语言为Python,版本为python3.6。训练模型用到的Python主要工具库以及功能描述如下。re:Python正则表达式模块,用于数据预处理阶段,结合其他工具对数据进行处理;URLlib:用于前期的数据预处理,对URL数据进行解析;pandas:数据分析工具,用于数据读取、数据处理和分析;sklearn:机器学习工具,用于特征工程、训练随机森林及SVM模型以及模型评估;lightgbm:用于训练LightGBM模型。模型训练分别基于sklearn及lightgbm库构建随机森林、LightGBM及SVM多分类模型。如图2所示。训练时,将特征和标签输入到算法进行训练,训练后得到模型。图2 多分类模型训练预测时,输入新样本的特征到模型,模型预测出新样本的标签。模型评估将原数据分为训练集和测试集。训练集训练模型,并根据测试集的特征做预测,将预测结果与测试集本身的标签进行对比。本文研究的模型为多分类模型。模型评估基于多分类模型的评估准则。评估指标是精确率、召回率和F值,这些数值在测试集上越高表示模型性能越好。以上评估方法已封装在sklearn库中。四、实验及模型对比1.实验数据准备实验使用数据286 951条,类型分别为XSS、SQL注入、LFI、命令执行、目录遍历、RFI以及正常的流量样本数据。数据分布如图3所示。图3 实验数据分布训练数据存储在csv文件中,每个csv文件代表一种类型的数据,文件中每一行代表一个样本。按照8:2比例划分为训练集和测试集。2.模型对比分析随机森林通过训练及优化随机森林模型参数,当设置n_estimators参数为300,criterion设置为gini时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据为测试集,80%数据为训练集,重复执行多次得到随机森林的实验结果如表4所示。表4 随机森林多分类结果观察多次实验结果,得到平均精确率为99.5%,平均召回率为99.2%,平均F1值为99.3%。从实验结果来看,多次实验结果相近,证明随机森林多分类效果稳定,同时分类结果各评估值均能达到理想的结果。LightGBM通过训练及优化LightGBM模型参数,当设置n_estimators参数为533、random_state设置为7时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据作为测试集,80%数据作为训练集,重复执行多次得到LightGBM的实验结果,如表5所示。表5 LightGBM多分类结果观察多次实验结果,得到平均精确率为99.4%,平均召回率为99.2%,平均F1值为99.3%。从实验结果来看,多次测试结果指标稳定,分类准确率较高。SVM通过训练及优化SVM模型参数,设定kernel参数为rbf、gamma设置为scale时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据作为测试集,80%数据作为训练集,重复执行多次得到SVM模型的实验结果,如表6所示。表6 SVM多分类结果观察多次实验结果,得到平均精确率为99.1%,平均召回率为99.1%,平均F1值为99.1%。综合对比分析综合结果可以分析出,在使用相同样本进行训练的情况下,基于随机森林算法和LightGBM算法的多分类模型,效果较SVM多分类模型更好。随机森林分类模型在分类评估指标上同LightGBM分类模型指标接近,证明其分类效果相近。SVM由于径向基核函数,理论上会拟合任何数据分布,但是会不断给数据升维,增加特征数量,导致SVM训练效率非常低。同时,实验中发现,SVM模型的分类效率明显低于随机森林分类模型和LightGBM分类模型。五、结 语本文研究了基于机器学习模型在Web应用入侵检测的可行性,并通过实验验证了基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。综上所述,将机器学习用于信息安全领域,在理论与实践中具有巨大意义。但是,由于机器学习模型检测效率较传统规则检测效率低,本文研究成果目前仅能与已有的安全防护软件进行融合(如WAF)进行离线威胁检测,通过检测结果补充已有的安全规则,提升安全产品的防护能力。所以,研究如何提升机器学习模型的威胁识别效率,实现模型的实时检测能力,替换传统的规则检测方式,将会是本文后续的研究工作。
随着物联网(Internet of Things,IoT)和第六代无线移动网络(6G)的发展,连接到网络的智能终端数量急剧增加。智能终端的实时应用导致边缘计算技术飞速发展。边缘计算靠近终端设备,可以快速完成任务。然而,由于多维网络资源和异构网络设备的共存,难以满足终端设备对超低等待时间、高可靠性和低功耗服务的需求。基于Cybertwin的边缘计算体系结构以分布式方式分配计算、通信和缓存资源,与边缘云、核心云和终端设备协作提供高效的计算服务。为了确保系统的安全性、可靠性和高效性,本文提出了一种基于Cybertwin和区块链相结合的架构,用于调度和管理云服务资源。首先,Cybertwin在边缘云上收集终端设备的状态信息。对于收集到的终端设备状态信息,在边缘主导系统下建立多维资源管理模型,从而描述针对不同类型任务的不同处理方法,以优化系统性能。其次,建立基于区块链和Cybertwin技术协作的多维资源管理架构,以确保系统的可靠性和安全性。最后,建立不同任务处理方式的成本模型和效率模型,以评估多维资源管理系统的效率。一、资源调度模型在Cybertwin网络合作计算任务的场景中,主要包含核心云、边缘云(Edge Cloud,EC)、Cybertwin和终端设备4个组件。Cybertwin网络智能代理在边缘云和核心云的协同中最终将服务交付给终端。所有边缘云表示的集合为,边缘云,可用频谱、计算和缓存资源表示为。终端设备的集合表示为。每个终端设备在一个时隙中生成的计算密集型任务表示为,其中分别表示数据大小、计算资源和可以容忍的最大延迟。对于每个终端设备的计算密集型任务,既可以在本地设备上执行,也可以卸载到边缘云执行,或者通过边缘云卸载到相邻的边缘云及更远的核心云。因此,选择合适的任务卸载策略对系统效率具有重要影响。现有工作很少在终端计算任务中区分延迟敏感任务和延迟容忍任务,而这种混合传输策略会导致无线资源的过度消耗和服务质量的严重下降。因此,本文设计了一个分层的任务处理和多维资源分配策略,对时延敏感的任务作边缘协作计算处理,包括本地执行、卸载到边缘云以及卸载到相邻边缘云执行几种方式。此外,本文对延迟容忍的任务提出了一种混合的替代计算处理方法,包括分流到核心云和分流到其他设备(Device-to-Device,D2D)两种方式。1.通信模型(1)终端设备到边缘云侧如果将任务卸载到边缘云,则可用带宽为,且是上行链路信道的总数,是上行链路信道的集合,每个子信道的带宽是,则上行链路传输速率可表示为:式中,代表将任务卸载到边缘云时终端设备的传输功率;代表信道增益;代表附近终端设备对信道中终端设备的干扰。表示终端设备和边缘云之间的通信分配了子信道给终端用户,否则。因此,上行传输速率为:(2)边缘云到边缘云如果边缘云将终端设备的任务卸载到相邻边缘云中以供执行,则总可用带宽为,是上行链路信道的总数,且是上行链路信道的集合。每个子信道的带宽为,则上行传输速率可表示为:式中,代表从边缘云转移到相邻边缘云的终端设备任务的传输功率;代表信道增益;代表从边缘云到相邻边缘云对信道的干扰。表示将信道分配给终端用户以进行边缘云和相邻边缘云之间的通信,否则,。因此,上行传输速率为:(3)D2D通信设备之间的无线通信数据传输速率与设备的传输功率、信道干扰和带宽有关。表示与终端设备建立通信连接的设备集合。总可用带宽为,其中为上行通道总数,是上行通道的集合,每个子通道的带宽是。因此,上行传输速率为:式中,表示发射功率;当终端设备i将任务卸载给终端设备j时,表示信道增益;表示附近终端设备对信道n内终端设备i的干扰。表示终端设备i与终端设备j通信时子信道n被分配给终端用户,否则。因此,上行传输速率为:2.计算模型(1)本地执行任务设备的执行时间为:执行任务的能耗为:2.将任务卸载到边缘云边缘云任务执行延迟可以表示为:能耗可表示为:3.将任务卸载到邻近的边缘云任务执行延迟可以表示为:能耗可表示为:4.将任务卸载到云服务器进行处理云服务器任务执行延迟为:能耗可表示为:5.将任务卸载到其他设备(D2D)总任务执行延迟可以表示为:能耗可表示为:二、基于区块链的资源管理1.区块链结构及特性区块链常见模型结构如图1所示,各层相互配合实现去中心化信任机制,保证了数据传输的安全性。图1 区块链模型结构不可篡改性。由于区块链的链式结构,某个区块中的交易被篡改,会导致根哈希发生变化而影响后续所有区块产生改变,因此篡改一个区块的数据需要篡改后续所有区块。去中心化性。区块链中节点在信息传输时先进行身份验证,成功后会把接收到的信息共享在整个系统。每个节点可以阶段性成为中心,但共识算法保证了少数节点难以控制整个系统,每个网络节点的权利义务都是对等的。可追溯性。区块链中的交易完成后,各种交易信息会加入时间戳形成一个新的区块加进链中,因此所有的交易都可以通过区块链账本查询,随时准备查看和验证,保证了信息传输安全。智能合约性。智能合约是一种数字形式的承诺,在区块链中合约内容公开且不可更改,被各个节点共同维护,可以永久运行,保证了不在第三方的公证参与下自动强制执行合约,强化了节点间的互信机制。2.结合区块链和Cybertwin技术进行资源管理在边缘计算场景下,边缘服务器的安全措施比传统云服务器薄弱,易受到网络中恶意节点的攻击。如果边缘服务器被恶意节点操纵,将影响该区域终端的计算任务,导致完成的计算任务结果不可信。该场景下迫切需要区块链技术来保证终端计算任务的可信完成并正确返回给终端用户。因此,本文建立了边缘计算场景下结合区块链和Cybertwin的资源管理模型。结合区块链和Cybertwin的资源管理系统如图2所示。图2 基于区块链和Cybertwin的资源管理系统当终端设备生成一个计算密集型任务直到结果返回到终端设备时,过程如下:(1)终端设备生成一个计算密集型任务,并将该任务及其任务类型发送给边缘服务器;(2)边缘服务器的Cybertwin根据其计算任务的类型和业务网络资源选择任务的处理策略;(3)边缘服务器将策略和计算任务封装到事务中,并将其发送到区块链网络;(4)在区块链网络达成共识后,包含计算任务和相应策略的事务将写入区块链分类帐;(5)云服务器或边缘云服务器对应计算策略,完成计算任务。基于此架构的资源管理系统,每个计算任务的执行器和策略都将通过区块链分类帐记录下来。根据计算任务的正确率,可以进一步评估每个边缘云的可信度。它可以用来判断边缘云是否被攻击。如果边缘云的信用值低于阈值,则视为无效服务器,将其移出区块链网络。3.系统效率(1)时间成本根据讨论,设备总执行时间可表示为:(2)能 耗根据第1部分的讨论,设备总能耗可表示为:(3)区块生成成本根据区块链的原理,区块链的时间成本可表示为:(4)总成本根据讨论,设备总成本可表示为:为了提高边缘计算主导的Cybertwin网络的性能,需要处理尽可能多的任务,同时降低系统的处理成本。用任务处理成本和完成的任务数两个因素来构建系统的整体处理效率,可表示为:最后,结合不同的任务处理方法和多维资源约束,以使系统整体处理效率最大化为目标对该系统进行仿真。系统性能对比如图3所示。图3 系统性能比较三、结 语文章把计算密集的任务分为延迟敏感和延迟容忍两种,并提出了不同的卸载策略来优化系统性能,同时设计了一种基于区块链的多维资源调度和管理体系结构,以保证其计算任务更可靠地完成。仿真结果表明,该系统在保证可靠计算的同时,提高了系统效率。
我们在设计自己的系统或平台时,就要考虑如何更加合理的设计异常,接下来我们就一起来看异常的设计。一、异常概述在程序中,异常就是程序在运行时期发生的问题,在理想的程序环境中,程序永远不会出现问题,用户的输入永远都是符合要求,逻辑没有任何问题,要打开的文件一定存在,类型转换一定是对的,内存一直是够用的.....总之没有任何问题,但是一旦出现这些描述的反面情况,如果不进行合理的处理,系统就不能正常运行,系统就无法提供正常的服务给用户。要处理异常就要直到异常是如何发生的,就必须要知道异常的发生原因,要知道异常发生的原因就必须知道异常发生的场景。在系统中,模块和模块之间的交互都可能发生异常,以JAVA为例,在程序中都是利用Method和其他模块进行交互,那么异常的产生、抛出、声明和处理都在Method中,如下图就是java程序,模块和模块之间的交互逻辑。如图所示,你写的方法和外部实体交互大概可以分为五类:1.和资源(Resource)交互,见图⑤处。这里资源的范围很广,比如进程外部的数据库,文件,SOA服务,其他各种中间件;进程内的类,方法,线程……都算是资源。2.给进程内的其他方法(User Method)提供服务,见图②处。3.依赖进程内的其他方法(Server Method),见图③处。包括Java平台提供的方法和其他第三方供应方提供的方法。4.和系统环境交互,见图⑧处。系统环境可能是直接环境——JVM,也可能是间接环境——操作系统或硬件等。5.给外部实体提供服务,见图①处。这种外部实体一般会通过容器(或其他类似的机制)和你的方法进行交互。Java方法和每一类实体进行交互时,都可能发生异常。当和资源交互时,常常会因为资源不可用而发生异常,比如发生找不到文件、数据库连接错误、找不到类、找不到方法……等等状况。有可能是直接产生的,见图⑤处;有可能是间接产生的,比如图⑥处发生异常,Server Method把异常抛给Your Method,图③处就间接发生了异常。一般来说,你写的方法间接发生这类异常的可能性比直接发生要大得多,因为直接产生这类异常的方法在Java平台中已经提供了。异常一般具有如下特点:(1)问题产生于外部依赖,自身逻辑和流程没有问题。(2)此类问题通常是暂时的,服务端及时处理可以消除,用户可以再次使用系统服务或采取替补方案。(3)并不影响整体流程运行。当给Client端的方法(User Method )提供服务时,用户可能会传入一些不合法的数据(或者其他不恰当的使用方法),进而影响正常流程运行。你的方法应该检查每一个输入数据,如果发现不合法的数据,马上阻止执行流程,并通知用户方法。当调用服务方法(Server Method )时,有可能会发生两类异常。一类是你的使用方法不正确,导致服务中止;一类是服务方法出了异常,然后传递给你的方法。如果是第一种异常,你应该检查并修改你的方法逻辑,消除BUG。对于第二类异常,你要么写一个处理器处理,要么继续传递给上层方法。当和系统环境交互时,有可能因为JVM参数设置不当,有可能因为程序产生了大量不必要的对象,也有可能因为硬故障(操作系统或硬件出了问题),导致整个程序不可用。当这类异常发生时,最终用户没法选择其他替代方案,操作到一半的数据会全部丢失。你的方法对这类异常一般没什么办法,既不能通过修改主流程逻辑来消除,也不能通过增加异常处理器来处理。所以通常你的方法对这类异常不需要做任何处理。但是你必须检查进程内的所有程序和系统环境是否正常,然后协调各方,修改BUG或恢复环境。Java的异常都是发生在方法内,所以研究Java异常,要以你设计的方法为中心。我们以“你的方法 ”为中心,总结一下处理办法:当服务方法告诉“你的方法 ”的主流程逻辑有问题时,就要及时修复BUG来消除异常;当用户方法非法使用“你的方法”时,应该直接中止主流程,并通知用户方法,强迫用户方法使用正确的方式,防止问题蔓延;当服务方法传递一个异常给“你的方法”时,你要判断“你的方法”是否合适处理这个异常,如果不合适,传递给上层方法,如果合适,写一个异常处理器处理这个异常。当系统环境出了问题,“你的方法”什么也做不了。以上所述,异常有三类:(1)检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。(2)运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。(3)错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。刚才以“你的方法”为中心,总结了在“你的方法”内部的处理办法。现在以“你”为中心,总结一下方法外部的处理方法:当资源不可用的时候,你应该协调各方,恢复资源;当发生系统故障时,你应该协调各方,恢复系统。综上,已经基本分析清楚了异常发生的原因,以及相应的应对方法。二、异常的好处上面已经很清楚的阐述了什么异常,并且知道怎么使用异常,那么在程序中使用异常具体有那些好处呢?1.好处一隔离错误处理代码和常规代码 Exception提供了一种方法,把意外发生时的细节从程序主逻辑中隔离开来。在传统的编程中,错误的检测、报告和处理通常会导致像意大利面条那么混乱的代码。下面通过一组伪代码来讲解。读取文件正常流程是很简单的,但是真实的运行过程中,有很多异常情况需要考虑:(1)当文件无法打开,应该如何处理?(2)当无法获取文件的大小,应该如何处理?(3)当服务器内存不足,应该如何处理?(4)当读取失败,应该如何处理?(5)当文件无法关闭,应该如何处理?为了处理这么多异常情况,我们的做法有两种方式,方式一通过错误码来表示每一个异常发生的状态,方式二是通过异常来表示。为了保证流程正常进行,读取文件需要检测错误、返回状态,原本很简单的代码,通过各种if/else判断处理,代码变得很繁琐,代码的可读性变得很糟糕,如果通过第二种方式二,异常代替错误码来处理正常流程,我们看看会发生什么情况?示例如下从上面的伪代码可以看出,异常并没有忽略或者代替你做readFile过程中异常情况处理,而是通过异常处理让你的关注点更多的放在核心逻辑的处理,并且提高了代码的可读性。2.好处二在调用栈中向上传播错误Exception的第二个优势就是,传播错误报告方法调用堆栈的能力。比如在一个应用流程中,readFile方法是最终被最上层得调用间接依赖,如:method1调用了method2,method2调用了method3,method3调用了readFile方法,因为readFile有很多异常情况需要处理,但是按照调用层次来看,method1是最终需要处理readFile异常错误码的方法,实现方法也有两种,方式一:逐层放回错误码,直到method1接受到错误码;方式二:通过逐层抛出异常,method1处理异常,其他层只关心上抛。上面的伪代码可以看出,最终只有method1 关心 readFile 所产生的错误,方式一将强制要求每个方法都关心并返回。如果有一种方式只让关心作物的方法才关心错误检测,中间环节只需要抛出异常是不是会好很多呢?方式二:就是通过调用堆栈向后搜索找到任何有兴趣处理特定异常的方法中间环节不需要关注异常的发生,只有关心异常的方法才会捕获异常进行相应的处理。3.好处三分组和区分错误类型因为程序中抛出的所有异常都是对象,所以异常的分组或分类是类层次结构的自然结果。Java 平台中的一组相关异常类的一个例子是在 java.io- 及其 IOException 后代中定义的异常类。IOException 是最通用的,表示执行 I / O 时可能发生的任何类型的错误。其后代代表更具体的错误。例如 FileNotFoundException 意味着文件不在磁盘上未找到一种方法可以编写可以处理非常特定异常的特定处理程序。FileNotFoundException 类有没有后代, 所以下面处理器只能处理一种类型的异常。一个方法也可以用更通用的处理器捕获处理具体的异常。例如,为了捕获所有的I/O异常,不管具体的类型是什么,只要给异常处理器指定一个IOException参数就行。这个处理器可以捕获所有的I/O异常,包括FileNotFoundException,EOFException等等。你可以通过查询传给异常处理器的参数,发现错误发生的细节。例如,用下面的代码打印堆栈跟踪信息:在大多数情况下,你希望异常处理器越具体越好。理由是在你决定最佳的恢复策略之前,你首先要知道错误的类型。事实上,如果不捕获具体的错误,这个处理器就必须要容纳任何可能性。太通用的异常处理器可能会让代码更容易出错,因为它们会捕获和处理程序员意料之外的异常,这样就超出处理器的能力范围了。三、J2EE核心语言中的异常Java把异常当做是破坏正常流程的一个事件,当事件发生后,就会触发处理机制。Java有一套独立的异常处理机制,在遇到异常时,方法并不返回任何值(返回值属于正常流程),而是抛出一个封装了错误信息的对象。下图是Java异常处理机制类层级结构图:在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。Throwable:有两个重要的子类:*Exception(异常)和 Error(错误)*,二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。Exception(异常):是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。通常,Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)。运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。JVM字节码分析异常处理机制 Java异常处理的一般性建议1.try-catch-finally 规则(1)必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。 (2)必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。 (3)catch 块与相应的异常类的类型相关。 (4)一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块 (5)可嵌套 try-catch-finally 结构。(6)在 try-catch-finally 结构中,可重新抛出异常。 (7)除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。2.Throws抛出异常的规则如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。 必须声明方法可抛出的任何可查异常(checked exception)。即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误 仅当抛出了异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣。 调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。四、异常处理和设计下面介绍异常处理和设计注意的一些点:1.使用异常,而不使用返回码关于这一点,在上面『异常的好处』有解释。理解了这一点,程序员们才会想要使用Java异常处理机制。2.利用运行时异常设定方法使用规则很常见的例子就是,某个方法的参数不能为空。在实践中,很多程序员的处理方式是,当传入的这个参数为空的时候,就返回一个特殊值(最常见的就是返回一个null,让用户方法决定怎么办)。还有的处理方式是,自己给一个默认值去兼容这种不合法参数,自己决定怎么办。这两种实践都是不好的。对于第一种处理方式,返回值是用来处理正常流程的,如果用来处理异常流程,就会让用户方法的正常流程变复杂。一次调用可能不明显,当有多个连续调用就会变得很复杂了。对于第二种处理方式,看起来很强大,因为“容错”能力看起来很强,有些程序员甚至可能会为此沾沾自喜。但是它也一样让正常流程变复杂了,这不是最糟糕的,最糟糕的是,你不知道下一次用户会出什么鬼点子,传个你现有处理代码处理不了的东西进来。这样你又得加代码,继续变复杂……BUG就是这样产生的。好的实践方式就是,设定方法的使用规则,遇到不合法的使用方式时,立刻抛出一个运行时异常。这样既不会让主流程代码变复杂,也不会制造不必要的BUG。为什么是运行时异常而不是检查异常呢?这是为了强迫用户修改代码或者改正使用方式——这属于用户的使用错误。3.消除运行时异常当你的程序发生运行时异常,通常都是因为你使用别人的方法的方式不正确(如果设计这个异常的人设计错误,就另当别论。比如设计者捕获一个检查异常,然后在处理器抛出一个运行时异常给用户。如果遇上这样的供应商,还是弃用吧)。所以,一般都是采取修改代码的方式,而不是新增一个异常流程。4.正确处理检查异常处理检查异常的时候,处理器一定要做到下面的要求才算合格:(1)返回到一种安全状态,并能够让用户执行一些其他的命令;(2)允许用户保存所有操作的结果,并以适当的方式终止程序。不好的实践案例一:因为有的异常发生的概率很小,有些程序员就会写出下面的代码:public Image loadImage(String s) { try { code... } catch (Exception e) {} code2...}catch代码块里面什么都不写!或者只在里面打一个log。这样既不会传递到上层方法,又不会报编译错误,还不用动脑筋……不好的实践案例二:捕获一个检查异常,什么都不做(或只打一个log),然后抛出一个运行时异常:public Image loadImage(String s) { try { code... } catch (Exception e){ throw new RuntimeExcepiton(); }}这样也不会让上层方法感觉到这个异常的存在,也不会报编译错误了,也不用动什么脑筋……在案例一中,一旦出现了异常,try代码块里的代码没执行完,用户要求做的事情没做完,却又没有任何反馈或者得到一个错误反馈。在案例二中,一旦出现了异常,try代码块里的代码没执行完,虽然把运行时异常抛给用户了,用户也不会去处理这个异常,又没有办法通过改变使用方式消除异常,直接让用户代码崩溃掉。对于检查异常,好的实践方式是:(1)让可以处理这个异常的方法去处理。衡量的标准就是在你这个方法写一个处理器,这个处理器能不能做到本节开头的那两个要求,如果不能,就往上抛。如果你不能知道所有用户的所有需求,你通常就做不到那两个要求。(2)有必要的时候可以通过链式异常包装一下,再抛出。(3)最终的处理器一定要做到本节开头的那两个要求。5.使主流程代码保持整洁一个try代码块后面可以跟多个catch代码块,这就让一些可能会发生不同异常的代码可以写在一块,让代码看起来很清晰。相反,在一个方法里写多个try-catch,或者写嵌套的try-catch,就会让主流程代码变得很混乱。6.使用try-with-resourcestry-with-resources语句比起普通的try语句,干净整洁的多。而且最终抛出的异常是正常流程中抛出的异常。7.尽量处理最具体的异常尽量使用最具体的异常类作为处理器匹配的类型。这样处理器就不用兼顾很多种情形,不易出错。从Java7开始,一个处理器可以处理多种异常类型。注意:同一个try语句中,比较具体的异常的catch代码块应写在前面,比较通用的异常的catch代码块应写在后面。8.设计自己的异常类型要遵循的原则当你是一个模块开发者,你就很有必要设计一组或多组自己的异常类型。一般情况下,要遵守如下原则:(1)确定什么场景下,需要创建自己的异常类型。(2)为你的接口方法的使用规则创建一组运行时异常。(3)封装别人的检查异常的时候,一定也要用检查异常。这样异常才能传递给上层方法处理。(4)设计一组有层次结构的异常,而不是设计一堆零零散散的异常。(5)区分清楚异常发生的原因,然后决定你的异常是检查异常还是运行时异常。(6)模块内部不需要处理自己定义的异常。五、总结Java异常处理机制的目的至少有三个:一是归类处理不同的异常,二是提供足够的信息方便调试,三是让主流程代码保持整洁。最后贴一张异常梳理的脑图
复用是架构思维中非常重要的思维之一,是面向对象架构设计的核心思想,业务能力组件化,组件能力服务化,共享平台,中台建设,公共服务下沉等都是为了提高系统的复用而设计。好的系统设计具备可扩展性(Extensibility)、灵活性(Flexibility)和可插入性(Pluggability),一个复用较好的系统,就是一个易维护的系统。但实际上,可维护性和可复用性是两个纬度。一、可维护性可维护性指系统的被修改能力和可修复能力,修改能力指改进、系统环境、需求、系统容量等变化的适应;可修复能力指系统发生故障后,能够排除(或抑制)故障予以修复,并能按照原有设计流程正常运行状态的可能性。可维护性架构有如下特征:(1)易分析性系统发生故障或缺陷时,能很快定位或分析出原因。(2)易改变性面对新需求系统拥有快速被实现的能力,实现体现在代码实现、设计实现和说明文档的更新。(3)易测试性系统新的变更可以被验证的能力。(4)稳定性兼容新的变更不影响原有系统的运行的能力。(5)依从性架构设计遵循和保持相关约定的能力。对于系统可维护性的度量可以从以下几个方面进行判断:a.可理解性。指通过分析源码和解读相关设计文档来了解系统架构、功能和运行逻辑的难易程度。一个可理解性高的系统一般应具备以下的特征:模块化(系统各个模块结构良好、功能完整),程序代码清晰,编程风格具有一致性(代码风格及设计风格的一致性),完整性(对输人数据进行完整性检查),使用有意义的数据名和函数名等。b.可靠性。可靠性表明一个系统在给定的一段时间内正确执行的概率。衡量可靠性的方法主要有两类:第一类是根据程序错误的统计数字来进行可靠性预测。比如用一些可靠性模型,根据程序测试中发现并排除的错误数来预测平均失效间隔时间(Mean Time To Failure,MTTF)。第二类是当系统的可靠性与复杂性有关时,可以根据程序的复杂性来预测软件的可靠性。c.可测试性。可测试性表明能够用测试的方法来验证程序正确性的难易程度。系统的可测试性取决于系统的可理解性、复杂性、设计合理的测试用例的难易程度等方面的内容。d.可修改性。可修改性描述了程序能够被正确修改的难易程度。一个可修改的程序应当是可理解的、通用的、简单的、灵活的。通用性是指程序适用于各种功能变化而无需修改。灵活性是指能够容易地对程序进行修改。e.可移植性。可移植性表明程序从一个运行环境移植到另一个新的运行环境的可能性的大小。一个可移植性好的系统应具有结构良好、灵活、不依赖于某一具体计算机或操作系统的特性。系统的可维护性不但和架构师采用的分析设计方法和技术熟练程度有关,还和项目管理技术有密切的联系,除了和设计开发方法有关的因素之外,还有一些因素影响系统的可维护性的原因:f.开发人员是否有统一的约束规范g.从需求——业务分析——架构设计——编码实现——测试发布——线上运营是否采用了统一的文档结构和文档形成机制。h.是否应用了可维护性的语音和框架i.是否有完整的代码说明文档j.是否有持续更新保存规范化的测试用例信息二、可复用性复用性是面向对象技术最重要的特征之一,但是事与愿违复用性的好处,我们在架构设计时并不能真正实现,因为复用需要付出一定的代价,并不像我们使用面向对象开发工具一样,很容易利用起复用性特性完成相关工作。相反,为了打到系统的复用性,我们需要取舍一些设计。另外好多设计者对于复用的范围很有局限,常常会考虑代码的复用而忽略了其他更高层次的复用,当然代码的复用是最基本的,代码的复用有自身的好处,但是为了让我们的系统复用,希望设计者能从更高的层次来看待复用。1。复用性的好处有较高的生产效率。有较高的系统质量。恰当运用复用可以改善系统的可维护性。2。复用分类我们可以将系统复用分为代码复用、算法的复用、数据结构的复用、测试信息的复用、设计的复用、分析的复用,接下来我们就详细讲解如何做这些复用。(1)代码复用代码复用是最常见的复用,包括目标代码和源代码的复用,指的是在同一个应用的多个模块中,或者是在多个应用下代码的复用。理想状况下,代码复用可以共享通用类、函数集合来实现;即便是在最差的情况下,代码复用也可以通过拷贝和修改源代码来实现。代码复用的一个关键因素是你要能够获取到代码。如果必要的话,你自己可以修改这段代码,当然也可以找别人帮你修改。这一点好坏并存,通过审读代码,你可以自己决定—— 哪怕这个决定很难做出—— 你是否要复用这段代码。同时,把代码开放给你,那么代码原作者也许会失去撰写说明文档的动力,这也就增加了你理解它所花费的时间,减小了你可能获得的收益。代码复用的最大好处在于它可以减少你的代码量,也就潜在地减小了开放和维护成本。坏处则在于你自己应用的能力范围就被约束住了,而且也增加了应用和被复用代码之间的耦合。要大规模地实现源程序的复用,只有依靠含有大量可复用构件的构件库,如“对象链接与嵌入”技术,既支持在源程序级上定义构件以构造新的系统,又使这些构件在目标代码级上仍然是一些独立的可复用构件,能够在运行时被灵活地重新组合为各种应用系统。代码复用是最基础最基本的复用,那我们就来看看做到代码复用应该注意哪些内容:a.面向接口编程"面向接口编程"是面向对象设计(OOD)的第一个基本原则。面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,通过更改配置文件(例如Spring框架)中该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。b.使用对象组合而不是继承"优先使用组合而不是继承"是面向对象设计(OOD)的第二个基本原则。继承是在程序开发的过程中重构得到的,而不是程序设计之初就使用继承,很多开发者滥用继承,结果可能造成后期的代码解决不了需求的变化。因此,优先使用组合而不是继承,是面向对象开发的一个重要经验。继承:继承的起源,来自于多个类中相同特征和行为的抽象。子类可以通过继承父类,那么可以调用父类中定义的方法和属性,从而达到代码重用的目的。另外,子类除了重用父类的代码以外,还可以扩展自身的属性和方法,来描述子类特有的特征和行为。对象组合:对象组合要求被组合的对象具有良好的接口,并且通过从其他对象得到的引用在运行时运态定义。对象组合是类继承之外的另一种复用选择,可以将对象组合到其他对象中,以构建更加复杂的功能。由于对象的内部细节对其他对象不可见,它们看上去为“黑箱”,这种类型的复用称为黑箱复用(black-box reuse)。对象只以"黑箱"的形式出现。下面分析继承和组合的优缺点:(a)继承的优缺点优点: 继承简单粗爆,直观,关系在编译时静态定义。被复用的实现易于修改,sub可以覆盖super的实现。缺点:无法在运行时变更从super继承来的实现(也不一定是缺点)sub的部分实现通常定义在super中。sub直接面对super的实现细节,因此破坏了封装。super实现的任何变更都会强制子类也进行变更,因为它们的实现联系在了一起。如果在新的问题场景下继承来的实现已过时或不适用,所以必须重写super或继承来的实现。由于在类继承中,实现的依存关系,对子类进行复用可能会有问题。有一个解决办法是,只从协议或抽象基类继承(子类型化),国为它们只对很少的实现,而协议则没有实现。(b)组合的优缺点优点:不会破坏封装,因为只通过接口来访问对象;减少实现的依存关系,因为实面是通过接口来定义的;可以在运行时将任意对象替换为其他同类型的对象;可以保持类的封装以专注于单一任务;类和他的层次结构能保持简洁,不至于过度膨胀而无法管理;缺点:涉及对象多;系统的行为将依赖于不同对象间的关系,而不是定义于单个类中;现成的组件总是不太够用,从而导致我们要不停的定义新对象。c.将可变的部分和不可变的部分分离"将可变的部分和不可变的部分分离"是面向对象设计(OOD)的第三个基本原则。如果使用继承的复用技术,我们可以在抽象基类中定义好不可变的部分,而由其子类去具体实现可变的部分,不可变的部分不需要重复定义,而且便于维护。如果使用对象组合的复用技术,我们可以定义好不可变的部分,而可变的部分可以由不同的组件实现,根据需要,在运行时动态配置。这样,我们就有更多的时间关注可变的部分。对于对象组合技术而言,每个组件只完成相对较小的功能,相互之间耦合比较松散,复用率较高,通过组合,就能获得新的功能。d.控制方法的长度通常,我们的方法应该只有尽量少的几行,太长的方法会难以理解,而且,如果方法太长,则应该重新设计。对此,可以总结为以下原则:三十秒原则:如果另一个程序员无法在三十秒之内了解你的函数做了什么(What),如何做(How)以及为什么要这样做(Why),那就说明你的代码是难以维护的,必须得到提高; 一屏原则:如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了,应该拆分成更小的子函数;一行代码尽量简短,并且保证一行代码只做一件事。e.消除case / if语句要尽量避免在代码中出现判断语句,使用过多的switch/case 或者 if else 语句,代码的可读性很差同时也违背了面向对象的原则。f.减少参数个数有大量参数需要传递的方法,通常很难阅读。我们可以将所有参数封装到一个对象中来完成对象的传递,这也有利于错误跟踪。太多层的对象包装对系统效率有影响,但是它带来的好处相比,我们宁愿做包装。毕竟"封装"也是OO的基本特性之一,而且,"每个对象完成尽量少(而且简单)的功能",也是OO的一个基本原则。g.类层次的最高层应该是抽象类。在许多情况下,提供一个抽象基类有利做特性化扩展。由于在抽象基类中,大部分的功能和行为已经定义好,使我们更容易理解接口设计者的意图是什么。由于JAVA不允许"多继承",从一个抽象基类继承,就无法再从其它基类继承了。所以,提供一个抽象接口(interface)是个好主意,一个类可以实现多个接口,从而模拟实现了"多继承",为类的设计提供了更大的灵活性。h.尽量减少对变量的直接访问对数据的封装原则应该规范化,不要把一个类的属性暴露给其它类,而是应该通过访问方法去保护他们,这有利于避免产生波纹效应。如果某个属性的名字改变,你只需要修改它的访问方法,而不是修改所有相关的代码。i.子类应该特性化,完成特殊功能如果一个子类只是使一个组件变成组件管理器,而不是实现接口功能,或者,重载某个功能,那么,就应该使用一个外部的容器类,而不是创建一个子类j.拆分过大的类如果一个类有太多的方法(超过50个),那么它可能要做的工作太多,我们应该试着将它的功能拆分到不同的类中。k.作用截然不同的对象应该拆分对同样的数据,有不同的视图。某些属性描述的是数据结构怎样生成,而某些属性描述的是数据结构本身。最好将这两个视图拆分到不同的类中,从类名上就可以区分出不同视图的作用。类的域、方法也应该有同样的考虑!为了提高代码的复用性,还有好多的手段,以上都是多年的编码经验,希望能帮助大家。(2)算法的复用各种算法如排序算法都已经得到了大量的研究,几乎不需要我们重写自己的算法,各种语言通常也实现了这些常用算法,因此直接复用即可。(3)数据结构的复用与算法一样,类似数组、队列、栈、列表等得到了透彻的研究,只需要直接复用。(4)测试信息的复用测试信息的复用主要包括测试用例的复用和测试过程的复用。前者是把一个软件的测试用例应用于新的软件测试中,或者在软件作出修改时使用在新一轮的测试中。后者是在测试过程中通过软件工具自动记录测试的过程信息,包括测试员的每一个操作、输人参数、测试用例及运行环境等信息,并将这些过程信息应用于新的软件测试或新一轮的软件测试中。测试信息的复用级别不易同分析、设计、编程的复用级别进行准确地比较,因为被复用的不是同一事物的不同抽象层次,而是另一种信息,但从这些信息的形态来看,大体处于与程序代码相当的级别。a.测试用例设计方法测试用例设计可以分为白盒测试用例设计法和黑盒测试用i设计法。白盒测试用设计法黑盒测试用例设计法(5)设计复用设计复用指的是使用对以前创建的设计用例、标准文档、领域模型、过程指导和其它,来帮助你开始一个新工程。设计复用分为几个层次,从完整的拿来即用这种100%的完全复用,到仅以工件作模型之用,研究分析之以获取灵感。举例来说,编码和用户界面设计的标准文档对不同的项目来说,就是有价值的设计,像其中的建模符号定义和方法论总览这种文档,是可以直接复用的。我曾经为已有的通用数据接口以面向对象的方式做了包装,让这些类使用起来更直观。设计复用提升了项目间的一致性,减少了各个项目的管理成本。用户界面标准对绝大多数平台来说都是很常用的;编码标准对主要语言来说都是不可或缺的;而标准面向对象方法论和模型记号这样的东西已经使用好多年了。主要的坏处在于很多核心程序员总觉得这种复用过了头,给彼此带来了强加的标准和过程约束。因此设计复用的底线就是当你觉得它是一种重要、可行和醒目的技术时,再去使用它。这种复用有如下三种途径。从现有系统的设计结果中提取一些可复用的设计组件,并将这些组件应用于新系统的设计中。将一个现有系统的全部设计文档在新的系统上重新实现,也就是将一个设计运用于多个具体的实现中。和任何应用无关,独立设计开发可复用的设计组件。(6)分析复用分析复用是比设计复用更高级别的复用,可复用的分析组件是针对业务领域中某些设计或问题抽象出的组件,受设计技术及实现条件的影响很少,所以可复用的机会更大,如领域模型已经显出巨大的可复用潜能,因为它们反映出大规模的业务行为内聚的特征,在许多应用中都是一致的。你在领域开发中创造的每样东西都是可以复用的。与后期的复用相比,领域组件在前期业务行为和组织的架构设计中显出更大的作用。复用的途径也有三种。从已有系统的分析结果中提取可复用的组件用于新系统的架构设计。用一份完整的分析文档作为输入,产生针对不同系统和其他实现条件的多项设计。和任何应用无关,独立设计开发可复用的分析组件。三、可复用和可维护性的关系可复用和可维护性的关系如下。1.适当地应用复用,同时提高了可维护性,就是在保持甚至提高系统的可维护性的同时,实现系统复用。2.适当提高系统的可复用性,同时提高了系统的可扩展性。系统的可扩展性由“开-闭”原则、里氏代换原则、依赖倒转原则和组合/聚合复用原则保证。3.适当提高系统的可复用性,同时提高了系统的灵活性。系统的灵活性由“开-闭”原则、迪米特法则、接口隔离原则保证。4.适当提高系统的可复用性,同时提高了系统的可插入性。系统的可插入性由“开-闭”原则、里氏代换原则、组合/聚合复用原则和依赖倒转原则保证。复用的成功之路那么我们如何做到正真的面向对象设计的复用呢?上面所讲的内容都是工具,如果你认真的看完了,你已经拥有了复用的工具,复用是否成功就要看我们如何利用工具帮助我们在系统的生命周期中来实现。不要为了复用而设计系统,那么你会很累。给你提几个意见:a.多次验证并被应用你可以尝试可复用的设计,但是直到你的设计被复用多次,你才可以谈成功的设计。可复用性是旁观者来下结论的,而不是设计者自己。b.可复用性必须有完备的文档文档必须标识出,什么时候不要复用它,这样开发者才能理解合适场景的上下文。c.复用是一种态度当你设计新的系统架构的时候,第一件事应该是决定你的架构还会以怎样的方式在别的场合被复用。也许有些人已经设计了你需要的东西。另一方面,你得主动分享你的工作成果,这样大家才可以复用它。一个好领队会在团队中持续地寻找复用点和提升、奖励复用的机会。一个不错的方式就是在从这样两个方面去寻找可复用的机会:模型评审过程中,寻找继承和模式复用的机会;代码走读过程中,寻找组件和代码复用的机会。
老基建是指传统的铁路、公路、机场、港口、水利设施等传统基础设施建设,做为基础设施投资的主角,在拉动国家经济发展,实现建造强国的过程中发挥了重要的作用,尤其是近年来各地积极推动的城际高速铁路和城际轨道交通,成为提升城市品质,实现城市联动发展的建筑投资生力军。而“新基建”的提出,让5G、大数据、互联网、人工智能、区块链、超级计算等名词变得耳熟能详,那么,新基建将替代老基建了吗?要把老基建拍在沙滩上了吗? 实际上,老基建与新基建有着密切联系,传统的钢筋水泥建筑是没有生命力的,而把新基建中的5G、人工智能、大数据、互联网等技术手段植入老基建中,老基建就有了感知、判断、预警、决策的能力,就变得更精确、更智能、更具有服务功能。也解决了传统基础设施粗放式、高能耗、不环保、建筑与建筑之间关联度不高、城市中各项管理要素协同难度大的问题。可以说,新基建不是摒弃了老基建,而是提升了老基建,新基建中数字化技术的应用对老基建进行了品质提升,也为未来我国基础设施建设提高了竞争力。 智能建造作为新老基建交互期的重要技术承接行业,将成为提升品质、强化优势的切入点。在这个领域中有哪些行业将抢获商机呢?一、以BIM为代表的数字应用技术研发“甩图板”、”弃图纸”在工程界内一直是争议话题,用BIM代替CAD的支持者们认为正向设计的数字模型主导设计施工是未来的发展方向,反对者也是一系列的理由夹带各路鄙视,好在住建部一纸文件《住房和城乡建设部工程质量安全监管司2020年工作要点》(建司局函质〔2020〕10号)中指出:“积极推进施工图审查改革。……创新监管方式,采用“互联网+监管”手段,推广施工图数字化审查,试点推进BIM审图模式,提高信息化监管能力和审查效率。”给数字建模带来了曙光。 未来工程建设的依据不再仅仅是设计图纸,而是用计算机模型定义的“数字项目”,再用“数字项目”指导建设“实体项目”,也就是所谓的“数字孪生”,从而提高建造效率和效益。然而,当前我国BIM软件的市场份额主要被国外占据,建筑应用软件基本是在国外软件基础上进行插件式开发,不仅技术上受制约,在信息安全上也存在安全风险。如同在沙滩上建城堡,尤其是在进行智慧城市基础设施建设中信息安全面临巨大挑战。 二、以物联网为代表的智慧工地技术研发 当前,部分建设单位已经进行了智慧工地的初步尝试,运用互联网技术,针对工地上的“人机料法环”等工程要素中有管理需求的环节进行数据化管理,在提升管理效率,降低管理成本,实施管理监控,辅助管理决策等方面都有成效。但在成套技术集成、推进5G技术应用、增强视觉感知、利用人工智能等方面还有很多可以发挥的技术空间。最终要实现施工状态的各种感知----危险作业层面的智能设备替代----全面智慧施工的目标,还任重道远。三、以工程管理平台为代表的大数据技术研发 新基建时代大数据将成为是”流通货币“,未来我国通过基础设施拉动经济的态势长期向好,工程建造市场会依然体量巨大,各类工程设计、施工、管理产生的数据量将是及为庞大的,目前,各类无处依托的竣工资料多数是存储在文件、表格、硬盘中,利用率极低,甚至成为数据垃圾,将工程数据智能化应用,建立各种工程大数据平台,来支撑管理、运维、交易、诚信、融资等需求,变得迫在眉睫。四 、 以工程机器人为代表的智能设备研发 工程机械自动化、数字化和智能化必将在建造方式改革过程中发挥重要作用,以建筑机器人、建筑3D打印为代表的智能工程设备将推动建造领域工厂化、产品化、智能化、绿色化。当前,我国工程机械产业在国际竞争中已经占据了一席之地,但在市场份额、企业效益上与发达国家还有一定差距,尤其危险施工作业中可代替人工的智能设备研发尤为迫切。 市场需求和技术短板蕴育着巨大的商机, 一批智能建造软件的科研团队、拥有自主知识产权的软件开发商、引导组建工程管理平台的研发团队,推动产学研应用的创新中心,促进工程数据转型的企业、智能工程机械装备、设备生产商、大数据安全维护团队及围绕着上述技术开展教育培训的院校机构都将在这次建筑领域转型中获得商机。
我们知道区块链技术的发展,跟区块链关联最大的并且已经出现区块链应用的领域,就是虚拟货币了,也就是数字货币。所以,在现阶段,区块链骗局一般都会以虚拟货币的形式出现。因为这种方式最具迷惑性。迷惑性从哪来?来自关于投资虚拟货币赚了大钱的各种传闻,而最大的迷惑性(被偷换概念和逻辑)在于的确有不少人赚了大钱。辨别的方式如下:1.首先是名字。如果该虚拟货币取名比较媚俗的,那就需要特别小心,比如什么五行币、吉祥币之类的,还有什么阿猫阿狗币的。这种取名,很容易迅速达成推广效果。而比特币、以太坊这种名称,有技术性的称谓,很多人是弄不懂什么是“比特”的。看名字基本上就可以排除一部分了。但这只是辨别方式的其中之一,需要结合其他来看待。2.再看发行的方式。虚拟货币或者说数字货币,是通过大量计算产生的,具有去中心化的特征,并以此来发行。如果你根本不知道这个虚拟货币是怎么发行的,又或者这个币完全是通过中心化的机构来发行,而且还不限量,还是选择躲避为好。当然,国家级的数字货币不在此列。3.再来就是看他们的官网。很多传销币、诈骗币都没有官网,一般的虚拟货币的官网以及交易网站都是以https开头的,因为这种网站可以很好地保护用户的数据不被非法窃取,安全性比http要强得多。这是很基本的技术要求。如果该项目方连这种都不知道,还说个屁的技术。其次,官网上面一般都会有项目介绍什么的,对于项目内容的描述会比较详细,而诈骗的虚拟货币只为圈钱,他们的官网上往往不谈项目怎么实施,或者非常模糊,更多的则是大谈特谈各种收益和赚钱保证。重于宣传,而不是做实事。骗子们往往标榜着百倍千倍的收益,如果遇到了,谨慎再谨慎。记住,真正的区块链是为项目而生的,而收益和赚钱只是项目落实之后才会产生的一种结果。4.最后是实现的方式。区块链项目不是靠一张嘴的,它需要程序代码作为支撑,需要一定的技术含量。没有程序代码就根本算不上什么区块链项目。而且,区块链项目,尤其是虚拟货币大多都是代码开源的。包括比特币也是开源的。也就是说,只要你基本看得懂,你也可以照搬比特币的代码,来建设一个所谓的区块链项目。有些传销币、虚拟货币骗局,会完全抄袭别人的开源代码,而且没有使用开源代码来搭建程序,也就根本无法产生区块,跟区块链技术没有任何关系。虚拟货币骗局,主要目的在于骗钱,所以他们更多宣传重点在于充值和购买的流程,而不是运作机制。而且,他们往往采用拉人头和短期小利益的方式来宣传和发展。还有重要一点是,虚拟货币骗局一般都不会采用第三方交易平台,尤其是那些受众比较大的比较有名的平台。有些诈骗项目会在国外自行开发交易平台,“自产自销”,完全把控。现在国内交易所监管比较严,很多小交易所能不碰就不碰,就算以后放开了,也建议不要碰。总之就是一句话:区块链是一项技术,是要通过程序代码来实现,从而解决某个或某些现实问题的,投资区块链,无论是数字货币也好,还是其他的领域,程序代码是关键,而不是能赚多少倍的钱。记住这一点,区块链骗局大多都可以避开了。当然,通过提供区块链外围服务的方式来投资区块链,也不失为一条路径。
区块链技术并不是一项单一的技术,而是多种技术整合创新的结果,其本质是一个弱中心的、自信任的底层架构技术。区块链技术模型自下而上包括数据层、网络层共识层、激励层、合约层和应用层。每一层具备一项核心功能,不同层级之间相互配合,共同构建一个去中心的价值传输体系。数据层的特点是不可篡改、全备份、完全平等(数据、权限、代码),而其数据结构是区块,包括区块头和区块体。区块头由三组区块元数据,一组元数据是父区块哈希值,用于该区块与区块链中的前一区块相连接;二组元数据是Merkle根,一种用来有效地总结区块中所有交易的数据结构;三组元数据是难度目标、时间戳和Nonce与生产区块相关。网络层封装了P2P网络机制、传播和验证机制等技术。在网络层中,新的交易向全网进行广播,每一个节点都将收到的交易信息纳入一个区块中,且每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明,当一个节点找到了一个工作量证明(获得打包区块的资格),它就向全网进行广播(新打包的区块),当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性,而表示认同接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区块的随机散列值。共识层封装了网络节点的各类共识机制算法,这是区块链的核心技术,因为这决定了区块的产生,而记账决定方式将会影响整个系统的安全性和可靠性。目前已经出现了十余种共识机制算法,其中比较有名的有工作量证明机制(POW)、实用拜占庭容错算法(PBFT)、权益证明机制(POS)、股份授权证明机制。激励层包括发行机制和激励机制。简单来说,激励机制是通过经济平衡的手段,鼓励节点参与到维护区块链系统安全运行中来,防止对总账本进行篡改,使长期维持区块链网络运行的动力。合约层具有可编程的特性,主要包括智能合约、共识算法、脚本、代码,是区块链可编程特性的基础。将代码嵌入区块链或令牌中,实现可以自定义的智能合约,并在达到某个确定的约束条件的情况下,无需经由第三方就能够自动执行,是区块链去信任的基础。应用层封装了区块链的各种应用场景和案例,跟电脑上的应用程序、浏览器上的门户网站等很相似,将区块链技术应用部署在如以太坊、EOS上并在现实中落地。这六个技术层级是构建区块链技术的必要元素,缺少任何一层都将不能称之为真正意义上的区块链技术。
一、工业互联网安全漏洞总体态势根据中国国家信息安全漏洞共享平台最新统计,截止到2020年12月,CNVD收录的与工业控制系统相关的漏洞高达2955个,2020年新增的工业控制系统漏洞数量达到593个,工业控制系统漏洞数据再创历史新高,安全漏洞数量快速增长,整体形势严峻。CNVD工控新增漏洞年度分布如下所示:图1 2000-2020年CNVD收录的工控系统漏洞数量分布图在2020年,CommonVulnerabilities & Exposures(CVE)、NationalVulnerability Database(NVD)、中国国家信息安全漏洞共享平台(CNVD)及国家信息安全漏洞库(CNNVD)四大漏洞平台收录的漏洞信息共达到了804条漏洞,漏洞成因多样化特征明显,技术类型多达30种以上。其中,拒绝服务漏洞(111)、缓冲区溢出漏洞(99)和信息泄露漏洞(71)数量最为常见。2020年工控系统新增漏洞类型分布如下:图2 2020年四大漏洞库平台收录的工控系统漏洞类型分布图攻击者可以利用多样化的漏洞获取非法控制权、通过遍历的方式绕过验证机制、发送大量请求造成资源过载等安全事故。实际上,无论攻击者利用何种漏洞造成生产厂区的异常运行,均会影响工控系统组件及设备的可用性和可靠性。在四大漏洞平台收录的工业控系统漏洞中,高危漏洞占比56.6%,中危漏洞占比为35.8%,中高危漏洞占比高达92.4%。在信息安全技术标准中定义:漏洞可以容易地对目标对象造成严重后果为高危漏洞,工业控制系统又多应用于国家关键基础设施,一旦遭受网络攻击,会造成较为严重的损失。图3 2020年四大漏洞库平台收录的工控系统漏洞危险等级图在收录的工业控制系统漏洞中,涉及到的前八大工控厂商分别为施耐德(Schneider)、西门子(Siemens)、研华(Advantech)、三菱(Mitsubishi)、摩莎(Moxa)、万可(WAGO)、思科(Cisco)和ABB。漏洞涉及主要厂商情况如下图所示:图4 2020年四大漏洞库平台收录的工控设备厂商漏洞数据统计图需要说明的是,虽然安全漏洞在一定程度上反映了工控系统的脆弱性,但不能仅通过被报告的厂商安全漏洞数量来片面判断比较厂商产品的安全性。因为一般来说,一个厂商的产品越是使用广泛,越会受到更多安全研究者的关注,因此被发现安全漏洞的可能性也越大。某种程度上来说,安全漏洞报告的厂商分布,更多程度上反映的是研究者的关注度。在收录的工业控制系统安全漏洞中,多数分布在制造业、能源、水务、商业设施、石化、医疗、交通、农业、信息技术、航空等关键基础设施行业。一个漏洞可能涉及多个行业,在804个漏洞中,有708个漏洞涉及到制造业,也是占比最高的行业。涉及到的能源行业漏洞数量高达623个。制造业和能源行业工控漏洞较多,应加强这两个行业工业安全建设。漏洞行业分布图如下:图5 2020年四大漏洞库平台收录的工控漏洞涉及行业分布图二、工业互联网安全问题总结安全漏洞数量快速增长,安全形势日益严峻。安全漏洞是工业互联网面临的首要安全问题之一。根据国家信息安全漏洞共享平台(CNVD)收录的工业控制系统漏洞显示,2020年工业控制系统安全漏洞高达593个,比2019年工控漏洞增长了180个,增长比例高达40%,漏洞数据再创历史新高。黑客通过工控系统设备存在的安全漏洞可攻击到生产网,一旦控制程序被篡改,将严重影响工业企业的生产运营,造成较为严重的损失。制造业安全漏洞风险较高,攻击手段多样化。通过对2020年工业互联网安全新增漏洞涉及行业进行分析发现,制造业漏洞最多,攻击技术高达几十种,攻击破坏力较强,对关键基础设施的安全防护存在重大威胁。Dragos和X-Force发布的2020年《针对工控系统的勒索软件攻击评估报告》中显示,制造业是工业勒索软件增长最快的领域,从2018年到2020年数量增长了三倍。在过去两年,制造业也是勒索软件攻击最为频繁的行业。
(一)、概念解析1.什么是方法论?我们拿到一个输入,然后根据这个输入预期一个输出,把中间这个过程描述出来就是方法论。所以我们本篇讲的架构师方法论就是架构师先拿到经过需求分析出来的输入,然后完成架构设计,这个过程就是架构设计方法论。2.什么是设计?设计是实现意图的书面表现形式,而非口头的东西;设计是要让实现者能理解设计者的意图,是给别人看而非自己看;设计是要让不同的实现者做出来的东西差不多;设计是严肃的,后续实现者不能随意偏离设计。3.什么是系统架构师作为系统架构师你需要跳出代码层面的设计,站在更加宏观的角度进行把握。你关注的是整个系统而不是其中的一两个查询模块,你看到的元素更多的是 :人 、硬件 、软件 、网络。(二)、业务分析1.业务分析概述业务分析是在系统开发之前对系统要解决的业务领域的研究过程,目的是搞清楚该业务领域的概念以及业务的运转过程开发系统的目的一般是为了优化业务流程,使业务运转得更加高效、经济系统的价值主要在于实施后能够帮助客户带来多少业务价值不管有无系统,业务通常是不变的2.业务分析阶段活动模型业务分析阶段是由业务分析师 基于自身的业务知识和类似产品的参考,再结合客户、领域专家的咨询和指导输出业务分析阶段的成果,主要包括 领域模型 和 业务模型。领域模型领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本 身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。概念比较深奥,其实说白了就是我们把基于对业务的理解画成一个类图,并画出这些类之间的关系(面向对象),下面我们看一个实际的领域模型然后加深一下理解。在领域模型绘制时经常会出现下面两种典型错误:(1)将待开发系统也放在领域模型里面:待开发系统要不要出现在领域模型中取决于你的业务离开待开发的系统能不能玩的转。举个例子:如果开发的是共享单车的信息系统,共享单车离开信息系统肯定玩不转,所以这时候信息系统需要出现在领域模型。(2)概念划分不清,关系没有画到位:比如属性画成了类,继承关系搞错领域模型的作用:领域模型可以整理业务中的概念以及关系,帮助团队中的成员对业务的理解保持一致;往后可以指导数据库设计、系统功能设计、指导开发。现在有种开发模式是基于UI指导开发,根据UI进行数据库数据库设计、代码编写,我们称之为 “急功近利式” 开发模式。因为UI是系统表面性的东西,是异变的,不稳定的,这种模式下UI变化后我们的的设计可能也需要跟着变。而右边是基于领域驱动开发,在开发前先去思考业务的本质,先把领域层分析出来,再根据分析出来的领域层进行界面设计、架构设计、代码开发,这是由内而外的设计,这样做出来的系统就会比较稳定。业务模型前面讲的领域模型是基于静态的关系,要理解业务其实更多的需要从动态的角度来了解业务运转的过程,所以这时候就需要做业务模型。理解业务模型需要先理解以下几个概念:(1)业务对象业务主体主要有 业务执行者、业务工人、业务实体。要理解这三个对象,我们首先需要知道什么是业务,业务是指一个组织可以向组织外的人提供服务。业务执行者(Business Actor) :组织外的人,来享受这个服务的人就称为业务执行者;业务工人(Business worker) :提供业务的 组织的内部支撑人员业务实体(Business Entity) :提供业务的 组织的内部信息系统理解这几个概念还是有点拗口,我们来看看下面一张图,一个餐厅对象的业务建模右边大的黑框是提供业务的组织,是餐厅;图的左边是个业务执行者,是顾客;而在餐厅内部又分为业务工人(领位员、点餐员、厨师等),业务实体(餐厅点餐管理系统)我们在做业务建模时需要注意,所有业务对象在圆圈的右下方需要有个斜线,这是一个建模规范。(2)业务用例概念:组织对外提供的业务服务一个银行是一个提供业务的组织,这就是业务用例,考察的对象是银行这个组织而不是系统。(3)业务流程业务用例是最基本的定义,而要分析业务动态的过程就需要业务流程,我们一般用时序图来表示。餐厅现状的业务流程这时候所有的动作步骤全部靠人参与建设系统后的业务流程有了系统后系统可以承担一部分工作,有了系统能改善业务流程、提高价值、降低成本,这就是 建设系统的价值以及意义 ,否则就没必要做系统建设了。(4)业务流程分析的作用动态表达业务运转的过程只有很好的理解了业务流程,才能设计出更好的支持该业务的系统通过对比系统实施前后的流程变化,分析优化点,评估系统价值小结:在准备做一个系统之前需要先分析业务,将业务理解清楚。理解业务既有静态的理解(领域模型)又有动态的理解(业务流程),只有将业务理解清楚才能做出良好的系统。(三)、需求分析需求分析是需求工程的环节,整个需求工程分为两大块前期主要是做需求开发,包括需求调研、需求分析、需求定义;后期需要做需求管理,包括需求确认、需求跟踪、需求变更控制。咱们架构师主要聚焦在 需求分析 和 需求定义 两个环节。需求分析阶段活动模型需求分析阶段是由系统分析师 基于业务分析师输出的领域模型、业务模型 再结合 需求调研成果 输出需求分析阶段的成果,主要包括 系统上下文, 功能型需求(用例模型) 和 非功能性需求(性能等)。(1)系统上下文系统上下文是指系统与周边用户和其它系统之间的关系系统上下文的绘制很简单,就是将准备开发的系统画在中间,把用户和对接的周边系统画出来这就叫系统上下文。(2)系统用例系统用例是指系统被使用的案例,主要是从业务流程中推导出来,系统用例的命名规范主要是使用动词短语,如:添加用户、查询话费等短语。我们可以对系统用例细化,如上对登记入座信息这一用例进行细化a.系统用例与业务用例的区别与联系业务用例是描述组织对外提供的能力,系统用例是描述系统对外提供的能力,两者考察的对象不一样系统用例是业务用例相应流程中对系统的一个操作。b.功能与用例的区别和联系用例是需求分析的产物,描述的是某种用户使用系统完成什么业务功能是设计阶段的产物,是根据系统用例和架构中的组件推导出来的功能是静态的,用例是动态的从语法角度来说,用例是动词短语,功能是名词短语 例:用例命名(查询空位),功能命名(空位查询)常见的错误:描述需求时拿出一份功能清单(3)非功能性需求主要是确定一些非功能性需求,比如:可用性、 性能、 安全性、 经济性、可扩展性、 可伸缩性、可移植性等等 可用性、性能、安全性是需要重点关注的内容,我们后期专门拿出来讲。(四)、架构设计(重点)前面的业务分析与需求分析一般是由其他专人来做,那么这一块的内容则是架构师的工作,需要重点关注。在系统简单时我们需要从 功能角度 对系统进行分解和拆分,这个时候我们只要做下概要设计和详细设计就可以。在复杂系统时我们需要从 组件角度 对系统进行分解和拆分,这个时候我们就需要做架构设计与概要设计。组件、功能、模块组件是架构设计阶段考虑的单元(进程级别),功能、模块是概要设计、详细设计考虑的单元;一个组件可包含多个模块,涉及多个功能;一个功能的实现可能需要多个组件中的相应模块来协作完成。我们用一张图来理解他们三者之间的关系 前后端分离的一个项目从进程角度划分出三个组件,分别是web前端、后端接口服务、后台服务, 为了实现用户查询这个功能必须要在相应组件里都需要有相应的模块。一个组件里可以有多个不同的模块,各个组件里的模块相互协作完成某一个功能架构如果用一句话来描述什么是架构,那应该可以这样定义:架构是系统的内部结构(组件以及它们之间的关系)还要包含系统的技术要素。做架构设计其实就是干这两件事。架构设计有两个目标:满足功能性需求和满足非功能性需求架构设计阶段活动模型架构设计阶段是由系统架构师 参照需求分析的产物(SRS),再通过对系统分析师、项目经理的咨询输出架构设计阶段的成果,主要包括 架构工作计划 、 逻辑架构、物理架构、开发组件一览表、部署组件一览表、技术选型一览表。那如何来衡量一个架构的设计好坏呢?在设计完成时我们可以通过设计资料的规范性以及设计思路、方案决策、技术选型的合理性来校验;在系统实现后可以通过功能性和非功能性需求的满足程度来校验。1.逻辑架构设计(非技术型)将系统从非技术角度分解成若干逻辑组件,并建立它们之间的关系,以满足系统需求。关系分静态和动态,其中静态关系用组件图表示,动态关系用序 列图表示。逻辑架构中,组件名称使用母语以便理解逻辑架构不涉及技术元素,只是纯概念上的表述逻辑架构的读者可以是非技术人员逻辑架构设计完成后应和系统分析师、产品经理等人员一起确认,检查是否满足需求。我们看一个典型的逻辑架构2.物理架构设计(技术型)将逻辑架构中的组件转换为技术性的物理组件,名称使用英文,在实现时应遵循这些命名;物理组件粒度有大有小,可表现为子系统、进程、对象等多种形式;物理架构还需要解决非功能性需求物理架构还要和后续设计和实现进行衔接;非技术人员可能难以理解我们看一个典型的物理架构小结:架构设计为系统的总体设计,决定了系统的组件划分、关键技术方案决策、技术选型 架构设计上接需求,下接进一步的设计和实现,是决定系统实现的质量、效率、成本的关键阶段(五)、概要设计与详细设计1.概要设计概要设计阶段的主要内容是进行功能模块划分以及接口定义(接口名称、功能概要、参数、返回值)概要设计阶段活动模型概要设计阶段是由开发组长 基于系统用例、开发组件一览表 再结合对架构师和系统分析师的咨询输出概要设计阶段成果,主要包括 功能一览表 , 接口说明书。2.详细设计详细设计阶段的主要内容是描述内部模块实现、界面设计以及数据库设计详细设计阶段活动模型详细设计阶段可能会根据工作内容进行分工,主要结合之前的产出输出详细设计阶段的成果,主要包括 界面设计 , 模块内部设计 , 数据库设计。(六)、后续工程阶段1.开发阶段活动模型开发阶段主要是由开发人员结合架构设计的产物以及详细设计的产物编写相应代码。2.测试阶段活动模型测试阶段主要是由测试人员结合架构设计的产物以及详细设计的产物进行功能测试,包括功能性需求以及非功能性需求,需要对外输出 测试计划,测试用例 以及 测试报告。3.部署阶段活动模型部署阶段主要是由部署人员结合架构设计的产物以及跟开发人员的咨询进行组件部署,这一阶段需要输出部署计划、部署方案、部署手册、部署脚本、部署实施 等4.运维阶段活动模型运维阶段主要是由运维人员结合架构设计的产物进行系统运维,需要输出运维计划、运维方案、运维手册、运维脚本、运维报告 等。
服务热线:
4006-75-4006(7*24小时在线)
总机直拨:
0871-63886388(工作日9:00-18:00)
售前咨询
售后咨询
备案咨询
电话
二维码
TOP