• 第11章 UDP:用户数据报协-----读书笔记


    1.分片
    应用程序只关心IP数据报的长度,如果它超过MTU值,那么就要对数据包进行分片。

    2.UDP首部字段图:


    (16位源端口号+16位目端口号+16位UDP长度+16位UDP校验和+数据)


    3.UDP校验和
    UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。


    (UDP伪首部+UDP首部+数据+填充字节)
    udp打印出值为0,则发送端没有计算校验和;1位已计算。
    不要完全相信数据链路(如以太网,令牌环等)的 C R C检验。应该始终打开端到端的检验和功能。

    4.IP数据报及分组的关系:
    ip数据报是指iP层端到端的传输单元(在分片之前和重新组装之后),分组是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的 I P数据报,也可以是I P数据报的一个分片。


    (UDP分片举例)

    5.ICMP不可达差错(需要分片)
    MTU发现机制:当设备收到一份需要分片的数据报,但又在IP首部设置了不分片(DF)标志时,如果某个程序需要判断到达目的端的路途中最小MTU多少。


    (需要分片但又设置不分片标志比特时的ICMP不可达差错报文格式)

    6.借助traceroute来判断对端MTU值
    如第5点所属,当DF标志位1,但数据报确实需要分片时,需要返回一个icmp MTU值为0的不可到打包。那么借助tracroute向目的地址发送不同的MTU值,可判断对端真实的MTU值。

     


    (MTU符合的时候,将到达下一跳)

    7.ICMP源站抑制差错
    当一个系统(路由器或主机)接受数据报的速度比其处理数据的速度快时,系统可能会发送icmp源站抑制差错报文。使用UDP很容易产生这样的ICMP差错。



    (ICMP源站抑制差错报文格式)



    (来自路由器s u n 的ICMP源站抑制)

    8.(现网)H3C默认MTU值为1500。当数据大小为1500-20(IP头部)=1480时,则需要分片。每个分片为1500,数据大小为1480字节。

    1.其实一个标准的以太网数据帧大小是:1518,头信息有14字节,尾部校验和FCS占了4字节,所以真正留给上层协议传输数据的大小就是:1518 - 14 - 4 = 1500

    2.在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。我们从下到上分析一下:
     在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,46+18=64是以太网帧的最短帧长,1500+18=1518是最大帧长。也就是说数据帧的内容最大为1500,即MTU(Maximum Transmission Unit)为1500;
      (可是为什么我用wireshark抓下的包看到的帧头部是14字节,木有校验位4位?!,最短帧长是62?!)
     在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;
     在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;
     所以,在应用层,你的Data最大长度为1472。
     (当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)。
     从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)

  • 相关阅读:
    while和do while习题
    Flexigrid折行显示问题
    【Cocos2d-x游戏引擎开发笔记(25)】XML解析
    ruby简单的基本 6
    原因好消息: PSP游戏自己主动算法设计(两)
    《约会专家》拖车【约会宝典】总结
    C++在stack的deque实现
    hdu 4869
    SQL Server 2008杀数据库连接
    BestCoder-Round#33
  • 原文地址:https://www.cnblogs.com/key-network/p/11889988.html
Copyright © 2020-2023  润新知