深入理解udp

news2024/11/18 13:40:44

1.再谈端口号

1.1复习

在这里插入图片描述

我们上一篇谈了很久的应用层的http,并在此前我们使用socket编程写了一个能相互通信的客户端与服务端,但是我们也只是粗略的理解了一下tcp和udp在编程过程中所形成的差异性,并没有实质去了解一下其详细内容,那么这篇文章就来详细介绍一下传输层协议用到的udp协议,当然其他协议我们会在后面为大家一一讲解

1.2端口号

端口号用于标识一台主机上唯一的进程。(前面文章具体提到过)

当主机从网络上获取数据之后 ,这个数据要交给哪个应用程序就是由端口号决定的。

在网络通信中,数据在向上层进行交付时,传输层协议(如TCP或UDP)会提取出数据报文中的目的端口号。目的端口号指示了应该将数据交付给当前主机上的哪个服务进程。

实际上通过端口号能找到的是我们的进程ID的,其原因是因为内核中用哈希的方式维护了端口号与进程ID之间的映射关系,传输层可以通过端口号得到对应的进程ID 进而找到对应的应用层进程。

1.3端口号范围划分
  • 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的。

  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。

    有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:

ssh服务器, 使用22端口

ftp服务器, 使用21端口

telnet服务器, 使用23端口

http服务器, 使用80端口

https服务器, 使用443

平常我们自己写端口号的时候需要尽量避免这些端口号。

1.4五元组

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信。

在这里插入图片描述

通过netstat命令可以查看到这样的五元组信息:

在这里插入图片描述

  • Proto – 协议号

  • Local Address – 源IP地址和源端口号

  • Foreign Address – 目的IP地址和目的端口号

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

    其常见的选项如下:

    • n:拒绝显示别名 能显示数字的全部转换成数字

    • l:仅列出处于LISTEN(监听)状态的服务

    • p:显示建立相关链接的程序名

    • t(tcp):仅显示tcp相关的选项

    • u(udp):仅显示udp相关的选项

    • a(all):显示所有的选项 默认不显示LISTEN相关

      pidof命令

      在查看服务器的进程id时非常方便.

      语法:pidof [进程名]

      功能:通过进程名, 查看进程id

    当然这里提到了协议号,这里简单介绍一下其定义:

    协议号是网络通信中用于标识不同网络协议的数字。每个网络协议都会被分配一个唯一的协议号,以便在数据包传输过程中能够正确地识别和路由数据。

2.UDP协议

2.1udp协议端格式

在这里插入图片描述

在这里插入图片描述

  • 16位源端口号表示数据从哪里来
  • 16位目的端口号标识数据要去哪里
  • 16位UDP长度:表示整个数据报(UDP首部+UDP数据)的长度
  • 16位UDP检验和:如果UDP报文的检验和出错 就会直接将报文丢弃

我们在应用层看到的端口号大部分都是16位的 其根本原因就是因为传输层协议当中的端口号就是16位的

2.2报头与有效载荷的分离

UDP的报头当中只包含四个字段, 每个字段的长度都是16位, 总共8字节。

因此UDP采用的实际上采用的是一种定长报头, UDP在读取报文时读取完前8个字节后剩下的就都是有效载荷了。

2.3udp的数据封装与解包
  • 当应用层将数据交给传输层后 ,在传输层就会创建一个UDP报头类型的变量,然后填充报头当中的各个字段 ,此时就得到了一个UDP报头。

  • 此时操作系统再在内核当中开辟一块空间 ,将UDP报头和有效载荷拷贝到一起 ,此时就形成了UDP报文。

  • 当传输层从下层获取到一个报文后 ,就会读取该报文的前8个字节, 提取出对应的目的端口号。

  • 通过目的端口号找到对应的上层应用层进程 ,然后将剩下的有效载荷向上交付给该应用层进程。

2.4udp协议的特点
  • 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;

  • 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层

    返回任何错误信息;

  • 面向数据报: 不能够灵活的控制读写数据的次数和数量;

应用层交给UDP多长的报文 ,UDP就原样发送, 既不会拆分 ,也不会合并, 这就叫做面向数据报。

也就是说我们如果使用UDP传输一百字节的数据的话:

如果我们发送端调用了十次sendto, 发送100字节的数据 ,每次发送十字节 ,那么接收端也必须调用十次recvfrom来接受这100字节的数据。

2.5udp的缓冲区

为什么会造成上述的这种面向数据报的特性呢?

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

续的传输动作;

但是UDP具有接收缓冲区。可这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果

缓冲区满了, 再到达的UDP数据就会被丢弃。

UDP的socket既能读, 也能写, 这个概念叫做 全双工

2.6udp的使用注意事项

需要注意的是 UDP协议报头当中的UDP最大长度是16位的, 因此一个UDP报文的最大长度是64K。(包含UDP报头的大小)

然而64K在当今的互联网环境下 ,是一个非常小的数字 ,如果需要传输的数据超过64K, 就需要在应用层进行手动分包 ,多次发送, 并在接收端进行手动拼装。

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

当然 ,也包括你自己写UDP程序时自定义的应用层协议。

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

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

相关文章

KNN模型

使用K-Nearest Neighbors (KNN)算法进行分类。首先加载一个数据集,然后进行预处理,选择最佳的K值,并训练一个KNN模型。 # encodingutf-8 import numpy as np datas np.loadtxt(datingTestSet2.txt) # 加载数据集,返回一个numpy数…

68 内网安全-域横向PTHPTKPTT哈希票据传递

目录 演示案例:域横向移动PTH传递-Mimikatz域横向移动PTK传递-Mimikatz域横向移动PTT传递-MS14068&kekeo&local国产Ladon内网杀器测试验收-信息收集,连接等 涉及资源: PTH(pass the hash) #利用lm或ntlm的值进行的渗透测试 PTT(pass the ticket) #利用的票据凭证TGT进行…

餐饮连锁品牌2023:端起“外卖碗”,吃上“下沉饭”

作者 | 陈小江 文 | 螳螂观察 “没想到,蜜雪(蜜雪冰城)能到我们这乡镇来开,我觉得挺意外的。「柏记水饺」也算挺大一品牌,没想到也能来(我们)乡镇”。 谈起不断有连锁品牌进镇开店,黑龙江讷河…

算法笔记【3】-冒泡排序法

文章目录 一、原理二、代码实现三、算法特点 一、原理 冒泡排序是一种简单但有效的排序算法,它可以用于对数字进行升序排序。该算法通过多次比较相邻元素并交换位置来实现排序的目的。冒泡排序的基本思想是从第一个元素开始,依次比较相邻的两个元素&…

python 练习 在列表元素中合适的位置插入 输入值

目的: 有一列从小到大排好的数字元素列表, 现在想往其插入一个值,要求: 大于右边数字小于左边数字 列表元素: [1,4,6,13,16,19,28,40,100] # 方法: 往列表中添加一个数值,其目的方便元素位置往后…

ardupilot开发 --- 深度相机 篇

1. ZED 相机 1.1 规格 2. RealSense 需要机载计算机作为中介!!

【HarmonyOS】低代码平台组件拖拽使用技巧之网格布局

【关键字】 HarmonyOS、低代码平台、组件拖拽、网格布局 1、写在前面 前面分享了在低代码平台上使用堆叠容器和滚动容器的组件拖拽使用技巧,本篇我们继续来学习其它组件的使用,今天为大家介绍的是网格布局的使用,需要注意的是,网…

NLP之LSTM与BiLSTM

文章目录 代码展示代码解读双向LSTM介绍(BiLSTM) 代码展示 import pandas as pd import tensorflow as tf tf.random.set_seed(1) df pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astyp…

【Linux进程控制】进程控制专篇

【Linux进程控制】进程控制专篇 目录 【Linux进程控制】进程控制专篇进程创建fork函数写实拷贝fork常规用法fork调用失败的原因 进程终止进程退出场景进程常见退出方法_exit函数return退出 进程等待进程等待必要性进程等待的方法获取子进程status 具体代码实现进程程序替换替换…

3.5 队列的表示和操作的实现

思维导图: 3.5.1 队列类型 3.5.1 队列的类型定义 1. 简介 队列是一种特殊的线性表,它的特性是只能在表的一端进行插入操作,而在另一端进行删除操作。通常将允许插入操作的一端称为队尾,允许删除操作的一端称为队头。 2. 抽象…

ArcGIS计算土地现状容积率

本文讲解在ArcGIS中,基于建筑数据和地籍边界数据,计算土地容积率。 一、容积率介绍 容积率(Plot Ratio/Floor Area Ratio/Volume Fraction)是指一个小区的地上建筑总面积与净用地面积的比率。又称建筑面积毛密度。 二、数据分析 (1)建筑数据(dwg) (2)地籍边界数据…

VsCode 只有一个标签页 编辑区只能打开一个文件

产生如图所示的问题: 可能是不小心取消了勾选 勾选,Show Tabs

软件安利——火绒安全

近年来,以优化、驱动、管理为目标所打造的软件屡见不鲜,大同小异的电脑管家相继走入了公众的视野。然而,在这日益急功近利的社会氛围驱动之下,真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…

Enfocus PitStop Pro 2022(Acrobat dc增强)

Enfocus PitStop Pro 2022是一款Acrobat dc PDF编辑和校对工具,为Mac用户提供了强大的功能和精确的控制,以确保PDF文件的质量和准确性。该软件具有全面的PDF编辑功能,包括添加、删除或重新排列页面,合并和分割PDF文件,…

工程中Http的请求、各种回调函数的使用

文章目录 1、登录回调以及各种函数的使用1、SdoLoginClient工程中的SdoBase_Initialize3接口2、LoginClient中的Initialize接口3、ProcessResponse调用ProcessLoginResponse传递参数给回调函数使用4、ProcessLoginResponse登录响应接口的使用5、ProcessResponse调用然后根据req…

四、[mysql]索引优化-1

目录 前言一、场景举例1.联合索引第一个字段用范围查询不走索引(分情况)2.强制走指定索引3.覆盖索引优化4.in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描5.like 后% 一般情况都会走索引(索引下推) 二、Mysql如何选择合适的索…

中移链浏览器简介

(1)简介 生活中,常用的互联网浏览器,是用来检索、展示以及传递Web信息资源的应用程序。用浏览器进行搜索,可以快速查找到目标信息。而对于区块链而言,也有区块链浏览器。 区块链浏览器,是指为用…

【案例实战】NodeJS+Vue3+MySQL实现列表查询功能

这篇文章,给大家带来一个列表查询的功能,从前端到后端的一个综合案例实战。 采用vue3作为前端开发,nodejs作为后端开发。 首先我们先来看一下完成的页面效果。点击分页,可以切换到上一页、下一页。搜索框可以进行模糊查询。 后端…

17.基干模型Swin-Transformer解读

文章目录 SWin-Transformer解读1.基础介绍关于Shifted Window based Self-Attention相对位置偏置网络整体结构和层级特征欢迎访问个人网络日志🌹🌹知行空间🌹🌹 SWin-Transformer解读 1.基础介绍 Swin-Transformer是2021年03月微软亚洲研究院提交的论文中提出的,比V…