1P by neo 3달전 | favorite | 댓글 1개

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
문서화

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 스택일 것 같음

  • LWIP를 좋아하는 이유는 Ethernet MAC DMA에 의해 할당된 동일한 메모리 블록을 패킷의 수명 동안 사용할 수 있게 해줌

    • 메모리 "풀"을 최적화하여 memcpys의 수를 줄일 수 있음
  • 자체 경량 TCP/IP 스택을 구현하려는 사람들에게 Jeremy Bentham의 책 <i>TCP/IP Lean</i>이 훌륭한 자원임

  • 기사에서 발췌:

    • "이로 인해 lwIP는 수십 킬로바이트의 여유 RAM과 약 40킬로바이트의 코드 ROM을 가진 임베디드 시스템에서 사용하기에 적합함"
  • Pico W가 이것을 사용함