* UDP用户数据报协议是工作在运输层的协议,其正式规范为RFC 768。
UDP没有应答机制,不保证可靠传输,不重发数据,由于速度快,常用于本地通信(局域网或主机上的环回接口)。
* UDP的报文格式(封装在IP包内):
src port(16 bits)--dst port(16 bits)--UDP length(16 bits)--check sum(16 bits)--
data (its length depends on socket API or TCP/IP's kernel features)
端口为UDP协议的端口,协议已经由IP数据首部标出;
16位UDP长度包括数据部分;
校验和校验整个UDP首部和数据部分,也采用16 bits二进制反码和。如果UDP有奇数字节,常在最后填充0字节以满足16bits的整数倍;
校验和包括32位源IP和32位目的IP地址为伪首部;
UDP校验和是可选项,如果全为0则未打开校验和,RFC规定默认下打开。
* IP分片
由于路径MTU的制约,UDP、TCP等协议的数据在IP封装后通常要进行分片。
其分片的标识、标志和片偏移(其值以字节为单位)在IP首部指定。
IP分片可能在主机上也可能在中间路由器上进行,它对UDP、TCP等上层协议是透明的。
如果需要分片但是IP的标志设置了不分片位,将引起MTU小于该包的路由上的TCMP IP未分片报文,报文提供了下一站的MTU。通常可利用这种错误报文进行路径MTU的发现。
例如可以修改traceroute程序,使分组长度等于出口路由的MTU,收到ICMP未分片报文后,按报文的下一站MTU值修改分组长度,如果该报文未含MTU值,
则按自己的机制递增长度,直到得到最小MTU。
UDP本身也可以进行路径MTU发现,但是其原理书中说的不是很明白。
* ICMP源站抑制差错
若主机或路由接收数据报的速度比其处理速度要快导致缓存溢出,可能会引发这种差错。
UDP很容易会引发这种差错,但是目前多数的实现只接收TCP的源站抑制差错报文而忽略UDP的差错报文。
* UDP服务器的端口(port)和接口(interface)
通常每个指定的接口和端口只提供一个服务进程,其客户端请求通过FIFO队列进行处理。
如果有多个IP(接口),各自接口的相同端口都可以运行一个服务器进程。
远程服务器的同一个应用或许会提供多个接口和端口。但是本地进程在指定对远程的连接接口后将自动选择本地的接口地址。
* 单播、广播和多播:
单播把数据报发送给单一主机;
广播把数据报发送给指定网络上的所有主机;
多播发送给指定的多个主机。
单播、广播和多播的概念仅用于UDP实现。
* 广播地址的类型
受限广播地址:255.255.255.255,本主机所在本地网络的广播地址,例如我所在子网219.221.206.32的广播地址219.221.206.63。
网络广播地址:A类、B类、C类的广播地址,网络号不变,主机号所有位置1。
子网广播地址:子网号不变,主机号所有位置1。可以通过子网地址跟子网掩码的逻辑或得到。
所有子网的广播地址:子网号和主机好所有位置1。可以使用所用C类地址跟子网地址及子网掩码的反码依次相或得到。
* 广播的应用范围
需要应用程序支持广播,例如tftp就不支持广播。ping广播地址需要加上-b选项即可得到所ping网络上所有主机的响应。
如果广播地址不是本地网络,需要路由器配置的支持。
* 多播
多播概念的引入是为了避免广播时网络中对此广播没有兴趣的主机的负载。
多播使用多播组,多播组使用的是D类地址。从224.0.0.0~239.255.255.255。
多播组也跟TCP/UDP端口一样使用知名地址(wellkown)的概念。由RFC给出。
多播可应用于视频会议、在线聊天室等。
* 多播在单一物理网络上的实现相对比较简单,多播进程把所要发送的数据报发给多播IP地址,设备驱动程序把多播地址转换为相应的以太网地址往外发。接收进程通过以太网卡过滤接收多播帧。
多播地址到以太网地址的转换使用其低23位直接映射到相应以太网地址中。映射地址并不唯一,需要设备驱动程序或IP层提供多播数据报过滤功能。
* 多播使用IGMP——Internet组管理协议作为其基本模块,用于为主机和路由实现同一物理网络上的多播提供支持。
阅读(847) | 评论(0) | 转发(0) |