Tổng quan về lwIP
Giới thiệu
- lwIP là một bản triển khai ngăn xếp giao thức TCP/IP nhỏ gọn, độc lập
- Tập trung vào việc giảm mức sử dụng RAM nhưng vẫn duy trì TCP đầy đủ tính năng
- Phù hợp để dùng trong hệ thống nhúng, cần vài chục kilobyte RAM và khoảng 40 kilobyte ROM mã
- Ban đầu được phát triển bởi Adam Dunkels và hiện được duy trì bởi mạng lưới các nhà phát triển trên toàn thế giới
Tính năng
- IP (Giao thức Internet, IPv4 và IPv6): bao gồm chuyển tiếp gói giữa nhiều giao diện mạng
- ICMP (Giao thức thông điệp điều khiển Internet): bảo trì và gỡ lỗi mạng
- IGMP (Giao thức quản lý nhóm Internet): quản lý lưu lượng multicast
- MLD (Multicast Listener Discovery): dành cho IPv6, hướng tới tuân thủ RFC 2710
- ND (Neighbor Discovery và cấu hình địa chỉ tự động không trạng thái): hướng tới tuân thủ RFC 4861 và RFC 4862
- DHCP, AutoIP/APIPA (Zeroconf) và DHCPv6 (không trạng thái)
- UDP (Giao thức gói dữ liệu người dùng): bao gồm phần mở rộng UDP-lite mang tính thử nghiệm
- TCP (Giao thức điều khiển truyền tải): điều khiển tắc nghẽn, ước lượng RTT, fast recovery/fast retransmit và truyền SACK
- API raw/native: cải thiện hiệu năng
- API socket kiểu Berkeley tùy chọn
- TLS: lớp TCP tùy chọn ("altcp") cho TLS gần như trong suốt (đã được port sang mbedTLS)
- PPPoS và PPPoE (Point-to-Point Protocol qua serial/Ethernet)
- DNS (trình phân giải tên miền, bao gồm mDNS)
- 6LoWPAN (qua IEEE 802.15.4, BLE hoặc ZEP)
Ứng dụng
- Máy chủ HTTP: bao gồm SSI và CGI (HTTPS qua altcp)
- Tác tử SNMPv2c: bao gồm trình biên dịch MIB, hỗ trợ v3 qua altcp
- SNTP (Giao thức thời gian mạng đơn giản)
- Trình phản hồi dịch vụ tên NetBIOS
- Trình phản hồi MDNS (Multicast DNS)
- Triển khai máy chủ iPerf
- Client MQTT: hỗ trợ TLS có thể dùng qua altcp
Giấy phép
- lwIP được cung cấp miễn phí theo giấy phép BSD
Phát triển
- lwIP đã phát triển thành một ngăn xếp TCP/IP xuất sắc cho thiết bị nhúng
- Các nhà phát triển gửi bản sửa lỗi, cải tiến và tính năng bổ sung để tăng thêm tính hữu dụng của ngăn xếp
- Việc phát triển được lưu trữ trên Savannah, và bất kỳ ai cũng có thể đóng góp cải tiến cho lwIP thông qua Git và mailing list
- Ngăn xếp TCP/IP lwIP được duy trì trong mô-đun Git 'lwip', còn các đóng góp nằm trong mô-đun Git 'contrib'
- Xem
doc/savannah.txt để biết chi tiết về truy cập máy chủ Git
- Hiện có thể duyệt cây Git trên web: lwip, lwip-contrib
- Gửi patch và báo lỗi: trang dự án lwIP
- Build tích hợp liên tục: Travis CI
Tài liệu
Tóm tắt của GN⁺
- lwIP cung cấp một ngăn xếp TCP/IP hiệu quả cho hệ thống nhúng, giúp giảm thiểu mức sử dụng bộ nhớ
- Hỗ trợ đa dạng giao thức mạng và ứng dụng, mang lại tính linh hoạt và khả năng mở rộng
- Đang liên tục được cải thiện nhờ sự tham gia tích cực của cộng đồng nhà phát triển
- Các dự án có chức năng tương tự gồm FreeRTOS+TCP, uIP, v.v.
1 bình luận
Ý kiến trên Hacker News
Đã sử dụng LwIP trong một dự án vài năm trước để thực hiện kiểm thử hệ thống rất hiệu quả
Gọi nó là IP stack thì có phần đánh giá thấp
Với những ai đang tìm lựa chọn như LwIP, khuyên nên cân nhắc NetXDuo cùng các thành phần tương ứng như ThreadX, FileX, LevelX, UsbX
Adam Dunkels là người đã viết phần lớn Protothreads
Thắc mắc nongnu.org là gì và nó liên quan thế nào tới gnu.org
Có lẽ đây là TCP/IP stack được dùng nhiều nhất trên các thiết bị bị giới hạn tài nguyên
Lý do thích LWIP là nó cho phép sử dụng cùng một khối bộ nhớ do Ethernet MAC DMA cấp phát trong suốt vòng đời của gói tin
memcpyVới những ai muốn tự triển khai một TCP/IP stack nhẹ, cuốn sách <i>TCP/IP Lean</i> của Jeremy Bentham là một tài nguyên rất hữu ích
Trích từ bài viết:
Pico W dùng cái này