UDP协议详解
UDP是什么?
UDP(User Data Protocol,用户数据报协议),是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。
主要特点如下:
- UDP是无连接的
- UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态(这里面有许多参数)。
- UDP是面向报文的。
- UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
对实时应用很有用,如 直播,实时视频会议等。
- UDP支持一对一、一对多、多对一和多对多的交互通信。
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
UDP对应的应用层协议?
- DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
- SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
- TFTP(Trivial File Transfer Protocol):简单文件传输协议,该协议在熟知端口69上使用UDP服务。
TCP和UDP的区别
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:
- TCP是面向连接的;UDP是无连接的。
- TCP是可靠的;UDP是不可靠的。
- TCP只支持点对点通信;UDP支持一对一、一对多、多对一、多对多的通信模式。
- TCP是面向字节流的;UDP是面向报文的。
- TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信。
- TCP首部开销(20字节),比UDP的首部开销(8个字节)要大。
🦅 为什么 TCP 叫数据流模式? UDP 叫数据报模式?
所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的。
- 比如你通过TCP连接给另一端发送数据,你只调用了一次write,发送了100个字节,但是对方可以分10次收完,每次收10个字节;你也可以调用10次wirte,每次10个字节,但是对方一次就收完。
- 原因:这是因为TCP是面向连接的,一个Socket中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。
所谓的“数据报模式”,是指UDP发送端调用了几次wirite,接收端必须用相同次数的read读完。
- UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。
- 原因:这是因为UDP是无连接的,只要知道接收端的IP和端口,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。
UDP报文的格式![在这里插入图片描述](https://img-blog.csdnimg.cn/20210126214804937.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA5MzM0MQ==,size_16,color_FFFFFF,t_70#pic_center)
- 16位*4=64位=8字节。
DNS
DNS是什么?
- 域名解析,www.xxx.com转换成IP,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
- DNS协议运行在UDP协议之上,使用端口号53.
主机解析域名的顺序?
DNS使用什么协议?
既使用TCP又使用UDP。
- 区域传送时使用TCP协议。
- 辅域名服务器会定时(一般是3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会进行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
- TCP是一种可靠的连接,保证了数据的准确性。
- 域名解析是使用UDP协议。
- 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
UDP报文的最大长度为512字节。- 不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP包。