Linux内核邻居子系统,《深入理解Linux网络技术内幕》阅读笔记 --- 邻居子系统

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

本地主机的路由子系统选择L3目的地址(下一个跃点)。

根据路由表,如果下一个跃点在同一个网络中,邻居层就把目的L3地址解析为跃点的L2地址。这个关联会被放入缓存中以便再次使用。

最后,调用一个函数,例如dev_queue_xmit负责完成发送,将封包传递给流量控制或者Qos层。

3fd8f3f38f1a72fc1c3a5f804b42e5a6.png

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

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

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

652c3e5daaa5a3f2ce7ec7714f299026.png

状态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网络技术内幕读书笔记(三)--用户空间与内核的接口

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

C# 获取时间差(几天前,几小时前,几分钟前,几秒前)

#region 获取时间差string GetTime(BsonString getTime) /// /// 获取时间差 /// / ...

word文档中的字号和磅的对应关系

字号 磅 初号 42 小初 36 一号 26 小一 24 二号 22 小二 18 三号 16 小三 15 四号 14 小四 12 五号 10.5 小五 9 六号 7.5 小六 6.5 七号 5.5

C# 正则表达式 匹配IP地址

\b(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])\b

Qt之QtSoap(访问WebService)

http://blog.csdn.net/u011012932/article/details/51673800

birt 运行环境搭建(部署到tomcat)

最近一直在研究eclipse的birt,各种坑~~~~(>_

twsited(4)--不同模块用redis共享以及用web发送数据到tcpserver

上一章开头我们说,要连接之前flask系列文章中的用户,结果篇幅不够,没有实现. 今天我们把它实现一下.话说,不同模块之间,该如何联系在一起,通常都是mysql.redis.rabbitmq还有RPC ...

【Linux编程】存储映射I/O

存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读.写操作就是对文件的读.写操作,从而能够不再使用read.write系统调用. 将文件映射到存储区的函数由mmap完毕,函数原型 ...

redis的配置详解

redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice" Redis 的配置 ...

html中的锚点

一.页面内跳转的锚点设置 页面内的跳转需要两步: 方法一: ①:设置一个锚点链接去找喵星人:(注意:href属性的属 ...

java 文件目录树

1. 目标格式,使用tree命令时,目录树格式如下. public class TreeTest { public static void main(String[] args) { File roo ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值