Một socket là một trong những công nghệ cơ bản nhất của lập trình mạng máy tính. Socket cho phép ứng dụng phần mềm mạng giao tiếp dùng các cơ chế tiêu chuẩn tích hợp trong phần cứng mạng và hệ điều hành.
Mặc dù nghe như tính năng khác của phát triển phần mềm internet, công nghệ socket tồn tại trước web. Nhiều ứng dụng phần mềm mạng phổ biến dựa vào socket.
Công nghệ Socket làm gì cho mạng của bạn?
Một socket đại diện cho một kết nối đơn giữa đúng hai phần mềm (kết nối điểm-điểm). Nhiều hơn hai phần mềm có thể giao tiếp với hệ thống client/server hoặc phân tán bằng cách dùng nhiều socket. Ví dụ, nhiều trình duyệt web có thể giao tiếp đồng thời với một web server đơn lẻ dùng nhóm socket tạo ra trên server.
Phần mềm dựa trên socket thường chạy trên hai máy tính riêng biệt trên mạng, nhưng socket cũng có thể dùng giao tiếp cục bộ (interprocess) trên một máy tính. Socket là hai chiều (bidirectional), nghĩa là cả hai bên kết nối đều có khả năng gửi và nhận dữ liệu.
Đôi khi ứng dụng khởi tạo giao tiếp gọi là client và ứng dụng kia là server, nhưng thuật ngữ này dẫn đến nhầm lẫn trong mạng ngang hàng (peer-to-peer) và nên tránh chung.
API và Thư viện Socket
Một số thư viện triển khai các giao diện lập trình ứng dụng tiêu chuẩn (API) tồn tại trên internet. Gói đầu tiên phổ biến, Thư viện Socket Berkeley, dùng rộng rãi trên hệ thống UNIX.
API phổ biến khác là thư viện Windows Sockets (WinSock) cho hệ điều hành Microsoft. Tương đối với các công nghệ máy tính khác, API socket đã trưởng thành. WinSock dùng từ 1993 và Berkeley sockets từ 1982.
API socket tương đối nhỏ và đơn giản. Nhiều hàm tương tự dùng trong thủ tục nhập/xuất tệp như read(), write(), và close(). Các cuộc gọi hàm thực tế dùng phụ thuộc vào ngôn ngữ lập trình và thư viện socket chọn.
Loại giao diện Socket
Giao diện socket có thể chia thành ba loại:
- Stream sockets: Loại phổ biến nhất. Hai bên giao tiếp trước thiết lập kết nối socket, sau đó bất kỳ dữ liệu nào qua kết nối đó đảm bảo đến đúng thứ tự gửi (dùng mô hình lập trình hướng kết nối).
- Datagram sockets: Cung cấp ngữ nghĩa không kết nối (connection-less). Với datagram, kết nối ngầm hiểu chứ không tường minh như stream. Mỗi bên gửi datagram khi cần và chờ bên kia phản hồi. Thông điệp có thể mất khi truyền hoặc nhận sai thứ tự; ứng dụng xử lý vấn đề này, không phải socket. Triển khai datagram socket có thể cho một số ứng dụng tăng hiệu suất và linh hoạt hơn so với stream socket.
- Raw sockets: Bỏ qua hỗ trợ tích hợp của thư viện cho giao thức tiêu chuẩn như TCP và UDP. Raw sockets dùng cho phát triển giao thức cấp thấp tùy chỉnh.
Hỗ trợ Socket trong Giao thức Mạng
Socket mạng hiện đại thường dùng kết hợp với giao thức internet IP, TCP, và UDP. Thư viện triển khai socket cho giao thức internet dùng TCP cho stream, UDP cho datagram, và IP cho raw socket.
Để giao tiếp qua internet, thư viện IP socket dùng địa chỉ IP để xác định máy tính cụ thể. Nhiều phần của internet làm việc với dịch vụ đặt tên, để người dùng và lập trình viên socket có thể làm việc với máy tính theo tên (ví dụ, thiscomputer.wireless.lifewire.com) thay vì theo địa chỉ (ví dụ, 208.185.127.40).
Stream và datagram socket cũng dùng số cổng IP (IP port numbers) để phân biệt nhiều ứng dụng với nhau. Ví dụ, trình duyệt web trên internet biết dùng cổng 80 làm mặc định cho giao tiếp socket với web server.