One thing I've never quite understood on Linux is what happens to local traffic that isn't directed at loopback.
For example, given the following network setup:
[root@pe-323-master ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:2B:59:85
inet addr:172.16.90.133 Bcast:172.16.90.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2b:5985/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1881 errors:0 dropped:0 overruns:0 frame:0
TX packets:1205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:234047 (228.5 KiB) TX bytes:134389 (131.2 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:2B:59:8F
inet addr:10.20.2.2 Bcast:10.20.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2b:598f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14880 (14.5 KiB) TX bytes:1188 (1.1 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:13585 errors:0 dropped:0 overruns:0 frame:0
TX packets:13585 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6501824 (6.2 MiB) TX bytes:6501824 (6.2 MiB)
what actually happens when I ping a local non-loopback address?
[root@pe-323-master ~]# ping -c 1 172.16.90.133
PING 172.16.90.133 (172.16.90.133) 56(84) bytes of data.
64 bytes from 172.16.90.133: icmp_seq=1 ttl=64 time=0.011 ms
--- 172.16.90.133 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.011/0.011/0.011/0.000 ms
Does that traffic go out over the wire and come back, or is routed internally?