# LwIP – 경량 IP 스택

> Clean Markdown view of GeekNews topic #16661. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16661](https://news.hada.io/topic?id=16661)
- GeekNews Markdown: [https://news.hada.io/topic/16661.md](https://news.hada.io/topic/16661.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-08T09:55:59+09:00
- Updated: 2024-09-08T09:55:59+09:00
- Original source: [nongnu.org](https://www.nongnu.org/lwip/2_1_x/index.html)
- Points: 1
- Comments: 1

## Topic Body

##### 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](http://git.savannah.gnu.org/cgit/lwip.git), [lwip-contrib](http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git)
- 패치 및 버그 제출: [lwIP 프로젝트 페이지](http://savannah.nongnu.org/projects/lwip/)
- 지속적 통합 빌드: [Travis CI](https://travis-ci.org/yarrick/lwip-merged)

###### 문서화
- 소스 코드의 자체 문서는 정기적으로 추출되어 웹 페이지에서 제공됨: [lwIP 문서](http://www.nongnu.org/lwip/)
- lwIP에 대한 위키가 지속적으로 성장 중: [lwIP 위키](http://lwip.wikia.com/wiki/LwIP_Wiki)
- 메일링 리스트 구독: [메일링 리스트](http://savannah.nongnu.org/mail/?group=lwip)
- 검색 가능한 아카이브: [lwip-users](http://lists.nongnu.org/archive/html/lwip-users/), [lwip-devel](http://lists.nongnu.org/archive/html/lwip-devel/)

##### GN⁺의 정리
- lwIP는 임베디드 시스템에서 효율적인 TCP/IP 스택을 제공하여 메모리 사용량을 최소화함
- 다양한 네트워크 프로토콜과 응용 프로그램을 지원하여 유연성과 확장성을 제공함
- 개발자 커뮤니티의 활발한 참여로 지속적으로 개선되고 있음
- 비슷한 기능을 가진 프로젝트로는 FreeRTOS+TCP, uIP 등이 있음

## Comments



### Comment 28693

- Author: neo
- Created: 2024-09-08T09:55:59+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41461850) 
- 몇 년 전 프로젝트에서 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 링크](https://github.com/eclipse-threadx/netxduo)

- Adam Dunkels는 Protothreads의 대부분을 작성함
  - [Protothreads 링크](https://dunkels.com/adam/pt/)

- nongnu.org는 무엇이며 gnu.org와 어떻게 관련이 있는지 궁금해함
  - savannah.gnu.org는 Free Software Foundation이 후원하는 "공식" GNU 소프트웨어를 위한 호스팅 사이트임
  - savannah.nongnu.org는 FSF가 후원하지 않는 "커뮤니티" 프로젝트를 위한 호스팅 사이트임
  - [관련 링크](https://news.ycombinator.com/item?id=11747093)

- 리소스가 제한된 장치에서 가장 많이 사용되는 TCP/IP 스택일 것 같음
  - 오랫동안 이에 대한 경쟁력 있는 대안이 없었음
  - [FreeRTOS-Plus-TCP 링크](https://github.com/FreeRTOS/FreeRTOS-Plus-TCP)는 유망해 보임

- LWIP를 좋아하는 이유는 Ethernet MAC DMA에 의해 할당된 동일한 메모리 블록을 패킷의 수명 동안 사용할 수 있게 해줌
  - 메모리 "풀"을 최적화하여 memcpys의 수를 줄일 수 있음

- 자체 경량 TCP/IP 스택을 구현하려는 사람들에게 Jeremy Bentham의 책 &lt;i&gt;TCP/IP Lean&lt;/i&gt;이 훌륭한 자원임

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

- Pico W가 이것을 사용함
  - [Pico W 예제 링크](https://github.com/raspberrypi/pico-examples/blob/master/pico_w/wifi/tls_client/tls_common.c)
