آموزش جامع BLE

پروتکل ATT در BLE: Attribute، Handle، Read، Write و MTU

Attribute و Handle را درک کنید، Read و Write و Error Response را بشناسید و اثر MTU را با تحلیل پکت ATT در Wireshark ببینید.

فهرست مطالب
نمای واقعی ماژول ESP-WROOM-32 و آنتن چاپی آن روی برد توسعه.
نمای واقعی ماژول ESP-WROOM-32 و آنتن چاپی آن روی برد توسعه. عکس: Brian Krent؛ منبع Wikimedia Commons؛ CC BY-SA 4.0. محتوای عکس تغییر نکرده است؛ نسخهٔ نمایشی ویکی‌مدیا استفاده شده است. این عکس مستند اجرای آزمایش LCENJ نیست.
مرحله 8 از ۲۰ مسیر تسلط بر BLE

ATT زبان پایه دسترسی به داده در BLE است. سرور یک جدول مرتب از Attributeها دارد و کلاینت با Handle آن‌ها را می‌خواند یا می‌نویسد. GATT ظاهر سطح بالاتر همین جدول است.

Attribute و Handle

هر Attribute یک Handle یکتا در جدول Attribute همان سرور، یک Type یا UUID، سطح دسترسی و Value دارد. Handle عددی 16 بیتی است و جای Attribute را در جدول مشخص می‌کند. Handle بین نسخه‌های Firmware تضمین ثابت ندارد؛ کلاینت حرفه‌ای سرویس را Discover می‌کند و عدد را حدس نمی‌زند.

Read و Write

Read Request یک Handle را می‌فرستد و سرور Read Response برمی‌گرداند. Write Request پاسخ موفقیت یا خطا دارد، اما Write Command یا Write Without Response برای سرعت بیشتر پاسخ ATT نمی‌خواهد. انتخاب عملیات باید بر اساس اهمیت تأیید، نرخ داده و تحمل از دست‌رفتن باشد.

Error Response

اگر Handle وجود نداشته باشد، مجوز کافی نباشد یا طول نامعتبر باشد، سرور Error Response شامل Opcode درخواست، Handle و Error Code می‌فرستد. ثبت این سه مقدار معمولاً سریع‌تر از حدس‌زدن علت خطا است. خطای امنیتی را با Pairing اشتباه نگیرید؛ ممکن است Characteristic به Encryption نیاز داشته باشد.

MTU و تکه‌تکه‌شدن

ATT MTU بیشترین اندازه PDU در ATT است. مقدار پیش‌فرض کوچک است و دو طرف می‌توانند مقدار بزرگ‌تر را مذاکره کنند. Payload مفید هر عملیات چند بایت کمتر از MTU است، چون Opcode و Handle نیز فضا می‌گیرند. افزایش MTU بدون Data Length و بافر کافی همیشه Throughput را بالا نمی‌برد.

تمرین با Sniffer

یک Read ساده در ابزار موبایل انجام دهید. در Capture ابتدا ATT Read Request را پیدا کنید، Handle را یادداشت کنید و سپس Read Response را باز کنید. بعد MTU Exchange را پیدا و اندازه توافق‌شده را با طول واقعی بسته‌ها مقایسه کنید.

Read و Notification را از روی بایت بخوانید

Handle شناسه یک Attribute در جدول همان سرور است؛ به هر اتصال، جدول مستقل تازه‌ای نسبت ندهید. Handleهای معتبر در محدوده 0x0001 تا 0xFFFF هستند. بعد از تغییر دیتابیس GATT باید کش کلاینت نیز طبق سازوکارهای پروتکل معتبر بماند.

Read Request:  0A 25 00
Read Response: 0B C4 09
Notification:  1B 25 00 C4 09

در این مثال فرضی، Handle مقدار 0x0025 و داده 0x09C4 یعنی ۲۵۰۰ است. فقط طبق قرارداد این مثال، ۲۵۰۰ معادل ۲۵٫۰۰ درجه است؛ ATT خودش واحد دما را تعیین نمی‌کند. پاسخ Read، Handle را دوباره حمل نمی‌کند.

عملیاتسربار داخل ATTبیشینه Value در MTU=23
Notification / Write معمولی۱ بایت Opcode + دو بایت Handle۲۰ بایت
Read Response۱ بایت Opcode۲۲ بایت

MTU مؤثر حاصل مذاکره دو طرف است. اگر یکی ۱۸۵ و دیگری ۲۴۷ را پشتیبانی کند، مقدار توافقی بیشتر از ۱۸۵ نمی‌شود؛ بزرگ‌شدن MTU نیز جای بررسی Data Length و بافر را نمی‌گیرد.

پرسش و پاسخ مقاله

سوال فنی خود را مطرح کنید

پرسش‌ها و پاسخ‌ها پس از بررسی مدیر منتشر می‌شوند. نویسنده، پیش‌نویس در انتظار بررسی را می‌بیند.

هنوز پرسش تاییدشده‌ای برای این مقاله ثبت نشده است.