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

传输层协议之UDP

首先,我们大概对传输层协议是有一定的了解的,而对于传输层协议UDP和TCP,显然后者更难学懂,所以我们先通过UDP来暂时先浅尝一口传输层,下面我们先补充下端口的内容再深入UDP.


一.Port详细

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

一台主机的端口从0~65535:

0-1023:是知名端口号,例如HTTP是默认为80端口,HTTPS是默认为443端口,FTP是默认为21,SSH默认为22号端口

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

对于知名端口,如果是我们自己写的相关程序是要避开这些端口的,可以绑定OS动态分配的端口

在 TCP/IP 协议中, 用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信,知道这个对于我们后续UDP学习非常重要

下面我们来解决一些特别有意思的问题:

一个进程是否可以 bind 多个端口号?
显然,一个进程是可以绑定多个端口的,我们知道一个进程可以打开多个文件描述符,而一个描述符对应一个端口,也就是说一个进程就可以绑定多个端口。

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

一般来说一个端口号只能被一个进程绑定,但是在特俗情况下一个端口是可以被多个进程绑定的,例如:父进程绑定一个端口号,而子进程是也可以绑定该端口号。



二.UDP协议

下面我们来看看UDP报文格式:

16 位 UDP 长度, 表示整个数据报(UDP 首部+UDP 数据)的最大长度
如果校验和出错, 就会直接丢弃,至于检验和是如何检验的,大家可以自行去了解下,这个不太重要

 

下面我们再来看看UDP的特点:

无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方,UDP 协议层也不会给应用层返回任何错误信息;
面向数据报: 不能够灵活的控制读写数据的次数和数量

 

UDP传输方式:

应用层交给 UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并;
用 UDP 传输 100 个字节的数据:
如果发送端调用一次 sendto, 发送 100 个字节, 那么接收端也必须调用对应的一次 recvfrom, 接收 100 个字节; 而不能循环调用 10 次 recvfrom, 每次接收 10 个字节;
UDP 没有真正意义上的 发送缓冲区. 调用 sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致; 如果缓冲区满了, 再到达的 UDP 数据就会被丢弃;
UDP 的 socket 既能读, 也能写, 这个概念叫做 全双工

 

补充知识:

由于UDP的长度限制到64K(包含首部),所以如果文件大小超过64K,就需要我们手动分包和拼装了



UDP可以说是传输层中对比与TCP相对较为简单的一种协议了,内容其实并不多,大家一学就会了,后面我们讲到TCP时大家对UDP可能对此就会有更加深入的了解了。

最后,感谢大家的支持!!!


http://www.kler.cn/a/375454.html

相关文章:

  • Android使用timer和thread实现定时器
  • xlrd.biffh.XLRDError: Excel xlsx file; not supported
  • 【大数据学习 | kafka】producer端的回调和ack
  • ceph补充介绍
  • wsl2.0(windows linux子系统)使用流程
  • 利索能及 —— 免费且高效的全球专利检索与分析平台
  • 调试EKF的MATLAB代码的关键点
  • 智能交通的未来:深度学习如何改变车辆检测游戏规则
  • 抓取和分析JSON数据:使用Python构建数据处理管道
  • 从一个双向链表中移除一个链表
  • 掌握AI Prompt的艺术:如何有效引导智能助手
  • Ubuntu 命令行教程介绍
  • 什么是制造项目管理?
  • shodan进阶-实战案例
  • 【Hive sql 面试题】统计每个成绩段人数(数据格式为 json),两种导入数据格式 + 两种解决方案
  • 深度学习之权重、偏差
  • mongodb指定引擎并设置内存使用大小
  • 微服务实战系列之玩转Docker(十七)
  • 人工智能基础 opencv
  • 【Orange Pi 5 Linux 5.x 内核编程】-等待队列(WaitQueue)
  • 0xGame 2024 [Week 4] Jenkins
  • 英伟达 GPU 架构:演进与模型推理速度的深度关联
  • 真题与解析 202109二级 青少年软件编程(Python)考级
  • echarts柱状图 x轴显示不完文字的处理方法和有些指标默认不显示的问题
  • 浅谈网络安全
  • Php实现钉钉OA一级审批,二级审批