Linux网络传输层协议UDP

传输层

传输层是计算机网络体系结构(如OSI模型或TCP/IP模型)中的核心层之一,位于网络层之上、应用层之下。其主要职责是为应用程序提供端到端的可靠或不可靠的数据传输服务,屏蔽底层网络细节(如路由、链路差异),确保数据在不同主机间的有效交付。

核心功能:

  1. 进程间通信

    通过端口号标识同一主机上的不同应用程序(如HTTP默认端口80),实现多应用共享网络资源。

  2. 数据传输控制

    • 可靠传输:如TCP协议通过确认应答、重传机制、流量控制和拥塞控制保障数据完整有序。
    • 不可靠传输:如UDP协议提供低延迟但无保障的传输,适用于实时视频或语音场景。
  3. 数据分段与重组

    将应用层的大数据块分割为适合网络层传输的段(Segment),并在接收端重组。

  4. 连接管理

    TCP通过三次握手建立连接、四次挥手释放连接,确保通信双方状态同步。

端口号

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

知名端口号,要绑定需要超级用户的权限(root):

• ssh 服务器, 使用 22 端口

• ftp 服务器, 使用 21 端口

• telnet 服务器, 使用 23 端口

• http 服务器, 使用 80 端口

• https 服务器, 使用 443

总之尽量避免绑定0-1023的端口号。

一个进程可以绑定多个端口号,但是一个端口号原则上不能绑定多个进程。

UDP协议

UDP报头一定是一个结构体。

UDP协议端格式

一个UDP完整报文,8字节后是报文。如果检验和出错,就会直接丢弃。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传过去后,对方就是用这个结构体接受二进制数据,进行二进制的序列化和反序列化,但是不推荐应用层协议这么写,因为客户端的设备不一样,编写语言不一样,大小端问题等会导致结构体大小不同。而内核没有业务,是个纯技术话题,没有引入其他字段,该多少是多少,双方操作系统都是C语言写的,标准化程度高,保证大小端就行。

基于UDP的应用层协议

• NFS: 网络文件系统

• TFTP: 简单文件传输协议

• DHCP: 动态主机配置协议

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

• DNS: 域名解析协议

OS对报文的管理

在OS内会有struct sk_buff来管理报文:

双向链表管理全部报文,head向前就是增加报头,head向后就是解包,将数据结构交给下一层就行。增加报头就是缓冲区中移动字段。

相关推荐
叼烟扛炮8 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
智慧光迅AINOPOL8 小时前
POF光电复合缆多业务承载原理
网络·安全·智能路由器
feng_you_ying_li8 小时前
linux之网络层
linux·运维·网络
步行cgn9 小时前
HTTP 请求报文结构详解:请求行、请求头、请求体各自的作用
网络·网络协议·http
未来之窗软件服务9 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
小雉系统9 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
thethefighter9 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
一只小鱼儿吖9 小时前
内网穿透技术全景:原理、安全与实践
网络·安全
用户8351414049499 小时前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
bj_bluewei_tech10 小时前
拯救者玩游戏掉帧卡顿,温度不高是什么原因?
网络·电脑·笔记本电脑·玩游戏