[dcc2] Other comments

codemstr at ptdprolog.net codemstr at ptdprolog.net
Sun Jun 27 23:36:55 EDT 2004


> This is not an essential feature, and (displaying as you download) its 
> just as easy to turn this off, and you would use TCP where possible.

Well, it's not essential to you. To someone who relies on this feature, and 
has done so for several years, they may very well think differently. If the 
purpose of DCC2 is to break existing clients, then expect it to fail. Users 
who are accustomed to these features are not going to want to give them up 
because some other people decided it was "not essential." 

You are right, if you turned of UDP for the send, it would solve the problem. 
But I don't see that as a very good thing. I can see the support questions 
now. "I just sent file.txt to a user, and it sent fine, now I try to send 
pic.jpg and it says it can't connect, why?" User's will not understand that 
the client uses UDP for regular connections and TCP for display-as-you-go. 
Plus, if a NAT is present, then we're back to the same initial problem.

> The reason a UDP transport is usefull is because in most NAT situations
> you can send a UDP packet, but you can't maintian a TCP connection, and
> henceforth sending a file will just work if you use UDP, and then use a
> TFTP-like mechanism.

I'm not sure I understand here. I have a Linksys router, it has all UDP and 
TCP ports closed by default. Yes, I can send a UDP packet, but I can also 
send a TCP packet. But, if someone tries to address a UDP packet to me, it 
will fail. How is this better than just using a passive TCP connection? 
Meaning, I connect to the IP:port of the other user, and the connection is 
done like that. I don't know of any NAT that would prevent that. The only 
instance where passive TCP wouldn't work is if *both* users are behind an 
NAT, and as I mentioned, I really don't see how UDP solves that since if the 
user tries to UDP to me, he's going to get the same error as if he used TCP. 
Or am I completely missing something? 

> This is entirely wrong. All you need to do is write it out to the file
> that your receiving in, and keep a map of what you have received (which
> wouldn't be that large) so like you are goign to use 4GB of space in the
> first place so if you write bits of that file out, its not a problem.
> So you basically end up with a file with empty space, this is how P2P
> applications work that allow you to download from multiple sources, same
> for download managers like getright that let you download in parts.

You say store the stuff in the file as it is received, and then store a map 
in memory which can later be used to reorganize it. That's exactly what I 
said as alternative #3. And, I said, having to move stuff around in a 4GB 
file is not going to be fast. Imagine if every single packet is out of order 
and needs to be moved by 512 bytes. For a 4GB file, that's a lot of movement. 
You are absolutely correct, that is how P2P allows multiple sources. But, the 
speed loss of moving stuff around is unimportant there. The multiple sources 
makes up for it. Meaning, it takes (made up numbers) 10s to move the parts 
around, and the multiple sources would have made the whole thing take 30s 
less, so in all, the process made the download 20s faster. However, with DCC, 
it would be 10s slower since there is no 30s speedup from multiple sources. 

-- codemastr



More information about the dcc2 mailing list