Khái niệm, định nghĩa Socket là gì?

Socket là một giao diện lập trình ứng dụng (API-Application Programming Interface). Thông qua giao diện này, chúng ta có thể lập trình điều khiển, truyền thông giữa 2 máy sử dụng giao thức TCPIP và UDP. Nó được giới thiệu lần đầu tiên trong ấn bản UNIX – BSD 4.2. dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(), receive(), read(), write(), close() ,..). Ngày nay, Socket được hỗ trợ trong hầu hết các hệ điều hành như MS Windows, Linux và được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như C, C++, Java, Visual Basic, Visual C++,…

Socket là thiết bị truyền thông hai chiều gửi và nhận dữ liệu từ máy khác

Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được đánh dấu bởi hai cổng (port). Thông qua các cổng này một quá trình có thể nhận và gởi dữ liệu với các quá trình khác.

Các loại socket

  • Socket có hướng kết nối (TCP):
  • Socket không hướng kết nối (UDP)

Đặc điểm của socket hướng kết nối

  • Có một đường kết nối (địa chỉ IP) giữa 2 tiến trình
  • Một trong 2 tiến trình kia phải đợi tiến trình kia yêu cầu kết nối.
  • Có thể dùng để liên lạc theo mô hình client và sever
  • Mô hình client /sever thì sever lắng nghe và chấp nhận từ client
  • Mỗi thông điệp gửi phải có xác nhận trả về
  • Các gói tin chuyển đi tuần tự.

Đặc điểm socket không hướng kết nối:

  • 2 Tiến trình liên lạc với nhau không kết nối trực tiếp
  • Thông điệp gửi đi phải kèm theo thông điệp người nhận
  • Thông điệp có thể gửi nhiều lần
  • Người gửi không chắc chắn thông điệp đến tay người nhận.
  • Thông điệp gửi sau có thể đến trước và ngược lại.

Số hiệu cổng của Socket

Để có thể thực hiện các cuộc giao tiếp , một trong 2 quá trình phải công bố số hiệu cổng của socket mà mình đang sử dụng

Mỗi công giao tiếp phải thể hiện một địa chỉ xác định trong hệ thống.

Khi quá trình được gán một số hiệu cổng , nó có thể nhận dữ liệu gửi đến chỗ này từ quá trình khác