传输层协议UDP

目录

[一. 传输层](#一. 传输层)

[1. 端口号](#1. 端口号)

端口号划分

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

[2. 查询命令](#2. 查询命令)

[二. UDP协议](#二. UDP协议)

[1. UDP协议端格式](#1. UDP协议端格式)

UDP如何将报头与有效载荷分离

UDP数据封装

[2. UDP特点](#2. UDP特点)

[3. 面向数据报](#3. 面向数据报)

[4. UDP缓冲区](#4. UDP缓冲区)

[5. UDP常用处](#5. UDP常用处)


一. 传输层

1. 端口号

在我们的电脑中运行着许多的程序,计算机会为每一个程序配备一个端口号。主机从网络中接收到数据时,会先自下而上的进行传输传输层处理数据时通过识别端口号来判断数据是传送给哪个程序的。

传输的五大元素由,源端口,源IP,目的端口,目的IP,协议号组成。源IP目的IP确定了需要传输的两台主机,源端口目的端口确定了哪两个程序之间的数据传递,协议号决定了传输协议是采用UDP还是TCP处理数据。

端口号划分

端口号长度是16位,因此端口号的范围就是 0~2^16

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

ssh服务器,22端口

ftp服务器,21端口

telnet服务器,23端口

http服务器,80端口

https服务器,443端口

1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号


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

一个进程往往包含许多的功能,需要进行多份协议的传输,因此一个进程可以bind多个端口号。一个进程可以打开多个文件描述符,每个文件描述符都对应一个端口号。

2. 查询命令

cat /etc/services

可以查看文件知名端口号

我们使用端口号时要避开这些端口号

netstat

查看网络状态

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

l:仅列出有在listen的服务状态

t:仅显示tcp选项

u:仅显示udp相关选项

a:显示所有选项

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

pidof

查看服务器进程id

语法:pidof 进程名

二. UDP协议

1. UDP协议端格式

UDP协议是传输层协议,系统通过网络套接字将应用层和传输层进行连接,socket规定传输层传输格式,随后进行bind绑定端口和IP

我们先前学习了应用层,应用层主要是处理实际的数据进行打包,完成打包之后到了传输层会制定相应的传输形式,此处我们介绍面向数据报的UDP协议。

16位源端口号:确定了数据发送的起始端口

16位目的端口号:确定了数据发送的终点端口

16位UDP长度:定义了整个UDP数据报的长度(首部+数据)

16为UDP检验和:判断传输过程中是否发生错误


UDP如何将报头与有效载荷分离

UDP报头固定8字节,在每次读取的时候读取8字节即可,剩下的就是有效载荷,这样就完成了报头与有效载荷分离


UDP数据封装

传输层在接受到应用层的数据后(应用层数据),对应用层数据添加报头进行封装(8字节报头),最终形成数据报(报头+应用层数据)

2. UDP特点

无连接:不需要建立连接,只需要知道目的端口和IP就可以传输

不可靠:没有确认机制,不会进行握手操作,若数据丢失,也没有重传机制

面向数据报:发送只能以一份一份数据报进行发送,接收只能一份一份数据报进行接收,且有最大受限大小。

3. 面向数据报

面向数据报形式不可拆分合并数据。发送方一次性sendto 100个字节的数据,那么接收放也需要一次性接收100 字节的数据

4. UDP缓冲区

UDP没有发送缓冲区,只有接收缓冲区。缓冲区接收发送方数据,不能保证接收的顺序和发送的顺序一致,若缓冲区满了会自动丢弃数据。因此通常会给数据添加编号,进行编号排序,接收到数据后重新编排。

5. UDP常用处

UDP是一种数据量小,数据传输快,传输成本低的协议。通常使用在直播,游戏数据实时传输这类可以允许少量数据损失,对速度要求快的场景

相关推荐
徐子元竟然被占了!!1 天前
Linux-systemctl
linux·数据库·oracle
_w_z_j_1 天前
Linux----mmap
linux
程序员zgh1 天前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++
IT·小灰灰1 天前
告别“翻墙“烦恼:DMXAPI让Gemini-3-pro-thinking调用快如闪电
网络·人工智能·python·深度学习·云计算
Bigan(安)1 天前
【奶茶Beta专项】【LVGL9.4源码分析】09-core-obj_class对象类系统
linux·c语言·mcu·arm·unix
任子菲阳1 天前
学Java第五十六天——网络编程
网络
紫郢剑侠1 天前
飞秋@Windows +iptux@Linux,打造内网跨平台IM环境
linux·运维·服务器·im·qq
保持低旋律节奏1 天前
linux——调试
linux·运维·服务器
牛奶咖啡131 天前
Linux系统故障排查思路实践教程(下)
linux·运维·服务器·su命令切换用户问题解决·文件打开过多问题解决·linux网络故障问题解决·linux故障排查思路
程序员zgh1 天前
常用通信协议介绍(CAN、RS232、RS485、IIC、SPI、TCP/IP)
c语言·网络·c++