TCP 和 UDP 的区别?

TCP 和 UDP 有什么区别?

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

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

141964 次浏览

可以将 TCP 看作是两个位置之间的专用预定 UPS/FedEx 收发包裹,而 UDP 相当于在邮箱中扔一张明信片。

UPS/联邦快递会尽其所能确保你寄出的包裹及时到达。对于明信片来说,如果它真的到了,你就很幸运了,而且它可能会出错或者迟到(你有多少次在别人度假回家后收到他们寄来的明信片?)

TCP 是尽可能接近有保证的传递协议,而 UDP 只是“最好的努力”。

其中一个区别是简而言之

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

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

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

在某些情况下,使用 UDP是因为它允许广播数据包传输。这在像 DHCP协议这样的情况下是非常重要的,因为客户机还没有接收到 IP地址(这是 DHCP协商协议的目的) ,没有 IP地址本身就没有办法建立 TCP流。

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 可以这样做,但对于 TCP,在延迟期间得到的只是一个暂停,接下来是音频,音频总是被延迟的时间与已经暂停的时间一样多。对于双向电话式的谈话,这是不可接受的。

来自 Skullbox 文章:

TCP (传输控制协议)是互联网上最常用的协议。 这是因为 TCP 提供了错误纠正。当使用 TCP 协议时,有一个“有保证的传输”这在很大程度上要归功于一种称为“流控制”的方法流量控制决定何时需要重新发送数据,并停止数据流,直到前面的数据包成功传输。这是因为如果发送了一个数据包,就可能发生冲突。当这种情况发生时,客户机从服务器重新请求数据包,直到整个数据包完成并且与原始数据包完全相同。

UDP (用户数据报协议)是互联网上另一个常用的协议。然而,UDP 从来没有用于发送重要数据,如网页,数据库信息等,UDP 通常用于流音频和视频。流媒体,如 WindowsMedia 音频文件(。真正的玩家(。RM) ,其他人使用 UDP,因为它提供了速度!UDP 之所以比 TCP 快,是因为没有任何形式的流量控制或错误纠正。通过互联网发送的数据会受到冲突的影响,并且会出现错误。请记住,UDP 只关心速度。这是流媒体质量不高的主要原因。

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

2) TCP 需要在网络接口层进行更多的处理,而 UDP 不需要。

3)采用三向握手、拥塞控制、流量控制等机制,确保传输可靠。

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

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

与 UDP 不同,TCP 使用的是拥塞控制。它响应网络负载。与 UDP 不同,当拥塞控制迫在眉睫时,它会放慢速度。因此,像多媒体这样偏好恒定吞吐量的应用程序可能会选择 UDP。

此外,UDP 是不可靠的,它不反应的数据包丢失。所以像多媒体传输这样对损耗敏感的应用程序更喜欢 UDP。然而,TCP 是一个可靠的协议,所以,应用程序需要可靠性,如网络传输,电子邮件,文件下载更喜欢 TCP。

另外,在今天的互联网上,由于中间的盒子,UDP 不像 TCP 那样受欢迎。当假定 UDP 连接被阻塞时,一些像 skype 这样的应用程序就会沦为 TCP。

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

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

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

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

4) Tcp 比 Udp 慢。

浅谈类比解释

TCP 是这样的。

想象一下你在火星上有一个笔友(在互联网出现之前,我们通过书信交流)。

你需要把高效率人士的七个习惯发给你的笔友。所以你决定分七封寄出:

  1. 字母1-积极主动
  2. 字母2-以结尾开头..。

等等。

字母7-磨快锯子

要求:

你要确保你的笔友收到 所有人你的信 -按顺序排列和他们到达 完美。如果你的钢笔付款收到信7之前的信1-这是没有好处的。如果你的笔友收到除了第三封信以外的所有信件,那也是不好的。

以下是我们如何确保我们的要求得到满足的方法:

  • 确认信: 所以你的笔友发了一封确认信说“我收到了第一封信”。这样你就知道你的笔友收到了。如果一封信没有到达,或者没有按顺序到达,那么你必须停下来,回去重新发送那封信,以及所有后续的信件。
  • 流量控制: 大约在圣诞节期间,你知道你的笔友将收到大量的邮件,所以你放慢了速度,因为你不想让你的笔友不堪重负。(你的笔友不断更新你笔友邮箱里未读信息的数量——如果你的笔友说收件箱快爆炸了,因为它太满了,那么你就放慢了发信的速度——因为你的笔友不能读信。
  • 完美到达。有时候当你把信寄出去的时候,它可能会被撕破,或者一只蜗牛可能会吃掉一半。你怎么知道你所有的信都完好无损地到达了?你的笔友会给你一个机制,通过这个机制,你可以检查他们是否收到了完整的信件,并且这封信正是你寄出的那封。(例如通过字数计算等)。一个基本的类比。

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

TCP

三方握手

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

沟通
鲍勃: “ em > ‘ I’,这是第一个字母
艾米: 收到第一封信,请寄给我第二封信
鲍勃: “ em”,这是第二个字母
艾米: 收到第二封信,请寄给我第三封信
鲍勃: < em > ‘ L’,这是第三个字母
过了一会儿
鲍勃: “ em > ‘ L’,这是第三个字母
艾米: 收到第三封信,请寄给我第四封信
鲍勃: “ em > ‘ O’,这是第四个字母
艾米: ..。
......

四方握手
鲍勃: 我的秘密已经暴露了,现在,你知道我的心了。
艾米: 好吧,我没什么好说的。
好的。

UDP

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

TCP 比 UDP 更加可靠,消息顺序也更加均匀,这无疑是 UDP 更加轻量级和高效的原因。

极低密度辐射;

  • 面向 TCP 流,需要连接,可靠,速度慢
  • 面向消息的,无连接的,不可靠的,快速的

在我们开始之前,请记住 某事物的所有缺点都是其优点的延续。只有适合工作的工具,没有灵丹妙药。TCP/UDP 共存了几十年,是有原因的。

TCP

它被设计成非常可靠,而且它的工作做得非常好。它之所以如此复杂,是因为它完成了一项艰巨的任务: 在不可靠的 IP 协议上提供可靠的传输。

由于所有 TCP 的复杂逻辑都被封装到网络堆栈中,因此您不必在应用程序层中进行大量繁琐的、容易出错的底层工作。

当您通过 TCP 发送数据时,您向发送端的套接字写入一个字节流,在那里它被分解成数据包,传递堆栈并通过线路发送。在接收端,数据包重新组合成一个连续的字节流。

维护这个良好的抽象在复杂性和性能方面是有代价的。如果来自字节流的第一个数据包丢失,接收方将延迟后续数据包的处理,即使后续数据包已经到达(所谓的“线路阻塞头”)。

此外,为了保证可靠性,TCP 实现了以下功能:

  • TCP 需要建立连接,需要3次往返(“臭名昭著”的3次握手)
  • TCP 有一个特性叫做“慢启动”,即在建立连接后逐渐提高传输速率,以使接收方跟上数据速率
  • 每个已发送的数据包都必须得到确认,否则发送方将停止发送更多数据
  • 等等,等等。

所有这些在缓慢不可靠的无线网络中都会加剧,因为 TCP 是为有线网络设计的,在这些网络中,延迟是可预测的,数据包丢失并不常见。此外,正如许多人已经提到过的,对于某些事情,TCP 根本不能工作(DHCP)。然而,在相关的地方,TCP 仍然做得非常好。

使用邮件类比 TCP 会话类似于给你的秘书讲故事,他把故事分解成邮件,然后把糟糕的邮件服务发送给出版商。另一方面,另一位秘书将邮件组装成一份文本。有些邮件丢失了,有些损坏了,所以需要一个非常复杂的程序才能可靠地发送,而你的10页的故事可能要花很长时间才能到达出版商那里。

UDP

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

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

有些人这样做,并得到了非常体面的结果,以至于 HTTP/3使用 QUIC-一个基于 UDP 的协议。然而,这更多的是一个例外。UDP 的常见应用程序是音频/视频流和会议应用程序,如 Skype、 Zoom 或 Google Hangout,在这些应用程序中,与 TCP 引入的延迟相比,丢失数据包并不那么重要。

这个句子是一个 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.

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

支持:

  • 谢谢
  • 保证送达
  • 基于连接
  • 订了包裹
  • 拥塞控制

反对:

  • 更大的数据包

  • 更大的带宽

  • 慢一点

  • 全权负责

  • 消耗记忆

UDP

支持:

  • 数据包更小
  • 减少带宽消耗
  • 再快点
  • 无国籍

反对:

  • 没有回应
  • 没有保证送货
  • 没有联系
  • 没有拥塞控制
  • 没有订单