当前位置:网站首页 > 编程语言 > 正文

udp跨网段传输(udp传输层)



UDP(User Datagram Protocol,缩写为UDP),是一种用户数据报协议,又成用户数据报文协议。

它是一个简单的面向数据报的传输层协议,正式规范为RFC 768,是用户数据协议,也是非连接协议。(TCP是连接协议)

UDP是不可靠的,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。

UDP的数据传输方式,发送端生产数据,接收端从网络中抓取数据。

UDP的特点,具有结构简单、无校验、速度快、容易丢包、可广播。

(1)可作为DNS、TFTP、SNMP。

(2)可用于视频、音频、普通数据的传输。

UDP报文头

android udp 广播发送跨网段 udp协议支持广播发送数据_网络协议

UDP的报文头长度,如上图,第二行、第三行分别为32个bit的长度,总共为64位。0~15存储发送源的数据,16~31存储的是接受者的数据。32~47存储的是字节的长度。48~63存储的是头部与数据的校验字段。

UDP包最大长度

可存储 16位 -> 2字节长度的信息;即 2^16-1 = 64k-1 = 65536-1=65535。但由于自身协议占用了:32+32位 = 64位 = 8字节,所以UDP分包后最大的一次传输数据大小为: 65535-8= 65507byte。

(1) DatagramSocket

这是用于接收与发送UDP的类,主要作用是负责发送某一个UDP包,或者接收UDP包。注意,UDP的API并没有合并到Socket API中。

  • DatagramSocket()     创建简单实例,不指定端口和IP
  • DatagramSocket(int port)     创建监听固定端口的实例
  • DatagramSocket(int port, InetAddress localAddr)    创建固定端口指定IP的实例
  • receive( DatagramSocket d) : 接收
  • send(DatagramSocket d) : 发送
  • setSoTimeout(int timeout): 设置超时,毫秒
  • close() : 关闭、释放资源

(2)DatagramPacket

其主要用于处理报文。即将 byte 数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成 byte 数组。它既是UDP的发送实体,也是接收实体。

  • DatagramPacket(byte[] buf,int offset, int length, InetAddress address, int port) 前面3个参数指定 buf 的使用区间,后面两个参数指定目标机器地址与端口
  • DatagramPacket(byte[] buf,int length, SocketAddress address)   前面3个参数指定 buf 的使用区间, SocketAddress 相当于 InetAddress+Port
  • setData(byte[] buf, int offset, int length) 指定 buf 中有效的那部分数据
  • setData(byte[] buf)   不指定有效长度,从0开始
  • setLength(int length) 单独设置 buf 有效的区间有多长
  • getData() 、getOffset()、 getLength()   data、offset、length的返回
  • setAddress( InetAddress iaddr) 、setPort(int iport) 设置目标的地址和端口
  • getAddress()、getPort()   返回目标的地址和端口
  • setSocketAddress(SocketAddress address)   SocketAddress 相当于 InetAddress+Port
  • getSocketAddress()

所谓单播,就是两台电脑之间进行点对点的传输数据,这两台电脑之间传输数据的整个过程,是不为其他电脑(主机)所感知的。

所谓多播,也可以叫组播。是同时给一组设备发送信息。

所谓广播,就是给所有的设备都发送信息。比如:给局域网内的所有设备都发送相同的数据。

三种方式的区别主要是在IP地址上,其IP地址类别如下:

android udp 广播发送跨网段 udp协议支持广播发送数据_android udp 广播发送跨网段_02

(1)受限的广播地址: 255.255.255.255 ,该地址只能被局域网内的设备主动去接收到。

(2)C网广播地址一般为: XXX.XXX.XXX.255(192.168.1.255)

(3)D类IP地址为多播预留

android udp 广播发送跨网段 udp协议支持广播发送数据_udp_03

上图中的 Subnet Mask也就是子网掩码可知,当前网络数据C类IP地址。

android udp 广播发送跨网段 udp协议支持广播发送数据_UDP_04

一个ip地址是由4个比特,也就是32个字节长度,即一个 int值所构成。

  • 比如IP地址为: 192.168.124.7,
  • 子网掩码就是: 255.255.255.0,由IP地址可知为C类IP地址,从而得出子网掩码
  • 网络地址为 192.168.124.0 ,用子网掩码与IP地址进行与运算可得出网络地址
  • 广播地址为: 192.168.124.255,由 255.255.255.0 的最后一位可知其最后一个字节全是0,最大可为255,也就是广播地址为 192.168.124. xxx 的 xxx=255。
  • 如果子网掩码不为255.255.255.0,比如: 子网掩码为 : 255.255.255.192,那么广播地址就是 192.168.124.63.
  • 广播地址运算方式为:
  • 255.255.255.192 -> ...
  • 可划分网段: 2^2 = 4个 (两个1)
  • 0~63(4个字节长度)、64~127、128~191、 192~255
  • 所以广播地址最后一位不一定是255

主机一: 192.168.124.7,子网掩码: 255.255.255.192

主机二: 192.168.124.100,子网掩码:255.255.255.192

主机一广播地址: 192.168.124.63

主机二广播地址: 192.168.124.127

上述的两个广播地址之间是无法互通的。

到此这篇udp跨网段传输(udp传输层)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 2258xt固件全套(2258h固件)2025-08-11 14:45:09
  • bt1120协议详解 422(bt1200dqt-2c)2025-08-11 14:45:09
  • wifi字典爆破(wifi字典爆破app)2025-08-11 14:45:09
  • 换国内驾照都考什么(国内驾照换国际驾照需要什么)2025-08-11 14:45:09
  • 速排小蚂蚁编辑器手机版(速排小蚂蚁编辑器怎么粘贴文字)2025-08-11 14:45:09
  • ubuntu怎么装qt(Ubuntu怎么装回Windows)2025-08-11 14:45:09
  • ip域名查询网站入口(ip或域名查询网)2025-08-11 14:45:09
  • bt601接口(bt565接口定义)2025-08-11 14:45:09
  • 圈圈1在电脑上怎么打出来(圆圈1在电脑上怎么打)2025-08-11 14:45:09
  • 发送验证码一直收不到(为什么发送验证码,手机一直没收到?)2025-08-11 14:45:09
  • 全屏图片