【在Linux世界中追寻伟大的One Piece】传输层协议UDP

目录

[1 -> 传输层](#1 -> 传输层)

[2 -> 端口号](#2 -> 端口号)

[2.1 -> 端口号范围划分](#2.1 -> 端口号范围划分)

[2.2 -> 知名端口号](#2.2 -> 知名端口号)

[3 -> UDP协议](#3 -> UDP协议)

[3.1 -> UDP协议端格式](#3.1 -> UDP协议端格式)

[3.2 -> UDP的特点](#3.2 -> UDP的特点)

[3.2.1 -> 面向数据报](#3.2.1 -> 面向数据报)

[3.3 -> UDP的缓冲区](#3.3 -> UDP的缓冲区)

[3.4 -> UDP使用注意事项](#3.4 -> UDP使用注意事项)

[3.5 -> 基于UDP的应用层协议](#3.5 -> 基于UDP的应用层协议)


1 -> 传输层

传输层是计算机网络OSI模型中的第四层,它负责在网络中的两个节点之间提供端到端的数据传输服务。传输层的主要任务包括分段与重组、端口标识、连接控制(面向连接的TCP和无连接的UDP)、流量控制和差错检测与处理等,以确保数据的可靠、有序和高效传输。

简单来说,就是负责数据能够从发送端传输接收端

2 -> 端口号

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

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

2.1 -> 端口号范围划分

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

2.2 -> 知名端口号

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

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

执行下面的命令, 可以看到知名端口号。

cat /etc/services

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

3 -> UDP协议

UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种简单的面向报文的数据传输服务。

UDP不保证数据包的可靠交付、顺序或数据完整性,它不进行拥塞控制,也不需要在传输数据前建立连接。

UDP的头部开销较小,只有8字节,包括源端口、目的端口、长度和校验和字段。

由于其简单性,UDP适用于对实时性要求高的应用,如在线游戏、语音视频通信和某些类型的网络广播。

3.1 -> UDP协议端格式

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度。
  • 如果校验出错,就会直接丢弃。

3.2 -> UDP的特点

UDP传输的过程类似于寄信。

  • **无连接:**知道对端的IP和端口号就直接进行传输,不需要建立连接。
  • **不可靠:**没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。
  • **面向数据报:**不能够灵活的控制读写数据的次数和数量。
  • **简单高效:**UDP头部开销小,只有8字节,适合快速传输数据,尤其是对实时性要求高的应用。
  • **支持广播和多播:**UDP可以实现单播、广播和多播通信,适合发送数据到多个目的地。
  • **无流量控制:**UDP不提供流量控制功能,可能在网络拥塞时导致数据包丢失或传输延迟增加。
  • **适用场景:**UDP适用于实时音视频通话、在线游戏、DNS查询等对实时性要求较高的应用。

3.2.1 -> 面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

用UDP传输100个字节的数据:

如果发送端调用一次sendto,发送100个字节,那么接收端也必须调用对应的一次recvfrom,接收100个字节;而不能循环调用10次recvfrom。每次接收10个字节。

3.3 -> UDP的缓冲区

  • UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
  • UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP的socket既能读,也能写,这个概念叫做全双工

3.4 -> UDP使用注意事项

我们注意到,UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

然而64K在当今的互联网环境下,是一个非常小的数字。

如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

3.5 -> 基于UDP的应用层协议

  • NFS(Network File System**)**:网络文件系统。
  • TFTP(Trivial File Transfer Protocol**)**:简单文件传输协议。
  • DHCP:动态主机配置协议。
  • BOOTP:启动协议(用于无盘设备启动)。
  • DNS(Domain Name System**)**:域名解析协议。
  • SNMP(Simple Network Management Protocol):用于网络设备和应用程序的管理,可以使用UDP作为传输层协议。
  • RIP(Routing Information Protocol):一种路由协议,基于距离矢量算法,使用UDP进行信息交换。
  • QUIC(Quick UDP Internet Connection):由谷歌开发的传输层协议,基于UDP,旨在减少连接延迟,提供安全和可靠的连接。
  • UDT(UDP-based Data Transfer Protocol):一种面向连接的双向应用层协议,建立在UDP之上,支持高速数据传输和可靠性控制。

当然,也包括你自己写UDP程序时自定义的应用层协议。


感谢各位大佬支持!!!

互三啦!!!

相关推荐
段ヤシ.3 分钟前
银河麒麟(内核CentOS8)安装rbenv、ruby2.6.5和rails5.2.6
linux·centos·银河麒麟·rbenv·ruby2.6.5·rails 5.2.6
深夜情感老师2 小时前
centos离线安装ssh
linux·centos·ssh
EasyDSS2 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
rufeike2 小时前
UDP协议理解
网络·网络协议·udp
GKoSon4 小时前
加入RPC shell指令 温箱长时间监控
网络·网络协议·rpc
夸克App4 小时前
实现营销投放全流程自动化 超级汇川推出信息流智能投放产品“AI智投“
运维·人工智能·自动化
Rainbond云原生4 小时前
83k Star!n8n 让 AI 驱动的工作流自动化触手可及
运维·人工智能·自动化
木觞清4 小时前
深度对比评测:n8n vs Coze(扣子) vs Dify - 自动化工作流工具全解析
运维·自动化
hgdlip5 小时前
关闭IP属地显示会影响账号的正常使用吗
网络·网络协议·tcp/ip·ip属地
中云时代-防御可测试-小余5 小时前
高防IP是如何防护DDoS攻击和CC攻击的
运维·服务器·tcp/ip·安全·阿里云·ddos·宽度优先