UDP的协议、首部

特点:

无连接:UDP通信双方在发送数据之前,不需要建立连接,只需要知道对方的ip和port就可以传输数据

不可靠:UDP数据包在传输过程中,如果被丢弃了,不会进行重发。

面向数据报:应用层使用UDP协议的时候,不管是从UDP接收缓冲区当中拷贝数据,还是应用层将数据拷贝到UDP的发送缓冲区,都市一整条数据拷贝的,而不是存在两条数据一起存在缓冲区当中的情况

 

UDP缓冲区:

对于应用层的数据是整条数据接收和发送的

对于发送而言,应用层sendto接口将数据提交给传输层当中的UDP的发送缓冲区,在发送缓冲区当中,打上UDP包头之后,就直接提交给网络层进行下一步的传输

对于接收而言,应用层使用recvfrom接口将数据从接收缓冲区当中拷贝到应用层,UDP接收缓冲区是不保证数据的有序到达,也不保证可靠,当接收缓冲区当中满的时候,从网卡当中接收的UDP数据包就直接丢弃了

 

 

UDP头部结构

struct udphdr
{
  u_int16_t uh_sport;           /* source port */          源端口号
  u_int16_t uh_dport;           /* destination port */   目标端口号
  u_int16_t uh_ulen;            /* udp length */            包长度
  u_int16_t uh_sum;             /* udp checksum */    校验和   
};
 

 

类型uint16_t最大表示的数值为65535(64kM),UDP数据报最大长度是65535个字节

UDP数据报长度(65535)=UDP数据包头(8字节)+数据

如果传输的数据大于UDP传输的最大长度,这时我们需要用自定制协议,在自定制协议中拆分原始数据

当应用层数据大于65535的时候,应该在应用层进行分片传输,分片传输就是将大于65535的数据在应用层进行拆解,分多次使用UDP协议进行传输。

 

校验和:

作用:检验UDP数据在传输过程当中是否有损坏

如果有损坏,则不会提交给应用层,直接丢弃(这也体现了UDP的不可靠性)

如果没有损坏,则应用层在调用recvfrom的时候,将数据提交给应用层

 

 

如何通过校验和来判断,数据是否损坏

计算:

将UDP数据(UDP包头和数据)分为多个16比特位的数据;除了16个校验和的比特位不进行相加之外,针对其余的16个比特位进行相加操作

对加起来的结果进行反码运算

将反码运算的结果,放到校验和的16个比特位当中去

验证:

接收到UDP数据报之后,将所有的16位比特位全部加起来,如果是1111111111111111,则认为数据是没有损坏的

如果两个16位的比特位进行相加的时候,产生了进位,从而加出来的结果为17个比特位的时候,此时需要进行回卷

回卷:

17个比特位拆分为 最高位和低16 位

最高位和低16位相加

 

 

 

UDP应用:

DHCP:动态主机协议(谁上网给谁分配IP)

DHCP协议是通过UDP广播来获取IP地址的

路由器接收到这样的请求之后,恢复一个应答,分配一个IP给请求的主机

DNS:域名解析协议

将域名转换为IP地址的时候,使用的是UDP协议

TFTP:简单文件传输协议

NFS:网络文件系统

等等

 

你们的 【三连】 是给Qyuan最大的肯定!

↓        ↓          ↓

注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值