Guys, guys…this:
So, is it possible to send a chunk to a client from a relay node without revealing the sender’s IP address? (Mr. Network Engineer - @dirvine - let me know if I get anything wrong, I’m still in the process of studying for my Network+ cert) Let’s find out:
MTU
A quick note about Maximum Transmission Units and why we need packets at all.
The maximum transmission unit, or MTU, is the single largest frame or packet of data that can be transmitted across a network. The exact nature of the maximum transmission unit will be determined by the configuration of the network and what type of protocols is in place for the transmission of data.
– WiseGeek
While a chunk on the SAFE Network may be 100kB (SD) or 1MB (ImmD) the packets that are used to transfer these chunks point to point may not necessarily be that large. Therefore, there exists the real probability that these chunks being sent across the network will need to be split up into packets.
IP Packet Construction
Each datagram [AKA packet] has two components: a header and a payload. The IP header is tagged with the source IP address, the destination IP address, and other meta-data needed to route and deliver the datagram.
– Datagram Construction - Wikipedia
That means that there is necessarily an IP address in the packet. Need it be the relay’s though?
Spoofing
IP address spoofing can be defined as the intentional misrepresentation of the source IP address in an IP packet in order to conceal the identity of the sender…
– David Whyte - Carleton University
And as for how:
These IP packets have the proper source and destination addresses for reliable exchange of data between two applications. The IP stack in the operating system takes care of the header for the IP datagram. However, you can override this function by inserting a custom header and informing the operating system that the packet does not need any headers.
– Cisco.com
So by forging the header, the relay can hide itself from recognition on the client’s side. Discussion of potential ramifications of just who’s IP address is inserted there will be left alone for the time being. But does this mess with the protocols at all?
TCP vs UDP
UDP vs TCP Spoofing - one of the most significant reasons TCP is more secure than UDP is the difficulty in spoofing TCP communications. UDP spoofing is trivial since there is no notion of connection. Trying to [utilize] an established TCP session, however, is very difficult if the [relay] is unable to see the packets flow on the wire. This is because the 32-bit sequence number must be guessed by the [relay].
– InfoCellar.com
So spoofing packets would not work for TCP, where it certainly would with UDP.
SAFE Network Protocols
TCP connections are always favoured as these will be by default direct connected (until tcp hole punching can be tested). TCP is also a known reliable protocol. Reliable UDP is the fallback protocol and very effective.
– Maidsafe.net - SystemDocs
So, where the network will be transmitting packets, it will use either TCP or the Reliable User Data Protocol (rUDP) to do so. This, as mentioned elsewhere on these forums, will allow many features such as end-to-end encrypted communications, reliable reception of packets, and NAT transversal. (AKA hole-punching)
However, since these are connection-oriented[1] protocols, the packets that are sent back as either confirmation or resend requests to the sender must be sent then to the sender’s IP address in order for the sender to recieve the information and act accordingly. This necessitates that the correct one be included in the header.
Conclusion
While hiding the sender’s (relay’s) IP address may be possible using IP spoofing, this would not be feasible on the network due to it’s connection-oriented approach between the sender (relay) and the recipient (client).
If the network were to implement a purely UDP-based approach, spoofing would be feasible, but the network would lose many of the features and reliabilty that come with the connection-oriented approach. (not to mention the restriction to one type of protocol enabling an easier profiling of network traffic)
Therefore, any solution to this problem would need to be implemented higher up in the Maidsafe stack, such as in Crust, Routing & Sentinel, or some other aspect of the network.
[1] Note that “connection-oriented” is not mutually exclusive with “stateless”, as connection-oriented is implemented at the transport layer, and stateless is implemented higher-up in the Maidsafe stack.
P.S. This was so much fun to research! (I’m such a nerd)
P.P.S.
The link in the OP was for a case in Austria, not Australia (although you do state that the Aussies have a similar law as well) Sorry, that was bugging me!