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

udp跨网段传输(udp传输层)UDP User Datagram Protocol 缩写为 UDP 是一种用户数据报协议 又成用户数据报文协议 它是一个简单的面向数据报的传输层协议 正式规范为 RFC 768 是用户数据协议 也是非连接协议 TCP 是连接协议 UDP 是不可靠的 它一旦把应用程序发给网络层的数据发送出去 就不保留数据备份 UDP 在 IP 数据报的头部仅仅加入了复用和数据校验 字段

大家好,我是讯享网,很高兴认识大家。



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

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

小讯
上一篇 2025-06-14 18:11
下一篇 2025-05-09 15:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/189699.html