我是靠谱客的博主 孤独小虾米,最近开发中收集的这篇文章主要介绍UDP协议头数据传输,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原文链接

draveness

UDP协议头中包含四个字段:

  1. 源端口
  2. 目的端口
  3. 长度
  4. 校验码

每一个字段16比特 == 2字节,所以UDP协议头一共占8个字节

源端口

可选字段,表示发送方进程的端口,接收方可根据此字段(不一定准确)发送信息

目的端口

目的端口是数据接收方的端口号,它只在目标的IP地址下才有效

长度

长度是协议头和数据报中数据长度的总和,表示整个数据报的大小

校验码

校验码使用 IP 首部、UDP 首部和数据报中的数据进行计算,接收方可以通过校验码验证数据的准确性,发现传输过程中出现的问题;

相较于TCP为了可靠连接而做出的拥塞控制算法,重传机制等复杂工作,UDP不做很多工作,它只尽力保证数据的送达。

将应用到应用之间的传输过程分成两个部分:主机到主机的数据传输和主机到应用的数据转发。

  • UDP 协议底层的网际协议(Internet Protocol,IP)会负责数据包在主机之间的传输;
  • UDP 协议首部的端口号用于定位处理数据的具体进程并转发数据;

我们都说 UDP 协议是传输层协议,但是真正在主机间完成『数据传输』工作的是 IP 协议,UDP 协议只起到了定位具体进程的作用。

数据传输

RFC768 在介绍 UDP 协议时强调 UDP 协议假设底层会使用 IP 协议。IP 协议是 TCP/IP 协议栈的核心成员,它不保证端到端数据的可靠性和顺序,也不包含流控制等机制,其作用就是从来源向目的地传输数据包

『UDP 协议只能尽力送达数据』这一说法『继承』自 UDP 的下层协议,也就是 IP 协议。只包含了两个端口号的 UDP 协议本身是无法提供路由和寻址功能的,它还是需要下层的协议来解决这个问题。

上面提到的这种各司其职的设计源于网络通讯协议的分层结构。抽象是计算机科学中的基础概念,通过定义良好的接口、构建抽象层,我们可以减少同时需要关注的问题,让每一层都能聚焦到需要处理的问题上。TCP/IP 协议簇将通信过程分成了四个抽象层,分别是:链接层(Link)、网络层(Internet)、传输层(Transport)和应用层(Application)

进程定位

在软件层面上,端口是用来表示特定进程或者特定类型网络服务的逻辑概念8,计算机硬件中也有端口的概念,但是这里说的端口是没有实体的。当主机接收到 IP 数据包时会根据协议号交给不同的模块处理,TCP 和 UDP 协议会根据端口号确定送给对应的进程处理。

虽然 TCP 和 UDP 协议中都有端口号这一概念,但是因为它们两者的端口不在一个命名空间下(TCP 和 UDP 是两套命名空间),所以 TCP 和 UDP 可以同时使用相同的端口号,例如:53/TCP 和 53/UDP,这两个端口号后的服务都处理 DNS 请求。从这一点来看,只有通过 IP 地址、传输层协议和端口号三者才能在网络上定位到具体的服务,只凭借 IP 地址和端口号是不可行的。

UDP 协议中的两个端口号占据了 UDP 协议头的一半开销,这从侧面表明了端口号在 UDP 协议的重要地位和 UDP 协议的主要功能。接收 IP 数据包的主机可以使用目的端口号找到特定的进程,该进程也可以使用数据包中的源端口号向发送方回复数据。

TCP 和 UDP 的端口号是主机和进程的中间层,进程和端口号既可以是一对一的关系,也可以是一对多的关系,端口号的引入可以让同一个主机上的多个进程对外提供服务,也可以让一个进程对外提供多个服务。有了端口号,想要访问主机服务的请求也不需要使用进程标识符等方式定位提供服务的具体进程。

总结

简单回答一下本文提出的问题:UDP 协议利用下层的 IP 协议提供基本的数据传输能力,它的作用就是引入端口号的概念让同一主机可以同时提供对外多个服务,由于不保证可靠性,所以协议本身只占用 8 个字节。

在理想情况下,我们可以在 IP 协议上构建新的传输层协议实现特定的需求,不过在实际操作中由于协议号的限制,新的传输层协议无法被大量部署的网络地址转换(Network address translation,NAT)设备识别和支持,所以使用这种方式构建新的传输层协议在实践中难以落实。

注1:协议号是 IP 首部中的一个字段,它表示当前报文数据区使用的协议,最常见的 TCP 和 UDP 协议的协议号分别是 6 和 17。

注2:SCTP 协议10就是一个 RFC 标准中的传输层协议,但是 NAT 设备的兼容性问题会导致 SCTP 报文被丢弃。

最后

以上就是孤独小虾米为你收集整理的UDP协议头数据传输的全部内容,希望文章能够帮你解决UDP协议头数据传输所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部