• NFD转发进程处理Interest包的流程


    函数调用:afterReceiveInterest (const Interest& interest, const FaceEndpoint& ingress,  const shared_ptr<pit::Entry>& pitEntry)


    tips:以下内容结合下面图片搭配使用效果会更好!

    首先检查在pit表中是否有记录:
    •     false:

    faceToUse = getBestFaceForForwarding(interest, ingress.face, fibEntry, pitEntry) 寻找所有的可用的下一跳,然后获取接口的信息
    函数过程:设置一个时钟,从fib表中遍历所有可用的下一跳,插入一个表中,排序:rankedFaces.insert(下一跳的接口、上一次的rtt、srtt、cost)
    最后根据
    如果没有可用的下一跳,输出:从xx接口进入的一个新的interest没有下一跳,并且执行sendNoRouteNack
    如果有可用的下一跳,
     
    forwardInterest(const Interest& interest, Face& outFace, const fib::Entry& fibEntry, const shared_ptr<pit::Entry>& pitEntry)  
    函数过程:首先获取转发的Interest的名字以及转发出去的接口,auto* outRecord = sendInterest(interest, outFace, pitEntry) 转发并记录
    m_measurements.getOrCreateFaceInfo(fibEntry, interestName, faceId); 在fib表中记下转发Interest包的名字以及接口。
    重新刷新每个接口的时间,因为这次转发已经结束了。
    返回一个记录Outrecord
     
    sendProbe(const Interest& interest, const FaceEndpoint& ingress, const Face& faceToUse, const fib::Entry& fibEntry, const shared_ptr<pit::Entry>& pitEntry) 发送一个探测消息,
    该函数里面还有一个forwardInterest,为什么?(测试该接口是否可以转发,如果可以则转发)
     
    • true

    首先也还是获取一下最好的转发接口,faceToUse = getBestFaceForForwarding
    检查该接口的RetxSuppressionResult状态,如果返回的结果是suppression 抑制,不进行转发
    如果不抑制的话,执行forwardInterest,返回一个Outrecord,RetxSuppressionResult,再进行一次检测,如果outRecord && suppressResult == RetxSuppressionResult::FORWARD,可以转发(不需要探测)
    retx 在抑制期之后到达:转发它但不探测,因为在新接收到它时针对此兴趣进行了较早的探测
     
    没有可用的faceToUse。如果所有符合条件的接口都已被使用(即它们都有待处理的输出记录),则选择具有最早输出记录的下一跳。过程跟上面的一样。

    谁人畏惧现实,谁人将从梦中消失
  • 相关阅读:
    MD5算法MFC实现
    asp.net2.0新特点
    file format
    C专家编程第二章学习笔记
    Bye Czech golden generation
    中间层
    学完谭C之后
    C语言学习之路
    荀子劝学篇
    C语言常用转义字符表
  • 原文地址:https://www.cnblogs.com/laysfq/p/15273038.html
Copyright © 2020-2023  润新知