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

传输层协议UDP

目录

传输层

端口号

端口号范围划分

两个问题

1.一个进程能否绑定多个端口号?

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

UDP 协议​编辑

UDP 的特点

面向数据报

UDP 的缓冲区

UDP 使用注意事项


传输层

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

端口号

在TCP/IP协议中,使用源ip,目的ip,源端口,目的端口,协议号这样的五元组表示一个通信

端口号范围划分

0~1023:知名端口号,HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的

1024~65535:操作系统动态分配的端口号,客户端程序的端口号就是操作系统在这个范围里分配的

两个问题
 

1.一个进程能否绑定多个端口号?

答案是可以的,我们在前面的文章里说过端口号实际上锁定的是套接字(socket),我们可以创建多个socket,当然就可以让这些socket套接字绑定多个端口号。

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

答案是一般情况下是不可以的,但是我们可以手动设置,比如说我们在前面TCP编程里面写过setsockopt,这个函数就可以让我们的套接字修改为可重用端口号,当然,如果我们不指定的话就没办法绑定一个已经被别的套接字绑定过的端口号了,一旦我们指定了SO_REUSEPORT,那么这个套接字就可以绑定一个已经被绑定过的端口号了,我们在多个进程里都写这么一个套接字,那么我们就可以让多个进程绑定同一个端口号了。

当然了,端口号也是引用计数,套接字也是引用计数(因为表现上像个文件描述符,和文件描述符的引用计数方式一样)

UDP 协议

16 位 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, 就需要在应用层手动的分包, 多次发送, 并在接收端
手动拼装
 

http://www.lryc.cn/news/574357.html

相关文章:

  • 服务器中集群防御和单机防御分别是指什么?
  • (cvpr2025) DefMamba: Deformable Visual State Space Model
  • github常用插件
  • Java编程中的设计模式:单例模式的深度剖析
  • EEG分类攻略2-Welch 周期图
  • Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)
  • Spring Boot使用MCP服务器
  • Flask框架index.html里引用的本地的js和css或者图片
  • EEG分类 - Theta 频带 power
  • C++ Vector 基础入门操作
  • QML革命:下一代GUI开发的核心优势详解
  • 论文笔记:Answering POI-Recommendation Questions using TourismReviews
  • 单片机——浮点数转换4位数码管显示
  • 【笔记】在Cygwin上使用mintty连接wsl
  • 1.2、CAN总线帧格式
  • Apache SeaTunnel Flink引擎执行流程源码分析
  • DeepSeek今天喝什么随机奶茶推荐器
  • 如何利用Charles抓包工具提升API调试与性能优化
  • 组件化设计核心:接口与实现分离(C++)
  • 拼团系统多层限流架构详解
  • 《去哪儿网Redis高并发实战:从问题定位到架构升级》
  • 边缘-云协同智能视觉系统:实时计算与云端智能的融合架构
  • C++的前世今生-C++11
  • 《哈希表》K倍区间(解题报告)
  • go channel用法
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 8】【DeviceProperties介绍】
  • Netty内存池分层设计架构
  • 【大厂机试题解法笔记】高效货运
  • 互联网大数据求职面试:从Zookeeper到Flink的技术探讨
  • 跨越十年的C++演进:C++11新特性全解析