当前位置:网站首页>UDP协议:因性善而简单,难免碰到“城会玩”
UDP协议:因性善而简单,难免碰到“城会玩”
2022-07-06 10:10:00 【富士康质检员张全蛋】
TCP 和 UDP 有哪些区别?
一般面试的时候我问这两个协议的区别,大部分人会回答,TCP 是面向连接的,UDP 是面向无连接的。
什么叫面向连接,什么叫无连接呢?在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。为什么要建立连接呢?你 TCP 三次握手,我 UDP 也可以发三个包玩玩,有什么区别吗?
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
例如,TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们都知道 IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去。但是 TCP 号称能做到那个连接维护的程序做的事情,而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。
再如,TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而 UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
还有 TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它洪水滔天。
因而 TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP 则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。
UDP 包头是什么样的?
当我发送的 UDP 包到达目标机器后,发现 MAC 地址匹配,于是就取下来,将剩下的包传给处理 IP 层的代码。把 IP 头取下来,发现目标 IP 匹配,接下来呢?这里面的数据包是给谁呢?
发送的时候,我知道我发的是一个 UDP 的包,收到的那台机器咋知道的呢?所以在 IP 头里面有个 8 位协议,这里会存放,数据里面到底是 TCP 还是 UDP,当然这里是 UDP。于是,如果我们知道 UDP 头的格式,就能从数据里面,将它解析出来。解析出来以后呢?数据给谁处理呢?
处理完传输层的事情,内核的事情基本就干完了,里面的数据应该交给应用程序自己去处理,可是一台机器上跑着这么多的应用程序,应该给谁呢?
无论应用程序写的使用 TCP 传数据,还是 UDP 传数据,都要监听一个端口。正是这个端口,用来区分应用程序,要不说端口不能冲突呢。两个应用监听一个端口,到时候包给谁呀?所以,按理说,无论是 TCP 还是 UDP 包头里面应该有端口号,根据端口号,将数据交给相应的应用程序。
当我们看到 UDP 包头的时候,发现的确有端口号,有源端口号和目标端口号。因为是两端通信嘛,这很好理解。但是你还会发现,UDP 除了端口号,再没有其他的了。和TCP 头比起来,这个简直简单得一塌糊涂啊!
UDP 的三大特点
UDP 就像小孩子一样,有以下这些特点:
- 第一,沟通简单,不需要一肚子花花肠子(大量的数据结构、处理逻辑、包头字段)。前提是它相信网络世界是美好的,秉承性善论,相信网络通路默认就是很容易送达的,不容易被丢弃的。
- 第二,轻信他人。它不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
- 第三,愣头青,做事不懂权变。不知道什么时候该坚持,什么时候该退让。它不会根据网络的情况进行发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发还怎么发。
边栏推荐
- Alibaba brand data bank: introduction to the most complete data bank
- 分布式不来点网关都说不过去
- Pytest learning ----- detailed explanation of the request for interface automation test
- 编译原理——预测表C语言实现
- EasyCVR接入设备开启音频后,视频无法正常播放是什么原因?
- 1700C - Helping the Nature
- Pourquoi Li shufu a - t - il construit son téléphone portable?
- Mysqlimport imports data files into the database
- 二分(整数二分、实数二分)
- The difference between parallelism and concurrency
猜你喜欢
There is a gap in traditional home decoration. VR panoramic home decoration allows you to experience the completion effect of your new house
Pytorch extract middle layer features?
酷雷曼多种AI数字人形象,打造科技感VR虚拟展厅
视频融合云平台EasyCVR增加多级分组,可灵活管理接入设备
STM32 key state machine 2 - state simplification and long press function addition
Appium automated test scroll and drag_ and_ Drop slides according to element position
Establishment of graphical monitoring grafana
sql语句优化,order by desc速度优化
Jerry's access to additional information on the dial [article]
面试突击63:MySQL 中如何去重?
随机推荐
2019阿里集群数据集使用总结
Getting started with pytest ----- allow generate report
历史上的今天:Google 之母出生;同一天诞生的两位图灵奖先驱
Zen integration nails, bugs, needs, etc. are reminded by nails
Manifest of SAP ui5 framework json
Scratch epidemic isolation and nucleic acid detection Analog Electronics Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
Unity tips - draw aiming Center
How to use scroll bars to dynamically adjust parameters in opencv
The easycvr authorization expiration page cannot be logged in. How to solve it?
The integrated real-time HTAP database stonedb, how to replace MySQL and achieve nearly a hundredfold performance improvement
STM32 key state machine 2 - state simplification and long press function addition
一体化实时 HTAP 数据库 StoneDB,如何替换 MySQL 并实现近百倍性能提升
8位MCU跑RTOS有没有意义?
Pourquoi Li shufu a - t - il construit son téléphone portable?
《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
面试突击62:group by 有哪些注意事项?
ASEMI整流桥DB207的导通时间与参数选择
VR panoramic wedding helps couples record romantic and beautiful scenes
Video fusion cloud platform easycvr adds multi-level grouping, which can flexibly manage access devices
Nodejs 开发者路线图 2022 零基础学习指南