加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux内核分析 - 网络[九]:邻居表

发布时间:2016-01-23 17:24:38 所属栏目:Linux 来源:网络整理
导读:内核版本:2.6.34 这部分的重点是三个核心的数据结构-邻居表、邻居缓存、代理邻居表,以及NUD状态转移图。 总的来说,要成功添加一条邻居表项,需要满足两个条

下图是对上面表项处于NUD_REACHABLE状态时,定时器到期后3种情形的示意图:

Linux内核分析 - 网络[九]:邻居表

当neigh处于 NUD_DELAY状态时,根据NUD的状态转移图,它有二种转移可能,分别对应下面二个条件语句。

-如果超时,期间收到对方报 文,迁移至NUD_REACHABLE,记录下次检查时间到next;

-如果超时,期间未收到对方的报文,迁移至NUD_PROBE,记录下次 检查时间到next。

在NUD_STALE->NUD_PROBE中间还插入NUD_DELAY状态,是为了减少ARP包的数目,期望在定时时间内会收 到对方的确认报文,而不必再进行地址解析。

else if (state & NUD_DELAY) {     
 if (time_before_eq(now,     
   neigh->confirmed + neigh->parms->delay_probe_time)) {     
  NEIGH_PRINTK2("neigh %p is now reachable.n", neigh);     
  neigh->nud_state = NUD_REACHABLE;
  neigh->updated = jiffies;     
  neigh_connect(neigh);     
  notify = 1;     
  next = neigh->confirmed + neigh->parms->reachable_time;     
 } else {     
  NEIGH_PRINTK2("neigh %p is probed.n", neigh);     
  neigh->nud_state = NUD_PROBE;     
  neigh->updated = jiffies;     
  atomic_set(&neigh->probes, 0);     
  next = now + neigh->parms->retrans_time;     
 }     
}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读