[OpenSER-Devel] [ openser-Patches-1755402 ] Compressing outgoing via-hf-lines to avoid ip-fragmentation

SourceForge.net noreply at sourceforge.net
Thu Apr 17 09:04:37 CEST 2008


Patches item #1755402, was opened at 2007-07-17 12:53
Message generated for change (Comment added) made by marcushunger
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743022&aid=1755402&group_id=139143

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: core
Group: ver 1.2.x
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Marcus Hunger (marcushunger)
Assigned to: Nobody/Anonymous (nobody)
Summary: Compressing outgoing via-hf-lines to avoid ip-fragmentation

Initial Comment:
Hi,
while looking for a way to reduce total-packet-sizes in order to avoid ip-fragementation, I noticed that a lot of space is 'wasted' with via-information in requests, that UACs actually dont need for replying, but which is needed to route the replies on the proxy. 

Especially in setups with a lot of proxies in a row (four or more), the amount of used bytes for via-hfs is huge (the big "Via: SIP/2.0/UDP", ip-adresses and branch-tags). Every of these lines is only required at a specific hop and the rest of them is ignored.

So the idea is that a lot of this data can be reduced transparently at the outgoing-proxy before sending the request to the uac and to restore the reduced data in the reply coming from the uac.

To let this work statelessly, all the information must be stored in the outgoing request, but because most of the data is ignored anyway at the uac, we can change the coding of it to save bytes. 

I implemented a way of doing this by patching udp_send(). An outgoing request is disassembled, the unneeded vias are aggregated, pushed through zlib, coded with base64 and appended to the end of the one required via-hf.

The decoding is handled in udp_rcv_loop() before calling receive_msg.

I tested this successfully at stateless proxies loadbalancing in front of a register-proxy. The UACs were Grandstream GXP2000.

The whole thing saves maybe about 70 or 80 bytes, which doesnt sound much, but these could make a differences when you're trying to stay below a mtu. 

Anyone interrested in discussing the whole mtu, ip/udp-fragmentation issue?

----------------------------------------------------------------------

>Comment By: Marcus Hunger (marcushunger)
Date: 2008-04-17 09:04

Message:
Logged In: YES 
user_id=1704473
Originator: YES

Hi Carsten,

I'm afraid but I didn't do any further testing with that patch. IIRC it
worked with some other UACs but I am not sure which these were. I had no
negative tests. All tested clients worked.

The whole thing didn't go into production, nor was it ported since I was
sure it would not make its way into openser and I try to stick to the
releases in production.

----------------------------------------------------------------------

Comment By: Carsten Bock (carstenbock)
Date: 2008-04-16 14:08

Message:
Logged In: YES 
user_id=1488991
Originator: NO

Hi Marcus,

You're patch/attempt looks quite interesting and I am thinking about doing
some more tests with it/ porting it to the current OpenSER 1.3-Trunk. One
interesting point is ofcourse avoiding UDP-Fragmentation, but another
interesting point might be a (more/less) weak topology hiding...
I have some questions:
- is there an 1.3 / SVN-Trunk Port available?
- did you test this with other phones? e.g. FritzBoxes, Snoms, Nokias,
etc.?
- is it tested?
- Is it running somewhere in production?
- Any "real-life" experiences (positive/negative)?

Thank you for your time,
Carsten



----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743022&aid=1755402&group_id=139143



More information about the Devel mailing list