zoukankan      html  css  js  c++  java
  • 第8章 传输层(2)_UDP协议

    2. 用户数据报协议(UDP)

    2.1 UDP的特点

    (1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。

    (2)UDP使用了尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表,通信的两端不用保持连接,因此节省系统资源。

    (3)UDP是面向报文的。UDP对应用层下来的报文即既不合并,也不拆分,而是保留这些报文的边界。也就是说应用层交给UDP多长的报文,UDP就原样发送,即一次发送一个报文。(这要求应用程序必须选择合适大小的报文,以免降低IP层的效率!)

     

    (4)UDP没有拥塞控制:如果网络出现拥塞不会使主机的发送速率降低。这对某些实时应用很重要(如IP电话、实时视频会议等),它允许在网络发生拥塞时丢失一些数据但不允许数据有太大的时延,UDP正好适合这种要求。

    (5)UDP支持一对一、一对多、多对一和多对多的交互通信。

    (6)UDP的首部开销小,只有8字节,比TCP的20字节的首部要短。

    2.2 UDP的首部格式

    (1)抓包分析(以域名解析数据包为例)

     

      ①源端口:在需要对方回信时选用。不需要时可用全0。

      ②目的端口:在终点交付报文时必须要使用到

      ③长度:UDP用户数据据的长度(数据字段和首部字段),最小值是8(仅有首部时)

      ④检验和:检测UDP用户数据报在传输中是否有错。有错就丢弃

    (2)UDP首部和伪首部

     

      ①UDP用户数据报有两个字段:数据字段和首部字段。其中的首部很简单,只有8个字节(源端口、目标端口、长度和校验和)

      ②“伪首部”:并不是UDP数据报真正的首部,只是在计算检验和时,临时添加在UDP数据报前面,得到一个临时的UDP用户数据报,检验和就是按照这个临时的UDP数据报来计算的。这个伪首部既不向下传递也不向上递交,而仅仅是为了计算检验和之用

    (3)UDP检验和的计算

     

      ①UDP的检验和是把首部和数据部分一起都检验(有别于IP数据报检验和只检验IP数据报的首部)。

      ②发送方首先把全零放入检验和字段,再把伪首部以及UDP用户数据报看成是由许多16位的字(如上图)一起串接起来。如果数据部分不是偶数个字节,则填入一个全零字节(但不发送)。然后按二进制反码计算出这些16位字的和将此和的二进制反码写入检验和字段。然后发送这个UDP数据报。

      ③接收方把收到的UDP数据报连同伪首部(以及可能的填充全零字节)一起按二进制反码求这些16位字的和。当无差错时其结果应全为1;否则就表明有差错出现,接收方应丢弃这个UDP数据报。

  • 相关阅读:
    HDU6168 Numbers
    HDU6170 Two strings
    UVA11426 GCD
    hihocoder1560 H国的身份证号码II
    HDU6156 Palindrome Function
    UVA10917 Walk Through the Forest
    UVA11374 Airport Express
    hihocoder1323 回文字符串
    hihocoder1543 SCI表示法
    CodeForces501C Misha and Forest
  • 原文地址:https://www.cnblogs.com/5iedu/p/7252989.html
Copyright © 2011-2022 走看看