1、什么是UDP?

答:UDP提供尽量少的传输层服务,除了复用和解复用外,还提供了轻量级的错误检查。UDP将进程消息加上源端口号和目的端口号(用来复用和解复用),再加上两个域,直接将段传送给网络层。在发送段之前两个传输层实体之间没有握手,因此成为无连接的。

2、有许多应用适合UDP的原因是什么?

答:

(1)很好的应用层控制(发送什么数据和什么时候发送) 
UDP可以直接将封装好的段传给网络层进行传输,而TCP有拥塞控制和握手,不管这些机制耗时多少

(2)不需要建立连接 
TCP在发送信息之前需要三次握手建立连接,而UDP直接发送信息,没有延迟。这也就是DNS使用UDP的原因,而http使用TCP是因为对于web网页,可靠性很重要。

(3)不需要连接状态 
TCP需要在端系统中保存连接状态,包括接收端和发送端的缓冲信息,拥塞控制参数,序号和确认号,而UDP不需要保存这些信息,因此一个使用UDP的服务器可以支持更多的客户端

(4)更小的头部载荷 
TCP段有20字节头部,UDP只有8字节头部

3、UDP的段结构什么样子的?

答:UDP段包括4个域:源端口号、目的端口号、段长度(头部+数据)、校验和(用来检查段中头部是否有错误),每个域占两个字节。

4、UDP校验和是什么?

答:将除了校验和的三个域的二进制按位相加,得到的和进行取反,填入校验和域。在接收端将这四个域的二进制数按位相加,如果不全为1,则传输中发送错误。 
尽管UDP提供错误检验,但是却没有提供错误校正的机制

5、tcp并发与udp并发的区别

答:Libev适用于网络高并发,主要由于它支持epoll、select等多路复用机制,加之与多线程配合,性能较好。但是无论是epoll还是select,在观察有无数据就绪时,都是针对多个文件描述符。如果只有一个文件描述符,那么进程只要观察那一个文件描述符即可。在网络编程中,一个Socket对应一个文件描述符。Tcp协议的server在监听端口前初始化一个socket,每有一个新的连接,就新建一个socket。因此当tcp服务器面对高并发请求时,实际上有多个socket,也就是有多个文件描述符。Libev适用于这种模式。Udp协议的Server没有真正意义上的“连接”的概念,在监听端口和响应请求时都只有一个socket,也就只有一个文件描述符。因此,对于udp服务器,Libev实际上意义不大。虽然Libev支持网络IO事件,也就支持udp协议,但是在udpsocket中直接使用epoll效果不佳,测试发现由于存在额外开销,将小幅度降低性能。

6、udp并发的常规思路是什么?

答:大部分udp服务器是顺序迭代的,服务器等待客户端请求,然后读取请求,处理请求,发回响应。但是,当处理客户端请求需要很长时间,就需要考虑某种形式的并发。一个“长处理”可以理解为处理请求的时间明显大于发送请求的时间。并发的常见思路是使用多线程。服务器在读取一个新请求之后,可以交由一个线程处理,该线程在处理之后直接将响应内容发给客户端。另一方面,udp服务器和多个客户端交互,但是却没有多个socket。典型的解决方案是,服务器为每个客户端创建一个新的socket,并绑定一个新的端口。客户端以后就通过这个新的socket与服务器通信,获得响应。总结来说,udp并发服务器,针对多个客户端,可以创建多个socket;针对多个请求,可以使用多线程(线程池)进行处理。

7、影响UDP高效的因素

答:

(1) 无法智能利用空闲带宽导致资源利用率低

一个简单的事实是UDP并不会受到MTU的影响,MTU只会影响下层的IP分片,对此UDP一无所知。在极端情况下,UDP每次都是发小包,包是MTU的几百分之一,这样就造成UDP包的有效数据占比较小(UDP头的封装成本);或者,UDP每次都是发巨大的UDP包,包大小MTU的几百倍,这样会造成下层IP层的大量分片,大量分片的情况下,其中某个分片丢失了,就会导致整个UDP包的无效。

由于网络情况是动态变化的,UDP无法根据变化进行调整,发包过大或过小,从而导致带宽利用率低下,有效吞吐量较低。而TCP有一套智能算法,当发现数据必须积攒的时候,就说明此时不积攒也不行,TCP的复杂算法会在延迟和吞吐量之间达到一个很好的平衡。

(2) 无法动态调整发包

由于UDP没有确认机制,没有流量控制和拥塞控制,这样在网络出现拥塞或通信两端处理能力不匹配的时候,UDP并不会进行调整发送速率,从而导致大量丢包。在丢包的时候,不合理的简单重传策略会导致重传风暴,进一步加剧网络的拥塞,从而导致丢包率雪上加霜。更加严重的是,UDP的无秩序性和自私性,一个疯狂的UDP程序可能会导致这个网络的拥塞,挤压其他程序的流量带宽,导致所有业务质量都下降。

(3) 改进UDP的成本较高

可能有同学想到针对UDP的一些缺点,在用户态做些调整改进,添加上简单的重传和动态发包大小优化。然而,这样的改进并比简单的,UDP编程可是比TCP要难不少的,考虑到改造成本,为什么不直接用TCP呢?当然可以拿开源的一些实现来抄一下(例如:libjingle),或者拥抱一下Google的QUIC协议,然而,这些都需要不少成本的。

上面说了这么多,难道真的不该用UDP了吗?其实也不是的,在某些场景下,我们还是必须UDP才行的。那么UDP的较为合适的使用场景是哪些呢?

8、大家喜欢用udp的原因是什么?

(1)节省创业成本。udp比tcp开销少,意味着一台服务器能服务的用户更多,并且用udp更容易普遍使用p2p,不用服务器中转,更是大大节省中央服务器的开销。

(2)灵活。形象的说,tcp就是在udp基础上实现的一套用起来更简单更傻瓜的协议。用更底层的方式可以构建更高效灵活并符合自己需求的协议,当然是更优的,但提高了开发成本,最基本的,离开局域网后udp丢包概率大,收到包时候的次序可能都是乱的,包括对方还有没有网络,这些全都需要自己去维护,而tcp的数据准确性那都是tcp协议就帮程序员维护好的,对方断线你就知道收到通知了。

(3)udp打洞能更容易在不同品牌型号的路由情况下实现p2p,无论聊天文本、语音视频、文件收发都可以实现,对upnp等的支持,很多年了路由器都没有统一,但udp打洞来实现p2p基本上都没问题。

9、在外网通信链路不稳定的情况下,有什么办法可以降低UDP的丢包率呢?

答:一个简单的办法来采用冗余传输的方式。一般采用较多的是延时双发,双发指的是将原本单发的前后连续的两个包合并成一个大包发送,这样发送的数据量是原来的两倍。这种方式提高丢包率的原理比较简单,例如本例的冗余发包方式,在偶数包全丢的情况下,依然能够还原出完整的数据,也就是在这种情况下,50%的丢包率,依然能够达到100%的数据接收。

10、UDP的通信有界性是什么?

答:在阻塞模式下,UDP的通信是以数据包作为界限的,即使server端的缓冲区再大也要按照client发包的次数来多次接收数据包,server只能一次一次的接收,client发送多少次,server就需接收多少次,即客户端分几次发送过来,服务端就必须按几次接收。

Linux UDP相关相关推荐

  1. Linux网络相关、firewalld、netfilter及其5表5链、iptables语法

    2019独角兽企业重金招聘Python工程师标准>>> 1.Linux 网络相关 ifconfig 查看网卡IP,见下图, net-tools 包之前安装过了,这边还可以执行这个命令 ...

  2. Linux网络相关知识

    2019独角兽企业重金招聘Python工程师标准>>> 10月25日任务 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfil ...

  3. 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...

  4. linux网络相关配置

    linux网络相关配置文件 linux系统一般来说分为两大类: 第一类:Debian系列:Debian.Ubuntu等: 第一类:RedHat系列:Redhat.Centos.Fedora等: lin ...

  5. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

  6. Linux网络相关知识(七)

    Linux网络相关知识(七) 1.简述osi七层模型和TCP/IP五层模型 OSI七层模型 OSI七层模型的划分 应用层(Application).表示层(presentation).会话层(sess ...

  7. Linux centos7 Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法

    一. Linux网络相关 yum install net-tools ifconfig查看网卡ip ifup ens33开启网卡 ifdown ens33关闭网卡 设定虚拟网卡ens33:0 mii- ...

  8. 七周三次课(11月29日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    2019独角兽企业重金招聘Python工程师标准>>> 10.11 Linux网络相关 ifconfig 查看网卡ip (yum install net-tools) 安装 -a   ...

  9. linux udp套接字编程获取报文源地址和源端口(二)

    之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...

最新文章

  1. KMP算法的来龙去脉
  2. java图片转ascii字符画(转载)
  3. dot-- 资源汇总
  4. python 内存_一行Python解决内存问题
  5. ※归并排序(merge sort)
  6. 利用函数wavread对语音信号进行采样_统计与自适应信号处理知识点总结-期末考试...
  7. python 预测下一年数据 程序_python中神经网络预测时间序列数据
  8. 中国凉亭行业市场供需与战略研究报告
  9. 一个完整的接口技术解决方案(一)
  10. java编译命令是什么_Java编译命令整理
  11. TCP 的 keeplive保活机制
  12. C++面试宝典(纯干货)
  13. 国家地区代号与英文名对应表
  14. C# 网上收集的一些所谓的开源项目
  15. 计算机无法添加打印机,Win7电脑为什么不能添加本地打印机
  16. 如何修改网页小图标,浏览器页面上的图标。
  17. JAVA集合中常见的List和Map用法
  18. java eml 附件_Javamail怎样写带附件eml文件?
  19. Axure 8 + SVN 协同开发
  20. 微风:UI设计需要学习哪些软件?

热门文章

  1. js将身份证号转换为生日和性别
  2. 2021年熔化焊接与热切割报名考试及熔化焊接与热切割考试内容
  3. 数据库应用——MySQL函数
  4. 计算机网络知识的PPT,计算机网络基础理论知识.ppt
  5. 招聘岗位:大数据建模工程师 年薪:25-48W 工作地点:北京
  6. RecyclerView二级列表
  7. easypoi needmerge失效_easyPoi报表导出
  8. 目标检测—SSD系列算法原理介绍
  9. 【小程序】一次关于小程序消息推送能力的分析及实现
  10. 国内众多云桌面你更中意谁