UDP报文观测

一.UDP的段结构

在这里插入图片描述

  • 源端口: 16比特,表示发送方端口号
  • 目的端口:16比特,表示接收方端口号
  • 长度:16比特,表示包括UDP头在内的数据段的总长度
  • 校验和:16比特,该字段可选,不用时可置0

二.UDP的主要特点

1.UDP是无连接的协议。和TCP不同,使用UDP的通信双方在真正发送数据之前不需要先建立连接,可以直接发送数据。
2.UDP是不可靠的协议。UDP提供的传输服务只是“尽力而为”的,数据可能会丢失,重复,到达接收方的顺序也是不确定的。
3.UDP是面向报文的。UDP本身不会对数据进行分段,一次交付一个完整的报文。因此,即使应用层交给UDP的报文很长,UDP也是原样发送。
4.UDP支持交互性通信。除了传统的点对点通信外,UDP还支持一对多,多对一和多对多的通信方式。

三.搭建网络拓扑,配置设备参数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在DNS服务器中添加DNS映射
1.先将Server0中的DNS Service启动

2.在Name和Address中分别输入www.cisco.com和192.168.1.2
在这里插入图片描述
3.点击Add进行添加
在这里插入图片描述

四.将模拟器切换到Simulation模式,观察UDP报文

在PC0的Web Browser的命令行中输入www.cisco.com
在这里插入图片描述
如下图所示,点击GO:
在这里插入图片描述
由于协议栏中协议太多,我们可以对协议进行筛选,首先,点击Show All/None命令,隐藏全部协议,完成结果如下图所示:
在这里插入图片描述
然后,我们再点击Edit Filters命令,选择需要显示的协议“DNS”,完成结果如下图所示:
在这里插入图片描述
在这里插入图片描述
我们任意挑选一个UDP报文进行观测
在这里插入图片描述
如上图所示:

  • 端口:1027
  • 目的端口:53
  • 长度:0x25
  • 校验和:0x0
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java拼接UDP报文的基本步骤: 1. 定义UDP报文的结构:UDP报文报文头和数据部分组成,报文头包括源端口号、目标端口号、报文长度和校验和等信息。 ```java public class UdpPacket { private int sourcePort; private int destPort; private int length; private int checksum; private byte[] data; // getter and setter methods } ``` 2. 计算UDP报文长度和校验和:根据UDP报文的结构,计算报文长度和校验和等信息。 ```java public class UdpUtils { public static int calculateChecksum(UdpPacket packet) { // 计算校验和 } public static int calculateLength(UdpPacket packet) { // 计算报文长度 } } ``` 3. 拼接UDP报文:将报文头和数据部分组合成完整的UDP报文。 ```java public class UdpUtils { public static byte[] buildPacket(UdpPacket packet) { byte[] packetData = new byte[packet.getLength()]; ByteBuffer buffer = ByteBuffer.wrap(packetData); buffer.putInt(packet.getSourcePort()); buffer.putInt(packet.getDestPort()); buffer.putInt(packet.getLength()); buffer.putInt(packet.getChecksum()); buffer.put(packet.getData()); return packetData; } } ``` 4. 发送UDP报文:使用Java的DatagramSocket类创建UDP套接字,并使用UDP套接字发送UDP报文。 ```java public class UdpClient { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(); UdpPacket packet = new UdpPacket(); // 设置UDP报文内容 byte[] packetData = UdpUtils.buildPacket(packet); // 拼接UDP报文 InetAddress address = InetAddress.getByName("fpga_ip_address"); int port = 1234; DatagramPacket datagramPacket = new DatagramPacket(packetData, packetData.length, address, port); socket.send(datagramPacket); // 发送UDP报文 socket.close(); } } ``` 需要注意的是,在拼接UDP报文时需要按照网络字节序进行拼接,发送和接收UDP报文时也需要进行字节序的转换。此外,在计算UDP报文校验和时,需要使用UDP报文的伪头部进行计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值