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

传输层协议—UDP协议

传输层协议—UDP协议

文章目录

  • 传输层协议—UDP协议
      • 传输层
      • 再谈端口号
      • 端口号范围划分
      • pidof
      • netstat
    • UDP协议端格式
      • UDP报文
      • UDP特点
      • UDP缓冲区
      • 基于UDP的应用层协议

传输层

在学习HTTP/HTTPS等应用层协议时,为了方便理解,可以简单认为HTTP将请求和响应直接发送到网络中。实际上HTTP是将数据打包交付给下层传输层,然后传输层协议对该数据进行处理后继续向下交付,该过程贯穿成功网络协议栈,最后才将数据发送到网络中。

传输层负责将数据通过网络发送到对方主机的传输层的接收缓冲区中。因此为了方便理解,在学习传输层协议时可以简单认为传输层是直接将数据发送到网络中。

再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序

当主机从网络中获取到对方发送过来的数据时,将数据自底向上进行解包交付,交付到传输层时,传输层协议要通过端口号将数据交付给应用层的指定进程(程序)。

image-20231001161950968

  • 由于端口号属于传输层概念,因此自底向上交付到传输层的报文的报头内就含有端口号,解包后传输层协议能拿到该端口号,根据该端口号将有效载荷交付给对应的程序。

五元组标识一个通信

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

  • 源IP和源端口号标识发来报文的来源主机和来源服务程序,目的IP标识网络中接收数据的主机,目的端口号标识的是传输层向上交付的应用层服务程序。
  • 协议号标识的是发送方接收方双方规定所使用的协议。

image-20231001163026001

例如服务器的IP是172.20.100.32,该服务器上有多进程版服务程序。有两个客户端连接上了服务器。因此服务器收到不同的客户端发送来的请求,是根据源IP区别出不同的主机、根据源端口号区别出目标主机上的不同程序。而客户端B发送请求给服务器需要根据目的IP找到服务器主机,目的端口号找到目标主机的服务程序。

image-20231001184231904

  • 通过源IP、目标IP、协议号、源端口号、目的端口号这五个数字标识一个通信。

五元组可以通过netstat -n查看

image-20231002123336854

  • 假如本地是服务器,那么从服务器的角度查看,Local Address对应的是目的IP和目的端口号,Foreign Address对应的是源IP和源端口号。

端口号范围划分

0—1023:知名端口号,例如HTTP,FTP,SSH等这些广为使用的应用层协议,这些端口号都是固定的。

知名端口号有:

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

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

可以通过指令查询刀知名端口号

cat /etc/services

image-20231002114755196

因此我们自己写服务器使用端口号时,就需要避开这些知名端口号。

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

数据自底向上交付时,在传输层需要找到数据报头内含的目的端口号对应的进程,并交付给该进程,这注定着一个端口号只能标识一个进程,不能一个端口号标识多个进程。因此一个端口号只能被一个进程bind。

  1. 一个进程是否可以bind多个端口号?

一个端口号只能bind一个进程,但一个进程可以bind多个端口号。服务器具备多种功能时,客户端就需要根据不同的功能,选择不同的端口号进入同一个服务器,即从不同的端口号进入同一个进程。

pidof

pidof 进程:查询到该进程的pid。

image-20231002120619634

xargs:将管道传输过来的内容尾接到后面的指令后面。例如图中的 pid httpserver | xargs kill -9管道传输过来httpserver的pid,xargs将该pid尾接到kill -9后面即给httpserver进程发送9号命令。

netstat

netstat 是一个用于查看网络连接和网络统计信息的命令行工具。它可以用来显示当前系统上的网络连接、路由表、接口统计信息等等。在 Linux 系统中,netstat 命令的用法如下:

netstat [options]

一些常用的选项包括:

  • -a:显示所有的连接,包括监听中和已建立的连接。
  • -t:显示 TCP 协议的连接。
  • -u:显示 UDP 协议的连接。
  • -n:以数字形式显示 IP 地址和端口号,而不是尝试进行 DNS 解析。
  • -p:显示与连接关联的进程信息。
  • -r:显示路由表。
  • -l:仅显示监听中的连接。
  • -atun:显示所有的TCP和UDP连接

image-20230825190401543

注意一下:这里出现了两个连接,原因在于服务器和客户端在同一台主机上,即服务器和客户端完成了本地环回,因此能看到两个连接。

UDP协议端格式

UDP报文

image-20231002124703979

  • 报文=报头+有效载荷。报头长度为8字节,即UDP报头为固定报头,当传输层收到UDP报文时,提取前8字节,剩下的为有效载荷,直接向上交付给应用层即可。
  • 报头内含16位源端口号,16位目的端口号,16位UDP长度,16位UDP校验和。当发送UDP报文给对方时,需要对整个UDP报文做检查,16位UDP校验和标识UDP报文的完整性。对方收到UDP报文后,先对整个UDP报文做检查,也形成一个16位UDP校验和,然后将形成的校验和与UDP报头的校验和做比对,若相同则说明UDP报文完整,没有在传输途中发生报文丢失。若校验和出错,就会直接将UDP报文丢弃。
  • 源端口号和目的端口号的长度是16位的原因是内核的端口号也是16位的,底层决定了上层数据长度。
  • 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度。而2的16次方大约是64kb,这意味着UDP报文大小最大为64kb。因此通过UDP通信,报文大小大于64KB时,就需要将一个报文拆解成多个报文进行发送。
  • 应用层将数据以UDP协议的方式发送到网络中,其实是将数据自顶向下做封装。传输层拿到应用层交付的数据后,给该数据添加UDP报头,然后继续向下交付。

image-20231002155011305

  • 实际上报头是OS层面定制的协议。由于Linux内核是由C语言写的,因此可以把报头看作是一个结构体struct udp_hdr,那么传输层收到应用层交付过来的数据时,先开辟一块空间,空间容纳一个报头大小,将报头里面的属性填充,最后加上数据就成为一个报文了。

UDP特点

  • 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接。
  • 不可靠:没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层 返回任何错误信息。UDP在传输层交付給下层就不关心了,即掉包后没有反应。
  • 面向数据报:不能够灵活的控制读写数据的次数和数量,給多少发多少。sendto 几次recvfrom几次。相比于:TCP可能发了很多次,而接收要根据应用层实现。

UDP缓冲区

image-20231002150359165

  • UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后 续的传输动作。没有发送缓冲区使得上层应用层的send/write函数调用完直接返回,不用阻塞。因为该函数直接将数据拷贝到传输层,由传输层自主决定将数据拷贝到OS的内核缓冲区,拷贝完直接返回,因此函数不关心数据的发送。
  • UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了, 再到达的UDP数据就会被丢弃;
  • UDP的socket即能够读也能够写,虽然没有发送缓冲区,但是有接收缓冲区,因此通过UDP协议通信可以完成全双工通信。

基于UDP的应用层协议

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

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

相关文章:

传输层协议—UDP协议

传输层协议—UDP协议 文章目录 传输层协议—UDP协议传输层再谈端口号端口号范围划分pidofnetstat UDP协议端格式UDP报文UDP特点UDP缓冲区基于UDP的应用层协议 传输层 在学习HTTP/HTTPS等应用层协议时,为了方便理解,可以简单认为HTTP将请求和响应直接发送…...

【改造中序遍历】 538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树 解题思路 改造中序遍历算法因为中序遍历的结果都是有顺序的 升序排序,那么如果先遍历右子树 在遍历左子树 那么结果就是降序的最后我们设置一个变量 累加所有的中间值 那么得到的结果就是比当前节点大的所有节点的值 /*** Definiti…...

2022年11月工作经历

11月 招聘 最近招聘C程序员和黑盒测试员。由于第一次招聘不知道如何处理,不断和同事沟通,摸索出一套简单的规则。C程序员:力扣随机第二题,如果运气不好可以再随机一两次。黑盒测试员:力扣随机第二题或第三题&#xff…...

使用广播信道的数据链路层

使用广播信道的数据链路层 ​ 广播信道可以一对多通信。局域网使用的就是广播信道。局域网最主要的特点就是网络为一个单位所拥有,且地理范围和站点数目有限。局域网可按网络拓扑进行分为星形网、环形网、总线网。传统的以太网就是总线网,后来又演变为星…...

第3章-指标体系与数据可视化-3.1.2-Seaborn绘图库

目录 3.1.2 Seaborn绘图库 1. 带核密度估计的直方图 2. 二元分布图 一维正态分布 联合分布...

excel中将一个sheet表根据条件分成多个sheet表

有如下excel表,要求:按月份将每月的情况放在一个sheet中。 目测有6个月,就应该有6个sheet,每个sheet中体现本月的情况。 一、首先增加一个辅助列,月份,使用month函数即可。 填充此列所有。然后复制【月份】…...

案例突破——再探策略模式

再探设计模式 一、背景介绍二、 思路方案三、过程1. 策略模式基本概念2. 策略模式类图3. 策略模式基本代码策略类抽象策略类Context类客户端 4. 策略模式还可以进行优化的地方5. 对策略模式的优化(配置文件反射) 四、总结五、升华 一、背景介绍 在做项目…...

uboot启动流程-涉及lowlevel_init汇编函数

一. uboot启动流程涉及函数 之前文章简单分析了 uboot启动流程的开始,从链接脚本文件 u-boot.lds 中,我们已经知道了入口点是 arch/arm/lib/vectors.S 文件中的 _start函数。 _start函数:调用了 reset 函数,reset 函数内部&…...

质数距离 - 如何在较合理的时间复杂度内求2e9范围内的质数

求l、r之间的质数&#xff0c;范围在2e9&#xff0c;但l、r的差值不大&#xff0c;在1e6范围内 先求出 内的质数&#xff0c;然后拿这个指数去筛[l, r]范围内的即可 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \…...

八、3d场景的区域光墙

在遇到区域展示的时候我们就能看到炫酷的区域选中效果&#xff0c;那么代码是怎么编辑的呢&#xff0c;今天咱们就好好说说&#xff0c;下面看实现效果。 思路&#xff1a; 首先&#xff0c;光墙肯定有多个&#xff0c;那么必须要创建一个新的js文件来作为他的原型对象。这个光…...

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎&#xff0c;使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…...

3.物联网射频识别,(高频)RFID应用ISO14443-2协议,(校园卡)Mifare S50卡

一。ISO14443-2协议简介 1.ISO14443协议组成及部分缩略语 &#xff08;1&#xff09;14443协议组成&#xff08;下面的协议简介会详细介绍&#xff09; 14443-1 物理特性 14443-2 射频功率和信号接口 14443-3 初始化和防冲突 &#xff08;分为Type A、Type B两种接口&…...

【IDEA】IDEA 单行注释开头添加空格

操作 打开 IDEA 的 Settings 对话框&#xff08;快捷键为CtrlAltS&#xff09;&#xff1b;在左侧面板中选择Editor -> Code Style -> Java&#xff1b;在右侧面板中选择Code Generation选项卡&#xff1b;将Line comment at first column选项设置为false使注释加在行开…...

三等分功分器[波导]设计详细教程

想必大家通过阅读相关文献可以发现三等分实现可以有很多不同的方法&#xff0c;这里采用的是先不等分再等分的方式&#xff0c;仅供参考。 主要指标 中心频率为280GHz&#xff0c;采用WR-3频段的标准波导&#xff0c;将2:1不等功率分配耦合器与3dB等功率分配耦合器级联&#…...

Mysql分库分表

1.原理 2.Sharding JDBC 官网https://shardingsphere.apache.org/ 2.1 水平拆分 创建一个新的springboot项目 导入依赖,直接将原本的dependencies给覆盖掉 <dependencies><!-- ShardingJDBC依赖 --><dependency><groupId>org.apache.shardings…...

【算法学习】-【双指针】-【复写零】

LeetCode原题链接&#xff1a;1089. 复写零 下面是题目描述&#xff1a; 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 …...

【算法优选】双指针专题——叁

文章目录 &#x1f60e;前言&#x1f333;[两数之和](https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/)&#x1f6a9;题目描述&#xff1a;&#x1f6a9;算法思路&#xff1a;&#x1f6a9;算法流程&#xff1a;&#x1f6a9;代码实现 &#x1f384;[三数之和]…...

Java栈的压入、弹出序列(详解)

目录 1.题目描述 2.题解 方法1 方法2 1.题目描述 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xff0c;序列4,5,3,2,1是该压栈序…...

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

MQ&#xff08;message queue&#xff09;&#xff1a;本质上是个队列&#xff0c;遵循FIFO原则&#xff0c;队列中存放的是message&#xff0c;是一种跨进程的通信机制&#xff0c;用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后消息发送上游只…...

PyTorch - 模型训练损失 (Loss) NaN 问题的解决方案

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/133378367 在模型训练中&#xff0c;如果出现 NaN 的问题&#xff0c;严重影响 Loss 的反传过程&#xff0c;因此&#xff0c;需要加入一些微小值…...

8、Nacos服务注册服务端源码分析(七)

本文收录于专栏 Nacos 中 。 文章目录 前言确定前端路由CatalogController.listDetail()ServiceManager总结 前言 前文我们分析了Nacos中客户端注册时数据分发的设计链路&#xff0c;本文根据Nacos前端页面请求&#xff0c;看下前端页面中的服务列表的数据源于哪里。 确定前端…...

MySQL使用Xtrabackup在线做主从

1、主库上操作 1.1前提 172.16.11.2&#xff08;主库&#xff09; 172.16.11.4&#xff08;从库&#xff09; 在执行备份之前&#xff0c;确保数据库没有锁定&#xff0c;以避免备份期间的任何写操作。 确保主库上的 MySQL 服务器正在运行&#xff0c;以便备份数据的一致性。…...

scala基础入门

一、Scala安装 下载网址&#xff1a;Install | The Scala Programming Language ideal安装 &#xff08;1&#xff09;下载安装Scala plugins &#xff08;2&#xff09;统一JDK环境&#xff0c;统一为8 &#xff08;3&#xff09;加载Scala &#xff08;4&#xff09;创建工…...

【Java-LangChain:面向开发者的提示工程-5】推断

第五章 推断 推断任务可以看作是模型接收文本作为输入&#xff0c;并执行某种分析的过程。其中涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感&#xff0c;在传统的机器学习工作流程中&#xff0c;需要收集标签数据集、训练模型、确定如…...

【C++】手撕vector(vector的模拟实现)

手撕vector目录&#xff1a; 一、基本实现思路方针 二、vector的构造函数剖析&#xff08;构造歧义拷贝构造&#xff09; 2.1构造函数使用的歧义问题 2.2 vector的拷贝构造和赋值重载&#xff08;赋值重载不是构造哦&#xff0c;为了方便写在一起&#xff09; 三、vector的…...

智能指针那些事

​《Effective Modern C》学习笔记之条款二十一&#xff1a;优先选用std::make_unique和std::make_shared,而非直接new - 知乎...

Fiddler抓取手机https包的步骤

做接口测试时&#xff0c;有时我们需要使用fiddler进行抓包分析&#xff0c;那么如何抓取https包。主要分为以下七步&#xff1a; 1.设置fiddler选项&#xff1a;Tools->Options,按如下图勾选 2.下载并安装Fiddler证书生成器 下载地址&#xff1a;http://www.telerik.com/…...

idea没有maven工具栏解决方法

背景&#xff1a;接手的一些旧项目&#xff0c;有pom文件&#xff0c;但是用idea打开的时候&#xff0c;没有认为是maven文件&#xff0c;所以没有maven工具栏&#xff0c;不能进行重新加载pom文件中的依赖。 解决方法&#xff1a;选中pom.xml文件&#xff0c;右键 选择添加为…...

levelDB引擎

一、背景 1.1、影响磁盘性能的因素&#xff1a; 主要受限于磁盘的寻道时间&#xff0c;优化磁盘数据访问的方法是尽量减少磁盘的IO次数。磁盘数据访问效率取决于磁盘IO次数&#xff0c;而磁盘IO次数又取决于数据在磁盘上的组织方式。磁盘数据存储大多采用B树类型数据结构&…...

IM同步服务

设计概述 后台同步方案的设计就是数据存储结构的设计&#xff0c;如何快速体现“信息变化”&#xff0c;如何快速计算出“变化信息”。后台数据存储结构是由同步协议中同步契约决定的。 设计方案 该方案的同步是按照业务粒度来划分&#xff0c;只需要同步sdk要求同步的数据。…...

宁波做网站公司/网络营销常用的方法有哪些

2016全新计算机应用基础试题及答案一、填空题(每空1分&#xff0c;共30分)1、计算计的软件系统通常分成______软件和______软件。2、字长是计算机______次能处理的______进制位数。3、1KB______B;1MB______KB。4、计算机中&#xff0c;中央处理器CPU由______和______两部分组成…...

注册外国网站/网站制作推广电话

操作系统启动后&#xff0c;会自动启动一些服务与程序。其中有些程序并非服务器正常运行所必须。对于服务器而言&#xff0c;运行多余的服务与程序&#xff0c;这些不会给服务器加分&#xff0c;反而会带来其他的隐患&#xff1a;1.占用资源&#xff1a;每运行多一个服务&#…...

泉州网站的建设/产品推广文案

对于大多数Web设计师和开发人员而言&#xff0c;测试是工作的重要组成部分。 他们将投入大量时间&#xff0c;以确保其网站在各种浏览器中看起来相似甚至相同。 但是&#xff0c;站点测试的一个关键部分似乎经常被遗忘&#xff1a;字体堆栈测试。 问题 大多数网站设计师在很大程…...

欢迎访问中国建设银行/白帽seo公司

有些时候当我们使用vi/vim编辑文件时如果没有注意到文件权限的时候&#xff0c;当最后进行保存时候的可能会提示以下错误&#xff0c;如果强制退出后再切换用户&#xff0c;肯定会丢失当前的改动&#xff0c;下面我就给大家分享一种不用退出保存文件的方法。 1、再vi/vim编辑器…...

宁津哪个网络公司做网站比较好/百度搜索推广是什么

一.Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题。 Linux磁盘管理常用三个命令为df、du和fdisk。 df&#xff1a;列出文件系统的整体磁盘使用量du&#xff1a;检查磁盘空间使用量fdisk&#xff1a;用于磁盘分区df df命令参数功能&#xff1a;检查文件系统的磁…...

企业网站怎么做的更好/seo搜索引擎优化ppt

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不要…...