MicrotCP adalah tumpukan jaringan TCP/IP yang saya mulai bangun sebagai latihan pembelajaran saat menghadiri kursus jaringan komputer di Università Degli Studi di Napoli Federico II. Ini hanya proyek hobi dan dimaksudkan untuk menjadi minimal, namun lengkap, implementasi.
Pada saat ini microtcp mengimplementasikan ARP (RFC 826, lengkap), IPv4 (tidak ada fragmentasi), ICMP (minimum yang diperlukan untuk membalas ping) dan TCP (lengkap tetapi tidak diuji stres). Perhatikan bahwa "lengkap" tidak boleh dimaksudkan sebagai "sepenuhnya sesuai" tetapi hanya sebagai ukuran kemajuan pada semua fitur utama. Misalnya, ini cukup lengkap untuk menangani lalu lintas HTTP di jaringan lokal (lihat contoh/microhttp untuk mengetahui lebih banyak).
MicrotCP dapat berjalan di Windows dan Linux di samping tumpukan jaringan OS. Untuk merutekan lalu lintas jaringan ke MicrotCP, proses menjalankannya berperilaku sebagai host virtual dengan alamat IP sendiri. Ini dilakukan dengan menggunakan perangkat tap, yang hadir di Linux dan perlu diinstal pada Windows. Seharusnya sangat mudah untuk mengadaptasi microtcp untuk berjalan pada mikrokontroler tetapi belum mencoba. Impiannya adalah untuk melayani blog saya dari papan STM32!
Jika Anda menggunakan Windows, Anda perlu menginstal driver tap yang disediakan oleh OpenVPN dan instanciate Virtual NIC sehingga microtcp dapat terhubung ke sana saat dimulai. Untuk membangun proyek dari sumber, pastikan Anda mengkloning repositori dengan submodules
git clone https://github.com/cozis/microtcp.git --recursivedan kemudian lari
make Anda akan membutuhkan make dan cmake agar berfungsi. Jika semuanya berjalan dengan baik, Anda akan menemukan file perpustakaan libtuntap.a , libmicrotcp.a dan file header tuntap.h , tuntap-export.h , microtcp.h in out/ .
Microtcp menggunakan antarmuka soket biasa yang diketahui oleh programmer jaringan, perbedaan utama yang Anda butuhkan untuk secara eksplisit instanciate jaringan tumpukan dan lulus pegangannya.
Berikut adalah server gema sederhana yang menunjukkan penggunaan dasar:
#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 ;
} Ini harus cukup mudah untuk dipahami. Satu hal mungkin perlu dicatat adalah bahwa microtcp_open berperilaku sebagai socket+bind+listen sekaligus untuk mengatur server TCP yang mendengarkan.
Ada lebih dari satu cara untuk mengatur tumpukan, cara utama adalah microtcp_create yang menciptakan jaringan virtual inferface pada OS host dengan IP 10.0.0.5/24 dan host virtual untuk proses microtcp di 10.0.0.4/24. Anda dapat membuka Wireshark pada NIC virtual untuk memeriksa lalu lintas antara host dan prosesnya.
Dimungkinkan juga untuk mengonfigurasi tumpukan menggunakan microtcp_create_using_callbacks , yang memungkinkan Anda secara eksplisit memberikan frame L2 input untuk itu dan menerima bingkai dalam buffer. Ini adalah bagaimana seseorang akan mengonfigurasi tumpukan untuk dijalankan pada mikrokontroler.
Setiap contoh microtcp (tanpa mempertimbangkan panggilan balik) sepenuhnya terisolasi dari yang lain, oleh karena itu, jika implementasi panggilan balik spesifik Anda memungkinkannya, Anda dapat memiliki sebanyak mungkin contoh!
Masih belum ada infraktruktur pengujian. Cara saya mengujinya adalah dengan menyiapkan server HTTP atau Echo dan menekankannya sampai sesuatu pecah saat menangkap apa yang terjadi menggunakan Wireshark.