« Working with Java New I/O (NIO) | Main | Java Native Interface (JNI) and Experiments in Pain »

iTunes Transport Protocol for Internet Radio

Earlier today, I started up iTunes to listen to the KCRW Internet radio station while at work. The music played fine, even though all Internet-bound traffic on my employer's network is restricted to HTTP(S). I ran Ethereal for a minute to capture some of my network traffic to find out what protocol iTunes was using, and was surprised to see that it uses the Hyper-Text Transport Protocol (HTTP). HTTP is most often used for web browsing, not streaming audio.

It's interesting that HTTP is used since it relies on TCP, which implies guaranteed delivery of all packets even if the connection can't keep up with the transmission. Most Voice-Over-IP applications use UDP instead of TCP because UDP is a much less "chatty" protocol although it does not guarantee delivery.

Come to think of it, one of my favorite parts of iTunes radio stations is the quality of their sound. This could very well be attributed to the use of TCP. I wonder how many other internet radio services use TCP instead of UDP, too?