UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它仅提供差错检测:只是把应用程序传给IP层的数据发送出去,但是并不会保证数据能够完好无损的到达目的地。
端口号就如同邮箱一样,帮助协议辨别发送和接受进程。端口号长16比特。
UDP头部如图所示:
IP层根据协议头部可以将IP数据报分离到特定的传输协议。正因为如此,不同传输协议是独立的,即可以使用相同的端口号而不会引起冲突。
校验和字段是端到端的,是对包含了IP头部中的源和目的IP地址字段的UDP伪头部计算得到的,伪头部的目的是用于校验和的计算,他不会被发送出去。
UDP伪头部和头部的格式如图:
伪头部包含了IP头部的源和目的地址,以及协议或下一个头部字段。目的是让UDP层验证数据是不是到达真正的目的地,由于有了这样的结构,当该数据报经过一个NAT时候,不仅仅IP层头部的校验和要被修改,并且UDP伪头部的校验和也要被修改。
背景:有些应用程序可以容忍在发送和接收的数据里引入的比的差错。
为了避免建议连接的开销,或者为了使用广播或组播地址,这类程序会选择使用UDP。而UDP-Lit提供了部分校验和来解决这个问题。
其头部如下表示:
校验和覆盖范围字段表示被校验和覆盖的字节数。值为0表示整个数据包都被覆盖。由于整个头部总是要被覆盖的,所以值位1~7是无效的!
为了保持IP数据报抽象与链路层细节的一致和分离,IP引入了分片和重组。
重组只能发生在IP数据报到达最终目的地的时候。原因很显然,不同分片可能会经过不同的路径到达目的地,在路径上的路由器只能看到分片的一个子集,显然无法重组。
分片由IPV4头部中的标识,分片偏移,和更多分片字段控制。
偏移的具体内容如下图所示:
第二个数据报偏移为185(185*8=1480,为第一个分片负载),即在第一个分片零偏移的基础上偏移了185个单位。
MF位字段指明该数据报后面是否还有更过的分组,只有最后一个分片才应置为0。
当TCP报文段的一个分片丢失了,TCP会重传整个报文段,而重传一个分片是不可能的,因为在路径路由器可以分片数据报,源主机是不清楚数据报如何被分片的。
原文地址:
https://www.cnblogs.com/Huzr/p/8824728.html
原文:https://www.cnblogs.com/wang-shishuang/p/10608269.html