1、封包从L3至L2的传送过程如下所示:

  • 本地主机的路由子系统选择L3目的地址(下一个跃点)。
  • 根据路由表,如果下一个跃点在同一个网络中,邻居层就把目的L3地址解析为跃点的L2地址。这个关联会被放入缓存中以便再次使用。
  • 最后,调用一个函数,例如dev_queue_xmit负责完成发送,将封包传递给流量控制或者Qos层。

2、当收到solicitation请求的主机启动桥接功能时,该主机对其不进行处理,而是按照网桥配置,将其从合适的接口转发出去,桥接功能在邻居协议之前起作用。

3、从邻居的角度来说,如果内核有证据表明接收者可以正确地接收地址是其单播地址的帧,那么这台主机就认为是可到达主机,反之亦然。换句话说,内核认为一个邻居可到达时,表示的是双向可到达性。

4、NUD状态转换图如下所示:

状态NUD_NOARP和NUD_PERMANENT被指定后将永远不会改变,其中NUD_NOARP表示不要任何协议进行L3到L2的地址映射的邻居。

NUD_PERMANENT表示邻居的L2地址是静态配置(使用用户空间命令),因此不需要邻居协议进行地址解析。

5、当在进行可到达性确认时,缓存中的信息仍然是可以使用的,因此假定其仍然是有效的。NUD_STALE,NUD_DELAY和NUD_PROBE

三个NUD状态都支持可到达性确认。只有一个封包要发送到相关的邻居时,才启动可到达性确认。

当缓存中包含一个邻居项的地址,但是该地址已经有一段时间没进行确认了,就会进入NUD_STALE状态,当下次有一个封包要达到该邻居时

就会进入NUD_DELAY状态,该状态会等待一段时间,这期间不发送solicitation请求,只等待确认,超时之后进入NUD_PROBE状态。在

NUD_PROBE状态不断发送solicitation请求进行可到达性确认。

6、只有当前状态是NUD_STALE时,才能使用外部认证。需要注意的是,NUD_DELAY/NUD_PROBE和NUD_NONE态可以转换到NUD_REACHABLE

态,但是从NUD_NONE态到NUD_REACHABLE态,需要完整的可到达性验证,而从NUD_DELAY/NUD_PROBE态转换过去,任何满足条件的验证都可以。

7、从一台主机发往另一台主机的所有封包的L2帧头都是相同的。L3包头可能不同,因为不同的封包有不同的ID;如果产生碎片,也会有不同的碎片偏移量。

因此内核需要缓存L2帧头到一个叫hh_cache的结构中。

《深入理解Linux网络技术内幕》阅读笔记 --- 邻居子系统的更多相关文章

  1. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  2. 深入理解linux网络技术内幕读书笔记(十)--帧的接收

    Table of Contents 1 概述 1.1 帧接收的中断处理 2 设备的开启与关闭 3 队列 4 通知内核帧已接收:NAPI和netif_rx 4.1 NAPI简介 4.1.1 NAPI优点 ...

  3. 深入理解linux网络技术内幕读书笔记(九)--中断与网络驱动程序

    Table of Contents 1 接收到帧时通知驱动程序 1.1 轮询 1.2 中断 2 中断处理程序 3 抢占功能 4 下半部函数 4.1 内核2.4版本以后的下半部函数: 引入软IRQ 5 ...

  4. 深入理解linux网络技术内幕读书笔记(四)--通知链

    Table of Contents 1 概述 2 定义链 3 链注册 4 链上的通知事件 5 网络子系统的通知链 5.1 包裹函数 5.2 范例 6 测试实例 概述 [注意] 通知链只在内核子系统之间 ...

  5. 深入理解linux网络技术内幕读书笔记(二)--关键数据结构

    Table of Contents 1 套接字缓冲区: sk_buff结构 1.1 网络选项及内核结构 1.2 结构说明及操作函数 2 net_device结构 2.1 MTU 2.2 结构说明及操作 ...

  6. 深入理解linux网络技术内幕读书笔记(八)--设备注册与初始化

    Table of Contents 1 设备注册之时 2 设备除名之时 3 分配net_device结构 4 NIC注册和除名架构 4.1 注册 4.2 除名 5 设备初始化 6 设备类型初始化: x ...

  7. 深入理解linux网络技术内幕读书笔记(七)--组件初始化的内核基础架构

    Table of Contents 1 引导期间的内核选项 2 注册关键字 3 模块初始化代码 引导期间的内核选项 linux运行用户把内核配置选项传给引导记录,然后引导记录再把选项传给内核. 在引导 ...

  8. 深入理解linux网络技术内幕读书笔记(五)--网络设备初始化

    Table of Contents 1 简介 2 系统初始化概论 2.1 引导期间选项 2.2 中断和定时器 2.3 初始化函数 3 设备注册和初始化 3.1 硬件初始化 3.2 软件初始化 3.3 ...

  9. 深入理解linux网络技术内幕读书笔记(六)--PCI层与网络接口卡

    Table of Contents 1 本章涉及的数据结构 1.1 pci_device_id结构 1.2 pci_dev结构 1.3 pci_driver结构 2 PCI NIC设备驱动程序的注册 ...

  10. 深入理解linux网络技术内幕读书笔记(一)--简介

    Table of Contents 1 基本术语 1.1 本书常用的缩写 2 引用计数 2.1 引用计数函数 3 垃圾回收 3.1 异步 3.2 同步 4 函数指针 4.1 缺点 5 goto语句 5 ...

随机推荐

  1. IOS使用Charts

    近期项目中要做图表功能,为了降低开发量採用的是H5+ECharts来做.这里说一下IOS中怎样使用ECharts以及遇到的问题. 网络模块化单文件引入 <!DOCTYPE html> &l ...

  2. 终端I/O termios属性设置 tcsetattr设置(转)

    终端I/O有两种不同的工作方式: 规范方式输入处理.在这种方式中,终端输入以行为单位进行处理.对于每个读要求,终端驱动程序最多返回一行. 非规范方式输入处理.输入字符不以行为单位进行装配. 如果不作特 ...

  3. iptables简单配置

    iptables简单配置 分类: Linux 安全2010-10-20 16:56 4241人阅读 评论(0) 收藏 举报 input防火墙tcpfilterubuntuservice # iptab ...

  4. CodeForces 584D Dima and Lisa

    1e9 以内的判断一个数是否是素数,可以直接朴素的暴力.   这倒题除了考虑1e9以内的素数的判断,还有一个歌德巴赫猜想:任意一个奇数都可一分解为三个素数的和. 第三个结论:素数是密集的,1e9以内, ...

  5. jQuery 时间戳转化成时间

    //时间转换  function   formatDate(now)   { var   now= new Date(now);      var   year=now.getFullYear();  ...

  6. 数据库设计(三)11 important database designing rules which I follow

    原文地址:https://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo 麻辣个

  7. php服务器端与android客户端通信问题

    http://www.oschina.net/question/616446_90760

  8. 13 memcache服务检查

    [root@cache01 scripts]# vim mem_check.sh #!/bin/bash count_mem=$(netstat -lntup|grep memcached|wc -l ...

  9. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  10. 第二百二十三节,jQuery EasyUI,ComboBox(下拉列表框)组件

    jQuery EasyUI,ComboBox(下拉列表框)组件,可以远程加载数据的下拉列表组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 C ...