Le Mar 10 Déc 2002 23:45, vous avez écrit :
What do you
mean by "server"? The sender, or just the DHCP server?
The sender. The disk images will be stored on a machine one one subnet
and all the receivers will be on another subnet.
ok
1. If you mean
the sender of data, you must be aware that multicast
works best within the same subnet. It is possible to get it to work in
different subnets by using the --ttl version on both the sender and
the receivers. This sets the "time to live" on the multicast packets,
allowing the to traverse routers. However, this only works if the
router supports multicast routing, but most unfortunately don't :-(
Our router does support multicast, it is a Cisco 6500. I worked out the
problem. The address range 224.0.0.0/24 is a reserved, non forwardable
range. I had to chose and address outside this range for the routers to
forward the packets. I used the address 239.0.0.1.
I also came across some other problems. Sometimes, all the receivers
timeout on the sender. I increased the timeout but that did not help.
I think what is happening is the receiver misses a packet and sends a
notification to the sender. That packet gets lost though and both
sender and receiver are then left waiting for the other to make a move.
The udpcast server sends packets in batches ("slices") of up to 1024
packets. When a slice is transmitted, the sender "asks" the receivers
to send their confirmations. Receivers reply either with a
confirmation that everything has been received (good), or with a
bitmap of missing packets.
Missing packets are then transmitted, and confirmation is again asked
of those receivers which weren't ok the first time around.
If a receiver does not reply at all, the sender will re-ask for
confirmation every couple of seconds, until all confirmations are in.
If a receiver has not replied for about a minute, the sender drops
that receiver from its list, in order to be able to finish the
transmission with the others.
If I limit the bit rate, this problem is less frequent
so I think the
router has bandwidth restrictions and once they are exceeded it drops
packets. This would not be a problem though if the session did not
timeout.
Unfortunately for the moment the timeout duration is hardwired, and is
200. This is specified in line 921 of senddata.c:
if(rexmitSlice->rxmitId > 200)
You can change it there to a higher value. In a future version, this
will become configurable.
If this is the case, how hard do you think it would be
for the receiver
to retransmit whatever it needs to get the transmission going again, if
say it has not got a reply from the sender in so many milliseconds?
John.
Obviously, after a while, the router is dropping all the packets in
one direction (at least) after a while. After such an occurrence, no
matter what the receiver sends will not unblock the situation.
In order to debug this, you can try running the command-line variant
of udpcast on an server and (already installed) receiver(s), and run
tcdpump along with it to check where the packets are dropped.
Alain