MicroTCP는 TCP/IP 네트워크 스택입니다. 저는 Università Degli Studi di Napoli Federico II에서 컴퓨터 네트워킹 코스에 참석하는 동안 학습 운동으로 구축하기 시작했습니다. 취미 프로젝트 일 뿐이며 최소한의 완전한 구현이되기위한 것입니다.
이 순간 MicroTCP는 ARP (RFC 826, Complete), IPv4 (단편화 없음), ICMP (핑에 응답하는 데 최소) 및 TCP (완료하지만 스트레스 테스트되지는 않음)를 구현합니다. "완전한"은 "완전히 준수하는"것으로 의도되어서는 아니지만 모든 주요 기능에 대한 진보의 척도로 의도되어야합니다. 예를 들어, 로컬 네트워크에서 HTTP 트래픽을 처리 할 수있을 정도로 완전합니다 (자세한 내용을 알기 위해 예제/microhttp를 살펴보십시오).
MicroTCP는 OS의 네트워크 스택과 함께 Windows 및 Linux에서 실행할 수 있습니다. 네트워크 트래픽을 MicroTCP로 라우팅하기 위해 실행되는 프로세스는 자체 IP 주소가있는 가상 호스트로 작동합니다. Linux에 내장되어 있으며 Windows에 설치 해야하는 탭 장치를 사용하여 수행됩니다. MicroTCP를 마이크로 컨트롤러에서 실행하도록 적응하는 것은 매우 쉽지만 아직 시도하지 않았습니다. 꿈은 STM32 보드에서 내 블로그를 제공하는 것입니다!
Windows에있는 경우 OpenVPN에서 제공 한 탭 드라이버를 설치하고 가상 NIC를 Instance하여 MicroTCP가 시작될 때 연결할 수 있도록해야합니다. Source에서 프로젝트를 구축하려면 저장소를 서브 모듈로 복제했는지 확인하십시오.
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는 모든 네트워크 프로그래머가 익숙한 일반적인 소켓 인터페이스를 사용합니다. 네트워크 스택을 명시 적으로 시동하고 핸들을 전달 해야하는 주요 차이점.
다음은 기본 사용법을 보여주는 간단한 Echo 서버입니다.
#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 BSD의 socket+bind+listen 한 번에 모두 청취 TCP 서버를 설정하는 역할을한다는 것입니다.
스택을 설정하는 방법에는 여러 가지가 있습니다. microtcp_create 는 IP 10.0.0.5/24로 호스트 OS에서 가상 네트워크 지출과 10.0.4/24의 MicroTCP 프로세스를위한 가상 호스트를 만듭니다. 가상 NIC에서 Wireshark를 열어 호스트와 프로세스 간의 트래픽을 검사 할 수 있습니다.
microtcp_create_using_callbacks 를 사용하여 스택을 구성 할 수도 있습니다.이를 통해 입력 L2 프레임을 명시 적으로 제공하고 버퍼에서 프레임을 수신 할 수 있습니다. 이것은 스택을 마이크로 컨트롤러에서 실행하도록 구성하는 방법입니다.
MicroTCP의 각 인스턴스 (콜백을 고려하지 않고)는 다른 콜백 구현이 허용되면 원하는만큼 인스턴스를 가질 수 있습니다!
아직 테스트 인공 구조가 없습니다. 내가 테스트하는 방식은 http 또는 echo 서버를 설정하고 Wireshark를 사용하여 일어난 일을 캡처하면서 무언가가 끊어 질 때까지 스트레스를받는 것입니다.