arp_annouce=2详解
arp_annouce=0的时候
手册上说的是到底是是说当我这个包出去的时候询问arp地址,
当arp_announce=0的时候,是说使用数据包中的地址去进行arp的请求,
当arp_announce=2的时候,是根据端口号决定如何进行arp的请求;
于是我就做了这样一个试验: 还是三大件,树莓派+虚机+宿主机,
虚机:ethA1 192.168.0.110
宿主机 ethA2 192.168.0.1 ethB2 192.168.1.1
树莓派 ethB 192.168.1.110
增加路由信息
虚机上:route add default gw 192.168.0.1
树莓派上:route add default gw 192.168.1.1
这个样子三者的网算是通了,
然后我想测试的是arp_annouce=0的时候,echB2到echB的arp请求都是由由数据包中的地址发起,但是万万没想到呢,于是我从虚拟机中ping树莓派,然后通过wireshark抓包工具,希望看到arp请求是有192.168.0.110发起,但是发现并不是,竟然是由192.168.1.1发起,这并不符合arp_announce的行为呀,百思不得其解,只能看代码了,于是我就开始抓在arp源地址设置的代码,stap脚本在:net/arp/arp_send_dst.stp中,然后我发现了一件事情。。。那就是在进行函数inet_addr_type_dev_table判断会返回的不是RTN_LOCAL,而是RTN_UNICAST,也就是说我ping的数据包中的源地址啊并不是本机地址,这不在arp_annouce数据包的职责范围了。这就是ip地址不是用本端口的根因,于是我自己写了一个sender不断向树莓派中发数据包,不同的是,这次的源地值是我主机上的另一套地址了,按理说这次arp请求的地址就会换掉了:sedner的代码见net/arp/sender.c
现在问题是在socket中设置源地址呢,这个可以通过raw socket来解决。
这次就对了,随便从网上copy下来了一个sende使用raw socket来完成该功能的程序,然后设置源地址发送,发现是可以的呢。
好了,证明结束,我们就来看一下相关的代码: arp_solicit,这个函数里面有所有对arp_announce的约束,都约束啥东西呢?
所以总结一下:
对于本地产生的数据包:
arp_announce=0:使用数据包的地址去访问,这个数据包一定是来源于本地的数据包;(LVS)
arp_announce=1: 数据包中的地址必须与目的地址位于同一个网段;【可以自行做下试验】
arp_announce=2:使用接口地址去访问;
如果如果上述的结果都不满足,那么就使用端口地址去访问了
对于本地转发的数据包:
使用接口地址去访问;
arp_annouce=2详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- 清华大学《C++语言程序设计基础》线上课程笔记04---指针
指针 static int i; static int* ptr = &i; 此处的*表示ptr是指针类型(地址类型),用来存放目标数据的地址 其本身也有地址,所以又指向指针的指针; *前面的 ...
- 4-c++教程起航篇-学习笔记
c++教程起航篇 我们会讲C++那些事,C++与C语言的关系. C++诞生于贝尔实验室. C++之父: 本贾尼·斯特劳斯特卢普 C++社区排行榜 最新排行,c++排名第三,Python排名第四 C++ ...
- BAPC 2014 Preliminary
// 题目链接: https://nanti.jisuanke.com/t/282041 //动态规划,重复利用子问题的最优,来求解当前最优问题 #include <iostream> # ...
- Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token
原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf? 因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...
- 北京Uber优步司机奖励政策(9月28日~10月4日)
用户组:优步北京人民优步A组(适用于9月28日-10月4日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不 ...
- 在ubuntu安装python, theano, keras , Spearmint, Mongodb
系统配置: Ubuntu 14 (其他系统也差不多如下操作) 1. 通过anaconda安装 python 地址: https://www.continuum.io/downloads#linux 2 ...
- Qt-事件处理-鼠标事件
根据书中的内容,简单的实现鼠标相关的内容 源代码如下 .h #ifndef MOUSEEVENT_H #define MOUSEEVENT_H #include <QMainWindow> ...
- Shader Forge学习
最近学习了一下shader forge,一个屌屌哒插件用来生成shader.尽管其降低了制作shader的难度,但是真的想做出满意的shader的话还是得有一定的shader基础.但是仅仅是做出一些简 ...
- 一句话描述 Java 设计模式
Java 设计模式 设计模式是对应于不同的应用目的的. 适配:将特定功能接口适配需求方 桥接:面向两个接口,无关接口的实现: 抽象化与实现化解耦,使得二者可以独立变化:例:笔与图形,笔可以画图 ...
- 完整的正则表达式知识汇总(Python知识不断更新)
## 大纲: ## 一.正则概述 1.正则是什么 正则就是一套规则,或者语法 2.正则的作用 让我们判断是否符合我们的的规则,或者根据规则找到符合规则的数据 3.使用场景 可以用正则判断我们输入的邮箱 ...