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

    UDP不提供可靠性:它把应用程序传给 IP层的数据发送出去,但是并不保证它们能到达目的地。
    应用程序必须关心 IP数据报的长度。如果它超过网络的 MTU,那么就要对 IP数据报进行分片。
    如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。
     
    UDP首部
     
    UDP校验和( 二进制反码计算和)
    • UDP检验和覆盖UDP首部和UDP数据。
      • IP首部的检验和,它只覆盖 IP的首部—并不覆盖IP数据报中的任何数据
    • UDP和TCP在首部中都有覆盖它们首部和数据的检验和。
    • UDP的检验和是可选的,而TCP的检验和是必需的。
     
     
    IP分片

     
    • IP把MTU与数据报长度进行比较,如果需要则进行分片。
    • 分片可以发生在原始发送端主机上,也可以发生在中间路由器上
    • 把一份 IP数据报分片以后,只有到达目的地才进行重新组装
    • 重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的。
     
    IP标志位中有,"不分片"位,如果将该位置1,IP将不对数据报进行分片。
    相反把数据报丢弃并发送一个ICMP差错报文(需要分片但设置了不分片位)
     
    • 当IP数据报被分片后,每一片都成为一个分组,具有自己的 IP首部,并在选择路由时与其他分组独立
    • 这样,当数据报的这些片到达目的端时有可能会失序
    • 但是在IP首部中足够的信息让接收端能正确组装这些数据报片。
     
     
    问题:
    • 一片分页丢失时,重转整个数据报
      • IP层本身没有重传机制
      • 超时重传时,上层并不知道丢失的哪个一片分页
        • 因为分页是在IP做的,并且是在中继路由器中做分页,
        • 因此IP层 也不知道要重传那些片。
      • 因此上层会将整个数据包重传过来。
     
    注:
    任何传输层首部只出现在第1片数据中
     
     
      • ICMP不可达差错(需要分片)
        • 当路由器收到一份需要分片的数据报,而在 IP首部又设置了不分片( DF)的标志比特。
        • 如果某个程序需要判断到达目的端的路途中最小MTU
          是多少—称作路径MTU发现机制,那么这个差错就可以被该程序使用。
      • UDP和ARP之间的接口,大多数的ARP实现在等待ARP应答时只保留最近传送给目的端的数据报
      • ICMP源站抑制差错报文
        • 当系统接收IP数据报的速率超过这些数据报被处理的速率时
  • 相关阅读:
    Python并发编程-IO模型-IO多路复用实现SocketServer
    Python并发编程-IO模型-非阻塞IO实现SocketServer
    Python并发编程-协程实现socketserver
    Pytho并发编程-利用协程实现简单爬虫
    Python正则表达式中的re.S
    Python-正则表达式
    django-模板初探
    django-response对象
    django-QueryDict 对象
    django-request对象
  • 原文地址:https://www.cnblogs.com/Aiapple/p/7284307.html
Copyright © 2011-2022 走看看