GN⁺: LwIP – 경량 IP 스택
(nongnu.org)lwIP 개요
소개
- lwIP는 독립적인 소형 TCP/IP 프로토콜 스택의 구현임
- RAM 사용량을 줄이면서도 전체 규모의 TCP를 유지하는 데 중점을 둠
- 임베디드 시스템에서 사용하기 적합하며, 수십 킬로바이트의 RAM과 약 40킬로바이트의 코드 ROM이 필요함
- 원래 Adam Dunkels가 개발했으며, 현재는 전 세계 개발자 네트워크에 의해 유지 관리됨
기능
- IP (인터넷 프로토콜, IPv4 및 IPv6): 여러 네트워크 인터페이스 간의 패킷 전달 포함
- ICMP (인터넷 제어 메시지 프로토콜): 네트워크 유지 관리 및 디버깅
- IGMP (인터넷 그룹 관리 프로토콜): 멀티캐스트 트래픽 관리
- MLD (멀티캐스트 리스너 디스커버리): IPv6용, RFC 2710 준수 목표
- ND (이웃 탐색 및 상태 비저장 주소 자동 구성): RFC 4861 및 RFC 4862 준수 목표
- DHCP, AutoIP/APIPA (Zeroconf) 및 (상태 비저장) DHCPv6
- UDP (사용자 데이터그램 프로토콜): 실험적 UDP-lite 확장 포함
- TCP (전송 제어 프로토콜): 혼잡 제어, RTT 추정, 빠른 복구/빠른 재전송 및 SACK 전송
- 원시/네이티브 API: 성능 향상
- 선택적 Berkeley 유사 소켓 API
- TLS: 거의 투명한 TLS를 위한 선택적 계층 TCP ("altcp") (mbedTLS로 포팅됨)
- PPPoS 및 PPPoE (시리얼/이더넷을 통한 포인트 투 포인트 프로토콜)
- DNS (도메인 이름 해석기, mDNS 포함)
- 6LoWPAN (IEEE 802.15.4, BLE 또는 ZEP를 통해)
응용 프로그램
- HTTP 서버: SSI 및 CGI 포함 (altcp를 통한 HTTPS)
- SNMPv2c 에이전트: MIB 컴파일러 포함, v3는 altcp를 통해 지원
- SNTP (간단한 네트워크 시간 프로토콜)
- NetBIOS 이름 서비스 응답기
- MDNS (멀티캐스트 DNS) 응답기
- iPerf 서버 구현
- MQTT 클라이언트: TLS 지원은 altcp를 통해 가능
라이선스
- lwIP는 BSD 라이선스 하에 무료로 제공됨
개발
- lwIP는 임베디드 장치용으로 훌륭한 TCP/IP 스택으로 성장했음
- 개발자들은 버그 수정, 개선 및 추가 기능을 제출하여 스택의 유용성을 더욱 높임
- 개발은 Savannah에서 호스팅되며, Git 및 메일링 리스트를 통해 누구나 lwIP 개선에 기여할 수 있음
- lwIP TCP/IP 스택은 'lwip' Git 모듈에서 유지 관리되며, 기여 사항은 'contrib' Git 모듈에 있음
- Git 서버 접근에 대한 자세한 내용은 doc/savannah.txt 참조
- 현재 Git 트리는 웹에서 열람 가능: lwip, lwip-contrib
- 패치 및 버그 제출: lwIP 프로젝트 페이지
- 지속적 통합 빌드: Travis CI
문서화
- 소스 코드의 자체 문서는 정기적으로 추출되어 웹 페이지에서 제공됨: lwIP 문서
- lwIP에 대한 위키가 지속적으로 성장 중: lwIP 위키
- 메일링 리스트 구독: 메일링 리스트
- 검색 가능한 아카이브: lwip-users, lwip-devel
GN⁺의 정리
- lwIP는 임베디드 시스템에서 효율적인 TCP/IP 스택을 제공하여 메모리 사용량을 최소화함
- 다양한 네트워크 프로토콜과 응용 프로그램을 지원하여 유연성과 확장성을 제공함
- 개발자 커뮤니티의 활발한 참여로 지속적으로 개선되고 있음
- 비슷한 기능을 가진 프로젝트로는 FreeRTOS+TCP, uIP 등이 있음
Hacker News 의견
-
몇 년 전 프로젝트에서 LwIP를 사용하여 시스템 테스트를 효과적으로 수행함
- 여러 마이크로컨트롤러가 내부 LAN을 통해 통신하는 프로젝트였음
- MicroCOS라는 임베디드 커널과 LwIP IP 스택을 사용함
- 크로스 플랫폼 빌드 도구를 설정하여 네이티브 실행 또는 x64 코드로 컴파일하여 개발자 박스에서 실행 가능하게 함
- LwIP의 최하위 링크 계층 부분을 모의로 구현하여 표준 TCP/IP를 사용함
- 작은 TCP 서버를 작성하여 마이크로컨트롤러 애플리케이션이 실제 시스템처럼 개발자 머신에서 통신하게 함
- 이 설정은 매우 잘 작동하여 프로젝트 개발 동안 수년간 사용됨
-
IP 스택은 과소평가된 표현임
- HTTP 클라이언트, HTTP 서버 또는 MQTT 클라이언트로 사용할 수 있음
- 임베디드 네트워킹의 busybox와 비슷하지만 훨씬 더 편리한 라이선스를 가짐
-
LwIP와 같은 옵션을 찾는 사람들에게 NetXDuo와 그 대응물인 ThreadX, FileX, LevelX, UsbX를 고려할 것을 권장함
- 상업용 RTOS 네트워크 스택 중 하나로 20년 동안 사용됨
- 몇 번 소유권이 변경되었고 현재 Eclipse Foundation에서 지원하며 MIT 라이선스를 가짐
- LwIP보다 NetXDuo를 사용할 것을 권장함
- NetXDuo 링크
-
Adam Dunkels는 Protothreads의 대부분을 작성함
-
nongnu.org는 무엇이며 gnu.org와 어떻게 관련이 있는지 궁금해함
- savannah.gnu.org는 Free Software Foundation이 후원하는 "공식" GNU 소프트웨어를 위한 호스팅 사이트임
- savannah.nongnu.org는 FSF가 후원하지 않는 "커뮤니티" 프로젝트를 위한 호스팅 사이트임
- 관련 링크
-
리소스가 제한된 장치에서 가장 많이 사용되는 TCP/IP 스택일 것 같음
- 오랫동안 이에 대한 경쟁력 있는 대안이 없었음
- FreeRTOS-Plus-TCP 링크는 유망해 보임
-
LWIP를 좋아하는 이유는 Ethernet MAC DMA에 의해 할당된 동일한 메모리 블록을 패킷의 수명 동안 사용할 수 있게 해줌
- 메모리 "풀"을 최적화하여 memcpys의 수를 줄일 수 있음
-
자체 경량 TCP/IP 스택을 구현하려는 사람들에게 Jeremy Bentham의 책 <i>TCP/IP Lean</i>이 훌륭한 자원임
-
기사에서 발췌:
- "이로 인해 lwIP는 수십 킬로바이트의 여유 RAM과 약 40킬로바이트의 코드 ROM을 가진 임베디드 시스템에서 사용하기에 적합함"
-
Pico W가 이것을 사용함