UDP 协议不具备差错恢复机制,但能通过校验和判断网络传输是否出现丢包。UDP 的校验和由三部分内容求和得到,分别是伪首部、首部以及数据报文,如下图所示
为了弄清楚这些字段究竟是什么东西,下面我们使用 wireshark 来抓取一个 UDP 包来详细分析。为了制造这个 UDP 包,使用如下代码来向某 ip 地址发送一段数据(这个 ip 不一定非得实际存在,我们只需要观察基于 UDP 协议封装的数据,所以只要能被 wireshark 获取就行)
import java.io.IOException;import java.net.*;/**
* Created by wangx on 2017/10/19.
*/public class Client {private DatagramSocket socket;public Client() throws SocketException {socket = new DatagramSocket();}public void run() throws IOException {InetAddress ip = InetAddress.getByName("11.111.111.111");String message = "hello UDP";byte[] buffer = message.getBytes();DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, ip, 12345);socket.send(sendPacket);}public static void main(String[] args) throws IOException {new Client().run();}}
在运行之前,