快速地发送,UDP
TCP 一片一片确认收到没有,没来就重发。这样很准,可也要等。但像视频通话这种连零点一秒都金贵的时刻,就算丢一两片,先快才好。这时候用的就是 UDP。
省掉确认
回想上一讲的 TCP。
每收到一片,
就来回一个确认(ACK)。
那一句让它准确,
可每次来回都花时间。
UDP 换了个思路。
确认就免了,先快再说。
不问到没到,
只把一片片连着发出去。
点发送按钮,把片一连串发出去。和 TCP 不同,它不等确认(ACK)。
不等确认,
片就源源不断地发出去。
同样的时间能发更多,
也快得多。
但放弃了一样东西。
哪些片到了,
UDP 并不在意。
那要是片半路丢了,
会怎么样呢?
丢几片也照走
换作 TCP,会要求
把丢的片重发一次。
UDP 不这么做。
就算一片在路上丢了,
它也不停,直接走下一片。
丢的就让它丢着。
看着像不负责,
可有时为了补那一两片
而停下全部,反而更亏。
点一下发送。有的片半路丢了,但 UDP 不重发,照样走到底。
就算丢了几片,
发送也没中断地结束了。
收的一方留了几个空,
可流一次都没停。
这正是 UDP 的性格。
比起完美,更要不停。
可有缺漏
真的没关系吗?
看看它用在哪,答案就出来了。
什么时候用
UDP 适合的地方,
是不能迟到的事。
想想网络游戏。
慢半拍的位置信息,
再收一遍也是过去式了。
视频通话、直播也一样。
重要的是此时此刻,
刚才丢的那一片,
再收回来也没意义。
点一下切换例子。游戏、视频通话、直播都不能迟到,所以适合 UDP。
三种情况都有个共同点。
比起丢一点,
迟到更要命。
游戏里画面卡住,
或通话声音断断续续、延迟,
那才更让人憋。
UDP 躲开了这种憋。
哪怕粗糙点,也不停,
它选择让此刻流下去。
TCP 和 UDP 比一比
不是谁好谁坏。
只是目的不同。
TCP 把准确放在前。
确认、重发、排队。
为此要多等一会。
UDP 把快放在前。
不确认就发,丢的就丢着。
为此可能粗糙些。
更看重哪个,决定了选哪个。
点两个模式比一比。TCP 准但要等,UDP 糙却快。
一比就清楚了。
要不丢、要准确的文字或文件,
交给 TCP。
此刻就是命的
游戏和通话,交给 UDP。
互联网两个都备着,
是因为世上
两种急都有。
挑对的工具用就行。
来理一理
归成一句话,是这样。
UDP 省掉确认(ACK),
把片快快地一连串发出去。
丢几片也不重发,照样走。
所以适合不能迟到的事,
游戏、视频通话、直播。
要准在先就 TCP,
要快在先就 UDP。
是目的不同的两个约定。
依次点要点回顾一下。(省掉确认 → 快快连发 → 丢几片也照走 → 用于游戏·通话·直播)
现在 TCP 和 UDP 你都知道了。
看重准确就 TCP,
看重快就 UDP。
互联网就这样
挑合情境的约定来用。
片该怎么发,理清了。
可那些片奔向的地址,
在无数台计算机里找到恰好那一台,
这个故事接着往下讲。