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

大家好鸭~我是洪爵。

今天想给大家讲一下计算机网络里的UDP协议,作为一个面试互联网公司几乎必问的题目,你真的有回答好吗?

请你讲一下什么是UDP

请你说一下TCPUDP区别

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

请你说下UDP特性

请你…

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

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

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用户数据报在传输中是否有错。

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

首先在发送方,在发送前,会先生成一个伪首部,这个伪首部既不向下传递也不向上递交,只是为了做检验和临时生成的,在发送方填完检验和字段到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就能完虐面试官,让HR给你开出高薪,跪求你来他们公司搬砖。

愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

面试问到UDP,这样回答offer拿到手软相关推荐

  1. 看透招人的这三招,offer拿到手软!

    蓝色关注,回复"1"获取知名公司程序员和产品经理职级 第「125」篇原创,产品经理程序员,职场问题找军哥.公众号后台回复"w"加我私人微信. 见字如面,我是军哥 ...

  2. 21道Python经典面试题,助你offer拿到手软!

    导读:又到"金九银十"招聘黄金季,21道Python经典面试题助你offer拿到手软,收好不谢! 01 Python如何实现单例模式? Python有两种方式可以实现单例模式,下面 ...

  3. 这个回答让我错失offer!offer拿到手软

    开头 每到"金三银四"的季节,总人很多人去寻找名叫"面经"一样的东西,其实就是一个个具体的题目,然后临阵磨枪,去"背"答案,如果一直是这样的 ...

  4. 面试问sql优化怎么回答

    (1)最重要的是尽量避免全表扫描" (2)适当的创建索引,考虑在 where 及 order by 涉及的列上建立索引(把所建的索引所用列名,用在where语句中,并尽量在条件的最右边,索引 ...

  5. 最全的BAT大厂面试题整理,“干完”这份300页1000道面试题,大厂Offer拿到手软

    转载请标明出处: https://www.jianshu.com/p/c70989bd5f29 本文出自 AWeiLoveAndroid的博客 临近年关,又到了面试求职高峰期,最近有很多网友都在求大厂 ...

  6. 自从拿下我人生中第一个Offer——网易游戏!腾讯,字节,阿里,小米,京东大厂Offer拿到手软!

    网易游戏 严格来说我投的是网易互娱(区别于雷火&盘古,后面再说更多区别),走的内推.网易游戏以其笔试难度大著名,这次也不例外:所有的内推都要求参加统一笔试,我记得笔试有几场,我是在第一场.内推 ...

  7. 如何把薪资谈高一倍?请看大厂offer拿到手软的ML大神自述

    点击"小詹学Python","星标"或"置顶" 关键时刻,第一时间送达 本文转载自"机器之心" 本文作者刚刚博士毕业,在 ...

  8. 大厂Offer拿到手软啊!隔壁都馋哭了

    我究竟要不要学习Kotlin呢? 要回答这个问题,我们先把时间拨回到2017年5月18日,安卓团队在谷歌 I/O 2017 大会上宣布 Kotlin 成为官方头等支持语言. 彼时谷歌技术大牛 Stev ...

  9. 太赞了!2021最新Android开发者学习路线,offer拿到手软

    前言 面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责. 文末会给大家分享下我整理的Android面试专题及答案其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列 ...

  10. 秋招硬件设计岗,offer拿到手软,是一种什么体验?

    文章目录 一.前言 二.面试形式和基本流程 三.面试基本内容 四.面试需学习内容 五.我的面试经历 六.总结 大家好,我是记得诚. 这几年硬件工程师的待遇越来越好,有个小伙伴,去年秋招拿到了很好的of ...

最新文章

  1. LeetCode简单题之找到小镇的法官
  2. Xamarin.iOS项目编译提示Could not AOT the assembly
  3. Java创建数组的三种方法
  4. 网络服务中常用的端口介绍
  5. PD连接远程mysql_PowerDesigner连接远程Oracle数据库 | 学步园
  6. 标贝科技推出情感合成 TTS,让语音交互更有温度!
  7. 【数字图像处理系列二】基本概念:亮度、对比度、饱和度、锐化、分辨率
  8. linux局域网传输文件,局域网传输文件详解(转)
  9. 罗马数字转换python_阿拉伯数字转换成罗马数字
  10. 前端学习个人心得,总结(个人向)
  11. 计算机专业就业崩溃,计算机专业就业“遇冷说”引发争议
  12. 卖家盒子提示服务器正在维护,户户通提示位置信息改变的解决办法
  13. see into/see off/seek to等动词词组
  14. RF射频信号,高速信号能将电源平面作为参考平面吗?
  15. 基于jsp的实验室预约管理系统的设计与实现
  16. ASEMI整流桥KBJ610,KBJ610浪涌电流,KBJ610反向电流
  17. 网络技术摘抄(入门需知)
  18. 爬虫抓取BestCoder的比赛排名
  19. android 开红包动画,Android实现红包雨动画效果
  20. swing打地鼠游戏_经典街机游戏中的那些奖励关,为了得高分每次都被游戏厅老板吼...

热门文章

  1. 拳王公社:虚拟资源项目赚钱方法?前2种最常见,第3种鲜为人知
  2. oracle双活svc,基于SVC的三种主流双活数据中心架构深入探讨
  3. 可能的克服拖延症的方法
  4. 服务器自动启动的原因,服务器经常自动重启是什么原因
  5. 幂指函数求导公式——备忘
  6. linux怎么看网络连接网络,linux如何查看网络连接情况?
  7. 输入qq号强制进空间_除了QQ号一键登录,迷你世界QQ版还有哪些神奇之处?
  8. 最新版本的mmdetection2.0 (v2.0.0版本)环境搭建、训练自己的数据集、测试以及常见错误集合
  9. 计算机局域网访问受限制,电脑本地连接受限制的处理方法
  10. python迭代器与生成器答案,彻底搞懂python 迭代器和生成器