TCP/IP详解之竭尽全力的UDP(持续更新)

TCP/IP详解之 竭尽全力的UDP

一、UDP是啥?
UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制(这些其实就是TCP的特性)。但是呢,它提供差错检测,其实就是传输层中的端到端校验和。由于这种协议本身提供的功能很少,所以使用它的应用程序需要做许多关于数据包如何发送和处理的控制工作,简而言之,它只负责传递数据,并且不保证数据能够到达目的地。
虽然它的这些特性会让它不如好男人一样可靠,BUT!它还是有它的优点的~
首先就是相比于其他的传输协议,它会使用更少的开销;其次,广播和组播操作更多直接使用像UDP这样的无连接传输;最后呢,应用程序可选择自己的重传单元的能力是一项重要的考虑。

二、UDP头部
UDP数据包作为单个IPv4数据报的封装与IPv6是类似的,只有一些细节不同,稍后将讨论。
UDP数据报是由UDP头部和UDP数据组成,头部的长度通常为8个字节,分别为源端口号、目的端口号、长度、校验和,四个数据均占用2个字节。
UDP头部

端口号:相当于邮箱,帮助协议辨认发送和接收进程。源端口号可选,如果数据包的发送者不要求对方回复的话,可以置其为0。传输协议使用目的端口来帮助分离从IP层进入的数据。因为IP层根据IPv4头部中的协议字段或IPv6头部中的下一个头部字段的值将进入的IP数据报分离到特定的传输协议,这意味着端口号在不同的传输协议之间是独立的,TCP端口号只能被TCP使用,UDP端口号只能被UDP使用。所以可以出现两个完全不同的服务器使用相同的端口号和IP地址,只要它们使用不同的传输协议。
校验和字段是端到端的,是对包含了IP头部中的源地址和目的地址字段的UDP伪头部计算得到的,因此任何对这些字段进行修改都需要对UDP校验和进行修改(例如NAT)。

UDP长度是UDP头部和数据的总长度,最小值是8,除非使用了带有IPv6超长数据报的UDP。发送一个带0字节数据的UDP数据报是允许的,也就是说UDP长度字段是冗余的,因为IPv4头部就包含了数据报的总长度,也就是一个UDP/IPv4数据报的长度等于IPv4数据包的总长度减去IPv4头部的长度。UDP长度字段的值应该与从IP层提供的信息计算得到的长度是一致的。

UDP校验和覆盖了UDP头部、数据和一个伪头部,而IPv4头部中的校验和只覆盖了整个头部,而没有覆盖IP分组中的任何数据,每个IP跳都要重新计算校验和(为什么呢?因为TTL字段的值在数据报转发的过程中会被路由器减少)。对于UDP来说,校验和是可选的,但是在IPv6中使用时,校验和的计算和使用是强制的,因为在IP层没有头部校验和。

注意!!!!细节来了!!!!!

①UDP数据报长度可以为奇数个字节,而校验和算法只相加16位字(偶数个字节),怎么处理呢?UDP的处理过程是在奇数长度的数据报尾部追加一个值为0的填充(虚)字节,这仅仅是为了校验和的计算与验证,实际上是不会被传送出去的。
②UDP计算它的校验和时包含了(仅仅)衍生自IPv4头部的字段的一个12字节的伪头部或衍生自IPv6头部的字段的一个40字节的伪头部,伪头部也是虚的,与上面的“0”一样。仅用作校验和的计算。
UDP校验和计算过程中使用的字段
三、重组超时
一个数据报的任何一个分片首先到达时,IP层就会启动一个计时器,超时时间为30s或60s,收到新的分片也不会重置,如果超时,则丢弃所有分片,并回复一个ICMPv4超时(代码1)消息,告诉发送方数据报已丢失,包括第一个分片的拷贝。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值