ARP flux vs. weak/strong ES model (was: Re: Using netem on one interface expands to all interfaces)

Erik Auerswald <[email protected]> Fri, 15 Feb 2019 20:11:15 +0000
Newsgroups org.kernel.vger.lartc
Message-ID <[email protected]>
Hi,

On 2/14/19 17:21, Grant Taylor wrote:
> On 02/14/2019 01:31 AM, Erik Auerswald wrote:
>> P.S. I am no longer sure if "strong host model" vs. "weak host model" 
>> is the correct way to refer to this problem, as it concerns ARP, not 
>> IP routing / interface selection. Nowadays it seems to be called "ARP 
>> flux."
> 
> I seem to run into "{strong,weak} {host,end system} model" references 
> monthly in the various circles that I travel in.

The first time I read about this, the issue was framed in the weak 
end-system model vs. strong end-system model terminology. Thus I have 
used that terminology in the past whenever a related problem occurred.

> I can't remember the last time I heard "ARP flux".

I have seen it just recently, and do not remember having read it before. 
It turned up while searching the web for ARP related Linux sysctl settings.

To turn this around, searching the web for "ARP flux" seems to turn up 
better results regarding the original poster's issue than searching for 
"weak end-system model". YMMV.

> "{strong,weak} {host,end system} model" might refer to routing and not 
> directly ARP, but it is decidedly adjacent and applicable.  All be it 
> possibly not technically precise.

TL;DR I prefer precision when talking about technical problems. :-)

I'd like to take a closer look at the problem at hand to better 
understand it and the terminology used to describe it.

I'd say the distinction between weak and strong end-system (ES) model is 
related to the problem at hand, but "ARP flux" is a distinct issue not 
necessarily observed with a host implementing the weak (ES) model.

RFC 1122 describes the difference between weak and strong ES as follows 
(pages 62ff):

Strong ES Model:

o   A host MUST silently discard an incoming datagram whose
     destination address does not correspond to the physical
     interface through which it is received.

o   A host MUST restrict itself to sending (non-source-
     routed) IP datagrams only through the physical
     interface that corresponds to the IP source address of
     the datagrams.

Weak ES Model:

o   A host MUST NOT silently discard an incoming datagram whose
     destination address does not correspond to the physical
     interface through which it is received.

o   A host MUST NOT restrict itself to sending (non-source-
     routed) IP datagrams only through the physical
     interface that corresponds to the IP source address of
     the datagrams.

RFC 1122 continues to state that "[The weak ES] model [...] is necessary 
for hosts that have embedded gateway functionality."

A gateway (or router) needs to accept IP packets not addressed to the 
receiving interface in order to forward them. But most commercial 
routers will not answer an ARP request ingressing on the wrong 
interface, unless Proxy-ARP is activated. By default, Linux does answer 
such ARP requests.

This answer to ARP requests arriving at the wrong interface is the root 
cause for most problems commonly subsumed under "Linux implements the 
weak ES model". But those problems do not occur with other weak ES model 
implementing systems, e.g. Extreme Networks EXOS switches.

Additionally, changing Linux behaviour (via sysctl) to not answer those 
ARP requests does not change the weak ES model applicability to Linux 
(i.e. IP packets delivered inside an Ethernet frame addressed to an 
interface MAC of a Linux system are accepted even if they are addressed 
to another IP address of the Linux host; packet forwarding is not 
affected either).

Linux's cavalier default behaviour in answering ARP requests might be 
motivated by the weak ES model in helping other systems on the LAN reach 
the Linux server, even if they use an IP address assigned to another LAN 
the Linux server is connected to. Thus the problem of "ARP flux" is 
probably closely related to how Linux implements the weak ES model, but 
not necessarily to the weak ES model itself as described in RFC 1122.

Thus I argue that using "ARP flux" to describe the ARP problem observed 
with Linux is preferable to attributing the problems to Linux's 
implementation of the weak ES model.

Please note that I have not searched for the origin or an authoritative 
source on "ARP flux", and cannot guarantee that it is indeed 
consistently used to describe the aforementioned problem. But it did 
turn up on related web searches, and seems to directly refer to the ARP 
problem at hand.

Sorry for being pedantic.

Thanks,
Erik