网络练级宝典-> 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.mzph.cn/web/62319.shtml

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

相关文章

Redis原理—1.Redis数据结构

大纲 1.Redis的数据结构 2.Redis的SDS 3.Redis的链表 4.Redis的字典 5.Redis的跳跃表 6.Redis的整数集合 7.Redis的压缩列表 8.Redis的对象 9.Redis对象的几个关键属性 10.Redis的单线程为什么这么快 11.Redis的典型应用场景和说明 12.Redis的相关命令说明 1.Redis…

【Vue3中Router使用】

Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下: 结果:红色是按照Sheet名拆出的,蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码: # -*- coding: utf-8 -*- """ 拆分excel文件——按照…

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

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

开源ISP介绍(2)————嵌入式Vitis搭建

Vivado搭建参考前一节Vivado基于IP核的视频处理框架搭建: 开源ISP介绍(1)——开源ISP的Vivado框架搭建-CSDN博客 导出Hardware 在vivado中导出Hardware文件,成功综合—实现—生成比特流后导出硬件.xsa文件。(注意导…

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…

安装部署PowerDNS--实现内网DNS解析

PDNS是PowerDNS的缩写,是一个开源的DNS服务器软件。PowerDNS具有高性能、灵活性和可扩展性,可用于搭建各种规模的DNS解析服务。它支持多种后端数据库(如MySQL、PostgreSQL等),提供高度定制化的配置选项,并具…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中,鹰眼控件 是一个常用的功能,它可以为用户提供当前地图位置的概览,帮助更好地定位和导航。在本文中,我们将基于 Vue 3 的 Composition API 和 OpenLayers,创建一个简单的鹰眼控件示例。 效果预览 在最…

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节…

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入…

计算机视觉与各个学科融合:探索新方向

目录 引言计算机视觉与其他学科的结合 与医学的结合与机械工程的结合与土木工程的结合与艺术与人文的结合发文的好处博雅知航的辅导服务 引言 计算机视觉作为人工智能领域的重要分支,正迅速发展并渗透到多个学科。通过与其他领域的结合,计算机视觉不仅…

SpringBoot期末知识点大全

一、学什么 IoC AOP:面向切面编程。 事物处理 整合MyBatis Spring框架思想! 二、核心概念 问题:类之间互相调用/实现,导致代码耦合度高。 解决:使用对象时,程序中不主动new对象,转换为由外部提…

QT模型/视图:自定义代理类型

简介 在模型/视图结构中,代理的作用就是在视图组件进入编辑状态编辑某个项时,提供一个临时的编辑器用于数据编辑,编辑完成后再把数据提交给数据模型。例如,在 QTableView 组件上双击一个单元格时,代理会提供一个临时的…

ubuntu中使用ffmpeg库进行api调用开发

一般情况下,熟悉了ffmpeg的命令行操作,把他当成一个工具来进行编解码啥的问题不大,不过如果要把功能集成进自己的软件中,还是要调用ffmpeg的api才行。 ffmpeg的源码和外带的模块有点太多了,直接用官网别人编译好的库就…

实现 DataGridView 下拉列表功能(C# WinForms)

本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能,并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表,并在选择某一项时触发事件。 2.…

Docker Compose实战一( 轻松部署 Nginx)

通过过前面的文章(Docker Compose基础语法)你已经掌握基本语法和常用指令认识到Docker Compose作为一款强大工具的重要性,它极大地简化了多容器Docker应用程序的部署与管理流程。本文将详细介绍如何使用 Docker Compose 部署 Nginx&#xff0…

【免费】如何考取HarmonyOS应用开发者基础认证和高级认证(详细教程)

HarmonyOS应用开发者认证考试PC网址 基础:华为开发者学堂 高级:华为开发者学堂 注:免费认证,其中基础认证有免费的课程,浏览器用Edge。 (新题库有点懒,不更新了,点赞收藏后找我要新题库 2024…

瑞芯微开发板 烧写固件问题

自用rk3568-firefly-itx-3568q核心板fpga自研底板,因底板所需外设、功能与原厂有较大差异,故裁剪相应sdk,编译新的内核进行烧写。然而在更改设备树过程中kernel/drivers/media/i2c/fpga.c中的像素格式MEDIA_BUS_FMT_YUYV8_2X8误改成MEDIA_BUS…

photoblog解题过程

本题要求:通过sql注入,找到数据库中的账号密码,并成功登录。登录后利用文件上传,将一句话木马上传到数据库中,然后并对网站进行控制。 解题过程 1、通过在靶机中输入ifconfig,查到ip为192.168.80.153&…

QT获取tableview选中的行和列的值

查询数据库数据放入tableview(tableView_database)后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…