UDP协议

2023-09-17 22:50:36

本篇介绍

再谈端口号,并补充信息

介绍netsta&pidof两个新指令


UDP协议

UDP协议格式

理解报头是什么


UDP特点介绍

那些应用层协议基于UDP

全双工概率补充

在前面已经完成了应用层的基本内容,现在进入传输层

传输层

负责数据能够从发送端传输接收端.解决通信问题
 

端口号

补充1:再谈端口号
 

端口号(Port)标识了一个主机上进行通信的不同的应用程序;
 

在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看)
 

        这里的通过端口号来标识不同的通信体现在:当你访问同一个网站,开两个窗口,这时候服务器无法通过源IP来区别,但是它可以通过源端口号(在进行网络通信的时候需要绑定源端口号,这一点在定制简单的网络服务器讲过)来区别,上图中的6指的是协议号,后续再介绍

补充2:端口号范围划分
 

端口号在传输层

0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.


1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的

这一点体现在我们在绑定端口号的时候,会发现有些端口号是无法被绑定的

补充3:认识知名端口号(Well-Know Port Number)
 

        有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:

ssh服务器, 使用22端口
ftp服务器, 使用21端口
telnet服务器, 使用23端口
http服务器, 使用80端口
https服务器, 使用443

执行下面的命令, 可以看到知名端口号
cat /etc/services

我们自己写一个程序使用端口号时, 要避开这些知名端口号
 

两个问题
 

1. 一个进程是否可以bind多个端口号?
2. 一个端口号是否可以被多个进程bind?

新指令

netsta

netstat是一个用来查看网络状态的重要工具
语法: netstat [选项]
功能:查看网络状态

常用选项:
n 拒绝显示别名,能显示数字的全部转化成数字
l 仅列出有在 Listen (监听) 的服务状态
p 显示建立相关链接的程序名
t (tcp)仅显示tcp相关选项
u (udp)仅显示udp相关选项
a (all)显示所有选项,默认不显示LISTEN相关

Recv-Q Send-Q 接收与发送了多少报文,不过这里通常立马就被处理了,所以这里看不到

local Address 本地地址

Foreign Address 对方地址

pidof
 

在查看服务器的进程id时非常方便.
语法: pidof [进程名]
功能:通过进程名, 查看进程id
 

UDP协议
 

无论学习网络协议中的哪一层协议,都需要回答这两个问题 

UDP协议端格式
 

为什么都是16位:因为操作系统的内核是16位,这是在进行统一

16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度;


检验和:如果校验和出错, 就会直接丢弃

        这里的数据指的就是从应用层传过来的数据,在传输层添加了上述的报头,这就是传输层对应用层数据进行的封装操作

理解报头是什么东西

位段就是这样的,两者都是一样的

UDP的特点

UDP传输的过程类似于寄信(直接发送,不需要考虑对方状态).


无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息,不做任何防止传输错误的行为,只需要把数据发送到下层协议它的工作就完成了;
面向数据报: 不能够灵活的控制读写数据的次数和数量,它发送几个对方就会收到几个数据报(不考虑丢包),发送几次,对面就要接收几次,对方要么不读,一旦读取就一定是一个完整的独立的数据报;

面向数据报
 

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;


用UDP传输100个字节的数据:
如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节;

 

UDP的缓冲区
 

UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;


UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
UDP的socket既能读, 也能写, 这个概念叫做
全双工

UDP使用注意事项
 

我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).
然而64K在当今的互联网环境下, 是一个非常小的数字.
如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装,也就是说需要手动去分割,再发送;

 

基于UDP的应用层协议

NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
DNS: 域名解析协议

DNS:


当然, 也包括你自己写UDP程序时自定义的应用层协议;
 

补充4:全双工

UDP协议完了!其实主要是UDP并没有很多的处理行为,后续的TCP协议才是重头戏

下文预告:TCP协议​​​​​​​

更多推荐

数据融合的并行计算

1、数据融合的算法数据融合的算法当中,需要对每一个格点i进行逐个计算,公式如下2、出现的问题但是随着背景场的空间分辨率的提高,格点数急剧增加。如空间分辨率为0.01°的话,那么15°✖15°的空间范围内就有1500✖1500个格点。那么在进行逐个格点计算的过程中,就非常耗时间。3、编程我先按照逐点计算并赋值给DataA

布隆过滤器(Bloom Filter)

一,布隆过滤器介绍布隆过滤器(BloomFilter)是一个很长的二进制向量(位图BitMap)和一系列随机映射函数(Hash函数)。它是一种数据结构,可以判断一个元素一定不在集合中或可能存在于集合中。优点:相比于传统的list、set、map等数据结构,它更高效、占用空间更少。缺点:存在误判率二,布隆过滤器原理布隆过

如何保护人工智能隐私?

本文旨在帮助这些消费者建立有关人工智能隐私功能的更深入的知识库。此外,它还为企业主和领导者提供了指南,帮助他们更好地了解客户的担忧,以及如何在不牺牲功能的情况下保护隐私的方式使用人工智能。尽管企业和消费者都对人工智能改变日常生活的潜力感到兴奋,但人工智能的广泛使用所带来的隐私问题仍是一个主要问题。显然,随着越来越多的个

2023上海工博会,正运动展位现场直击(二)

9月21日,上海工博会已经成功开展了2天,热度仍旧不减,正运动技术展位6.1H-E261不仅吸引了大量工业自动化专业人士,而且也为他们呈现了一系列令人印象深刻的产品和运动控制解决方案。其中,高性能软硬件产品引发了广泛关注。一、活动现场产品宣讲活动也成为展位上的一大亮点,正运动技术的产品工程师团队分享了最新的运动控制解决

制作游戏demo的心得

制作这个游戏demo出来的心得制作游戏demo的心得制作游戏demo,主要是为了表现自己的技术,那就一门心思想着如何提高表现力就行了,在整体的画面渲染风格方面或许没有什么可选择的,市面上资料最多最成熟的只有卡通渲染,shader自己写要写的东西太多,不如不写,写了也没别人的好看,用什么模型就用什么模型的shader,地

【从0学习Solidity】 16. 函数重载

【从0学习Solidity】16.函数重载博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!本文收录于不写代码没饭吃的学习汇报系列,大家有兴趣

android AudioRecord

AudioRecord是Android中用于音频录制的类,它的主要作用是捕获来自设备麦克风或其他音频源的音频数据,并将其保存为PCM格式的音频流,以供后续处理或存储。以下是关于AudioRecord的一些常见用途和基本使用方法:作用和用途:音频录制:AudioRecord可以用于录制来自麦克风、耳机麦克风或其他音频输入

安卓机型-MTK芯片掉串码 掉基带 如何用工具进行修复 改写参数

在早期MTK芯片机型中较多使用APBP方式来修复mtk芯片机型的串码。目前MTK机型对于丢基带掉串码问题大都使用MODEMMETA工具来进行修复串码或者改写参数。今天以一款mtk芯片机型来做个演示,高通芯片类的可以参考;高通改串相关工具仅支持在联发科芯片组上运行的设备,无论是智能手机还是平板电脑。它不适用于联发科以外的

vue模板语法(上集)

为什么要用Vue模板语法Vue模板语法是Vue.js框架的一部分,使用它有以下几个优点:简化了HTML代码编写:Vue模板语法支持简化HTML标签和属性的写法,使得代码更加简洁易读,提高开发效率。数据绑定:Vue模板语法支持数据双向绑定,可以将数据自动更新到对应的DOM元素,从而避免了手动操作DOM的麻烦。条件渲染:V

为Electron-log 设置日志颜色

使用Electron-log为你的Electron应用添加日志颜色在Electron应用中,有效的日志记录是一项不可或缺的任务,它可以帮助你跟踪应用程序的运行状况、调试问题以及监视用户体验。为了提高日志的可读性,你可以使用Electron-log以及Node.js中的Chalk模块来为不同的日志级别添加颜色和样式。安装

浅谈建筑能耗智能监测平台发展现状及未来趋势

安科瑞华楠摘要:文章以每年发布的上海市国家机关办公建筑和大型公共建筑能耗监测及分析报告变化为切入点,分析了历年能耗分析报告的内容和功能变化;介绍了上海市国家机关办公建筑和大型公共建筑能耗监测平台发展和应用历程;揭示了当下显现的问题,并以问题为导向,预测了未来发展的趋势。关键词:国家机关办公建筑和大型公共建筑;能耗监测;

热文推荐