Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33996
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-25 18:24
文章分类
文章存档

2014年(7)

分类: 网络与安全

2014-05-26 13:33:18

原文地址:UDP协议 作者:wangspace


  1. UDP:User Datagram Protocol的缩写
  2. 1.UDP的特点及其目的:
  3.     UDP是一个简单的面向数据报的运输层协议:进程的每一个输出操作都正好产生一个UDP数据报,并组装成一份代发的IP数据报。
  4.     UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证数据到达目的地。由于缺乏可靠性,提供了另一种可靠的
  5.     协议TCP。
  6. 2.UDP经常用于以下几方面:
  7.     1)包含量较少的通行(DNS\SNMP等)
  8.     2) 视频、音频等多媒体通信
  9.     3)限定于LAN等特定网络中的应用通信
  10.     4)广播通信(广播、多播)

  11. 3.UDP首部的格式:
  12.   
    Format
    ------
    
    
                      0      7 8     15 16    23 24    31
                     +--------+--------+--------+--------+
                     |     Source      |   Destination   |
                     |      Port       |      Port       |
                     +--------+--------+--------+--------+
                     |                 |                 |
                     |     Length      |    Checksum     |
                     +--------+--------+--------+--------+
                     |
                     |          data octets ...
                     +---------------- ...
    
                          User Datagram Header Format
    


  13.     1)源端口号(Source Port)
  14.         表示发送端端口号,字段长16位。该字段是可选项,没有该端口号的时候该字段的值设置为0;可用于不需要返回的通行中。
  15.     2)目标端口号(Destination Port)
  16.         表示接收端口,字段长度16位。
  17.     3)包长度(Length)
  18.         该字段保存了UDP首部的长度更数据的长度之和。
  19.     4)校验和(Checksum)
  20.         校验和是为了提供可靠的UDP首部和数据而设计的。在计算校验和时,如下图: 

  21.                   0      7 8     15 16    23 24    31 
                     +--------+--------+--------+--------+
                     |          source address           |
                     +--------+--------+--------+--------+
                     |        destination address        |
                     +--------+--------+--------+--------+
                     |  zero  |protocol|   UDP length    |
                     +--------+--------+--------+--------+
  22.     
  23.         附加在UDP伪首部与UDP数据报之前。通过在最后一位增加一个“0”将全长增加16倍。此时将UDP首部的校验和和字段设置为"0"
  24.         然后以16位比特位单位进行1的补码和,并将所得到的1的补码和写入校验和字段。
  25.         接收主机在收到UDP数据报以后,从IP首部获取IP地址信息构造UDP伪首部,在进行校验和计算。校验和字段的值是校验和字段
  26.         以外剩下部分的1的补码和。
  27.         注意:UDP校验和是可选的。不用校验和,则校验和字段填入0.这种情况下,由于不进行校验和计算,协议处理的开销就会降低。
  28.         从而提高效率。


  29. 4.UDP数据报长度一般设置为多少比较合适(TCP/IP协议卷一):

  30.     在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?
  31.     当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对
  32.     像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助:
  33.     首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层.
  34.     UDP属于运输层,下面我们由下至上一步一步来看:
  35.     以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.
  36.     这个1500字节被称为链路层的MTU(最大传输单元).
  37.     但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.
  38.     并不包括链路层的首部和尾部的18个字节.
  39.     所以,事实上,这个1500字节就是网络层IP数据报的长度限制.
  40.     因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.
  41.     而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.
  42.     又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.
  43.     这个1472字节就是我们可以使用的字节数。

  44.     当我们发送的UDP数据大于1472的时候会怎样呢?
  45.     这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).
  46.     把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.
  47.     这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便
  48.     无法重组数据报.将导致丢弃整个UDP数据报。

  49.     因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好.

  50.     进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值.
  51.     如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机
  52.     制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作.

  53.     鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时.
  54.     最好将UDP的数据长度控件在548字节(576-8-20)以内.

  55. 5.RFC 768:UDP协议标准文档rfc768_UDP.txt

阅读(1807) | 评论(0) | 转发(0) |
0

上一篇:IP协议

下一篇:TCP协议(1)

给主人留下些什么吧!~~