IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【网络】传输层-UDP协议 -> 正文阅读

[系统运维]【网络】传输层-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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:19:35  更:2022-04-22 19:21:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:09:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码