Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.52 MB, 25 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
BỘ GIÁO DỤC VÀ ĐÀO TẠO
<b>TRƯỜNG ĐẠI HỌC THĂNG LONG</b>
<b>SINH VIÊN THỰC HIỆN: NGUYỄN NGỌC TUẤN ANH</b>
<b>HÀ NỘI – 2022</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">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ác nhiệ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 trong hầ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
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">2.1.3. Các Tầng Trong Mơ Hình TCP/IP...6
<b>2.2.Quy Trình Truyền Thơng Client-Server qua TCP/IP...8</b>
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
<b>2.3.Vì sao giao thức TCP/IP được sử dụng rộng rãi?...22</b>
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
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">Mơ hình client-server, hay kiến trúc client-server, là một khung ứng dụng phân tán chia 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ên lạ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ột chươ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ần lượ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ệc giữ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ủ tn theo mơ hình truyền thơng theo mẫu yê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ày chí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ông thường, giao thức client-server tuân theo bộ giao thức TCP/IP.
Tính hiệu quả: Mơ hình này phân chia cơng việc giữa client và server, giúp tă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ửi yêu cầu đến máy chủ web (server). Máy chủ web sẽ xử lý yêu cầu và trả lại nộ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áy tí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 ứng nhu cầu của người dùng.
3
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">Khi 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 động tố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ị truy cậ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ăn chặ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. Ngồ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ần mềm chỉ cần được sửa chữa trên máy chủ.
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ưu trữ 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ười dùng.
4
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Sau khi hiểu sơ lược về Client-Server vậy giữa Client và Server giao tiếp bằng cá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ền thơ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ơng client-server
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 số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ụng giao 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ối tươ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
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">2.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ụng giao 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ỗi segment 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 bao gồ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
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Ảnh 2.4 Tầng mơ hình TCP/IP
<b>Tầng 4 – Tầng Ứng Dụng (Application)</b>
Cung cấp cho các ứng dụng những trao đổi dữ liệu chuẩn hóa, giao tiếp dữ liệu giữa 2 máy khác nhau thông qua các dịch vụ mạng khác nhau.
Bao gồm các giao thức trao đổi dữ liệu hỗ trợ truyền tập tin: HTTP, FTP, Post Office Protocol 3 (POP3), Simple Mail Transfer Protocol (SMTP) và Simple Network Management Protocol (SNMP).
Dữ liệu trong tầng này là dữ liệu ứng dụng thực tế.
<b>Tầng 3 – Tầng Giao Vận (Transport) là tầng chính trong q trình truyền thơng </b>
Chịu trách nhiệm duy trì thơng tin liên tạc end-to-end trên tồ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ép kê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ảo chất lượng gói tin và UDP giúp tốc độ truyền tải nhanh hơn.
<b>Tầng 2 – Tầng Mạng (Internet)</b>
Trong tầng này sẽ có nhiệm vụ xử lý các network packet và kết nối các mạng độc lập. Từ đó vận chuyển các packet qua network thơng qua địa chỉ IP
Giao thức: IP và ICMP (Internet Control Message Protocol) – dùng để báo cáo lỗi.
<b>Tầng 1 – Tầng Vật Lý (Physical)</b>
Còn gọi là Link Layer, gồm các giao thức chỉ hoạt động trên một liên kết – thành phần mạng kết nối các nút hoặc máy chủ trong mạng. Tầng này chịu trách nhiệm truyền dữ liệu giữa hai thiết bị trong cùng một mạng.
Các giao thức truyền dữ liệu: Ethernet (cho mạng LAN) và ARP. 7
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">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ết nố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>BƯỚC 1: </b> Gửi 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 địa chỉ 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
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="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 để đảm bả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ác nhận việc nhận các gói tin trước đó. Trong trường hợp này, số thứ tự xác nhận là 0 vì đây là gói TCP đầu tiên trong kết nối.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Window = 8192: Kích thước cửa sổ, cho biết số lượng byte dữ liệu mà máy khá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ạng má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ương phá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ẽ được tạ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 Socket mới. Nếu không, giá trị INVALID_SOCKET sẽ được trả về. Sau khi socket TCP được tạ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, ứng dụng sử dụng hàm “send()” với các tham số Socket: Socket được sử dụng để gửi gói TCP; 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
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="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ợp nà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ơng tin 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ụng củ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>BƯỚC 2: </b> 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 qua các cổng lắng nghe
11
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="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à server socket. Server socket là một đối tượng trong hệ điều hành chịu trách nhiệm lắng nghe các yê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ác client, 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ính khá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úc struct 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ủa mộ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ột socket 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
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">vớ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 hai tham số:
+family: Loại địa chỉ IP mà server socket sẽ sử dụng. Có thể là AF_INET cho IPv4 hoặc AF_INET6 cho IPv6.
+type: Loại socket mà server socket sẽ tạo. Có thể là SOCK_STREAM cho giao thứ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àng nghe 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
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="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 qua socket đã đượ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ằng cách kiểm tra trường Protocol trong header IP( Thông tin về trường Protocol trong head IP: ). Nếu giá trị của trường nà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ục phâ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 trong header 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
</div>