传输层协议 —— UDP

news2025/2/21 22:02:15

目录

一、端口号的划分范围

二、认识知名端口号

三、两个问题

四、nestat和pidof命令

五、UDP协议

1. UDP首部格式

2. UDP的特点

3. 面向数据报

4. UDP的缓冲区

5. UDP使用注意事项

6. 基于UDP的应用层协议


一、端口号的划分范围

端口号的长度是16位,因此端口号的范围是0 ~ 65535:

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

二、认识知名端口号

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

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

执行下面的命令, 可以看到知名端口号 

vim /etc/services

三、两个问题

1. 一个端口号是否可以被多个进程绑定?

        一个端口号绝对不能被多个进程绑定,因为端口号的作用就是唯一标识一个进程,如果绑定一个已经被绑定的端口号,就会出现绑定失败的问题。 

2. 一个进程是否可以绑定多个端口号?

        一个进程是可以绑定多个端口号的,这与“端口号必须唯一标识一个进程”是不冲突的,只不过现在这多个端口唯一标识的是同一个进程罢了。

        我们限制的是从端口号到进程的唯一性,而没有要求从进程到端口号也必须满足唯一性,因此一个进程是可以绑定多个端口号的。

四、nestat和pidof命令

1. pidof命令可以通过进程名,查看进程id。

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

其常见的选项如下:

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

五、UDP协议

1. UDP首部格式

  • 16位源端口号:表示数据从哪里来。
  • 16位目的端口号:表示数据要到哪里去。
  • 16位UDP长度:表示整个数据报(UDP首部+UDP数据)的长度。
  • 16位UDP检验和:校验和是为了提供可靠的UDP首部和数据而设计的,防止收到在网络传输中受损的UDP包;如果UDP报文的检验和出错,就会直接将报文丢弃。

UDP如何将报头与有效载荷进行分离?

        UDP的报头当中只包含四个字段,每个字段的长度都是16位,总共8字节。因此UDP采用的实际上是一种定长报头,UDP在读取报文时读取完前8个字节后剩下的就都是有效载荷了

UDP如何决定将有效载荷交付给上层的哪一个协议? 

        当目的主机收到该UDP报文之后,会根据报文当中的16位目的端口号,交付给应用层的某个进程。

UDP数据封装

  • 当应用层将数据交给传输层后,在传输层就会创建一个UDP报头类型的变量,然后填充报头当中的各个字段,此时就得到了一个UDP报头。
  • 此时操作系统再在内核当中开辟一块空间,将UDP报头和有效载荷拷贝到一起,此时就形成了UDP报文。

UDP数据分用

  • 当传输层从下层获取到一个报文后,就会读取该报文的前8个字节,提取出对应的目的端口号。
  • 通过目的端口号找到对应的上层应用层进程,然后将剩下的有效载荷向上交付给该应用层进程。 

2. UDP的特点

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

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

3. 面向数据报

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

4. UDP的缓冲区

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

5. UDP使用注意事项

我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).

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

6. 基于UDP的应用层协议

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

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

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

相关文章

博途PLC和MATLAB矩阵运算存储方法对比

MATLBA不用多说,号称矩阵实验室可想而知在MATLAB里对矩阵的存储、运算非常简单、高效。如下图简单定义一个5*3的矩阵 1、rand(5*3) 上面利用rand()函数简单的实现了内存矩阵存储空间分配+附随机初值,下面我们看下博途里的矩阵定义存储方法。 BP神经网络PID算法的PLC实现过程…

量表如何分析?

一、什么是量表 量表是一种测量工具,通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量,最常见到的就是李克特量表。 ‍1、定义:李克特量表 李克特量表是最常用的量表,是由美国社会心…

基于AD Event日志检测LSASS凭证窃取攻击

01、简介 简单介绍一下,LSASS(本地安全机构子系统服务)在本地或域中登录Windows时,用户生成的各种凭证将会存储在LSASS进程的内存中,以便用户不必每次访问系统时重新登录。 攻击者在获得起始攻击点后,需要获取目标主机上的相关凭证…

AutoCAD Electrical 2022—项目特性

当绘图的过程中如果弹出上面的对话框,就是库和图标菜单途径不对造成的; 点击浏览找到正确的位置或点击默认设置恢复默认的路径; 元件对应原理图的设置; 标记格式:放置元件的代号的格式; 线号:编…

iphone怎么传数据到另一个手机,苹果如何转移数据到新手机,两台iphone怎么同步所有数据

换新手机后,需要迁移旧苹果手机的数据到新苹果手机里面,那么,iphone怎么传数据到另一个手机?本篇文章带您深度了解苹果手机的数据传输技巧。 方法一、通过“快速开始”传输数据 苹果手机如何数据传输?我记得之前换 iP…

【JUC】信号量Semaphore详解

前言 大家应该都用过synchronized 关键字加锁,用来保证某个时刻只允许一个线程运行。那么如果控制某个时刻允许指定数量的线程执行,有什么好的办法呢? 答案就是JUC提供的信号量Semaphore。 介绍和使用 Semaphore(信号量)可以用…

Servlet API 表白墙

Servlet API 详解 主要三个: 1.HttpServlet 2.HttpServletRequest 3.HttpServletResponse 1.HttpServlet 方法名称 调用时机 init 在 HttpServlet 实例化之后被调用一次 destroy 在 HttpServlet 实例不再使用的时候调用一次 service 收到 HTTP 请求的时候调用 …

vue开发测评系统思路及踩坑

最近公司做了一个测评系统,因为时间很短,本以为会很简单,没有想到踩了很多坑。 先看下部分效果图吧 然后在说下需求 1:所有的答案都是动态的(例如选择是出来的是第二题,选择否出来的是第五题&#xff09…

【Linux】文件权限的理解

不用心做一件事情,你永远不知道自己有多么的强大! 文章目录一、shell命令以及运行原理(centos7下,shell为命令行解释器bash)1. 什么是shell(Kernel外层的软件层)?2. shell的交互方式存在意义3. windows GUI对比Linux shell(都是Ke…

算法: C# 中将 Dictionary 集合用作 Hashmap 等价类型

一.只出现一次的数字 1.1 题目描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1: 输入:nums [2,2,3,2] 输出:3 示例 2&#…

Faster RCNN全文翻译

Abstract—State-of-the-art【最先进的】 object detection networks depend on region proposal algorithms to hypothesize【假设、推测】 object locations.Advances like SPPnet [1] and Fast R-CNN [2] have reduced the running time of these detection networks, expos…

赞叹AI的力量-TopazLabs 全家桶使用经历

一、Topaz Gigapixel AI 之前有用过日本的一个2x提升的在线网站服务waifu2x 是通过深度卷积神经网络来实现的,对于anime-style的图片效果是非常好的,使用过之后发现对于一些真实图片效果也不错,只是放大之后能明显的看到局部失真。 效果图&…

详解nginx的root与alias

文章目录1. 结论2. 详解root2.1 基本用法2.2 location的最左匹配原则2.3 index2.4 nginx location解析url工作流程2.5 末尾/3. 详解alias3.1 基本用法4. 特殊情况4.1 alias指定文件4.2 root指定文件nginx版本: 1.18.0 1. 结论 location命中后 如果是root,会把请求…

Anaconda、Conda、pip、Virtualenv的区别

一、Anaconda 1.1 简介 Anaconda是一个包含180的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。 二、Conda 2.1 简述 conda是包及其依赖项和环境的管理工具。 适用语言:Python, R, Ruby, Lua, Scala, …

什么是CRM系统,它如何支持客户营销管理?

简道云回款&销售排名看板什么是CRM控制系统,它怎样全力支持顾客网络营销管理工作? 顾客关系管理工作(CRM)是国际品牌用以培育与顾客关系的技术。这些应用软件系统意在协助产品销售和服务全权更有效地与顾客沟通交流。由于91%的雇员超过11人的企业使用CRM&…

Vue3 —— 利用vite+vue创建一个vue3项目

前言 本文主要讲解如何利用vitevue创建第一个项目以及vue3的基础知识点 一、创建一个vue3项目 这里我们主要介绍如何利用 vitevue3创建项目 1.有关vite Vite(法语意为 "快速的",发音 /vit/,发音同 "veet")是…

AWS Lambda函数实战

AWS Lambda函数实战 实战效果&#xff1a;开发一个函数&#xff0c;它会关注事件中的某个名字&#xff0c;并返回“Hello<名字>&#xff01;”。如果输入事件没有提供名字&#xff0c;则函数返回一个更加通用的问候语“Hello World&#xff01;”。 AWS Lambda函数实战A…

vue后台实现点击图片放大

需求&#xff1a; 点击小图可以放大&#xff0c;放大后&#xff0c;通过手势等比例放大缩小、左右切换图、旋转、关闭。由于element-ui版本较低不支持使用图片放大的image组件。 代码 父组件&#xff1a; <template><div><!-- 放大图 --><el-image-vie…

数商云供应链管理系统助力化工行业企业实现客户订单管理可视化

订单管理是现代企业商务业务的重要组成部分&#xff0c;可以帮助企业解决订单管理低效、混乱等问题。随着产业互联网时代的到来&#xff0c;越来越多企业放弃传统费时费力的手动操作&#xff0c;开始应用数字化的管理工具来提高企业订单管理的水平。这里以化工行业企业为例&…

一文详解,数据仓库、数据库、数据中台、数据湖的区别

数据时代&#xff0c;各行业的企业都已经开始通过数据库来沉淀数据&#xff0c;但是真的论起数据库、数据仓库、数据中台&#xff0c;还是新出现的数据湖&#xff0c;它们的概念和区别&#xff0c;可能知道的人就比较少了&#xff0c;今天我们详细来比较了解一下。 数据仓库是…