数据包三层处理流程

StoneOS的数据包三层处理流程如下图所示(Deny Session功能为关闭状态):

  1. 识别数据包的逻辑入接口,可能是一般无标签接口,也可能是子接口。从而确定数据包的源安全域。
  2. StoneOS对数据包进行合法性检查。如果源安全域配置了攻击防护功能,系统会在这一步同时进行攻击防护功能检查。
  3. 会话查询。如果该数据包属于某个已建立会话,则跳过410,直接进行第11步。
  4. 目的NATDNAT)操作。如果能够查找到相匹配的DNAT规则,则为包做DNAT标记。因为路由查询需要DNAT转换的IP地址,所以先进行DNAT操作。
  5. 路由查询。StoneOS的路由查询顺序从前到后依次为:策略路由(PBR 源接口路由(SIBR 源路由(SBR 目的路由(DBR ISP路由。此时,系统得到了数据包的逻辑出接口和目的安全域。
  6. NATSNAT)操作。如果能够查找到相匹配的SNAT规则,则为包做SNAT标记。
  7. 下一跳VR查询。如果下一跳为VR,则继续查看指定的下一跳VR是否超出最大VR数限制(当前版本系统仅允许数据包最多通过3VR),如果超过则丢弃数据包,如果未超过,返回4;如果下一跳不是VR,则继续进行下一步策略查询。
  8. 策略查询。系统根据数据包的源安全域、目的安全域、源IP地址和端口号、目的IP地址和端口号以及协议,查找策略规则。如果找不到匹配的策略规则,则丢弃数据包;如果找到匹配的策略规则,则根据规则指定的行为进行处理,分别是:
  1. 第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
  2. 会话建立。
  3. 如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
  4. 应用层行为控制。根据确定的应用类型,系统将在此执行配置的Profile组和ALG功能。
  5. 根据会话中记录的信息,例如NAT标记等,执行相应的处理操作,并且将数据包转发到出接口。