UDP 报文观测

本文介绍了通过模拟网络拓扑来观察UDP报文的过程。在DNS服务器中设置映射后,当客户端请求www.cisco.com时,分析了发送和响应的数据报。重点讲解了UDP数据报的结构,包括首部字段的4个组成部分——源端口、目的端口、长度和校验和。
摘要由CSDN通过智能技术生成

1. 搭建一个简单网络拓扑在这里插入图片描述
在DNS服务器中添加 DNS 映射,DNS 的工作原理是 PC 在浏览器中输入网址后,请求服务器解析服务器所在地址。
在这里插入图片描述
2. 切换到 Simulation 模式,在客户端的 Web Browser 中输入 www.cisco.com 后,观察 UDP 数据报。在这里插入图片描述
客户端发送的数据报
在这里插入图片描述

DNS服务器回应的数据报
在这里插入图片描述
(1) UDP 数据报有两个字段:数据字段和首部字段。首部字段有 8个字节,由 4个字段组成,每个字段都是 2个字节。
(2) SOURCE PORT 为 UDP 源端口,DESTINATION PORT 为 UDP 目的端口,LENGTH 为 UDP 长度,CHECKSUM 为 UDP 校验和。

下面是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、付费专栏及课程。

余额充值