ChatGPT解决这个技术问题 Extra ChatGPT

Difference between TCP and UDP?

What is the difference between TCP and UDP?

I know that TCP is used in the case of non-time critical applications, and UDP is used for games or applications that require fast transmission of data. I know that TCP is used for HTTP, HTTPs, FTP, SMTP, and Telnet. I know that UDP is used for DNS and DHCP.

But why? What characteristics of TCP and UDP make it useful for their respective use cases?

And this (skullbox.net/tcpudp.php) -- which was the first Google hit -- wasn't clear enough? What was confusing about it? Maybe this is better? tcpipguide.com/free/…
I'm really curious why this question got (at time of writing) 3 upvotes. The first sentence doesn't even make sense and there is a lot of material available on this topic if one searches.
@MattH: 1) It's a good question, if rather broad and a duplicate already well-answered. 2) You had more than enough reputation to fix the typo in the first sentence. 3) It's irrelevant that information about this exists elsewhere. Stack Overflow aims to become a repository of knowledge, and answers questions canonically here.
Interesting that almost nobody mentions that DHCP uses broadcast, but everybody thinks 'the answer' is about guarantee of delivery and retransmission.
Just for anyone else reading this in the future, the Skullbox site mentioned above has MALWARE according to Google (it stopped me when I clicked on it). I'd advise not going there.

H
Heisenbug

TCP is a connection oriented stream over an IP network. It guarantees that all sent packets will reach the destination in the correct order. This imply the use of acknowledgement packets sent back to the sender, and automatic retransmission, causing additional delays and a general less efficient transmission than UDP.

UDP is a connection-less protocol. Communication is datagram oriented. The integrity is guaranteed only on the single datagram. Datagrams reach destination and can arrive out of order or don't arrive at all. It is more efficient than TCP because it uses non ACK. It's generally used for real time communication, where a little percentage of packet loss rate is preferable to the overhead of a TCP connection.

In certain situations UDP is used because it allows broadcast packet transmission. This is sometimes fundamental in cases like DHCP protocol, because the client machine hasn't still received an IP address (this is the DHCP negotiaton protocol purpose) and there won't be any way to establish a TCP stream without the IP address itself.


An example where UDP is used is in video and audio transmission where losing a few packets here and there usually does not matter so much (the color of a frame might be off, or a tiny nano-second of audio might be cut out or altered -- not really noticeable to humans). Of course, if your connection is really bad, you might lose so many packets that the video appears blurry/pixelated and the audio becomes fuzzy and cuts in and out a lot.
H
Hal Mueller

From the Skullbox article:

TCP (Transmission Control Protocol) is the most commonly used protocol on the Internet. The reason for this is because TCP offers error correction. When the TCP protocol is used there is a "guaranteed delivery." This is due largely in part to a method called "flow control." Flow control determines when data needs to be re-sent, and stops the flow of data until previous packets are successfully transferred. This works because if a packet of data is sent, a collision may occur. When this happens, the client re-requests the packet from the server until the whole packet is complete and is identical to its original. UDP (User Datagram Protocol) is anther commonly used protocol on the Internet. However, UDP is never used to send important data such as webpages, database information, etc; UDP is commonly used for streaming audio and video. Streaming media such as Windows Media audio files (.WMA) , Real Player (.RM), and others use UDP because it offers speed! The reason UDP is faster than TCP is because there is no form of flow control or error correction. The data sent over the Internet is affected by collisions, and errors will be present. Remember that UDP is only concerned with speed. This is the main reason why streaming media is not high quality.

2) TCP needs more processing at network interface level where as in UDP it’s not.

3) TCP uses, 3 way handshake, congestion control, flow control and other mechanism to make sure the reliable transmission.

4) UDP is mostly used in cases where the packet delay is more serious than packet loss.


+1 Reasonably good summary. Though the is the most commonly used protocol on the Internet statement is arguable and really depends on how you define most commonly used, protocol and the Internet. For example, Internet Protocol is a more likely contender to that particular crown.
-1: The reason UDP is used for DHCP has nothing to do with packet delay or loss.
When sending lots of data on a clear channel, TCP is often faster than UDP. The reason UDP is used for things like live-streaming audio or video is that when a TCP packet goes missing, the receiving application won't see anything more until the missing data has been retransmitted and received successfully. In many streaming applications, data which arrives late will be useless, so there's no point holding everything up while waiting for a retransmission which is going to be useless anyway.
UDP is used for DHCP because TCP does not support broadcasts. DHCP relies on the use of a broadcast in order to get the IP address for the DHCP server. See stackoverflow.com/questions/21266008/…
M
Marc B

Think of TCP as a dedicated scheduled UPS/FedEx pickup/dropoff of packages between two locations, while UDP is the equivalent of throwing a postcard in a mailbox.

UPS/FedEx will do their damndest to make sure that the package you mail off gets there, and get it there on time. With the post card, you're lucky if it arrives at all, and it may arrive out of order or late (how many times have you gotten a postcard from someone AFTER they've gotten home from the vacation?)

TCP is as close to a guaranteed delivery protocol as you can get, while UDP is just "best effort".


Decent enough answer. I would add that in a TCP stream the packets are acknowledged by the destination and corrupt packets/missing packets are resent by the sender. In UDP the packets are sent and the destination receives them in any order and does not acknowledge receipt.
Bit of a misleading analogy perhaps more suited to QoS
i like the analogy a lot, but one thing this answer slightly misrepresents is the speed. it makes it sound like TCP is faster, when in reality UDP is because there is less overhead.
H
Heath Hunnicutt

Reasons UDP is used for DNS and DHCP:

DNS - TCP requires more resources from the server (which listens for connections) than it does from the client. In particular, when the TCP connection is closed, the server is required to remember the connection's details (holding them in memory) for two minutes, during a state known as TIME_WAIT_2. This is a feature which defends against erroneously repeated packets from a preceding connection being interpreted as part of a current connection. Maintaining TIME_WAIT_2 uses up kernel memory on the server. DNS requests are small and arrive frequently from many different clients. This usage pattern exacerbates the load on the server compared with the clients. It was believed that using UDP, which has no connections and no state to maintain on either client or server, would ameliorate this problem.

DHCP - DHCP is an extension of BOOTP. BOOTP is a protocol which client computers use to get configuration information from a server, while the client is booting. In order to locate the server, a broadcast is sent asking for BOOTP (or DHCP) servers. Broadcasts can only be sent via a connectionless protocol, such as UDP. Therefore, BOOTP required at least one UDP packet, for the server-locating broadcast. Furthermore, because BOOTP is running while the client... boots, and this is a time period when the client may not have its entire TCP/IP stack loaded and running, UDP may be the only protocol the client is ready to handle at that time. Finally, some DHCP/BOOTP clients have only UDP on board. For example, some IP thermostats only implement UDP. The reason is that they are built with such tiny processors and little memory that the are unable to perform TCP -- yet they still need to get an IP address when they boot.

As others have mentioned, UDP is also useful for streaming media, especially audio. Conversations sound better under network lag if you simply drop the delayed packets. You can do that with UDP, but with TCP all you get during lag is a pause, followed by audio that will always be delayed by as much as it has already paused. For two-way phone-style conversations, this is unacceptable.


c
caltuntas

One of the differences is in short

UDP : Send message and dont look back if it reached destination, Connectionless protocol TCP : Send message and guarantee to reach destination, Connection-oriented protocol


T
Timir

TCP establishes a connection before the actual data transmission takes place, UDP does not. In this way, UDP can provide faster delivery. Applications like DNS, time server access, therefore, use UDP.

Unlike UDP, TCP uses congestion control. It responses to the network load. Unlike UDP, it slows down when network congestion is imminent. So, applications like multimedia preferring constant throughput might go for UDP.

Besides, UDP is unreliable, it doesn't react on packet losses. So loss sensitive applications like multimedia transmission prefer UDP. However, TCP is a reliable protocol, so, applications that require reliability such as web transfer, email, file download prefer TCP.

Besides, in today's internet UDP is not as welcoming as TCP due to middle boxes. Some applications like skype fall down to TCP when UDP connection is assumed to be blocked.


E
Eugene

Run into this thread and let me try to express it in this way.

TCP

3-way handshake

Bob: Hey Amy, I'd like to tell you a secret Amy: OK, go ahead, I'm ready Bob: OK

Communication Bob: 'I', this is the first letter Amy: First letter received, please send me the second letter Bob: ' ', this is the second letter Amy: Second letter received, please send me the third letter Bob: 'L', this is the third letter After a while Bob: 'L', this the third letter Amy: Third letter received, please send me the fourth letter Bob: 'O', this the forth letter Amy: ... ......

4-way handshake Bob: My secret is exposed, now, you know my heart. Amy: OK. I have nothing to say. Bob: OK.

UDP

Bob: I LOVE U Amy received: OVI L E

TCP is more reliable than UDP with even message order guaranteed, that's no doubt why UDP is more lightweight and efficient.


s
sage

Short and simple differences between Tcp and Udp protocol:

1) Tcp - Transmission control protocol and Udp - User datagram protocol.

2) Tcp is reliable protocol, Where as Udp is a unreliable protocol.

3) Tcp is a stream oriented, where as Udp is a message oriented protocol.

4) Tcp is a slower than Udp.


M
Michael Adams

This sentence is a UDP joke, but I'm not sure that you'll get it. The below conversation is a TCP/IP joke:

A: Do you want to hear a TCP/IP joke?
B: Yes, I want to hear a TCP/IP joke.
A: Ok, are you ready to hear a TCP/IP joke?
B: Yes, I'm ready to hear a TCP/IP joke.
A: Well, here is the TCP/IP joke.
A: Did you receive a TCP/IP joke?
B: Yes, I **did** receive a TCP/IP joke.

W
Waqas Ahmed

TCP and UDP are transport layer protocol, Layer 4 protocol in OSI(open systems interconnection model). The main difference along with pros and cons are as following. TCP

PROS:

Acknowledgment

Guaranteed Delivery

Connection based

Ordered packets

Congestion control

CONS:

Larger Packet

More bandwidth

Slower

Statefull

Consume memory

UDP

PROS:

Packets are smaller

Consume less bandwidth

Faster

Stateless

CONS:

No acknowledgment

No guaranteed delivery

Connectionless

No congestion control

No order packet


r
raiks

TLDR;

TCP - stream-oriented, requires a connection, reliable, slow

UDP - message-oriented, connectionless, unreliable, fast

Before we start, remember that all disadvantages of something are a continuation of its advantages. There only a right tool for a job, no panacea. TCP/UDP coexist for decades, and for a reason.

TCP

It was designed to be extremely reliable and it does its job very well. It's so complex because it accomplishes a hard task: providing a reliable transport over the unreliable IP protocol.

Since all TCP's complex logic is encapsulated into the network stack, you are free from doing lots of laborious, error-prone low-level stuff in the application layer.

When you send data over TCP, you write a stream of bytes to the socket at the sender side where it gets broken into packets, passed down the stack and sent over the wire. On the receiver side packets get reassembled again into a continous stream of bytes.

Maintaining this nice abstraction has a cost in terms of complexity and performance. If the 1st packet from the byte stream is lost, the receiver will delay processing of subsequent packets even those have already arrived (the so-called "head of line blocking").

In addition, in order to be reliable, TCP implements this:

TCP requires an established connection, which requires 3 round-trips ("infamous" 3-way handshake)

TCP has a feature called "slow start" when it gradually ramps up the transmission rate after establishing a connection to allow a receiver to keep up with data rate

Every sent packet has to be acknowledged or else a sender will stop sending more data

And on and on and on...

All this is exacerbated in slow unreliable wireless networks because TCP was designed for wired networks where delays are predictable and packet loss is not so common. In addition, like many people already mentioned, for some things TCP just doesn't work at all (DHCP). However, where relevant, TCP still does its work exceptionally well.

Using a mail analogy a TCP session is similar to telling a story to your secretary who breaks it into mails and sends over a crappy mail service to a publisher. On the other side another secretary assembles mails into a single piece of text. Some mails get lost, some get corrupted, so a very complex procedure is required for reliable delivery and your 10-page story can take a long time to reach your publisher.

UDP

UDP, on the other hand, is message-oriented, so a receiver writes a message (packet) to the socket and then it gets transmitted to a receiver as-is, without any splitting/assembling in the transport layer.

Compared to TCP, its specification is very straightforward. Essentially, all it does for you is adding a checksum to the packet so a receiver can detect its corruption. Everything else must be implemented by you, a software developer. Now read the voluminous TCP spec and try thinking of re-implementing even a small subset of it.

Some people went this way and got very decent results, to the point that HTTP/3 uses QUIC - a protocol based on UDP. However, this is more of an exception. Common applications of UDP are audio/video streaming and conferencing applications like Skype, Zoom or Google Hangout where loosing packets is not so important compared to a delay introduced by TCP.


B
BenKoshy

Simple Explanation by Analogy

TCP is like this.

Imagine you have a pen-pal on Mars (we communicated with written letters back in the good ol' days before the internet).

You need to send your pen pal the seven habits of highly effective people. So you decide to send it in seven separate letters:

Letter 1 - Be proactive Letter 2 - Begin with the end in mind...

etc.

etc..Letter 7 - Sharpen the Saw

Requirements:

You want to make sure that your pen pal receives all your letters - in order and that they arrive perfectly. If your pen pay receives letter 7 before letter 1 - that's no good. if your pen pal receives all letters except letter 3 - that also is no good.

Here's how we ensure that our requirements are met:

Confirmation Letter: So your pen pal sends a confirmation letter to say "I have received letter 1". That way you know that your pen pal has received it. If a letter does not arrive, or arrives out of order, then you have to stop, and go back and re-send that letter, and all subsequent letters.

Flow Control: Around the time of Xmas you know that your pen pal will be receiving a lot of mail, so you slow down because you don't want to overwhelm your pen pal. (Your pen pal sends you constant updates about the number of unread messages there are in penpal's mailbox - if your pen pal says that the inbox is about to explode because it is so full, then you slow down sending your letters - because your pen pal won't be able to read them.

Perfect arrival. Sometimes while you send your letter in the mail, it can get torn, or a snail can eat half of it. How do you know that all your letter has arrived in perfect condition? Well your pen pal will give you a mechanism by which you can check whether they've got the full letter and that it was the exactly the letter that you sent. (e.g. via a word count etc. ). a basic analogy.


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now