一种数据报文转发方法、 装置及系统 【技术领域】
本发明涉及网络安全领域, 尤其涉及一种数据报文转发方法、 装置及系统。背景技术 互联网协议版本 6(IPv6, Internet Protocol Version 6) 在请求评论文档 (RFC, Request For Comments)2460 中定义, 是下一代互联网设备互联的重要标准之一。 目前大部 分网络设备 ( 包括交换机, 路由器等 ) 都支持 IPv6 协议。
相比 IPv4, IPv6 将地址长度由原先的 32 位增加到了 128 位, IPv6 的地址总数大 约有 3.4*10E38 个, 以支持大规模数量的网络节点。平均到地球表面上, 每平方米将获得 6.5*10E23 个地址。IPv6 支持更多级别的地址层次, IPv6 的设计者把 IPv6 的地址空间按 照不同的地址前缀来划分, 并采用了层次化的地址结构, 以利于骨干网路由器对数据包的 快速转发。
目前有一种利用 IPv6 数据报文对网络设备发起的拒绝服务 (DoS, Denial of Service) 攻击, 攻击的方法和报文的主要特征如下 :
(1) 攻击者朝目标网络设备的某个 IPv6 接口持续发送大量的 IPv6 数据报文 ( 攻 击报文 )。攻击报文的报文发送速率是随机调整的 ;
(2) 攻击报文的源 IPv6 地址是随意的, 目的 IPv6 地址在变化, 且与目标网络设备 的某一个接口地址 ( 这个接口地址作为攻击报文目的 IPv6 地址的网关 ) 在同一网段。
(3) 目的 IPv6 地址所对应的主机可能存在, 也可能不存在。
DoS 攻击主要是针对目标网络设备 CPU 的负担来设计。 对网络设备来说, 如果目的 IPv6 地址存在, 则 IPv6 数据报文会被网络设备直接转发, 不会占用网络设备 CPU 的资源, 而 如果目的 IPv6 地址不存在, IPv6 数据报文会送到网络设备 CPU, 由 CPU 通过邻居发现 (ND, Neighbor Discovery) 协议, 发送邻居请求 (NS, Neighbor Solicitation) 报文, 请求询问 目的 IPv6 地址对应的介质访问控制 (MAC, Media Access Control) 地址, 如果送到 CPU 的 IPv6 数据报文数量较多, 网络设备会持续发送 NS 报文, 消耗 CPU 资源。在 IPv6 数据报文的 发送速率较大的情况下, 网络设备的 CPU 忙于发送 NS 报文, 使其他正常业务无法得到及时 处理, 造成网络转发不通, 网络路由协议震荡等故障。
ND 协 议 是 IPv6 中 的 一 个 关 键 协 议, 全 称 是 IPv6 版 本 的 邻 居 发 现 (Neighbor Discovery for IP Version 6), 在 RFC 2461 中定义。ND 协议的一个主要机制就是提供 确定本地链路上节点链路层地址的方法, 这种机制混合使用互联网控制消息协议第六版 (ICMPv6, Internet Control Message Protocol Version 6) 和 IPv6 的多播地址, 有点类 似 IPv4 的地址解析协议 (ARP, Address ResolutionProtocol)。下面对 ND 协议中确定本 地链路上节点链路层地址机制的原理做一个说明。
在 IPv6 中, 对节点链路层地址的确定使用邻居请求消息 (ICMPv6 类型 135)、 邻居 公告消息 (ICMPv6 类型 136) 和被请求节点多播地址的组合。
如 图 1 所 示,节 点 A 和 B 的 链 路 层 地 址 分 别 是 00:50:3e:e4:4c:00 和
00:50:3e:e4:4b:01。节点 A 要和节点 B 通信, 需要获取节点 B 的链路层地址, 具体的, 可以 通过以下步骤获取节点 B 的链路层地址 :
步骤一 : 节点 A 发送一个类型为 135 的 ICMPv6 消息 ( 该消息即 NS 报文 ) 到本 地链路, 节点 A 的本地站点地址 FEC0::1:0:0:1:A 作为源地址, 与节点 B 的本地站点地址 FEC0::1:0:0:1:B 对应的被请求节点多播地址 FF02::1:FF01:B 作为目的地址, 发送节点 A 的源链路层地址 00:50:3e:e4:4c:00 作为 ICMPv6 消息的数据。
步骤二 : 侦听本地链路上多播地址的节点 B 获取这个邻居请求消息 ;
步骤三 : 节 点 B 发 送 一 个 类 型 为 136 的 ICMPv6 消 息 ( 该 消 息 即 邻 居 公 告 消 息 (NA, Neighbor Advertisement) 报 文 ) 作 为 应 答 报 文, 用节点 B 的本地站点地址 FEC0::1:0:0:1:B 作为源地址, 节点 A 的本地站点地址 FEC0::1:0:0:1:A 作为目的地址, 以 节点 B 的链路层地址 00:5e:3e:e4:4b:01 作为消息的数据。
在节点 A 收到 NA 报文和节点 B 收到 NS 报文后, 都知道了对端的链路层地址, 并可 以存放在自己的邻居发现列表中, 此时, 节点 A 和 B 可以进行通信。
针对 DoS 攻击, 目前有如下解决方案 :
方案 1 : 基于主机的 IPv6 攻击识别隔离和限速。基于主机是采用源 IPv6 地址 / VLAN ID/ 物理端口三者结合识别的。 攻击识别都有限速水线。 当同一个源 IPv6 地址 /VLAN ID/ 物理端口的 IPv6 数据报文速率超过限速水线时, 超限报文将被丢弃。原理是对同一个 源 IPv6 地址 /VLAN ID/ 物理端口的 IPv6 数据报文进行统计, 当一个规定时间内的统计值 超过预设的阀值, 则认为这个源 IPv6 地址对应的主机发送的 IPv6 数据报文是攻击报文, 将 这个源 IPv6 地址进行隔离, 并将该源 IPv6 地址对应的所有 IPv6 数据报文设置丢弃策略。 同时对攻击者的隔离时间也设置一个阀值, 当超过这个预设阀值, 则解除对该源 IPv6 地址 的限制。
方案 1 存在的问题是 : 基于主机的攻击隔离和限速方式, 当攻击者将攻击报文的 速率调小, 或者让攻击报文的源 IPv6 地址和目的 IPv6 地址都做随机性改变, 方案 1 就无法 检测出攻击报文并及时隔离, 仍存在由于 DoS 攻击造成的网络设备 CPU 负荷较重的问题。 另 外存在的一个问题是 : 当一个正常客户发送的 IPv6 数据报文速率超过预设阀值时, 会被误 认为是攻击报文而被隔离, 导致该用户在隔离时间内无法进行通信。 虽然阀值可以调整, 不 过上述 2 个主要问题还是依然存在。
方案 2 : 基于端口的 IPv6 攻击隔离和限速。基于物理端口的攻击隔离和限速相对 比较简单。每个端口都有攻击阈值。当某个端口的 IPv6 数据报文接收速度超过攻击阈值 时, 就丢弃超速的 IPv6 数据报文。
方案 2 存在的问题是 : 基于端口的方式过于简单, 会造成用户数据报文 ( 非攻击报 文 ) 被直接丢弃的问题。
方案 3 : 限制接口下 ND 表项的最大学习个数, 以及限制设备同时发起解析的 ND 表 项的个数。这种解决方案保证网络设备 CPU 在单位时间内只处理有限的 ND 报文, 超过规格 限制的 ND 报文就丢弃。
方案 3 存在的问题是 : 无法从根本上解决数据报文攻击所导致的网络设备 CPU 高 负荷的问题。同时会丢弃正常用户的 ND 报文, 使正常用户应用无法完成。
方案 4 : 下发黑洞路由。具体原理为网络设备通过 ND 协议发起地址解析时, 将所解析 ND 表项对应的主机路由策略设置为黑洞 (BLACKHOLE, 即不转发 ), 如果地址解析成功, 则删除该主机黑洞路由。这种方案可以保证任何一个 ND 表项在解析成功前, 后续具有相同 目的地址的数据报文都会由于匹配到黑洞路由表项而被丢弃。
方案 4 存在的问题是 : 由于接口 IPv6 地址覆盖的网段范围非常大 ( 比如 64 位 掩码, 则可以覆盖的主机地址个数为 264-2 个地址 ) 不可能对匹配到直连网段路由的攻击 数据报文进行穷举, 因此不断变化目的地址的攻击数据报文仍然能够不断地冲击网络设备 CPU。另外如果是做一次性扫描的话, 网络设备也需要发送 NS 报文, 无法解决网络设备 CPU 被攻击的问题。
综上所述, 现有的防止 DoS 攻击的解决方案要么无法从根本上解决网络设备 CPU 负荷较重的问题, 要么会造成用户数据报文的丢弃, 导致用户无法进行通信, 因此, 目前亟 需提供一种可以有效防止 DoS 攻击的解决方案, 在防止网络设备 CPU 负荷较重的同时, 避免 丢弃用户数据报文。 发明内容
本发明实施例提供一种数据报文转发方法、 装置及系统, 用于有效防止 DoS 攻击。一种数据报文转发方法, 所述方法包括 :
发送特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本地链路的多播地址 FF02::1 ;
接收本地链路节点返回的邻居公告 NA 报文, 并根据返回的 NA 报文更新本地邻居 列表 ;
确定接收到的互联网协议版本 IPv6 数据报文目的地址是否为本地邻居列表中的 节点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文。
一种数据报文转发方法, 所述方法包括 :
接收网络设备发送的特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本地链 路的多播地址 FF02::1 ;
根据接收到的特定 NS 报文, 向所述网络设备返回邻居公告 NA 报文。
一种网络设备, 所述网络设备包括 :
第一发送单元, 用于发送特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本地 链路的多播地址 FF02::1 ;
接收单元, 用于接收本地链路节点返回的邻居公告 NA 报文 ;
更新单元, 用于根据返回的 NA 报文更新本地邻居列表 ;
第二发送单元, 用于确定接收到的互联网协议版本 IPv6 数据报文目的地址是否 为本地邻居列表中的节点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文。
一种节点, 所述节点包括 :
接收单元, 用于接收网络设备发送的特定邻居请求 NS 报文, 该特定 NS 报文的目的 地址为本地链路的多播地址 FF02::1 ;
发送单元, 用于根据接收到的特定 NS 报文, 向所述网络设备返回邻居公告 NA 报文。 一种数据转发的系统, 所述系统包括网络设备和节点, 其中 :
网络设备, 用于发送特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本地链路 的多播地址 FF02::1, 接收本地链路节点返回的邻居公告 NA 报文, 并根据返回的 NA 报文更 新本地邻居列表, 确定接收到的互联网协议版本 IPv6 数据报文目的地址是否为本地邻居 列表中的节点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文 ;
节点, 用于根据接收到的特定 NS 报文, 向所述网络设备返回邻居公告 NA 报文。
根据本发明实施例提供的方案, 修改 ND 协议, 发送目的地址为本地链路的多播地 址 FF02::1 的特定的 NS 报文, 并接收本地链路节点返回的 NA 报文, 从而可以根据接收到的 NA 报文更新本地链路节点的 MAC 地址信息, 在确定接收到的 IPv6 数据报文目的地址是本地 邻居列表中的节点地址时, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文。从而可以在受 到 DoS 攻击时, 攻击报文的目的 IPv6 地址不存在时, 网络设备的 CPU 无需发送 NS 报文来解 析目的 IPv6 地址, 从而可以避免由于 DoS 攻击造成的 CPU 高负荷的问题, 并且, 也可以解决 为了防止 DoS 攻击, 丢弃目的 IPv6 地址存在的非攻击报文的问题。
附图说明
图 1 为现有技术提供的节点 A 获取节点 B 的链路层地址的示意图 ;
图 2 为本发明实施例一提供的数据报文转发方法的步骤流程图 ;
图 3 为本发明实施例二提供的数据报文转发方法的步骤流程图 ;
图 4 为本发明实施例三提供的数据报文转发方法的步骤流程图 ;
图 5 为本发明实施例四提供的数据报文转发方法的示意图 ;
图 6 为本发明实施例五提供的网络设备的结构示意图 ;
图 7 为本发明实施例六提供的节点的结构示意图 ;
图 8 为本发明实施例七提供的数据报文转发系统的结构示意图。 具体实施方式
为了解决 IPv6DoS 攻击中造成的网络设备对大量不存在的 ND 表项进行解析的问 题, 本发明实施例采用的方案主要是通过更新现有 ND 协议, 新增一个 NS 类型报文, 让网络 设备定期更新本地链路节点的信息并检查合法性, 具体的, 对目的地址对应合法且存在的 邻居的 IPv6 数据报文, 可以采取转发策略 ; 对目的地址对应不存在或者非法的邻居的 IPv6 数据报文, 可以采取不转发策略。 通过这种方式, 网络设备不管处于受攻击状态还是正常状 态, 都可以正常维护本地链路合法邻居的转发表项和转发策略, 能有效抵御 IPv6 的 DoS 攻 击。
下面结合说明书附图和各实施例对本发明方案进行说明。
实施例一、
本发明实施例一提供一种数据报文转发方法, 该方法的步骤流程如图 2 所示, 具 体包括以下步骤 :步骤 101、 网络设备发送特定 NS 报文。
网络设备发送特定 NS 报文, 该特定 NS 报文的目的地址为本地链路的多播地址 FF02::1。RFC2461 规定, 原始 NS 报文 ( 现有技术中的 NS 报文 ) 的目的 IPv6 地址一般为请 求对象的多播地址或请求对象的单播地址。本发明实施例中规定特定 NS 报文的目的 IPv6 地址为本地链路的多播地址 FF02::1, 这样本地链路上所有节点都可以接收该特定 NS 报 文, 从而可以通过向本地链路的所有节点发送特定的 NS 报文来获取每个节点的相关信息。
较优的, 网络设备可以定时发送所述特定 NS 报文, 也可以在设定第一时长内, 接 收到的 IPv6 数据报文目的地址不是本地邻居列表中的节点地址的数量大于设定的阈值时 发送所述特定 NS 报文。
RFC2461 规定, 原始 NS 报文中的保留 (reserved) 字段必须全部为 0, 且接收原始 NS 报文的节点忽略该字段的取值。 本发明实施例中, 所述特定 NS 报文的保留字段可以配置 有识别字段和回应延迟随机字段, 所述识别字段用于指示需要回复 NA 报文的本地链路节 点, 所述回应延迟随机字段用于指示本地链路节点是否需要延迟随机算法确定出的一段时 间后回复 NA 报文。接收所述特定 NS 报文的节点可以根据识别字段和回应延迟随机字段的 取值做出相应的处理, 节点在识别特定 NS 报文时, 可以根据报文的目的地址是否为本地链 路多播地址 FF02::1 来识别该报文是否为特定 NS 报文。 例如, 可以将原始 NS 报文的 3 个字节的保留字段分割成两个字段, 分别用于配置 所述网络识别字段和所述回应延迟随机字段。 可以将网络识别字段取值为 1, 并可以将节点 指定的字段初始值设置为 0( 即可以设定节点指定的字段初始值与所述识别字段取值不相 同, 所述指定的字段可以用于标识节点的本地邻居列表中是否包括所述网络设备, 可以定 义取值为 0 时标识节点的本地邻居列表中不包括所述网络设备, 定义取值为 1 时标识节点 的本地邻居列表中包括所述网络设备 ), 并可以定义节点在指定的字段与接收到的特定 NS 报文中的识别字段取值不同时 ( 此时可以确定该节点的相关信息未被该网络设备获得 ), 将所述指定的字段与接收到的特定 NS 报文中的识别字段取值配置为相同, 并确定需要回 复 NA 报文。定义节点在指定的字段与接收到的特定 NS 报文中的识别字段取值相同时, 确 定不需要回复 NA 报文 ( 此时可以确定该节点的相关信息已被该网络设备获得 )。 节点回复 的 NA 报文即为现有技术中的 NA 报文, 在此不再赘述。通过配置网络识别字段, 使得相关信 息已被该网络设备获得的部分本地链路节点无需回复 NA 报文, 从而可以减轻网络设备的 信令交互和处理负荷。
进一步的, 可以通过配置回应延迟随机字段, 定义节点如何回复 NA 报文。如, 可以 将回应延迟随机字段取值为 1 或者取值为 0, 并可以定义接收到配置的回应延迟随机字段 取值为 1 的特定 NS 报文的节点在回复 NA 报文时, 需要利用随机算法确定出一段时间, 延迟 该时间后回复 NA 报文 ( 即设定取值为 1), 定义在接收到配置的回应延迟随机字段取值为 0 的特定 NS 报文的节点在回复 NA 报文时, 需要立即回复 NA 报文。具体的, 可以在某一时刻 统计在设定第一时长内, 接收到的 IPv6 数据报文目的地址不是本地邻居列表中的节点地 址的数量, 若该数量大于设定的门限值, 则将回应延迟随机字段取值为 1( 将回应延迟随机 字段取值为设定取值 ), 从而可以利用随机算法确定每个节点回复的延迟时间, 使得众多节 点发送 NA 报文的时间间隔拉开, 防止某一个时间段内网络设备需要处理大量的 NA 报文。
步骤 102、 网络设备更新本地邻居列表。
本步骤包括 : 网络设备接收本地链路节点返回的邻居公告 NA 报文, 并根据返回的 NA 报文更新本地邻居列表。具体的, 可以将每个本地链路节点返回的 NA 报文中携带的 MAC 地址确定为本地邻居列表中该本地链路节点的 MAC 地址 ( 以下简称为节点地址 )。
步骤 103、 网络设备转发数据报文。
本步骤包括 : 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节 点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止向 该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文。
较优的, 在步骤 102 之后, 步骤 103 之前, 还可以进一步包括步骤 103’ , 对本地邻居 列表中的节点进行合法性验证, 防止非法节点也加入到本地邻居列表, 造成网络设备不必 要的处理负荷 :
步骤 103’ 、 网络设备确定本地邻居列表中的节点的合法性。
具体的, 可以通过以下方式中的至少一种确定本地链路节点的合法性 :
向本地链路节点发送 NS 报文, 在接收到该本地链路节点返回的 NA 报文时, 将该本 地链路节点确定为合法节点 ( 可以在本地邻居列表中将该节点的合法性标志位标记为合 法 ), 否则, 将该本地链路节点确定为非法节点 ; 或者 在确定本地链路节点与其他节点之间有双向通信时, 将该本地链路节点确定为合 法节点, 否则, 将该本地链路节点确定为非法节点。
在利用双向通信检验本地链路节点的合法性时, 针对一个本地链路节点, 可以对 一个 IPv6 数据报文, 记录源 IPv6 地址, 目的 IPv6 地址, 该本地链路节点所在的虚拟局域网 (VLAN, Virtual Local Area Network), 端口信息, 流方向 1, 流方向 2。如果该端口针对该 本地链路节点的发出的 IPv6 数据报文和收到的 IPv6 数据报文是双向对称的, 则表明该本 地链路节点存在且合法, 可以在本地邻居列表中将该节点的合法性标志位标记为合法。
较优的, 可以通过一条流表来记录该端口针对该本地链路节点的发出的 IPv6 数 据报文和收到的 IPv6 数据报文, 例如, 可以通过流表 (VLAN =该本地链路节点所在 VLAN, 端 口 号 = 该 本 地 链 路 节 点 所 在 的 端 口 号, 源 IPv6 地 址 为 2001::10, 目 的 IPv6 地 址 为 2000::2, 流方向 1 = out, 流方向 2 = NULL) 记录该端口针对该本地链路节点收到的 IPv6 数据报文, 并可以在该端口针对该本地链路节点发出 IPv6 数据报文时, 将该流表更新为 (VLAN =该本地链路节点所在 VLAN, 端口号=该本地链路节点所在的端口号, 源 IPv6 地址 为 2001::10, 目的 IPv6 地址为 2000::2, 流方向 1 = out, 流方向 2 = in), 从而减少系统资 源的占用, 减轻系统负荷。
在增加了步骤 103’ 之后, 步骤 103 可以具体包括 :
确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节点地址, 若不 是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的合法节点 地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数据报文目的地址对应的 节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地址, 在设定第二时长内, 向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 并在设定第二时长 到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本地邻居列 表中删除 ; 或者,
确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节点地址, 若不 是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的合法节点 地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数据报文目的地址对应的 节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地址, 在设定第二时长内, 禁止向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 并在设定第二 时长到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本地邻 居列表中删除。
根据本发明实施例一提供的方案, 不仅可以通过定时或事件触发的方式发送特定 的 NS 报文给本地链路的每个节点, 并根据返回 NA 报文的节点来更新本地邻居列表, 从而可 以根据需要转发的 IPv6 数据报文目的地址是否对应本地邻居列表中的节点来确定是否转 发该 IPv6 数据报文, 有效防止 DoS 攻击的同时, 还可以通过配置特定的字段, 指示部分本地 链路节点回复 NA 报文, 以及在回复 NA 报文时, 采用立即回复的方式还是延时一定时长后回 复的方式, 减轻网络设备的负荷。 并且, 本发明方案中还可以对本地邻居列表中的节点进行 合法性验证, 防止非法节点也加入到本地邻居列表, 造成网络设备不必要的处理负荷, 并提 供了针对合法性验证后的节点如何进行 IPv6 数据报文转发的方法。 下面分别从网络设备侧和节点侧对本发明提供的数据报文转发方法进行说明。
实施例二、
本发明实施例二提供一种数据报文转发方法, 该方法的步骤流程如图 3 所示, 具 体包括以下步骤 :
步骤 201、 确定是否需要发送特定 NS 报文。
在本步骤中, 网络设备可以在确定设定第一时长内, 未解析的 ND 表项大于设定的 阈值, 或者, 在定时时长到达时, 确定需要发送特定 NS 报文。
每个目的地址不是本地邻居列表中的节点地址的 IPv6 数据报文对应一个解析状 态为未解析的 ND 表项。ND 表项可以包括 VLAN 属性 ( 该 IPv6 数据报文目的地址对应的节 点所在的 VLAN), IPv6 地址信息, 链路地址信息, 端口, 解析状态 ( 可以设定若目的地址不是 网络设备本地邻居列表中的节点地址, 解析状态为未解析, 否则为已解析 ), 是否合法 ( 目 的地址对应的节点是否为合法节点 ), 超时时间 ( 该超时时间用于节点将指定的字段与接 收到的特定 NS 报文中的识别字段取值配置为相同之后, 启动设定的超时时间 ( 第三时长 ) 的计时, 在超时时间到达之前, 再次接收到所述网络设备发送的报文时, 重新启动设定的超 时时间的计时, 否则, 将所述指定的字段与接收到的特定 NS 报文中的识别字段取值配置为 不相同 ) 等主要信息。
在本步骤中, 可以暂时对 IPv6 数据报文采取禁止转发的策略。
步骤 202、 确定特定 NS 报文的内容并发送。
在本步骤中, 可以设置识别字段取值为 1( 针对一个网络设备, 如, 网关设备, 节点 中指定字段初始取值为 0), 并定义节点在指定的字段与接收到的特定 NS 报文中的识别字 段取值相同时, 不需要回复 NA 报文, 在指定的字段与接收到的特定 NS 报文中的识别字段取 值不相同时, 需要回复 NA 报文。
可以在设定第一时长内, 未解析的 ND 表项大于设定的门限值时, 将回应延迟随机
字段取值为 1, 指示节点利用随机算法确定出一段时间, 延迟该时间后回复 NA 报文, 否则, 将回应延迟随机字段取值为 0, 指示节点立即回复 NA 报文。
在所述特定 NS 报文的保留字段配置了识别字段和回应延迟随机字段之后, 可以 将该特定 NS 报文的目的地址设置为本地链路的多播地址 FF02::1 并发送。
步骤 203、 接收 NA 报文, 更新本地邻居列表。
本步骤与实施例一中步骤 102 相同, 在此不再赘述。
步骤 204、 启动邻居合法性检测。
本步骤中, 启动本地邻居列表中的节点合法性的检测。合法性检测的方式与实施 例一步骤 103’ 中合法性检测的方式相同, 在此不再赘述。
步骤 205、 执行数据报文的转发。
在本步骤中, 可以根据步骤 204 中邻居合法性检测的结果, 对接收到的 IPv6 数据 报文对应的 ND 表项进行更新, 如, 可以更新 ND 表项中是否合法的信息, 并根据合法性检测 的结果, 执行 IPv6 数据报文的转发。
具体的, 可以确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节 点地址, 若不是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址对应的节点 转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中 的合法节点地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数据报文目的 地址对应的节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地址, 在设定第 二时长内, 向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 并在设定 第二时长到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本 地邻居列表中删除 ; 或者,
确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节点地址, 若不 是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的合法节点 地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数据报文目的地址对应的 节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地址, 在设定第二时长内, 禁止向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 并在设定第二 时长到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本地邻 居列表中删除。
实施例三、
本发明实施例三提供一种数据报文转发方法, 该方法的步骤流程如图 4 所示, 具 体包括以下步骤 :
步骤 301、 接收特定 NS 报文。
节点接收到的 NS 报文可以是原始 NS 报文, 也可以是特定 NS 报文, 在接收到原始 NS 报文时, 按照现有流程进行处理 ( 包括更新节点本地邻居列表并向发送该原始 NS 报文的 网络设备直接发送 NA 报文 ), 本实施例中, 对节点接收到特定 NS 报文的情况进行说明。
具体的, 节点可以根据报文的目的地址为本地链路多播地址 FF02::1 来识别该报 文为特定 NS 报文。
步骤 302、 更新本地邻居列表。本步骤与实施例一中步骤 102 相同, 在此不再赘述。
步骤 303、 确定是否需要回复 NA 报文。
在本步骤中, 节点可以识别接收到的特定 NS 报文中的识别字段, 在指定的字段与 接收到的特定 NS 报文中的识别字段取值相同时, 确定不需要回复 NA 报文, 并结束流程, 在 指定的字段与接收到的特定 NS 报文中的识别字段取值不同时, 将所述指定的字段与接收 到的特定 NS 报文中的识别字段取值配置为相同, 确定需要回复 NA 报文, 并继续执行步骤 304。
具体的, 将所述指定的字段与接收到的特定 NS 报文中的识别字段取值配置为相 同之后, 启动设定的第三时长的计时, 在第三时长到达之前, 再次接收到所述网络设备发送 的报文时, 重新启动设定的第三时长的计时, 否则, 将所述指定的字段与接收到的特定 NS 报文中的识别字段取值配置为不相同, 从而限制网络设备信息在节点中的有效时间。
步骤 304、 确定是否需要延时发送 NA 报文。
在本步骤中, 节点可以识别接收到的特定 NS 报文中的回应延迟随机字段, 并在回 应延迟随机字段为设定取值时, 确定需要利用随机算法确定出一段时间, 延迟该时间后回 复 NA 报文, 否则, 确定需要立即回复 NA 报文。
步骤 305、 发送 NA 报文。
本步骤包括 : 确定需要利用随机算法确定出一段时间, 延迟该时间后回复 NA 报文 时, 延迟该时间后向网络设备发送 NA 报文, 否则, 直接向网络设备发送 NA 报文。
下面通过一个具体的实例对本发明实施例一~实施例三的方案进行说明。
实施例四、
本发明实施例四提供一种数据报文转发方法, 该方法的示意图如图 5 所示, 本实 施例中, 设定节点 1( 全球单播地址 2000::2/16, 链路层地址 00:00:00:00:00:02) 的网关为 IPv6 网关 ( 全球单播地址 2000::1/16, 链路层地址 00:00:00:00:00:01), 节点 1 与节点 2 通信 ( 全球单播地址 2001::10/16), 节点 1 和节点 2 分别位于不同的网段。节点 1 和节点 3( 全球单播地址 2000::3/16, 链路层地址 00:00:00:00:00:03) 位于同一个网段。攻击者 发送 IPv6DoS 扫描数据报文 ( 攻击报文, 即攻击者发送目的 IPv6 地址从 2000:10 开始递增 的 IPv6 报文, 进行扫描, 速率线速, 每个报文重复发两遍 )。具体包括以下内容 :
第一步、 IPv6 网关启动时, 朝节点 1 所在的网段发送特定 NS 报文, 目的 IPv6 地址 为 FF02::1, 识别字段为 1, 回应延迟随机字段为 0。节点 1 和节点 3 都可以收到该特定 NS 报文。
第二步、 节点 1 和节点 3 在接收到该特定 NS 报文时, 检查自身指定字段。由于刚 起机节点 1 和节点 3 没有对应的 ND 表项, 则节点 1 和节点 3 分别创建新的网关邻居信息, 并设置指定字段为 1, 且节点 1 和节点 3 均需要回复 NA 报文。由于回应延迟随机字段为 0, 则节点 1 和节点 3 立即发送 NA 报文来响应该特定 NS 报文。
第三步、 IPv6 网关收到节点 1 和节点 3 发出的 NA 报文, 创建节点 1 和节点 3 的邻 居信息, 并进行邻居合法性检查。
具体的, 在检查节点 1 的合法性时, IPv6 网关可以发送 NS 报文 ( 原始 NS 报文 ), 该报文的目的 IPv6 地址为节点 1 的 IPv6 地址 (2000::2), 节点 1 收到该 NS 报文后, 再次发 送 NA 报文。IPv6 网关再次收到节点 1 发送的 NA 报文, 可以确认节点 1 合法, 更新该节点相关信息。 或者, 可以通过节点 1 和节点 2 之间是否有双向通信来确定节点 1 是否合法。可 以考察节点 2 发报文给节点 1 而节点 1 还未回应阶段, 这时网关的流表状态为 (VLAN =节 点 1 所在 VLAN, 端口号=节点 1 所在的端口号, 源 IPv6 地址为 2001::10, 目的 IPv6 地址为 2000::2, 流方向 1 = out, 流方向 2 = NULL)。
考察节点 1 应答了节点 2 的报文阶段, 网关的流表状态为 (VLAN =节点 1 所在 VLAN, 端口号=节点 1 所在的端口号, 源 IPv6 地址为 2001::10, 目的 IPv6 地址为 2000::2, 流方向 1 = out, 流方向 2 = in)。在判断流方向 2 为 in 方向时, 所用 IPv6 报文为该端口 收到的 IPv6 报文, 对比原先的流表 ( 节点 2 发报文给节点 1 而节点 1 还未回应阶段 ), 需要 源 IPv6 地址对应目的 IPv6 地址, 目的 IPv6 地址对应源 IPv6 地址, 其他信息都一致才能判 断这个流为双向流, 才能判断节点 1 是在和节点 2 通信, 可以确定节点 1 为合法节点。
在检查节点 3 的合法性时, IPv6 网关可以发送 NS 报文 ( 原始 NS 报文 ), 该报文的 目的 IPv6 地址为节点 3 的 IPv6 地址 (2000::3), 节点 3 收到该 NS 报文后, 不回复 NA 报文, 可以确认节点 3 为非法节点。
第四步、 攻击者开始发送攻击报文, 由于攻击报文的目的地址不是 IPv6 网关本地 邻居列表中节点的地址, 因此, IPv6 网关可以不转发该攻击报文, 无需不断解析攻击报文的 目的地址, 从而可以避免由于 DoS 攻击造成的 CPU 高负荷的问题。
当然, 除攻击报文外, 此时也存在非攻击报文需要 IPv6 网关 ( 网络设备 ) 进行转 发, 为了确保非攻击报文可以顺利到达目的地址对应的节点, 针对目的地址不是 IPv6 网关 本地邻居列表中节点的地址的 IPv6 数据报文, 可以进一步地对用于解析 IPv6 数据报文目 的地址的 NS 报文发送速率做限制, IPv6 网关可以根据限制的阀值, 在 CPU 正常处理范围内, 发送 NS 报文进行地址解析, 并按照现有的 IPv6 数据报文转发方式对这部分 IPv6 数据报文 进行转发。
与本发明实施例一~实施例四基于同一发明构思, 提供以下的装置和系统。
实施例五、
本发明实施例五提供一种网络设备, 该网络设备的结构如图 6 所示, 具体包括 :
第一发送单元 11 用于发送特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本 地链路的多播地址 FF02::1 ; 接收单元 12 用于接收本地链路节点返回的邻居公告 NA 报文 ; 更新单元 13 用于根据返回的 NA 报文更新本地邻居列表 ; 第二发送单元 14 用于确定接收到 的互联网协议版本 IPv6 数据报文目的地址是否为本地邻居列表中的节点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 禁止向该 IPv6 数据报文目 的地址对应的节点转发该 IPv6 数据报文。
第一发送单元 11 具体用于定时发送所述特定 NS 报文 ; 或者在设定第一时长内, 接 收到的 IPv6 数据报文目的地址不是本地邻居列表中的节点地址的数量大于设定的阈值时 发送所述特定 NS 报文。
所述网络设备还包括确定单元 15 :
确定单元 15 用于确定本地邻居列表中的节点的合法性 ;
第二发送单元 14 具体用于确定接收到的 IPv6 数据报文目的地址是否为本地邻居 列表中的节点地址, 若不是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址
对应的节点转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地 邻居列表中的合法节点地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数 据报文目的地址对应的节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地 址, 在设定第二时长内, 向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报 文, 并在设定第二时长到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本地邻居列表中删除 ; 或者,
确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的节点地址, 若不 是本地邻居列表中的节点地址, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 否则, 确定接收到的 IPv6 数据报文目的地址是否为本地邻居列表中的合法节点 地址, 若是本地邻居列表中的合法节点地址, 则向接收到的 IPv6 数据报文目的地址对应的 节点转发该 IPv6 数据报文, 若不是本地邻居列表中的合法节点地址, 在设定第二时长内, 禁止向接收到的 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文, 并在设定第二 时长到达时, 重新确定该节点的合法性, 在确定出该节点为非法节点时, 将该节点从本地邻 居列表中删除。
确定单元 15 具体用于通过以下方式中的至少一种确定本地链路节点的合法性 : 向本地链路节点发送 NS 报文, 在接收到该本地链路节点返回的 NA 报文时, 将该本 地链路节点确定为合法节点, 否则, 将该本地链路节点确定为非法节点 ; 或者
在确定本地链路节点与其他节点之间有双向通信时, 将该本地链路节点确定为合 法节点, 否则, 将该本地链路节点确定为非法节点。
实施例六、
本发明实施例六提供一种节点, 该节点的结构如图 7 所示, 具体包括 :
接收单元 21 用于接收网络设备发送的特定邻居请求 NS 报文, 该特定 NS 报文的目 的地址为本地链路的多播地址 FF02::1 ;
发送单元 22 用于根据接收到的特定 NS 报文, 向所述网络设备返回邻居公告 NA 报 文。
所述发送单元 22 具体确定指定的字段与接收到的特定 NS 报文中的识别字段取值 是否相同, 所述指定的字段用于标识本地邻居列表中是否包括所述网络设备 :
在指定的字段与接收到的特定 NS 报文中的识别字段取值相同时, 确定不需要回 复 NA 报文 ;
在指定的字段与接收到的特定 NS 报文中的识别字段取值不同时, 确定需要回复 NA 报文, 并在回应延迟随机字段为设定取值时, 利用随机算法确定出一段时间, 延迟该时间 后回复 NA 报文, 否则, 立即回复 NA 报文 ;
所述节点还包括配置单元 23, 用于在指定的字段与接收到的特定 NS 报文中的识 别字段取值不同时, 将所述指定的字段与接收到的特定 NS 报文中的识别字段取值配置为 相同。
所述配置单元 23 具体用于将所述指定的字段与接收到的特定 NS 报文中的识别字 段取值配置为相同之后, 启动设定的第三时长的计时, 在第三时长到达之前, 再次接收到所 述网络设备发送的报文时, 重新启动设定的第三时长的计时, 否则, 将所述指定的字段与接 收到的特定 NS 报文中的识别字段取值配置为不相同。
实施例七、
本发明实施例七提供一种数据转发系统, 该系统的结构如图 8 所示, 所述系统包 括网络设备 31 和节点 32, 其中 :
网络设备 31 用于发送特定邻居请求 NS 报文, 该特定 NS 报文的目的地址为本地链 路的多播地址 FF02::1, 接收本地链路节点返回的邻居公告 NA 报文, 并根据返回的 NA 报文 更新本地邻居列表, 确定接收到的互联网协议版本 IPv6 数据报文目的地址是否为本地邻 居列表中的节点地址, 若是, 向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报 文, 否则, 禁止向该 IPv6 数据报文目的地址对应的节点转发该 IPv6 数据报文 ;
节点 32 用于根据接收到的特定 NS 报文, 向所述网络设备返回邻居公告 NA 报文。
本实施例中的网络设备可以具有本发明实施例五提供的网络设备的各功能单元 并执行相应的功能, 本实施例中的节点可以具有本发明实施例六提供的节点的各功能单元 并执行相应的功能。
显然, 本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样, 倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围 之内, 则本发明也意图包含这些改动和变型在内。