views:

7105

answers:

11

I wanted to know why UDP is used in RTP rather than TCP ?. Major VoIP Tools used only UDP as i hacked some of the VoIP OSS.

+3  A: 

UDP is often used for various types of realtime traffic that doesn't need strict ordering to be useful. This is because TCP enforces an ordering before passing data to an application (by default, you can get around this by setting the URG pointer, but no one seems to ever do this) and that can be highly undesirable in an environment where you'd rather get current realtime data than get old data reliably.

D.J. Capelis
+3  A: 

RTP is fairly insensitive to packet loss, so it doesn't require the reliability of TCP.

UDP has less overhead for headers so that one packet can carry more data, so the network bandwidth is utilized more efficiently.

UDP provides fast data transmission also.

So UDP is the obvious choice in cases such as this.

Amit Vaghela
+20  A: 

As DJ pointed out, TCP is about getting a reliable data stream, and will slow down transmission, and re-transmit corrupted packets, in order to achieve that.

UDP does not care about reliability of the communication, and will not slow down or re-transmit data.

If your application needs a reliable data stream, for example, to retrieve a file from a webserver, you choose TCP.

If your application doesn't care about corrupted or lost packets, and you don't need to incur the additional overhead to provide the additional reliability, you can choose UDP instead.

VOIP is not significantly improved by reliable packet transmission, and in fact, in some cases things in TCP like retransmission and exponential backoff can actually hurt VOIP quality. Therefore, UDP was a better choice.

Stobor
I'd like to point out that UDP does provide a checksum on the packet. So if you receive a UDP message it's what was sent. But if it was bad then it's discarded, your application won't see it. TCP would ask the other end to retransmit. There are situations where TCP is not always the most efficient (e.g. transmitting the same file to multiple destinations) and so some application level protocols are built on top of UDP.
Matt H
UDP is a better choice if your network does not guarantee the order of delivery or the transmission. This advantage must be compensated by jitter-buffer to re-order packets and sometimes to interpolate them.
Laurent Etiemble
A: 

UDP is used wherever data is send, that does not need to be exactly received on the target, or where no stable connection is needed.

TCP is used if data needs to be exactly received, bit for bit, no loss of bits.

For Video and Sound streaming, some bits that are lost on the way do not affect the result in a way, that is mentionable, some pixels failing in a picture of a stream, nothing that affects a user, on DVDs the lost bit rate is higher.

BeowulfOF
+9  A: 

A lot of good answers have been given, but I'd like to point one thing out explicitly:

Basically a complete data stream is a nice thing to have for real-time audio/video, but its not strictly necessary (as others have pointed out):

The important fact is that some data that arrives too late is worthless. What good is the missing data for a frame that should have been displayed a second ago?

If you were to use TCP (which also guarantees the correct order of all data), then you wouldn't be able to get to the more up-to-date data until the old one is transmitted correctly. This is doubly bad: you have to wait for the re-transmission of the old data and the new data (which is now delayed) will probably be just as worthless.

So RTP does some kind of best-effort transmission in that it tries to transfer all available data in time, but doesn't attempt to re-transmit data that was lost/corrupted during the transfer (*). It just goes on with life and hopes that the more important current data gets there correctly.

(*) actually I don't know the specifics of RTP. Maybe it does try to re-transmit, but if it does then it won't be as aggressive as TCP is (which won't ever accept any lost data).

Joachim Sauer
liked your 3rd para "If you where to use TCP.....".:)
mahesh
+1  A: 

Besides all the others nice and correct answers this article gives a good understanding about the differences between TCP and UDP.

mlarsen
Thanks mlarsen. Liked the link.:)
mahesh
A: 

and when the udp and tcp are behave with the same way ?

+4  A: 

The others are correct, however the don't really tell you the REAL reason why. Saua kind of hints at it, but here's a more complete answer.

Audio and Video is real-time. If you are listening to a radio, or watching TV, and the signal is interrupted, it doesn't pick up where you left off.. you're just "observing" the signal as it streams, and if you can't observe it at any given time, you lose it.

The reason, is simple. Delay. VOIP tries very hard to minimize the amount of delay from the time someone speaks into one end and you get it on your end, and your response back. Otherwise, as errors occured, the amount of delay between when the person spoke and when the signal was received would continuously grow until it became useless.

Remember, each delay from a retransmission has to be replayed, and that causes further data to be delayed, then another error causes an even greater delay. The only workable solution is to simply drop any data that can't be displayed in real-time.

A 1 second delay from retransmission would mean it would now be 1 second from the time I said something until you heard it. A second 1 second delay now means it's 2 seconds from the time i say something until you hear it. This is cumulative because data is played back at the same rate at which it is spoken, and so on...

RTP could be connection oriented, but then it would have to drop (or skip) data to keep up with retransmission errors anyways, so why bother with the extra overhead?

Mystere Man
Liked the answer Mystere :)
mahesh
A: 

just a remark: Each packet sent in an RTP stream is given a number one higher than its predecessor.This allows thr destination to determine if any packets are missing. If a packet is mising, the best action for the destination to take is to approximate the missing vaue by interpolation. Retranmission is not a proctical option since the retransmitted packet would be too late to be useful.

A: 

I'd like to add quickly to what Matt H said in response to Stobor's answer. Matt H mentioned that RTP over UDP packets can be checksum'ed so that if they are corrupted, they will get resent. This is actually an optional feature on most PBXs. In Asterisk, for example, you can enable / disable checksums on your RTP over UDP traffic in the rtp.conf configuration file with the following line:

rtpchecksums=yes ; or no if you prefer

Cheers!

b14ck
+1  A: 

Technically RTP packets can be interleaved over a TCP connection. There are lots of great answers given here. Two additional minor points:

RFC 4588 describes how one could use retransmission with RTP data. Most clients that receive RTP streams employ a buffer to account for jitter in the network that is typically 1-5 seconds long and which means there is time available for a retransmit to receive the desired data.

RTP traffic can be interleaved over a TCP connection. In practice when this is done, the difference between Interleaved RTP (i.e. over TCP) and RTP sent over UDP is how these two perform over a lossy network with insufficient bandwidth available for the user. The Interleaved TCP stream will end up being jerky as the player continually waits in a buffering state for packets to arrive. Depending on the player it may jump ahead to catch up. With an RTP connection you will get artifacts (smearing/tearing) in the video.

J. Fritz Barnes
+1 for RTP being able to run over TCP. Also, RTP over TCP can introduce framing issues. RFC 4103, for instance, doesn't define its own framing, so if you try run it over TCP you'd need to define your _own_ framing protocol.
Frank Shearar