Ngoài ra, mô hình client-server còn có những ưu điểm khác như:Dễ dàng quản lý: Mô hình này giúp dễ dàng quản lý ứng dụng, bởi vì tất cả các tài nguyên và dịch vụ đều được tập trung trên
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC THĂNG LONG
BÁO CÁO
TÌM HIỂU VỀ PHƯƠNG PHÁP
TRUYỀN THÔNG CLIENT-SERVER
SINH VIÊN THỰC HIỆN: NGUYỄN NGỌC TUẤN ANH
HÀ NỘI – 2022
Trang 2GIỚI THIỆU CHUNG
Client – Server là mô hình được áp dụng nhiều trên hệ thống mạng máy tính hiện nay,giúp các máy tính giao tiếp truyền tải dữ liệu cho nhau Mô hình này phân vùng cácnhiệm vụ giữa các nhà cung cấp Bởi những tính năng nổi bật như dễ dàng triển khai,quản lý , tính bảo mật, tính phân tán, … Client-server được sử dụng rộng rãi trước nhiều
mô hình truyền thông nổi trội khác như peer-to-peer (P2P), hybrid,… Sau đây chúng ta sẽtìm hiểu về phương pháp truyền thông Client-server, 1 phương pháp được sử dụng tronghầu hết các chương trình ứng dụng trong đời sống như world wide web, email, game,….Trong đó phổ biến nhất là trong mạng máy tính
1
Trang 3MỤC LỤC
CHƯƠNG 1 KHÁI QUÁT VỀ CLIENT SERVER 3
1.1 Mô Hình Client-Server là gì ? 3
1.2 Ưu điểm của mô hình Client-Server 3
1.3 Ứng dụng 4
CHƯƠNG 2 BÀI TOÁN TRUYỀN THÔNG GIỮA CLIENT-SV 5
2.1 TCP/IP 5
2.1.1 TCP/IP là gì ? 5
2.1.2 Cách Hoạt Động 6
2.1.3 Các Tầng Trong Mô Hình TCP/IP 6
2.2 Quy Trình Truyền Thông Client-Server qua TCP/IP 8
2.2.1 Bắt tay 3 bước( Trình tự bắt tay TCP) 8
2.2.2 Gửi và Nhận dữ liệu 18
2.2.3 Kết thúc một kết nối 21
2.3 Vì sao giao thức TCP/IP được sử dụng rộng rãi? 22
2.3.1 Ứng dụng của giao thức TCP/IP 23
2.3.2 Ưu nhược điểm của giao thức TCP/IP 23
2
Trang 4CHƯƠNG 1 KHÁI QUÁT VỀ CLIENT SERVER
1.1.Mô Hình Client-Server là gì ?
Mô hình client-server, hay kiến trúc client-server, là một khung ứng dụng phân tánchia nhiệm vụ giữa máy chủ và máy khách, có thể nằm trên cùng một hệ thống hoặc liênlạc thông qua mạng máy tính hoặc Internet Máy khách dựa vào việc gửi yêu cầu đến mộtchương trình khác để truy cập một dịch vụ được cung cấp bởi máy chủ Máy chủ, lầnlượt, chạy một hoặc nhiều chương trình để chia sẻ tài nguyên và phân phối công việcgiữa các máy khách
Ảnh 1.1 Mô Hình Client-Server
Giao tiếp giữa máy khách và máy chủ tuân theo mô hình truyền thông theo mẫuyêu cầu-phản hồi và phải tuân theo một giao thức truyền thông chung Giao thức nàychính thức xác định các quy tắc, ngôn ngữ và mẫu đối thoại sẽ được sử dụng Thôngthường, giao thức client-server tuân theo bộ giao thức TCP/IP
1.2.Ưu điểm của mô hình Client-Server
Mô hình client-server có những ưu điểm sau:
Tính hiệu quả: Mô hình này phân chia công việc giữa client và server, giúptăng hiệu quả sử dụng tài nguyên và nâng cao hiệu suất của ứng dụng
Ví dụ, khi bạn truy cập một trang web, máy tính của bạn (client) chỉ cần gửiyêu cầu đến máy chủ web (server) Máy chủ web sẽ xử lý yêu cầu và trả lạinội dung trang web cho máy tính của bạn Điều này giúp giảm tải cho máytính của bạn và cải thiện hiệu suất của trang web
Tính linh hoạt: Mô hình này có thể dễ dàng mở rộng quy mô để đáp ứngnhu cầu của người dùng
3
Trang 5Khi số lượng người dùng tăng lên, bạn có thể dễ dàng thêm máy chủ mới
để đáp ứng nhu cầu Điều này giúp đảm bảo rằng ứng dụng vẫn hoạt độngtốt ngay cả khi số lượng người dùng tăng lên
Tính bảo mật: Mô hình này giúp bảo vệ dữ liệu của người dùng khỏi bị truycập trái phép.Dữ liệu được lưu trữ trên máy chủ, nơi có thể được bảo vệbằng các biện pháp bảo mật như tường lửa, mã hóa, Điều này giúp ngănchặn những kẻ tấn công truy cập trái phép vào dữ liệu của người dùng.Ngoài ra, mô hình client-server còn có những ưu điểm khác như:
Dễ dàng quản lý: Mô hình này giúp dễ dàng quản lý ứng dụng, bởi vì tất cảcác tài nguyên và dịch vụ đều được tập trung trên máy chủ
Tương thích: Mô hình này có thể tương thích với nhiều hệ điều hành vàthiết bị khác nhau
Tính ổn định: Mô hình này giúp ứng dụng ổn định hơn, bởi vì các lỗi phầnmềm chỉ cần được sửa chữa trên máy chủ
1.3.Ứng dụng
Mô hình client-server được sử dụng trong nhiều ứng dụng khác nhau, bao gồm:Web: Các trang web sử dụng mô hình client-server để cung cấp nội dung vàdịch vụ cho người dùng
Dữ liệu: Các ứng dụng quản lý dữ liệu sử dụng mô hình client-server để lưutrữ và truy cập dữ liệu
Ứng dụng doanh nghiệp: Các ứng dụng doanh nghiệp như CRM, ERP, sửdụng mô hình client-server để quản lý các hoạt động kinh doanh
Giải trí: Các ứng dụng giải trí như trò chơi trực tuyến, video streaming, sửdụng mô hình client-server để cung cấp nội dung và dịch vụ cho ngườidùng
4
Trang 6CHƯƠNG 2 BÀI TOÁN TRUYỀN THÔNG GIỮA
CLIENT-SV
Sau khi hiểu sơ lược về Client-Server vậy giữa Client và Server giao tiếp bằngcách nào? vì sao có thể gửi được dữ liệu qua lại giữa Client-Server? Dựa vào đâu màphương pháp truyền thông đó lại được sử dụng rộng dãi trong hầu hết các ứng dụng? ,…
Để tìm câu trả lời đó trước tiên chúng ta cần tìm hiểu về phương pháp truyềnthông giữa client và Server hay gọi là giao thức mạng Cụ thể giao thức mạng ở đây làTCP/IP, 1 trong những giao thức được sử dụng phổ biến nhất trong việc truyền thôngclient-server
2.1.TCP/IP
2.1.1 TCP/IP là gì ?
-TCP (Transmission Control Protocol) là một giao thức mạng quan trọng được sửdụng trong việc truyền dữ liệu qua một mạng nào đó Một giao thức trong phạm vi mạng
là một tập hợp các quy tắc và trình tự kiểm soát việc thực hiện truyền dữ liệu sao cho tất
cả mọi người trên thế giới bất kể vị trí địa lý, bất kể ứng dụng, phần mềm họ đang sửdụng đều có thể thao tác theo cùng một phương thức giống nhau được gọi là TCP.-IP là viết tắt tiếng Anh của Internet Protocol - giao thức Internet Những thiết bịđiện tử hiện nay nhận diện và liên lạc với nhau trên mạng máy tính bằng cách sử dụnggiao thức Internet Chính vì vậy, mỗi thiết bị đều có IP riêng để tiện liên lạc, kết nốitương tự như địa chỉ nhà hay địa chỉ doanh nghiê yp vâ yy
Ảnh 2.2 Cấu Trúc Địa Chỉ IP
5
Trang 72.1.2 Cách Hoạt Động
Khi một thiết bị muốn gửi dữ liệu đến một thiết bị khác, thiết bị đó sẽ sử dụnggiao thức IP để định tuyến dữ liệu đến mạng của thiết bị nhận Sau đó, thiết bị nhận sẽ sửdụng giao thức TCP để thiết lập kết nối với thiết bị gửi
Sau khi kết nối được thiết lập, thiết bị gửi sẽ chia dữ liệu thành các segment Mỗisegment sẽ được đóng gói thành một gói dữ liệu và được gửi đến thiết bị nhận
Thiết bị nhận sẽ nhận được gói dữ liệu và sử dụng giao thức TCP để kiểm tra lỗi
và đảm bảo rằng dữ liệu được truyền theo thứ tự Nếu có lỗi, thiết bị nhận sẽ yêu cầu thiết
bị gửi gửi lại dữ liệu
Khi tất cả các segment đã được nhận, thiết bị nhận sẽ sử dụng giao thức TCP để giải nén dữ liệu và trả về phản hồi cho thiết bị gửi
Ảnh 2.3 Sơ đồ minh họa cách thức hoạt động của TCP/IP:
2.1.3 Các Tầng Trong Mô Hình TCP/IP
Mô hình TCP/IP tiêu chuẩn được chia thành 4 tầng (Layer) chồng lên nhau baogồm: Tầng vật lý (Physical) → Tầng mạng (Network) → Tầng giao vận (Transport) vàcuối cùng là Tầng ứng dụng (Application) Mỗi tầng đều có giao thức cụ thể khác nhau
6
Trang 8Dữ liệu trong tầng này là dữ liệu ứng dụng thực tế.
Tầng 3 – Tầng Giao Vận (Transport) là tầng chính trong quá trình truyền thông
client-server
Chịu trách nhiệm duy trì thông tin liên tạc end-to-end trên toàn mạng TCP xử lýthông tin liên lạc giữa các máy chủ và cung cấp khả năng kiểm soát luồng, ghépkênh và độ tin cậy
Trong tầng này bao gồm 2 giao thức cốt lõi là TCP và UDP TCP giúp đảm bảochất lượng gói tin và UDP giúp tốc độ truyền tải nhanh hơn
Các giao thức truyền dữ liệu: Ethernet (cho mạng LAN) và ARP
7
Trang 92.2.Quy Trình Truyền Thông Client-Server qua
TCP/IP
2.2.1 Bắt tay 3 bước( Trình tự bắt tay TCP)
Trước khi dữ liệu có thể được truyền, thiết bị gửi và thiết bị nhận phải thiết lập kếtnối với nhau Quá trình này được gọi là trình tự bắt tay TCP và gồm có 3 bước chính:
BƯỚC 1: Gửi yêu cầu kết nối:
Thiết bị gửi gửi gói TCP (gói tin SYN) có cờ SYN được bật tới server
Ảnh 2.5 cấu trúc của 1 gói TCP
Cờ SYN cho biết rằng thiết bị gửi đang yêu cầu bắt đầu kết nối Gói này chứa địachỉ IP của Server nhằm xác định vị trí cũng như chứa số thứ tự ngẫu nhiên màthiết bị gửi sẽ sử dụng để đánh dấu các byte dữ liệu sẽ được truyền trong kết nối
8
Trang 10Ảnh 2.6 Gói thông tin TCP (header TCP)
Cụ thể hơn, gói TCP trên có những thông tin cơ bản như:
Source Port = 1037: Cổng nguồn của gói TCP, được sử dụng để xác địnhứng dụng hoặc dịch vụ trên máy khách đã tạo ra gói tin
Destination Port = 139 (NBT Session): Cổng đích của gói TCP, được sửdụng để xác định ứng dụng hoặc dịch vụ trên máy chủ mà gói tin được gửiđến Cổng 139 thường được sử dụng cho dịch vụ NetBIOS Session Service.Flags = 0x02 ( S.): Cờ SYN được bật, cho biết rằng đây là gói TCP bắtđầu kết nối
Sequence Number = 8221822: Số thứ tự của gói TCP, được sử dụng để đảmbảo rằng các gói tin được nhận theo đúng thứ tự
Acknowledgement Number = 0: Số thứ tự xác nhận, được sử dụng để xácnhận việc nhận các gói tin trước đó Trong trường hợp này, số thứ tự xácnhận là 0 vì đây là gói TCP đầu tiên trong kết nối
Trang 11Window = 8192: Kích thước cửa sổ, cho biết số lượng byte dữ liệu mà máykhách có thể nhận được mà không cần xác nhận.
Phần thông tin biểu diễn dạng máy ,…
Gói TCP sẽ được gửi bằng cách sử dụng Socket TCP gửi phần thông tin dưới dạngmáy (nơi cung cấp cách để giao tiếp giữa các ứng dụng) thông qua tầng giao vận(Transport Layer) của mô hình TCP/IP ,tầng giao vận chịu trách nhiệm đảm bảo rằng dữliệu được truyền đi một cách chính xác và tin cậy, tầng giao vận sử dụng các phươngpháp như kiểm soát lỗi, quản lý luồng dữ liệu, và quản lý kết nối để đảm bảo rằng dữ liệuđược truyền đi một cách chính xác và tin cậy Khi bắt đầu quá trình, Socket TCP sẽ đượctạo bằng cách sử dụng 1 hàm “socket()” trong API mạng
Ảnh 2.7 Hàm socket() trong thư viện Winsock
Nếu không có lỗi xảy ra, “socket()” sẽ trả về một bộ mô tả tham chiếu đến Socketmới Nếu không, giá trị INVALID_SOCKET sẽ được trả về Sau khi socket TCP đượctạo, ứng dụng có thể sử dụng nó để gửi và nhận các gói TCP Việc gửi gói cho client, ứngdụng sử dụng hàm “send()” với các tham số Socket: Socket được sử dụng để gửi góiTCP; Buffer: Vùng bộ nhớ chứa dữ liệu để gửi; Length: Số byte dữ liệu cần gửi; Flags:Các cờ tùy chọn
Ảnh 2.8 Hàm send() trong thư viện Winsock
Gần giống như hàm “socket()” ,nếu không xảy ra lỗi hàm “send()" trả về tổng số byte đãgửi, có thể nhỏ hơn số byte được yêu cầu gửi trong tham số len Nếu không, giá trịSOCKET_ERROR sẽ được trả về
Ví dụ, nếu ứng dụng muốn gửi 10 byte dữ liệu, thì hàm send() trả về 10 có nghĩa
là tất cả dữ liệu đã được gửi thành công Nếu hàm send() trả về một số nhỏ hơn 10, thì
10
Trang 12ứng dụng biết rằng không phải tất cả dữ liệu đã được gửi thành công Trong trường hợpnày, ứng dụng có thể thực hiện các hành động thích hợp, chẳng hạn như thử gửi lại dữliệu bị lỗi.
Như vậy bằng cách sử dụng socket TCP client có thể gửi cho máy chủ gói thôngtin SYN, tại đó có cờ SYN được bật thể hiện đây là gói yêu cầu kết nối
Bảng 2.1 cấu trúc trường cờ TCP(Biểu diễn dưới dạng bit 0-1)Trong đó:
URG: Cờ URG được bật nếu dữ liệu trong gói TCP là dữ liệu khẩn cấp
ACK: Cờ ACK được bật nếu gói TCP là gói xác nhận
PSH: Cờ PSH được bật nếu gói TCP được sử dụng để đẩy dữ liệu lên ngăn xếp ứng dụngcủa máy nhận
RST: Cờ RST được bật nếu gói TCP được sử dụng để đặt lại kết nối TCP
SYN: Cờ SYN được bật nếu gói TCP là gói yêu cầu kết nối
FIN: Cờ FIN được bật nếu gói TCP là gói thông báo kết thúc kết nối
BƯỚC 2: Server nhận gói yêu cầu kết nối từ client và phản hồi bằng gói xác nhận Sau khi client gửi yêu cầu kết nối, Server nhận được các yêu cầu kết nối thông quacác cổng lắng nghe
11
Trang 13Ảnh 2.9 Thông tin của cổng nguồn và cổng đích trong gói thông tin TCP (gói SYN)
Trong đó:
-Các cổng có số từ 0–1023 được gọi là cổng hệ thống hoặc cổng có sẵn; cổng có
số từ 1024-49151 được gọi là cổng người dùng hoặc cổng đã đăng ký, và cổng có số từ49152-65535 được gọi là cổng động, riêng tư hoặc cổng ngắn hạn
Ví dụ:
Một máy chủ web sẽ tạo một cổng lắng nghe trên cổng 80
Một máy chủ FTP sẽ tạo một cổng lắng nghe trên cổng 21
Một máy chủ SMTP sẽ tạo một cổng lắng nghe trên cổng 25
-Cổng lắng nghe được thực hiện bằng cách sử dụng một tiến trình gọi là serversocket Server socket là một đối tượng trong hệ điều hành chịu trách nhiệm lắng nghe cácyêu cầu kết nối từ các máy khách Khi một server muốn cung cấp một dịch vụ cho cácclient, Server sẽ tạo một server socket cho dịch vụ đó
-Tại đây Server sẽ tạo 1 đối tượng Server socket bằng cách gọi hàm “socket()”.Khi một socket được tạo ra, nó sẽ không được gắn với bất kỳ địa chỉ IP hoặc cổng nào.Điều này có nghĩa là socket đó không thể được sử dụng để giao tiếp với các máy tínhkhác bởi vậy hàm “bind()” sẽ được gọi nhằm mục đích gắn socket với một địa chỉ vàcổng Hàm bind() chuyển đổi địa chỉ IP và cổng sang định dạng struct sockaddr, cấu trúcstruct sockaddr là một cấu trúc dữ liệu được sử dụng để lưu trữ địa chỉ IP và cổng củamột máy tính Hàm “bind()” yêu cầu hệ điều hành liên kết socket với địa chỉ IP và cổng
cụ thể Hệ điều hành sẽ kiểm tra xem địa chỉ IP và cổng có đang được sử dụng bởi mộtsocket khác hay không Nếu không, hệ điều hành sẽ chấp nhận yêu cầu và liên kết socket
12
Trang 14với địa chỉ IP và cổng cụ thể Ngược lại, hệ điều hành sẽ từ chối yêu cầu và trả về giá trịâm.
Sau khi hàm “socket()” tạo một đối tượng server socket mới Đối tượng này gồm haitham số:
+family: Loại địa chỉ IP mà server socket sẽ sử dụng Có thể là AF_INET choIPv4 hoặc AF_INET6 cho IPv6
+type: Loại socket mà server socket sẽ tạo Có thể là SOCK_STREAM cho giaothức TCP hoặc SOCK_DGRAM cho giao thức UDP
Ảnh 2.10 Hàm “bind()” trong thư viện Winsock
Bảng 2.2 sơ đồ tất cả trạng thái cổng socket
Sau khi Server socket mới gọi hàm “listen()” để đặt socket ở trạng thái listen , sẵn sàngnghe các yêu cầu từ máy khách và lưu trữ các yêu cầu kết nối trong một hàng đợi
13
Trang 15Ảnh 2.11 Thuật toán “listen()”
Tiếp theo gọi hàm “accept()” để chấp nhận yêu cầu kết nối của máy khách, hàm này trả
về một đối tượng socket mới, gọi là socket kết nối (connected socket) Socket kết nối này
sẽ được sử dụng để giao tiếp trực tiếp giữa máy chủ và máy khách đó
Ảnh 2.12 Thuật toán của “accept()”
Cuối cùng, Server sẽ sử dụng các hàm “read()” và “write()” để đọc và ghi dữ liệu quasocket đã được tạo kết nối từ hàm “accept()” trên
Tùy vào hệ thống, Tầng TCP phía nhận sẽ phân tích header của gói tin TCP bằngcách kiểm tra trường Protocol trong header IP( Thông tin về trường Protocol trong headIP: https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers ) Nếu giá trị của trườngnày là giá trị của một giao thức vận chuyển mà tầng TCP hỗ trợ, thì tầng TCP sẽ tiếp tụcphân tích header của giao thức đó thông qua các bước:
① Đọc các byte của header TCP: Tầng TCP sẽ sử dụng các hàm đọc dữ liệu từ bộnhớ để đọc các byte của header TCP
② Kiểm tra giá trị của các byte: Tầng TCP sẽ kiểm tra giá trị của các byte trongheader TCP để xác định các thông tin quan trọng, chẳng hạn như cổng nguồn,cổng đích, số thứ tự, v.v
14
Trang 16③ Xử lý các thông tin: Tầng TCP sẽ xử lý các thông tin được xác định từ headerTCP Ví dụ, nếu tầng TCP xác định rằng cờ SYN được bật, thì nó sẽ biết rằng đây
là một yêu cầu kết nối TCP mới
Qua đó tầng TCP xác định máy tính nguồn và máy tính đích, chịu trách nhiệm cho việckiểm tra cờ bên nhận và đặt lại cờ bên gửi đảm bảo rằng bắt tay 3 bước được thực hiệnmột cách chính xác và đáng tin cậy
Tiếp theo, Server kiểm tra cờ(flag) trong trường Flags của header TCP, byte thứnhất chứa các cờ điều khiển Máy chủ sẽ kiểm tra bit thứ hai của byte này Nếu bit nàyđược bật (có giá trị là 1), thì đó là cờ SYN (nếu cờ SYN không được bật, thì máy chủ sẽ
bỏ qua gói này) và server sẽ gửi lại 1 gói xác nhận về cho máy khách thông qua tầng giaovận như ở trên
Ảnh 2.13 Thông tin cổng đích và cổng nguồn trong gói xác nhận từ Server
Cụ thể, trong gói xác nhận sẽ chứa các trường:
15
Vị trí thông tin cờ