网络练级宝典-> 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。

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

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

相关文章

容器运行应用及Docker命令

文章目录 一、使用容器运行Nginx应用1_使用docker run命令运行Nginx应用1 观察下载容器镜像过程2 观察容器运行情况 2_访问容器中运行的Nginx服务1 确认容器IP地址2 容器网络说明3 使用curl命令访问 二、Docker命令1_Docker命令获取帮助方法2_Docker官网提供的命令说明3_docker…

JDK17 下载与安装

下载安装包 针对不同的操作系统, 需要下载对应版本的 JDK. 如果电脑是 Windows32 位的, 建议重装系统, 重装成 64 位的操作系统. 因为 Java 从 9 版本开始, 就已经不提供 32 位版本的安装包了. 官网下载 官网下载链接 需要登录 Oracle 账号才能下载. 账号: 2872336204qq.c…

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎,以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程,逐步剖析 InnoDB 的关键概念,帮助您更好地理解和应用。 1. 逻辑存储结构 InnoDB 的数据…

SpringBoot小知识(4):高级配置知识与bean的绑定

一、EnableConfigurationProperties ConfigurationProperties注解在我们之前讲过,他是从配置中读取参数封装给实体类的一个注解。 那么EnableConfigurationProperties是个啥呢? EnableConfigurationProperties 是 Spring Framework 中用于启用基于配置文…

Vue 实现无线滚动效果

目录 1.Element-plus官网中的Infinite Scroll组件说明 2.滚动条设置 3.滚动到底部的函数调用 1.Element-plus官网中的Infinite Scroll组件说明 官网链接如下所示: Infinite Scroll 无限滚动 | Element Plus 首先查看该代码,发现这个组件使用了一个…

Spring Cloud Alibaba 之 “Sentinel”

从网上下载好sentinel-dashboard-1.6.3.jar,然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080,Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始:原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始:原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争,滑动冲突…

用友NC yerfile/down SQL注入漏洞复现(XVE-2024-34596)

0x01 产品简介 用友NC(也称用友NC6或NCC)是用友网络科技股份有限公司开发的一款企业级管理软件,旨在为企业提供全方位的管理服务。主要面向大型企业和集团公司,提供全面的财务和业务管理解决方案,助力企业实现数字化转型和高效管理。采用J2EE架构和先进开放的集团级开发平…

Linux-GPIO应用编程

本章介绍应用层如何控制 GPIO,譬如控制 GPIO 输出高电平、或输出低电平。 只要是用到GPIO的外设,都有可能用得到这些操作方法。 照理说,GPIO的操作应该是由驱动层去做的,使用寄存器操作或者GPIO子系统之类的框架。 但是&#xff0…

18 - Java 线程

简介 进程(process) 对一个程序的运行状态, 以及在运行中所占用的资源(内存, CPU)的描述; 一个进程可以理解为一个程序; 但是反之, 一个程序就是一个进程, 这句话是错的。 进程的特点: 独立性: 不同的进程之间是相互独立的, 相互之间资源…

PyQt登录小窗口实现 内服代码及知识点总结

一、登录窗口 二、实现代码 import sysfrom PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit#封装我的窗口类 class MyWidget(QWidget):#构造函数def __init__(self):#初始化父类super().__in…

python之Django连接数据库

文章目录 连接Mysql数据库安装Mysql驱动配置数据库信息明确连接驱动定义模型在模型下的models.py中定义表对象在settings.py 中找到INSTALLED_APPS添加创建的模型 测试testdb.py中写增删改查操作urls.py添加请求路径启动项目进行测试 连接Mysql数据库 安装Mysql驱动 pip inst…

程序员需要具备哪些知识?

程序员需要掌握的知识广泛而深厚,这主要取决于具体从事的领域和技术方向。不过,有些核心知识是共通的,就像建房子的地基一样,下面来讲讲这些关键领域: 1. 编程语言: 无论你是搞前端、后端、移动开发还是嵌…

Java项目实战II基于微信小程序的电子竞技信息交流平台的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的飞速发展…

【词向量表示】Item2Vec、DeepWalk、Node2vec、EGES词向量生成算法

前言:一般来说用户Embedding在推荐系统中可以通过物品的Embedding向量平均或者聚类实现,因此物品的Embedding算法的效果成为重中之重。这篇文章是笔者阅读《深度学习推荐系统》第四章Embedding技术在推荐系统中的应用的学习笔记。本篇文章主要介绍传统词…

【AI工具】强大的AI编辑器Cursor详细使用教程

目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日,由四名麻省理工学院(MIT)本科生共同创立的Anysphere公司宣布,其开发的AI代码编辑器Cursor在成立短短两年…

交易所 Level-2 历史行情数据自动化导入攻略

用户部署完 DolphinDB 后,需要将历史股票数据批量导入数据库,再进行数据查询、计算和分析等操作。DolphinDB 开发了 ExchData 模块,主要用于沪深交易所 Level-2 行情原始数据的自动化导入,目前已支持的数据源包括: 沪…

zotero中pdf-translate插件和其他插件的安装

1.工具–》插件 2.找插件 3.点击之后看到一堆插件 4.找到需要的,例如pdf-translate 5.点击进入,需要看一下md文档了解下,其实最重要的就是找到特有的(.xpi file) 6.点击刚刚的蓝色链接 7.下载并保存xpi文件 8.回到zotero,安装并使…

5.12【机器学习】卷积模型搭建

softmax输出时不可能为所有模型提供精确且数值稳定的损失计算 model tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape(28, 28)),tf.keras.layers.Dense(128, activationrelu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10) ]) mnist tf.keras…

头歌 Linux之线程管理

第1关:创建线程 任务描述 通常我们编写的程序都是单进程,如果在一个进程中没有创建新的线程,则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务:学会使用C语言在Linux系统中使用pthrea…