网络练级宝典-> UDP传输层协议

目录

传输层

端口号

 端口号和进程的关系

UDP协议

UDP协议格式

UDP数据封装:

UDP数据分用: 

面向数据报

UDP的缓冲区

UDP的缺点

基于UDP的应用层协议


传输层

端口号

我们知道端口号对应的其实就是一个进程的pid,在操作系统中二者的对应关系用的是hash进行存储的。即我们可以通过端口号找到对应的进程。

而对于我们的服务器来说,在接收到发送端的数据时,这时要传给哪个应用(进程)是通过端口号来确认的

 这个工作就是传输层要做的事:把数据交给应用层,和从应用层中获取数据传出(封装报头)

怎么标识一个通信

源IP地址,目标IP地址,源端口号,和目标端口号,协议号。这5个号来标识一个信息的来去地方。 IP地址标记是哪台主机,端口号标记是哪个程序,协议号标记用的是什么协议(TCP,UDP协议)。

 netstat命令可以找到查看网络信息,即上面的5个号

proto协议:表示使用的什么协议。local address本地地址:源IP地址和源端口号,foreign address 就是目标地址和目标端口号了。 

协议号和端口号

协议号是网络层的范畴,端口号是传输层协议的范畴 。

因为我们传输层会选择传输协议:UDP TCP协议,所以协议号,可以让我们知道数据需要什么协议来接收。从网络层传到传输层

而端口号,就是在我们协议处理好数据后,把数据传给对应的程序。从传输层传到应用层

端口号的范围

端口号的长度是16位,2的16次方,切换位整数就是 0 - 65535.

  • 0 - 1023:知名端口号,比如HTTP,FTP,SSH等广为使用的应用层协议,他们的端口号都是固定的。
  • 1024 - 65535:操作系统动态分配的端口号,也可以自己指定,操作系统自动分配(客户端),软件自己指定(服务器软件)。

 知名端口号有哪些?

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

当然不止这些,可以去/etc/services文件中查看

 端口号和进程的关系

1.一个端口号只能和一个进程产生联系。

2.一个进程可被多个端口号绑定。

一个端口号只能和一个进程产生联系,因为端口号是要标识唯一的一个进程。

一个进程可被多个端口号绑定,进程本来就是唯一的,端口号表示唯一的一个进程,所以多个端口号可以绑定同一个进程

UDP协议

UDP协议格式

网络套接字中使用的socket接口,都是位于应用层和传输层之间的,应用层把数据准备好,传输层要开始把数据包装(绑定端口号),比如说HTTP他是应用层的协议,它的传输层协议用的是TCP协议,应用层函数中是可以指定使用的传输层协议的。

只有应用层的逻辑代码是应用程序员写的,再往下开始就是操作系统的范畴了,所以UDP是属于内核中的,是操作系统本是就带着的,代码逻辑用户不用写。

UDP协议格式

 

端口号不用介绍了。

UDP长度:这里指的就是数据的大小。

UDP校验和:如果检验和出错,报文将会被直接丢弃

 UDP的报头和有效载荷(数据)怎么分离

很简单,我们已经知道报头有8字节,我们只要把8字节拿掉剩下的就是有效载荷(数据)了。 这里也可以看出来UDP的数据是定长的,因为定了UDP长度。

UDP如何决定把数据给上层哪个协议

 就是通过目标端口号,在把数据传上去给对应的进程。

应用层的每一个网络进程都会绑定端口号,服务器必须显示绑定一个端口号,就是用户自己定的。而客户端的端口号,是操作系统分配的(所以在你使用软件时你不用输入端口号)。

怎么理解报头

报头就是一个结构体,里面存储了4个信息,取用时就根据比特位取用即可 

UDP数据封装:

1.把端口号 等信息创建一个报头结构体对象,然后填充进去初始化。报头就组装好了。

2.在操作系统中,给数据和报头单独开一块连续的空间,然后这就时一个UDP封装了。

UDP数据分用: 

UDP传输数据分用 就是短信,寄信的类似过程:(TCP是类似打电话的样子,双方要有连接)

  • 无连接:即UDP只管发,不管回信。所以不用连接
  • 不可靠:我们把信发出去后,我们并不知道信是否送达,也不确定是否有回信。
  • 面向数据报:大白话就是,定长的数据报头数据大小指定多少发多少。封装好就直接发送。

面向数据报

应用层给多少,我们的UDP一次就发多少,不会一次发多个而是一个一个的发送,不拆分也不合并,每次发送都是一个整体。

UDP的缓冲区

1.UDP没有发送缓冲区,sendto发送时到了传输层,就直接发送。

2.UDP有接收缓冲区,因为发送是保证发出的,但接收是不保证的,如果你发送的很快很多,如果没有缓冲区那很多信息就没了。

3.UDP既能读也能写所以是全双工的。

UDP的缺点

1.UDP的传输大小是16位,2的16次方 == 64Kb,所以UDP一次最多能传64kb。

2.在现在64kb真的太小了。所以超过64kb就要对数据进行拆分发送了。

基于UDP的应用层协议

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

你在用socket编程时也可以自己指定用TCP还是UDP。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于飞腾S2500处理器的全国产加固服务器

近日,西安康德航测电子科技有限公司凭借其深厚的行业底蕴和创新精神,正式推出了基于飞腾S2500处理器的全国产加固服务器。这一产品的问世,不仅标志着我国在信息技术领域的自立自强迈出了坚实的一步,更以其卓越的性能、坚固的设计和…

移植NIOS10.1工程,NIOS10.1路径修改

移植NIOS10.1工程,NIOS10.1路径修改 因工程的需要,使用的NIOS10.1,比较老,这个版本的路径是使用的绝对路径,导致移植工程市回报路径的错误,在13.1之后改为了相对路径,不存在这个问题。 需要修…

`pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3

主打一个有用 只需要加一个环境变量 直接安装NodeJS的情况使用NVM安装NodeJS的情况 本篇博客主要针对第二种情况,第一种也可参考做法,当然眨眼睛建议都换成第二种 默认情况下的解决方法:⭐⭐⭐ 先找到node的位置,默认文件夹名字…

FFmpeg:强大的音视频处理工具指南

FFmpeg:强大的音视频处理工具指南 1. FFmpeg简介2. 核心特性2.1 基础功能2.2 支持的格式和编解码器 3. 主要组件3.1 命令行工具3.2 开发库 4. 最新发展5. 安装指南5.1 Windows系统安装5.1.1 直接下载可执行文件5.1.2 使用包管理器安装 5.2 Linux系统安装5.2.1 Ubunt…

openEuler卸载 rpm安装的 redis

停止 Redis 服务 sudo systemctl stop redis禁用 Redis 服务 sudo systemctl disable redis 卸载 Redis 软件包 sudo yum remove redis查找并删除 Redis 的残留文件 find / -name red*删除 Redis 配置文件 删除 Redis 数据文件 sudo rm -rf /var/lib/redis检查 Redis 是否…

1.kettle保姆级安装教程

1 配置java 1.1 安装jdk 1.双击软件(kettle要用jdk 1.8版本) 2.选择安装路径地址,可以选择默认。要记好安装路径地址,等会要用 1.2 配置环境变量 1.右击计算机,属性 2.高级系统设置 3.环境变量 4.系统变量 – 新建 …

【Elasticsearch】实现分布式系统日志高效追踪

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

K8s 十年回顾(Ten Year Review of K8s)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。Kubernetes 十年回顾 起源与…

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Lambda表达式提取字段名

文章目录 前言例子原理writeReplace反序列化对象缓存元数据 写一个工具 前言 实体类:方法这种方式获取字段名&#xff0c;摒弃了字符串拼接方式&#xff0c;避免拼接出现的问题&#xff0c;提高框架维护性和可修改性。 例子 引入Mybatis-Plus <dependency><groupId…

Dataset用load_dataset读图片和对应的caption的一个坑

代码&#xff1a; data_files {} if args.train_data_dir is not None:data_files["train"] os.path.join(args.train_data_dir, "**")dataset load_dataset("imagefolder",data_filesdata_files,cache_dirargs.cache_dir,) 数据&#xff1…

git查看本地库对应的远端库的地址

git查看本地库对应的远端库的地址 git remote -v 如果想要查看特定的远端库的url地址&#xff0c;可以使用如下命令&#xff0c;其中origin是默认的远端库的名称&#xff0c;可以使用其他远端库的名称 get remote get-url origin

传统PID和模糊控制在matlab仿真效果的对比

通过学习汇总和复现&#xff0c;利用matlab和simulink进行对传统PID和添加了模糊控制器的仿真效果进行对比&#xff1a; 上图中红色信号为传统PID仿真信号&#xff0c;比直接作用到对象的信号拟合度好很多PID的积分和比例的作用&#xff0c;直接作用到对象相当于只通过了二阶函…

网络编程(JavaEE)

前言&#xff1a; 熟悉了网络的基本概念之后&#xff0c;接下来就需要针对网络进行一系列的编程&#xff0c;其中可能涉及到新的一些编程操作&#xff0c;需要我们进一步探索&#xff01; 网络编程套接字&#xff1a; 套接字其实是socket的翻译。 操作系统给应用程序(传输层给…

算法第一弹-----双指针

目录 1.移动零 2.复写零 3.快乐数 4.盛水最多的容器 5.有效三角形的个数 6.查找总价值为目标值的两个商品 7.三数之和 8.四数之和 双指针通常是指在解决问题时&#xff0c;同时使用两个指针&#xff08;变量&#xff0c;常用来指向数组、链表等数据结构中的元素位置&am…

Linux-虚拟环境

文章目录 一. 虚拟机二. 虚拟化软件三. VMware WorkStation四. 安装CentOS操作系统五. 在VMware中导入CentOS虚拟机六. 远程连接Linux系统1. Finalshell安装2. 虚拟机网络配置3. 连接到Linux系统 七. 虚拟机快照 一. 虚拟机 借助虚拟化技术&#xff0c;我们可以在系统中&#…

分而治之—利用决策树和规则进行分类

当在几个具有不同薪资和福利水平的工作机会之间做出选择时&#xff0c;很多人会从列出利弊开始&#xff0c;并基于简单的规则来排除选项。比如&#xff0c;“如果我上下班的时间超过1小时&#xff0c;那么我会不高兴”。通过这种方式&#xff0c;通过这种方式&#xff0c;预测一…

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

Python酷库之旅-第三方库Pandas(255)

目录 一、用法精讲 1206、pandas.tseries.offsets.SemiMonthEnd.is_on_offset方法 1206-1、语法 1206-2、参数 1206-3、功能 1206-4、返回值 1206-5、说明 1206-6、用法 1206-6-1、数据准备 1206-6-2、代码示例 1206-6-3、结果输出 1207、pandas.tseries.offsets.S…

matlab conv函数和vivado fir ip对应输出什么时候相等

1&#xff09;下变频中&#xff0c;“matlab conv函数抽取”“vivado fir ip”。 2&#xff09;matlab conv函数的输入数据和输出数据的对应关系。 3&#xff09;vivado fir ip的输入数据和输出数据的对应关系。 与matlab conv函数一致&#xff0c;如上图。 不同的是&#xff…