Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

In my server-client architecture, I multicast 100 MB files to many clients from server via satellite link. Network traversal is through 5 hops. I have the 10Mbps ( i.e. 1250 Kilo Byte per second ) bandwidth link.

When I multicast the first file to many client, first hop get the incoming speed is of ~9.0 mbps but the receiver end get the speed of only ~4.2 mbps. All clients are 10mb half duplex.

I can see, there is low network usage; But I don't know where exactly. If server is sending at the speed of ~9.0 mbps, then client should got the same speed.

I am using the reliable UDP for multicasting.

Is there any way to find out, what is the incoming and outgoing bandwidth usage of each hop (for a particular port.) ? Is there exist any tool/utility/application who can serve the purpose.

All the hops are at remote location, so that going over there is not possible.

share|improve this question
    
Does your company own and operate the 5 hops in question, or do these hops belong to a different services provider? –  Mike Pennington Jun 12 '12 at 16:22
    
Belong to third party –  SHW Jun 13 '12 at 6:34

2 Answers 2

up vote 1 down vote accepted
+50

Tools

Is there any way to find out, what is the incoming and outgoing bandwidth usage of each hop (for a particular port.)?

Unless you own the network element, or your third-party WAN provider discloses the information, you can only estimate end-to-end available ingress and egress bandwidth along a network path. See below.

Is there exist any tool/utility/application who can serve the purpose.

  • For path "available bandwidth estimation" that I mentioned above, you should review Sally Floyd's archive of end-to-end TCP/IP bandwidth estimation tools. I am most familiar with yaz, which is based on unicast UDP packets.
  • To see whether you are dropping packets at any given router hop (which is your bottom-line problem), you can use mtr; there is also a win-mtr client, which supports Windows. To see a simple example of how I typically troubleshoot packet drops, see my answer on SuperUser. This technique is most effective at providing visibility to packet drops at the first point where they happen (since mtr doesn't give much visibility to downstream drops beyond that point until you correct the first).

A simple technique to get a rough estimate of where your drops are is to install mtr on your server and then run an mtr session to trace packet loss to a single multicast client while you are transferring your 100M file. For more precise measurements you could use iperf to saturate the network instead of your 100M file (as long as you coordinate WAN downtime appropriately with other groups in the company).

Diagram

The rest of my answer is going to use the following diagram for reference:

Mcast_problem

In the diagram:

  • R1 through R5 are IP routers
  • S1 and S5 are ethernet switches
  • The blue server on 172.16.1.0/24 represents your multicast server.
  • C51 through C55 are examples of multicast receivers (could be any number of receivers)

The specifics of the WAN between R1 and R5 usually won't matter much, we just need a baseline topology so we're on the same page.

From what I can tell, you're saying that R1's interface on 172.16.1.0/24 shows about 9Mbps while you are sending the 100MB file and R5's interface on 172.16.5.0/24 shows about 4.2Mbps when clients are receiving via reliable UDP multicast. When you say reliable, I assume that means there is some kind of packet sequencing built into the multicast service, and the client application knows how to request a retransmission from the server.

Diagnosis

If this description is correct, there are a few likely causes:

  1. Link congestion somewhere after R1, as you asserted in your question.
  2. Performance limitations of any Rx device in the path, including R1 and R5 (such as hitting a multicast replication performance limit)
  3. You're hitting a throughput limitation of 10M half-duplex ethernet.

Causes 1 or 2 would be revealed by using mtr. However, cause 3 is worthy of a bit more discussion. 10M/half links provide a maximum of 10Mbps for a unidirectional transfer. If you are sending bi-directional traffic on a 10M/half link, you will typically see substantially less than 10Mbps because of ethernet's CSMA/CD dynamics. On a half-duplex link, ethernet cannot simultaneously transmit and receive; if stations try to do this, their frames will collide, and both stations will delay retransmission for a random time.

I test networks for a living. When I have tested effective bi-directional throughput of 10M/half links, I generally see between 3Mbps and 4Mbps. The numbers you're sharing above sound very similar. I don't have enough evidence to make an accusation, but I would not be surprised if your 10M/half links are the problem; particularly if the link between R5 and S5 is 10M/half.

share|improve this answer
    
Thanks Mike for this detailed answer. There are few things, which I had forgot to mention: 1. Server to client, the bandwidth link is of 10Mbps 2. Client to server, the bandwidth link is of 256kbps only 3. Reliable UDP protocol which I am using here is UFTP. <tcnj.edu/~bush/uftp.html>; This protocol gives the acknowledgement for every packet, which it received at client side 4. Server is Windows 7 and client is LINUX –  SHW Jun 15 '12 at 6:21
    
I am curious, what was the solution to your problem? –  Mike Pennington Jun 16 '12 at 8:14
    
No, I have not found any solution yet. But just given bounty to you. If you have any further thought on the same, please share it. –  SHW Jun 16 '12 at 8:17

Assuming you can remotely access (and have a privileged account on) each machine, you might try the iftop utility.

Something like iftop -f udp -F "port <port> and host <previous hop>" should give you all udp traffic from the given host on the given port. See the man pages for more info on constructing filters. (Also of note: assuming you have access to the network, you can also monitor the entire network by specifying the network/netmask like so: -F 10.0.0.0/255.0.0.0)

If you don't want to / can't install iftop, but have access to iptables you can also have it log your traffic and use that to calculate bandwidth.

First setup a chain for your application and forward all incoming / outgoing traffic:

iptables -N $CHAIN && iptables -A FORWARD

Then setup a rule for separate upload / download:

# Downloads
iptables -A FORWARD -d $PREVIOUSHOP -j $CHAIN

# Town A Uploads
iptables -A FORWARD -s $PREVIOUSHOP -j $CHAIN`

Now view the traffic usage for each chain: iptables -L -v -n

share|improve this answer
    
Unfortunately I do not have access to each hop as they belong to third party. So can not install iftop nor use iptables. –  SHW Jun 13 '12 at 8:05
    
Yah, sorry, realized that was probably what you meant shortly after posting. –  Sam Whited Jun 13 '12 at 13:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.