UDP协议基本介绍
1.基本概念
UDP是一个简单的面向数据包的运输层协议:进程的每一个输出操作都正好产生一个UDP数据报,并组装成一个待发送的IP数据报,与流字符协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报没有联系,UDP提供不可靠的服务,它的数据报格式如下图所示
UDP数据报
IP首部 | UDP首部 | UDP数据 |
---|
2.UDP首部
16位源端口号 | 16位目的端口号 |
---|---|
16位UDP长度 | 16位UDP校验和 |
数据 | 数据 |
端口号表示发送进程和接收进程,TCP端口号与UDP端口号是相互独立的,因此我们可以用同一端口既绑定UDP又绑定TCP。UDP长度字段指定的是UDP首部和UDP数据的长度
3.UDP校验和
UDP检验和是一个端到端的检验和,它由发送端计算,然后由接收端验证,其目的是为了发现UDP首部和数据在发送端到接收端之间的任何改动
4.IP分片
任何时候IP层收到一份IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口的MTU,IP把MTU与数据报的长度进行比较,若需进行分片,分片可以发生在原始的发送端主机上,也可以发生在中间路由上
把一份IP数据报分片之后,只有到达目的地才进行重组,重组是由目地端IP层来完成的,已经分片的数据报可能会再次分片
对于发送端的每分IP数据报来说,其标示字段都包含一个唯一值,该值在数据报分片时被复制到每一片中,标志段用其中一个bite赖表示更多的片,除了最后一片外,其他每一个都要把该位置1,片偏移字段是该片偏移原始数据报开始处的位置
标志段中有个bite称做不分片字段,如果将这个字段置为1,IP将不分片,相反把数据报丢弃,发送一个ICMP差错报文
尽管IP分片过程是透明的,但有一点让人不想使用它,即使只丢失一片数据,也得重传整个数据报
5.UDP和ARP之间的交互作用
IP分片之后,每一片都会产生ARP请求,但是ARP应答只会应答最后一片,在第一个数据报片到达之后,IP层必须启动一个定时器,如果在规定的时间内数据报片没全部到达,达么这个数据报将会被丢弃
6.UDP服务器的设计
(1)客户IP地址及端口号
来自客户的是UDP数据报。IP首部包含源端和目地端IP地址,UDP包含了源端和目的端的端口号,当应用程序接收到UDP数据报时,操作系统不许告诉它是谁发来的消息,即IP和端口号
(2)目的IP地址
一些应用程序需知道数据报是发送给谁,即目的IP
(3)UDP输入队列
通常程序所使用的每个UDP端口都与一个有限大小的输入队列相联系。这意味着来自不同客户差不多同时到达的请求将有UDP自动排队,接收到的UDP数据报以其接收顺序交给应用程序
广播和多播
1.基本概念
广播与多播只用于UDP,有时候一个主机要向网上所有主机发送帧,这就是广播,多播处于单播和广播之间,帧只发送给属于多播组的所有主机上
2.广播
(1)受限的广播
受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址。此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址都不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样数据报仅出现在本地网络中
(2)指向网络的广播
指向网络的广播地址是主机号为全1的地址,A类广播地址为netid.255.255.255
一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择
(3)指向子网的广播
指向子网的的广播地址为主机号全为1且有特定子网号的地址
(4)指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址权分开来例如IP为128.1.255.255是一个指向所有子网的广播地址,当然,网络没有划分子网,这就是一个指向网络的广播