当前位置: 首页 > ai >正文

【Linux网络】传输层协议UDP

 🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html

9efbcbc3d25747719da38c01b3fa9b4f.gif

目录

传输层

再谈端口号

端口号范围划分

认识知名端口号(Well-Know Port Number)

两个问题

UDP 协议

UDP 协议端格式

UDP 的特点

面向数据报

UDP 的缓冲区

 UDP 使用注意事项

基于 UDP 的应用层协议


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了Linux网络udp的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

传输层

负责数据能够从发送端传输接收端.

再谈端口号

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

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

端口号范围划分

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.
  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的

认识知名端口号(Well-Know Port Number)

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

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

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

两个问题

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

1.可以,一个服务器可以建立多个套接字,例如一个用来发送数据,一个用来发送控制命令。

2.不能,因为要保证端口号到服务进程的唯一性。

UDP 协议

UDP 协议端格式

  • 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: 域名解析协议 

http://www.xdnf.cn/news/7180.html

相关文章:

  • 大语言模型 13 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等
  • Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
  • 千问大模型部署
  • 数据结构-DAY06
  • uniapp 微信小程序 获取openId
  • VSCode 安装教程
  • gitlab迁移
  • 旧物回收小程序,一键解决旧物处理难题
  • 实战教程:影刀RPA采集闲鱼商品并分享钉钉
  • 文件夹如何打包成jar包
  • 部署java项目
  • 音视频之H.265/HEVC率失真优化
  • 使用excel 工具做数据清洗
  • 盲盒一番赏小程序系统发展:创新玩法激发市场活力
  • 使用 Whisper 生成视频字幕:从提取音频到批量处理
  • 【数据仓库面试题合集④】SQL 性能调优:面试高频场景 + 调优策略解析
  • java.io.IOException: Broken pipe \ 你的主机中的软件中止了一个已建立的连接
  • 树莓派python_can
  • HDMI 屏幕 电脑HDMI HDMI采集卡的关系
  • 2025年渗透测试面试题总结-各厂商二面试题02(题目+回答)
  • BGP local preference选路 AS-Path
  • 【网络编程】十二、两万字详解 IP协议
  • 仓颉开发语言入门教程:搭建开发环境
  • 路由器实战操作
  • React集成百度【JSAPI Three】教程(001):快速入门
  • 云原生环境下的事件驱动架构:理念、优势与落地实践
  • 【MySQL基础】MySQL基础:MySQL基本操作与架构
  • C++ 与 Python 内存分配策略对比
  • 一发入魂:极简解决 SwiftUI 复杂视图未能正确刷新的问题(下)
  • Grafana当前状态:SingleStat面板