计算机网络(八) —— Udp协议

目录

一,再谈端口号

1.1 端口号

1.2 netsta命令

二,UDP协议

2.1 关于UDP

2.2 Udp协议格式

2.3 Udp协议特点

2.4 Udp的缓冲区


一,再谈端口号

http协议本质是“请求 - 响应”形式的协议,但是应用层需要先将数据交给传输层,然后由传输层对数据做进一步处理后再将数据继续向下层交付,最终贯穿整个网络协议栈,最终就发送到了网络当中

传输层负责可靠性传输,确保数据能够可靠地传送到目标地址。

1.1 端口号

  • 在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样一个五元组来标识一个通信
  • 0 - 1023这些端口号被称为知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,它们的端口号都是固定的(ssh服务器是22端口,ffp是21,telnet是23,smtp邮件协议是25,mysql数据库是3306,这些都是常用的服务器,为了方便使用它们都用固定的端口号)
  • 1024 - 65535是操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个返回分配的

通过netstat命令可以查看到这样地五元组信息:

出了netstat命令,我们也可以查看 /etc/services 文件,查看网络服务名和它们对应使用地端口号和协议:

1.2 netsta命令

netstat命令

 这个我们上面已经用过了,是查看网络状态地重要命令,下面是选项介绍:

  • n:拒绝显示别名,能显示数字的全部转为数字
  • l:仅列出处于LISTEN监听状态的服务
  • p:显示建立相关链接的程序名
  • t:仅显示协议号为tcp相关的选项
  • u:仅显示协议号为udp相关的选项
  • a:显示所有选项,默认不显示LISTEN相关

我们查看Tcp相关网络信息时,一般用nltp;查看Udp时,一般用nlup

二,UDP协议

2.1 关于UDP

我们前面用的各种sock API,都是系统提供的,我们可以通过这些接口搭建上层应用,比如http就是基于Tcp的,因为http就是再Tcp套接字基础上搭建的

应用层往下就是传输层,也是属于操作系统的,所以也由操作系统管理,所以Udp是存在与内核中的,是操作系统的网络协议栈自带的,所以也就是说,Udp所有的功能由操作系统完成

2.2 Udp协议格式

下面是Udp协议报头的图形化:

  •  16位源端口号:表示数据从哪里来
  • 16位目的端口号:表示数据要去哪里
  • 16位UDP长度:表示整个数据报的长度(UDP首部 + UDP数据)
  • 16位UDP校验和:如果UDP报文的检验出错,就会直接将报文丢弃

我们之前就说过,学习任何协议,都要回答下面两个问题:

问题:UDP如何将报头和有效载荷分离?

解答:UDP采用的是定长报头,报头是操作系统加的,所以分离报头时就会简单很多

问题:UDP协议如何将有效载荷交付给上层哪一个协议?

解答: 应用层每一个网络进程都会绑定一个端口,服务器是绑定固定报头,客户端是绑定随机报头,所以UDP就是通过报头当中的“16为目的端口号”来找到对应的进程的,该操作是通过哈希的映射完成的

操作系统是C语言为底层语言,所以UDP协议也一定是用C语言写的,UDP报头实际就是一个位段类型,例如:

 

struct udp_struct
{uint32_t src_port:16;uint32_t dst_poet:16;uint32_t length:16;uint32_t check_code:16;
};
  • 这个东西我们在语言上叫做“位段”,在协议上叫做“UDP报头”,是自定义类型,是类型,可以定义变量,也可以new开辟空间(struct udp_header h;    h.src_port=1234;    h.dst=8888等等)

  • 然后操作系统里就存在着大量的UDP报文,先描述再组织,所以操作系统内是有着很多描述报文的结构体的,这个结构体叫做 sk_buff,所以操作系统在封装报文时,先定义一个缓冲区,然后把udp_struct里的东西拷贝进来

  • 然后再把用户要发送的数据拷贝进来,然后sk_buff里面的start指向缓冲区开头,end指向缓冲区结尾,然后我们对还没来得及发的UDP报文用sk_buff描述起来,然后把很多个sk_buff结构体用链表组织起来

  • 当接收缓冲区满了就丢弃UDP,也就是干掉对应的sk_buff然后释放掉udp_struct

  • 把报文往上下层交付,也就是把结构体叫做IP层对应的一套方法,然后对缓冲区的数据再做封装

关于位段可以看咱远古时期的一篇文章:C语言进阶——自定义类型_c语言自义类型-CSDN博客 

2.3 Udp协议特点

  • 无连接:知道目的IP和端口就行,直接进行传送,不需要建立连接
  • 不可靠:没有确认机制,也没有重传机制,如果因为网络问题导致数据没有完整发给对方,也不会有任何报错
  • 面向数据报:不够灵活的控制读写数据的次数和数量

面向数据报:应用层交给UDP多长的报文,UDP原样发送,不做任何的拆分和合并

比如用UDP传输100字节的数据:

  • 发送端调用sendto,发100个字节,那么接受端必须调用recvfrom一次接收100个,而不能调用10此recvfrom一次接收10个 

2.4 Udp的缓冲区

  • UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,然后再由内核将数据贯穿协议栈进行后续的传输动作
  • UDP具有接收缓冲区,但是一旦缓冲区满了,后续到达的UDP数据会直接丢弃
  • UDP的socket能读能写,所以UDP是全双工的

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

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

相关文章

pthread_cond_signal 和pthread_cond_wait

0、pthread_join()函数作用: pthread_join() 函数会一直阻塞调用它的线程,直至目标线程执行结束(接收到目标线程的返回值),阻塞状态才会解除。如果 pthread_join() 函数成功等到了目标线程执行结束(成功获取…

(Python) Structured Streaming读取Kafka源实时处理图像

Producer.py import cv2 from kafka import KafkaProducer import os import os.path as osp# Kafka 服务器地址 bootstrap_servers [xxx.xxx.xxx.xxx:9092] #terminal运行ifconfig可以查看localhost# 创建 Kafka 生产者 producer KafkaProducer(bootstrap_serversbootstrap…

什么是 GPT?通过图形化的方式来理解 Transformer 架构

Predict, sample, repeat 预测、取样、重复 GPT 是 Generative Pre-trained Transformer 的缩写。首个单词较为直接,它们是用来生成新文本的机器人。“Pre-trained” 指的是模型经历了从大量数据中学习的过程,这个词暗示了该模型还有进一步在特定任务中…

开关柜设备红外检测数据集

开关柜设备红外检测数据集 包含以下2个数据文件: /train:训练集 /valid:验证集 /test:测试集 README.txt:数据说明 【数据说明】检测目标以Pascal VOC格式进行标注,对每个图像进行以下预处理,统…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像,针对苹果 M 芯片 Mac 用户(ARM 架构)提供良好支持。Tiny11 内置了众多优化特性,如更小的安装体积和更快的启动速度,特别适合有特殊需求或老机型的用户。用户可…

华为HarmonyOS地图服务 7- 在地图上绘制标记

场景介绍 本章节将向您介绍如何在地图的指定位置添加标记以标识位置、商家、建筑等。 点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。Map Kit提供的点标记功能(又称 Marker)封装了大量的触发事件,例如点击事件、长按事件、…

基于YOLO算法的网球运动实时分析-击球速度测量-击球次数(附源码)

这个项目通过分析视频中的网球运动员来测量他们的速度、击球速度以及击球次数。该项目使用YOLO(You Only Look Once)算法来检测球员和网球,并利用卷积神经网络(CNNs)来提取球场的关键点。此实战项目非常适合提升您的机…

VsCode C语言 SDL包配置 2024.9

写这篇文章的起因是,最近我需要使用 SDL 包,我懒得下载V-studio ,所以直接在VsCode 里配置C环境。我搞了好几个小时,啥都弄好了,但是一直被下面几个问题缠绕导致demo启动不了,现在我记录一下这奇葩的解决过程。所有路径…

Qt Debugging帮助文档

Qt中给断点添加条件: 示例1: 当i10时,程序中断 但不知道为什么,46行的条件没有生效,47行的条件生效了 给断点添加忽略次数: 在程序停止之前忽略该断点200次。 Breakpoints (Debugging with GDB)

Apache Doris 实践

Apache Doris 实践 官方使用指南:https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …

华润电力最新校招社招润择认知能力测评:逻辑推理数字计算语言理解高分攻略

​ 尊敬的求职者们, 在您准备加入华润电力这个大家庭之前,了解其招聘测评的详细流程和要求是至关重要的。以下是我们为您整理的测评系统核心内容,希望对您的求职之旅有所帮助。 测评系统概览 华润电力的招聘测评系统旨在全面评估求职者的认…

机器学习04-逻辑回归(python)-02原理与损失函数

1. 逻辑回归概念 逻辑回归(Logistic Regression) 是一种 分类模型,主要用于解决 二分类问题(即分成两类,如是否通过、是否患病等)。逻辑回归的目标是根据输入的特征预测一个 概率,这个概率值介于…

计算机毕业设计hadoop+spark+hive新能源汽车销售数据分析系统 二手车销量分析 新能源汽车推荐系统 可视化大屏 汽车爬虫 机器学习

《HadoopSparkHive新能源汽车销售数据分析系统》开题报告 一、选题背景与意义 1.1 选题背景 随着全球对环境保护意识的增强和能源结构的转型,新能源汽车市场迅速崛起。新能源汽车的销售数据不仅反映了市场趋势和消费者偏好,还为企业决策、政府监管和政…

微服务——网关登录校验(一)

1.网关登录校验 微服务中的网关登录校验是微服务架构中常见的一种安全机制,用于在请求到达微服务之前,对用户的身份进行验证,确保只有合法的用户才能访问相应的服务。 在微服务架构中,每个微服务都是独立部署的,它们之…

(C++17) optional 的 3 种用法

文章目录 *️⃣前言*️⃣3 种主流用法1️⃣函数返回值2️⃣函数参数3️⃣类成员 ⭐END🌟跋🌟交流方式 *️⃣前言 在 C17 中标准化了 std::optional。该类型可以容纳一种类型,且判断是否有无。 若使用的标准在低于 C17 则可以使用 Abseil 的…

浅谈递推法

递推法 递推法是一种数学方法,用于通过利用已知的初始条件和递推关系来计算要求中的每一项。以数列来举例,在递推法中,它的思想很简单:我们首先知道数列的第一项(初始条件),然后通过一个规律&a…

GEE 数据集:人类造成的热带潮湿森林退化程度的估计

目录 简介 摘要 代码 结论 数据和代码 引用 网址推荐 0代码在线构建地图应用 机器学习 人类造成的热带潮湿森林退化程度超出了先前的估计 简介 选择性采伐、火灾和边缘效应造成的热带森林退化是碳和生物多样性损失的主要驱动因素1,2,3,其年增长率可与森林砍伐相媲美…

Golang | Leetcode Golang题解之第424题替换后的最长重复字符

题目: 题解: func characterReplacement(s string, k int) int {cnt : [26]int{}maxCnt, left : 0, 0for right, ch : range s {cnt[ch-A]maxCnt max(maxCnt, cnt[ch-A])if right-left1-maxCnt > k {cnt[s[left]-A]--left}}return len(s) - left }f…

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“ 1.题目 下方是力扣官方题目的地址 63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下…

【全网最全】2024年华为杯研赛A题成品论文获取入口(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 点击链接加入【2024华为杯研赛资料汇总】:https://qm.qq.com/q/hMgWngXvcQhttps://qm.qq.com/q/hMgWngXvcQ你是否在寻找数学建模比赛的突破点&am…