Tổng quan về lập trình socket cho mạng máy tính

Ổ cắm 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. Ổ cắm cho phép các ứng dụng phần mềm mạng giao tiếp bằng cách sử dụng các cơ chế tiêu chuẩn được tích hợp vào phần cứng và hệ điều hành mạng.

Mặc dù nó có vẻ giống như một tính năng khác của phát triển phần mềm Internet, công nghệ ổ cắm tồn tại lâu trước Web. Và, nhiều ứng dụng phần mềm mạng phổ biến nhất hiện nay dựa vào ổ cắm.

Những gì ổ cắm có thể làm cho mạng của bạn

Một socket đại diện cho một kết nối duy nhất giữa chính xác hai phần mềm (một kết nối điểm-điểm ). Hơn hai phần mềm có thể giao tiếp với máy khách / máy chủ hoặc hệ thống phân phối bằng cách sử dụng nhiều ổ cắm. Ví dụ, nhiều trình duyệt Web có thể đồng thời giao tiếp với một máy chủ Web thông qua một nhóm các ổ cắm được tạo trên máy chủ.

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 ổ cắm cũng có thể được sử dụng để giao tiếp cục bộ ( interprocess ) trên một máy tính duy nhất. Ổ cắm là hai chiều , có nghĩa là một trong hai bên của kết nối có khả năng gửi và nhận dữ liệu. Đôi khi, một ứng dụng khởi tạo giao tiếp được gọi là "khách hàng" và ứng dụng kia là "máy chủ", nhưng thuật ngữ này dẫn đến sự nhầm lẫn trong mạng ngang hàng và nói chung nên tránh.

API và thư viện Socket

Một số thư viện thực hiện 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 chính thống đầu tiên - Thư viện Ổ cắm Berkeley vẫn được sử dụng rộng rãi trên các hệ thống UNIX. Một API rất phổ biến là thư viện Windows Sockets (WinSock) cho các hệ điều hành Microsoft. Liên quan đến các công nghệ máy tính khác, API socket khá trưởng thành: WinSock đã được sử dụng từ năm 1993 và Berkeley socket từ năm 1982.

Các API socket tương đối nhỏ và đơn giản. Nhiều hàm tương tự với các hàm được sử dụng trong các thường trình đầu vào / đầu ra của tệp như read () , write () close () . Các chức năng thực tế gọi để sử dụng phụ thuộc vào ngôn ngữ lập trình và thư viện ổ cắm được chọn.

Các loại giao diện socket

Giao diện ổ cắm có thể được chia thành ba loại:

  • Ổ cắm luồng , loại phổ biến nhất, yêu cầu hai bên giao tiếp đầu tiên thiết lập kết nối socket, sau đó bất kỳ dữ liệu nào được truyền qua kết nối đó sẽ được đảm bảo đến cùng thứ tự mà nó được gửi - được gọi là lập trình hướng kết nối mô hình.
  • Ổ cắm datagram cung cấp ngữ nghĩa "kết nối ít". Với datagram, các kết nối ngầm định chứ không phải rõ ràng như với các luồng. Một trong hai bên chỉ gửi datagram khi cần và chờ người khác trả lời; thư có thể bị mất trong quá trình truyền hoặc nhận được theo thứ tự, nhưng đó là trách nhiệm của ứng dụng chứ không phải là các ổ cắm để giải quyết các vấn đề này. Việc triển khai các ổ cắm datagram có thể cung cấp cho một số ứng dụng một hiệu suất tăng cường và tính linh hoạt bổ sung so với việc sử dụng các ổ cắm luồng, biện minh cho việc sử dụng chúng trong một số trường hợp.
  • Loại socket thứ ba - socket thô - bỏ qua hỗ trợ dựng sẵn của thư viện cho các giao thức chuẩn như TCPUDP . Ổ cắm thô được sử dụng để phát triển giao thức cấp thấp tùy chỉnh.

Hỗ trợ Socket trong giao thức mạng

Các ổ cắm mạng hiện đại thường được sử dụng kết hợp với các giao thức Internet - IP, TCP và UDP. Các thư viện thực hiện các socket cho Giao thức Internet sử dụng TCP cho các luồng, UDP cho các gói dữ liệu và bản thân IP cho các ổ cắm thô.

Để giao tiếp qua Internet, các thư viện ổ cắm IP sử dụng địa chỉ IP để xác định các máy tính cụ thể. Nhiều phần của Internet hoạt động với các dịch vụ đặt tên, để người dùng và người lập trình socket có thể làm việc với máy tính theo tên ( ví dụ: "thiscomputer.wireless.about.com") thay vì theo địa chỉ ( ví dụ: 208.185.127.40). Các ổ cắm luồng và datagram cũng sử dụng các số cổng IP để phân biệt nhiều ứng dụng với nhau. Ví dụ, các trình duyệt Web trên Internet biết sử dụng cổng 80 làm cổng mặc định cho các giao tiếp socket với các máy chủ Web.