[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

address pair exploration, flooding and state loss



Following with the approach suggested in the previous mail, there are three functions required that are conceptually different. The mechanisms for their provision are likely to require some form of packet exchange. the roadmap then is to define what is required for each of them and then see potential optimizations that could result from the merging of some of the packets involved.
So the three functions are the following:


Address pair Exploration:
------------------------
The goal here is to determine if a given address pair is working i.e. that a packet carrying one of the addresses as source address and the other one as destination address can actually reach the destination from the source.
Note that reachability can be unidirectional, and it is an explicit goal to be able to discover unidirectional paths.


The next question is what is the form of the packet exchange required for Address pair Exploration and what information need to be included in those packets. The faildet draft defines a mechanisms where nodes send multiple poll messages using different address pairs. In each of those poll packets, the node includes reachability information obtained from previously received poll packets.
So, what is the information that needs to be included in these poll packets?
It seems that the minimum required is to include enough information to allow the node to identify which packet was received by the peer.
Consider the following situation:
node A with address A1 and A2, node B with address B1 and B2


- node A starts address pair exploration sending a poll packet 1 using A1 and B1.
- node B replies sending a poll packet 2 using B1 and A1.


The packet needs to carry enough information to allow node A to understand that the poll packet 2 is a reply to poll packet 1 i.e. that the path from A1 to B1 is working.
Such information could be simply the address pair or a identification number of poll packets.


Now, consider a situation where the reverse path is not working (as depicted in the faidet draft)

- node A starts address pair exploration sending a poll packet 1 using A1 and B1.
- node B replies sending a poll packet 2 using B1 and A1 but this packet is lost.
- node B send another poll packet 3, now using A1 and B2, and this packet reaches node A


Packet poll 3 should carry information about the fact that poll packet 1 was properly received by node B (A1 to B1 path is working). This again can be achieved carrying the poll packet 1 identifier in poll packet 3.

Note that poll packet identifier are assigned by the issuer of the poll packets, since it will be used by itself to bind received poll packets with issued poll packets. I am assuming here that one poll packet will result in many replies and all of the replies will carry the initial poll packet identifier.

So, each poll packet needs to contain the following information:
- its own poll packet identifier
- the poll packet identifiers of previously received poll packets, in the case that this poll packet is issued as a reply to a poll packet.


Anything else? security stuff?

Flooding protection:
-------------------
The goal here is to determine if the receiver is willing to accept the packets belonging to a communication established with a given ULID through an alternative locator.


In this case, it is required to include information about the ULID involved in the communication. Note that unidirectional connectivity is also a possibility here.

So, this exchange essentially consists in two packets:
- one query packet, that asks if a node is willing to receive packets associated with communication involving ULID U though locator Y
- one reply packet that informs that the node is willing to receive packets associated with a communication involving ULID U though locator Y


Now, note that because of unidirectional connectivity, reply packets may have the same addresses than query packet. However, the reply packet must contain some information carried in the query packet so that the receiver can proof that he is able to receive packets through the alternative locator.

So, the information to be carried in the Query packet is:
- the ULID
- the alternative locator (included in the destination address)
- a query identifier
(this packet must include the alternative locator in the dst address field)


The reply packet will include:
- the ULID
- THe alternative locator
- the query identifier
(the addresses included in the packet can be any address, no need to be the alternative locator or the ULID. The query identifier needs to be randomly generated, i.e. its value must not be predictable)


State Loss:
-----------

The goal here is to detect if the context state has been lost. The reasons for this lost may be related with failures, or with early garbage collection.

The packet exchange would require the following information:

- a packet that refers to an existent context. This packet need to be identified as a shim packet and must contain context identification (i.e. context tag). In addition, the packet needs to include a packet identifier, so that it is possible to bound the reply to this initial packet (this is so in order to prevent some forms of attacks similar to TCP reset attacks, where an attacker can force a node to act as if the peer has lost its state)

In case that the context exists, a affirmative reply packet could be defined

In case that the context does not exists, then the reply packet should contain:
- inform that the refered context does not exist
- information about the context i.e. context identifier
- initial packet identifier, so that it is possible to proof that this packet is a reply to recently sent packet.


Including the context identifier does provide some protection to the TCP reset type of attacks, since the attacker need to discover the context identifier.
The additional protection provided by including a packet identifier, comes form the fact that the attacker needs to have intercepted a packet recently (and it is not enough to intercept one packet at any time since the session was established) Not sure if the achieved protection is worthy though...


Well, once we came up with the set of required information for each exchange, then we could move to optimizations, merging these packet exchanges...


Regards, marcelo