• UDP协议详解


    目录

    网络原生的情况

    网络原生是不可靠的:

    网络是不安全的:

    一,UDP协议:User Datagram Protocol 用户报文协议

    UDP不可靠的原因

    1,UDP工作机制

     UDP的特点:

    UDP协议的应用场景:

    2,UDP的报头

    UDP协议的解包:

     UDP数据分用:UDP协议将数据交付给那个进程?

    UDP校验和:

    UDP没有发送缓冲区:

    UDP协议存在接收缓冲区:

     UDP发送数据报:

    UDP接收数据报:


    网络原生的情况

    :网络中的数据在路由器之间不停的路由转发,达到主机与主机之间的通信

    网络原生是不可靠的:

    1,对方不一定能收到,2,不能保证收到的顺序与发送顺序相同

    网络是不安全的:

    1,信息在路由器之间转发时,可以被他人修改,窃取和监听,2,别人可以伪造发送数据

    一,UDP协议:User Datagram Protocol 用户报文协议

            在host to host 连通的情况下,实现process to process (P2P)

    UDP不可靠的原因

            网络传输的本身时不可靠的,而UDP协议没有对信息传输做处理,因此,UDP协议是不可靠的

    1,UDP工作机制

     UDP的特点:

            不可靠,无连接,面向数据报文的(字符流),传输成本低

    • 分组首部开销小**,TCP首部20字节,UDP首部8字节。

    •  UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销

    • UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

    • UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息

    • UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。

    • UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。

    UDP协议的应用场景:

    UDP常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

    2,UDP的报头

    UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,
    1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
    2.目的端口:目的端口号,在终点交付报文的时候需要用到。
    3.长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
    4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。
    该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0.
    当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。
    如果接收方UDP发现收到的报文中的目的端口号不正确(不存在对应端口号的应用进程0,),就丢弃该报文,并由ICMP发送“端口不可达”差错报文给对方。
     

    UDP协议的解包:

            UDP协议的header一定是8字节,剩下的长度都是payload数据报文,

     UDP数据分用:UDP协议将数据交付给那个进程?

            UDP协议的目的端口,可以实现协议能到到达指定的进程。同时携带自己端口号,保证双方都可以进行通信

    UDP校验和:

            保证数传输的完整性和准确性,

            原理:利用hash函数,计算发送的数据与接收的数据的hash值是否相等,来判断接收与发送数据的hash值是否相等,CRC循环冗余码则是UDP校验发送数据是否准确到达接收方的一种校验手段。

    UDP没有发送缓冲区:

            应用层将数据报经过UDP协议,将UDP数据报发送成功,因为UDP没有发送缓冲区,所以应用层看到数据发送成功,只是说明数据报已经被传输层所接收。

    UDP协议存在接收缓冲区:

            接收方的应用层存在缓冲区,接收方的传输层在收到数据以后,会将收到的数据暂存到缓冲区,等待接收方应用层来读取数据。

     UDP发送数据报:

    (UDP协议会将数据报完完整整的发送,不会对数据报进行拆分,应用层发100K,传输层就一次性发送100k的数据)

    1,应用层接收数据报

    2,传输层将数据报(payload)添加协议头(16位本地端口,16位目的端口,16位数据报长度,16位的校验码,)

    3,将数据报封装成datagramPacket,发送到网络层

    4,网络层接收到数据报,通知应用层数据发送成功。

    UDP接收数据报:

    1,从网络层接收UDP数据报

    2,将数据报按照定长拆分成header和payload,

    3,读取发送方端口,目的端口,数据长度,校验码

    4,验证长度和校验码,无论数据是否出错,UDP协议都不会做出任何响应给发送方,所以发送方也不知道数据是否发送成功,没有得到接收的回应,所以说UDP是不可靠的。

  • 相关阅读:
    .NET 6使用ImageSharp给图片添加水印
    算法--冒泡排序
    rk版本编译系统
    导入excel工具类
    github desktop上传代码
    Python执行 nohup 导致僵尸进程问题. /usr/bin/sh -> /usr/bin/bash
    GeoTools快速入门
    主成分分析用于ERP研究的实用教程-机遇和挑战(附代码)
    分享几个通用个人简历模板|行业通用
    使用DocumentBuilderFactory解析XML浅谈
  • 原文地址:https://blog.csdn.net/qq_52655865/article/details/126034674