您的位置:首页 > 理论基础 > 计算机网络

《TCP/IP详解 卷1:协议》 读书笔记 第11章 UDP:用户数据报协议

2016-08-19 17:41 911 查看

UDP:用户数据报协议

UDP用户数据报协议
引言

UDP首部

UDP检验和

IP分片

ICMP不可达差错需要分片

UDP和ARP之间的交互作用

最大UDP数据报长度

ICMP源站抑制差错

引言

UDP是一个简单的面向数据包的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。

UDP首部为8字节,IP首部为20字节。

UDP是不可靠的。

UDP首部



在分用到UDP(TCP)这一层后,由端口号来继续往上分用,决定是哪个应用服务。

UDP长度指的是UDP首部+UDP数据的字节长度(有些首部长度的单位是32bit,4个byte,这里是1个byte)。

UDP检验和



UDP检验和覆盖UDP首部和UDP数据。(IP的检验和只覆盖IP的首部,不覆盖数据)

UDP和TCP在首部中都有覆盖它们首部和数据的检验和。UDP的检验和是可选的,TCP的检验和是必须的。

UDP和IP检验和的不同:

UDP数据报的长度可以为奇数字节,为了符合16bit反码相加的特性,会在数据最后填充字节0(这些0可能不被传送)。

UDP数据报和TCP段都包含一个12字节长的伪首部,为了计算检验和而设置(包含IP首部的一些字段)。目的是让UDP两次检查数据是否已经正确到达目的地。

UDP数据报的长度在检验和计算过程中出现两次。

如果检验和的计算结果为0,则存入的值为全1(65535),如果检验和为0,说明发送端没有计算检验和。

如果发送端没有计算检验和而接收端检测到检验和有错,那么UDP数据报就要被悄悄丢弃,不产生任何差错报文。

UDP检验和虽然是可选的,但是默认都是打开的。

UDP检验和是简单的16bit反码相加,检测不出交换2个16bit的差错。

TCP发生检验和差错的比例比UDP高得多,因为TCP经常是“远程”连接,而UDP一般是本地通信。

IP分片

物理网络层一般要限制每次发送数据帧的最大长度。

分片可以发生在发送端主机上,也可以发生在中间路由器上(因为MTU可能发生变化)。- - 已经分片过的可能再次进行分片。

只有到达目的地才进行重新组装(其他网络协议在下一站就重新组装),由IP层完成。



IP首部的标识字段都包含一个唯一的值,该值分片时赋值到每个片中。

标志字段用一个bit来标识“更多的片”,最后一片置为0,其余置为1.

片偏移字段是该片偏移原始数据报开始出的位置。

分片后,每个片的总长度要改为该片的长度值。

标识字段有一个bit称作“不分片”位,置1的时候不能分片,要分片的时候会产生一个ICMP差错报文。

如果丢失了一片数据,就要重传整份数据,IP没有重传机制,这是根据TCP重传机制决定的。

使用UDP很容易导致IP分片,TCP会试图避免分片。

在一个以太网上,数据帧最大的长度是1500.

数据帧=IP首部(20字节)+UDP首部(8字节)+数据(最多1472字节)

在分片时,除最后一片外,其他每一片的数据部分(UDP首部+数据)必须是8字节的整数倍。

端口号在UDP首部,而UDP首部在第一片,所以端口号只能在第一片。

IP数据报:IP层端到端的传输单元

分组:IP层和链路层之间传送的数据单元,一个分组可以使一个完整的IP数据报,也可以是一个分片。



ICMP不可达差错(需要分片)

如果数据需要分片,但是IP首部设置了不可分片(DF)的bit为1,那么就会发送ICMP不可达差错。

可以利用这个差错来判断路径的MTU。

UDP和ARP之间的交互作用

如ARP缓存是清空的,那么在发送第一个数据报片前必须交换ARP请求和应答。

如果有多个数据报,在等待一个ARP应答时,只将最后一个报文发送给特定目的主机。

最大UDP数据报长度

IP数据报的最大长度是65535字节,这是16bit的总长度字段所限制的。

那么UDP数据报最长长度为65535-20-8=65507.

限制因素:

程序接口限制。

TCP/IP的内核实现限制。

主机必须能够接收最短为576的IP数据报,所以在许多UDP应用程序的设计中,其应用程序数据被限制成512字节或更小(确保能接收)。

ICMP源站抑制差错

当一个系统接收数据报的速度比其处理速度快时,可能产生这个差错。(注意是可能,不一定会发送这个差错报文。)

采用UDP时,源站抑制报文可能会被忽略。

TCP也支持源站抑制报文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp IP分片