网络学习-UDP协议

UDP是User DataGram Protocal 的缩写。

UDP不提供复杂的控制机制,利用IP提供的面向无连接的通信服务。并且他是将应用程序发来的数据,在接收的那一刻,立刻按照原样发送到网络的一种机制。

UDP报头格式

这里写图片描述

端口号:使目的主机将应用数据交付给目的端系统中相应的进程,传输层–>应用层具体的那个进程

16位UDP长度:表示整个数据报(UDP首部加UDP数据)的最大长度

检验和:提供差错检测。用于确定当UDP报文段从源端到目的地时,其中的比特位是否发生了变化。例如发送方的UDP报文段中中所有16比特字进行反码运算,求和时遇到的任何溢出都将被回卷。得到的结果就放在UDP报文段中的校验和字段。
校验和保证数据正确传输,但不保证可靠性。

UDP的特点

  • 无连接
    知道对端的IP和端口号即可完成通信,不需要建立连接(没有三次握手等过程)

  • 不可靠
    没有确认机制,没有重传机制,如果因为网络故障。数据报无法发送给对方,udp也不会给应用层返回任何有用的错误消息。很可能存在丢包。

  • 面向数据报
    不能灵活的控制读写数据的次数和数量

  • 开销小,效率高
    udp首部仅8字节开销,而tcp报文需要20个字节的开销,而且还有各种重传机制,导致tcp的时间和空间开销都比udp大,所以对比下来,UDP的传输效率要高于TCP。

  • 关于何时发送数据,发送什么样的数据,应用层控制的更为精细。
    采用udp时,只要将应用程序的数据传递给UDP,UDP就会简单的打包一下就发给网络。关于发送什么数据,什么时候发送,完全由上层决定。自己不会添加一些拥塞机制,当网络拥塞时,控制发送数据的情况。对于一些允许丢包的应用,udp是很合适的。

面向数据报

应用层交给UDP多大长度的报文,UDP原样发送,既不会拆分。也不会合并。
例如:用UDP传输100个字节的数据

如果发送方调用一次sendto,发送100字节数据,那么接收方也要调用对应的一次recvfrom,接受100字节,而不能循环的调用10次recvfrom,每次接受10字节。

UD缓冲区

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

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

UDP使用注意事项

在UDP首部,有一个16位的最大长度,也就是UDP最多只能传输64K的数据(包含首部),当超过这个数字时,就需要在应用层手动分包,多次发送,并在接受端手动拼接。

基于UDP的应用层协议

NFS:网络文件系统
TFTP:简单文本传输协议
DCHP:动态主机配置协议
BOOTP:启动协议
DNS:域名系统。
当然,用户也可以根据自己写的UDP程序自定义应用层协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值