zoukankan      html  css  js  c++  java
  • UDP

    一、概述

    1、什么是UDP

    ​ UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务

    2、什么时候用UDP

    ​ 对速度要求比较高时使用UDP,比如视频聊天(流畅度优先时),qq聊天,dns域名解析等

    3、怎么用UDP

    ​ java socker实现udp编程(具体使用DatagramSocket )

    4、UDP的特点

    UDP 是无连接的,即发送数据之前不需要建立连接。

    UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

    UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。

    UDP 支持一对一、一对多、多对一和多对多的交互通信。

    UDP 的首部开销小,只有 8 个字节。

    image-20210105155053457

    5、UDP存在的问题

    1、没有拥塞控制。当很多主机都向网络发送高数据量的视频流时,网络很容易就占满,导致大家都无法接收

    2、是不可靠传输。需要引入确认机制改进UDP不可靠的问题

    二、UDP报文格式

    image-20210105155440131

    源端口:源端口号。在需要对方回信时。不需要时可用全0

    目的端口:目的端口号。这在终点交付报文时必须使用

    长度:UDP 用户数据报的长度,其最小值是8(仅有首部)

    检验和:检测 UDP 用户数据报在传输中是否有错。有错就丢弃

    ​ 另外UDP还有伪首部:

    即并不是真正的UDP报文首部信息,包含源ip地址,目的ip地址等信息。只是在计算校验和时,临时添加在UDP首部的

    三、UDP校验和的计算

    image-20210105160344955

    一、二进制反码求和?

    1、假设要传输的数据为1100,1010 。那么首先得到数据的反码为:0011,0101

    2、然后将0011 + 0101 ==》得到:1000 具体是这样的:(0+0=00 1+0=01 1+1=10)

    二、反码计算

    ​ 将以上的结果再求反码得到校验和: 0111。 那么传送的数据就是1100,1010,0111(校验和)

    三、怎么判断数据是否正确

    ​ 接收方收到之后,同样将数据进行二进制求和:即0011,0101,1000==》最后求和得到1111。如果全为1,那么说明数据是准确的

    四、抓包演示

    image-20210105162344263

    参考链接:

    https://zhuanlan.zhihu.com/p/64154915

    https://blog.csdn.net/stone_Yu/article/details/81611067

    https://blog.csdn.net/yjxsdzx/article/details/71937886

    https://www.jianshu.com/p/f1bd10f3d170

    https://blog.csdn.net/u012063703/article/details/45850343


    如果本篇博客有任何错误和建议,欢迎大佬们批评指正

    我是知逆,我们下期见

    Peace

  • 相关阅读:
    概率论与统计学---笔记
    实用概率论与数理统计学--笔记
    并发编程总结5-JUC-REENTRANTLOCK-3(非公平锁)
    并发编程总结4-JUC-REENTRANTLOCK-2(公平锁)
    并发编程总结3——JUC-LOCK-1
    DOCKER & SWARM1.2
    Docker
    hdfs命令
    并发编程总结2——java线程基础2
    并发编程总结1——java线程基础1
  • 原文地址:https://www.cnblogs.com/mercurytan/p/14236568.html
Copyright © 2011-2022 走看看