Network Socket คืออะไร? ทำความรู้จักกับจุดเชื่อมต่อเครือข่าย
สรุปใจความสำคัญ
- Network Socket ทำหน้าที่เป็นจุดปลายทาง (Endpoint) สำหรับการส่งและรับข้อมูลในเครือข่ายคอมพิวเตอร์
- Socket Address ประกอบด้วย 3 ส่วนสำคัญคือ โปรโตคอลการขนส่ง, IP Address และหมายเลขพอร์ต
- Socket Programming ส่วนใหญ่ยึดตามมาตรฐาน Berkeley sockets ซึ่งมองว่าซ็อกเก็ตเป็น File Descriptor ในระบบ Unix-like
Network Socket หรือ ซ็อกเก็ตเครือข่าย คือโครงสร้างซอฟต์แวร์ภายในโหนดของเครือข่ายคอมพิวเตอร์ที่ทำหน้าที่เป็นจุดปลายทาง (Endpoint) สำหรับการส่งและรับข้อมูลผ่านเครือข่าย โดยโครงสร้างและคุณสมบัติของซ็อกเก็ตจะถูกกำหนดโดย Application Programming Interface (API) ของสถาปัตยกรรมเครือข่ายนั้นๆ ซึ่งซ็อกเก็ตจะถูกสร้างขึ้นเฉพาะในช่วงเวลาที่โปรเซสของแอปพลิเคชันที่ทำงานอยู่ในโหนดนั้นยังคงทำงานอยู่
การใช้งานและหลักการทำงาน
การใช้คำว่า "ซ็อกเก็ต" ในทางซอฟต์แวร์นั้นเปรียบเสมือนกับขั้วต่อไฟฟ้าตัวเมียในทางฮาร์ดแวร์ ซึ่งเป็นอุปกรณ์ที่ใช้ในการสื่อสารระหว่างโหนดที่เชื่อมต่อกันด้วยสายเคเบิล ในขณะที่คำว่า พอร์ต (Port) จะหมายถึงจุดปลายทางทางกายภาพภายนอกของโหนดหรืออุปกรณ์
Socket Descriptor และการจัดการข้อมูล
API ของเครือข่ายจะสร้างสิ่งที่เรียกว่า Socket Descriptor (ตัวระบุซ็อกเก็ต) ให้กับแต่ละซ็อกเก็ตที่แอปพลิเคชันสร้างขึ้น ในระบบปฏิบัติการตระกูล Unix-like, Descriptor นี้จะเป็นประเภทหนึ่งของ File Descriptor ซึ่งแอปพลิเคชันจะเก็บค่านี้ไว้เพื่อใช้ในการอ่านและเขียนข้อมูลในช่องทางการสื่อสาร
การผูกมัด (Binding) และการเชื่อมต่อ
เมื่อสร้างซ็อกเก็ตขึ้นมา มันจะถูกผูกมัด (Bind) กับองค์ประกอบสามอย่างคือ:
- ประเภทของโปรโตคอลเครือข่าย: เช่น TCP หรือ UDP
- ที่อยู่เครือข่ายของโฮสต์ (Network Address): เช่น IP Address
- หมายเลขพอร์ต (Port Number): ทรัพยากรที่ระบุประเภทบริการและเป็นจุดที่โฮสต์อื่นสามารถเชื่อมต่อเข้ามาได้
ซ็อกเก็ตอาจถูกออกแบบมาเพื่อการเชื่อมต่อแบบถาวร (Persistent Connections) ระหว่างสองโหนด หรืออาจใช้ในการสื่อสารแบบไม่มีการเชื่อมต่อ (Connectionless) และการส่งข้อมูลแบบมัลติแคสต์ (Multicast)
ที่อยู่ซ็อกเก็ต (Socket Address)
แอปพลิเคชันสามารถสื่อสารกับโปรเซสระยะไกลได้โดยการแลกเปลี่ยนข้อมูลผ่าน TCP/IP โดยต้องทราบข้อมูลชุดนี้: ประเภทโปรโตคอล + IP Address + หมายเลขพอร์ต ซึ่งเรียกรวมกันว่า Socket Address ซึ่งเปรียบเสมือนด้ามจับสำหรับการเข้าถึงซ็อกเก็ตจากภายนอก
การนำไปใช้งาน (Implementation)
โดยปกติแล้ว Protocol Stack จะถูกจัดเตรียมโดยระบบปฏิบัติการ ซึ่งเป็นชุดบริการที่ช่วยให้โปรเซสสื่อสารกันได้ผ่านโปรโตคอลที่ระบบรองรับ ระบบปฏิบัติการจะส่งต่อ Payload ของแพ็กเก็ต IP ที่เข้ามา โดยการดึงข้อมูล Socket Address ออกจากส่วนหัว (Header) ของ IP และ Transport Protocol แล้วจึงส่งข้อมูลนั้นไปยังแอปพลิเคชันที่ถูกต้อง
Socket API และการเขียนโปรแกรม
การพัฒนาโปรแกรมที่ใช้ Socket API เรียกว่า Socket Programming หรือ Network Programming โดยมาตรฐานที่นิยมใช้กันมากที่สุดคือ Berkeley sockets standard ซึ่งมองว่าซ็อกเก็ตเป็นรูปแบบหนึ่งของ File Descriptor ตามปรัชญาของ Unix ที่ว่า "ทุกอย่างคือไฟล์" (Everything is a file) ทำให้มีฟังก์ชันพื้นฐานในการอ่าน (Read), เขียน (Write), เปิด (Open) และปิด (Close) เช่นเดียวกับไฟล์ทั่วไป
สรุปนิยามของ Internet Socket
Internet Socket จะถูกระบุลักษณะเฉพาะด้วยสิ่งต่อไปนี้:
- Local Socket Address: ประกอบด้วย IP Address ท้องถิ่น และหมายเลขพอร์ต (สำหรับ TCP และ UDP)
- Protocol: โปรโตคอลการขนส่ง เช่น TCP, UDP หรือ Raw IP
- Remote Socket Address: ในกรณีที่ซ็อกเก็ตมีการเชื่อมต่อกับซ็อกเก็ตอื่น (เช่น การสร้าง TCP Connection) จะต้องมีที่อยู่ของซ็อกเก็ตปลายทางด้วย
คำถามที่พบบ่อย
Network Socket คืออะไร?
คือโครงสร้างซอฟต์แวร์ที่ทำหน้าที่เป็นจุดเชื่อมต่อปลายทางสำหรับการสื่อสารข้อมูลระหว่างแอปพลิเคชันผ่านเครือข่ายคอมพิวเตอร์
Socket Address ประกอบด้วยอะไรบ้าง?
ประกอบด้วยโปรโตคอลการขนส่ง (เช่น TCP หรือ UDP), ที่อยู่ IP (IP Address) และหมายเลขพอร์ต (Port Number)
ความแตกต่างระหว่าง Socket และ Port คืออะไร?
พอร์ต (Port) คือหมายเลขระบุบริการบนโฮสต์ แต่ซ็อกเก็ต (Socket) คือจุดเชื่อมต่อซอฟต์แวร์ที่ผูกมัดกับ IP และพอร์ต เพื่อใช้ในการรับส่งข้อมูลจริง
