UDP协议,作为一个面试互联网公司几乎必问的题目,你真的有回答好吗?
请你讲一下什么是UDP。
请你说一下TCP和UDP的区别。
请你说下UDP在哪些场景用到。
请你说下UDP的特性。
请你......
面试的时候,UDP回答好了,并且能答到一些让面试官觉得眼前一亮的点,会给你面试加不少分,并且作为一个基础问题,更能看出候选人的基础到底牢不牢固,这个问题没有回答好,基本就与offer失之交臂。所以让我们一起来快乐的学习下UDP吧~
推荐视频:
2. 寻找最佳MTU值是一个反复试验的过程。可以尝试将MTU值从最大值(1500)逐渐降低,直到网络问题得到解决。建议修改范围为1400 ~ 1500。设置多少MTU值取决于您的互联网访问方法。不同的上网方式支持不同的MTU。
直播学习地址:
UDP的主要特点有:
1.UDP是无连接的,所以在发送数据前和发送数据后,都不需要建立连接和断开连接,减少了开销。
1280左右。ipv6mtu值设置在1280左右,能最大限度的提升网速和扩大传输内存量。IPv6是网络层协议的第二代标准协议,是IETF设计的一套规范,是IPv4的升级版本。
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用户数据报在传输中是否有错。
接下来我们来讨论下它是如何尽最大努力交付。
2、找寻最佳的MTU值是一个反复试验的过程,可以尝试从最大值(1500)逐渐减少MTU 值,直到上网问题得到解决,建议修改范围1400~1500。设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU。
【文章福利】需要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、电信光纤上网方式PPPOE拨号上网,MTU应该设置为是1480。2、电信光纤是自动连接DHCP方式,MTU是
也许有人就会问了,要这个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
但是这也仅仅只能解决数据缺失的问题,如果这里面16bit数据做了位置交换,那么UDP是检测不出来的。但是也有许多技术是使用到的UDP协议,包括有:TFTP,SNMP,NFS,DNS,BOOTP等。
这里和大家在科普一个知识点,QQ发送消息使用的就是UDP协议,大家也许会惊讶说,这怎么可能?UDP有乱序和丢包问题,使用QQ发送消息从来没见过乱序的情况呀,洪爵你是不是在吹牛。
这是真的,UDP是运输层协议,它本身不能保数据的顺序性,但是QQ是在其之上的应用层去保证了它的顺序性,如果大家感兴趣,洪爵可以出一期视频给大家演示一下它是如何做到的。什么?我怎么知道大家感不感兴趣?大家可以通过赞赏本篇文章...咳咳,公众号给我发信息呀,告诉洪爵想要看(赞赏的话就更好了)。
好的,咱们继续聊UDP,大家知道UDP数据报能发送的最大长度吗?
不过鉴于Internet上的标准MTU值为576字节,所以建议在进行Internet的UDP编程时,最好将UDP的数据长度控制在 (576-8-20)548字节以内。并且Internet上许多路由器也是为576,所以为了适配,设置为500+为最理想,腾讯游戏使用的MTU就是500+。
UDP,应该说UDP所在的运输层还有一个很重要的功能:复用和分用。
同一时间可能有多个应用程序与外界进程进行交互,这个时候大家都可以通过运输层传送到IP层(网络层)。
接收端在接收UDP后,如果发现收到的报文中的目的端口号不正确,就会丢弃这个报文,并且通过网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。如果正确,则会把UDP用户数据报通过相应的端口,上交到对应端口号的应用进程。
好啦,UDP就讲到这里了,相信大家啃完这篇文章,面试再回答UDP就能完虐面试官。