Skip to content

nettracker

shixuemei edited this page Jan 21, 2017 · 9 revisions

探测网络连通性

一、功能描述

  • Ping方式:相当于执行ping命令

    • 功能:检查端到端的连通性,查看对端的响应时间(包括最短,最长,平均)及丢包率
    • 优缺点:探测过程快,结果简明易懂,但是无法知道链路上各节点状况
    • 适用场景:在不关心链路上各节点信息,只希望判断对端可用性的情况下推荐该方式
  • MTR方式:相当于执行MTR命令

    • 功能:查看链路上各节点的ip地址、响应时间(包括最短,最长,平均)及丢包率
    • 优缺点:能够得知链路上各节点状况,判断问题所在,但探测过程需要时间,结果相对复杂,需要相关人员具备基本的网络知识
    • 适用场景:在关注链路整体状态,希望定位问题节点的情况下推荐该方式

二、功能实现

  • 相关功能均有由类KSYNetTracker实现
  • v1.9.5及以上

三、配置项

属性/方法 默认值 说明 有效范围
action KSY_NETTRACKER_ ACTION_MTR 探测方式: Ping 或者 MTR KSY_NETTRACKER_ACTION_MTR - KSY_NETTRACKER_ACTION_PING
timeout 1000 探测报文的超时时间,单位是ms 100 - 2000
maxttl 64 探测使用的最大ttl值 1 - 0x7FFFFFFF
number 10 探测次数 1 - 20

四、消息通知

1. KSYNetTrackerOnceDoneNotification

  • 完成一次探测时发送一次通知
  • 监听到此消息后可通过routerInfo获取已完成的统计结果
  • 如果当前的探测方式为KSY_NETTRACKER_ACTION_PING,则在usrInfo字典中,关键字count指明当前的探测次数;关键字rtt表示本次探测消耗的时间,单位是ms

2. KSYNetTrackerFinishedNotification

  • 完成所有探测通知时发送此消息
  • 监听到此消息后可通过routerInfo获取全部统计结果
  • 获取到探测结果后需要调用stop方法结束本次探测

3. KSYNetTrackerErrorNotification

  • 探测过程中出现错误时发送此消息
  • 监听到此消息后,应调用stop方法结束探测

五、调用示例

1. 创建探测对象KSYNetTracker

    tracker =  [[KSYNetTracker alloc] init];

2. 监听消息

    [[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(handleTrackerNotify:)
                                                name:(KSYNetTrackerOnceDoneNotification)
                                              object:tracker];
    
    [[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(handleTrackerNotify:)
                                                name:(KSYNetTrackerFinishedNotification)
                                              object:tracker];
    
    [[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(handleTrackerNotify:)
                                                name:(KSYNetTrackerErrorNotification)
                                              object:tracker];

3. 配置属性

    tracker.action = KSY_NETTRACKER_ACTION_MTR;

4. 开始探测

    [tracker start:@"www.baidu.com"];

5. 获取探测结果

    for(KSYNetRouterInfo  *netInfo in tracker.routerInfo)
    {
        if(netInfo.ips)
        {
            j = 0;
            for(NSString *ip in netInfo.ips)
            {
                if(j == 0)
                {
                    infoLog = [infoLog stringByAppendingFormat:@"%-3d", i];
                    infoLog = [infoLog stringByAppendingFormat:@"%-16s", [ip UTF8String]];
                    infoLog = [infoLog stringByAppendingFormat:@"%-4d", netInfo.number];
                    infoLog = [infoLog stringByAppendingFormat:@"%5.1fms", netInfo.tmax];
                    infoLog = [infoLog stringByAppendingFormat:@"%5.1fms", netInfo.tmin];
                    infoLog = [infoLog stringByAppendingFormat:@"%5.1fms", netInfo.tavg];
                    infoLog = [infoLog stringByAppendingFormat:@"  %-6.1f", netInfo.tdev];
                    infoLog = [infoLog stringByAppendingFormat:@"%-4.1f\n", netInfo.loss];
                }
                else
                    infoLog = [infoLog stringByAppendingFormat:@"    %-16s\n", [ip UTF8String]];
                j++;
            }
        }
        i++;
    }

6. 结束探测

    [tracker stop];

六、补充说明

Clone this wiki locally