【网络】传输层-UDP协议

UDP报文格式

查看Linux系统下的/usr/include/netinet/udp.h文件,可以看到UDP的报文格式

在这里插入图片描述

可以看到UDP的报文是一个拥有四个u_int16_t类型的变量的结构体,u_int16_t其实就是unsigned short类型的数据,数据范围为(0~65535)

这四个变量分别是源端端口,对端端口,报文长度,校验和

在这里插入图片描述

  • 源端端口:描述远端处理进程
  • 对端端口:描述对端处理进程
  • 数据报长度:这个长度是整个数据报的总长度包括报头长度和报文长度,因为报文长度只有2个字节,所以UDP报文最大不超过64k,所以报文中的报文数据也就是有效载荷(上层sendto交付的大小)必须小于64k-8个字节,否则就会丢弃数据报错
  • 校验和:采用二进制反码求和算法,校验收到的数据与对方发送的数据是否完全一致,不一致则丢弃

二进制反码求和算法

发送方组织好报文后,将校验和字段置为0,然后从第0个字节开始(包含报头)对每个字节取反求和,超出16位的,将高位阶段继续求和,完成之后,将校验和填充到校验和字段中

UDP协议特性

UDP协议的特性可以用三个词来概括 无连接,不可靠,面向数据报

无连接

udp通信时,不需要建立连接,只要知道对方的IP地址和端口号就能直接给对方发送数据


不可靠

  • udp协议没有任何丢包检测机制
  • 丢包后没有重传机制
  • 没有包序管理机制

所以**udp传输既不保证数据安全安全到达对端,也不保证数据有序到达对端**


面向数据报

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并

  • 上层sendto交付一个数据则直接封装报头进行发送,数据到达对端会包括报头保存在对端的接收缓冲区中
  • 上层recvfrom取数据每次只能刚好取出一条完整数据,不能取出半条或者多条数据

udp传输就好比生活中的取快递,快递是被封装好在包裹内,取快递时,只能连带包裹整个取出,不能把包裹切成好多份取出


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

recvfrom的时候如果应用层给的buf空间没有一条数据长度大就会接收失败

  • UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP包的顺序和发送UDP包的顺序一致

如果接收缓冲区满了,则再收到的数据将会被丢弃


UDP特性对于编程的影响

  • 由于udp不保证数据安全有序到达,需要程序员自己在应用层进行丢包检测以及包序管理机制,重传机制,才能保证安全准确的收到数据
  • udp是面向数据报的,必须保证上层在sendto时发送的数据长度必须小于64k-8个字节,否则就会丢弃数据报错
  • udp是整条交付的,必须保证上层在recvfrom时,给的空间大小足够大,否则有可能接收失败

基于UDP的应用层协议

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

netstat工具

netstat是一个用来查看网络状态的重要工具

常用选项:

  • -n 拒绝显示别名,能显示数字的全部转化成数字
  • -l 仅列出有在 Listen (监听) 的服務状态
  • -p 显示建立相关链接的程序名
  • -t (tcp)仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -a (all)显示所有选项,默认不显示LISTEN相关

pidof命令

pidof命令可以通过进程名查看进程ID

功能类似pgrep和ps

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomage1213888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值