UDP,也就是用户数据报协议,是面向数据报的运输层协议,进程的每个输出操作都正好产生一个UDP数据报,再组装成一个IP数据报,而TCP面向字符流的。UDP提供的是无连接、不可靠的协议,它最主要的作用是提供源端口号跟目的端口号,以便内核知道数据交给哪个进程处理。
1.UDP头部
UDP协议的首部比较简单,如下所示:
UDP检验和覆盖整个UDP数据报,是可选的。检验和的计算方法跟IP的一致,但是UDP头部可能为奇数字节,而检验方法是16字相加,解决方法是在尾部添0。其次,UDP跟TCP都有12字节的伪首部,目地是为了让UDP再次检验数据是否正确到达。伪首部包含的主要数据有源IP地址,目的端IP地址,0(8位),协议(8位),UDP长度(8位)。如果检验和的计算结果为0,则存入的值全为1,如果传的检验和为0的话,说明源端没有计算检验和。接收端发现检验和有错误的话,将悄悄的抛弃,不发送ICMP差错报文,IP也一样的。
16位源端口号 16位目的端口号 16位UDP长度 16位检验和
2.IP分片
物理层都有限制每次发送数据帧的最大长度。任何时候,IP层接收到一份报文后都要与MTU进行比较,如果大就得分片,分片可以发生在源端主机上也可以发生在中间路由器上,把一份IP数据报分片后,只有到达目的地才进行组装。