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

2021年09月15日 阅读数:3
这篇文章主要向大家介绍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。若是全部符合条件的接口都已被使用(即它们都有待处理的输出记录),则选择具备最先输出记录的下一跳。过程跟上面的同样。

 

下一篇: MySQL MHA