zoukankan      html  css  js  c++  java
  • UDP:用户数据报协议

    1. 引言

    UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
    UDP数据报封装成一份IP数据报的格式如图。

    UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证他们能到达目的地。
    应用程序必须关心IP数据报的长度。如果它超过忘了的MTU,那么就要对IP数据报进行分片,如果需要,源端到目的端之间的每个忘了都要进行分片,并不只是发送端主机连接第一个网络才这样。

    2. UDP首部

    如图:

    (1)16位源端口号:端口号表示发送进程和接收进程,TCP和UDP用目的端口号来分用来自IP层的数据的过程。由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。尽管相互独立,如果TCP和UDP同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身要求。
    (2)16位目的端口号
    (3)16位UDP长度:UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是可以的)。这个UDP长度是冗余的。因为UP数据报长度是IP数据报全程,因此UDP数据报长度是全长减去IP首部的长度。
    (4)16位UDP检验和:UDP检验和覆盖UDP首部和UDP数据。IP首部的检验和,它只覆盖IP的首部--并不覆盖UP数据报中的任何数据。UDP和TCp在首部中都有覆盖他们首部和数据的检验和。UDP的检验和是可选的,而TCP的检验和是必须的。

    3. UDP校验和

    尽管UDP检验和的基本计算方法与IP首部检验和计算方法相类似(16bit字的二进制反码和),但是他们之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是检验和算法是把若干个16bit字相加。
    解决方法是必要时在最后增加填充字节0,折只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。
    其次,UDP数据报和TCp端都包含一个12字节长的伪首部,它是为了计算校验和而设置的。伪首部包含IP收一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地。(例如,IP没有接受地址不是本主机的数据报,以及IP没有吧应传给另一高层的数据报传给UDP)
    UDP数据报中的伪首部格式如图:

    上图中,特地举了一个奇数长度的数据报例子,因此在计算检验和时需要加上填充字段。

    如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄丢弃,不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)。
    UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。
    不是所有的以太网数据帧都是IP数据报,至少以太网还要使用ARP协议。不是所有的IP数据报都是UDP或TCP数据,因为ICMP也用IP传送数据。

  • 相关阅读:
    第三次冲刺
    第二次冲刺
    第一次冲刺
    团队学习
    git and github
    还不够格的程序员
    CF1602F. Difficult Mountain
    线性基
    欧拉回路学习笔记
    莫比乌斯反演-学习笔记
  • 原文地址:https://www.cnblogs.com/lujiango/p/10709454.html
Copyright © 2011-2022 走看看