【网络】UDP协议——传输层、端口号、UDP协议、UDP协议端格式、UDP的特点、UDP的缓冲区、UDP使用注意事项

文章目录

  • Linux网络
    • [1. 传输层](#1. 传输层)
      • [1.1 端口号](#1.1 端口号)
      • [1.2 UDP协议](#1.2 UDP协议)
        • [1.2.1 UDP协议端格式](#1.2.1 UDP协议端格式)
        • [1.2.2 UDP的特点](#1.2.2 UDP的特点)
        • [1.2.3 UDP的缓冲区](#1.2.3 UDP的缓冲区)
        • [1.2.3 UDP使用注意事项](#1.2.3 UDP使用注意事项)
        • [1.2.5 基于UDP的应用层协议](#1.2.5 基于UDP的应用层协议)

Linux网络

1. 传输层

传输层:是 OSI 模型和 TCP/IP 模型中的重要层次,位于网络层之上、应用层之下。其主要职责是为不同进程之间提供端到端的(发送端到接收端)、可靠或不可靠的数据传输服务,实现复用和分用的功能,对网络层提供的服务进行增强。

传输层协议:常见的传输层协议有 TCP (传输控制协议)和 UDP(用户数据报协议)。

1.1 端口号

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

它是一个 16 位的整数,取值范围是 0 到 65535。端口号的作用是标识不同的应用程序或进程,使得网络中的数据能够准确地发送到目标应用程序。

**  端口号换分为三类:**

熟知端口号:范围是 0 到 1023,这些端口号被分配给一些常见的应用层协议和服务。例如,HTTP 协议使用 80 端口,FTP 协议使用 21 端口。

登记端口号:范围是 1024 到 49151,这些端口号通常被一些特定的用户进程或应用程序注册使用。

动态(私有)端口号:范围是 49152 到 65535,这类端口号通常由客户端程序在运行时随机选择使用。

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

**  认识知名端口号:**

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

ssh服务器, 使用22端口

ftp服务器, 使用21端口

telnet服务器, 使用23端口

http服务器, 使用80端口

https服务器, 使用443

执行下面的命令,可以看到知名端口号,我们自己写一个程序使用端口号时,要避开这些知名端口号。

bash 复制代码
cat /etc/services

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

一个进程可以 bind 多个端口号。 一个服务器进程可能同时提供多种服务,每种服务使用不同的端口号。

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

一个端口号在同一时刻不能被多个进程 bind 。这是为了避免端口冲突和数据混乱。但是要注意可能fork会导致父子进程绑定了同一个端口。

netstat

**  netstat是一个用来查看网络状态的重要工具**

**  语法:netstat [选项]**

**  功能:查看网络状态**

常用选项:

n 拒绝显示别名,能显示数字的全部转化成数字

l 仅列出有在 Listen (监听) 的服務状态

p 显示建立相关链接的程序名

t (tcp)仅显示tcp相关选项

u (udp)仅显示udp相关选项

a (all)显示所有选项,默认不显示LISTEN相关

pidof

在查看服务器的进程id时非常方便

语法:pidof [进程名]

功能:通过进程名,查看进程id

1.2 UDP协议

UDP 协议(用户数据报协议)UDP 是一种无连接、不可靠的传输层协议。

1.2.1 UDP协议端格式

UDP 协议的端格式由以下几个部分组成:

源端口(Source Port):16 位字段,标识发送方进程所使用的端口号。

目的端口(Destination Port):16 位字段,标识接收方进程所使用的端口号。

长度(Length):16 位字段,指示包括 UDP 头部和数据在内的整个用户数据报的长度,单位为字节。

校验和(Checksum):16 位字段,用于检测整个 UDP 数据报在传输过程中是否出现错误

1.2.2 UDP的特点

**  UDP传输的过程类似于寄信。**

无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。

不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

面向数据报:UDP 把数据当作一个个独立的数据报进行处理,不能够灵活的控制读写数据的次数和数量。

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

用UDP传输100个字节的数据:

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

1.2.3 UDP的缓冲区

UDP 具有接收缓冲区和发送缓冲区。

发送缓冲区:

实际上 UDP 没有真正意义上的发送缓冲区。当应用程序调用 sendto 函数发送数据时,UDP 只是简单地给数据加上头部,然后立即传递给网络层进行发送。

但是,内核会把数据暂时保存一段时间,以等待是否有来自对端的应答,这段时间内数据会被保存在一个类似于缓冲区的地方。

接收缓冲区:

接收缓冲区的大小有限,如果收到的数据报超出了缓冲区的大小,多余的数据将会被丢弃。

由于 UDP 是无连接不可靠的协议,接收方应用程序未及时读取缓冲区中的数据时,新到达的数据可能会覆盖旧的数据。

UDP的socket既能读,也能写,这个概念叫做全双工

1.2.3 UDP使用注意事项

数据大小限制:UDP 能传输的数据最大长度为 64K(包含首部)。若数据超过此限制,必须在应用层进行分包处理,这增加了应用程序的复杂性,且分包与重组过程可能出错。例如,一个图像编辑软件通过网络传输大型图片文件,就需要在应用层将图片数据合理分包发送。

缺乏拥塞控制:UDP 不会根据网络拥塞状况调整发送速率,可能导致网络拥塞加剧,影响其他网络应用的性能。比如在网络繁忙时,大量使用 UDP 的应用持续高速发送数据,可能导致整体网络速度下降。

不可靠性:没有确认和重传机制,数据丢失或出错难以恢复,对于重要数据可能造成严重后果。像远程医疗系统中关键的患者监测数据,若使用 UDP 传输且丢失,可能危及患者生命。

无序到达:数据包可能无序到达接收端,应用程序需要有处理乱序的能力。例如实时互动游戏中,玩家操作指令的数据包到达顺序可能混乱,需要游戏程序进行排序处理。

端口管理:要确保所使用的端口未被其他程序占用,避免端口冲突导致通信失败。假设一个新开发的网络应用选择了常用的 80 端口,而此端口已被 Web 服务占用,就会出现冲突。

安全问题:UDP 本身提供的安全性较低,数据容易被篡改或窃取。在涉及敏感信息传输时,如密码或个人身份信息,单纯使用 UDP 存在较大风险。

兼容性:不同的网络设备和系统对 UDP 的处理方式可能略有差异,需要进行充分的测试以确保兼容性。某些老旧的网络设备可能对较大的 UDP 数据包处理不佳。

1.2.5 基于UDP的应用层协议

NFS: 网络文件系统

TFTP: 简单文件传输协议

DHCP: 动态主机配置协议

BOOTP: 启动协议(用于无盘设备启动)

DNS: 域名解析协议

还包括我们自己写UDP程序时自定义的应用层协议

相关推荐
Tassel_YUE1 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
方方怪3 小时前
与IP网络规划相关的知识点
服务器·网络·tcp/ip
weixin_442643424 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川4 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
阿尔帕兹4 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
FeelTouch Labs5 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
千天夜6 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
长弓三石7 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙