In some environments such as Java, it\'s natural to use TCP/IP sockets to pass messages between processes on the same host using the \'localhost\' address (127.0.0.1 in IPv4, or
Depends upon the OS, and the configuration being used. The answer is yes if you are asking for default behavior.
This is the reason why you are not able to use tools like wireshark to sniff local loopback scenarios.
Yes. When a packet/data to a Loopback address(127.x.x.x) is received, the IP layer of the TCP/IP uses the Loopback route to route the packet to itself.
Looback Route
Network Destination || Netmask || Gateway || Interface || Metric
127.0.0.0 |||||||||||||||||||||| 255.0.0.0 || 127.0.0.1|| 127.0.0.1 || 1
After routing it to itsef, at TCP/UDP layer with the help of protocol control blocks(per connection data structure) the corresponding socket and its owner process will be identified to deliver the packet/data.
Bottom line, All the tasks at Data Link layers and Physical layers(of OSI Model) will be avoided.
Specifically in linux when packets are transmitted on the loopback interface the kernel raises a "software" interrupt for each packet. From that point on the packet reception is identical to the packet reception flow for a physical device. So you are correct in your assumption that communication over the loopback interface would be much slower than alternate IPC mechanisms such as unix sockets.
I guess the kernel code path can be optimized. For e.g., we could call the receive code path directly from the transmit code path of loopback interface.