[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Thoughts about layering multi-addressing
On 19-aug-2005, at 16:33, marcelo bagnulo braun wrote:
In addition, i guess that the shim will need to provide some form
of support for expressing policy/preferences.
I guess that the additional complexity in this case, is that these
preferences are per ULP rather than per ULID... but this brings us
to a more general problem, which is: how do we handle the case
where there are two ULPs communicating with a given shim context
but they are asking to use different locators for the communication?
Well, for outgoing packets that shouldn't be a problem. If the FTP
application wants to use the cheap high bandwidth link while the VoIP
application wants to use the lower bandwidth, more expensive but
bounded-delay link, the shim can just insert the right addresses and
send the packets toward the right next hop and everything will work
fine.
At the remote end, there really isn't much to do: the packet is
received and the ULIDs rewritten, and that's that. The problem starts
when we want the other side to send back their bulk data to the
address tied to our cheap fast line and their VoIP data to the
address tied to our high quality line.
One way to handle this would be to assume that the apps on the other
side tell the shim what they want and things will work out without
specific action from us. The other side still needs to know the
characteristics of our addresses/links, though. So we need a good way
to express them. A simple way to do this is two metrics: a high
priority one, that makes sure only addresses with the highest value
are chosen when those are available, and a second tie breaker metric
that can be used for load balancing. So when there are two addresses
with the highest priority and one as 25 for the second metric and the
other 75, there is a 75% chance that the second address is used.
We can use the good old low delay/high bandwidth/high reliability bit
mask to differentiate between the needs of different applications,
but I'm not sure if this will work out in practice.
Another approach would be for the application on our side to ask the
transport and for the transport to ask the shim for a certain
behavior, such as "make incoming traffic for this FTP app come in at
address X if possible", and the shim communicates this request to the
shim layer at the correspondent, which then takes the appropriate
action.
Note that there is no real reason to do a full "fork" of the shim
state: the most important thing the shim has to do is allow for the
rewriting and demux of packets. The rewriting is impacted, but not
the demux. In fork terminology: rather than fork off a new process,
we're starting a new thread within the same process, which isn't
nearly as heavy an operation. I think all of this can happen based on
transport demux info (i.e., port numbers).
It's interesting to note that by now we have several types of
communication happening at several levels of granularity:
- service differentiation information that is ULP session specific
- rewriting, which happens based on ULID (or more than just ULID if
we for the ULID state??? what would be the secondary differentiator?)
- demuxing, which is mostly specific to ULIDs but needs help from
something else (flow label, tag, locator set)
- reachability detection, which happens address pair to address pair
- reachability acks, which happen from host to host