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

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 و بافر را نمیگیرد.
پرسش و پاسخ مقاله
سوال فنی خود را مطرح کنید
پرسشها و پاسخها پس از بررسی مدیر منتشر میشوند. نویسنده، پیشنویس در انتظار بررسی را میبیند.
هنوز پرسش تاییدشدهای برای این مقاله ثبت نشده است.