I've been in some interesting discussions this week about the transport layer of the network stack, specifically discussions about transport protocols that depart from what might be considered convention. DCCP has been an interesting topic. It stands for Datagram Congestion Control Protocol. Normally when we think of datagrams we think of UDP, a great protocol for things where timeliness is more important than reliability. UDP is useful in applications such as games, VoIP, and streaming video. These applications only care about receiving the most up-to-date information quickly. Loss is usually acceptable (causing artifacts to occur) as long as there is no delay. The biggest downside to UDP is that it can quickly overload a network because there is no congestion control. For this reason, a lot of network administrators block UDP from travelling outside of local area networks.
DCCP provides an interesting solution to this problem. They’re protocol provides congestion control without reliability. One of the issues this automatically presents is that of making sure the latest information still arrives in a timely fashion. One of the approaches they took initially was to take TCP and rip out reliability to see if that worked. It didn’t. It turns out that TCP’s tightly coupled algorithms break when all parties are not present. One of the interesting things about DCCP is that congestion control is modular, meaning, you can swap out congestion control algorithms. I think DCCP is a really good idea. There is plenty of need for congestion controlled unreliable protocols since online video services and VoIP have taken off.