第十九篇技术笔记:UDP——相思传得快,飞鸽传书在

写在开篇:

话说上次郭靖用了镖局押镖(TCP),信是送到了,蓉儿也回了,但来回一趟半个月,郭靖等到头发都白了几根。

黄蓉在回信里写:"靖哥哥,你这效率,等你信到了,我孩子都生一窝了。------哦不对,我还没嫁给你呢。"

郭靖脸红了大半天。

为了快点倾诉对蓉儿的相思之苦,这次他准备试试飞鸽传书(UDP)

鸽子腿上绑上信,放飞。三天就能到。快是快,但万一鸽子被鹰叼了、被雨淋了、迷路了------信就丢了,没人管。

郭靖咬了咬牙:赌一把!

一、UDP是啥?------飞鸽传书

总镖头这次没出面,换了个养鸽子的老头。

老头说:"郭大侠,您要是急,就用我的鸽子。鸽子飞出去就不管了,不签收、不确认、丢了不补。快,但不可靠。"

郭靖问:"那蓉儿收没收到,我怎么知道?"

老头摊摊手:"不知道。您只能再发一封问问。"

郭靖嘀咕:"那蓉儿要是没收到,还以为我不想她了......"

老头翻个白眼:"那您就用镖局啊,慢点但保险。"

郭靖想了想:"慢?我等不了!发!"

这就是UDP------User Datagram Protocol,用户数据报协议。

  • 没有握手:不打招呼,直接发

  • 不确认:发了不管,丢了不补

  • 不重传:丢了就丢了,没人帮你重发

二、UDP头长什么样?(极简,8字节)

老头掏出一张便条:"您看,这就是鸽子的'便条'------UDP头。8个字节,一行排开。"

源端口 目标端口 长度 校验和
16位 16位 16位 16位

"比镖局的押镖单(TCP头20字节)短多了。鸽子腿细,驮不了太重的东西。"

TCP头20字节,UDP头8字节------省了12字节。这对摄像头图像这种大流量来说,省出来的带宽可观。

郭靖问:"就这么点?镖局那单子可是一大串。"

老头说:"简单才快。您要那么多花里胡哨的干啥?"

三、UDP的四个特点(飞鸽传书的规矩)

特点 含义 郭靖版理解
无连接 不握手,直接发 鸽子直接飞,不打招呼
不可靠 不确认,不重传 丢了不管,不知道
无顺序 先发的可能后到 鸽子飞得快慢不一,信可能乱序
轻量 头小,开销低 鸽子驮得轻,飞得快

郭靖问:"那乱序了怎么办?"

老头说:"不管。您自己看着办。"

郭靖急了:"那蓉儿收到'想你'和'靖哥哥'前后颠倒,还以为我脑子坏掉了!"

老头:"那您就只能赌鸽子飞得够快了。"

这就是UDP------快,但什么活都不干。重传、排序、可靠性,全交给上层(应用层)自己处理。

四、UDP和TCP的对比(一张表说清楚)

对比项 TCP(镖局押镖) UDP(飞鸽传书)
连接 三次握手,先确认再发 无连接,直接发
可靠性 确认、重传、保证送到 不确认、不重传、丢了不管
顺序 保证不乱 可能乱序
流量控制 有(滑动窗口)
拥塞控制
头大小 20字节 8字节
速度
车上场景 诊断升级、OTA 摄像头图像、实时路况

五、车上哪里用UDP?(飞鸽传书的用武之地)

1. 摄像头图像传输

摄像头一帧图像数据量大,对实时性要求高,但对丢包不敏感------偶尔丢一帧,画面可能卡一下,忍了。

如果用TCP,丢了要重传,反而会卡更久。

所以摄像头用UDP,不确认、不重传,快就完了。

郭靖问:"那摄像头丢了帧,蓉儿不会骂我吗?"

老头说:"她骂的是图像卡一下,不是骂你。你用TCP,卡得更厉害。"

2. 导航实时路况

路况信息过时了就没用。丢了几条数据没关系,下一帧马上就来。

3. SOME/IP(服务发现)

车上有些服务发现协议也用UDP,因为快。

什么时候不用UDP?

  • 4S店升级ECU:丢一个比特车可能变砖,必须用TCP

  • OTA升级:必须完整、可靠,用TCP

郭靖感叹:"原来不是啥都能用鸽子送。机密军情还得镖局。"

六、UDP的"校验和"是干啥的?(检查鸽子腿上的信有没有被雨淋花)

UDP头里也有一个校验和,但它比TCP的简单。

作用:检查UDP头和数据有没有在传输过程中损坏。

怎么算的 :和IP头校验和类似,但UDP校验和会把IP头里的源IP、目标IP也一起算进去(这叫"伪首部"),防止数据被送到错误的应用程序。

车上例子:摄像头发UDP包,校验和算出来是0x8A3F。域控制器收到后重新算,对不上就丢包,不处理。

郭靖问:"那校验和不通过怎么办?"

老头说:"丢。不丢的话,蓉儿可能收到一堆乱码,还以为你会写外星文。"

七、为什么摄像头不用TCP?(镖局太慢)

郭靖问:"为什么摄像头不用镖局押镖(TCP)?可靠不是更好吗?"

老头说:"您想啊,摄像头一秒钟传30帧图像。用TCP的话,每帧都要签收确认,丢了还要重传------万一重传卡住,后面的帧都得等。"

"屏幕上就会卡一下、卡一下。开车的时候,图像卡了,您敢信吗?"

"UDP不一样。丢了就丢了,下一帧马上来。偶尔卡一下,总比一直卡强。"

郭靖想了想:"所以镖局适合送军情(诊断升级),鸽子适合送情书(摄像头图像)?"

老头点头:"您终于开窍了。"

一句话:UDP快,适合对延迟敏感、对丢包不敏感的业务。TCP可靠,适合不容有失的业务。

八、这些坑,靖哥哥替你先踩了

  • 坑1 :以为"UDP比TCP快是因为它不用握手"。后来才搞明白,UDP没有重传、没有确认、没有顺序保证、没有流量控制、没有拥塞控制------把TCP所有保证可靠性、有序性的机制全砍了,所以快。

  • 坑2 :以为"UDP校验和可有可无"。后来才搞明白,IPv6下UDP校验和是必选,不能填0。即使是IPv4,不校验也可能导致数据损坏不被发现。

  • 坑3 :以为"UDP不适合车载"。后来才搞明白,摄像头图像、实时导航这些对丢包不敏感的场景,UDP反而是最优解

  • 坑4 :以为"UDP和TCP是二选一"。后来才搞明白,很多应用会同时用:控制信令走TCP(可靠),大数据传输走UDP(快)。

想通的那一刻:原来UDP不是"不靠谱",是"把靠谱的责任交给了上层"。卸磨不杀驴,但驴不干活了。

九、下步目标

UDP搞清楚了。下期搞SOME/IP------东邪级别的狠角色,车载服务通信的"黄药师"。

下期预告:SOME/IP------车载服务的"东邪",自成一派,专搞服务发现和远程调用。

十、写在最后

这一篇最大的收获:UDP是飞鸽传书------快,但不可靠。适合摄像头图像、实时路况。

后来,郭靖的鸽子飞到了桃花岛。蓉儿收到信,回了一句:"靖哥哥,鸽子挺快,就是字被雨淋花了几个。下次能不能用镖局?"

郭靖回:"蓉儿,你不能既要快又要可靠啊。"

蓉儿:"那就两样都用!重要的用镖局,不重要的用鸽子。"

郭靖一拍大腿:"这不就是TCP和UDP一起用吗?控制信令走TCP,数据走UDP!"

蓉儿,我看以后谁再敢说我笨。

慢即是快,快即是慢。

打完收工,886。

相关推荐
LuminousCPP6 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
2601_953988076 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
萌新小白YXY6 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件
IT古董6 小时前
【MES学习笔记系列】MES 推荐书籍与资源
笔记·学习
一米阳光86616 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
米饭不加菜6 小时前
常用基本求导公式与法则(超详细推导版——上)
经验分享·笔记
zhengqiqiqinqin7 小时前
Ubuntu16.04 升级ssl到3.5.7、升级ssh到9.8p1
网络协议·ssh·ssl
青山是哪个青山15 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
Shell运维手记18 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
FakeOccupational19 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存(D-Cache)结构+MPU+DMA&Cache+STM32CubeMX配置
笔记·stm32·缓存