[TOC]
# udp(传输层)
******
UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是 OSI (Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是 UDP 的正式规范。UDP 在 IP 报文的协议号是 17。
UDP 协议全称是用户数据报协议,在网络中它与 TCP 协议一样用于处理数据包,是一种无连接的协议。在 OSI 模型中,在第四层------传输层,处于 IP 协议的上一层。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的 TCP (传输控制协议)协议一样,UDP 协议直接位于 IP (网际协议)协议的顶层。根据 OSI (开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。UDP 协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
<br />
## udp与tcp
udp 和 tcp 都属于传输层的协议,都位于 ip 协议的顶层,它们不同之处有:
* udp 是无连接协议,不需要进行 tcp 的握手
* udp 每次发送最大长度是 65535,而 tcp 在握手后可以源源不断的发送
* udp 协议使用报头中的检验值来保证数据的安全。检验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的检验计算值将不会相符,由此 UDP 协议可检测是否出错。这与TCP 协议是不同的,后者要求必须具有检验值。
* udp 报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为 udp 协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如 DNS、TFTP、SNMP等。
* 在网络质量令人十分不满意的环境下,UDP 协议数据包丢失会比较严重。而 tcp 会进行确认验证,确认对方接收成功。
* udp 可实现对网关内的所有主机进行广播。
<br />
## phper的udp
在 php 初级开发者中,是很少接触到 udp 协议的,常见的有 DNS 协议。
在我们输入一个域名时,会先请求到一个 dns 服务器,由 dns 服务器匹配出一个 ip 地址,然后通过 ip 地址去传输数据,在这个步骤中,请求 dns 服务器使用的就是 udp 协议。
<br />
## 其他
具体详细内容可自行搜索了解。
- 引言
- Introduction
- 运行模式
- php-fpm
- php-cli
- 基础介绍
- 网络协议
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 会话管理
- cookie
- session
- api/token
- linux基础
- lnmp安装
- 命令
- 进程管理
- 扩展安装
- 端口监控
- 防火墙说明
- php7.0
- 部分新特性
- php回调/闭包
- 回调事件
- 闭包/匿名函数
- php多进程
- 多进程开启
- 进程通信
- 进程信号
- 僵尸进程
- 孤儿进程
- 守护进程
- 同步/异步
- 阻塞/非阻塞
- 协程
- Swoole
- 初始Swoole
- 运行机制
- 生命周期
- composer使用
- EasySwoole
- 设计理念
- 组件说明
- 运行过程
- demo
- 提问的艺术