Linux【网络编程】之深入理解UDP协议

news2024/11/28 22:52:50

Linux【网络编程】之深入理解UDP协议

  • 一、传输层
  • 二、再谈端口号
    • 2.1 端口号划分
  • 三、查看网络状态---netstat
  • 四、查看服务器进程ID---pidof
  • 五、UDP协议端格式
    • 5.1 理解报头
  • 六、UDP的特点
  • 七、UDP的缓冲区问题
  • 八、常见基于UDP的应用层协议

在前面的几篇文章中我主要偏向于应用层介绍,其中掺杂着一些传输层的知识,本期文章我们来深入探讨一下传输层的UDP协议

温馨提示:阅读此文章之前请先阅读此文

一、传输层

主要负责数据能够从发送端传输接收端

二、再谈端口号

端口号属于传输层
前面的文章中我提到过IP+端口号:表示某个主机对应的服务进程在全网中是唯一性,所以即使多个服务被部署到同一主机上,由于他们的端口号不同,当数据向上交付给应用层的时候,能够找到对应的服务

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信
在这里插入图片描述

2.1 端口号划分

0 - 1023: 知名端口号, HTTP(80), FTP(21), SSH(22)等这些广为使用的应用层协议, 他们的端口号都是固定的 ,不能被bind
1024-65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的

三、查看网络状态—netstat

netstat是一个用来查看网络状态的重要工具.
语法: netstat [选项]
功能:查看网络状态
常用选项:
n 拒绝显示别名,能显示数字的全部转化成数字
l 仅列出有在 Listen (监听) 的服务状态
p 显示建立相关链接的程序名
t (tcp)仅显示tcp相关选项
u (udp)仅显示udp相关选项
a (all)显示所有选项,默认不显示LISTEN相关

四、查看服务器进程ID—pidof

在查看服务器的进程id时非常方便.
语法: pidof [进程名]
功能:通过进程名, 查看进程id
如:pidof tcpserver
pidof tcpserver | xargs kill -9将pidof返回的id拼接在-9后面终止此进程

五、UDP协议端格式

在这里插入图片描述

  1. 解包:UDP协议采用固定长度的方式将报头和有效载荷分离
  2. 分用:根据分离出来的报头中的目的端口号,将有效载荷交付给上层服务进程/协议
  3. UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部);如果我们需要传输的数据超过64K(字节), 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装

5.1 理解报头

Linux内核使用c语言写的,UDP属于OS,所以报头的本质是一个结构化数据对象(结构体或位段)

struct udp_hdr{
	uint16_t src_port;
	uint16_t dsc_port;
	uint16_t length;
	uint16_t check;
}struct udp_hdr{
	unsigned int src_port:16;
	unsigned int dsc_port:16;
	unsigned int length:16;
	unsigned int check:16;
}

在这里插入图片描述

添加报头的实质是,将上层数据拷贝到缓冲区里,在缓冲区的前面填写上报头的字段,就形成一个报文继续向下交付。

接收方收到此报文会用一个指针指向该报文的头部,然后强转成struct udp_hdr类型提取报头中的字段,这期间不需要像应用层一样反序列化,OS会帮我们解决此问题。

六、UDP的特点

UDP传输过程类似寄信

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

何为面向数据报?
应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并

例如:发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节

在UDP通信中,不需要考虑怎么完整读到一个数据,只需要关心结构化的数据序列化与反序列化

七、UDP的缓冲区问题

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

八、常见基于UDP的应用层协议

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30分钟!从0到1,用ChatGPT+Python做一个AI起名网!

坚持6年,第629篇原创 现在利用ChatGPT可以做很多很多事情,而对于我们程序员来说,是机会也是挑战!因为原来很多工种,很多技术问题现在可以用非常廉价的技术去获取,成本更低了! 打个比方&#xff…

【LeetCode】《LeetCode 101》第十章:神奇的位运算

文章目录 10.1 常用技巧10.2 位运算基础问题461. 汉明距离(简单)190. 颠倒二进制位(简单)136. 只出现一次的数字(简单) 10.3 二进制特性342. 4的幂(简单)318. 最大单词长度乘积&…

Vue+springboot舞蹈基础课程视频学习分享平台的实现和开发

基于java语言设计并实现了舞蹈基础数据平台。该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、舞蹈类型管理、舞蹈视频管理、用户留言、管理员管理、系统管理等功能模块。 重…

springboot+vue+elementui计算机专业课程选课管理系统vue

本系统的主要任务就是负责对学生选课。主要用户为老师、学生,其中,学生可对自己的信息进行查询,可以进行选课,也可以进行删除已选课程,教师可对学生和课程的信息进行查询,教师拥有所有的权限,可以添加删除学生信息。系统提供界面,操作简单。 为实现这些功能,系统一个…

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差?

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差? 山区倾斜摄影三维模型数据出现几何坐标偏差的原因可能有很多,其中一些常见的原因包括不同地图投影系统之间的转换问题、GPS定位误差、测量设备精度问题、摄影…

C++入门:引用、内联函数、auto关键字

目录 一:引用 (1)概念 (2)使用 (3)引用的特性 (4)引用的使用场景 【1】做参数 【2】做返回值 (5) 引用的权限问题 (6)引用和指针的区别 【1】引用的底层实现 【2】指针和引用的一些不同 二:内联函数 (1)宏函数 【1】 宏的优点 【2】宏的缺…

【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

目录 一、学习内容二、数据库事务三、JDBC 的事务管理四、事务的四大特性五、MyBatis六、MyBatis 核心配置文件和基本使用七、查询 student 表(1) 实体映射文件 mapper(2) 读取核心配置文件, 拿到 SqlSession 八、字段和属性名映射(1) mapUnderscoreToCamelCase(2) 完整的 sett…

【Linux】基本开发工具包使用

目录 一, yum ——linux软件包管理器 1. 软件包是啥子? 2. yum基本使用 1. 步骤: 2. 开发工具推荐(centos 7.6) 二,vim —— linux文本编辑器 1. Normal mode —— 命令模式(记不住没关系&#x…

C#,码海拾贝(33)——约化“一般实矩阵”为“赫申伯格矩阵”的“初等相似变换法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 矩阵类 /// 作者&#xff1a;周长发 /// 改进&#xff1a;深度混淆 /// https://blog.csdn.net/beijinghorn /// </summary> public partial class Matrix {…

2023CISCN初赛

两天时间题量还挺大的&#xff0c;简单记录 文章目录 misc签到卡pyshell国粹被加密的生产流量网络安全人才实战能力评价 webunzipdumpitBackendService reversebabyRE pwnfuncanary烧烤摊儿 crypto基于国密SM2算法的密文分发可信度量Sign_in_passwd misc 签到卡 就是做了个p…

CoreDX DDS应用开发指南(2)安装和应用开发

2 CoreDX DDS安装 2.1 系统支持 2.1.1 支持的CPU架构和操作系统 2.1.2 支持的语言和编译器

Linux 实操篇-进程管理(重点)

Linux 实操篇-进程管理(重点) 基本介绍 在LINUX 中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个ID 号(pid,进程号)。>windows > linux每个进程都可能以两种方式存在的。前台与后台&#xff0c;所谓前台进程就是用户目前的屏幕上可以进行操作的。后…

[BJDCTF 2020]easy_md5

TL;DR php弱类型比较md5碰撞绕过&#xff0c;强类型比较传数组绕过ffifdyop md5后的值字符串值为’or’6<乱码>&#xff0c;可用于构造sql注入的bypass没思路了看看网页源代码、看看响应头 过程 拿到题目链接&#xff0c;放到burp里&#xff0c;发现响应头中的提示&am…

JavaScript实现100以内奇数和的代码

以下为实现100以内奇数和的程序代码和运行截图 目录 前言 一、100以内奇数和 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要求实现相关使用功能…

软件工程导论(三)系统概要设计

一、系统设计概述 1.1系统设计概述 设计和抽象 系统行为驱动完成设计面向对象设计系统数据驱动完成设计 面向操作的设计 面向数据的设计 设计主要分为三个步骤&#xff1a; 概要设计&#xff1a;接收需求的文档&#xff0c;完成模块的分解 详细设计&#xff1a;根据分解…

Linux 实操篇-网络配置

Linux 实操篇-网络配置 Linux 网络配置原理图 查看网络IP 和网关 查看虚拟网络编辑器和修改IP 地址 查看网关 查看windows 环境的中VMnet8 网络配置(ipconfig 指令) 查看linux 的网络配置ifconfig ping 测试主机之间网络连通性 基本语法 ping 目的主机&#xff08;功能描述…

CXGRid实现拖动鼠标多选

要实现在CXGrid中拖动鼠标多选&#xff0c;您可以按住鼠标左键并拖动鼠标&#xff0c;直到选择了要选择的单元格或行。您可以在拖动过程中按住Shift键来限制选择范围。拖动选择的单元格或行时&#xff0c;您可以按住Ctrl键来添加或删除单元格或行的选择。当您完成选择时&#x…

ChatGPT最全问答,你想知道的都在这里!

导读&#xff1a;ChatGPT最全问答&#xff0c;你想知道的都在这里&#xff01;本文为你详细解答了ChatGPT是什么、有哪些应用场景、如何更好地向ChatGPT提问以及ChatGPT的进阶技巧&#xff0c;让你轻松成为ChatGPT专家&#xff01; ChatGPT是什么&#xff1f; ChatGPT是一种自然…

简单Demo实现Javaweb的搭建在Tomcat

文章目录 环境准备程序编写 环境准备 本机&#xff1a;MacBook Pro 系统&#xff1a;MacOS 13.4 Tomcat 下载&#xff1a;Apache Tomcat - Welcome! 这里我下载的是9.0.75版本 启动Tomcat容器碰到Bug:Tomcat started.但是就是没法访问到相关页面&#xff0c;同时jps也没有相关…

Java数据驱动:CData JDBC Drivers 2022 Crack

JDBC 驱动程序 易于使用的 JDBC 驱动程序&#xff0c;具有强大的企业级功能 无与伦比的性能和可扩展性。 对实时数据的简单 JDBC/SQL 访问。 从流行的 BI 工具访问实时数据。 集成到流行的 IDE 中。 CData JDBC Drivers Software 是领先的数据访问和连接解决方​​案提供商。我…