TCP/IP协议卷学习---基础部分(十一 UDP 用户数据报协议)
1 UDP数据报
①源端口目的端口,最大65535
②16位UDP长度,包括UDP头部以及数据长度,最小为8字节(即数据为空)
③16位UDP校验和校验的是头部+数据,IP协议中的数据校验和只有IP头。TCP的校验和是必须要的,UDP是非必须的。在UDP中,数据长度是可以为奇数的,但是校验和的计算是需要N个16bit的和,因此为了方便计算,UDP数据不够的情况下可以用0填充,在实际传输的时候填充的这些可以不用实际传输。
2 UDP/TCP伪首部
UDP数据报和TCP段都包含一个 12字节长的伪首部,它是为了计算检验和而设置的。伪首部包含 I P首部一些字段。其目的是让 U D P两次检查数据是否已经正确到达目的地。
3 IP分片
把一份IP数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在下一站就进行进行重新组装,而不是在最终的目的地)。
对于发送端发送的每份 I P数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。标志字段用其中一个比特来表示“更多的片” 。除了最后一片外,其他每个组成数据报的片都要把该比特置 1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
标志字段中有一个比特称作“不分片”位。如果将这一比特置 1,I P将不对数据报进行分片。相反把数据报丢弃并发送一个 I C M P 差错报文
IP数据报即使只丢失一片数据也要重传整个数据报,因为分片是在每次转发时都要重新组装然后重新分片,由于可能每个网络主机的MTU不同所以分片的大小也不同,而源站并不知道丢失的是哪一片数据。
4 路径MTU发现的三种方式(都是利用的ICMP不可达差错)
① ICMP不可达差错
设置一份不可被分片的长数据报,如果超过当前网络的MTU则会产生一个ICMP不可达差错
② traceroute确认路径MTU
之前确认路由路径是通过设置TTL以及ICMP来确认,可以修改其代码,不断增加IP数据报的长度来获取路径上的MTU值。
③ UDP确认路径MTU
同样修改UDP数据包长度判断返回的ICMP不可达差错。
5 UDP与ARP
在ARP清空时发送一份可以被分片的UDP数据包,此时I P 很快地产生了n个数据报片,而每个数据报片都引发了一个A R P请求,在大多数的实现中,在等待一个A R P应答时,只将最后一个报文发送给特定目的主机。这里目的主机在接收到IP分片之后会启动一个计时器来等待其他分片的数据报,一般计时30秒,如果超时还没接受完整则丢弃这些数据报分片,并且不会产生ICMP差错报文(除非接收到了分片偏移量为0的那个分片),因为接受其他分片并不能拿到首部是哪个协议哪个端口哪个应用程序,所以产生ICMP也无法通知应用程序。