UDP的报文观测

DNS的工作原理

DNS(Domain Name System)即域名系统,负责网站名与对应服务器IP之间的互相解析。
  第一步:客户机对提出域名解析的请求,并将该请求发送到本地的域名服务器。
  第二步:当本地的域名服务器收到请求后,就先查询本地缓存,如果有纪录,就直接把查询结果返回。
  第三步:如果本地缓存中没有纪录,就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。
  第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有纪录,返回相关的下级的域名服务器的地址。
  第五步:重复第四步的操作,直到找到正确的纪录。
  第六步:本地域名服务器把返回的结果保存到缓存,将结果返回给客户机。

UDP的报文结构

搭建相应拓补
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
UDP使用客户端/服务器模式通信,由客户端应用程序向服务器进程请求服务.udp客户端进程从可用端口中随机挑选一个端口号,作为会话的源端口,而目的端口通常是分配给服务器进程的公认端口或已注册的端口。当服务器端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报文的伪头部进行计算。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值