UDP 怎么工作
TCP 会一块块确认是否送到,没送到就重发。这样虽然准确,却也要多等。可在视频通话这种连 0.1 秒都舍不得的时刻,就算丢一两块,也是快一点更好。这时用的就是 UDP。
省掉确认
回想一下上一课的 TCP:每到一块,都要来回传一次表示收到的确认应答(ACK)。这一句话让它准确,可来回一次就要花一次时间。
UDP 换了个思路:跳过确认,先快快地发出去。不问对方收没收到,就把一块块连着发出去。
每按一次发送按钮,就有一块立刻飞出去。和 TCP 不同,它不等确认应答(ACK),所以五块一刻不停地发了出去。
不等确认,数据块就一刻不停地发出去。同样的时间里,能发得多得多,也快得多。
代价是放弃了一样东西:UDP 不管什么送到了。那么,路上丢了一块会怎样?
丢了几个也照样走
换作 TCP,会要求把丢的那块再发一次。UDP 却不会。就算有一块在路上丢了,它也不停下,直接往下发。
丢了的就让它丢着。看起来有点不负责任,可有时候,为了补上一两块而让整体停下来,反而更吃亏。
每按一次发送,就有一块往前走。五块里有两块在路上丢了,可 UDP 不重发,一直走到底。
丢了好几块,传送却一气呵成地完成了。接收方那边虽然有几个空缺,可流动一次也没停过。
这就是 UDP 的脾气:比起完美,更看重不停下。可丢了东西,真的没关系吗?看看它用在哪里,就有答案了。
什么时候用
UDP 适合不能迟到的事。想想网络游戏:晚了一拍才到的位置信息,就算重新收到,也已经是过去的事了。
视频通话、直播也一样。要紧的是此时此刻,刚才丢的那一块,再收到也没意义。
交换简短的一问一答,也常用 UDP。前面讲过的按名字查地址,通常就是用 UDP 来问和答的。
把网络游戏、视频通话、直播这几张卡片一张张点开,就能看到它们为什么不能迟到。三者都是迟到更要命,所以适合 UDP。
这三种情况有个共同点:比起丢一点,迟到更要命。游戏画面卡住、通话声音断断续续地延迟,那才更让人憋屈。
UDP 就是为了避开这种憋屈。哪怕粗糙一点,它也选择不停下,让当下继续流动。
比一比 TCP 和 UDP
两者不是谁好谁坏的问题,只是目的不同。TCP 先顾准确:确认、重发、排队,所以要多等一会儿。
UDP 先顾速度:不确认就发,丢的就不管,所以可能粗糙一些。哪样更重要,决定了选哪个。
点两个按钮,比一比 TCP 和 UDP。TCP 四块全都送到,但等得更久;UDP 丢了一块,可等待很短。
一比就清楚了。必须一样不漏、准确无误的文字和文件,交给 TCP;把此时此刻当作生命的游戏和通话,交给 UDP。
互联网两样都有,是因为世上这两种着急都有。按事情挑合适的工具就好。
小结
一句话概括:UDP 省掉确认应答(ACK),把数据块飞快地接连发出去,丢了几个也不重发,照样往前走。
所以它很适合游戏、视频通话、直播这类不能迟到的事。准确优先用 TCP,速度优先用 UDP,这是目的不同的两个约定。
每点一次按钮,就会多出现一个要点。(省掉确认 → 飞快接连发 → 丢几个也照走 → 用于游戏·通话·直播)四个都出现,回顾就完成了。
现在 TCP 和 UDP 你都认识了:重视准确用 TCP,重视速度用 UDP。互联网就是这样,按场合挑选合适的约定。
可一台电脑里,浏览器、聊天软件、游戏是同时在运行的。按地址来到这台电脑的数据块,该交给其中哪个程序呢?下一课就来讲这个问题。