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地址





  • 相关阅读:
    创建应用程序菜单与菜单融合 
    FastReport 内置函数的用法与注意
    Visual Basic 2005 中的程式語言加強功能
    写作关键用词及短语汇总
    序列化FastReport
    Only Time(惟有时光)
    bcd
    【分享】微软产品全部序列号,盖茨会哭的~~~
    TADOQuery parameter对象被不正确地定义。提供了不一致或不完整的信息
    两相四线步进电机驱动代码
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863536.html
Copyright © 2011-2022 走看看