Theo cách nhìn của người lập trình, TCP/IP giống như hầu hết các giao thức truyền thông khác cung cấp cơ chế cơ bản để truyền dữ liệu. Đặc biệt, TCP/IP cho phép người lập trình thiết lập truyền thông giữa hai chương trình ứng dụng và truyền dữ liệu qua lại. TCP/IP cung cấp kết nối bình đẳng giữa các ứng dụng kể cả các ứng dụng chạy trên cùng một máy.
Một phát triển của mô hình peer-to-peer là mô hình Client-Server đã trở thành mô hình cơ bản được sử dụng trên mạng máy tính. Chương trình Server là một chương trình chờ đợi kết nối từ chương trình Client và cung cấp dịch vụ cho Client.
Mô hình được mô tả như sau:
Tiến trình Server được khởi động trên một hệ thống nào đó sau đó chờ đợi một tiến trình Client kết nối đến yêu cầu dịch vụ.
Tiến trình Client được khởi động trên cùng hệ thống máy với chương trình Server hoặc từ một hệ thống khác kết nối với hệ thống chủ thông qua mạng. Client gửi yêu cầu qua mạng tới tiến trình Server đòi hỏi một số dịch vụ như:
Trả lại ngày giờ cho Client In một file cho Client
Đọc hoặc ghi file vào hệ thống file của Server Cho phép Client login vào hệ thống Server
Chạy chương trình của Client trên hệ thống Server
Sau khi cung cấp dịch vụ cho Client, Server tiếp tục nghỉ và chờ đợi kết nối khác.
Chúng ta có thể chia tiến trình Server làm 2 kiểu:
Tương tác (Interative Server): Khi Client đòi hỏi những dịch vụ đã đăng ký trước với khoảng thời gian thực hiện nhỏ, Server tự làm công việc đó ví dụ dịch vụ trả lại ngày giờ.
Đồng thời (Concurrent Server): Với những yêu cầu đòi hỏi thời gian thực hiện lớn, tiến trình Server sinh một tiến trình con để thực hiện yêu cầu còn nó tiếp tục chờ đợi yêu cầu khác. Dịch vụ in file, đọc-ghi file được thực hiện theo kiểu này.
II.1. Mô hình Client-Server sử dụng dịch vụ không kết nối
Với mô hình không kết nối, client không kết nối với server mà chỉ gửi dữ liệu đến sử dụng lời gọi sento(), ngược lại, server sử dụng lời gọi recvfrom() chờ đợi dữ liệu từ client chuyển đến. Lời gọi recvfrom() trả lại địa chỉ của client, nhờ đó server có thể gửi kết quả lại cho client.
recvfrom() recvfrom() bind() bind() socket() sendto() Server (connectionless protocol)
block until data received from client
process request sendto() socket() Client data (reply) data (request)
II.2. Mô hình Client-Server sử dụng dịch vụ hướng kết nối
Với mô hình Client-Server sử dụng dịch vụ hướng kết nối, đầu tiên Server được khởi động và chờ đợi một kết nối từ client.
Sau khi kết nối được thiết lập, hai bên luân phiên nhau gửi nhận dữ liệu thông qua đường truyền.
accept() listen() bind() socket() write() write() Server (connection-oriented protocol) Connect() read() read() socket() block until connection
from client Process request Connection establishment data (reply) data (request) Client