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. wp———跳转系统设置页面的wifi、网络连接、蓝牙、飞行模式等

    通过 ConnectionSettingsType 的设置,可以跳转 到 wifi.蓝牙.飞行模式.以及网络连接 其他方案跳转 private async void Button_Click_1(ob ...

  2. socket failed:EACCES(Permission denied)

    1. 权限问题 安卓端写的TCP协议软件报错原因是建立的套接字没有限权对外连接. 在AndroidManifest.xml中,加上这一句话,取得权限. <uses-permission andr ...

  3. 171. Anagrams【medium】

    Given an array of strings, return all groups of strings that are anagrams. Notice All inputs will be ...

  4. python学习之platform模块

    该模块用来访问平台相关属性. 常见属性和方法 平台架构 platform.machine() 返回平台架构.若无法确定,则返回空字符串. >>> platform.machine() ...

  5. ny82 迷宫寻宝(一) map+queue

    题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=82 AC代码:讲解,先统计在可搜索范围内对应的钥匙数,把搜到的门存到另外的一个队列中,第一 ...

  6. 浏览器在线打开pdf

    https://www.cnblogs.com/Leo_wl/p/5735001.html#_label0 https://blog.csdn.net/li_cheng_liang/article/d ...

  7. Tomcat 下启用 https:// 访问

    步骤: 1 创建 .keystore 文件 JDK中自带了keytool工具用于生成证书文件 keytool工具在$JAVA_HOME/bin 目录下可以使用命令 keytool -genkey -a ...

  8. hdu6038 Function 函数映射

    /** 题目:hdu6038 Function 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给定一个a排列[0,n-1],一个b排列[0, ...

  9. MySQL集群系列2:通过keepalived实现双主集群读写分离

    在上一节基础上,通过添加keepalived实现读写分离. 首先关闭防火墙 安装keepalived keepalived 2台机器都要安装 rpm .el6.x86_64/ 注意上面要替换成你的内核 ...

  10. java程序调用kettle

    (1).将相应的kettle的jar包导入的java项目,主要的jar包有一下几个. (2).java程序. package cn.com.taiji.oosweb.test.web; import ...