传输层协议——UDP协议

目录

一、传输层

二、再谈端口号

端口号的划分

知名端口号

pidof

netstat命令

三、UDP协议

1、UDP协议格式

2、UDP协议特点

3、UDP协议的缓冲区

四、基于UDP的应用层协议


一、传输层

上一篇文章我们所讲到的HTTP协议和HTTPS协议,是属于应用层协议。我们知道在网络的七层模型中,应用层的下面一层就叫做传输层,应用层需要先将数据交给传输层,由传输层对数据做进一步处理后再将数据继续向下进行交付。而传输层负责可靠性传输,确保数据能够可靠地传送到目标主机。传输层常用的协议就是UDP协议和TCP协议。

今天我们先来讲一讲UDP协议。

二、再谈端口号

通过前面的学习,我们知道,端口号可以标识一个主机上进行网络通信的唯一的一个进程。当主机从网络中获取到数据后,需要自底向上进行数据的交付,而这个数据最终应该交给上层的哪个应用软件进程,就是由该数据当中的目的端口号来决定的。

因为最终我们需要将数据交给应用层,而且是通过传输层将最终数据交给应用层的,所以传输层必定能够提取出相应的端口号,从而知道应该将数据交付给应用层的哪一个进程。因此端口号应该是属于传输层。

在TCP/IP协议中,我们使用“源IP地址”,“源端口号”,“目的IP地址”,“目的端口号”,“协议号”这样一个五元组来标识一个通信。协议号用来标识通信所使用的协议(TCP还是UDP)。

端口号的划分

端口号是一个16位整数,因此端口号的范围是0 ~ 65535:

0 ~ 1023:知名端口号。比如HTTP,FTP,SSH等这些广为使用的应用层协议,它们的端口号都是固定的。
1024 ~ 65535:操作系统动态分配的端口号。客户端程序的端口号就是由操作系统从这个范围分配的。

知名端口号

因为有些服务器是非常常用的,所以这些服务器的端口号一般都是固定的:

ssh服务器:22端口。
ftp服务器:21端口。
telnet服务器:23端口。
http服务器:80端口。
https服务器:443端口。

pidof

pidof命令:可以通过进程名,查看进程的id。使用:pidof  进程名

netstat命令

netstat是一个用来查看网络状态的命令。

其常见的选项:

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

三、UDP协议

1、UDP协议格式

UDP协议格式如下:

说明:

16位源端口号:表示数据从应用层的哪个服务进程来。
16位目的端口号:表示数据要到服务端的哪个进程去。
16位UDP长度:表示整个数据报(UDP报头+UDP数据)的长度。
16位UDP检验和:如果UDP报文的检验和出错,就会直接将报文丢弃。

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

UDP协议如何分离报头和有效载荷(如何进行封装)

UDP协议采取的是定长报头的方式,即UDP协议的报头大小为8字节。如果传输层拿到一个UDP数据报文, 会直接读取最前面的8字节,就是报头。这样就可以将报头和有效载荷分离。

UDP协议如何向上进行交付

UDP协议会根据16位端口号向上进行交付。因为应用层的进程一定是绑定了端口号的。 

UDP协议如何知道得到的是否是一个完整的报文

在传输层,将报头和有效载荷分开后,提取出报头中的16位UDP长度,用其减去报头固定长度8字节,就是有效载荷的大小。

在内核中,UDP报头实际就是一个位段类型。

封装报头的本质,其实就是在传输层创建一个UDP报头类型的变量,然后填充位段当中的各个字段,此时就得到了一个UDP报头。

2、UDP协议特点

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

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

3、UDP协议的缓冲区

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

四、基于UDP的应用层协议

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

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

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

相关文章

vue3.x + echarts 5.x + ant-design-vue 4.x + monaco-editor v3 新增版本切换功能

前言 1. 因为vue架构中,大多数包都是通过npm / yarn 等工具直接安转到node_modules 使用 2. 多个版本切换时,不可能全部安装echarts版本 3. 所以思路围绕如何通过cdn动态引入echarts一、添加工具代码 loadScript 路径 utils/loadScript.js export de…

PYTHON做题复盘

1、关于递归的代码 #会返回None的错误代码while len(string)<1:return Trueelse:if string[0]!string[-1]:return Falseelse:string string[1:-1]#正确while len(string) > 1:if string[0] ! string[-1]:return Falseelse:string string[1:-1]return True 错误原因&am…

【NodeMCU实时天气时钟温湿度项目 2】WIFI模式设置及连接

第一专题内容&#xff0c;请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计-CSDN博客 第三专题内容&#xff0c;请参考 【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器&#xff0c;获取并显示当前环境温湿度数据&#…

MySQL数据库变量使用

#MySQL变量的定义和使用 #一、标识符命名规范 #1.以字母或下划线开头&#xff0c;不能以数字开头 #2.不允许使用关键字和保留字 #3.只允许使用_和&#xffe5;作为标识符&#xff0c;不允许使用其他符号 #变量的定义方法 #set在update中使用过set&#xff0c;update声明修改表&…

致鸿物流器材有限公司揭示2024数字物流供应链与技术装备展新动态

参展企业介绍 广东致鸿物流器材有限公司&#xff0c;前身为广州致鸿物流器材有限公司&#xff0c;成立于2002年初&#xff0c;是一家在中国仓储笼行业成立多年的专业仓储笼制造公司&#xff0c;公司员工约400名&#xff0c;日产仓储笼制造规模近8000个&#xff0c;在全国范围内…

华为OD机试 - 手机App防沉迷系统(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

自动驾驶学习2-毫米波雷达

1、简介 1.1 频段 毫米波波长短、频段宽,比较容易实现窄波束,雷达分辨率高,不易受干扰。波长介于1~10mm的电磁波,频率大致范围是30GHz~300GHz 毫米波雷达是测量被测物体相对距离、相对速度、方位的高精度传感器。 车载毫米波雷达主要有24GHz、60GHz、77GHz、79GHz四个频段。 …

积鼎CFDPro颗粒流仿真 | 基于拉格朗日粒子追踪方法,模拟复杂颗粒的流动现象

颗粒流仿真是通过数值模拟手段模拟由大量固体颗粒构成的系统的动态行为&#xff0c;能够详尽刻画颗粒间的碰撞、扩散、堆积、破碎、混合等微观交互&#xff0c;以及与流体介质的相互作用&#xff0c;从而预测颗粒流在各种工况下的宏观表现。颗粒流仿真能够揭示隐藏的风险因素&a…

Java内存模型详解

一、JMM规范 可见性&#xff1a;volatile变量&#xff1b;锁原子性&#xff1a;synchronized和Lock等锁机制有序性&#xff1a;happens-before原则 Java内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是Java虚拟机&#xff08;JVM&#xff09;的一个关键部…

前端开发如何切换node版本安装依赖

在前端开发当中经常遇到node版本不对应导致的安装依赖报错&#xff0c;可以通过切换node版本来实现 在macOS上切换Node.js版本&#xff0c;通常可以使用nvm&#xff08;Node Version Manager&#xff09;或n这样的包来管理。以下是使用nvm的步骤&#xff1a; 安装nvm&#xf…

4. SVG基本图形绘制教程

1. 矩形 <rect> 矩形是SVG中最基本的图形之一。通过<rect>元素可以绘制矩形和正方形。 参数: x 和 y&#xff1a;定义矩形左上角的坐标。width 和 height&#xff1a;定义矩形的宽度和高度。rx 和 ry&#xff1a;定义矩形边角的圆滑程度。 代码示例: <svg …

Java 变量类型

Java 变量类型 在 Java 语言中&#xff0c;所有的变量在使用前必须声明。 声明变量的基本格式如下&#xff1a; type identifier [ value][, identifier [ value] …] ; 格式说明&#xff1a; type – 数据类型。 identifier – 是变量名&#xff0c;可以使用逗号 , 隔开来…

C++ STL 概念1(未完成)

STL&#xff0c;全称Standard Template Library&#xff08;标准模板库&#xff09;&#xff0c;是C标准库的重要组成部分。 说到C的STL&#xff0c;让人就不免想到六大组件&#xff1a; 容器 迭代器 算法 仿函数 空间配置器 适配器 从容器开始逐个描述。 容器 容器分为关联…

Bert 在 OCNLI 训练微调

目录 0 资料1 预训练权重2 wandb3 Bert-OCNLI3.1 目录结构3.2 导入的库3.3 数据集自然语言推断数据集路径读取数据集数据集样例展示数据集类别统计数据集类加载数据 3.4 Bert3.4 训练 4 训练微调结果3k10k50k 0 资料 【数据集微调】 阿里天池比赛 微调BERT的数据集&#xff0…

想学PR的有福了,一小时学会PR剪视频

想学PR的有福了&#xff0c;一小时学会PR剪视频 Pr是什么软件&#xff1f;教程介绍及教程展示教程领取结语下期更新预报 Pr是什么软件&#xff1f; Pr是指Adobe Premiere Pro&#xff0c;它是由Adobe公司开发的一款专业级的视频编辑软件。这款软件广泛应用于电影、电视和网页视…

SQL统计语句记录

1.达梦数据库 统计指定单位的12个月份的业务数据 SELECT a.DEPT_ID, b.dept_name, a.USER_NAME, count(a.dept_id) as count, sum(case when to_char(a.CREATE_TIME,yyyy-mm) 2023-01 THEN 1 else 0 end) as one,sum(case when to_char(a.CREATE_TIME,yyyy-mm) 2023-02 T…

【JavaEE 初阶(四)】多线程进阶

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.常见的锁策略2.1悲观锁vs乐观锁2.2轻量级锁vs重量级锁2.3自旋锁vs挂起锁2.4读写…

Linux——DNS域名解析服务的部署及优化方案

1. (问答题) 1.配置2台服务器要求如下&#xff1a; a&#xff09;服务器1&#xff1a; 主机名&#xff1a;dns-master.timinglee.org [rootserver100 ~]# hostnamectl hostname dns-master.timinglee.org [rootserver100 ~]# hostname dns-master.timinglee.org ip地址&#…

【数据结构(邓俊辉)学习笔记】栈与队列01——栈应用(栈混洗、前缀后缀表达式、括号匹配)

文章目录 0. 概述1. 操作与接口2. 操作实例3. 实现4. 栈与递归5. 应用5.1 逆序输出5.1.1 进制转换5.1.1.1 思路5.1.1.2 算法实现 5.2 递归嵌套5.2.1 栈混洗5.2.1.1 混洗5.2.1.2 计数5.2.1.3 甄别 5.2.2 括号匹配5.2.2.1 构思5.2.2.2 实现5.2.2.3 实例 5.3 延迟缓冲5.3.1 中缀表…

linux状态中的T(停止状态)和S(浅度睡眠状态)有什么区别?

前言&#xff1a; 最近学习Linux的七大状态。在学习这个T停止状态和S睡眠状态时觉得有些相似&#xff0c;所以这篇博客就探求一下他们之间的区别。 T停止状态 当一个进程处于T状态时&#xff0c;它已经被停止执行。这通常是通过向进程发送SIGSTOP信号来实现的。在T状态下&…