ฉันกำลังทำงานกับ lwip tcp / ip stack บนอุปกรณ์ฝังตัวและฉันพยายามเข้าใจว่ามันทำงานได้อย่างไร ฉันได้ดูเอกสารและรหัสแล้ว แต่ฉันสับสนกับวิธีจัดการพอร์ตและรูปแบบ URI โดยสแต็ก tcp / ip
สิ่งที่สับสนแรกคือพวกเขาทั้งสองดูเหมือนจะกำหนดโปรโตคอล ซ้ำซ้อนหรือไม่
สำหรับ lwip หากต้องการตั้งค่าการเชื่อมต่อ tcp จะสร้าง "Protocol Control Block" (PCB) นี้ถูกกำหนดโดยที่อยู่ IP ท้องถิ่นและพอร์ต ดูเหมือนว่าสมเหตุสมผล - PCB นี้ฟังพอร์ตที่ระบุ รูปแบบของ URI มีบทบาทอย่างไรในเรื่องนี้แล้ว? PCB นี้ได้รับรูปแบบ uri หรือไม่? ฉันไม่เห็นรูปแบบ URI ที่ถูกส่งผ่านไปยังฟังก์ชันการโทรกลับเพื่อรับแพ็กเก็ต
มันทำงานอย่างไรถ้าฉันต้องการเปลี่ยนโปรโตคอล - ตัวอย่างเช่นอัพเกรดการเชื่อมต่อ HTTP เป็นการเชื่อมต่อ Websocket? หากจับมือเริ่มต้นด้วย HTTP: พอร์ต 80 แล้วจะทำการสื่อสารเพิ่มเติมผ่าน WS: พอร์ต X อย่างไร
ดังตัวอย่างต่อไปนี้เป็นฟังก์ชันลายเซ็นสำหรับผูก PCB ใน lwip (ในรหัส C):
tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
สิ่งนี้จะผูก PCB กับที่อยู่ IP และหมายเลขพอร์ต อย่างไรก็ตามไม่ได้ระบุรูปแบบ URI ดังนั้นฉันคิดว่า PCB นั้นไม่เชื่อเรื่องแผนการของ URI ถ้าเราดูต้นแบบการโทรกลับเพื่อรับแพ็กเก็ต:
err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)
อีกครั้งรูปแบบ URI จะไม่ปรากฏขึ้น ฉันยังมีซอร์สโค้ดสำหรับการใช้งานเซิร์ฟเวอร์ HTTP โดยใช้ lwip รูปแบบ URI ไม่มีที่ใดปรากฏขึ้น ดังนั้นรูปแบบ URI ที่แตกต่างกันจะจัดการโดย IP สแต็คอย่างไร ฉันไม่สามารถหาที่ ๆ มันถูกส่งผ่านเป็นข้อโต้แย้งในการเรียกกลับสำหรับการจัดการปริมาณการใช้ IP ฉันคิดว่าฉันจะต้องขาดอะไรบางอย่างพื้นฐานไปแล้ว
ความช่วยเหลือใด ๆ ที่ชื่นชม!