Tải bản đầy đủ (.pdf) (22 trang)

Bài tập lớn môn mạng và truyền thông (7)

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 (769.7 KB, 22 trang )

HỌC VIỆN NGÂN HÀNG
KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
-----🙞🙜🕮🙞🙜-----

BÀI TẬP NHĨM
MƠN MẠNG TRUYỀN THƠNG
ĐỀ TÀI:
TÌM HIỂU VỀ TCP SOCKET VÀ ỨNG DỤNG CỦA TCP
SOCKET

Giảng viên hướng dẫn

:

Lê Văn Hùng

Lớp

:

212IS06A03

Hà Nội, ngày 07 tháng 06 năm 2022


THÀNH VIÊN VÀ MỨC ĐỘ ĐÓNG GÓP

Lỗ Quang Dũng

20%


22A4040020
Nguyễn Thị Hương Giang

20%

22A4040174
Nguyễn Minh Hiếu

20%

22A4040085
Trần Thị Lệ Quyên

20%

22A4040190
Lê Văn Tùng
22A4040168

20%


LỜI CẢM ƠN

Nhóm em muốn gửi lời cảm ơn chân thành nhất đến thầy Lê Văn Hùng đã tận
tâm hướng dẫn cũng như là truyền dạy chúng em những kiến thức mới, đốc thúc tiến
độ chúng em làm bài. Nhóm em xin cảm ơn thầy đã nhiệt tình chỉ bảo chúng em cách
chọn đề tài, hướng làm bài, chỉ ra quy mô nên xây dựng đề tài giúp chúng em hiểu bài
một cách cụ thể và rõ ràng, để bài tiểu luận của nhóm em được hồn thiện tốt nhất có
thể.

Chúng em xin chân thành cảm ơn!


MỤC LỤC
MỞ ĐẦU ............................................................................................................................ 1
CHƯƠNG I: TỔNG QUAN VỀ TCP SOCKET ............................................................... 2
1.1.

Tổng quan về TCP ....................................................................................... 2

1.1.1.

Giới thiệu về TCP..................................................................................... 2

1.1.2.

Nhiệm vụ của TCP ................................................................................... 2

1.1.3.

TCP hoạt động như thế nào? .................................................................... 3

1.1.4.

Địa chỉ TCP .............................................................................................. 4

1.2.

Tổng quan về Socket .................................................................................... 4


1.2.1.

Giới thiệu về Socket ................................................................................. 4

1.2.2.

Tại sao người dùng lại cần đến Socket?................................................... 5

1.2.3.

Socket hoạt động như thế nào? ................................................................ 5

1.2.4.

Phân loại Socket ....................................................................................... 6

CHƯƠNG 2: MỘT SỐ ỨNG DỤNG CỦA TCP SOCKET TRONG THỰC TIỄN ...... 11
2.1.

Mô hình client-server ................................................................................. 11

2.2.

Sử dụng TCP socket trong mơ hình client-server ...................................... 12

2.3.

Thiết kế TCP Socket Chatroom sử dụng ngôn ngữ Python ....................... 13

2.3.1.


Server...................................................................................................... 14

2.3.2.

Client ...................................................................................................... 16


MỞ ĐẦU
Socket là một trong những thuật ngữ phổ biến được sử dụng trong ngành lập trình hiện
đại. Nói đơn giản, socket là định nghĩa một cách trừu tượng hóa của ổ cắm vật lý. Nếu một ổ
cắm vật lý nhận lấy sự tiếp xúc của cáp điện thì socket cũng hoạt động tương tự như vậy, chỉ
khác thứ nó nhận được là một chương trình mạnh. Một chức năng khác của sockets là tạo ra sự
kết nối giữa client và server. Kết quả này được hoàn thành dựa trên quá trình ràng buộc giữa các
lớp socket tại một điểm cố định. Điểm này chính là cổng port, thường là một con số cụ thể. Liên
kết của những lớp socket giúp các tầng TCP hay TCP Player có thể danh ứng dụng mà dữ liệu
sẽ gửi tới.
Ưu điểm lớn nhất khiến socket trở nên cần thiết là nó có thể tương thích với hầu hết các
hệ điều hành, từ Windows, Linux cho đến Mac OS X… Ngồi ra, socket cịn có thể kết hợp được
với rất nhiều ngơn ngữ lập trình như: C, C++, Java, Visual Basic, Visual C++… Có thể thấy rằng
socket phù hợp để sử dụng ở mọi điều kiện cũng như hoàn cảnh khác nhau. Đặc biệt là lập trình
viên có thể chạy song song nhiều socket trong cùng một lúc. Điều này giúp rút ngắn thời gian và
tăng hiệu suất hoạt động.
Với những ưu điểm tuyệt vời như vậy, đề tài sẽ đào sâu vào các khía cạnh để hiểu rõ thêm
tổng quan và ứng dụng của socket trong thực tiễn.

1


CHƯƠNG I: TỔNG QUAN VỀ TCP SOCKET

1.1. Tổng quan về TCP
1.1.1.

Giới thiệu về TCP

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.
TCP thường kết hợp với IP (Giao thức Internet) theo một cặp được gọi là TCP/IP. Bạn có
thể bắt gặp cụm thuật ngữ này trong phần network setting trên máy tính, điện thoại thơng minh
hoặc các thiết bị cầm tay của mình. IP sẽ xử lý việc gán địa chỉ và chuyển tiếp các gói tin từ
nguồn đến đích trong khi TCP kiểm soát độ tin cậy của truyền dẫn
1.1.2.

Nhiệm vụ của TCP

Chức năng của TCP được xác định là kiểm soát mức độ tin cậy của việc truyền dữ liệu.
Trên các mạng như Internet, dữ liệu được truyền theo dạng gói tin, các gói này là các cụm dữ
liệu được truyền hoàn toàn độc lập trên mạng, được tập hợp lại với nhau khi chúng đến địa chỉ
đích và sau đó trả về dữ liệu gốc.

2


Truyền dữ liệu trên mạng được xử lý theo các lớp, mỗi một giao thức trên một lớp sẽ thực
hiện công việc bổ sung cho các lớp khác. Tập hợp các lớp này được gọi là các ngăn giao thức
(protocol stack). TCP và IP làm việc liên quan chặt chẽ với nhau, lớp này trên lớp kia.
VD: trong 1 stack bạn có thể có các cặp HTTP - TCP - IP - WiFi. Điều này có nghĩa là khi

một máy tính truy cập một trang web, máy tính có thể sử dụng giao thức HTTP để nhận trang
web đó theo dạng HTML, TCP sẽ kiểm soát việc truyền dữ liệu, kiểm sốt IP kênh trên mạng (ví
dụ: internet), và Wifi truyền trên mạng cục bộ.
TCP bởi vậy chịu trách nhiệm hồn tồn trong q trình truyền tải. Một đường truyền tin
cậy là đường truyền đảm bảo toàn bộ các yêu cầu được đáp ứng.
1.1.3.

TCP hoạt động như thế nào?

TCP dán nhãn các gói tin theo dạng đánh số. TCP cũng sẽ đảm bảo rằng dữ liệu tới đích
trong một thời hạn xác định (một khoảng thời gian vài trăm mili giây được gọi là thời gian chờ)
và tuân theo một số quy định kỹ thuật khác. Với mỗi gói tin nhận được, thiết bị gửi sẽ được thông
báo thông qua một gói được gọi là xác nhận. Sau khi hết thời gian chờ, không nhận được xác
3


nhận, nguồn gửi sẽ gửi đi một bản sao của gói tin bị mất hoặc bị hỗn. Các gói tin khơng theo
trình tự cũng sẽ khơng được xác nhận. Nhờ vậy, tất cả các gói dữ liệu sẽ ln được tập hợp theo
thứ tự, khơng có sơ hở, trong một khoảng thời gian chờ xác định và chấp nhận được.
1.1.4.

Địa chỉ TCP

Trong khi IP có một cơ chế hồn chỉnh để định gán địa chỉ được gọi là địa chỉ IP, TCP lại
khơng có hệ thống địa chỉ phức tạp như vậy. Đúng hơn là TCP không cần đến hệ thống này. TCP
chỉ sử dụng các số được cung cấp bởi thiết bị mà nó đang chạy trên đó để xác định nơi nhận và
truyền gói tin ở đâu, cho dịch vụ nào. Các số này được gọi là các port. Ví dụ, các trình duyệt web
thường sử dụng cổng 80 cho TCP, cổng 25 dùng cho email,… Số port thường đi kèm với địa chỉ
IP để chỉ 1 dịch vụ, ví dụ: 192.168.66.5:80.
1.2. Tổng quan về Socket

1.2.1.

Giới thiệu về Socket

Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu trên
internet. Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều, hay còn
gọi là two-way communication để kết nối 2 process trò chuyện với nhau. Điểm cuối (endpoint)
của liên kết này được gọi là socket.
Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng
mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ
thể), từ đó tiến hành kết nối giữa client và server.

4


1.2.2.

Tại sao người dùng lại cần đến Socket?

Ưu điểm lớn nhất của socket là hỗ trợ hầu hết các hệ điều hành bao gồm MS Windows,
Linux,… Ngoài ra, socket cũng được sử dụng với nhiều ngơn ngữ lập trình, gồm C, C++, Java,
Visual Basic, Visual C++, Python,… nên nó có thể tương thích với hầu hết mọi đối tượng người
dùng với những cấu hình máy khác nhau.
Đặc biệt, người dùng cũng có thể chạy cùng một lúc nhiều socket liên tục, giúp nâng cao
hiệu suất làm việc, cũng như tiết kiệm thêm nhiều thời gian và công sức hơn.
1.2.3.

Socket hoạt động như thế nào?

Như đã đề cập trước đó, chức năng của socket là kết nối giữa client và server thông qua

TCP/IP và UDP để truyền và nhận giữ liệu qua Internet. Giao diện lập trình ứng dụng mạng này
chỉ có thể hoạt động khi đã có thơng tin về thông số IP và số hiệu cổng của 2 ứng dụng cần trao
đổi dữ liệu cho nhau.
Hai ứng dụng cần truyền thơng tin phải đáp ứng điều kiện sau thì socket mới có thể hoạt
động:


Hai ứng dụng có thể nằm cùng trên một máy hoặc 2 máy khác nhau
5




Trong trường hợp 2 ứng dụng cùng nằm trên một máy, số hiệu cổng khơng được trùng

nhau.
1.2.4.

Phân loại Socket

Socket có 4 loại khác nhau là:
● Stream Socket
● Datagram Socket
● Websocket
● Unix socket
a). Stream Socket
Đây là một socket hướng kết nối hoạt động qua giao thức TCP. Có nghĩa là nó chỉ hoạt động khi
máy chủ và client đã kết nối thành công với nhau.
Ưu điểm:
● Đảm bảo truyền dữ liệu đến đúng đối tượng, theo đúng thứ tự một cách nhanh chóng.

● Khi thơng điệp được gửi đi thì hệ thống ln có xác nhận nhằm thơng báo về tình trạng
của tiến trình truyền tải cho người dùng.
Nhược điểm:
Vì chỉ có một địa chỉ IP giữa máy chủ và máy nhận nên bắt buộc một máy phải chờ máy kia chấp
nhận kết nối.

6


b). Datagram Socket
Ngược lại với Stream Socket, Datagram Socket là Socket không hướng kết nối và chúng hoạt
động qua giao thức UDP (viết tắt của User Datagram Protocol). Vì thế, Socket này có thể hoạt
động dù khơng có bất kỳ sự kết nối nào của 2 máy với nhau.
- Ưu điểm:
● Q trình kết nối, truyền dữ liệu vơ cùng đơn giản.
● Việc truyền tải thông tin dữ liệu diễn ra nhanh chóng.
- Nhược điểm:
Thơng tin truyền tải có thể bị lặp hoặc truyền sai thứ tự, do đó thơng tin nhận được có độ tin cậy
chưa cao.

7


c) . WebSocket
Đây là một Socket có chức năng hỗ trợ việc kết nối trong môi trường internet giữa client với máy
chủ để chúng được diễn ra nhanh chóng, tăng hiệu quả hơn bằng cách dùng Socket TCP.
Websocket được dùng cho ứng dụng web và tất cả các ứng dụng cần trao đổi thông tin qua môi
trường internet.
- Ưu điểm:
● Tốc độ truyền thông tin giữ máy chủ và client diễn ra nhanh chóng.

● Người dùng dễ dàng phát hiện lỗi để có thể xử lý chúng.
● Cách sử dụng đơn giản và không cần cài thêm các phần mềm khác để hỗ trợ.

8


● Người dùng không cần kết hợp thêm các phương pháp kết nối khác trong quá trình sử
dụng.
- Nhược điểm:
● Hạn chế trong việc tương thích với trình duyệt, bởi Websocket chưa hỗ trợ được ở tất cả
các trình duyệt đang có mặt trên thị trường hiện nay.


Websocket chưa hồn toàn hỗ trợ các dịch vụ yêu cầu về phạm vi nên ít nhiều đem lại bất
tiện cho người dùng.

d). Unix Socket
Xét về tốc độ kết nối thì Unix socket cũng giống như Websocket, đó là nó giúp tăng tốc độ kết
nối và quá trình truyền dữ liệu được diễn ra nhanh chóng, nhẹ và hiệu quả hơn.
Unix socket được xem như một điểm giao tiếp, thúc đẩy tiến trình trao đổi thông tin giữa các ứng
dụng khác nhau trên cùng một máy tính. Theo đó, tồn bộ hoạt động Unix socket được thực hiện
ở nhân của hệ điều hành. Chính nhờ điều này mà dữ liệu giữa các ứng dụng được truyền tải nhanh
chóng hơn rất nhiều.
9


Ngoài ra, nhờ khả năng tránh được routing hay các bước kiểm tra nên với sự hỗ trợ Unix Socket,
việc truyền tải của dữ liệu càng được dễ dàng và đảm bảo hơn
- Ưu điểm:
● Quá trình truyền tải nhanh chóng, nhẹ nhàng và chính xác.

● Tốc độ truy cập vào MySQL tăng đến 30 – 50%.
● Giảm độ trễ thời gian từ 60ms xuống còn 5ms.
● PostgreSQL tăng đến hơn 30%.
● Redis tăng khoảng 50%.
● Và cịn nhiều thơng số về tốc độ khác để minh chứng cho quá trình truyền tải dữ liệu ưu
việc mà Unix Socket mang lại.
- Nhược điểm:
● Đối với các ứng dụng không cùng trên một máy chủ thì Unix Socket khơng thể kết nối
được.
● Trên Unix Socket, vấn đề phân quyền của các tập tin đôi khi xảy ra lỗi làm ảnh hưởng
thao tác trong quá trình sử dụng của người dùng.

10


CHƯƠNG II: MỘT SỐ ỨNG DỤNG CỦA TCP SOCKET TRONG
THỰC TIỄN
Socket: lớp Socket và một số lớp khác như InetAddress, ServerSocket…đều được hỗ trợ
trực tiếp trong java chuẩn, nghĩa là không cần phải sử dụng thêm thư viện của bên thứ ba. Lớp
Socket trong java hỗ trợ làm việc với giao thức TCP và để giao tiếp với nhau thì java hỗ trợ sử
dụng giao tiếp dạng stream. Đối với C# thì cũng tương tự, các lớp làm việc với socket như
TcpClient, IPAddress, TcpListener… đều được C# hỗ trợ tận răng và không cần thêm thư viện
của bên thứ ba nào cả.
2.1. Mơ hình client-server
Đây là mơ hình được sử dụng nhiều nhất trên thế giới, ngay chính các trang web ngày nay
cũng được xây dựng theo mơ hình này. Ở đây client sẽ đóng vai trị là khách, server là chủ, khách
sẽ yêu cầu các tài nguyên/xử lý từ chủ, chủ xử lý và phản hồi lại các kết quả cho khách(nghĩa là
chủ phải phục vụ khách). Ví dụ như khi truy cập vào trang mp3.zing.vn và tải một bài nhạc, khi
đó trình duyệt sẽ là client và nó sẽ yêu cầu bài hát đến server, sau khi server tìm kiếm/xử lý xong
nó sẽ gửi dữ liệu bài hát lại cho trình duyệt.

Dễ nhận thấy rằng một server thường sẽ phục vụ cho nhiều client và số lượng các client sẽ
tăng giảm một cách không thể biết trước được.

11


2.2. Sử dụng TCP socket trong mơ hình client-server
Client sẽ sử dụng một socket để làm việc với server theo 3 bước:


Kết nối tới server.



Trao đổi dữ liệu với server.



Đóng kết nối.
Server sẽ làm việc với client theo 5 bước:



Bind tới một endpoint(một địa chỉ IP và port) trên server.



Bắt đầu lắng nghe kết nối.




Đợi các kết nối.



Tạo một worker khi có kết nối mới.



Quay lại bước 3.

12


Worker ở đây sẽ là một lớp wrapper có nhiệm vụ làm việc trực tiếp với client và nó sẽ được
thực thi trong một thread khác để đảm bảo server có thể phục vụ được nhiều client cùng lúc.
Thực ra khi server chấp nhận một kết nối, nó sẽ sinh ra một socket để ta làm việc với client và
socket này sẽ được Worker bao bọc lại cùng với nó là một thread mới được sinh ra. Sau khi
Worker được sinh ra thì server sẽ quay lại lắng nghe tiếp các kết nối khác, vòng lặp như thế sẽ
diễn ra mãi mãi cho đến khi ta đóng server bằng phương thức close hoặc có một lỗi xảy ra trong
lúc lắng nghe. Thơng thường thì server sẽ cần phải hoạt động 24/7 nên ít khi xảy ra trường hợp
cần phải đóng server.
2.3. Thiết kế TCP Socket Chatroom sử dụng ngôn ngữ Python
Việc xây dựng chatroom có thể bằng nhiều ngơn ngữ như: C#, Java nhưng ở đây nhóm em
xin phép được xây dựng dựa trên ngôn ngữ Python. Mỗi người dùng sẽ có một tài khoản, khi
một người dùng gửi tin nhắn thì tất cả mọi người cịn lại sẽ nhận được tin nhắn đó.
13


Để đơn giản thì người dùng chỉ cần điền một tên bất kỳ để phân biệt với những người dùng

khác chứ không cần phải register mất thời gian. Người dùng sẽ sử dụng một chương trình client
để kết nối đến server chat thông qua một địa chỉ IP và port. Server chỉ có nhiệm vụ quản lý các
kết nối và broadcast tin nhắn đến các client khác cùng kết nối vào server.
2.3.1. Server
- Đầu tiên ta sẽ import 2 thư viện của Python để phục vụ trong quá trình code là: Threading
và Socket.

- Tiếp theo ta khai báo 2 biến host và port và gán giá trị cho chúng như sau:

- Và để khởi chạy server ta sẽ sử dụng phương thức socket của thư viện socket mà ta đã
import:

- Tiếp theo ta khai báo 2 list rỗng để lưu trữ thông tin của các client và nickname khi được
thêm mới hoặc xóa đi:

- Tạo 1 hàm broadcast với tham số đầu vào là message của các client. Hàm này có mục đích
để gửi tin nhắn tới tất cả các client hiện đang được kết nối với nhau:

14


- Cuối cùng là tạo thêm 2 hàm handle và hàm receive (hàm này sẽ có mục đích gắn kết các
phần lại với nhau, hiểu đơn giản là hàm main chính)

15


2.3.2. Client
- Sau khi đã xong phần server ta sẽ tiếp tục đến với phần client. Tương tự như server ta
cũng phải import 2 thư viện của Python, tuy nhiên ở đây ta sẽ khai báo thêm biến nickname để

phân biệt các client khác nhau và sẽ cho người dùng nhập vào từ bàn phím.

- Tiếp theo ta tạo 2 hàm là receive và write để giúp server nhận diện được các client và gửi
các message qua lại các client

16


- Cuối cùng ta gọi các hàm và khởi chạy bằng phương thức start()

- Kết quả sau khi chạy demo (cửa sổ bên trái là server còn 2 cửa sổ phía bên phải là các
client):

17


TÀI LIỆU THAM KHẢO
1. When TCP sockets refuse to die (cloudflare.com)
2. Asynchronous Server Socket Example - .NET Framework | Microsoft Docs
3. What Is a Socket? (The Java™ Tutorials > Custom Networking > All About Sockets)
(oracle.com)
4. Socket là gì? Khái niệm cần biết về giao thức TCP/IP và UDP (matbao.net)

18



×