UDP(User Datagram Protocol,缩写为UDP),是一种用户数据报协议,又成用户数据报文协议。
它是一个简单的面向数据报的传输层协议,正式规范为RFC 768,是用户数据协议,也是非连接协议。(TCP是连接协议)
UDP是不可靠的,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。
UDP的数据传输方式,发送端生产数据,接收端从网络中抓取数据。
UDP的特点,具有结构简单、无校验、速度快、容易丢包、可广播。
(1)可作为DNS、TFTP、SNMP。
(2)可用于视频、音频、普通数据的传输。
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地址类别如下:
(1)受限的广播地址: 255.255.255.255 ,该地址只能被局域网内的设备主动去接收到。
(2)C网广播地址一般为: XXX.XXX.XXX.255(192.168.1.255)
(3)D类IP地址为多播预留
上图中的 Subnet Mask也就是子网掩码可知,当前网络数据C类IP地址。
一个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传输层)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/82120.html