پیاده‌سازی پروتکل TCP در میکروکنترلر (TCP Server) به زبان C

قسمت 19
مشاهده سایر جلسات آموزش
4 بازدید
۱۴۰۴-۰۹-۱۵
3 دقیقه
  • نویسنده: مجتبی داشخانه
  • درباره نویسنده: ---

و اما نوبت به اجرای کد TCP می‌رسد. باتوجه‌به پیکربندی نرم‌افزار میکروکنترلر و به جهت سادگی (چون پیغام اول را کلاینت می‌فرستد)، حالت TCP Server را در میکرو پیاده‌سازی می‌کنیم. کلاینت (PC) یک ارتباط رو در پورت موردنظر رو باز میکنه (open)؛ تعدادی داده رو ارسال (TCP send) و سعی میکنه به همون تعداد داده بخونه و بعد ارتباط رو میبنده (close). برای اجرای این کد در محیط LabVIEW قطعه کد زیر را استفاده کرده‌ایم:

پیاده‌سازی پروتکل TCP در میکروکنترلر (TCP Server) به زبان C

تغییرات در لایه IP برای شناسایی TCP

در میکروکنترلر به درخواست ارتباط جواب مثبت میدیم و داده‌های ارسالی از طرف کامپیوتر رو به خودش برمیگردونیم (echo). اولین پیام دریافتی؛ اولین سگمنت از هندشیک شروع خواهد بود. کامپیوتر به‌عنوان کلاینت، درخواستی برای شروع ارتباط به میکروکنترلر ارسال میکنه، بالطبع اولین قدم اینه که در تابع IP_Process بررسی کنیم که آیا پکت فعلی (در پروتکل IP) یک پکت شامل سگمنت TCP هست یا نه؟ کد تابع IP_Process به‌صورت زیر تغییر میکنه:

تعاریف اولیه و ساختار هدر TCP

گام بعدی، تعریف ثوابتی مثل شماره پورت و بیت‌های بخش flags است؛

تعریف پورت و فلگ‌ها (Flags)

آفست Seq num رو هم مقدار ثابت 0x1A در نظر گرفتیم؛ هرچند بهتره این مقدار تصادفی انتخاب بشه. در بعضی مراجع مقدار آفست رو init seq num هم گفته‌اند. همچنین  ساختاری برای پردازش هدر TCP تعریف می‌کنیم و یک define برای به‌دست‌آوردن طول قسمت Options در صورت وجود.

پیاده‌سازی تابع TCP_Process

مطابق روالمون تا اینجا، تابعی بنام TCP_Process می‌نویسیم که کدهای این پروتکل رو اجرا کنه.

بررسی صحت پورت و Checksum

در این تابع؛ ابتدا دو مورد رو بررسی می‌کنیم. آیا پیغام، روی پورت مدنظر ما ارسال شده است؟ و آیا چک سام صحیح است؟

اگر این موارد صحیح باشد، وارد قسمت اصلی پردازش می‌شویم. بخش Flags رو در یک متغیر ذخیره می‌کنیم:

flag = htons(tcpFrame->flags);

1. مدیریت درخواست اتصال (SYN Packet)

پکت های دریافتی سه حالت خواهند داشت:

  • یا پیغام SYN دریافت و در پاسخ seq num ارسال میشه. مقدار window size هم 8192 اعلام شده که برای ما فعلاً بی‌اهمیت هست. در بخش Option هم، تنها گزینه MSS با مقدار 1460 فرستاده شده (20 بایت برای هدر TCP؛ 20 بایت برای هدر IP و 18 بایت سربار در فریم Ethernet ii لذا از 1518 بایت 1460 باقی می‌ماند).
شاید برای شما مفید باشد:
ریدایرکت کردن توابع stdio در STM32 | قسمت دهم آموزش STM32 با توابع HAL

2. دریافت داده و پاسخ اکو (PSH Packet)

  • یا داده‌های اصلی دریافت شده که عین آن به کامپیوتر برگشت داده می‌شود (echo). مقدار win Size همچنان ثابت هست؛ چون ما هر سگمنتی رو در لحظه پردازش می‌کنیم (اگر با wireshark سگمنت‌ها رو رصد کنید متوجه میشید که بیت push هم از طرف فرستنده همواره ست شده است). کد برای فهم آسان‌تر در ساده‌ترین حالت نوشته شده است:

3. پایان ارتباط (FIN Packet)

  • یا کامپیوتر با ارسال پرچم FIN درخواست پایان (با اجرای تابع Close TCP در کد داخل کامپیوتر) ارتباط را داده است؛ لذا ما هم با ست‌کردن بیت‌های FIN, RST ارتباط را می‌بندیم (Close). در این حالت ارتباط از سمت ما، تنها با یک پیام بسته می‌شود:

نکاتی درباره هندشیک و بیت ACK

  • توجه داشته باشید که باتوجه‌به نوع پیاده‌سازی؛ سگمنت دریافتی در مرحله سوم هندشیک؛ پاسخی ندارد!
  • در تمام سگمنت‌های ارسالی از سمت سرور (میکروکنترلر) بیت Ack یک خواهد بود، در سمت کلاینت نیز، تنها در سگمنت اول این بیت صفر است و در مابقی سگمنت‌ها این بیت یک می‌شود.

جمع‌بندی و قدم‌های بعدی

در اینجا به پایان این نوشتار رسیدیم؛ اگر وقتی باشه و حوصله‌ای؛ احتمالاً پروتکل HTTP هم به متن اضافه خواهد شد. اما اگر شما تونستید تا اینجا خودتون رو برسونید؛ به‌راحتی میتونید پروتکل‌های دیگه رو هم خودتون اجرا کنید. در ادامه به ضمیمه‌ها خواهیم پرداخت و در بخش نهایی نیز تمامی کدها قرار داده خواهند شد. موفق باشید.

اطلاعات
4
0
0
اشتراک و حمایت
profile نویسنده: مجتبی داشخانه متخصص الکترونیک

ویراستار: مریم میریان
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله