MicroTCP عبارة عن مكدس شبكة TCP/IP ، لقد بدأت في إنشاء تمرين تعليمي أثناء حضور دورة شبكات الكمبيوتر في Università Degli Studi Di Napoli Federico II. إنه مجرد مشروع هواية ويهدف إلى أن يكون مجرد تطبيق أدنى ، ولكنه كامل.
في هذه اللحظة ، تقوم MicroTCP بتنفيذ ARP (RFC 826 ، كاملة) ، IPv4 (بدون تفتت) ، ICMP (الحد الأدنى اللازم للرد على الأصوات) و TCP (كاملة ولكن لا يتم اختبارها). لاحظ أنه لا ينبغي أن يكون المقصود "الكامل" "متوافقًا تمامًا" ولكن كقياس للتقدم في جميع الميزات الرئيسية. على سبيل المثال ، اكتمل بما يكفي للتعامل مع حركة مرور HTTP على شبكة محلية (ابحث في أمثلة/microHTTP لمعرفة المزيد).
يمكن أن يعمل MicroTCP على Windows و Linux بجانب مكدس شبكة نظام التشغيل. لتوجيه حركة مرور الشبكة إلى MicroTCP ، تتصرف العملية التي تشغلها كمضيف افتراضي مع عنوان IP الخاص به. يتم ذلك باستخدام جهاز TAP ، والذي يأتي مدمج في Linux ويجب تثبيته على Windows. يجب أن يكون من السهل جدًا تكييف MicroTCP لتشغيله على متحكمين ولكن لم يحاول حتى الآن. الحلم هو خدمة مدونتي من لوحة STM32!
إذا كنت على Windows ، فأنت بحاجة إلى تثبيت برنامج تشغيل TAP الذي يوفره OpenVPN وتأسيس NIC افتراضي بحيث يمكن لـ MicroTCP الاتصال به عند بدء تشغيله. لإنشاء المشروع من المصدر ، تأكد من استنساخ المستودع بالفيروسات الفرعية
git clone https://github.com/cozis/microtcp.git --recursiveثم ركض
make ستحتاج إلى كل من make و cmake حتى يعمل. إذا سارت الأمور على ما يرام ، فستجد ملفات المكتبة libtuntap.a و libmicrotcp.a وملفات الرأس tuntap.h ، tuntap-export.h ، microtcp.h in out/ .
يستخدم MicroTCP واجهة المقبس المعتادة أي مبرمج الشبكة على دراية به ، والفرق الرئيسي هو أنك تحتاج إلى إنشاء مكدس الشبكة بشكل صريح وتمرير مقبضه.
إليك خادم صدى بسيط يعرض الاستخدام الأساسي:
#include <microtcp.h>
int main ( void )
{
microtcp_t * mtcp = microtcp_create ( "10.0.0.5" , "10.0.0.4" , NULL , NULL );
if ( mtcp == NULL )
return -1 ; // Couldn't create MicroTCP instance
uint16_t port = 8081 ;
microtcp_socket_t * server = microtcp_open ( mtcp , port );
if ( server == NULL ) {
microtcp_destroy ( mtcp );
return -1 ;
}
while ( 1 ) {
microtcp_socket_t * client = microtcp_accept ( server );
if ( client == NULL )
break ;
char buffer [ 1024 ];
int num = microtcp_recv ( client , buffer , sizeof ( buffer ));
if ( num > 0 ) {
microtcp_send ( client , "echo: " , 6 );
microtcp_send ( client , buffer , num );
}
microtcp_close ( client );
}
microtcp_close ( server );
microtcp_destroy ( mtcp );
return 0 ;
} يجب أن يكون هذا مستقيمًا إلى الأمام لفهم. قد يكون هناك شيء واحد يستحق الإشارة إلى أن microtcp_open يتصرف باعتباره socket+bind+listen في وقت واحد لإعداد خادم TCP الاستماع.
هناك أكثر من طريقة لإعداد المكدس ، وهي الطريقة الرئيسية هي microtcp_create التي تنشئ شبكة افتراضية على نظام التشغيل المضيف مع IP 10.0.0.24 ومضيف افتراضي لعملية MicroTCP عند 10.0.0.4/24. يمكنك فتح Wireshark على NIC الظاهري لتفقد حركة المرور بين المضيف والعملية.
من الممكن أيضًا تكوين المكدس باستخدام microtcp_create_using_callbacks ، مما يتيح لك توفير إطارات L2 الإدخال بشكل صريح واستلام الإطارات في المخزن المؤقت. هذه هي الطريقة التي يقوم بها المرء بتكوين المكدس لتشغيله على متحكم.
يتم عزل كل مثيل من MicroTCP (دون النظر في عوامل الاسترجاعات) تمامًا عن الآخرين ، لذلك ، إذا كان تطبيق رد الاتصال الخاص بك يسمح بذلك ، فيمكنك الحصول على العديد من الحالات كما تريد!
لا يوجد أي اختبار تحتية. الطريقة التي أختبرها هي إعداد خادم HTTP أو Echo والتأكيد عليه حتى ينكسر شيء ما أثناء التقاط ما حدث باستخدام Wireshark.