Socket คืออะไร?
Socket เป็นเทคโนโลยีพื้นฐานสำคัญที่สุดของ Network Programming อนุญาตให้แอปพลิเคชันเครือข่ายสื่อสารผ่านกลไกมาตรฐานที่สร้างไว้ในฮาร์ดแวร์และ OS มีอยู่ก่อนเว็บมากกว่า 30 ปี หลายแอปยอดนิยมพึ่งพา Socket
ความสามารถของ Socket
- แทนการเชื่อมต่อ Point-to-Point ระหว่าง 2 ชิ้นของซอฟต์แวร์
- มากกว่า 2 ฝ่าย: ใช้ Multiple Sockets (เช่น Web Server 1 ตัว รับหลาย Browser พร้อมกัน)
- รันบนคอมพิวเตอร์แยกกัน (Network) หรือเครื่องเดียวกัน (Interprocess/ Local)
- Bidirectional: ทั้งสองฝ่ายส่งและรับข้อมูลได้
- หลีกเลี่ยงคำว่า Client/Server ใน P2P เพราะสร้างความสับสน
Socket APIs และ Libraries
- Berkeley Socket Library: แพ็กเกจแรกที่แพร่หลาย ใช้ใน UNIX ตั้งแต่ 1982
- Windows Sockets (WinSock): สำหรับ Microsoft OS ตั้งแต่ 1993
- API เล็ก สั้น เข้าใจง่าย คล้าย File I/O:
read(),write(),close() - Function จริงขึ้นอยู่กับภาษาและ Library ที่เลือก
ประเภท Socket Interface (3 แบบ)
| ประเภท | ลักษณะ | โปรโตคอลทั่วไป |
|---|---|---|
| Stream Sockets | Connection-oriented สร้างการเชื่อมต่อก่อน ข้อมูลมาถึงตามลำดับ (Reliable, Ordered) | TCP |
| Datagram Sockets | Connection-less ส่ง Datagram ได้ทันที ไม่สร้าง Connection ข้อมูลอาจหาย หรือมา Out-of-order แอปจัดการเอง | UDP |
| Raw Sockets | Bypass Library protocol support (TCP/UDP) ใช้พัฒนา Custom Low-level Protocol | IP / Custom |
Socket ร่วมกับ Network Protocols
- Modern Sockets ใช้กับ IP, TCP, UDP
- Library ใช้ TCP สำหรับ Streams, UDP สำหรับ Datagrams, IP สำหรับ Raw Sockets
- ระบุคอมพิวเตอร์ด้วย IP Address (หรือ Domain Name ผ่าน DNS)
- Stream/Datagram ใช้ Port Number แยกแอปพลิเคชัน (เช่น Web Browser ใช้ Port 80 กับ Web Server)