当前位置: 首页 > news >正文

传输层—UDP原理详解

目录

前言

1.netstat

2.pidof

3.UDP协议格式

4.UDP的特点

5.面向数据报

6.UDP的缓冲区

7.UDP使用注意事项

8.基于UDP的应用层协议

总结


前言

        在之前的文章中为大家介绍了关于网络协议栈第一层就是应用层,包含套接字的使用,在应用层编码实现服务器,以及介绍了HTTP协议和HTTPS协议,传输层主要的协议包含UDP协议和TCP协议,与应用层的关系是应用层协议是基于传输层协议实现的,今天我们要介绍的是传输层中的UDP协议,下面我们就一起具体来看看吧!

1.netstat

netstat是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态

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

2.pidof

在查看服务器的进程id时非常方便.
语法:pidof [进程名]
功能:通过进程名, 查看进程id

说明:上面介绍两个查看网络服务状态时的常用工具,接下来就开始介绍UDP协议

3.UDP协议格式

网络传输的过程中,每一层传输都包含自己的报头,底层数据传输给上一层的时候需要进行解包分用,UDP协议采用固定报头的方式。

如图所示:

16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;
如果校验和出错, 就会直接丢弃;

如何理解UDP报头?

在语言层面就是一种结构化数据

struct udphdr
{uint16_t src_port;uint16_t dec_port;uint16_t length;uint16_t check;
};

4.UDP的特点

UDP传输的过程类似于寄信.

无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
面向数据报: 不能够灵活的控制读写数据的次数和数量;

5.面向数据报

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;
用UDP传输100个字节的数据:
如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节;

6.UDP的缓冲区

UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
UDP的socket既能读, 也能写, 这个概念叫做 全双工

如图所示: 

7.UDP使用注意事项

我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).
然而64K在当今的互联网环境下, 是一个非常小的数字.
如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;

8.基于UDP的应用层协议

NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
DNS: 域名解析协议
当然, 也包括你自己写UDP程序时自定义的应用层协议;

总结

        以上就是关于UDP在传输层实现的方式,因为UDP是无连接,面向数据包,以及不可靠的原因,所以UDP的设计整齐上是非常简单的,如何实现可靠机制,就是我们下一篇要讲解的TCP协议不要错过,欢迎大家的阅读,我们下次再见!

http://www.lryc.cn/news/148608.html

相关文章:

  • CK-GW06-E03与汇川PLC的EtherNet/IP通信
  • UI界面自动化BagePage
  • 北京开发APP的费用明细
  • 2023年MySQL核心技术第一篇
  • 通讯协议056——全网独有的OPC HDA知识一之接口(十一)IOPCHDA_Playback
  • 数学建模:数据的预处理
  • Linux土遁术之监测监测进程打开文件
  • css让多个盒子强制自动等宽
  • 【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)
  • 树模型与集成学习:LightGBM
  • PHP多语言代入电商平台api接口采集拼多多根据ID获取商品详情原数据示例
  • 数据结构(Java实现)-二叉树(下)
  • 如何利用 SmartX 存储性能测试工具 OWL 优化性能管理?
  • 固定资产管理措施怎么写
  • C语言中typedef和const的区别
  • 大数据系列教程之 Kafka基础
  • 【Go 基础篇】Go语言日期与时间函数详解:时间的掌控与转化
  • 抽象工厂模式:创建相关对象族
  • uniapp:安卓permission权限表及setting表
  • 汽车服务门店小程序模板制作指南
  • Apache SeaTunnel 2.3.3 版本发布,CDC 支持 Schema Evolution!
  • 工厂方法模式的概述和使用
  • HP惠普星15青春版/惠普小欧笔记本电脑15s-du1008tx原装出厂Win11系统
  • 聊聊检索增强,LangChain一把梭能行吗?
  • 【力扣】343. 整数拆分 <动态规划、数学>
  • 数据结构--5.1图的存储结构(十字链表、邻接多重表、边集数组)
  • mac上 Kratos 配置 protoc
  • 【c++5道练习题】①
  • 最佳实践:TiDB 业务读变慢分析处理
  • 【ES6】Getter和Setter