当前位置: 首页 > news >正文

【Linux网络】端口及UDP协议

文章目录

  • 1.再看四层
  • 2.端口号
    • 2.1引入
      • linux端口号和进程pid的区别
      • 端口号是如何生成的
      • 传输层
      • 有了pid还设置端口号
      • 端口号划分
    • 2.2问题
    • 2.3netstat
  • 3.UDP协议
    • 3.0每学一个协议 都要讨论一下问题
    • 3.1UDP协议
    • 3.2谈udp/tcp实际上是在讨论什么?

1.再看四层

在这里插入图片描述

2.端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序。
在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
网络通信本质也是进程间通信

在这里插入图片描述
在这里插入图片描述

一个进程 两个画面 两个端口号

在这里插入图片描述

2.1引入

linux端口号和进程pid的区别

在Linux系统中,端口号(Port Number)和进程ID(Process ID,简称PID)是两个不同的概念,它们各自在操作系统和网络通信中扮演着不同的角色。以下是它们之间的主要区别:

端口号(Port Number)
定义:在网络通信中,端口号用于标识一个特定的进程或服务在特定的传输协议(如TCP或UDP)上的逻辑连接点。
作用:当客户端应用程序想要与服务器上的某个服务进行通信时,它需要使用服务器的IP地址和端口号来指定目标位置。服务器应用程序则在特定的端口上监听来自客户端的连接请求。
范围:对于TCP和UDP协议,端口号的范围通常是从0到65535。其中,0到1023之间的端口号被称为“知名端口”(Well-Known Ports),通常用于系统服务或标准服务(如HTTP使用80端口,HTTPS使用443端口等)。
唯一性:在同一台计算机上,不同的服务或进程可以使用不同的端口号来区分彼此。但是,多个进程不能同时绑定到同一个端口上(除非它们使用了某种形式的共享或代理机制)。
进程ID(Process ID)
定义:在Unix和Linux系统中,每个进程都有一个唯一的数字标识符,称为进程ID(PID)。
作用:PID用于在操作系统中唯一地标识和跟踪正在运行的进程。系统管理员和程序员可以使用PID来查询、监控、控制或终止进程。
范围:PID是一个非负整数,其范围取决于操作系统的具体实现。在大多数现代Unix和Linux系统中,PID的范围通常是从1到一个相对较大的数字(如32768或更高)。
唯一性:在任何给定的时间点,同一台计算机上的每个进程都有一个唯一的PID。但是,当进程终止并被新进程替换时,旧的PID可能会被新进程重新使用。
总结
端口号主要用于网络通信,用于标识服务或进程在网络上的位置。
PID主要用于在操作系统中唯一地标识和跟踪正在运行的进程。
虽然端口号和PID都是唯一的标识符,但它们的上下文、用途和范围是不同的。

端口号是如何生成的

端口号在Linux系统以及更广泛的网络环境中,并非由系统自动生成,而是根据网络服务和应用程序的需求进行配置和指定的。以下是一些关于端口号生成和使用的关键点:

知名端口(Well-Known Ports):范围从0到1023的端口号被称为知名端口。这些端口通常由系统服务或标准服务使用,例如HTTP使用80端口,HTTPS使用443端口等。这些端口号在RFC文档中有明确的规定,并且不应被一般的应用程序随意使用。
注册端口(Registered Ports):范围从1024到49151的端口号被称为注册端口。这些端口是为没有知名端口号的应用程序而预留的,并且可以通过IANA(Internet Assigned Numbers Authority)进行注册。
动态端口(Dynamic Ports)或私有端口(Private Ports):范围从49152到65535的端口号被称为动态端口或私有端口。这些端口通常用于客户端应用程序,并且在系统启动时并不分配给任何服务。它们可以在需要时被任何应用程序使用。
手动配置:在Linux系统中,你可以通过编辑配置文件(如/etc/services)或使用网络管理工具来手动配置端口号。例如,当你配置一个Web服务器(如Apache或Nginx)时,你需要指定它应该监听的端口号。
自动选择:有些应用程序可能会自动选择一个未使用的端口号。这通常是通过扫描系统上的可用端口并选择一个未被占用的端口来实现的。然而,这种方法并不总是可靠的,因为可能会有其他进程在同一时间选择了相同的端口号。
使用防火墙和安全策略:在配置端口号时,还需要考虑防火墙和安全策略。你应该只开放那些确实需要的端口,并限制对它们的访问。这有助于减少系统受到攻击的风险。
总的来说,端口号的生成和使用是一个需要仔细考虑的过程,需要根据你的应用程序和网络环境的需求来进行配置。

传输层

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

有了pid还设置端口号

PID(Process ID,进程标识符)和端口号在操作系统和网络通信中各自扮演着不同的角色,因此它们都是必需的。

PID的作用:
PID是操作系统中用于唯一标识一个正在运行的进程的数字。每个正在运行的进程在操作系统中都有一个与之关联的PID。PID对于进程管理和调试非常有用,因为它允许用户或系统管理员精确地引用和控制特定的进程。例如,如果想要结束一个进程,就需要知道它的PID,然后使用相应的命令(如Unix/Linux中的kill命令或Windows中的任务管理器的“结束进程”选项)来结束它。此外,PID还可以用于监视进程的状态和性能。

端口号的作用:
端口号是在网络通信中使用的一种标识,用于区分不同的应用程序或服务。在计算机网络中,每个服务或应用程序都可以绑定到一个特定的端口号上,使得数据包能够正确地传输到目标应用程序。端口号的主要作用是表示一台计算机中的特定进程所提供的服务。例如,Web服务器通常使用80端口来提供HTTP服务,FTP服务器通常使用21端口来提供文件传输服务。通过端口号,客户端可以准确地找到并连接到目标服务。

PID和端口号之间的主要区别在于它们的应用场景和目的不同。PID是操作系统内部使用的标识符,用于管理和控制进程;而端口号是在网络通信中使用的标识符,用于确定目标应用程序或服务。

此外,不是每个进程都有端口号。只有那些需要通过网络进行通信的进程才会绑定到特定的端口号上。而那些只在本地计算机上运行、不需要网络通信的进程则不需要端口号。

因此,尽管PID和端口号在各自的领域中都扮演着重要的角色,但它们并不能相互替代。有了PID还需要设置端口号,是因为它们分别解决了操作系统和网络通信中的不同问题。

端口号划分

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

认识知名端口号(Well-Know Port Number)
有些服务器是常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:

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

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

在这里插入图片描述

不是知名端口号的“知名端口号”

mysql–3306
redis。。。

2.2问题

两个问题

  1. 一个进程是否可以bind多个端口号?
  2. 一个端口号是否可以被多个进程bind?
    针对这两个问题,我们可以从以下几个方面来解答:

一个进程是否可以bind多个端口号?
是的,一个进程可以bind多个端口号。在进程内部,可以创建多个线程(thread),每个线程都可以调用socket接口,创建struct sockaddr_in结构体,然后将sockfd和结构体进行bind。这样,一个进程就可以通过不同的线程绑定到多个端口号上,从而提供不同的服务或处理不同的通信需求。例如,一个Web服务器进程可能同时监听80端口(用于HTTP服务)和443端口(用于HTTPS服务)。
一个端口号是否可以被多个进程bind?
通常情况下,一个端口号在同一时刻只能被一个进程绑定。这是为了确保数据传输的准确性和一致性。端口号需要标识进程的唯一性,如果多个进程绑定到同一个端口号,那么当数据包从传输层向上交付时,系统就无法确定应该将数据包交付给哪个进程。因此,如果一个进程已经绑定到某个端口号,其他进程再试图绑定到同一个端口号时,操作系统通常会抛出错误或拒绝绑定请求。
然而,在某些特殊情况下,如使用了端口共享技术或某些特定的网络编程模式,可能会实现多个进程共享同一个端口号的情况。但这种情况相对较少见,且需要谨慎处理以避免潜在的问题。

总的来说,进程和端口号之间的关系是:一个进程可以绑定到多个端口号上,但一个端口号在同一时刻通常只能被一个进程绑定。

2.3netstat

netstat是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态
常用选项:
n 拒绝显示别名,能显示数字的全部转化成数字
l 仅列出有在 Listen (监听) 的服務状态
p 显示建立相关链接的程序名
t (tcp)仅显示tcp相关选项
u (udp)仅显示udp相关选项
a (all)显示所有选项,默认不显示LISTEN相关
在这里插入图片描述
还有本地通信的域间套接字!

iostat

在这里插入图片描述

pidof比ps更好用

pidof

在查看服务器的进程id时非常方便.
语法:pidof [进程名]
功能:通过进程名, 查看进程id

一般进程名带后缀d是守护进程

在这里插入图片描述

把本应输出到stdin的数据重定向到管道后的程序 xargs的作用是把这些数据以命令行参数交给kill

在这里插入图片描述

3.UDP协议

3.0每学一个协议 都要讨论一下问题

  • 报头和有效载荷如何分离 对于udp:定长报头
  • 有效载荷应该交付给哪一个上层协议对应的协议字段(方案)【对于udp 通过报头中的目的端口号来得知】
  • 认识报头
  • 协议周边问题

3.1UDP协议

UDP协议端格式

在这里插入图片描述

  • 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;
  • 如果校验和出错, 就会直接丢弃; 丢弃并不会通知对方----不可靠传送!

UDP的特点

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

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

面向数据报

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;
例如,用UDP传输100个字节的数据:
如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次 recvfrom, 每次接收10个字节;
而tcp需要做很多处理:提取各种信息以保证读到完整的信息。
udp只需要序列化发送反序列化接收!

UDP的缓冲区 udp没有发送缓冲区

在这里插入图片描述

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

UDP使用注意事项

UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部). 64K在当今的互联网环境下, 是一个非常小的数字.
如果需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;

基于UDP的应用层协议

NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
DNS: 域名解析协议
当然, 也包括自己写UDP程序时自定义的应用层协议;

应用场景

直播
视频掉帧 卡顿 模糊

udp报头 – 位段 – 自定义类型 – 可以自定义变量 – 可以开辟空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2谈udp/tcp实际上是在讨论什么?

我们学udp/tcp,是为了了解,为了在某一天某个应用场景,实际上,我们不会直接用udp协议去怎么样,更多的是基于udp/tcp协议的一些场景。比如。
在这里插入图片描述

相关文章:

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么? 1.再看四层 2.端口号 端口号(Po…...

Unity 生成模版代码

1、创建模版代码文本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClassNameScritpItem : MonoBehaviour {public GameObject go;// Start is called before the first frame updatevoid Start(){go new GameObject();}// …...

【ai】chatgpt的plugin已经废弃

发现找不到按钮,原来是要申请: https://openai.com/index/chatgpt-plugins/ 发现申请已经跳转了,好像是废弃了? 不接受新插件了,但是openai的api 是可以继续用的。 https://openai.com/waitlist/plugins/We are no longer accepting new Plugins, builders can now create…...

2024年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行如下代码,若输入整数3,则最终输出的结果为?( ) def f(x):if x==1:s=1else:s...

多旋翼无人机机场考哪些内容?

多旋翼无人机机场考试的内容主要包括理论和实飞两部分。 理论考试主要涵盖无人机相关的知识,包括无人机的原理、结构、操作规范等。 实飞考试则主要考察飞行技能,包括飞行操作、航线规划、飞行稳定性等。 具体来说,实飞部分可能包括使用GPS…...

【前端每日基础】day23——箭头函数

箭头函数是ES6(ECMAScript 2015)引入的一种新的函数表达式语法。相比传统函数,箭头函数有简洁的语法,并且不绑定自己的this、arguments、super或new.target。以下是详细介绍箭头函数的各个方面: 基本语法 单参数箭头函…...

27.Java中单例模式的实现方式

一、单例模式 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。 单例模式中: 这个类只能有一个实例这个类必须自己创建自己的唯一实例这个类必须…...

C#面:当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?

一个线程在访问一个对象的一个synchronized方法时: 另一个线程可以同时访问这个对象的非同步方法。另一个线程不可以同时访问这个对象的普通同步方法。另一个线程可以同时访问这个对象的静态同步方法 ,即static synchronized修饰的方法 。另一个线程不可…...

express框架下后端获取req.body报错undefined

express框架下后端获取req.body报错undefined_express服务器post中data为undefine-CSDN博客 /*** 特殊说明:Express是一个单线程服务器器程序【必须存在指定的顺序调用,否则无法达到预期的效果】*//*** 第一步:创建一个Express实例对象,并且在匹配路由之…...

Element plus 低版本弹窗组件添加拖拽功能

在使用element plus 弹窗组件el-dialog 的时候,由于自己组件库版本过低,所以就会缺失某些功能,比如弹窗组件的可拖拽功能。因为某些原因element plus 组件库又不能升级,所以此时就需要自己为弹窗组件添加拖拽功能。共分为一下四个…...

计算机组成原理易混淆知识点总结(持续更新)

目录 1.机器字长,存储字长与指令字长 2.指令周期,机器周期,时钟周期 3.CPI,IPS,MIPS 4.翻译程序和汇编程序 5.计算机体系结构和计算机组成的区别和联系 6.基准程序执行得越快说明机器的性能越好吗? 1.机器字长,存储字长与指令字长 不同的机器三者…...

【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题

问题引入 目前STM32CUBEMX已经更新到了6.11版本,对应的固件库也一直在更新; 以STM32F1库为例,目前最新的库对应版本为1.8.5 但是我们会发现,如果直接使用1.8.5版本的固件库生成HAL源码后,烧录是可以烧录,但…...

芯片丝印反查

芯片丝印反查网 - IC芯片丝印,IC芯片代码,IC芯片印字,IC芯片顶标,SMD code,marking code,top mark芯查查-电子信息产业数据引擎 ic/芯片丝印反查网-芯查查...

C语言之指针详解(5)(含有易错笔试题)

文章目录 一、sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 二、数组和指针笔试题2.1 一维数组2.2 字符数组2.3 二维数组 三、指针运算笔试题3.1 题目13.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 一、sizeof和strlen的对比 有一个很神…...

discuzX2.5的使用心得 札记一

从开始接受php论坛的开发任务,对php感兴趣的我开始迷恋上discuz这个产品了, 像戴志康这样的创新人才,是我们这代人的骄傲和学习的榜样 应该是了解一下,啥事discuzX2.5,百度看一下 discuz x2.5_百度百科 看完百度词条…...

【Python】 探索Django框架的高并发处理能力

基本原理 Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。Django遵循MVC(模型-视图-控制器)设计模式,提供了一个全栈式的解决方案,使得开发者能够快速构建功能丰富的Web应用。Django的高并发处…...

C-数据结构-平横二叉树

平衡二叉树(Balanced Binary Tree)是一种二叉树,其中任意节点的两棵子树的高度差不超过 1。也可以说是一棵空树或者左右子树高度差不超过 1 的二叉树。 特点和性质 高度平衡:平衡二叉树是一种高度平衡的二叉树,任意节…...

算法训练营day41

动态规划理论基础(主要就是确定动态规划的几个步骤) 题目1:509. 斐波那契数 - 力扣(LeetCode) class Solution { public:int fib(int n) {if(n 0) return 0;if(n 1) return 1;int dp1 0;int dp2 1;int dp3 0;fo…...

cesium开发实例分享

反正 cesium 看到的效果几乎都有...

字符串和字符串函数(1)

前言: 字符串在C语言中比较特别,没有单另的字符串类型,想要初始化字符串必须用字符变量的数组初始化,但是在C语言标准库函数中提供了大量能对字符串进行修改的函数,比如说可以实现字符串的的拷贝,字符串的追…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...