ภาพรวมของ 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
เอกสาร
สรุปโดย GN⁺
- lwIP มอบสแตก TCP/IP ที่มีประสิทธิภาพสำหรับระบบฝังตัว พร้อมลดการใช้หน่วยความจำให้ต่ำที่สุด
- รองรับโปรโตคอลเครือข่ายและแอปพลิเคชันหลากหลาย มอบความยืดหยุ่นและความสามารถในการขยายระบบ
- มีการพัฒนาและปรับปรุงอย่างต่อเนื่องจากการมีส่วนร่วมอย่างคึกคักของชุมชนนักพัฒนา
- โครงการที่มีความสามารถคล้ายกัน ได้แก่ FreeRTOS+TCP, uIP เป็นต้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เมื่อหลายปีก่อนเคยใช้ LwIP ในโปรเจ็กต์หนึ่งเพื่อทำ system test ได้อย่างมีประสิทธิภาพ
คำว่า IP stack ยังประเมินความสามารถของมันต่ำเกินไป
สำหรับคนที่กำลังมองหาตัวเลือกแบบ LwIP ขอแนะนำให้พิจารณา NetXDuo และชุดที่เข้าคู่กันอย่าง ThreadX, FileX, LevelX, UsbX
Adam Dunkels เป็นผู้เขียน Protothreads เกือบทั้งหมด
สงสัยว่า nongnu.org คืออะไร และเกี่ยวข้องกับ gnu.org อย่างไร
น่าจะเป็น TCP/IP stack ที่ถูกใช้มากที่สุดบนอุปกรณ์ที่มีทรัพยากรจำกัด
เหตุผลที่ชอบ LWIP คือมันเปิดให้ใช้บล็อกหน่วยความจำก้อนเดียวกันที่ Ethernet MAC DMA จัดสรรไว้ได้ตลอดอายุของแพ็กเก็ต
memcpyได้สำหรับคนที่อยากทำ lightweight TCP/IP stack ของตัวเอง หนังสือ <i>TCP/IP Lean</i> ของ Jeremy Bentham เป็นแหล่งข้อมูลที่ยอดเยี่ยม
ตัดตอนจากบทความ:
Pico W ใช้สิ่งนี้