TCP和UDP之间的区别?

时间:2011-05-11 20:44:09

标签: tcp network-programming udp protocols

TCP和UDP有什么区别?

我知道TCP用于非时间关键应用程序,UDP用于需要快速传输数据的游戏或应用程序。我知道TCP用于HTTP,HTTP,FTP,SMTP和Telnet。我知道UDP用于DNS和DHCP。

但为什么呢? TCP和UDP的哪些特性使它们对各自的用例有用?

13 个答案:

答案 0 :(得分:112)

TCP是IP网络上面向连接的流。它保证所有发送的数据包将以正确的顺序到达目的地。这意味着使用发送回发送方的确认数据包和自动重传,导致额外的延迟和通常效率低于UDP的传输。

UDP是一种无连接协议。通信以数据报为导向。仅在单个数据报上保证完整性。数据报到达目的地,可能无法到达或根本无法到达。它比TCP更有效,因为它使用非 ACK 。它通常用于实时通信,其中一小部分丢包率优于TCP连接的开销。

在某些情况下使用UDP是因为它允许广播数据包传输。这在DHCP协议这样的情况下有时是基本的,因为客户端计算机还没有收到IP地址(这是DHCP协议协议的目的),并且不会有建立TCP流而没有IP地址的方法。

答案 1 :(得分:50)

来自the Skullbox article:

TCP(传输控制协议)是Internet上最常用的协议。  这是因为TCP提供了纠错功能。当使用TCP协议时,存在“保证传送”。这主要是由于一种称为“流量控制”的方法。流控制确定何时需要重新发送数据,并停止数据流直到成功传输先前的数据包。这是有效的,因为如果发送数据包,则可能发生冲突。发生这种情况时,客户端会从服务器重新请求数据包,直到整个数据包完成并且与原始数据包相同。

UDP(用户数据报协议)是Internet上常用的协议。但是,UDP从不用于发送重要数据,如网页,数据库信息等; UDP通常用于流式传输音频和视频。诸如Windows Media音频文件(.WMA),Real Player(.RM)等流媒体使用UDP,因为它提供了速度! UDP比TCP更快的原因是因为没有流控制或纠错的形式。通过Internet发送的数据会受到冲突的影响,并且会出现错误。请记住,UDP仅关注速度。这是流媒体质量不高的主要原因。

1)TCP是面向连接且可靠的,因为UDP连接较少且不可靠。

2)TCP需要在网络接口级别进行更多处理,而在UDP中则不需要。

3)TCP使用,3路握手,拥塞控制,流量控制等机制,确保可靠传输。

4)UDP主要用于数据包延迟比丢包更严重的情况。

答案 2 :(得分:40)

将TCP视为两个位置之间专用的预定UPS / FedEx接收/下载包,而UDP相当于在邮箱中投放明信片。

UPS / FedEx会做他们最大的事情,以确保您邮寄的包裹到达那里,并准时到达那里。使用明信片,你很幸运,如果它到达,它可能会无序或迟到(有多少次你从度假回家后得到一张明信片?)

TCP尽可能接近保证传送协议,而UDP只是“尽力而为”。

答案 3 :(得分:20)

UDP用于DNS和DHCP的原因:

DNS - TCP需要来自服务器(侦听连接)的更多资源,而不是来自客户端的资源。特别是,当TCP连接关闭时,服务器需要在称为TIME_WAIT_2的状态下记住连接的详细信息(将它们保存在内存中)两分钟。这是防止来自先前连接的错误重复分组被解释为当前连接的一部分的特征。维护TIME_WAIT_2会占用服务器上的内核内存。 DNS请求很小,并且经常从许多不同的客户端到达。与客户端相比,此使用模式会加剧服务器上的负载。人们认为使用UDP没有任何连接,也没有状态可以在客户端或服务器上维护,这将改善这个问题。

DHCP - DHCP是BOOTP的扩展。 BOOTP是客户端计算机用来从服务器获取配置信息的协议,而客户端正在启动。为了定位服务器,发送广播以询问BOOTP(或DHCP)服务器。广播只能通过无连接协议发送,例如UDP。因此,BOOTP至少需要一个UDP数据包,用于服务器定位广播。此外,由于BOOTP在客户端...启动时正在运行,并且这是客户端可能没有加载并运行其整个TCP / IP堆栈的时间段,因此UDP可能是客户端准备处理的唯一协议时间。最后,一些DHCP / BOOTP客户端只有板载UDP。例如,某些IP恒温器仅实现UDP。原因是它们使用如此微小的处理器和很少的内存构建,无法执行TCP - 但它们仍然需要在启动时获取IP地址。

正如其他人所提到的,UDP对流媒体尤其是音频也很有用。如果您只是丢弃延迟的数据包,在网络延迟下对话听起来会更好。你可以用UDP做到这一点,但是在延迟期间你得到的所有内容都是暂停,接下来是音频,它总是会延迟到它已经暂停的时间。对于双向电话式对话,这是不可接受的。

答案 4 :(得分:15)

其中一个不同之处在于

UDP :发送消息,如果到达目的地,则不要回头看看,无连接协议
TCP :发送消息并保证到达目的地,面向连接的协议

答案 5 :(得分:9)

TCP在实际数据传输发生之前建立连接,而UDP则不然。通过这种方式,UDP可以提供更快的交付。因此,DNS,时间服务器访问等应用程序使用UDP。

与UDP不同,TCP使用拥塞控制。它响应网络负载。与UDP不同,当网络拥塞迫在眉睫时,它会变慢。因此,像多媒体这样的应用程序更喜欢恒定吞吐量可能适用于UDP

此外,UDP不可靠,它不会对数据包丢失做出反应。因此,像多媒体传输这样对丢失敏但是,TCP是一种可靠的协议,因此,需要可靠性的应用程序(如Web传输,电子邮件,文件下载)更喜欢TCP。

此外,在今天的互联网中,由于中间的盒子,UDP并不像TCP那样受欢迎。当假设UDP连接被阻止时,某些应用程序(如skype)会降为TCP。

答案 6 :(得分:2)

答案 7 :(得分:2)

Tcp和Udp协议之间的简短差异:

1)Tcp - 传输控制协议和Udp - 用户数据报协议。

2)Tcp是可靠的协议,其中Udp是不可靠的协议。

3)Tcp是面向流的,其中Udp是面向消息的协议。

4)Tcp比Udp慢。

答案 8 :(得分:1)

遇到这个线程,让我尝试用这种方式表达它。

TCP

3次握手

Bob:嘿,艾米,我想告诉你一个秘密
艾米:好,继续,我准备好了
鲍勃:确定

通讯
鲍勃:'我',这是第一个字母
艾米:收到第一封信,第二封信请寄给我
鲍勃:'',这是第二个字母
艾米:收到第二封信,请寄给我第三封信
鲍勃:'L',这是第三个字母
过了一会儿
鲍勃:'L',这是第三个字母
艾米:收到第三封信,请寄给我第四封信
鲍勃:'O',这是第四封信
艾米:...
......

四向握手
鲍勃:我的秘密暴露了,现在,你知道我的心了。 艾米:好的。我无话可说了
鲍勃:好的。

UDP

鲍勃:我爱你
艾米收到了: OVI L E

TCP比UDP更可靠,并且消息顺序得到保证,这无疑是UDP为什么更轻量和高效的原因。

答案 9 :(得分:1)

TLDR;

  • TCP-面向流,需要连接,可靠,缓慢
  • UDP-面向消息,无连接,不可靠,快速

在开始之前,请记住,某物的所有缺点都是其优点的延续。只有正确的工作工具,没有万能药。 TCP / UDP共存数十年,这是有原因的。

TCP

它设计得非常可靠,并且做得很好。它是如此复杂,因为它完成了一项艰巨的任务:通过不可靠的IP协议提供可靠的传输。

由于所有TCP的复杂逻辑都封装在网络堆栈中,因此您无需在应用程序层中进行大量费力且容易出错的底层工作。

通过TCP发送数据时,您将字节流写入发送方的套接字,在此套接字被分解为数据包,向下传递到堆栈,然后通过电线发送。在接收器端,数据包再次重新组合成连续的字节流。

维护这种漂亮的抽象在复杂性和性能方面都付出了代价。如果字节流中的第一个数据包丢失,则接收器将延迟后续数据包的处理,即使那些已经到达的数据包也是如此(所谓的“行头阻塞”)。

此外,为了可靠起见,TCP实现了此目的:

  • TCP需要建立的连接,该连接需要3次往返(“臭名昭著”的3次握手)
  • TCP具有一种称为“慢启动”的功能,当它在建立连接后逐渐提高传输速率以允许接收方跟上数据速率时,就可以
  • 每个发送的数据包都必须得到确认,否则发送方将停止发送更多数据
  • 然后不断……

在慢速,不可靠的无线网络中,所有这些都会加剧,因为TCP是为有线网络设计的,在有线网络中,延迟是可以预见的,而数据包丢失并不常见。此外,就像已经提到的许多人一样,对于某些事情,TCP根本无法工作(DHCP)。但是,在相关的情况下,TCP仍然可以出色地完成其工作。

使用邮件类比,TCP会话类似于向您的秘书讲述一个故事,后者将其分解为邮件,然后通过糟糕的邮件服务发送给发布者。在另一边,另一位秘书将邮件汇编成单个文本。有些邮件丢失了,有些损坏了,因此,可靠的交付需要非常复杂的过程,而长达10页的故事可能需要很长时间才能到达发布者。

UDP

另一方面,UDP是面向消息的,因此接收方将消息(数据包)写入套接字,然后按原样发送给接收方,而无需在传输层中进行任何拆分/组装。< / p>

与TCP相比,其规范非常简单。从本质上讲,它为您所做的就是向数据包添加一个校验和,以便接收方可以检测到其损坏。其他一切都必须由软件开发人员来实现。现在,请阅读大量的TCP规范,并尝试重新实现它的一小部分。

有些人采用这种方法并获得了非常不错的结果,以至于HTTP / 3使用QUIC(一种基于UDP的协议)。但是,这更是一个例外。 UDP的常见应用是音频/视频流和会议应用程序,例如Skype,Zoom或Google Hangouts,与TCP引入的延迟相比,丢失数据包并不那么重要。

答案 10 :(得分:1)

这句话是UDP的笑话,但我不确定您是否会理解。下面的对话是一个TCP / IP笑话:

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.

答案 11 :(得分:0)

类比的简单解释

TCP就像这样。

想象一下,你在火星上有一个笔友(我们在互联网之前的好日子里回复了书面信件)。

你需要向你的笔友发送高效人士的七种习惯。所以你决定用七个单独的信件发送它:

  1. 信1 - 积极主动
  2. Letter 2 - 从头脑开始......
  3. 等。第7章 - 锐化锯

    要求:

    您希望确保您的笔友收到 所有 您的信件 - 按顺序 并且他们完美地 。如果您的笔支付在第1封之前收到第7封信 - 那是不好的。如果你的笔友收到除了字母3之外的所有字母 - 这也不好。

    以下是我们如何确保满足我们的要求:

    • 确认函:所以你的笔友会发一封确认信说'34;我收到了第1和第34封信。那样你知道你的笔友收到了它。如果一封信没有到达,或者无法到达,那么你必须停下来,然后返回并重新发送该信件以及随后的所有信件。
    • 流量控制:在圣诞节期间你知道你的笔友会收到很多邮件,所以你放慢速度因为你不想压倒你的笔​​友。 (你的笔友会不断向你发送有关笔友邮箱中未读邮件数量的更新信息 - 如果你的笔友说收件箱即将爆炸,因为它太满了,那么你放慢发送信件的速度 - 因为你的笔友不能阅读它们。
    • 完美的到来。有时,当你通过邮件发送信件时,它可能会被撕裂,或者蜗牛可以吃掉一半。你怎么知道你的所有信件都已完好无损?那么你的笔友将为你提供一种机制,通过这种机制你可以检查他们是否已经收到了完整的信件,而这正是你发送的信件。 (例如通过字数等)。一个基本的比喻。

答案 12 :(得分:0)

TCP 和 UDP 是传输层协议,OSI(开放系统互连模型)中的第 4 层协议。主要区别以及优缺点如下。 TCP

优点:

  • 致谢
  • 保证交付
  • 基于连接
  • 有序数据包
  • 拥塞控制

缺点:

  • 较大的数据包

  • 更多带宽

  • 较慢

  • 有状态

  • 消耗内存

UDP

优点:

  • 数据包更小
  • 消耗更少的带宽
  • 更快
  • 无国籍

缺点:

  • 没有确认
  • 不保证交付
  • 无连接
  • 无拥塞控制
  • 没有订单包
相关问题