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

    1.相关概念

    UDP数据包产生,上层应用产生数据,但是这与真正发送的IP数据报数量并没有什么联系,并且UDP报文并不是一种可靠的协议

    我们必须关注IP数据报的长度,如果超过MTU(在链路层的一种限制),则应该进行分片

    2UDP报文

    16位源端口号(发送进程)|16位目的端口号(接受进程)|16位UDP长度(指的是UDP数据报首部和数据的长度)|16位检验和(计算包括伪首部-><32位源IP地址,32位目的IP地址,4位0,八位协议,16位UDP长度>,如果校验和为0,则发送全1,如果发送的是0,则证明没有开启UDP,校验和采用IP数据保一样的校验方式)|数据(可以是奇数的数据,但是如果是奇数的数据,则在校验和的时候,应该填充字节)

    注意:现在的UDP校验功能一般是开启的


    典型的UDP数据报TCP/IP详解P110页

    bsdi.1108 (端口)> svr4.discard:udp 1024

    2:IP分片


    IP数据报超过了MTU,必须进行分片,列如在以太网中,MTU通常是1500

    举例

    bsdi.1116 > svr4.discard:udp 1473(frag 26304:1480@0+)

    bsdi.1116>svr4.discard:(frag 26304:1@1480)

    udp,即使用的是UDP协议,1473说明原来数据报的长度,因为MTU=1500,所以去掉IP首部,剩余1480,去掉UDP首部,剩余1472,所以超出一个字节需要进行分片

    ICMP:internet控制报文协议 PING 查看ICMP目的不可达差错(需要分片)

    3:应用程序采用MTU发现机制(应用程序使用UDP协议)

    在发送UDP的时候其实是最好不要分片的,因为分片会增加消耗,如果没有进行分片,则在遇到MTU较小的条件下,就会发送会ICMP目的段不可达差错报文,如果路由器支持返回下一跳MTU,则直接可以利用此MTU如果没有,则猜测一个,进行发送,采用MTU发现机制的UDP会定期设置DF(不准分片标志),以确定MTU是否发生变化。

    4:UDP和ARP之间的交互

    列如有 bsdi % sock -u -i -n1 -w8192 svr4 discard

    因为因为分成了六个报文,所以发送了六个ARP请求报文,但是在收到ARP应答报文的时候,只发送了一份
    UDP报文,这份UDP报文是分片之后最后的一份,,返回7个ARP应答,不需要理会,在收到UDP报文的时候,不管哪一段,接收端都应该启动一个定时器,如果定时器超时,还没有收到其他的
    UDP分片报文,则发挥ICMP组装超时报文(如果有这个功能的话)

    5:UDP服务器的设计

    UDP服务器采用输入队列方式处理接收到的数据,在这种方法中,会出现数据溢出,溢出的数据会进行丢弃

    UDP服务器可以限制本地IP,限制远端IP地址





  • 相关阅读:
    拍拍帐号信息查询PHP
    如何成为“一分钟经理人”?
    性能计数器注册表配置单元一致性失败(Performance counter registry hive consistency check failed )解决方案
    换个心境搞IT在IT职场如何打拼?
    变形金刚3 ——结尾擎天柱经典独白
    修改织梦(DEDE)的上一篇下一篇功能
    android 选择系统自带铃声和选择自定义铃声
    android开发常用方法
    输入特定年月返回该月的天数
    “心”字诀
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863536.html
Copyright © 2011-2022 走看看