UDP:用户数据报协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据域真正发送的单个IP数据报可能没有什么联系。

下图是将UDP报文封装成为一份IP数据报的格式


UDP首部(8字节)格式:


UDP检验和覆盖UDP首部和UDP数据。回想IP首部的检验和,他只是覆盖IP首部,但是并不覆盖IP数据报中的任何数据。UDP和TCP在首部中都有覆盖他们首部和数据的检验和UDP检验和是可选的,而TCP的检验和是必须的
UDP数据报和TCP端都包含了一个12字节长的伪首部,它是为了计算检验和而设置的。伪首部包含IP首部的一些字段。其目的是让UDP两次检查数据是否已经正确达到目的地。
如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被翘翘丢弃。不产生任何差错报文(当IP层检验到IP首部检验和有差错时也是这样做的)。UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何变动。

网络MTU确认方法:
用Traceroute确定路径MTU
在确定一条网络通路的MTU,需要修改taceroute程序,用它来确定路径MTU。要做的是发送分组,并设置“不分片”标志位。发送的第一个分组的长度正好与出口MTU相等,每次接收到ICMP“不能分片”差错时就见效分组的长度。如果路由器发送的ICMP差错报文是新格式,包含出错的MTU,那么就将该MTU值来发送,否则就用下一个最小的MTU值来发送。

最大UDP数据报长度
在理论上,IP数据报的最大长度是65535(16位),这是由IP首部的数据长度限制的。除去20字节的IP首部和8个字节的UDP首部,UDP数据报中用户数据最长长度为65507字节。但是,大多数实现所提供的长度比这个最大长度小。产生这样的原因有:
(1)应用程序可能会受到其程序接口的限制。Socket API提供了一个可提供应用程序调用的函数,以设置接受和发送端的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。现在的大部分系统都默认提供了可读写大于8192字节的UDP数据报(使用这个默认值是因为8192是NFS读写用户数据的默认值)。
(2)第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值