百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

面试问到UDP,这样回答offer拿到手软

off999 2025-03-10 19:21 14 浏览 0 评论

UDP协议,作为一个面试互联网公司几乎必问的题目,你真的有回答好吗?

请你讲一下什么是UDP

请你说一下TCPUDP区别

请你说下UDP在哪些场景用到。

请你说下UDP特性

请你......

(求求你不要再问了,呜呜呜)

面试的时候,UDP回答好了,并且能答到一些让面试官觉得眼前一亮的点,会给你面试加不少分,并且作为一个基础问题,更能看出候选人的基础到底牢不牢固,这个问题没有回答好,基本就与offer失之交臂。所以让我们一起来快乐的学习下UDP吧~

推荐视频:

腾讯一面题: UDP如何实现可靠性传输?

网络原理tcp/udp,网络编程epoll/reactor,面试中正经“八股文”

直播学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

UDP它是一种用户数据报协议,即User Datagram Protocol。UDP和TCP都属于运输层协议中的一种

UDP的主要特点有:

1.UDP是无连接的,所以在发送数据前和发送数据后,都不需要建立连接和断开连接,减少了开销

2.UDP使用尽最大努力交付,即UDP它不保证可靠交付,这个我稍后会举一个例子,说明什么是尽最大努力交付。

3.UDP是面向报文的,发送方的UDP只在应用程序交下来的报文添加了首部后就交付给IP层。UDP对应用层交下来的报文,既不合并,也不拆分,也就是说应用层交给UDP多长的报文,UDP就照样的发送,UDP一次交付一个完整的报文。为了提高效率,应用程序必须选择合适大小的报文,如果报文过长,那么UDP把它交给IP层,IP层可能需要进行分片;如果报文太短,会使得IP数据报的首部相对长度较大,两种情况都会使得IP层的效率降低。

4.UDP没有拥塞控制,所以当网络出现拥塞的时候不会使得源主机的发送速率降低,这非常适用于对实时性要求高的应用,比如实时视频会议等等,它要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞的时候丢失部分数据,对时延要求较高(当很多源主机都同时向网络发送高速率的实时视频流时,网络就有可能发送拥塞,所以不适用拥塞控制功能的UDP是有可能会引起网络产生严重拥塞的问题)。

5.UDP支持一对一,一对多,多对一和多对多的交互通信

6.UDP的首部开销小,只有8个字节,相对于TCP的20字节,要短很多。

用户数据报UDP包含有两个字段,一个是首部字段,另外一个是数据字段。首部字段有8个字节,分别由四种信息组成,每个信息长度都是为2个字节的。

1.源端口:源主机的发送该信息的端口号,如果不需要对方回信,则可以置为0。

2.目的端口:目的地的端口号,在终点交付报文的时候需要用到。

3.长度:UDP用户数据报的长度。

4.检验和:检测UDP用户数据报在传输中是否有错。

接下来我们来讨论下它是如何尽最大努力交付

【文章福利】需要C/C++ Linux服务器架构师学习资料加群812855908(资料包括C/C++,Linux,golang技术,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg,大厂面试题 等)

首先在发送方,在发送前,会先生成一个伪首部,这个伪首部既不向下传递也不向上递交,只是为了做检验和临时生成的,在发送方填完检验和字段到UDP首部后,就会去除伪首部。

伪首部是12字节大小,包括有分别都是4字节的源IP地址,目的IP地址,1个字节的全0,和存储1个字节大小的17(UDP在IP报文的协议号是17),最后2字节存储UDP用户数据报的长度

也许有人就会问了,要这个1字节的全0有什么用呢?因为为了做检验和,UDP把伪首部和UDP用户数据报看做由许多16位的字(即两个字节)组成起来的。那么伪首部有12字节,可以分为6个字,UDP首部有8个字节,共4个字,UDP数据部分如果是奇数个字节,那么就需要填入一个全零的字节(这个字节不会发送),筹齐16位的字。然后把这些数据通过二进制的方式加起来,然后取它们的反码,写入检验和字段中。需要注意的是,因为校验和是16位大小的,即两个字节。我们在计算的过程中可能会发生进位的情况,这个时候需要把高位溢出的数移到最低位相加

例子:

  1111 1111 1111 1111
+0000 0000 0000 0001
——————————————————————
  0000 0000 0000 0001
取反:1111 1111 1111 1110

这个时候1111 1111 1111 1110就会填入检验和。接收方在接收的时候,会通过获得的UDP用户协议报生成伪首部,然后把数据分成16位的字再次加起来,这次不取反码了,直接和UDP首部中的检验和做加法,如果得到的是全1,那么代表用户数据报在传输的过程没有丢失,如果出现的不是全1,则代表有差错,接收方就应该丢弃这个UDP用户数据报

但是这也仅仅只能解决数据缺失的问题,如果这里面16bit数据做了位置交换,那么UDP是检测不出来的。但是也有许多技术是使用到的UDP协议,包括有:TFTP,SNMP,NFS,DNS,BOOTP等。

这里和大家在科普一个知识点,QQ发送消息使用的就是UDP协议,大家也许会惊讶说,这怎么可能?UDP有乱序和丢包问题,使用QQ发送消息从来没见过乱序的情况呀,洪爵你是不是在吹牛。

这是真的,UDP是运输层协议,它本身不能保数据的顺序性,但是QQ是在其之上的应用层去保证了它的顺序性,如果大家感兴趣,洪爵可以出一期视频给大家演示一下它是如何做到的。什么?我怎么知道大家感不感兴趣?大家可以通过赞赏本篇文章...咳咳,公众号给我发信息呀,告诉洪爵想要看(赞赏的话就更好了)。

好的,咱们继续聊UDP,大家知道UDP数据报能发送的最大长度吗?

之前有说到,UDP首部中有2个字节存储了UDP的用户数据报的长度,那么2个字节即16位,所以UDP用户数据报最大长度不能超过2^16-1 = 65535字节UDP首部占用了8个字节,IP层首部占用了20个字节,那么就只剩下65535-8-20=65507个字节;除此之外,能限制UDP用户数据报长度的还有UDP的缓冲区大小,所以UDP能发送的最大长度 = min(缓冲区大小,65507),然而这就是最终结果吗?当然不是,得出来的只是理想的最长长度,因为还有最后一层能控制UDP传输长度的情况,就是MTU的大小(最大传输单元,Maximum Transmission Unit)。以太网数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的,这个1500字节被称为链路层的MTU。

不过鉴于Internet上的标准MTU值为576字节,所以建议在进行Internet的UDP编程时,最好将UDP的数据长度控制在 (576-8-20)548字节以内。并且Internet上许多路由器也是为576,所以为了适配,设置为500+为最理想,腾讯游戏使用的MTU就是500+。

难道说要发送UDP数据报只能发送小于等于MTU大小的吗?其实UDP并不会受到MTU的影响,MTU只会影响下层IP分片,如果你发送数倍于MTU的数据,导致IP层大量分片,这种情况下,如果某个分片丢失了,就会导致整个UDP数据报无效。所以一般不会去发送过大的UDP用户数据报。

UDP,应该说UDP所在的运输层还有一个很重要的功能:复用分用

同一时间可能有多个应用程序与外界进程进行交互,这个时候大家都可以通过运输层传送到IP层(网络层)。

接收端在接收UDP后,如果发现收到的报文中的目的端口号不正确,就会丢弃这个报文,并且通过网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。如果正确,则会把UDP用户数据报通过相应的端口,上交到对应端口号的应用进程。

好啦,UDP就讲到这里了,相信大家啃完这篇文章,面试再回答UDP就能完虐面试官。

相关推荐

Python自动化脚本应用与示例(python自动化脚本教程)

Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作O批量重命名文件...

如何使用Python实现一个APP(如何用python做一个程序)

要使用Python实现一个APP,你可以选择使用一些流行的移动应用开发框架,如Kivy、PyQt或Tkinter。这里以Kivy为例,它是一个跨平台的Python框架,可以用于创建漂亮的图形用户界面(...

免费定时运行Python程序并存储输出文档的服务推荐

免费定时运行Python程序并存储输出文档的服务推荐以下是几种可以免费定时运行Python程序并存储输出结果的云服务方案:1.PythonAnywhere特点:提供免费的Python托管环境支持定时...

【Python程序开发系列】如何让python脚本一直在后台保持运行

这是我的第385篇原创文章。一、引言让Python脚本在后台持续运行,有几种常见的方式,具体方式可以根据你的系统环境和需求选择。二、Linux或macOS系统2.1使用nohup命令no...

运行和执行Python程序(运行python的程序)

一、Python是一种解释型的脚本编程语言,这样的编程语言一般支持两种代码运行方式:交互式编程在命令行窗口中直接输入代码,按下回车键就可以运行代码,并立即看到输出结果;执行完一行代码,你还可以继续...

Python 初学者指南:计算程序的运行时长

在编写Python程序时,了解程序的运行时长是一项很有用的技能。这不仅能帮助你评估代码的效率,还能在优化程序性能时提供关键的数据支持。对于初学者来说,计算程序运行时长其实并不复杂,接下来就让我们看...

pyest+appium实现APP自动化测试,思路全总结在这里

每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试01appium环境搭建安装nodejshttp://nodej...

血脉觉醒后,编程小白我是如何通过Deepseek和Trae轻松开发软件的

以下就是作为一个编程小白的我,是如何一步步开发软件的保姆级教程,请点赞收藏:第一步:打开#deepseek#(首先关闭深度思考和联网搜索)输入或复制你要让它做一个什么样软件的要求和提示词(你可以先用...

我用Deepseek+Trae写的python小软件,小白也能轻松用上模型啦!

利用AI大模型deepseek,搭配TraeCN,用半个小时做了一个本地Ollama安装部署和一键卸载的小工具,哈哈哈!感觉还不错#deepseek#一直想做一个本地Ollama安装部署和一键卸载...

在安卓设备上运行Python的方法(安卓能运行python吗)

技术背景在安卓设备上运行Python可以为开发者提供更多的开发选择和灵活性,能够利用Python丰富的库和简洁的语法来开发各种应用,如游戏、脚本工具等。然而,由于安卓系统原生不支持Python,需要借...

零基础小白,DeepSeek全自动编程,超详细提示词,一键生成软件!

我前面发表了文章,详细说了编程零基础小白,如何利用DeepSeek进行编程的全过程,感兴趣的可以去看看:DeepSeek全自动编程很多人不会写提示词,不知道怎么开始对话。话不多说,请先看下图中的对话,...

小白用DeepSeek+Python编写软件(用python制作软件)

周末无事,用DeepSeek生成全部代码,写了一个mp3音乐播放器,几分钟搞定,DeepSeek确实太强大了。我的提示语是这么写的:“请用Python语言写一个音乐播放器,支持常见音乐格式,我是Pyt...

零基础使用DeepSeek开发Windows应用程序,超简单超实用!

你敢相信,我居然用DeepSeek开发了一个能用的Windows软件!整个过程就像和学霸同桌组队做作业,我负责提需求,DeepSeek负责写代码改bug,全程碰到任何问题直接丢给DeepSeek即可。...

第二篇:如何安装Python并运行你的第一个程序

欢迎回到我的Python入门教程系列!在上一篇中,我们讨论了为什么Python是一门值得学习的编程语言。今天,我们将迈出第一步:安装Python并运行你的第一个程序。无论你是Windows、macOS...

Python 运行,带你找入口,快速读懂程序

有C或Java编程开发经验的软件开发者,初次接触python程序,当你想快速读懂python项目工程时,是否觉得python程序有些太过随意,让你看有些无所适从,进而有些茫然。这是...

取消回复欢迎 发表评论: