8비트 마이크로컨트롤러에서 웹사이트 호스팅하기
현대 웹 개발의 세계에서 우리는 종종 우리에게 사용 가능한 방대한 컴퓨팅 파워와 대역폭을 당연하게 여깁니다. 하지만, Maurycy의 최근 프로젝트는 AVR64DD32 마이크로컨트롤러에서 완전히 기능하는(비록 느리지만) 웹사이트를 호스팅함으로써 8비트 아키텍처의 엄청난 끈기를 보여줍니다. 이 프로젝트는 극한의 제약 조건 하에서 작업하는 법에 대한 마스터클래스로, 네트워킹 및 프로토콜 구현에 대한 창의적인 접근 방식을 강요합니다.
하드웨어: AVR64DD32
이를 달성하기 위해 Maurycy는 Arduino 보드에 사용되는 유명한 Atmega328의 현대적 친척인 AVR64DD32를 사용했습니다. 비록 8비트 코어이지만, 이전 모델들에 비해 더 나은 주변 장치와 약 $1의 낮은 비용이라는 몇 가지 장점을 제공합니다.
주요 사양:
- CPU: Single 8-bit AVR core @ 24 MHz
- RAM: 8 kB
- Flash: 64 kB
- EEPROM: 256 bytes
- Voltage: 1.8 - 5.5 Volts
네트워킹 병목 현상 극복하기
주요 장애물 중 하나는 인터넷 연결의 물리 계층이었습니다. Ethernet (10BASE-T)이 표준 선택이지만, AVR에게는 너무 빨랐습니다. 10BASE-T는 Manchester encoding을 사용하는데, 여기서 0은 "10"으로, 1은 "01"로 표현되므로 실제 와이어 속도는 10 Mbps 데이터 속도에 대해 20 Mbps가 됩니다. AVR의 주변 장치와 IO 핀이 최대 12 MHz에서 제한되므로, 칩은 필요한 신호를 생성할 수 없습니다.
이를 우회하기 위해, 이 프로젝트는 Serial Line Internet Protocol (SLIP) (RFC 1055)를 활용합니다. SLIP는 직렬 연결을 통해 네트워크를 실행하기 위한 오래되고 가벼운 표준입니다. 이는 패킷을 특정 바이트 (0xC0)로 감싸고, 감싸는 바이트와 충돌하는 데이터를 처리하기 위해 간단한 이스케이프 시퀀스 (0xDB)를 사용합니다.
Linux 호스트 측에서는 slattach를 사용하여 연결을 설정하며, 이는 USB-to-serial 어댑터를 네트워크 인터페이스로 변환합니다. 이를 통해 MCU는 기본적인 직렬 링크를 사용하여 네트워크의 나머지 부분과 통신할 수 있습니다.
TCP/IP 스택 구현하기
물리적 연결이 설정된 후, 소프트웨어 과제는 TCP/IP 스택으로 옮겨졌습니다. 8 kB의 RAM에서 전체 스택을 구현하는 것은 매우 어려운 작업이지만, 이 프로젝트는 몇 가지 전략적 생략을 통해 과정을 단순화합니다:
IP 계층
IP 헤더 (40 bytes)를 구현하는 것은 비교적 간단합니다. 현대적인 운영 체제에서 대부분 비활성화되어 있고 IPv6에서 제거된 패킷 단편화(packet fragmentation)를 무시함으로써, 저자는 단순히 수신된 패킷의 소스 및 목적지 주소를 교체하여 응답 헤더를 생성할 수 있었습니다.
TCP 계층
TCP는 IP보다 훨씬 더 복잡합니다. 마이크로컨트롤러가 연결 상태를 추적하고, 손실된 패킷의 재전송을 관리하며, 수많은 엣지 케이스를 처리해야 합니다. 저자는 서버를 기능하게 만들기 위해 맞춤형의 가벼운 TCP 구현을을 구현하는 데 며칠을 보냈습니다.
HTTP 계층
구현을 최소화하기 위해, 저자는 전체 HTTP 파서를 사용하지 않았습니다. 대신, 서버는 요청된 URL에 관계없이 단일 응답을 보내도록 하드코딩되었습니다. 이는 사이트가 단 하나의 페이지로만 구성되어 있다면 기능할 수 있게 합니다.
라우팅 및 공용 액세스
MCU가 공용 IPv4 주소를 가지고 있지 않고 CGNAT 뒤에 위치하기 때문에, 저자는 WireGuard와 리버스 프록시의 조합을을 사용했습니다.
The VPS: 공용 IP 주소를 가진 가상 프라이빗 서버가 입구 역할을 합니다.
The Tunnel: WireGuard는 VPS와 로컬 Linux 라우터 박스 사이에 가상 네트워크 링크를를 것입니다.
The Proxy: Linux 라우터는
/mcu경로 아래의 요청을 MCU의 로컬 주소로 프록시합니다.
이 아키텍처는 방문자가 MCU의 취약한 TCP/IP 스택에 직접 부딪히지 않도록 보장하며, SYN floods 및 기본적인 DDoS 공격에 대한 보호 계층을 제공합니다.
커뮤니티 인사이트 및 하드웨어 진화
이 프로젝트는 8비트 마이크로컨트롤러의 진화에 대한 토론을을 것입니다. AVR DD 시리즈는 매우 유능하지만, 일부 커뮤니티 멤버들은 AVR DD의 많은 주변 장치 기능을 유지하면서 ARM Cortex-M0+ 코어를 제공하는 PIC32 CM의 등장을 지적했습니다. 이는 핀 호환성을 유지하거나 전력 효율성을 유지하면서 더 많은 성능을을 것입니다. 이는 to 32-bit 아키텍처로의 전환을 시정합니다.
그럼에도 불구하고, 이 프로젝트는 "AVR 마이크로컨트롤러로 할 수 있는 멍청한 일들"에 대한 시대를 초월한 매력을력을 것입니다. 한 사용자가 언급했듯이, HTML이 페이지에 실시간으로 스트리밍되는 것을 보는 경험은 다이얼업 시대의 향수를를 것입니다. 이는 웹이 가장 기본적인 구성 요소로부터 밑바닥부터 구축될 수 있음을 우리에게 상기시켜 줍니다.
SUMMARY: A SLIP 및 WireGuard를 사용하여 $1 AVR64DD32 마이크로컨트롤러에서 웹 서버를 호스팅하는 데 필요한 도전 과제와 창의적인 엔지니어링에 대한 심층 분석.
TITLE: 8비트 마이크로컨트롤러에서 웹사이트 호스팅하기
SUMMARY: SLIP 및 WireGuard를 사용하여 $1 AVR64DD32 마로컨트롤러에서 웹 서버를 호스팅하는 데 필요한 도전 과제와 창의적인 엔재니어링에 대한 심층 분석.
TITLE: 8비트 마이크로컨트롤러에서 웹사이트 호스팅하기