实验:配置shortcut方式DSPN(OSPF路由协议)

需求和拓扑

某大型企业有总部(Hub)和多个分支(Spoke1、Spoke2……,举例中仅使用两个分支),分布在不同地域,总部和分支的子网环境会经常出现变动。分支采用动态地址接入公网。企业现网网络规划使用OSPF路由协议。

现在用户希望能够实现分支之间的PN互联。

操作步骤

1、配置接口地址划分安全区域

2、配置安全策略

//f1f2f3
security-policyrule name 1source-zone dmzsource-zone trustdestination-zone dmzdestination-zone trustaction permitrule name 2source-zone localsource-zone untrustdestination-zone localdestination-zone untrustservice greservice ospfaction permit

3、配置公网动态路由确保公网路由可达

//f1
ospf 1area 0.0.0.0network 1.1.1.10 0.0.0.0
//f2
ospf 1area 0.0.0.0network 1.1.2.10 0.0.0.0
//f3
ospf 1area 0.0.0.0network 1.1.3.10 0.0.0.0
//r
ospf 1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 1.1.2.1 0.0.0.0 network 1.1.3.1 0.0.0.0

r1上 检查ospf配置

<r>dis ospf peer briOSPF Process 1 with Router ID 1.1.1.1Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                        Neighbor id      State    0.0.0.0          GigabitEthernet0/0/0             172.16.1.1       Full        0.0.0.0          GigabitEthernet0/0/1             172.16.1.2       Full        0.0.0.0          GigabitEthernet0/0/2             172.16.1.3       Full        --------------------------------------------------------

4、 配置私网ospf

//f1(hub)
ospf 2area 0.0.0.0network 172.16.1.1 0.0.0.0network 192.168.0.0 0.0.0.255
//f2(spoke)
ospf 2area 0.0.0.0network 172.16.1.2 0.0.0.0network 192.168.1.0 0.0.0.255
//f3(spoke)
ospf 2area 0.0.0.0network 172.16.1.3 0.0.0.0network 192.168.2.0 0.0.0.255

注意要与公网ospf进程不要冲突,另外宣告的网段是私网网络和隧道接口地址。

注意如果没有配置hub的nhrp entry multicast dynamic则hub将不能发送组播报文从而无法建立ospf邻居关系。所以此时还不能建立ospf邻居关系。

5、配置tunnel隧道

//f1
interface Tunnel0ip address 172.16.1.1 255.255.255.0tunnel-protocol gre p2mpsource GigabitEthernet1/0/1ospf network-type p2mp//相比非shortcut设置ospf网络类型为p2mpnhrp entry multicast dynamic//配置将从Tunnel0接口注册的分支节点动态加入到总部的NHRP组播成员表。nhrp redirect//配置nhrp 重定向
//f2
interface Tunnel0ip address 172.16.1.2 255.255.255.0tunnel-protocol gre p2mp//配置mgresource GigabitEthernet1/0/1nhrp entry 172.16.1.1 1.1.1.10 register//手动触发nhrp注册ospf network-type p2mp//相比非shortcut设置ospf网络类型为p2mpnhrp shortcut//配置nhrp shortcut方式
//f3
interface Tunnel0ip address 172.16.1.3 255.255.255.0tunnel-protocol gre p2mpsource GigabitEthernet1/0/1nhrp entry 172.16.1.1 1.1.1.10 registerospf network-type p2mp//相比非shortcut设置ospf网络类型为p2mpnhrp shortcut//配置nhrp shortcut方式

在dspn中部署动态路由协议后,分支或总部需要与自身组播列表中的成员建立邻居关系,并学习彼此的路由信息,以便在对端节点发送过来组播报文时,本端节点能够对报文进行复制并根据组播成员表进行发送,进而实现节点间报文的交互,因此,在分支与总部上需要配置各自的nhrp组播成员列表。

我们在这里将ospf进程2的网络类型配置成了p2mp,在该类型的网络中,除了hello报文是组播发送外,其他报文比如dd、lsr、lsu、lsack都是以单播形式发送的。在broadcast中,hello、lsu、lsack都是组播发送的,其他的比如dd、lsr是单播发送的。

检查ospf邻居建立情况

[f1]dis ospf 2 peer bri
2022-03-05 14:05:34.230 OSPF Process 2 with Router ID 192.168.0.254Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                        Neighbor id      State    0.0.0.0          Tunnel0                          172.16.1.2       Full        0.0.0.0          Tunnel0                          172.16.1.3       Full        ----------------------------------------------------------------------------Total Peer(s):     2

可以看到f1是和f2、f3建立了ospf的full的邻接关系的,但是f2和f3之间会不会建立ospf的邻接关系呢?单纯在p2mp网络中,完全是没有问题的。但是我们看一下就会知道并不是这样的。

[f3]dis ospf 2 peer bri
2022-03-07 15:43:46.010 OSPF Process 2 with Router ID 172.16.1.3Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                        Neighbor id      State    0.0.0.0          Tunnel0                          172.16.1.1       Full        ----------------------------------------------------------------------------Total Peer(s):     1

发现只和f1即hub建立ospf邻接关系,甚至和其他spoke都不会建立邻居关系,为什么呢?ospf2是封装在gre中的,外部是单播报文。

为什么hub可以和spoke互发呢?因为spoke上面配置了hub的静态的nhrp,并触发了向hub的注册报文,使得hub上面产生spoke的nhrp映射。

<f1>dis nhrp peer all
2022-03-08 01:10:38.060
------------------------------------------------------------------------------
Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag
--------------------------------------------------------------------------------
172.16.1.2      32    1.1.2.10        172.16.1.2      registered      up|unique
--------------------------------------------------------------------------------
Tunnel interface: Tunnel0
Created time    : 00:22:39
Expire time     : 01:37:21
HostName        : f2
HostEsn         : 7979408E73D1387FA4E0FF91F63F0F24
--------------------------------------------------------------------------------
Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag
--------------------------------------------------------------------------------
172.16.1.3      32    1.1.3.10        172.16.1.3      registered      up|unique
--------------------------------------------------------------------------------
Tunnel interface: Tunnel0
Created time    : 00:22:38
Expire time     : 01:37:22
HostName        : f3
HostEsn         : 35D473AA24273895AB73F571D68B7A61
Number of nhrp peers: 2

验证和分析

1、抓包检查

可以看到手动使能了nhrp注册后,注册报文通过公网发给hub,给的隧道地址和公网地址的映射关系。

但是hub和spoke之间是分别建立邻居关系的,不会存在spoke和spoke建立邻居的情况。这是因为我们的ospf是p2mp类型的。

<f1>dis ospf 2 peer bri
2022-03-07 15:38:18.490 OSPF Process 2 with Router ID 172.16.1.1Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                        Neighbor id      State    0.0.0.0          Tunnel0                          172.16.1.2       Full        0.0.0.0          Tunnel0                          172.16.1.3       Full        ----------------------------------------------------------------------------Total Peer(s):     2[f2]dis ospf 2 peer bri
2022-03-07 15:37:55.720 OSPF Process 2 with Router ID 172.16.1.2Peer Statistic Information----------------------------------------------------------------------------Area Id          Interface                        Neighbor id      State    0.0.0.0          Tunnel0                          172.16.1.1       Full        ----------------------------------------------------------------------------Total Peer(s):     1

实验拓扑和完整配置已打包,回复dspn4获得。

shortcut方式的基本原理

dspn的shortcut方式建立同样分为3步。

1、建立spoke与hub之间的mgre隧道

目的是打通分支到分支报文转发的通道,使得一端分支的报文可以借助hub转发到另一端分支。dspn在spoke与hub之间建立的mgre隧道是一种静态隧道,无论spoke与hub间有没有流量经过,该隧道一直存在。

1 spoke向hub注册

2 hub向spoke注册应答

2、分支间路由学习

目的是生成一端分支到另一端分支的路由。

在shortcut方式下,源分支到目的分支子网的路由下一跳为总部的tunnel地址,实现所有访问目的分支的流量全部指向总部hub。分支间不需要相互学习路由,通过总部对分支路由汇聚后进行通告,该路由学习方式适用于哪些网络规模大、分支较多的大型网络。

3、建立spoke与spoke之间的mgre隧道

目的是建立用于分支间直接通信的通道。当一个分支向另一个分支转发数据报文时,如果源spoke找不到目的spoke的公网地址,则会触发dspn建立spoke与spoke之间的mgre隧道。这是一种动态隧道,靠流量保活。

在shortcut方式下,所有spoke的路由下一跳都是hub的tunnel地址,源spoke无法学习到目的spoke的tunnel地址,因此,源spoke只能根据报文的目的地址来查找目的spoke的公网地址,生成目的spoke的子网地址与公网地址的nhrp映射表。

shortcut方式完整过程

当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:

  1. Spoke1收到其下用户发往Spoke2下用户的数据报文后,根据报文目的地址(192.168.2.0)在路由表中找到下一跳172.16.1.1(Hub的Tunnel地址),并在NHRP映射表中找到172.16.1.1对应的公网地址1.1.1.10(Hub的公网地址),就将数据报文转发给Hub。

<f2>dis ip routing-table protocol ospf
2022-03-08 06:33:14.510
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPFDestinations : 6        Routes : 6        OSPF routing table status : <Active>Destinations : 6        Routes : 6Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface1.1.1.0/24  OSPF    10   2           D   1.1.2.1         GigabitEthernet
1/0/11.1.3.0/24  OSPF    10   2           D   1.1.2.1         GigabitEthernet
1/0/1172.16.1.1/32  OSPF    10   1562        D   172.16.1.1      Tunnel0172.16.1.3/32  OSPF    10   3124        D   172.16.1.1      Tunnel0192.168.0.0/24  OSPF    10   1563        D   172.16.1.1      Tunnel0192.168.2.0/24  OSPF    10   3125        D   172.16.1.1      Tunnel0OSPF routing table status : <Inactive>Destinations : 0        Routes : 0
<f2>dis nhrp peer all
2022-03-08 06:35:22.300
--------------------------------------------------------------------------------
--
Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
--
172.16.1.1      32    1.1.1.10        172.16.1.1      hub             up        --------------------------------------------------------------------------------
--
Tunnel interface: Tunnel0
Created time    : 00:05:02
Expire time     : --
HostName        : f1
HostEsn         : 4E75B8EA2D623566B899A81A15F76FF0

  1. Hub收到Spoke1转发的数据报文后:

    • 将此报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。
    • 检查发现接收和发送数据报文的Tunnel接口属于同一个NHRP域,就构建并向Spoke1发送NHRP重定向报文(携带Hub的Tunnel地址和公网地址,以及需要解析的数据报文的目的地址192.168.2.0)。

  2. Spoke1收到NHRP重定向报文后,构建并向Hub发送NHRP地址解析请求报文(携带Spoke1的Tunnel地址172.16.1.2和公网地址1.1.2.10,以及需要解析的数据报文的目的地址192.168.2.0)。

  3. Hub收到NHRP地址解析请求报文后转发给Spoke2处理。

  4. Spoke2收到NHRP地址解析请求报文后:
    • 从NHRP地址解析请求中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中

      <f3>dis nhrp peer all
      2022-03-08 06:40:27.130
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.1      32    1.1.1.10        172.16.1.1      hub             up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 00:10:12
      Expire time     : --
      HostName        : f1
      HostEsn         : 4E75B8EA2D623566B899A81A15F76FF0
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.2      32    1.1.2.10        172.16.1.2      remote          up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 00:06:16
      Expire time     : 01:53:44
      HostName        : f2
      HostEsn         : 5F538E912C4B33C3B546C7DBC1EDD435
      
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的子网地址192.168.2.0、Spoke2的Tunnel地址172.16.1.3和公网地址1.1.3.10)。

  5. Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的子网地址和公网地址,更新到自己的NHRP映射表中,Spoke1与Spoke2之间的动态mGRE隧道随即建立。

    <f2>dis nhrp peer allProtocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      192.168.2.1     32    1.1.3.10        172.16.1.3      remote-network  up        Tunnel interface: Tunnel0
    Created time    : 00:01:11
    Expire time     : 01:58:49
    HostName        : f3
    HostEsn         : DF530E673A753DFC81D7B3672C4AD3E2
    

    当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)查找NHRP映射表,找到Spoke2的公网地址1.1.2.10,即可根据公网地址1.1.2.10将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。

当Spoke2下的用户首次访问Spoke1下的用户时,也将触发Spoke2与Spoke1之间建立动态mGRE隧道,其过程类似Spoke1。

比较非shortcut方式下的完整过程

当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:

  1. Spoke1收到其下用户发往Spoke2的数据报文后:

    • 根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2(Spoke2的Tunnel地址),但在NHRP映射表中没有查找10.1.1.2对应的公网地址,就默认将该数据报文直接转发给Hub。

      [f2]dis ip routing-table protocol ospf
      2022-03-08 06:15:43.870
      Route Flags: R - relay, D - download to fib
      ------------------------------------------------------------------------------
      Public routing table : OSPFDestinations : 4        Routes : 4        OSPF routing table status : <Active>Destinations : 4        Routes : 4Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface1.1.1.0/24  OSPF    10   2           D   1.1.2.1         GigabitEthernet
      1/0/11.1.3.0/24  OSPF    10   2           D   1.1.2.1         GigabitEthernet
      1/0/1192.168.0.0/24  OSPF    10   1563        D   172.16.1.1      Tunnel0192.168.2.0/24  OSPF    10   1563        D   172.16.1.3      Tunnel0OSPF routing table status : <Inactive>Destinations : 0        Routes : 0
      
      [f2]dis nhrp peer all
      2022-03-08 06:18:18.270
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.1      32    1.1.1.10        172.16.1.1      hub             up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 04:58:30
      Expire time     : --
      HostName        : f1
      HostEsn         : 728171E1AC4B3828AB4BBE44CD166209Number of nhrp peers: 1
      

    • 构建并向Hub发送NHRP地址解析请求报文,请求10.1.1.2对应的公网地址。
  2. Hub收到Spoke1发送的数据报文和NHRP地址解析请求报文后,将报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。

  3. Spoke2收到NHRP地址解析请求报文后:

    • 从NHRP地址解析请求报文中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中

      <f3>dis nhrp peer all
      2022-03-08 06:23:51.900
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.1      32    1.1.1.10        172.16.1.1      hub             up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 05:03:59
      Expire time     : --
      HostName        : f1
      HostEsn         : 728171E1AC4B3828AB4BBE44CD166209
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.2      32    1.1.2.10        172.16.1.2      remote          up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 00:04:31
      Expire time     : 01:55:29
      HostName        : f2
      HostEsn         : 4E9D2AA582743BDE81C3E4D9981D64BA
      --------------------------------------------------------------------------------
      --
      Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
      --
      172.16.1.3      32    1.1.3.10        172.16.1.3      local           up        --------------------------------------------------------------------------------
      --
      Tunnel interface: Tunnel0
      Created time    : 00:04:31
      Expire time     : 01:55:29
      HostName        : f3
      HostEsn         : 496CB74FEC103B219C4704B7147AA738Number of nhrp peers: 3
      
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的Tunnel地址172.16.1.3和公网地址1.1.2.10)。
  4. Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的Tunnel地址和公网地址,更新到自己的NHRP映射表中,Spoke1与Spoke2之间的动态mGRE隧道随即建立。

    [f2]dis nhrp peer all
    2022-03-08 06:26:36.560
    --------------------------------------------------------------------------------
    --
    Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
    --
    172.16.1.1      32    1.1.1.10        172.16.1.1      hub             up        --------------------------------------------------------------------------------
    --
    Tunnel interface: Tunnel0
    Created time    : 05:06:48
    Expire time     : --
    HostName        : f1
    HostEsn         : 728171E1AC4B3828AB4BBE44CD166209
    --------------------------------------------------------------------------------
    --
    Protocol-addr   Mask  NBMA-addr       NextHop-addr    Type            Flag      --------------------------------------------------------------------------------
    --
    172.16.1.3      32    1.1.3.10        172.16.1.3      remote          up        --------------------------------------------------------------------------------
    --
    Tunnel interface: Tunnel0
    Created time    : 00:07:16
    Expire time     : 01:52:44
    HostName        : f3
    HostEsn         : 496CB74FEC103B219C4704B7147AA738Number of nhrp peers: 2
    

当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)在路由表中找到下一跳172.16.1.3,再根据172.16.1.3在NHRP映射表中找到公网地址1.1.3.10,即可按照公网地址1.1.3.10将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。

对比可以看到,shortcut方式下,spoke的nhrp列表中会产生一个remote-network类型的映射关系,对应了远端spoke下的私有子网和公网地址的对应关系。后续报文的转发直接查nhrp得到封装的公网地址,而在非shortcut方式下,spoke的nhrp列表没有这样的映射关系,而是使用了远端spoke的隧道地址和公网地址的对应关系,首先是查找路由表得到远端spoke下的私有子网的下一跳地址是远端spoke的隧道地址,再根据这个隧道地址去找nhrp得到封装的公网地址。

HCIE-Security Day25:DSPN+NHRP+Mgre:实验(四)配置shortcut方式DSPN(OSPF路由协议)相关推荐

  1. 实验四 配置默认路由

    要求: 配置静态路由,实现全网互通. 基础配置 1. 设置路由器R1和R2的IP地址: 2. 为PC1-PC3设置IP地址,并将网关指为R1的F0/0的地址1.251,将PC4的网关设为3.1. 3. ...

  2. 实验四 恶意代码技术

    学   号201421460014 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学 ...

  3. 实验四 恶意代码技术

    实验报告 四 学   号   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 ...

  4. 实验四 恶意代码

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 冷其航 年级 14级 区队 ...

  5. 网络对抗技术—-网络对抗实验四

    学   号:201421430008   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  6. 实验四恶意代码分析技术 201421430029

    学   号:201421430029   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  7. 网络对抗技术 实验四

    学号:201521430027 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓 ...

  8. 网络对抗技术——实验四:恶意代码技术

      中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 王天宇 年级 2015级 ...

  9. 网络对抗技术_实验四_恶意代码技术

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 韩磊 年级 2014 区队 ...

  10. 实验四——恶意代码技术

    学   号   201421430035   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术 ...

最新文章

  1. [KubeCon+CloudNativeCon China 2018] 在Kubernetes上运行区块链服务(BaaS)
  2. L1-046. 整除光棍(模拟除法)
  3. linux内核创建ubi,UBI文件系统制作和挂载
  4. 短时傅里叶分析:spectrogram函数
  5. Android中使用Handler(消息机制)造成内存泄露的分析和解决
  6. 机器学习实验中的编程技术(part2)--numpy
  7. 小程序引用其他页面js_来聊聊小程序页面之间如何通信
  8. python mac读取 文件属性_从Python获取和设置mac文件和文件夹查找器标签
  9. 升级浏览器_星愿浏览器升级至6.3.2000.2001
  10. ThreadLocal 简介 案例 源码分析 MD
  11. springMVC中数据流解析与装载
  12. window.location.href 跳转失败
  13. poj 2728 Desert King 01分数规划
  14. 2019软科【世界一流计算机学科排名】公布!
  15. Matrix Factorization
  16. mkisofs命令制作光盘ISO
  17. xgboost 怎么读_你真的会读书了吗?五本书让你会读书,读好书,好读书!
  18. 自然人股东分红必须要缴纳20%个税吗?有三种真不用
  19. 震惊!没想到你居然是这样的for循环(UC打钱!)
  20. foo/bar/baz/qux

热门文章

  1. 关系抽取之远程监督算法:别再跟我提知识图谱(上篇)
  2. 综述 | 知识图谱技术综述(下)
  3. 即将涨价 | 带学《机器学习》西瓜书+带打天池和达观杯AI大赛
  4. 详解循环神经网络RNN(实践篇)
  5. python接口自动化 post请求,body 带headers参数
  6. resnet18实现cifar10分类
  7. 抽丝剥茧,在实践中深入学习QTP
  8. 87相似标准形08——Jordan标准形
  9. Git版本控制:Git查阅、撤销文件修改和撤销文件追踪
  10. sklearn学习笔记之metrics