พอร์ต 0 (Port 0) มีความหมายพิเศษในการเขียนโปรแกรมเครือข่าย โดยเฉพาะในระบบปฏิบัติการ Unix ด้านการเขียนโปรแกรมโซคเก็ต (socket programming) โดยพอร์ตนี้ใช้เพื่อ ขอพอร์ตแบบไดนามิกที่ระบบจัดสรรให้ พอร์ต 0 เป็น พอร์ดตัวแทน (wildcard port) ที่บอกระบบให้ค้นหาหมายเลขพอร์ตที่เหมาะสม
ไม่เหมือน หมายเลขพอร์ตส่วนใหญ่ พอร์ต 0 เป็นพอร์ตที่สงวนไว้ (reserved port) ในเครือข่าย TCP/IP หมายความว่าไม่ควรใช้ในข้อความ TCP หรือ UDP พอร์ตเครือข่ายใน TCP และ UDP อยู่ในช่วง 0 ถึง 65535 พอร์ตหมายเลข 0 ถึง 1023 ถูกกำหนดเป็นพอร์ตระบบ (system ports) หรือพอร์ตที่รู้จักกันดี (well-known ports) Internet Assigned Numbers Authority (IANA) ดูแลรายการการใช้งานที่ตั้งใจไว้ของพอร์ตเหล่านี้บนอินเทอร์เน็ต และ พอร์ตระบบ 0 ห้ามใช้งาน
การทำงานของ TCP/UDP พอร์ต 0 ในการเขียนโปรแกรมเครือข่าย
การตั้งค่าการเชื่อมต่อโซคเก็ตเครือข่ายใหม่ ต้องการให้จัดสรรหมายเลขพอร์ตหนึ่งบนทั้งฝั่งต้นทางและปลายทาง ข้อความ TCP หรือ UDP ที่ส่งโดยผู้สร้าง (ต้นทาง) มีหมายเลขพอร์ตทั้งสอง เพื่อให้ผู้รับ (ปลายทาง) สามารถส่งข้อความตอบกลับไปยังปลายทางโปรโตคอลที่ถูกต้อง
IANA ได้จัดสรรพอร์ตระบบที่กำหนดไว้ล่วงหน้าสำหรับแอปพลิเคชันอินเทอร์เน็ตพื้นฐาน เช่น เว็บเซิร์ฟเวอร์ (พอร์ต 80) แต่แอปพลิเคชันเครือข่าย TCP และ UDP หลายอย่างไม่มีพอร์ตระบบของตัวเอง และต้องขอจากระบบปฏิบัติการของอุปกรณ์ทุกครั้งที่รัน
เพื่อจัดสรรหมายเลขพอร์ตต้นทาง แอปพลิเคชันเรียกฟังก์ชันเครือข่าย TCP/IP เช่น bind() เพื่อขอหนึ่ง แอปพลิเคชันสามารถให้หมายเลขคงที่ (hard-coded) แก่ bind() หากต้องการขอหมายเลขเฉพาะ แต่การขอนี้อาจล้มเหลว เพราะแอปพลิเคชันอื่นที่รันบนระบบอาจกำลังใช้อยู่
ทางเลือกอื่นคือ ให้ พอร์ต 0 แก่ bind() เป็นพารามิเตอร์การเชื่อมต่อ นั้นจะกระตุ้นให้ระบบปฏิบัติการ ค้นหาและส่งคืนพอร์ตที่ว่างและเหมาะสมในช่วงหมายเลขพอร์ตไดนามิกของ TCP/IP อัตโนมัติ
แอปพลิเคชัน ไม่ได้รับพอร์ต 0 แต่ได้พอร์ตไดนามิกอื่นแทน ข้อดีของข้อตกลงการเขียนโปรแกรมนี้คือ ประสิทธิภาพ แทนที่จะให้แต่ละแอปพลิเคชันต้องเขียนและรันโค้ดลองพอร์ตหลายตัวจนได้ตัวที่ถูกต้อง แอปพลิเคชันพึ่งพาระบบปฏิบัติการ
Unix, Windows และระบบปฏิบัติการอื่นๆ แตกต่างกันในการจัดการพอร์ต 0 แต่ข้อตกลงทั่วไปเดียวกันยังคงใช้ได้
พอร์ต 0 และความปลอดภัยเครือข่าย
การจราจรเครือข่ายที่ส่งผ่านอินเทอร์เน็ตไปยังโฮสต์ที่ฟังบนพอร์ต 0 อาจถูกสร้างโดยผู้โจมตีเครือข่าย หรือโดยบังเอิญจากแอปพลิเคชันที่เขียนโปรแกรมผิดพลาด ข้อความตอบกลับที่โฮสต์สร้างขึ้นตอบสนองต่อการจราจรพอร์ต 0 ช่วยให้ผู้โจมตีเรียนรู้พฤติกรรมและช่องโหว่เครือข่ายที่เป็นไปได้ของอุปกรณ์เหล่านั้น
ผู้ให้บริการอินเทอร์เน็ต (ISP) หลายแห่งบล็อกการจราจรบนพอร์ต 0 ทั้งข้อความเข้าและออก เพื่อป้องกันการเอกซ์โพลอยต์เหล่านี้
คำถามที่พบบ่อย (FAQ)
- หมายเลขพอร์ตคืออะไร? หมายเลขพอร์ตที่ใช้สำหรับการเชื่อมต่อเครือข่าย TCP/IP ทำหน้าที่เป็นข้อมูลที่อยู่ ระบุผู้ส่งและผู้รับข้อความ พอร์ตช่วยให้แอปพลิเคชันต่างๆ บนเครือข่ายเดียวกันแบ่งปันทรัพยากรพร้อมกันได้
- หาหมายเลขพอร์ตอย่างไร? เพื่อหาหมายเลขพอร์ตของที่อยู่ IP เฉพาะ ให้ไปที่ command prompt พิมพ์ netstat -a แล้วกด Enter จะเห็นรายการการเชื่อมต่อ TCP ที่ใช้งานอยู่ พร้อมที่อยู่ IP และหมายเลขพอร์ตคั่นด้วย colon
- สามารถเชื่อมต่อไปพอร์ต 0 ได้ไหม? ไม่ได้ อย่างเป็นทางการ พอร์ต 0 ไม่มีอยู่จริงและไม่สามารถเชื่อมต่อได้ เนื่องจากเป็นหมายเลขพอร์ตที่ไม่ถูกต้อง อย่างไรก็ตาม คุณสามารถส่งแพ็กเก็ตอินเทอร์เน็ตไปและมาจากพอร์ต 0 ได้เหมือนพอร์ตหมายเลขอื่นๆ