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

UDP是一个简单的面向数据报的运输层协议,进程的每个输出操作正好产生一个UDP数据报,并组成一份待发送的IP数据报。UDP把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。即UDP不提供可靠性。

UDP报头如下所示:
UDP报头
端口号表示发送进程和接收进程的端口号,TCP与UDP的端口号是相互独立的。
UDP长度指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节,UDP数据报的长度是整个IP数据报的长度减去IP首部的长度。

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

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

物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的数据报时,它先要判断向本地哪个接口发送数据报,并查询该接口获得MTU,IP把MTU与数据报长度做比较,如果需要则进行分片,除最后一个分片外,其余IP报头中的DF位设置为0。

IP数据报到达目的地之后,才会进行重新组装,重新组装由IP层来完成,其目的是使分片和重新组装过程对运输层是透明的。

IP首部有一个byte称作”不分片(DF)”,如果将这一比特置为1,IP将不对数据报进行分片,相反会把数据报丢弃并发送一个ICMP差错报文。当IP数据报被分片之后,每一片都成为一个分组,具有自己的IP首部,并在选路时与其他分组独立。所以数据报到达目的端的时候可能会失序。不过在IP首部中有足够的信息让接收端能正确组装这些数据报片。

发生ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)。

理论上,IP数据报的最大长度是65535个字节,即IP首部16byte长度字段所限制,去掉20字节的IP首部和8字节的UDP首部,UDP数据报的理论最大长度为65507个字节。不过在传输过程中仍会遇到两个限制因素:

  1. 应用程序可能会受到其程序接口的限制
  2. TCP/IP的内核实现

ICMP源站抑制差错:当一个系统接收数据报的速度比其他处理速度快时,就可能产生这个差错。报文格式如下:
ICMP源站抑制差错

UDP首部的定义如下所示:
UDP首部定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值