网络练级宝典-> UDP传输层协议

news2024/12/23 13:22:59

目录

传输层

端口号

 端口号和进程的关系

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

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

相关文章

Ubuntu22.04系统源码编译OpenCV 4.10.0(包含opencv_contrib)

因项目需要使用不同版本的OpenCV,而本地的Ubuntu22.04系统装了ROS2自带OpenCV 4.5.4的版本,于是编译一个OpenCV 4.10.0(带opencv_contrib)版本,给特定的项目使用,这就不用换个设备后重新安装OpenCV 了&…

获取联通光猫的管理员密码

缘起:联通给免费更换了一个新的光猫,烽火的光路由,一个WAN口,4个LAN口,带USB接口,欣欣然接受。但是呢,发现以前的管理员密码CUAdmin不能用了。经过一系列查询,借助别人的经验&#x…

残差网络连接,使得输入与输出的尺寸一样

def forward(self, x):out self.layer1(x)out self.layer2(out)# 使用插值将输入x上采样至与layer2输出相同的尺寸x F.interpolate(x, size(out.size(2), out.size(3)), modebilinear, align_cornersFalse)# 确保x的通道数与out匹配x x[:, :out.size(1), :, :] # 选择前ou…

计算机网络原理之HTTP与HTTPS

一、前言 为了理解HTTP,我们有必要事先了解一下TCP/IP协议簇。 通常我们使用的网络(包括互联网)是在TCP/IP协议簇的基础上运作的。而HTTP属于它内部的一个子集。 计算机与网络设备要相互通信,双方必须基于相同的方法。比如&#…

实验三:Mybatis-动态 SQL

目录: 一 、实验目的: 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求: 预习 if、choose、 when、where 等标签的用法 三、实验内容: 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

NLP论文速读(斯坦福大学)|使用Tree将语法隐藏到Transformer语言模型中正则化

论文速读|Sneaking Syntax into Transformer Language Models with Tree Regularization 论文信息: 简介: 本文的背景是基于人类语言理解的组合性特征,即语言处理本质上是层次化的:语法规则将词级别的意义组合成更大的成分的意义&…

C++STL容器vector容器大小相关函数

目录 前言 主要参考 vector::size vector::max_size vector::resize vector::capacity vector::empty vector::reserve vector::shrink_to_fit 共勉 前言 本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型。 主要参考 cpluscplus.com 侯…

后端-编辑按钮的实现

编辑一共要实现两步: 1.点击编辑蹦出来一个弹窗,此时需要回显,根据id查出来这条数据 2.修改某些值之后点击保存的时候调用修改的接口 根据id查询的时候正常操作 修改值的时候要注意一些问题 mapper层的Employee和impl层的接收实体不一样

Spring Boot漫画之家:漫画爱好者的数字图书馆

2 系统开发环境 2.1 JAVA简介 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言,便于结构的分离&…

RISC-V 汇编语言

安装RISCV工具链 riscv-gnu-toolchain工具链和模拟器安装记录 - 知乎 (zhihu.com) riscv-gnu-toolchain工具链分elf-gcc、linux-gnu-gcc两个版本,以及对应的32位和64位版本。两个版本的主要区别是: riscv32-unknown-elf-gcc、riscv64-unknown-elf-gcc…

长沙市的科技查新机构有哪些

中南大学图书馆科技查新站: 中南大学图书馆科技查新站成立于2003年12月,中南大学图书馆科技查新站作为教育部首批批准的科技查新工作站之一,具备了在全国范围内开展科技查新工作的专业资质。 长沙理工大学科技查新工作站: 长沙理…

Spring Data Elasticsearch

简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端,本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里,如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …

【数字电路与逻辑设计】实验五 4人表决器

文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验五 4人表决器 一、实验内容二、设计过程(一)设置变量(二)真值表(三)表达式 三、源代码(一)代码说明&…

解决Tomcat运行时错误:“Address localhost:1099 is already in use”

目录 背景: 过程: 报错的原因: 解决的方法: 总结: 直接结束Java.exe进程: 使用neststat -aon | findstr 1099 命令: 选择建议: 背景: 准备运行Tomcat服务器调试项目时,程序下…

【C++】刷题强训(day13)--牛牛冲钻五、最长无重复字数组、重排字符串

目录 1、牛牛冲钻五 1. 题目 1.2 思路 1.3 代码实现 2、最长无重复子数组 2.1 题目 2.2 思路 2.3 程序实现 3、重排字符串 3.1 题目 3.2 思路 3.3 代码实现 刷题汇总:传送门! 1、牛牛冲钻五 1. 题目 1.2 思路 由题可知,赢一局则…

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

在做题中学习(78):数组中第K个最大元素

解法:快速选择算法 说明:堆排序也是经典解决topK问题的算法,但时间复杂度为:O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章,分别学习:数组分三块,随机选择基准…

学习记录,正则表达式, 隐式转换

正则表达式 \\:表示正则表达式 W: 表示一个非字(不是一个字,例如:空格,逗号,句号) W: 多个非字 基本组成部分 1.字符字面量: 普通字符:在正则表达式中,大…

加载内核映像文件

将kernel转换成elf文件格式,不能直接从loader直接跳转到0x100000,需要解析,提取出代码和数据出来,放到0x10000(64kb)的位置,1M的位置只是存放elf文件的位置。 4.10加载内核映像文件2 common/el…