UDP协议、UDP和TCP优缺点对比

一、定义

UDP 全称 User Datagram Protocol, 用户数据报协议。和TCP协议一样,也处于计算机网络的运输层(传输层)。

但是UDP是一种不可靠的协议,正如名字,他是无连接的面向应用报文的协议。

  1. 无连接:不同于TCP的三次握手建立连接、四次挥手释放连接,UDP协议的通信双方随时可以互相发送数据;
  2. 面向应用报文:对于应用层的报文,不拆、不合,保留他们的边界进行传输。(不同于TCP面向字节流、会将他们都看成连续的字节流放入自己的发送缓存,每次拿一部分组成报文)
  3. 支持单播、多播、广播。

二、UDP首部格式

在这里插入图片描述
如图所示,不像TCP报文那么复杂的首部内容。UDP的首部只有首部字段只有 8 个字节,由四个字段组成,每个字段的长度是 2 个字节。

  1. 源端口
  2. 目的端口
  3. 长度:UDP 用户数据报的长度,在只有首部的情况,其最小值是 8 。
  4. 校验和:检测 UDP 用户数据报在传输中是否有错,有错就丢弃。

三、总结

  • 我们先来回忆TCP协议:要保证可靠、要建立连接、错误、重复、乱序都要额外的内容进行处理,要流量控制、拥塞控制,显然是复杂很多很多的。

但是UDP既然无连接、也不可靠,就相对简单很多了:

  1. 传输数据之前客户端和服务器不建立连接,当它想传送时就把应用程序的数据抓来,尽快扔到网络上;
  2. 报文的首部也没有那么多开销,主要精力都集中在了数据本身;
  3. 因为丢了也不管就直接丢了,所以也没有等啊、重传的过程,吞吐量显然就很高,最多受限只是受限于传输带宽、应用本身和计算机本身的性能。

使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

问题来了,为什么还需要这么一个看似不靠谱的协议呢?

显然,最大的优点就是,另外一方面,看似不靠谱的这一点其实反过来避免了TCP的弱点。(比如TCP的建立连接过程,难以避免DOS攻击,就是攻击者疯狂向服务器发送SYN+ACK请求,拖垮服务器,也就是SYN flood攻击)。

不过UDP也是有自己的被攻击的弱点,比如UDP Flood攻击,这个就是通过僵尸网络向目标服务器发起大量的UDP报文,这种UDP报文通常为大包,且速率非常快,从而让网络阻塞,然后拖垮设备。

UDP怎样才能变可靠?

借鉴tcp的优点,使用udp,但是在其之上,应用层解决他的不可靠问题,附加重传机制和排序机制,因为udp最大问题就是丢包和不按序,发了应用报文原模原样不负责丢了没有,那么可以在此之上设计重传和排序

四、TCP和UDP的对比

在这里插入图片描述
注:数据无边界和有边界指的就是,一个面向报文,保留边界,一个看作字节流,装进缓冲区再组合成报文。

关于TCP和UDP各自的适应场景:

1.TCP:当对网络通讯质量有要求的时候,往往要求数据的准确无误,比如文件传输(FTP协议就是基于TCP)、接收邮件(SMTP协议),浏览器(HTTP协议就是基于tcp的实现)。

2.UDP:当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。比如语音通话、视频通话、广播通信一类应用,实时性比较高。

根据特性,直播、在线游戏似乎都是UDP更适合,但事实上市场还是大多在用tcp协议,虽然基于tcp的游戏通常在线人数会有限制,但是使用分布式架构或者游戏滚服会解决掉这个问题;udp虽然快,但是即时性之外,丢包率肯定会很大,另外协议的第三方库太少,开发起来难度比较大,直播也是一样,用udp开发太麻烦。

五、攻击

TCP可能面临的攻击?

SYN Flooding,根据三次握手协议的连接过程,不断发送SYN请求,其他用户就无法再链接到被攻击者服务器。

应对措施:通过增加连接数目、减小超时时间,可以缓解。但是无法从根本阻止,是 DOS 的一种,可通过 netstat 命令通过查看服务器网络连接情况,如果存在大量 SYN 的连接,则有可能收到了SYN Flooding攻击。

UDP可能面临的攻击?

UDP Flood属于带宽类攻击,黑客通过向目标服务器发起大量的UDP报文,消耗网络带宽资源,严重时造成链路拥塞,导致网络设备性能降低,从而导致网络瘫痪。

应对措施:第一种是限流,通过限流将链路中的UDP报文控制在合理的带宽范围之内。第一种方式简单粗暴,容易对正常业务造成误判,防火墙又进一步推出了针对UDP Flood的指纹学习功能,额外附加了一个学习过程。

猜你喜欢

转载自blog.csdn.net/weixin_42092787/article/details/107668987