1 điểm bởi GN⁺ 2024-09-08 | 1 bình luận | Chia sẻ qua WhatsApp

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ài liệu tự sinh từ mã nguồn được trích xuất định kỳ và cung cấp trên trang web: tài liệu lwIP
  • Wiki về lwIP đang tiếp tục được mở rộng: wiki lwIP
  • Đăng ký mailing list: mailing list
  • Kho lưu trữ có thể tìm kiếm: lwip-users, lwip-devel

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

 
GN⁺ 2024-09-08
Ý 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ả

    • Đây là một dự án trong đó nhiều vi điều khiển giao tiếp với nhau qua LAN nội bộ
    • Đã dùng kernel nhúng MicroCOS và IP stack LwIP
    • Đã thiết lập công cụ build đa nền tảng để có thể biên dịch chạy native hoặc thành mã x64, nhờ đó có thể chạy trên máy của lập trình viên
    • Đã mô phỏng phần tầng liên kết thấp nhất của LwIP để dùng TCP/IP tiêu chuẩn
    • Đã viết một máy chủ TCP nhỏ để ứng dụng vi điều khiển có thể giao tiếp trên máy của lập trình viên như thể là hệ thống thật
    • Thiết lập này hoạt động rất tốt và được dùng suốt nhiều năm trong quá trình phát triển dự án
  • Gọi nó là IP stack thì có phần đánh giá thấp

    • Có thể dùng như HTTP client, HTTP server hoặc MQTT client
    • Nó giống busybox của mảng mạng nhúng, nhưng có giấy phép thuận tiện hơn nhiều
  • 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

    • Đây là một trong những network stack RTOS thương mại đã được sử dụng suốt 20 năm
    • Đã đổi chủ vài lần, hiện được Eclipse Foundation hỗ trợ và có giấy phép MIT
    • Khuyên dùng NetXDuo hơn LwIP
    • Liên kết NetXDuo
  • 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

    • savannah.gnu.org là trang lưu trữ dành cho phần mềm GNU “chính thức” được Free Software Foundation bảo trợ
    • savannah.nongnu.org là trang lưu trữ dành cho các dự án “cộng đồng” không được FSF bảo trợ
    • Liên kết liên quan
  • 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

    • Trong thời gian dài gần như không có lựa chọn thay thế đủ sức cạnh tranh
    • Liên kết FreeRTOS-Plus-TCP có vẻ đầy hứa hẹ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

    • Có thể tối ưu “pool” bộ nhớ để giảm số lần memcpy
  • Vớ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:

    • "Nhờ vậy, lwIP phù hợp để sử dụng trong các hệ thống nhúng có vài chục kilobyte RAM trống và khoảng 40 kilobyte ROM mã"
  • Pico W dùng cái này