ARP报文与arp_ignore arp_announce

背景:

(1)根据缺省的TCP/IP协议栈处理,响应报文的源地址等于请求报文的目的IP。

(2)关于ARP表: IP、MAC、网络接口的映射表;列表中的IP都属于本设备所在的网段,发送/转发非本地网段时候是通过网关,所以只需要使用网关对应的MAC即可。

(3)ARP条目更新的条件(满足任意一个即可):

1、收到ARP request:目的MAC是广播,且Target IP是本机上的IP;(这里说Target IP是为了与目的IP区分)

2、收到ARP reply:目的MAC是广播或本机MAC,且ARP表中已经存在该条目;(如免费ARP报文和自身发出请求后的应答)

关于上述提到的Target IP,指的是ARP报文中请求的目标IP,ARP报文不属于IP报文,具体结构如下图:(不纠结ARP协议属于二层还是三层协议)

由于是请求目标IP的MAC,所以Target MAC为全0待填充,这里需要注意的是ARP报文的目的MAC与Target MAC,由于报文是以广播形式发送,所以二层的目的MAC是全F,而请求的Target MAC是属于三层上的数据,全0待填充;Target MAC只是Wireshark的显示,实际数据包是直接把四个值连在一起。APP reply报文则是单播,结构跟ARP request一样,目的MAC改成ARP request的源MAC,三层数据上,则把请求的MAC填上,所有源和目的对调,就是说,Sender MAC会等于源MAC,Target MAC等于目的MAC。

(4)免费ARP:可用于检测IP冲突和更新ARP条目,每次设置新IP和启动网络服务的时候会发送。

二层:源MAC为发送者MAC,目的MAC为全F

三层: 首先会发4个(Windows发3个,隔秒发送)Sender IP为全0的ARP包;没有IP冲突的情况下,Linux(CentOS 6.4)会先发送一个Target MAC=Sender MAC=源MAC、Target IP=Sender IP=发送者IP的免费ARP包,接着发送一个Target MAC=F、其他跟前一个包相同的免费ARP包;Windows(Win10)则只发送一个Target MAC=0、Sender MAC=源MAC、Target IP=Sender IP=发送者IP的免费ARP包。

正题:


在配置LVS负载均衡架构的时候需要在RealServer上抑制ARP,具体是arp_ignore=1,arp_announce=2

arp_ignore: (回应ARP)

0:回应任何网口上收到的对任何本机IP地址的ARP查询请求(默认)

1:只回应Target IP是接收网口的IP的ARP查询请求

2:只回应Target IP是接收网口的IP的ARP查询请求,且Sender IP必须与该网口属于同一网段

4-7:保留未使用

8:不回应所有的arp查询

arp_announce: (选择ARP宣告时候使用的Sender IP)

0:使用发送(或转发)的数据包的源IP作为发送ARP请求的Sender IP(默认) ;(可使用ping -I 验证)

1:IP数据包的目的IP属于本地某个接口的网段时,Sender IP则使用IP数据包源IP,不属于则按2处理;

2:忽略数据包的源IP,使用能与目标主机会话的最佳地址来作为发送ARP的Sender IP,优先选择对外接口的主IP;(loopback不是对外接口)

注:ARP表没有网关对应的条目时,在发送IP数据包前会触发 arp_announce;

Sender MAC跟系统无关,Sender MAC=源MAC,源MAC由物理地址决定,网络攻击除外。

时间: 2024-10-08 09:48:04

ARP报文与arp_ignore arp_announce的相关文章

Linux 内核参数 arp_ignore & arp_announce 详解

arp_ignore定义了对目标地址为本机IP的ARP询问的不同应答模式. arp_announce对网络接口(网卡)上发出的ARP请求包中的源IP地址作出相应的限制:主机会根据这个参数值的不同选择使用IP数据包的源IP或当前网络接口卡的IP地址作为ARP请求包的源IP地址. arp_ignore 在内核参数中除了每个网卡都有自己的arp_ignore配置外,还有两个(一个是默认default,一个是全局all)需要用到arp_ignore配置.所有配置项如下面的代码段: net.ipv4.co

ARP报文发送的可视化实现

一.安装VS2013,下载wpdpack,为VS2010配置WinpCap环境: ⑴首先在View中选择Property Manager,然后展开工程,再展开Debug|Win32 ,接着右击 Mircrosoft.Cpp.Win32.user选择Properties(此处设置全局有效) ⑵之后分三步: ①设置环境目录 在VC++ Directiories中 Include Directories和Library Directories中添加路径. 假如将wpdpack放到c盘.则: Inclu

ARP报文格式

ARP/RARP报文格式 地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议. 报文格式 字段 长度(bit) 含义 Ethernet Address of destination 48比特 目的以太网地址.发送ARP请求时,为广播的MAC地址,0xFF.FF.FF.FF.FF.FF. Ethernet Address of sender 48比特 源以太网地址. Frame Type 16比特 表示后面数据的类型.对于ARP请求或

实现Arp报文发送和接收

继上次实现了 Ping 之后,尝试进入更底层的网络接口层实现局域网的 ARP 报文收发 ARP 协议概述 ARP(Address Resolution Protocol) 地址解析协议是用来通过网络层地址(IP地址)去寻找数据链路层地址(MAC地址)的网络传输协议. 在以太网(Ethernet)协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的 MAC 地址.而在 TCP/IP 协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太网中使用 IP 协议时,

ARP地址解析协议<四>——ARP地址规格参数和通用地址及报文格式

1.ARP的基本操作: 就是本地网络中的一对请求和响应的传输. 理解:源(要发送IP数据报的设备)发送一个包含目的地(接收数据报的一方)信息的广播,目的地则使用单播向该源发回一个响应,告诉源那个目的地的MAC地址. 2.ARP报文类型: 首先,在ARP中发送了2种不同的报文,分别是,从源到目的地和从目的地到源.发送方是发送报文,目标方是接收报文.发送方和目标方的身份对每个报文都不一样,根据具体的情况而定. 3.发送方和目标方的身份是如何用于请求和回答的呢? 首先,再先介绍4个关键词: 请求.回答

ARP协议的报文格式 转自n哖苡逅

ARP协议的报文格式 结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr结构外,还包含源主机和目的主机的地址. 定义常量 #define EPT_IP   0x0800    /* type: IP */#define EPT_ARP   0x0806    /* type: ARP */#define EPT_RARP 0x8035    /* type: RARP

报文分析6、ARP报头结构

ARP报头结构 硬件类型 协议类型 硬件地址长度 协议长度 操作类型 发送方的硬件地址(0-3字节) 源物理地址(4-5字节) 源IP地址(0-1字节) 源IP地址(2-3字节) 目标硬件地址(0-1字节) 目标硬件地址(2-5字节) 目标IP地址(0-3字节)       (1)硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1: (2)协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制): (3)硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP

【arp冲突】linux抑制arp通告

通常在用LVS的时候,要在lo口用到虚拟ip,此时需要调整2个地方: arp_ignore arp_announce 因为多个IP用到一个物理网卡的MAC,arp会在局域网广播说: "ip为192.168.1.1的MAC地址是多少",此时将有多个主机回应. 17 0.328160000 Elitegro_1f:10:5f Broadcast ARP 60 Who has 192.168.1.1?  Tell 192.168.1.148 通常是这样做的: echo 1 >/proc

TCP/IP协议——ARP详解(转载)

本文主要讲述了ARP的作用.ARP分组格式.ARP高速缓存.免费ARP和代理ARP. 1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表: 如果目的IP和自己在同一个网段: 当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header