第十九篇技术笔记: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。

相关推荐
0xR3lativ1ty4 小时前
关闭公网IP的两种方式
网络协议·tcp/ip·php
Yeh2020585 小时前
cookie与Session笔记
笔记
d111111111d6 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜6 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Yeh2020587 小时前
request与response笔记
java·前端·笔记
2401_873479407 小时前
固件升级如何按地区分批推送?IP地址查询定位决定升级策略
网络协议·tcp/ip·php
net3m337 小时前
所有esp_websocket_client_send。。。的地方都加锁,就不容易websocket 断线重连
网络·websocket·网络协议
Jiangxl~8 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
Fuyo_11198 小时前
C++ 内存管理
c++·笔记