TCP/IP:用户数据报协议(UDP)

IP 协议提供了在各台主机之间传送数据报的功能,但是各个主机并不是数据报中数据的最终目的地,数据的最终目的地应该是主机上的某个特定应用程序。那么 IP 层怎么样将数据报递交给各个应用程序呢?这就是传输层协议的功能了,TCP/IP 协议分层中,典型的传输层协议有 UDP和 TCP 两种。UDP 为两个应用程序提供了简单的数据交互方式,有着很高的数据递交效率,在局域网环境或在视频播放领域有着广泛的应用。另一方面,UDP 也是实现多种著名上层应用协议的基础,例如 DNS、DHCP、IGMP、SNMP 等协议都使用 UDP 传送协议数据。Anyway,本章中将涉及的知识点如下:
UDP 协议与端口号;
UDP 报文格式、校验和、报文交付方式;
LwIP 中的 UDP 报文数据结构和 UDP 控制块数据结构;
UDP 控制块操作函数;
UDP 报文的发送处理、接收处理;
基于 UDP 的回显测试程序。

一、背景知识

1、传输层协议

UDP 和TCP 都属于传输层协议,前面讲解的 IP 协议只能完成数据报在互联网中各主机之间的递交,IP 协议中,数据报的目的地是某一台主机,而不是主机上的某个应用程序。

要实现进程到进程间的通信,传输层协议需要完成几个重要任务:

第一,为两个通信的进程提供连接机制,即传输层将怎样去识别两个正在通信的进程,当主机的传输层从 IP 层得到一个数据报时,它将使用何种方式把数据递交给最终的应用程序?在传输层中,这是通过端口号来完成的;

第二,传输层应该提供数据传送服务,在数据发送端,传输层将用户数据进行组装、编号,将数据分割成可运输的单元,然后依次递交给 IP 层发送出去。接收端传输层等待属于同一应用程序的所有数据单元到达,对它们进行差错校验,最后将整个数据交付给应用程序;

第三,为了提供更可靠的传输服务,传输层还应该提供流量控制机制,例如数据的确认、重传等,以保证数据在两个应用程序之间递交的有效性。

2、UDP协议

UDP 称为用户数据报协议,是一种无连接的、不可靠的传输协议,它只在低级程度上实现了上述的传输层功能。UDP 只是简单地完成数据从一个进程到另一个进程的交付,它没有提供任何流量控制机制,收到的报文也没有确认;在差错控制上,UDP 只提供了一种简单的差错控制方法,即校验和计算,当 UDP 收到的报文校验和计算不成功时,它将丢弃掉这个报文。

UDP 协议的可靠性如此差,那为何还要使用它呢?

首先,这里的不可靠定义还是要根据具体使用环境来的,在现在的高可靠性、低时延的局域网环境下,使用 UDP 协议出现传输错误的可能性很小,但使用 UDP 却可以带来数据递交效率和处理速度的提升,因为它省去了连接建立、数据确认、流量控制等一系列过程。

从代码的实现角度讲,UDP 协议的代码量非常小,对于小型嵌入式设备来说,在局域网中使用 UDP 来实现通信还是很合适的。

除此之外,UDP 也经常在那些对轻微数据差错不敏感的应用中被使用到,例如实时视频传输、网络电话等。

3、端口

每台主机都包含了一组称为协议端口的抽象目的点,每个协议端口用一个正整数来标志,在TCP/IP 协议簇中,端口号范围为 0~65535,进程可以绑定到某一个端口号上,UDP 报文需要在其内部指出该报文应该递交的目的端口号,这样,绑定到相关端口号的进程将最终得到数据报文。两个进程要进行互相间的通信,它们都必须知道对方的 IP 地址和绑定的端口号。

UDP 协议的端口分配方法可以分为两大类,第一种是一些中央授权机构已经明确规定功能的端口号,称之为熟知端口号(well­known port assignment),这些端口号与实现某些上层协议的功能密切相关;第二种端口分配方法称为动态绑定(dynamic binding),这种类型的端口号称为短暂端口号。

服务器进程必须绑定到一个熟知的端口号上,这个端口号是通信双方事先都知道的,客户端进程可以直接往该端口号上发送数据,这样数据就能正确到达目的主机上的服务器程序了。UDP 中常见的熟知端口号及其作用如表 12­1 所示,提供相关功能的服务器进程必须绑定到对应的端口号上 。

另一方面,客户端程序也必须使用一个端口号来标识自己,这个端口号可以在允许范围内随机的选取(短暂端口号),但最好不要使用熟知端口号,客户端可以在报文中携带这个端口号,服务器进程通过这个端口号就能向客户端进程返回数据 。

4、UDP报文的交付

用户进程使用 UDP 来传送数据时,UDP 协议会在数据前加上首部组成 UDP 报文,并交给 IP协议来发送,而 IP 层将报文封装在 IP 数据报中并交给底层发送,在底层,IP 数据报会被封装在物理数据帧中。因此,一份用户数据在被发送时,经历了三次封装过程,如图 12­1 所示。

在接收端,物理网络先接收到数据帧,然后逐层地将数据递交给上层协议,每一层都在向上层递交前去除掉一个首部。在 UDP 层,它将从 IP 层得到 UDP 报文,UDP 协议会根据该报文首部的目的端口字段将报文递交给用户进程,绑定到这个目的端口的进程将得到报文中的数据。

5、UDP报文格式

如图 12­2 展示了一份 UDP 报文的具体结构,UDP 首部很简单,它由四 个 16 位字段组成,分别指出了该用户数据报从哪个端口来、要到哪个端口去、总长度和校验和。

在用户数据报的发起端(通常作为客户机),通常会将目的端口号填写为服务器上某个熟知的端口,对源端口号字段的填写则是可选的,如果客户端期望服务器为自己返回数据,则必须填写源端口号字段,服务器会在收到的报文中提取到这个源端口号,并在返回数据时使用到。

16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值