Re: Re: ARP relay

Freek Dijkstra <[email protected]> Wed, 04 May 2005 09:28:03 +0200
Newsgroups gmane.network.zeroconf.workers
Message-ID <[email protected]>
Andreas Hofmeister wrote:

> Ok, but in this case one should just handle each network interface on
> its own - each interface would have its own link local address. 
> 
> A linux kernel would answer ARP-Requests for one of its IP addresses on
> any interface, regardless whether the an IP address belongs to that
> interface (afaik, BSD wouldn't). For Linux, an IP address belongs (more
> or less) to the system, not to the interface. Don't be confused by what
> ifconfig suggests, that program has been written for the IP-stack in
> Linux 2.0, wich has been completly replaced in Linux 2.2.

Thanks -- this is interesting. You are right, and I had not considered 
this yet.

<Off-topic>
I think the networking code in Linux is flawed. Even though I often use 
Linux in a research environment, I'm always surprised how little the 
code seems to grasp from the protocols itself. For example, take the 
Window Size of TCP. In short, this is the number of unconfirmed bytes 
(the size of the data along the way, typically the round trip time times 
the bandwidth). This is an important parameter internal the the TCP 
protocol used to control the bandwidth and back-off in case of 
congestion. In Linux (and any TCP implementation), you can set the 
maximum window size. However, if you then ask the same parameter, you 
always get a size twice as large. Apparently, that is the amount of 
memory the implementation allocates. But that is unrelated to the 
maximum window size mentioned in the protocol. A colleague submitted 
that as a bug to kernel developers, but it was ignored. And there are a 
few more examples. I still have the impression that BSD network code is 
superior.
</Off-topic>


> There is a patch for Linux 2.4, that would broadcast ARP requests and
> adjust the route depending on what interface the response has been
> recieved on.

Would it be a good idea to distribute this patch along with zcip? Or at 
least link to it from the Zeroconf.sf.net website?

Interesting patch by the way. Does it also work for non link-local IP 
traffic? If I send traffic to a host, and if it arrives on interface A, 
the return traffic may just as well go out on another interface (eth1 
for example), based on the routing table. If I ignore what I know about 
the route implementation, a more logical approach would be to return the 
traffic of an established connection of that same interface.

I have some experience in applying patches to the kernel (not modifying 
it myself. The one time I tried was a core-dump and computer-crash 
disaster ;) ). For example, the web-100 patches (which allows you to 
tweak more of the TCP parameters), and patches to get a Chelsio driver 
to work (Chelsio sells 10 Gb/s network cards which do full 
TCP-offloading; normal network cards eat 30%-60% of CPU usage just to 
sent out the data, but computers are slow anyway -- the fastest PCI-X is 
the bottleneck: you can't sent more then 8.5 Gb/s). That thought me that 
the kernel code change considerable between linux minor versions, so we 
may just link to patches, because at least I am not capable of keeping 
them up-to-date. (Or at least, I don't have the time to become capable).


Thanks for your explanation of ARP relaying.
I see how the solution you describe can work. However, I personally 
don't think that is a particular good solution. I would probably like a 
solution better which does allow adjacent subnets to use the same IP 
address. All IPv6 API's and most IPv4 API do allow you to specifically 
select the network interface if you open a network socket. That way, an 
application can distinguish between IP 1 on subnet A and the same IP 1 
on subnet B.
If this is combined with a kernel patch like you describe above, I think 
that would be a more elegant solution to the multi-homed problem, since 
the complexity is solved at the computer level, rather then at the 
network level.

Or am I missing something here? (disclaimer: I did not have coffee yet 
this morning).

Regards,
Freek


-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20