seegongsik
网络

UDP 怎么工作

TCP 会一块块确认是否送到,没送到就重发。这样虽然准确,却也要多等。可在视频通话这种连 0.1 秒都舍不得的时刻,就算丢一两块,也是快一点更好。这时用的就是 UDP。

01

省掉确认

回想一下上一课的 TCP:每到一块,都要来回传一次表示收到的确认应答(ACK)。这一句话让它准确,可来回一次就要花一次时间。
UDP 换了个思路:跳过确认,先快快地发出去。不问对方收没收到,就把一块块连着发出去。

寄的一方收的一方
1
2
3
4
5
不等确认(ACK)
点发送,把片打出去

每按一次发送按钮,就有一块立刻飞出去。和 TCP 不同,它不等确认应答(ACK),所以五块一刻不停地发了出去。

不等确认,数据块就一刻不停地发出去。同样的时间里,能发得多得多,也快得多。
代价是放弃了一样东西:UDP 不管什么送到了。那么,路上丢了一块会怎样?

02

丢了几个也照样走

换作 TCP,会要求把丢的那块再发一次。UDP 却不会。就算有一块在路上丢了,它也不停下,直接往下发。
丢了的就让它丢着。看起来有点不负责任,可有时候,为了补上一两块而让整体停下来,反而更吃亏。

寄的一方收的一方
1
2
3
4
5
点发送,让片往前走

每按一次发送,就有一块往前走。五块里有两块在路上丢了,可 UDP 不重发,一直走到底。

丢了好几块,传送却一气呵成地完成了。接收方那边虽然有几个空缺,可流动一次也没停过。
这就是 UDP 的脾气:比起完美,更看重不停下。可丢了东西,真的没关系吗?看看它用在哪里,就有答案了。

03

什么时候用

UDP 适合不能迟到的事。想想网络游戏:晚了一拍才到的位置信息,就算重新收到,也已经是过去的事了。
视频通话、直播也一样。要紧的是此时此刻,刚才丢的那一块,再收到也没意义。
交换简短的一问一答,也常用 UDP。前面讲过的按名字查地址,通常就是用 UDP 来问和答的。

点一下选个例子
点一下选个例子

把网络游戏、视频通话、直播这几张卡片一张张点开,就能看到它们为什么不能迟到。三者都是迟到更要命,所以适合 UDP。

这三种情况有个共同点:比起丢一点,迟到更要命。游戏画面卡住、通话声音断断续续地延迟,那才更让人憋屈。
UDP 就是为了避开这种憋屈。哪怕粗糙一点,它也选择不停下,让当下继续流动。

04

比一比 TCP 和 UDP

两者不是谁好谁坏的问题,只是目的不同。TCP 先顾准确:确认、重发、排队,所以要多等一会儿。
UDP 先顾速度:不确认就发,丢的就不管,所以可能粗糙一些。哪样更重要,决定了选哪个。

到达
1
2
3
4
4 个全到
延迟
准是准,但确认和重传要多等
点 TCP 和 UDP 比一比

点两个按钮,比一比 TCP 和 UDP。TCP 四块全都送到,但等得更久;UDP 丢了一块,可等待很短。

一比就清楚了。必须一样不漏、准确无误的文字和文件,交给 TCP;把此时此刻当作生命的游戏和通话,交给 UDP。
互联网两样都有,是因为世上这两种着急都有。按事情挑合适的工具就好。

05

小结

一句话概括:UDP 省掉确认应答(ACK),把数据块飞快地接连发出去,丢了几个也不重发,照样往前走。
所以它很适合游戏、视频通话、直播这类不能迟到的事。准确优先用 TCP,速度优先用 UDP,这是目的不同的两个约定。

依次点要点回顾一下

每点一次按钮,就会多出现一个要点。(省掉确认 → 飞快接连发 → 丢几个也照走 → 用于游戏·通话·直播)四个都出现,回顾就完成了。

现在 TCP 和 UDP 你都认识了:重视准确用 TCP,重视速度用 UDP。互联网就是这样,按场合挑选合适的约定。
可一台电脑里,浏览器、聊天软件、游戏是同时在运行的。按地址来到这台电脑的数据块,该交给其中哪个程序呢?下一课就来讲这个问题。

一句话总结TCP 用确认应答(ACK)和重传做到一样不漏,代价是要多等。UDP 省掉了这些确认:不问收没收到,飞快地接连发出去,丢了几个也不停,照样往前走。所以它很适合游戏、视频通话、直播这类不能迟到的事,丢一两块几乎察觉不到。准确优先用 TCP,速度优先用 UDP,两者并存,是因为目的不同。
← 网络
如果有帮助,请支持我们