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

原文地址:https://www.cnblogs.com/mercurytan/p/14236568.html