超声波网络 (TCP/IP on Audio)

简介: 我们借助于 Gnuradio 和一个麦克风和扬声器,展示了跨超声波频率的网络互连的实现. 这允许你通过一个音频连接来使用 TCP/IP,UDP 协议。

介绍

我们借助于 Gnuradio 和一个麦克风和扬声器,展示了跨超声波频率的网络互连的实现. 这允许你通过一个音频连接来使用 TCP/IP,UDP 协议。


为了实践这个教程,我们建议你使用Gnuradio的LiveDVD发行版(它就是一个已经简单安装了gnuradio的Ubuntu发行版). 这可以很容易的从 http://gnuradio.org/redmine/news/31 下载到. 首先你需要将我们为Gnuradio创建的补丁包下载到一个USB记忆棒上面. 你可以从 https://github.com/anfractuosity/ultrasonicnetworking/archive/master.zip 下载到这个补丁包. 为了使用这个补丁包,你需要root权限,因此请输入‘sudo bash’, 然后解压这个补丁包, 然后通过输入 ./setup.sh 简单的运行 setup.sh. 安装文件简单的为Gnuradio的分组编码器和译码器打上了补丁,以支持可变长的分组数据包。


运行完 setup.py 之后, 你就可以对 Gnuradio 进行初始化了, 这里你需要以root权限运行, 因此请输入 sudo gnuradio-companion. 而然后在你的第一台笔记本上面加载 a.grc。

图1 描述了我们使用超声波网络的图示. 我们现在将描述图中所示的每一块的功能. 第一块是左上角,TUNTAP PDU, 它允许你创建一个虚拟网络接口, 通过这个虚拟网络接口我们可以发送和接收包。


我们使用“PDU 到标记的流”这块功能来将来自虚拟NIC的包,转换成可以为编码补丁处理的二进制流. 我们不能直接将被标记流的输出附加到GFSK调制器上, 因为我们需要通过使用CRC向其中加入一个效验码,并且我们也需要添加一个序言和头到数据包上 – 这都是借助于数据包编码器的使用来实现的。

序言本质上就是一系列的位, 它可以在接收器的末端检测到, 为了将位正确的对齐到正确的字节码边界. 包编码器还在序言后面加入了一个头, 它使用字节的形式描述了包有多长.

图. 1

image.png

GFSK 调制器本质上就是进行频移键控调制。如你在图2中可以看到的, 被调制过的信号频率, 当一个 ’0′ 被发送时, 一个′1'就会被发送. 我们发现在使用笔记本电脑和麦克风扬声器的超声波网络环境中, FSK 的表现比 PSK 要好(相移键控Phase Shift Keying – 它利用的是相变来交换位), 这是另外的一种调制技术。

image.png

GFSK 块一个非常重要的方面是样本/符号的数量. 我们将这个设置为9. 它的意思是,调制器每接收一个符号,都将会生成9个样本. 这个数字越高信号对噪音越有弹性, 但是波特率相应的会越低(这本质上意味着它需要发送数据包的时间更长).

波特率表示每分钟被传输的符号数量。

然后我们使用合理重新采样器,来使得使得信号更具弹性. 每一个进入的样本, 它都会有 320 个输出.

我们使用了一个频率翻译FIR过滤器, 来翻译进入信号的频率. 我们通过carrier_tx来偏移信号, 在此例中是-19kHz. 这样可以让信号偏移出人类听力可及的范围。

因为在这一点上我们一直使用复数信号进行工作,我们需要将复数输出转换成声卡可用的浮点数输出。我们通过“复数转实数”块来实现它。

图的底部,描述了程序的接收器部分。它本质上也是执行了相同的功能,就是逆序了。

在“复数转实数”块后,仍然有2个其它块。乘常数块,可以让你将麦克风的输出乘上一个固定数。这个块之后是带通滤波器,它仅允许小范围的频率可以通到解调器,这有助于去除存在于麦克风输出中的大量噪音。

在图示3中,你会看到两张图片. 上面的图片展示了向信号传输器的输出,而下面的图片则展示了来自麦克风的输入(后面带上了一个适用于它的带通过滤器). 上面的图片的顶部还出现了一个滑块,让你可以用一个指定的值同来自麦克风的信号相乘. 当在使用两台相距甚远的笔记本电脑通信时这回很有用。

图示. 3

image.png

双工

图 4 描述了我们所用的全双工信号。在这个例子中,你可以看到传输所用的两个不同的频率,19kHz 与 18kHz。这允许两个笔记本同时发送他们自己的信号。

图 4

image.png

设置

在 Gnuradio-companion 里,你需要切换到 Build > Execute,来执行图中的例子。之后你需要对它为你创建的 tap0 接口指定一个 IP 地址。你需要通过终端来进行这个操作,例如输入

sudo ifconfig tap0 192.168.1.10

你需要在第二台笔记本 B 上执行同样的操作步骤,但这次不是加载 b.grc,而是使用 sudo ifconfig tap0 192.168.1.20 。

我们发现,最好是手工指定每台笔记本的 ARP 记录。为了指定一个 ARP 记录,在笔记本 A 上,执行 arp -s 192.168.1.20 -i tap0

你在两台笔记本上预置的拷贝补丁文件到 Gnuradio 里的安装脚本,和修改 TCP 选项一样,都是为了让 TCP/IP 可以工作在延迟非常大的网络上。

echo 100 > /proc/sys/net/ipv4/tcp_syn_retries

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

echo 100 > /proc/sys/net/ipv4/tcp_synack_retries


第一行是必要的,为了让客户端的 TCP 连接在关闭前,处于打开状态的时间长于默认的 20 秒。


测试

为了测试网络功能运行正确,我们推荐适用netcat. 测试 TCP/IP 连通性可以在笔记本电脑A上面使用 netcat -vv -l 10000, 而用笔记本电脑B上使用 netcat -vv 192.168.1.10 10000 连接它. 因为我们使用了详细(verbose )选项, netcat 将会在已经有同笔记本电脑A的连接被确认时通知你, 然后你就可以在两边都发送文本了.


Gnuradio 补丁包

由于Gnuradio提供的编码和解码补丁包只能工作于固定数量大小的数据, 为了支持对流标记的图取,对这些数据的修改是必要的. “PDU标记流”标记来自笔记本电脑段接口附上数据大小的打包. 编码/解码补丁包不能正常的处理这些标记, 因此为了读取这些标记,我们修改了数据包编码器, 并且生成了同来自笔记本电脑0帧相近大小的数据包. 而数据包解码器则解开数据包的封装, 并且用它的数据大小标记结果数据.

相关文章
|
5天前
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
41 2
|
16天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
47 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
10天前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
11天前
|
数据采集 安全 搜索推荐
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
35 2
|
13天前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
2月前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
71 5
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
63 3
|
2月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
120 3
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
103 2
|
2月前
|
数据采集 Java API
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。