UDP和TCP有什么区别?


46

设置端口转发时,我的路由器有两个协议(和“两个”选项)可供选择:UDP和TCP。这两种协议之间有什么区别?在端口转发中何时选择一种?

Answers:


51

TCP受到后备和重试的支持,以确保您的数据能够到达目的地。UDP是无连接的,“即发即弃”。UDP主要用于流式应用程序,在这种情况下,如果丢失了一些数据,则无需尝试再次发送。

您使用哪一个取决于应用程序。例如,Web服务器使用TCP。


3
这很有道理-因此,如果您正在流式传输视频,则以后再重新发送丢失的帧没有意义,因为您已经通过了这一点。谢谢
盖伊

15
+1。补充一点,任何寻求更深入了解的人都应该阅读W. Richard Stevens的许多关于该主题的优秀书籍。“ TCP / IP Illustrated,v1”和“ UNIX网络编程”是出色的教程和参考。
穆拉里·苏里雅尔

73

您可以在此处找到良好的摘要:

UDP和TCP互联网协议有什么区别?

TCP和UDP都在传输层TCP / IP模型上工作,但是用法却大不相同。

最重要的区别是:

  • 可靠性
    TCP:面向连接的
    UDP:无连接
  • 有序的
    TCP:保证消息接收的
    顺序UDP:不保证顺序
  • 协议权重
    TCP:重量级,因为存在连接/排序开销
    UDP:轻量级,开销很小
  • 数据包
    TCP:流式传输,数据作为“流”读取,没有任何区别可以区分一个数据包在何处结束而另一个数据包在何处开始。每个读取呼叫可能有多个数据包。
    UDP:数据报,每一个读调用一个数据包。

框架结构

通过网络发送数据时,需要将其封装到所谓的“帧”中。有多种封装方法,具体取决于所使用的协议和拓扑。下图显示了TCP和UDP帧结构如何不同。

这是TCP帧结构:

TCP帧

这个UDP帧结构,简单得多:

UDP帧

使用TCP的典型协议是HTTP,FTP和SMTP。使用UDP的协议示例是DNS和DHCP。


@splattne-消息接收的顺序得到保证,而不是传输
Alnitak

@Alnitak:当然,你是对的。我的意思是收据在传输顺序中得到保证。我将进行更新以明确说明。
splattne,2009年

43

和CEO级别的解释:

UDP是指将纸张扔向垃圾箱的一般方向时的情况。

TCP丢失时,您会一次又一次地扔掉同一张纸的精确副本,直到它落入垃圾箱。可能会浪费纸张,甚至重新发送TCP数据包也会导致网络或系统资源的浪费。


1
这是一个很好的“ CEO级”解释-我喜欢!
Keithius

我不是首席执行官,但为什么没人早些告诉我!:p
Nicolas Dorier 09年

这太棒了!
shylent

7

TCP和UDP都是在IP之上运行的协议。TCP保证了传递,而UDP没有保证。您可以根据要转发的服务选择一个或另一个进行端口转发。HTTP,例如TCP。如果您不知道要转发的服务是什么协议,则几乎可以肯定是TCP。


3

要回答问题的其他部分,您必须转发应用程序使用的内容。要转发HTTP通信,请选择TCP。要转发TFTP流量,请选择UDP。p2p程序大多同时使用tcp和udp,因此将它们都转发。

这完全取决于您使用的协议和程序。


你并不完全正确。DNS也经常使用tcp / 53,但仍然[ 用于区域传输]。
pQd

是。同样,通过tcp发送常规dns查询完全有效。我将示例更改为仅使用UDP的TFTP。
hayalci,2009年

2

除了到目前为止提到的差异外,TCP还提供了

流量控制。使用窗口机制,接收者可以限制发送者必须等待发送更多数据之前必须从发送者接收多少个八位字节(字节)。接收方可以随着对话的进行更改窗口的大小。这使接收方可以“限制”发送方的数据速率:UDP不允许这样做,并且接收方可以做的就是丢弃无法缓冲或在到达时进行处理的数据。

一些更多的技术功能,例如非连续确认(使用选择性确认,以使发送方仅重新发送丢失的帧,而不是丢失的帧以及接收方已经以常规方式无法确认的后续帧),拥塞处理和自适应重传(调整计时器,该计时器决定在未收到确认时重新发送已发送帧的时间)。这些与UDP不相关,但可以帮助TCP通过UDP提供额外的服务,而不会大大增加相同有效负载量的网络负载。


2

TCP尽力确保将数据传递给接收方;UDP没有。


错误。IP协议不可靠,可能会发生数据丢失。TCP努力确保已发送的数据(分为小部分并通过IP数据包发送)将其发送给接收者(如果需要,最终将重新发送小部分)。
匿名

@匿名-您基本上重述了我在上面所说的内容。我怎么了
J. Polfer 09年

我想你们都会发现IP是UDP和TCP都使用的基础框架(堆栈)和基本通信协议。据我所知,您实际上无法使用JUST IP通过Internet传递有用的数据-即使是基本的ping等也使用IP之上的协议(另一个主要协议; ICMP)。
李B 2010年

1

没关系,所有答案都可以解释一个对另一个。为了设置端口转发,规则非常简单:您需要选择TCP,除非要使用的协议/应用程序文档使用UDP。通常,使用UDP的人与流相关,或者是非常简单的事物,它们倾向于轻量级协议/速度而不是可靠性(尤其是DNS和NTP)。请注意,除了TCP和UDP之外,还有其他协议-ICMP,隧道协议等。


1

协议越广为人知,路径上的路由器介入的协议越多。发送tcp数据包,很有可能接收到的数据包受到了严重破坏。UDP通常不是那么混乱,而其他254个IP Paylod协议通常是完全不受影响的。


0

用户数据报协议(UDP)

它是Internet协议套件基本协议的一部分。联网计算机上的程序可以发送短消息,有时也称为数据报。UDP不保证任何可靠性(碰巧数据报可能会乱序到达,重复或丢失,恕不另行通知)。事实证明,对于不需要保证传送的应用,UDP不会检查所有数据包是否实际上已被传送,因此它被证明是更快,更有效的。UDP在以下情况下可以找到其用途:

时间敏感的应用程序。避免了由于延迟数据包引起的问题

对于回答来自大量客户端的少量查询的服务器,它也很有用。UDP支持数据包广播(传送给本地网络上的所有用户)和多播(传送给所有订户)。

传输控制协议(TCP)

由于该协议在Internet协议套件中的重要性,通常将其称为TCP / IP。TCP在更高级别上运行,仅与两个终端系统有关(例如,在Web浏览器和Web服务器之间)。TCP提供了从一台计算机上的一个程序到另一台计算机上的另一个程序的可靠,顺序的数据流传递。TCP重组电子邮件支持和文件传输以及Web应用程序的常见用法。在其管理任务中,TCP控制消息大小,消息交换速率以及网络流量拥塞。至于IP,它处理从计算机到计算机的较低级别的传输,作为通过Internet传输的消息。


0

嗯,这两种网络协议都是建立在称为Internet协议或IP的东西之上的。互联网协议是互联网的主要协议,例如,它使我们能够浏览网络。这就是为什么您经常会看到这些协议写为TCP / IP或UDP / IP的原因。它们实际上是互联网的核心协议。

在这两种情况下,您的数据都分成称为数据包的数据块。TCP确保这些数据包以正确的顺序到达目的地,并且没有任何错误。

另一方面,UDP无法确保数据包甚至会到达。它将仅确保如果确实到达,它将没有错误。

通常,其他协议将在TCP和UDP之上运行,并称为应用程序协议,因为它们在应用程序内而不是在操作系统内运行。您的网络浏览器使用HTTP协议,该协议将使用TCP协议。

域名查询或DNS查询通常使用UDP,但也可以使用TCP。许多流服务在另一个应用程序协议下使用UDP。

我希望能用简单的英语回答您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.