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,就需要完成以下功能(这些机制的核心一是为了实现数据的可靠传输,一是为了提高数据传输的效率):
- 确认应答机制(为了实现可靠传输);
- 超时重传机制(为了实现可靠传输);
- 滑动窗口(提高数据传输效率);
- 快速重传(处理滑动窗口丢包的情况,为了实现可靠传输);
- 流量控制+拥塞控制(为了实现可靠传输);
- 延时应答+捎带应答(提高数据传输效率);
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:对网络通讯质量要求不高时,要求网络通讯速度要快的场景