用户数据报协议(UDP)
1. 在互联网层,IP协议描述的是在主机之间传送数据报的能力,目的地址只是标志了一个主机,没有对接收这个数据报的用户或应用程序进一步加以标志。本章对TCP/IP协议族进行扩展,添加一个机制来区分某个主机内的不同目的地址,从而运行某台指定计算机上运行的多个应用程序相互独立地发送和接收数据报。
2. 我们并不是把进程当成报文的最终目的地,而是想象每台机器都包括一组称为“协议端口”(protocol port)的抽象目的点。协议端口用正整数来标志。本地操作系统提供了一个接口机制,进程使用它来指明或访问一个端口。
3. 大多数操作系统提供了同步的端口访问。如果一个进程试图在任何数据到达之前从端口提取数据,则操作系统会暂时停止(阻塞)进程,知道数据到达。一旦数据到达,操作系统把数据传递给这个进程并重新启动它。通常端口带缓冲。
4. 为了与外部端口通信,发送方不尽需要知道目的机器的IP地址,还要知道该机器内目的地的协议端口号;每个报文必须携带报文送达机器的目的端口(destination port)号,还必须携带回答报文应反送至源机器的源端口(source port)号。这样,任何接收到报文的进程才可能回答发送方。
5. 用户数据报协议(User Datagram Protocol,简称UDP)
提供应用程序之间发送数据报的基本机制。UDP提供的协议端口可用来区分在一台机器上运行的多个程序。每个UDP报文除了包含要发送的用户数据,还包含目的端口和源端口,这样就使目的机器上的UDP软件能够吧报文交付给正确的接收这,而接收者也能发送回答报文。
UDP使用下层的互联网层把报文从一台机器传输到另一台机器,与IP一样,提供的也是不可考、无连接的数据报文交付语义。它没有使用确认来确保报文到达,没有对收到的报文排序,也不提供反馈信息来控制机器之间信息流动的数度。因此,UDP报文可能会出现丢失、重复或无序到达的现象。总之:
UDP使用IP在机器之间传输报文,提供的是不可靠、无连接的交付服务。它使用IP来运载报文,但比IP增加了区分指定主机上的多个目的地址的能力。
6. UDP的报文格式
每个UDP报文称为一个用户数据报(user datagram)。用户数据报分为两个部分:UDP首部和UDP数据区。首部被分为4个16比特的字段,分别说明了报文从那个端口来、到哪个端口去、报文的长度以及UDP校验和:
0 16 31
-----------------------------------------------------------------------------------
源端口 | 目的端口
报文长度 | 校验和
数据
7. UDP的伪首部
UDP检验和计算涉及的范围超出了UDP 数据报本身。为了计算检验和,UDP 把伪首部(pseudo-header)引入数据报中,并且为了保证数据报长度为16比特整数倍,还添加了一个全零八位组来填充数据报,最后为整个对象计算检验和。用于填充数据报的八位组和伪首部并不随UDP数据报一起传输,也不计算在数据报长度之内。为了计算检验和,软件先在检验和(CHECKSUM)字段中存储零值,然后对整个对象,包括伪首部、UDP的首部和用户数据,计算16 位的二进制反码和。
使用伪首部的目的是验证UDP数据报是否已到达正确的终点。理解伪首部的关键在于认识到:一个正确的终点包括一台特定的主机和该机器上的一个特定协议端口。UDP 首部本身仅仅指明了协议端口号。因此,为了验证终点正确与否,发送端机器上的UDP 在计算检验和时把目的机器的IP地址和UDP数据报都包括在内。在最终的目的机器上,UDP协议软件对检验和进行验证时,用到了携带UDP报文的IP数据报首部中的IP地址。如果检验和一致,则说明UDP数据报到达了正确主机上的正确协议端口。
伪首部的格式:
0 8 16 31
-----------------------------------------------------------------------------------------------
源IP地址
目的IP地址
零 | 协议 | UDP长度
8. UDP的封装与协议的分层
9. UDP并没有给IP层的语义增加多少内容,在这个意义上它是一个“廋”协议。它只给应用程序提供了通信能力,使用的是IP的不可靠、无连接分组交付服务。因此,UDP的报文可能会出现丢失、重复、延迟或无序交付;使用UDP的应用程序必须负责处理这些问题。
阅读(962) | 评论(0) | 转发(0) |