Linux内核分析 - 网络[十]:ARP杂谈
内核版本:2.6.34
杂谈一:重复地址检测
Linux协议栈中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。
- /* Special case: IPv4 duplicate address detection packet (RFC2131) */
- if (sip == 0) {
- if (arp->ar_op == htons(ARPOP_REQUEST) &&
- inet_addr_type(net, tip) == RTN_LOCAL &&
- !arp_ignore(in_dev, sip, tip))
- arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
- dev->dev_addr, sha);
- goto out;
- }
而根据RFC826中描述,正常的重复地址检测报文特征是sip==tip
The gratuitous ARP packet is an ARP request with both sender's and the target's IP address fields containing the configured IP address.
A gratuitous ARP packet on an Ethernet is defined as
48.bit Destination Address = 0xffffffffffff (broadcast)
48.bit Source Address = Hardware adderss of interface
16.bit Frame type = 0x806 (ARP)
----------------------
16.bit Hardware type = 0x1 (Ethernet)
16.bit Protocol Type = 0x800 (IP)
8.bit Hardware Address size = 6
8.bit Protocol Address size = 4
16.bit Opcode = 1 (Request)
48.bit Sender Ethernet Address = Hardware address of interface
32.bit Sender IP Address = Configured IP address
48.bit Target Ethernet Address = Don't care
32.bit Target IP Address = Configured IP Address
问题:
linux协议栈除了对RFC2131规定的DHCP服务器使用的地址检测格式进行响应,对RFC826中规定的gratuitous arp报文不作处理,该报文会被协议栈直接丢弃掉。
实际情况是,在启动linux网络或配置新的IP时,Linux Host不会进行重复地址检测,并且,对于其它主机发来的重复地址检测报文也不会处理。
测试环境如下:
Linux Host的IP为192.168.1.1,然后配置Windows Host的IP为192.168.1.1,Windows Host会发送gratuitous arp,但Linux Host并不会回应,默许了两个重复地址的存在。[谁能帮忙解释下,感激]
杂谈2:NUD状态转移的实际理解
根据NUD的状态转移,实际测试两种情况:NUD_INCOMPLETE和NUD_PROBE。
NUD_INCOMPLETE
Linux Host随便telnet一个没有使用的IP1,协议栈会为会IP1创建一个邻居表项,状态由NUD_NONE迁移到NUD_INCOMPLETE,具体的协议栈流程在上篇ARP[http://blog.csdn.net/qy532846454/article/details/6806197]中分析的。
在Linux Host上telnet XX.XX.86.198,捕获到的发包状况如下:
这三个报文是在进入NUD_INCOMPLETE状态后,尝试了3次ARP广播(因为还未收到对方报文),对应arp_tbl中的参数mcast_probe=3次数,每次尝试间的时间间隔近似1s,对应arp_tbl中的参数retrans_time = 1HZ。
NUD_PROBE
NUD_PROBE测试复杂一点,先由一台Host1(IP2)向Linux Host发送arp request请求,协议栈会为IP2创建一个邻居表项,状态由NUD_NONE -> NUD_STALE,然后Linux Host会响应request,状态由NUD_STALE -> NUD_DELAY -> NUD_PROBE,具体的协议栈流程在上篇ARP[http://blog.csdn.net/qy532846454/article/details/6806197]中分析的。
由Host1构造假arp request(sip=未被使用IP, tip=Linux Host IP)给Linux Host,捕获到的发包状况如下:
每一个包是Host1发出的request,每二个包是Linux Host的回复,后三个包是3次ARP单播尝试,此时处于NUD_PROBE状态要尝试对方是否存活,由于sip使用的是虚假址,因此没有响应,在尝试了最大次数3次,对应arp_tbl中的参数ucast_probe=3次数,每次尝试的间隔时间近似1s,对应arp_tbl中的参数retrans_time=1HZ。
对比下windows这方面的处理可以发现,两者在这方面的行为相差很大:比如windows的网络协议栈会处理RFC826所规定的gratuitous arp报文;windows的arp尝试只会进行一次。
Linux内核分析 - 网络[十]:ARP杂谈相关推荐
- Linux内核分析 - 网络[十六]:TCP三次握手
内核:2.6.34 TCP是应用最广泛的传输层协议,其提供了面向连接的.可靠的字节流服务,但也正是因为这些特性,使得TCP较之UDP异常复杂,还是分两部分[创建与使用]来进行分析.这篇主要 ...
- Linux内核分析 - 网络[十二]:UDP模块 - socket
内核版本:2.6.34 这部分内容在于说明socket创建后如何被内核协议栈访问到,只关注两个问题:sock何时插入内核表的,sock如何被内核访问的.对于核心的sock的插入.查找函数都给出了流程图 ...
- Linux内核分析 - 网络[十五]:陆由表[再议]
内核版本:2.6.34 陆由表作为三层协议的核心数据结构,理解它是至关重要的.前面已经分析过路由表,有兴趣的可以参考: 第一篇:路由表 http://blog.csdn.net/qy532 ...
- Linux内核分析 - 网络[十四]:IP选项
内核版本:2.6.34 在发送报文时,可以调用函数setsockopt()来设置相应的选项,本文主要分析IP选项的生成,发送以及接收所执行的流程,选取了LSRR为例子进行说明,主要分为选项 ...
- Linux内核分析 - 网络[十二]:UDP模块 - 收发
内核版本:2.6.34 UDP报文接收 UDP报文的接收可以分为两个部分:协议栈收到udp报文,插入相应队列中:用户调用recvfrom()或recv()系统调用从队列中取出报文,这里的 ...
- linux内核分析 网络九,“Linux内核分析”实验报告(九)
一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...
- Linux内核分析 - 网络[四]:路由表
路由表 在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table.路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表.这和cache是一个道理 ...
- Linux内核分析 - 网络[八补]:IP协议补充
内核版本:2.6.34 在前一篇"IP协议"中对报文接收时IP层的处理进行了分析,本篇分析将针对报文发送时IP层的处理. 传输层处理完后,会调用ip_push_pend ...
- Linux内核分析 - 网络[九]:邻居表
内核版本:2.6.34 这部分的重点是三个核心的数据结构-邻居表.邻居缓存.代理邻居表,以及NUD状态转移图. 总的来说,要成功添加一条邻居表项,需要满足两个条件:1. 本机使用该表项:2. 对方主机 ...
最新文章
- python字符串的定义、切片、格式化、函数
- Android抓包方法(一)之Fiddler代理
- 复制文件时怎么保留权限
- 软件工程---2.软件过程
- 手把手教你用ECharts画折线图
- 《如何搭建小微企业风控模型》第十节 单变量分析(下)节选
- 本地修改服务器上的内容,本地修改指向服务器
- android实现nfc支付宝,支付宝首次支持NFC与LBS 实现快速手机支付
- Single-Shot Calibration:基于全景基础设施的多相机和多激光雷达之间的外参标定(ICRA2021)...
- Android edittext 属性inputtype
- SequoiaDB分布式数据库2021.12月刊
- 贝塞尔曲线 PH曲线 C曲线 B样条 NURBS样条曲线 三次Cardinal样条曲线对比 也涉及到不同曲线加速度的一些东西,不过有待细化
- 免费个人商城系统源码推荐
- 蛮力法的相关问题总结
- Cpp环境【CQYZOJ3145】【CQOI2916】学生宿舍依法集会权遭受侵害案例
- 威伦触摸屏绘制XY曲线
- 如何连接到远程windows服务器(纯学习笔记,不作为教程)
- vivado DocNav软件打不开PDF文档的解决办法
- 数控机床的c语言编程,数控机床的编程方法和典型实例分析
- kali ap pojie