UDP协议


UDP协议

  • 前置知识
    • 一、应用层的进程为什么要bind端口号
    • 二、如何确定网络中的一个进程
    • 三、进程 服务 协议 端口之间的关系
    • 四、常见的协议对应的端口
    • 五、一些命令
    • 六、一个进程能不能绑定多个端口号,一个端口号能不能被多个进程绑定
    • 七、对任何一个协议报文的认识
  • UDP协议
    • 一、UDP报文格式(结构)
    • 二、报头字段的介绍
    • 三、如何将UDP报文解包和分用
    • 四、传输层如何将应用层数据封装成UDP报文
    • 五、UDP报文的特点
    • 六、如何满足全双工通信

前置知识

一、应用层的进程为什么要bind端口号

是因为当数据到达传输层需要向上交付,交付到哪个进程呢,通过端口号来查找向上交付的服务进程。

二、如何确定网络中的一个进程

通过IP+端口标识网络中唯一一个进程。网络通信时用IP地址标识一台主机,用端口号标识该主机上的服务进程。

三、进程 服务 协议 端口之间的关系

进程通过操作系统提供的端口进行网络通信提供服务。进程提供一个或多个服务,一个服务基于一个协议或多个协议实现,一个协议可能对应一个或多个端口。协议确保了数据的传输规则和格式,有效载荷在每个层添加报头进行封装,报头的结构内容就是根据协议实现。

四、常见的协议对应的端口

标识端口的类型是16位的,所以端口的大小范围0~65535
其中0~1024为知名端口,是操作系统内部的端口,为系统端口
http:80
ssh:22
https:443
dns:53

五、一些命令

查看协议对应的端口: cat /etc/services
查进程对应的进程号: pidof httpserver
(查看进程名为httpserver对应的进程号)
将进程名为httpserver的所有进程kill掉: pidof httpserver | xargs kill -9
(xargs将 | 前面的结果放到 kill -9后面)
查看本地连接的状态 netstat -nltp
(n能显示为数字的就显示为数字,l 代表连接状态为listen的连接,t代表基于tcp的连接 ,p显示连接对应的进程
netstat -nlup 查看基于udp的连接的状态)

六、一个进程能不能绑定多个端口号,一个端口号能不能被多个进程绑定

一个进程可以绑定多个端口号,数据自底向上交付,到达传输层,一定可以根据端口号交付给绑定端口的进程。保持从端口号到进程映射关系是唯一的。若一个端口号被多个进程绑定了,数据应该交付给进程a,还是交给b进程,这样会有矛盾。若既交给a进程,又交给b进程,那么一个请求就有两份应答,请求方只需要一份应答。

七、对任何一个协议报文的认识

1.如何将报文进行解包(将有效载荷和报头分离)
2.如何分用,就是将报文的有效载荷向上进行交付(根据报头内容进行向上交付)
3.如何将上一层交付下来的报文进行封装传给下一层(添加协议对应的报头)

UDP协议

一、UDP报文格式(结构)

在这里插入图片描述

二、报头字段的介绍

源端口:发送方进程bind的端口
目的端口:接受方进程bind的端口
udp的长度:包括报头和有效载荷 最大为216(65535byte) 这就要求应用层将超过udp最大长度的数据,进行分割,分割为小于等于最大长度的数据
校验和:就是对udp报文做检测,检测报文传输过程是否出错,若出错将udp报文丢弃。

三、如何将UDP报文解包和分用

分用就是将有效载荷交付给上一层的进程,每个进程都会实现协议,每个端口都对应一个进程,通过端口找到进程,进程中实现协议。协议和进程和端口号是三位一体的。
如何将传输层的报文进行分用(进行向上交付,交付给对应应用层进程)?
非常简单udp报文的报头是定长的。传输层收到一个来自网络层传送上来的udp报文,传输层会检测这个报文是udp报文,会直接把固定长度(8字节)的报头和有效载荷分离,根据报头中的目的端口号,将有效载荷交付给应用层的进程。
分离后的有效载荷会放在传输层的接受缓冲区,端口号对应的进程通过文件描述符将数据读到。读到之后就可以按照应用协议对有效载荷做处理。

四、传输层如何将应用层数据封装成UDP报文

udp报文中的报头就是操作系统层面定义的结构化数据,报头就是一个结构体,但是不需要进行序列化和反序列化,因为在操作系统层面这些数据就是二进制流。将发送缓冲区里的数据就是有效载荷,将发送缓冲区里的数据加上结构体报头,就构成了UDP报文。

五、UDP报文的特点

无链接、不可靠、面向数据报。
无连接:在应用层写基于udp的代码时,创建套接字,bind传输层的端口,不需要先建立连接,没有listen监听,客户端不需要connect,直接发数据。
不可靠:不保证数据的顺序性,完整性,没有确认机制,没有超时重传机制,没有流量控制和拥塞控制。
面向数据报:在传输层不会将应用层的报文切分(在报文长度不超过UDP最大限制的情况下),而是将整应用报文加上UDP报头向下交付给网络层进行传输。

六、如何满足全双工通信

对于TCP客户端和服务端需要有两对接受缓冲区和发送缓冲区。
在这里插入图片描述
服务端发送数据:将数据按应用层协议封装发送到传输层的发送缓冲区,由操作系统内核根据网络状况决定什么时候将发送缓冲区的数据发送出去。数据从发送缓冲区发送,增加tcp报头,构成tcp报文,经过网络协议栈到达物理层网卡,将数字信号转为电信号发送到网络中。客服端网卡收到数据,将数据经过网络协议栈自底向上交付到传输层的,传输层将tcp报文解包,将报头和有效载荷分离,将有效载荷放到接受缓冲。客户端应用层再从接受缓冲区读取应用层报文。
客户端发送数据同理。
对于udp客户端和服务端,保证全双工只需要客户端的接受缓冲区和服务端的接受缓冲。不需要发送缓冲区,因为udp不需要保证可靠性,发送缓冲区储存数据,是为了当出现丢包需要重传时,从发送缓冲区找到丢失的数据进行重传,udp不可靠,不管丢包就无需重传,就不需要发送缓冲区。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

KkFileView4.1.0部署文档--linux

先看下官方文档:kkFileView - 在线文件预览 环境要求中的JDK8如果没有的,需先安装JDK8,这里不做展示。 第二个office相关环境要求在linux中会自动下载安装,不用管。 1、下载地址 Linux 或 MacOS 版: https://kkfil…

[论文笔记]An LLM Compiler for Parallel Function Calling

引言 今天带来一篇优化函数调用的论文笔记——An LLM Compiler for Parallel Function Calling。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 当前的函数(工具)调用方法通常需要对每个函数进行顺序推理和操作&…

基于JAVA的资源检索系统(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

展望:多模态融合与marker推断

技术进步使得利用高维、高通量、多尺度的生物医学数据从多个角度研究患者和疾病成为可能。在肿瘤学中,正在生成大量数据,从分子、组织病理学到临床记录。深度学习的引入极大地促进了生物医学数据的分析。然而,大多数方法都侧重于单一模态&…

AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型

1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展,越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中,从而显著提升运营效率和用户满意度。在这篇文章…

基于Java Springboot餐厅点餐系统(加入商家版)

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库:MySQL5.7…

NeRF在农业领域的应用-------------(1)

一、Exploring Accurate 3D Phenotyping in Greenhouse through Neural Radiance Fields(通过神经辐射场探索温室中精确的三维表型分析) 1.摘要 在精准农业中,准确收集植物表型对于优化可持续农业实践至关重要。 在受控实验室环境中进行的传…

pico-sdk(零)

pico-sdk(零) 项目概述license相关文档 依赖三方库链接 项目概述 Raspberry Pi Pico SDK(以下简称 SDK)提供了为 RP 系列微控制器设备(如 Raspberry Pi Pico 或 Raspberry Pi Pico 2)编写 C、C 或汇编语言…

基于java+SpringBoot+Vue的视频网站系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

vue注册全局组件,其他地方可以直接方便的调用

文章目录 问题注册全局组件完结 问题 本来我们想使用某个组件,需要在各个地方引入对应的参数,并配置好components内容,才可以使用 但是随着用的越来越多,这种方法变得重复且易出错 注册全局组件 修改main.js文件,放…

javaScript交互补充(元素的三大系列)

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等 获得元素距离带有定位祖先元素的位置获得元素自身的大小(宽度高度)注意:返回的数值都不…

基于SSM的特色美食推荐平台+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、店铺管理、美食类型、美食收录管理、论坛交流管理等)、普通用户(登录注册、论坛交流、信息查看、美食收藏、美食资讯等)技术栈&#xff1…

【javascript从零单排】变量let、var、const

🌈"It always seems impossible until it’s done." — Nelson Mandela 种一棵树最好是机会是十年前,其次是现在。 📗概念 在 JavaScript 中,变量是用于存储数据值的容器。可以使用变量来保存不同类型的数据&#xff0…

Marp for VScode插件 PPT无法预览的问题

优质好文:https://blog.csdn.net/lyuhaochina/article/details/141527208 这是因为很多人在VScode中安装markdown插件时都会安装插件Markdown Preview Enhanced,这个插件会和Marp插件的预览功能产生冲突,导致用Marp插件做的PPT无法预览 找到设置选项Markdown-previe…

响应时间指标的探索

响应时间指标的探索 最近又看到响应时间的一些讨论,就顺着这个响应时间的一些资料整理了如下内容 1968年 目前能够追溯的最早定义响应时间的文章应该是Rober B.Miller于1968年在AFIPS 68 (Fall, part I): Proceedings of the December 9-11, 1968, fall joint comp…

VRT: 关于视频修复的模型

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月15日14点34分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

从基础到进阶,Dockerfile 如何使用环境变量

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是 Dockerfile 环境变量?🔖1. `ENV` 指令🔖2. `ARG` 指令🔖语法:🔖使用 `ARG` 的例子:📝 如何使用环境变量提高 Dockerfile 的灵活性🔖1. 动态配置环境🔖2. 配置不同的运行环境🔖3. 多…

使用AI制作视频的一些感受

浦饭幽助真人灵丸 大家好,我是阿赵。 最近我开始用各种AI软件来制作一些视频,比如上次介绍的3D打印的黑龙波飞影的视频,就用了AI生成语音,还有一些换脸的视频。然后再比如上面这个浦饭幽助从漫画变成真人,然后再做出发…

从0开始创建Django项目-基础篇

文章目录 1、安装Django2、创建项目3、默认项目的介绍4、APP5、快速上手5.1 写一个页面5.2 templates模板5.3 静态文件5.3.1 static目录5.3.2 引用静态文件 6、模板语法7、请求和响应8、数据库操作8.1 安装第三方模块8.2 ORM8.3 案例:用户管理 1、安装Django pip install djan…

网络设备 - 这个有点难!

Linux 内核中的网络设备是整个网络通信的核心,它将硬件接口与内核的网络栈连接起来。对于许多初、中级学者而言,理解 Linux 网络设备的概念和工作机制可能显得复杂,但一旦掌握了这些内容,就能更深入地理解内核中的网络操作原理。本…