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

news2024/11/13 20:31:25

目录

一,再谈端口号

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.coloradmin.cn/o/2153269.html

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

相关文章

2024/9/21 408 20题

a b 58-130-180-199-42-15:c d a 184-182-187-176-19941 c d a a c b d c a c b c c c

12V转100V低压升高压DC/DC电源GRB12-100D-100mA-Uz(0-3V)

特点 ● 效率高达75%以上 ● 1*2英寸标准封装 ● 单电压输出 ● 超高性价比 ● 电压控制输出,输出电压随控制电压的变化而线性变压 ● 工作温度: -40℃~75℃ ● 阻燃封装,满足UL94-V0 要求 ● 温度特性好 ● 可直接焊在PCB 上 应用 GRB 系列模块电源是一…

深度学习笔记17_TensorFlow实现咖啡豆识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境:Python 3.9 2.编译器:Pycharm 3.深度学习环境:TensorFlow 2.10.0 二、GPU设置…

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…

Java反序列化利用链篇 | CC6链分析(通用版CC链)

文章目录 CC6和CC1之间的区别CC6的调用链构造CC6的payload完成TiedMapEntry.getValue()完成TiedMapEntry.hashCode()完成HashMap.hash()及HashMap.readObject()解决hash()方法提前触发的问题 系列篇其他文章,推荐顺序观看~ Java反序列化利用链篇 | JdbcRowSetImpl利…

LeetCode[中等] 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路:基于快排改进的快速…

【AI算法岗面试八股面经【超全整理】——深度学习】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习CVNLP 目录 1、激活函数2、Softmax函数及求导3、优化器 1、…

LED灯、蜂鸣器、继电器的控制

LED灯的控制 该专栏所有文章都默认使用STM32F103ZET6开发板 目录 LED灯的控制 一、简单的LED灯控制 1、初始化函数 led灯 2、应用函数 2、蜂鸣器 3、继电器 一、简单的LED灯控制 编程框架:初始化函数和应用函数 1、初始化函数 初始化函数一般包括&#xf…

【学术会议:中国厦门,为全球的计算机科学与管理科技研究者提供一个国际交流平台】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

您的学术研究值得被更多人看到! 在这里,我为您提供精准的会议推荐,包括计算机科学、管理科技、信息系统、人工智能、供应链管理等领域的国际会议。高效的稿件录用流程和优质的检索服务将确保您的研究成果迅速传播。关注我,寻找与…

Java免税商品优选商城:Spring Boot实战

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&#xff09…

[Matplotlib教程] 02 折线图、柱状图、散点图教程

基于MFCC和CNN的语音情感识别 2 折线图、柱状图、散点图2.1 折线图2.1.1 简单折线图2.1.1 线形和Markevery2.1.2 带误差棒的折线图2.1.3 区间填充和透明度 2.2 柱状图2.2.1 分组柱状图2.2.2 堆叠柱状图2.2.3 横向柱状图 2.3 散点图 我们的网站是 菜码编程,我们的q群…

解决Hive乱码问题

在插入数据后,发现hive乱码 原因:Hive默认将存储表结构的元数据列编码设置为latin1,不支持中文 解决方法:在MySQL中修改对应Hive元数据列的编码 先查看mysql的所有字符集编码 1、先修改my.cnf 代码如下: vim /etc/…

C++——初步认识C++和namespace的用法

1.编程语言排行榜 我们通过排行可以看出 C在变成语言中还是占据着重要的地位 2.C在工作领域中的应用 1.PC客户端开发。⼀般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话⼀般是C和 QT,QT 是⼀个跨平台的 C图形用户界面(G…

【解决】chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标

chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标 今天打开电脑的时候,网页中任何文本的地方,只要鼠标点击,就会出现一个输入的光标,无论在哪个站点哪个页面都是如此。 我知道…

Nature Communications|一种快速响应的智能可穿戴嗅觉接口(可穿戴电子/柔性电子/人机交互)

香港城市大学于欣格( Xinge Yu)、北京航空航天大学李宇航(Yuhang Li)、中国特种设备检验研究所赵召(Zhao Zhao)和东京大学Takao Someya团队,在《Nature Communications》上发布了一篇题为“Intelligent wearable olfactory interface for latency-free mixed reality and …

云盘视频保护神器,支持云盘视频加密与在线播放,配合alist使用,超完美!

平时我们保护视频,一般都是采用压缩工具,进行加密打包,然后在上传到网盘存储。这虽然能起到很好的保护,但是有很多问题?比如:无法直接在线播放,还得从网盘中下载后解压,才能进行观看…

【Python语言初识(一)】

一、python简史 1.1、python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调…

计算机人工智能前沿进展-大语言模型方向-2024-09-21

计算机人工智能前沿进展-大语言模型方向-2024-09-21 1. AIvril: AI-Driven RTL Generation With Verification In-The-Loop Authors: Mubashir ul Islam, Humza Sami, Pierre-Emmanuel Gaillardon, and Valerio Tenace AIVRIL: 人工智能驱动的RTL生成与验证内循环 摘要 本…

allWebPlugin中间件自定义alert、confirm及prompt使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

通信工程学习:什么是WLAN无线局域网

WLAN:无线局域网 WLAN(Wireless Local Area Network),即无线局域网,是一种利用无线技术实现局域网内设备间数据传输的网络系统。以下是对WLAN无线局域网的详细解释: 一、WLAN无线局域网的定义与概述 WLAN通…