[TriLUG] Some basic * questions

William Sutton william at trilug.org
Wed May 31 12:18:32 EDT 2006


Can I turn in my geek badge?  I thought I knew quite a bit about quite a 
bit, but once again Aaron shows how truly knowledgable he is!

-- 
William Sutton


On Wed, 31 May 2006, Aaron S. Joyner wrote:

> Mark Turner wrote:
> 
> > Comments below.
> >
> > Brian Henning wrote:
> >
> >> I figure the easiest way is to set up an Asterisk server here, attach 
> >> it to our existing PBX to show up as another extension, and push an 
> >> asterisk session (is that good terminology?) through an SSH tunnel 
> >> (or is that a bad idea?) to the remote employee's broadband-equipped 
> >> machine, which will sport a cheap headset/boom mic arrangement.
> >
> >
> > As Ron pointed out, SSH does TCP forwarding. You should check into 
> > OpenVPN, as it can handle both TCP and UDP.
> 
> Using IAX avoids most of the complexity of this problem, as it doesn't 
> use RTP media streams to send it's data.  This avoids one of the primary 
> problems with SIP/RTP and NAT - that the ports chosen for the RTP 
> streams are random, and by default usually from a large range (like 
> 10,000 ports or so).  This is because RTP by design requires that each 
> direction of each voice channel have it's own unique port, thus you need 
> two ports for every bi-directional voice channel you carry at a time.  
> Protocols like RTP make firewall administrators angry.  Having said 
> that, note that SIP/RTP sends unencrypted voice audio over the Internet, 
> not really a good idea for business communications.  You can encrypt the 
> single UDP port used by Asterisk easy enough, though.  OpenVPN isn't a 
> bad choice, given it's general utility.  It's a good package to be 
> familiar with, so you'd be well advised to start there.  :)  More on 
> it's overhead in a moment.
> 
> >> 4 - Bandwidth.  The remote employee is on some flavor of cable-based 
> >> broadband, and we're currently on 1.5m/384k (or thereabouts) ADSL.  
> >> We don't currently shove a lot of data up that pipe (most of the 
> >> time), but how much bandwidth does one call require?  8k is nibbling 
> >> at the back of my mind..
> >
> 8k = 8,000 = 8k miscellaneous units of measure!  My favorite!  :)  All 
> kidding aside, I presume you mean 8k bytes per second (kB/s), which is 
> 64k bits per second (kb/s).  That's the bandwidth required by the G.711 
> codec, and is a good starting point for an understanding (more details 
> to follow).
> 
> > An uncompressed G.711 channel is roughly 80kbps. There are G.729 
> > licenses you can buy from Digium which will compress that to around 
> > 16kps or so (Jon, help me out here). The freeware Linux version of 
> > X-Lite doesn't support G.729, but if your users are of the Windows 
> > variety, you can buy the G.729 version of X-Lite inexpensively.
> 
> An uncompressed G.711 voice channel is 64kb/s, but that's just the 
> protocol, aka the data portion of the packets.  And the typical VOIP way 
> is to send a *lot* of very small packets, as that keeps latency down and 
> minimizes the impact of any single lost packet.  So, with UDP you get a 
> fairly large overhead because each individual packet doesn't contain 
> much data, so the packet headers add up.  Thus, for a G.711 call, that 
> 80kb/s number is quite realistic (I actually prefer 72kb/s, for reasons 
> I'll explain later, but 80kb/s is a safely padded number for sure).  I'm 
> sure Mark is aware of all this, I'm just being thorough so that when you 
> see the 64kb/s number thrown around, you understand that Mark is not on 
> crack, and is giving you good real world numbers.  :)  Moving along, the 
> same is roughly true for G.729.  The actual protocol consumes 1/8th as 
> much bandwidth and thus theoretically takes 8kb/s.  Since all your 
> compressing is the data portion of the packet, and you're still sending 
> the same number and frequency of packets, you still have about the same 
> overhead, measured in kb/s.
> 
> Let's break down the overhead per packet.  I'm talking primarily about 
> RTP media stream packets, for which the data portion is just the codec 
> data, nothing else.  All of the meta data is usually handled via SIP, 
> which is a TCP protocol capable of dealing with lost packets and latency 
> accordingly.  It's also really low bandwidth and plain-text based, and 
> the delivery of it's messages aren't critical to the flow of audio.  So 
> on to RTP... The packet header on a UDP packet (only talking layer3/4 
> headers, ignoring layer2 headers as the size of those almost certainly 
> varies across the packet's life) is 160bits per packet*.  The usual 
> practice is to send packets at 20ms intervals.  This results in 50 
> packets per second (1000/20 = 50).  50 packets per second * 160 bits = 
> 8000 bits / second.  So our overhead should be roughly 8kb/s in packet 
> headers plus what ever protocol we use.  Thus, if we use G.711, the 
> protocol uses 64kb/s and we add 8kb/s of packet headers by sending one 
> packet every 20ms, we get an effective consumed bandwidth on the wire of 
> 72kb/s.  G.729 uses 8kb/s for the protocol, plus our 8kb/s of headers 
> gives us 16kb/s.  If we want to know how much actual bandwidth is being 
> consumed at the Ethernet layer (ie. if you look at bits sent by your 
> Ethernet card, via ifconfig or iptables) we simply add 144 bits** of 
> data per packet, which works out to 7.2kb/s of Ethernet overhead 
> (assuming you're not doing 802.1q tagging, the overhead of that is left 
> as an exercise to the reader).  So on-the-wire usage by G.711 is 
> 79.2kb/s (9.9kB/s), and G.729 usage is 23.2kb/s (2.9kB/s).
> 
> So how much overhead does OpenVPN add to this scenario?  Also, how long 
> does it take to encrypt each packet, and thus how much latency is 
> introduced by the VPN?  I honestly haven't done VOIP through OpenVPN 
> (only classic ipsec, which is mostly the same for the encryption 
> portion, but I digress), so I'll leave it to someone else more familiar 
> with OpenVPN to do the math and also provide some real world experience 
> to back it up.  Or since it's on my list of things to do to setup 
> OpenVPN at home (*blush*), perhaps I'll eventually get around to 
> providing more info on this.
> 
> Aaron S. Joyner
> 
> 
> * - The break down goes something like this, bits on the left column, 
> description on the right.  Good references for this can probably be 
> found by googling 'udp packet header'.
> 32 bits - source ip (start of ip header)
> 32 bits - dest ip
> 8 bits - protocol id and length (with 8 bits of leader padding)
> 8 bits - source port (start of udp header)
> 8 bits - dest port
> 8 bits - length
> 8 bits - checksum
> (start of data)
> 
> ** - Ethernet headers break down as follows:
> 48 bits - source mac
> 48 bits - dest mac
> 16 bits - type field (start data/next header after this)
> 32 bits - checksum (at end of packet)
> 



More information about the TriLUG mailing list