深入理解udp

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.mzph.cn/news/125999.shtml

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

相关文章

家政服务系统小程序app开发功能架构;

家政服务小程序系统,轻松搭建上门服务小程序。支持H5与小程序双端,还能DIY页面。根据您的需求,我们可定制开发家政服务小程序系统。想添加多种服务类目、优惠专区以及IM即时沟通功能?没问题,我们支持!想要快…

【计算机网络笔记】传输层——可靠数据传输原理之Rdt协议

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

局域网内两台电脑共享文件夹(通过网线直连共享数据)

文章目录 2.设置共享文件夹3.访问共享文件夹 1.将两台电脑置于同一局域网下 用网线将两台电脑连接关闭两台电脑防火墙将两台电脑IP地址设置在同一局域网下 测试是否在同一局域网下,使用ping命令 ping 192.168.0.122.设置共享文件夹 选择想要共享的文件夹&#xff…

微服务-统一网关Gateway

网关的作用 对用户请求做身份认证、权限校验将用户请求路由到微服务,并实现负载均衡对用户请求做限流 搭建网关服务 创建新module,命名为Gateway,引入依赖(1.SpringCloudGateway依赖;2.Eureka客户端依赖或者nacos的服…

git命令清单

一、设置和配置 1.初始化一个新的仓库&#xff1a; git init2.克隆&#xff08;Clone&#xff09;一个远程仓库到本地&#xff1a; git clone <repository_url>3.配置用户信息&#xff1a; git config --global user.name "Your Name" git config --global…

CentOS 安装 Hadoop Local (Standalone) Mode 单机模式

CentOS 安装 Hadoop Local (Standalone) Mode 单机模式 Hadoop Local (Standalone) Mode 单机模式 1. 修改yum源 并升级内核和软件 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum clean allyum makecacheyum -y update2. 安…

【新品首发】DPEasy,让数据库安全风险无所遁形!

就在今天&#xff0c;DPEasy 正式出道啦&#xff01;&#xff01;&#xff01; DPEasy 是由杭州图尔兹信息技术有限公司自主研发的一款高效的数据库安全风险扫描工具&#xff0c;旨在帮助大家发现并分析出数据库可能面临的安全威胁。同时&#xff0c;在不影响应用运行的情况下…

【Java 进阶篇】深入理解 Java Response:从基础到高级

HTTP响应&#xff08;Response&#xff09;是Web开发中的一个关键概念&#xff0c;它是服务器向客户端&#xff08;通常是浏览器&#xff09;返回数据的方式。理解如何在Java中处理和构建HTTP响应是开发Web应用程序的重要一部分。本文将从基础知识到高级技巧&#xff0c;详细介…

Qt QWidget、QDialog、QMainWindow的区别

QWidget QWidget是Qt框架中最基础的窗口类&#xff0c;可以理解为用户界面的最基本单元。QWidget类提供了一个空白窗口&#xff0c;可以通过继承该类来创建自定义的窗口类。QWidget类提供了基本的窗口属性和方法&#xff0c;如大小、位置、标题、图标等。 QDialog QDialog是…

【设计模式】第18节:行为型模式之“迭代器模式”

一、简介 迭代器模式&#xff08;Iterator Design Pattern&#xff09;&#xff0c;也叫作游标模式&#xff08;Cursor Design Pattern&#xff09;。 在通过迭代器来遍历集合元素的同时&#xff0c;增加或者删除集合中的元素&#xff0c;有可能会导致某个元素被重复遍历或遍…

Flask Shell 操作 SQLite

一、前言 这段时间在玩Flask Web&#xff0c;发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库&#xff0c;它的数据库就是一个文件&#xff0c;处理速度快&#xff0c;经常被集成在各种应用程序中&#xff0c;在IO…

安装OPENCMS过程记录

今天尝试安装个人网站&#xff0c;或者说是内容管理系统&#xff0c;wordpress 是PHP的&#xff0c;所以上网找了一个免费的&#xff0c;在知乎上基于Java的开源CMS有哪些推荐&#xff0c;各自特点是什么 - 知乎 (zhihu.com) 找了这个opencms&#xff0c;据说是免费&#xff0…

什么是AUTOSAR ComStack,AUTOSAR架构中,CAN通信堆栈CAN Communication Stack介绍

AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;ComStack指的是AUTOSAR架构中的通信堆栈。在AUTOSAR体系结构中&#xff0c;ComStack是指用于不同软件组件&#xff08;如应用软件、基础软件等&#xff09;之间进行通信的一组协议和服务。 在AUTOSAR架构中…

对象存储那点事

在很长的一段时间里&#xff0c;DAS、SAN 和 NAS 这三种架构几乎统治了数据存储市场。所有行业用户的数据存储需求&#xff0c;都是在这三者中进行选择。 然而&#xff0c;随着时代的发展&#xff0c;一种新的数据存储形态诞生&#xff0c;开始挑战前面三者的垄断地位。没错&am…

基于ISO13209(OTX)实现引导诊断

在之前的文章《基于ISO13209&#xff08;OTX&#xff09;实现EOL下线序列》中&#xff0c;讲到了OTX的由来以及OTX在EOL中的实现案例&#xff0c;而本文将讲述OTX的另一个广阔应用场景——定义引导诊断序列。 一 何为引导诊断&#xff1f; 引导诊断&#xff0c;通常也称为“引…

上海亚商投顾:三大指数小幅调整,医药股继续活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指昨日弱势震荡&#xff0c;尾盘探底回升一度翻红&#xff0c;深成指盘中跌超1%&#xff0c;午后跌幅有所收窄。…

两个字符串的最小ASCII删除和

题目描述 给定两个字符串s1 和 s2&#xff0c;返回 使两个字符串相等所需删除字符的 ASCII 值的最小和 。 示例 思路 这个题的解法一和最长公共子序列的解法大致相同&#xff0c;我们可以在此代码基础上稍微更改即可。 代码如下 解法一 public int minimumDeleteSum1(Stri…

unittest与pytest的区别

Unittest vs Pytest 主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较unittest和pytest的区别: 用例编写规则 用例前置与后置条件 断言 测试报告 失败重跑机制 参数化 用例分类执行 如果不好看&#xff0c;可以看下面表格&…

数据库开发软件Navicat Premium 15 mac中文软件介绍

Navicat Premium 15 mac是一款数据库开发工具&#xff0c;Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium for Mac软件介绍 Navicat premium是一款数据库管理工具。将此工具连接数…

Android裁剪图片之后无法加载的问题

适配Android11之后更改了图片保存目录&#xff0c;导致裁剪之后图片一直无法加载&#xff08;fileNotfound&#xff09; 最主要的问题在于保存裁剪文件的目录不能为私有目录&#xff0c;因为裁剪工具是系统工具&#xff0c;无法直接访问项目本身的私有目录。 解决办法&#x…