I am not a networking guy, so will not use network jargon to be safe. I have a machine with a reasonably modern ethernet card (100Mbps?) and I am sending data from this machine to many machines (50-500) which have similar network capacity. For this, my program uses multiple TCP channels. No other funny TCP optimizations there, just simple minded multiple TCP channels. I want to determine, what would be the limiting factors in how much data I could send to these machines.
One such factor that I could think of is congestion on host. But how much congestion exactly? What are the factors that determine the congestion? Any other assumptions or misassumptions I am making here?
Edit: Here is what I know of the network architecture:
The source machine is part of a university network. There is a firewall in place but the port through which this transfer takes place is open. I am not completely sure what kind of switches or routers my data will pass through to its final destinations. Speaking of destinations, these are the machines spread geographically to different universities, so they are also under university infrastructure. I know there is nothing concrete in the info I provided above, but this is all I know at the moment. Are there any specific commands that I could use on my host (a linux box) to pull more information? Thanks.
Generally speaking, the speed of any network path is going to be limited to the slowest element in that path. This includes CPUs, routers, hard-drives, firewalls, and competition from other traffic. There are dozens to hundreds of components in any network path. Their available capacities can and will change rapidly (on the order of milliseconds), so there is no one answer.
You can guess an upper bound by determining the slowest link speeds in each path. For example, if a given network has a 10 megabit per second uplink then you know that any path crossing that uplink will be slower than 10 megabits per second regardless of how fast any other hardware may be. If you have multiple sessions sharing a single link, their total cannot be faster than the link, but they may not share the bandwidth equally.
Because there are so many variables, many of which will depend on the particular behavior of your application, the only way to know how it will behave is to test it and keep in mind that a lot of the variables will be outside your control.
This is a question I hear a lot, so I’ve written a couple of articles on the subject.
Common Network Performance Problems describes the performance limiting devices commonly found on most network paths. This may help you figure out where you need to look for information.
Loss, Latency, and Speed describes how you can gather and interpret statistics about a particular path to diagnose its performance characteristics. This may help you choose performance measuring tools and interpret their results.