软件无线电实例:UDP 数据报生成与分析

本节以一个简单例子展示如何使用自定义的 sock 程序生成 UDP 数据报,并利用 tcpdump 工具观察数据报内容。

步骤一:生成 UDP 数据报

在 bsdi 系统上,我们使用以下命令生成 UDP 数据报:

# 第一次执行
sock -v -u -i -n 4 svr4 discard connected on 140.252.13.35.1108 to 140.252.13.34.9 
# 第二次执行
sock -v -u -i -n 4 -w 0 svr4 discard connected on 140.252.13.35.1110 to 140.252.13.34.9

参数解释:

  • -v: 启用 verbose 模式,显示详细信息,例如 ephemeral 端口号。
  • -u: 指定使用 UDP 协议,而非默认的 TCP 协议。
  • -i: 指定程序以源模式发送数据,而非读写标准输入输出。
  • -n 4: 指定发送 4 个数据报(默认值为 1024)。
  • svr4 discard: 指定目标主机为 svr4,并使用 discard 服务(详见 1.12 节)。
  • -w 0: 指定写入长度为 0 的数据报(仅在第二次执行时使用)。

第一次执行命令时,程序会使用默认长度(1024 字节)发送 4 个数据报。第二次执行时,程序会发送 4 个长度为 0 的数据报。

步骤二:使用 tcpdump 观察数据报

使用 tcpdump 工具可以捕获并分析网络流量,包括我们刚刚生成的 UDP 数据报。图 11-6 展示了 tcpdump 的输出结果。

(图 11-6 向一个方向发送 UDP 数据报时的 tcpdump 输出)

结果分析:

  • tcpdump 输出显示,程序成功发送了 4 个 1024 字节的数据报和 4 个长度为 0 的数据报。
  • 每个数据报之间间隔几毫秒,发送数据前没有建立连接,接收方也没有返回确认信息,体现了 UDP 协议无连接和不可靠的特点。
  • 每次运行程序时,源端的 UDP 端口号都不同(第一次为 1108,第二次为 1110),这是因为客户端程序使用的是 1024 到 5000 之间的 ephemeral 端口号(详见 1.9 节)。

结论:

通过这个简单例子,我们演示了如何使用 sock 程序生成 UDP 数据报,并使用 tcpdump 工具观察数据报内容。