【Linux网络编程】6. 传输层协议 UDP

文章目录

一、传输层

  • 作用: 端到端通信,让数据从发送端的进程,准确送到接收端的对应进程。
  • 核心: 端口号,用来区分同一主机上的不同应用。
  • 两个核心协议:
    • UDP:无连接、不可靠、面向数据报,像寄信。
    • TCP:面向连接、可靠、面向字节流,像打电话。

总结: 传输层就是用 端口号 + 协议,把数据从 "哪个进程来" 送到 "哪个进程去"

二、再识端口号

端口号(Port)用来区分同一台主机上不同的应用程序,和 IP 一起决定数据发给谁。

1、五元组标识一条通信

源IP + 源端口 + 目的IP + 目的端口 + 协议号 (用 netstat -n 可以查看)

2、 端口号范围划分

  • 0-1023:知名端口 ,固定给常用服务:
    • SSH:22
    • FTP:21
    • HTTP:80
    • HTTPS:443
  • 1024-65535:动态端口,客户端程序由系统自动分配。

可以用指令查看端口号:cat /etc/services

3、两个常见问题

  • 一个进程可以绑定多个端口号
  • 一个端口号不能被多个进程同时绑定

三、UDP 协议

1、UDP 协议头(固定 8 字节)

  • 16 位源端口号: 标识发送方进程,数据从哪个端口来。
  • 16 位目的端口号: 标识接收方进程,数据要发到哪个端口去。
  • 16 位 UDP 长度: 表示整个 UDP 报文(首部 + 数据)的字节数,因此单个 UDP 报文最大只能是 64KB
  • 16 位校验和: 对 UDP 首部和数据进行校验,校验失败的报文会被直接丢弃。

2、UDP 特点(像寄信)

  • 无连接: 知道 IP + 端口直接发,不用握手
  • 不可靠: 没有确认、重传,丢包也不通知应用层
  • 面向数据报: 应用层发多少,UDP 就发多少,不拆包、不合并
  • 全双工: 同一个 socket 可以同时读和写

3、UDP 缓冲区

  • 无发送缓冲区:调用 sendto 直接交给内核
  • 有接收缓冲区:但不保证顺序,缓冲区满了会丢包

4、注意事项

  • 单个 UDP 报文最大长度 64KB(含首部)
  • 传输超过 64KB 的数据,需要应用层手动分包、拼装

5、基于 UDP 的常见协议

  • NFS: 网络文件系统
  • TFTP: 简单文件传输协议
  • DHCP: 动态主机配置协议
  • BOOTP: 启动协议(用于无盘设备启动)
  • DNS: 域名解析协议
相关推荐
志栋智能5 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化
专业机床数据采集5 小时前
C# 精雕数控 数据采集 Demo|实时读取精雕机床坐标、主轴、负载、加工工时全量参数
网络·网络协议·tcp/ip·mes·精雕数控数据采集
嵌入式小能手6 小时前
飞凌嵌入式ElfBoard-进程间的通信之命名管道
linux·服务器·算法
AOwhisky6 小时前
Ceph系列第六期:Ceph 文件系统(CephFS)精讲
linux·运维·网络·笔记·ceph
我爱C编程6 小时前
基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真
网络·matlab·ecc·密钥管理·无线传感器网络·簇内分组
Starry-sky(jing)7 小时前
# Linux 下 Qt 应用无障碍自动化:记一次wx无人值守系统的架构演进
linux·qt·自动化
荒--7 小时前
apt dpkg 命令详解
linux·服务器
Sagittarius_A*7 小时前
H3CSE 高性能园区网:园区网安全体系详解
网络·计算机网络·安全·h3cse
嵌入式小能手7 小时前
飞凌嵌入式ElfBoard-进程间的通信之信号的发送alarm
linux
用户2367829801689 小时前
Linux systemctl 服务管理命令:从 systemd 架构到实战技巧
linux