【计算机网络】浅析UDP协议

1、了解UDP

1.1 UDP是什么

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。

传输层的另一个协议是TCP/IP协议。

1.2 UDP协议端格式

这里写图片描述

【注意】

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度(64k);
  • 如果要传送的数据大于64k,就要在应用层手动的分包,多次发送,并在接收端手动拼装;
  • 如果校验和出错,就会直接丢弃;

1.3 UDP的特点

无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接。

不可靠: 没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

面向数据报: 不能够灵活的控制读写数据的次数和数量(应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并)。

1.4 UDP的缓冲区

UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP数据报的顺序和发送数据报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP的socket既能读也能写,这就叫做全双工。

1.5 基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

2、模拟用UDP实现TCP

首先要了解到TCP协议的两个特点就是可靠传输数据传输效率高

那么要想模拟用UDP实现TCP,就需要完成以下功能(这些机制的核心一是为了实现数据的可靠传输,一是为了提高数据传输的效率):

  1. 确认应答机制(为了实现可靠传输);
  2. 超时重传机制(为了实现可靠传输);
  3. 滑动窗口(提高数据传输效率);
  4. 快速重传(处理滑动窗口丢包的情况,为了实现可靠传输);
  5. 流量控制+拥塞控制(为了实现可靠传输);
  6. 延时应答+捎带应答(提高数据传输效率);

3、HTTP使用的是TCP还是UDP,为啥选择该协议(TCP与UDP各自的优缺点)

TCP:

优点:

数据的传输在可靠、稳定的基础上尽可能快的提高了传输效率。

相对UDP来说一次传输的数据量更多。

TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源

缺点:

传输数据的速度慢,效率低,占用系统资源高,易被攻击。

在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个链接都会占用系统的CPU、内存等硬件资源。因为TCP有确认机制、三次握手机制,这些也导致TCP容易被利用,实现DOS、DDOS、CC等攻击。

UDP

优点:

快,比TCP稍安全。

UDP没有TCP拥有的各种机制,是一个无状态的传输协议,所以传递数据非常快,没有TCP的这些机制,被攻击利用的机制就少一些,但是也无法避免被攻击

缺点:

不可靠,不稳定。

只能进行少数据(低于64k)的传输。

因为没有TCP的那些机制,UDP在传输数据时,如果网络质量不好,就会很容易丢包,造成数据的缺失。

适用场景:

TCP:当对网络通讯质量有要求时,比如HTTP、HTTPS、FTP等传输文件的协议, POP、SMTP等邮件传输的协议

UDP:对网络通讯质量要求不高时,要求网络通讯速度要快的场景


4、 Socket模型流程图

socket基本操作接口及一个简单的小程序博客链接:

模拟一个基于TCP协议的简单的阻塞式的网络聊天工具

猜你喜欢

转载自blog.csdn.net/sofia_m/article/details/80616557