UDP和TCP数据包有什么区别?你会用它们做什么?

6

昨天我在配置IPtable。我的同事问了我这个问题,但我无法回答。我意识到自己比系统管理员更擅长开发,并需要提高自己的技能。

那么它们是什么?它们有什么用途?优缺点(如果相关)。


标题中的拼写错误:U PD --> U DP - Alexander Malakhov
你想要数据包之间的差异还是协议之间的差异?顺便说一句,这不是讨论的主题。 - Nick Dandoulakis
@nick:我甚至不知道有一个数据包和协议来区分 :-). @Alexander. 谢谢你的修复。 - Bite code
6个回答

10

这些是基本问题。

UDP :: 用户数据报协议

1) 两台计算机之间没有端到端连接(可能在本地网络或互联网的其他位置)。

2) 接收方接收到的数据不像TCP那样以流形式,而是作为完整的数据块。

3) 在传输层不执行分组顺序检查。也就是说,在接收到任何错误的分组时,接收方不会要求重新发送该分组给发送方。

4) 由于上述行为,发送方不需要发送缓冲区。

5) 由于不存在端到端连接并且不需要握手,UDP比TCP更快,但可靠性较低。因此主要用于游戏和DNS等领域。

6) 收到数据包后不需要发送确认信息。

TCP :: 传输控制协议

1) 维护两台计算机之间的端到端连接(可能在本地网络或互联网的其他位置)。


2) 在TCP中,接收方接收到的数据是一个流。因此,当我们为服务器进行网络编程时,我们首先解析头文件,然后根据头文件中指定的大小从缓冲区获取相应数量的字节。

3) 执行错误检查和序列号。因此,在接收到任何无序的分组(很少)或出现错误时,会重新发送该分组。此外,还涉及到许多其他协议来进行流量控制(端到端流量控制)。

4) 由于需要建立连接、握手和确认信息,TCP的操作比UDP慢。(我认为不是非常显著)

5) 许多协议使用TCP作为底层传输协议。HTTP、FTP、TELNET等。

6) 通信过程涉及:

服务器:1) 打开 Socket
2) 绑定 Socket
3) 监听 Socket
4) 接受 Socket
5) 发送/接收 Socket
客户端:1) 打开 Socket
2) 连接 Socket
3) 发送/接收 Socket还有很多其他的差异...但以上是最常见的几个。

5
TCP是一种可靠的协议,确保数据包能够到达目的地,并且在所有数据必须准确传输的应用程序中使用。TCP要求双方在数据传输之前协商连接,这是一种弹性协议,因为它会反复重发数据包,直到数据包被预期接收者接收。
UDP是不可靠的,因为它允许一些数据包在传输过程中丢失。UDP的一些应用程序可以在电影流媒体中找到,其中您可以实际上承受丢失一帧而不影响电影质量。UDP不需要双方绑定,通常被视为TCP的轻量级替代品。
一个好的表格在这里:TCP vs UDP

分组逐个传送的保证只是其中一个不同之处。 - Fred Foo

2
P.R.的回答大部分是正确的,但不完整。
TCP是一种可靠的连接流协议。它将数据视为主机之间的双向字节流:您发送的任何字节都将以相同的顺序到达另一端,至少从应用程序的角度来看是这样的(如果需要,操作系统将重新排列数据包)。
UDP是一种不连接的数据报协议。它将数据视为离散的数据报或消息,并不能保证这些消息实际上能够到达其接收者,也不能保证它们按照发送顺序到达。但UDP确保如果一个消息到达了,它会完整地到达且没有被修改。

1

@e-satis:这就是为什么我还会添加相关链接的原因。 - chris

1

这个网站可能提供了UDP和TCP的实际区别最简单的解释。从实现的角度来看,可以参考这个问题

简短回答:TCP的工作方式有点像挂号信,而UDP则有点像普通信件 - 对于后者,您永远不知道收件人是否收到了您发送的数据包。


0

1
不,他不是。在发表这样的言论之前,请阅读 Stack Overflow 的规则。关于该做什么和不该做什么的讨论已经在 Meta SO 上进行了,并且“在 Google 上寻找答案”没有任何附加价值,也不受此网站欢迎:http://meta.stackexchange.com/questions/76195/how-to-deal-with-have-you-tried-google-comments - Bite code
@e-satis:我不认为我的回答符合“你试过谷歌吗?”的要求。我链接了相关文档,只是没有将内容复制粘贴到SO中。 - chris
@e-satis:好的,我明白你的观点,但是我的和克里斯的回答背后有一些相关的链接。这些链接的内容可能会有所帮助。显然,我们有些懒惰,因为我们本可以详细阐述我们找到的内容并在这里重新表述它们。对此我感到抱歉,并认为在这里回答一个如此广泛的问题可能不是正确的地方。 - fausto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接