اینترنت اشیاء

پروتکل COAP

پروتکل COAP

مقدمه

در حوزه اینترنت اشیا پروتکل های مختلفی برای اتصال سنسور ها به یکدیگر، مورد استفاده قرار می گیرند.
اما تعدادی از آن ها از اهمیت و کارای بالاتری برخوردار می باشند.
پروتکل coap یکی از پرکاربرد ترین پروتکل ها در اینترنت اشیا است.
همچنین در سال های 2016,2017 و 2018 جز 5 پروتکل پر استفاده در اینترنت اشیا شده است.
پروتکل coap را رقیب پروتکل mqtt می دانند، هر کدام از آن ها با قابلیت هایی که دارند در جاهای مختلفی استفاده می شوند.
پروتکل mqtt از نظر باتری بسیار به صرف تر و کم مصرف تر از coap است.
mqtt بر پایه پروتکل tcp کار می کند، همین امر نشان می دهد که انتقال امن داده ها بر سرعت آن ها اولویت دارد.
در حالی که coap بر اساس udp است که باعت می شود سرعتی بالاتر و اما اطمینان کمتری نسبت به mqtt داشته باشد.
از coap برای ارتباطات M2M با Machine to Machine استفاده می شود.
coap از پروتکل dtls برای رمزنگاری خود استفاده می کند.

معماری coap

پروتکل coap بر مبنای req/resp کار می کند و از کامنت های Get, Post, Put و Delete برا دریافت اطلاعات استفاده می کند.
همین امر نشان می دهد که coap از پروتکل Rest API بهره می برد.
در پروتکل coap نحوه ارتباط اطلاعات بر اساس req/req است.
یعنی یک سمت از سمتی دیگر درخواست اطلاعات می کند و سمت دیگر به آن درخواست پاسخ می دهد.

یک نکته قابل توجه در ارتباط با coap این است که شما می توانید آن را تبدیل به پروتکل HTTP بکنید. شما می توانید با قرار دادن یک پروکسی سرور در بین سرور و سنسور ها از پروتکل HTTP برای ارتباط سنسور و سرور استفاده کنید.
همچنین شما می توانید از coap برای ارتباط نود ها (سنسور) به طور مستقیم با یکدیگر استفاده کرد و یا از coap برای ارتباط سنسور ها با سرور استفاده نمود.

لایه های مختلف coap

coap مانند mqtt در لایه application قرار دارد اما خود coap هم دارای دو لایه متفاوت می باشد.

massage: این نوع لایه با با udp و پیام ها سرو کار دارد.
این لایه از 4 نوع پیام پشتیبانی می کند.

  • CON (قابل تائید)
  • NON (غیر قابل تائید)
  • ACK (تائید)
  • RST (تنظیم مجدد)

لایه Massage

ابتدا این را بدانید که هر پیام coap دارای یک شناسه است که از پیام تکراری جلوگیری کند.
این لایه در دو حالت کار میکند.

الف: انتقال پیام قابل اعتماد:

در ابتدا یک پیام con از سمت کلاینت به سرور ازسال می شود.
پیام con با یک مشخصه خاص مانند 0*8c56 ارسال می شود و تا زمانی که یک پیام Ack و یا کلا جوابی با همان شناسه دریافت نشود، پیام con به سمت سرور ارسال خواهد شد.

اگر سرور در مدیریت درخواست های ورودی دچار مشکل شود و با پردازش آن ها به مشکل بر بخورد، یک پیام Rst به جای پیام Ack ارسال می کند و پیام con میتواند دوباره ارسال شود.

ب: حالت غیر قابل اعتماد:

در این خالت پیام های که از کلاینت ارسال می شوند هیچ نیازی به Ack سرور ندارند.
این پیام ها در واقع حاوی یک سری اطلاعات غیر مهم و غیر ضروری هستند که باید به سرور تحویل داده شوند.
در این دسته پیام اطلاعاتی وجود دارند که حاوی اطلاعات خوانده شده توسط سنسور ها است.
در این قسمت به جای پیام های con پیام های non از کلاینت ارسال می شوند.
پیام های non نیازی به ack سرور ندارند اما حتی این پیام ها نیز یک شناسه خاص دارند.

استفاده دیگر این پیام ها در زمانی است که نیاز به ack سرور نیست.
با این روش سرعت بیشتر و ترافیک شبکه بسیار کمتر می شود.

لایه req/resp

تا به اینجا مشخص شد که درخواست با یک پیام con یا non داده می شود.
در اینجا خود چندین حالت به وجود می آید که آیا سرور می تواند بلافصله جواب کلاینت را بدهد یا نه.
اگر جواب بلافاصله داده شود، در جواب پیام con یک پیام ack با همان شناسه داده می شود.
اما در صورت شکست و یا ناموفق بودن پیام یک پیام خطا از سمت سرور مانند شکل زیر به کلاینت داده می شود.

همان طور که می بینید در تمام پیام ها یک token وجود دارد که با شناسه پیام متفاوت می باشد.
در اینجا token برای مقایسه re/resp استفاده می شود.
شکل زیر نمایش گر ارسال درخواست و پاسخ کلاینت و سرور با استفاده از یک پیام non است.

در قسمت بالا گفته شد که اگر سرور نتواند بلافصله به پیام کلاینت پاسخ بدهد یک پیام خالی ack را به کلاینت ارسال می کند.
سپس اگر بعد از آن سرور جواب درست را در احتیار داشت آن را تحت یک پیام con به کلاینت ارسال می کند.
بعد از آن هم کلاینت هم یک پیام ack را به سرور می فرستد.

فرمت پیام ها در coap

Ver یا Version: یک عدد صحیح 2 بیتی بدون علامت است که شماره و نسخه coap را نشان می دهد.
T یا Type: یک عدد صحیح 2 بیتی است که نوع پیام را نشان می دهد. (NON ,CON ,ACK ,RST)
TKL یا Token Lrngth: این فیلد طول token را نشان میدهد و ممکن است بین 8-0 بیت باشد.
Code: این پارامتر از 8 بیت تشکیل شده است که به دو بخش 3 و 5 بیتی تقسیم می شود.
سه بیت اول عددی را تشکیل می دهند که به عنوان کلاس شناخته می شوند که مشابه HTTP Code است. به عنوان مثال (200, 404 و …)
و بخش 5 بیتی وضیعت پیام req/resp را نشان میدهد.

در شکل بالا مقدار 2.05 و Content برای بخش code است.
مقدار 2.05 همان 3 بیت اول و مقدار content همان 5 بیت دوم تشکیل دهنده بخش code است.
Massage ID: این فیلد هم به عنوان شناسه پیام است که از 16 بیت تشکیل شده است.

لیست تمام Code های req/resp پروتکل coap

  1. Method: 0.XX
    1. EMPTY
    2. GET
    3. POST
    4. PUT
    5. DELETE
    6. FETCH
    7. PATCH
    8. iPATCH
  2. Success: 2.XX
    1. Created
    2. Deleted
    3. Valid
    4. Changed
    5. Content
    6. Continue

    Client Error: 4.XX

    1. Bad Request
    2. Unauthorized
    3. Bad Option
    4. Forbidden
    5. Not Found
    6. Method Not Allowed
    7. Not Acceptable
    8. Request Entity Incomplete
    9. Conflict
    10. Precondition Failed
    11. Request Entity Too Large
    12. Unsupported Content-Format
    1. Server Error: 5.XX
      1. Internal Server Error
      2. Not Implemented
      3. Bad Gateway
      4. Service Unavailable
      5. Gateway Timeout
      6. Proxying Not Supported
    2. Signaling Codes: 7.XX
      1. Unassigned
      2. CSM
      3. Ping
      4. Pong
      5. Release
      6. Abort

     

ارسال پاسخ