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数据报。

  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/5iedu/p/7252989.html
Copyright © 2011-2022 走看看