1 คะแนน โดย GN⁺ 2024-09-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ภาพรวมของ lwIP

แนะนำ
  • lwIP คือการอิมพลีเมนต์สแตกโปรโตคอล TCP/IP ขนาดเล็กแบบอิสระ
  • มุ่งเน้นการคงความสามารถของ TCP แบบเต็มรูปแบบไว้พร้อมลดการใช้ RAM
  • เหมาะสำหรับใช้งานในระบบฝังตัว โดยต้องใช้ RAM ระดับหลายสิบกิโลไบต์ และโค้ด ROM ประมาณ 40 กิโลไบต์
  • เดิมพัฒนาโดย Adam Dunkels และปัจจุบันดูแลรักษาโดยเครือข่ายนักพัฒนาทั่วโลก
ความสามารถ
  • IP (Internet Protocol, IPv4 และ IPv6): รวมถึงการส่งต่อแพ็กเก็ตระหว่างหลาย network interface
  • ICMP (Internet Control Message Protocol): สำหรับการดูแลรักษาและดีบักเครือข่าย
  • IGMP (Internet Group Management Protocol): จัดการทราฟฟิก multicast
  • MLD (Multicast Listener Discovery): สำหรับ IPv6 โดยมีเป้าหมายให้สอดคล้องกับ RFC 2710
  • ND (Neighbor Discovery และ Stateless Address Autoconfiguration): มีเป้าหมายให้สอดคล้องกับ RFC 4861 และ RFC 4862
  • DHCP, AutoIP/APIPA (Zeroconf) และ DHCPv6 แบบ stateless
  • UDP (User Datagram Protocol): รวมส่วนขยาย UDP-lite แบบทดลอง
  • TCP (Transmission Control Protocol): รองรับ congestion control, การประเมิน RTT, fast recovery/fast retransmit และการส่งแบบ SACK
  • Raw/Native API: เพื่อเพิ่มประสิทธิภาพ
  • Berkeley-like socket API แบบเลือกใช้ได้
  • TLS: เลเยอร์ TCP แบบเลือกใช้ได้ ("altcp") สำหรับ TLS ที่แทบโปร่งใส (พอร์ตด้วย mbedTLS)
  • PPPoS และ PPPoE (Point-to-Point Protocol ผ่าน serial/Ethernet)
  • DNS (ตัวแปลชื่อโดเมน รวม mDNS)
  • 6LoWPAN (ผ่าน IEEE 802.15.4, BLE หรือ ZEP)
แอปพลิเคชัน
  • HTTP server: รวม SSI และ CGI (รองรับ HTTPS ผ่าน altcp)
  • SNMPv2c agent: รวม MIB compiler โดย v3 รองรับผ่าน altcp
  • SNTP (Simple Network Time Protocol)
  • NetBIOS name service responder
  • MDNS (Multicast DNS) responder
  • iPerf server implementation
  • MQTT client: รองรับ TLS ผ่าน altcp ได้
ไลเซนส์
  • lwIP เปิดให้ใช้งานฟรีภายใต้ BSD license
การพัฒนา
  • lwIP ได้เติบโตเป็นสแตก TCP/IP ที่ยอดเยี่ยมสำหรับอุปกรณ์ฝังตัว
  • นักพัฒนาส่ง bug fix, การปรับปรุง และฟีเจอร์เพิ่มเติมเข้ามา ทำให้สแตกมีประโยชน์มากยิ่งขึ้น
  • การพัฒนาโฮสต์อยู่บน Savannah และทุกคนสามารถมีส่วนร่วมปรับปรุง lwIP ได้ผ่าน Git และ mailing list
  • สแตก TCP/IP ของ lwIP ดูแลอยู่ใน Git module ชื่อ 'lwip' และงานมีส่วนร่วมต่าง ๆ อยู่ใน Git module 'contrib'
  • รายละเอียดเพิ่มเติมเกี่ยวกับการเข้าถึง Git server ดูที่ doc/savannah.txt
  • ปัจจุบันสามารถดู Git tree ผ่านเว็บได้ที่: lwip, lwip-contrib
  • ส่งแพตช์และรายงานบั๊กได้ที่: หน้าโครงการ lwIP
  • บิลด์แบบ continuous integration: Travis CI
เอกสาร
  • เอกสารที่สร้างจากซอร์สโค้ดถูกดึงออกมาเป็นประจำและเผยแพร่บนเว็บเพจ: เอกสาร lwIP
  • วิกิเกี่ยวกับ lwIP ยังคงเติบโตอย่างต่อเนื่อง: lwIP Wiki
  • สมัครรับ mailing list: mailing list
  • คลังข้อมูลแบบค้นหาได้: lwip-users, lwip-devel

สรุปโดย GN⁺

  • lwIP มอบสแตก TCP/IP ที่มีประสิทธิภาพสำหรับระบบฝังตัว พร้อมลดการใช้หน่วยความจำให้ต่ำที่สุด
  • รองรับโปรโตคอลเครือข่ายและแอปพลิเคชันหลากหลาย มอบความยืดหยุ่นและความสามารถในการขยายระบบ
  • มีการพัฒนาและปรับปรุงอย่างต่อเนื่องจากการมีส่วนร่วมอย่างคึกคักของชุมชนนักพัฒนา
  • โครงการที่มีความสามารถคล้ายกัน ได้แก่ FreeRTOS+TCP, uIP เป็นต้น

1 ความคิดเห็น

 
GN⁺ 2024-09-08
ความคิดเห็นบน Hacker News
  • เมื่อหลายปีก่อนเคยใช้ LwIP ในโปรเจ็กต์หนึ่งเพื่อทำ system test ได้อย่างมีประสิทธิภาพ

    • เป็นโปรเจ็กต์ที่ไมโครคอนโทรลเลอร์หลายตัวสื่อสารกันผ่าน LAN ภายใน
    • ใช้ embedded kernel ชื่อ MicroCOS และ IP stack ของ LwIP
    • ตั้งค่าเครื่องมือ build แบบข้ามแพลตฟอร์มเพื่อให้คอมไพล์เป็น native executable หรือโค้ด x64 แล้วรันบนเครื่องของนักพัฒนาได้
    • ทำ mock ในส่วนลิงก์เลเยอร์ล่างสุดของ LwIP เพื่อใช้ TCP/IP มาตรฐาน
    • เขียน TCP server ขนาดเล็กเพื่อให้แอปพลิเคชันบนไมโครคอนโทรลเลอร์สื่อสารบนเครื่องนักพัฒนาได้เหมือนกับระบบจริง
    • การตั้งค่านี้ทำงานได้ดีมากจนถูกใช้ต่อเนื่องหลายปีระหว่างการพัฒนาโปรเจ็กต์
  • คำว่า IP stack ยังประเมินความสามารถของมันต่ำเกินไป

    • สามารถใช้เป็น HTTP client, HTTP server หรือ MQTT client ได้
    • คล้าย busybox ของ embedded networking แต่มีไลเซนส์ที่สะดวกกว่ามาก
  • สำหรับคนที่กำลังมองหาตัวเลือกแบบ LwIP ขอแนะนำให้พิจารณา NetXDuo และชุดที่เข้าคู่กันอย่าง ThreadX, FileX, LevelX, UsbX

    • เป็นหนึ่งใน network stack สำหรับ RTOS เชิงพาณิชย์ที่ถูกใช้งานมากว่า 20 ปี
    • มีการเปลี่ยนเจ้าของมาหลายครั้ง และปัจจุบันได้รับการดูแลโดย Eclipse Foundation ภายใต้ไลเซนส์ MIT
    • แนะนำให้ใช้ NetXDuo มากกว่า LwIP
    • ลิงก์ NetXDuo
  • Adam Dunkels เป็นผู้เขียน Protothreads เกือบทั้งหมด

  • สงสัยว่า nongnu.org คืออะไร และเกี่ยวข้องกับ gnu.org อย่างไร

    • savannah.gnu.org เป็นเว็บโฮสต์สำหรับซอฟต์แวร์ GNU แบบ "ทางการ" ที่ได้รับการสนับสนุนจาก Free Software Foundation
    • savannah.nongnu.org เป็นเว็บโฮสต์สำหรับโปรเจ็กต์ "ชุมชน" ที่ไม่ได้รับการสนับสนุนจาก FSF
    • ลิงก์ที่เกี่ยวข้อง
  • น่าจะเป็น TCP/IP stack ที่ถูกใช้มากที่สุดบนอุปกรณ์ที่มีทรัพยากรจำกัด

    • เป็นเวลานานที่แทบไม่มีทางเลือกอื่นที่แข่งขันได้
    • ลิงก์ FreeRTOS-Plus-TCP ดูมีอนาคต
  • เหตุผลที่ชอบ LWIP คือมันเปิดให้ใช้บล็อกหน่วยความจำก้อนเดียวกันที่ Ethernet MAC DMA จัดสรรไว้ได้ตลอดอายุของแพ็กเก็ต

    • สามารถปรับแต่ง memory "pool" เพื่อลดจำนวนครั้งของ memcpy ได้
  • สำหรับคนที่อยากทำ lightweight TCP/IP stack ของตัวเอง หนังสือ <i>TCP/IP Lean</i> ของ Jeremy Bentham เป็นแหล่งข้อมูลที่ยอดเยี่ยม

  • ตัดตอนจากบทความ:

    • "สิ่งนี้ทำให้ lwIP เหมาะสำหรับใช้ในระบบ embedded ที่มี RAM ว่างระดับหลายสิบกิโลไบต์ และมี code ROM ราว 40 กิโลไบต์"
  • Pico W ใช้สิ่งนี้