شبکه مش رادیو SDR چیست؟ (مبتدی)
در یک شبکه مش رادیو دیجیتال، هر نود یک SDR (USRP B200 یا RTL-SDR با TX مثل HackRF) دارد که میتواند هم ارسال و هم دریافت کند. GNU Radio لایه فیزیکی (مدولاسیون OFDM یا GMSK) را پیادهسازی میکند. یک MAC Layer ساده روی Python پیامها را بستهبندی کرده و مسیریابی میکند.
این رویکرد برای تحقیقات شبکههای رادیویی ارتش، هواپیماهای بدون سرنشین مدنی، و شبکههای اضطراری جالب است. USRP B200 حدود ۶۰۰ دلار است اما میتوان با HackRF (۲۰۰ دلار) هم شروع کرد.
محصولی که میسازید
یک شبکه رادیو دیجیتال ۲ نودی با GNU Radio و USRP/HackRF.
- هزینه: HackRF One ≈ ۲۵۰ دلار (جایگزین ارزانتر)
- مدولاسیون: GMSK یا BPSK
- نرخ داده: ۱۰-۱۰۰kbps
MAC Layer ساده با Python
import struct, time
from gnuradio import gr, blocks, digital
class SimpleMACLayer:
"""MAC Layer ساده برای شبکه رادیو SDR"""
PREAMBLE = bytes([0xAA]*4)
SYNC = bytes([0x2D,0xD4])
def __init__(self, my_addr):
self.addr = my_addr
def frame(self, dst, payload: bytes) -> bytes:
"""ساخت فریم MAC"""
header = struct.pack("BBB", dst, self.addr, len(payload))
data = self.PREAMBLE + self.SYNC + header + payload
crc = sum(data) & 0xFF
return data + bytes([crc])
def deframe(self, raw: bytes):
"""باز کردن فریم"""
idx = raw.find(self.SYNC)
if idx < 0: return None
body = raw[idx+2:]
dst, src, ln = struct.unpack("BBB", body[:3])
if len(body) < 3+ln+1: return None
payload = body[3:3+ln]
crc_calc = sum(body[:-1]) & 0xFF
crc_recv = body[-1]
if crc_calc != crc_recv: return None
return {"dst":dst, "src":src, "payload":payload}
# استفاده:
mac = SimpleMACLayer(my_addr=1)
frame = mac.frame(dst=2, payload=b"Hello Node 2!")
print(f"Frame: {frame.hex()}")
decoded = mac.deframe(frame)
print(f"Decoded: {decoded}")
چکلیست راهاندازی
| بررسی | توضیح |
|---|---|
| GNU Radio نصب است؟ | sudo apt install gnuradio |
| HackRF/USRP شناسایی میشود؟ | hackrf_info یا uhd_find_devices |
| GMSK TX/RX Loop-back کار میکند؟ | آنتن کوتاه loop-back |
| پیام بین ۲ نود ارسال شد؟ | ۱ متر فاصله با آنتن کوچک |