TCP 和 UDP 的区别

2019-07-24 16:52:23 +08:00
 woahishui
昨天被问了这个问题,想想挺无奈的说有区别吧,反正概念上都说有,但是写代码的时候确实没感觉啊。
5730 次点击
所在节点    程序员
42 条回复
d5
2019-07-24 16:55:08 +08:00
udp 是尽力而为的传输,tcp 要先握手,就算不记得专业词汇,也总能说上点什么吧。
wysnylc
2019-07-24 16:58:09 +08:00
百度的已经够详细了
SilencerL
2019-07-24 16:58:58 +08:00
TCP:
你想听一个关于 TCP 的笑话吗
你想听一个关于 TCP 的笑话吗
你想听一个关于 TCP 的笑话吗

UDP:
你想一个于 UP 笑吗

// ?可能举的例子不太严谨
frozenway
2019-07-24 16:59:05 +08:00
一个是打电话,一个是发短信
Chenamy2017
2019-07-24 17:00:38 +08:00
你都写代码了,应该清楚他们的区别。
FelixLiu
2019-07-24 17:01:24 +08:00
@SilencerL 我觉得 UDP 改成这样更好:
你想个一于 UP 笑吗
//加了包乱序,手动沟通
cheeto
2019-07-24 17:02:33 +08:00
@SilencerL 哈哈哈哈哈哈哈哈哈
CallMeReznov
2019-07-24 17:04:03 +08:00
TCP 是制导导弹,UDP 是射后不管
FelixLiu
2019-07-24 17:05:58 +08:00
代码写的不多吧,写多了就能发现很多不同
1.UDP 适合多点传输,因为不需要连接,适合服务器转发给多个主机
2.实时视频流传输 UDP,你懂的
3.UDP 怎么处理包乱序,毕竟 TCP 不需要
4.UDP 包要多大才合适?你知道 UDP 分片丢一个,整个 UDP 包就作废,so。。。。
5.TCP 大多时候是比 UDP 高效的,so。。。
laojiaqing
2019-07-24 17:06:24 +08:00
建议你多看看书
wweir
2019-07-24 17:06:26 +08:00
udp 这例子不太好吧,udp 是丢包,又不是没有校验。
单包内部的正确性,还是值得信任的。

还有,TCP 不是无故重传,是没收到 ack 或者包出问题才重传
Buges
2019-07-24 17:10:00 +08:00
虽然协议分层让你可以不关心下层具体内容,但你总不能真就一无所知就上岗吧…
xnode
2019-07-24 17:13:25 +08:00
tcp 是彬彬有礼的表白
udp 是直接脱裤子就上
jasonyang9
2019-07-24 17:34:47 +08:00
@wweir 假设每个字一是个包
q397064399
2019-07-24 17:38:16 +08:00
一个是可靠性传输

一个是不可靠性传输, 有根本性的区别吧,平时写代码不考虑 udp 的丢包情况?
caola
2019-07-24 17:43:48 +08:00
草案中的 HTTP3 就是基于 UDP,草案一但通过,应该用不久就会代替 TCP 成为主流
mattx
2019-07-24 17:47:51 +08:00
没写过 udp 代码吧? 写 udp 连接代码要在逻辑层考虑可靠(会丢包和乱序等)

udp 比 tcp 好的地方是, tcp 拥塞控制(重传, 丢包策略等)非常复杂, 在一些情况下表现不好, 而且比较公平
封装的 udp 可以用更不公平的策略等, 可以去看看 kcp github 官网介绍.
twoyuan
2019-07-24 17:48:35 +08:00
hansenwang
2019-07-24 17:58:12 +08:00
@twoyuan 666
Yyyye
2019-07-24 18:03:14 +08:00
tcpip 那本书里面有的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX