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

(Đồ án hcmute) nghiên cứu xây dựng nền tảng phần mềm fullstack mqtt cho kỹ sư

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 (7.09 MB, 109 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH

ĐỒ ÁN TỐT NGHIỆP
NGÀNH CNKT CƠ ĐIỆN TỬ

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM
FULLSTACK-MQTT CHO KỸ SƯ

GVHD: ThS. LÊ PHAN HƯNG
SVTH: NGUYỄN TRẦN PHÚC BẢO
NGUYỄN NAM BÌNH

S K L0 1 0 4 2 9

Tp. Hồ Chí Minh, 2023


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM
FULLSTACK-MQTT CHO KỸ SƯ

GVHD: ThS. LÊ PHAN HƯNG
SVTH: NGUYỄN TRẦN PHÚC BẢO 17146232
NGUYỄN NAM BÌNH
Khố: 2017



Tp. Hồ Chí Minh, ngày 17 tháng 2 nằm 2023

17146233


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM
FULLSTACK-MQTT CHO KỸ SƯ

GVHD: ThS. LÊ PHAN HƯNG
SVTH: NGUYỄN TRẦN PHÚC BẢO 17146232
NGUYỄN NAM BÌNH
Khố: 2017

Tp. Hồ Chí Minh, ngày 17 tháng 2 nằm 2023

17146233


i


TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM

CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM


KHOA CƠ KHÍ CHẾ TẠO MÁY

Độc lập - Tự do – Hạnh phúc

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Giảng viên hướng dẫn: Th.S Lê Phan Hưng
Sinh viên thực hiện: Nguyễn Trần Phúc Bảo
Ngành: Công nghệ kỹ thuật Cơ điện tử
Sinh viên thực hiện: Nguyễn Nam Bình
Ngành: Công nghệ kỹ thuật Cơ điện tử

MSSV: 17146232
Lớp: 171462A
MSSV: 17146233
Lớp: 171462A

1. Tên đề tài:
- Nguyên cứu xây dựng nền tảng phần mềm Fullstack-MQTT cho kỹ sư.
2. Các số liệu, tài liệu ban đầu:
+ Linh hoạt hiệu quả trong dự án.
+ Dễ dàng sử dụng.
+ Dễ dàng nâng cấp và cá nhân hố mơ hình.
+ Miễn phí khi sử dụng.
3. Nội dung chính của đồ án:
- Nội dung nghiên cứu tổng quan.
- Cơ sở lý thuyết.
- Thử nghiệm.
Kết luận.
4. Các sản phẩm dự kiến:

+ Tập bản vẽ.
+ Thiết minh.
+ Phần mềm nền tảng.
5. Ngày giao đồ án:
6. Ngày nộp đồ án:
7. Ngơn ngữ trình bày: Bản báo cáo: Tiếng Anh  Tiếng Việt 
Trình bày bảo vệ: Tiếng Anh  Tiếng Việt 
TRƯỞNG KHOA

TRƯỞNG BỘ MÔN

GIẢNG VIÊN HƯỚNG DẪN

(Ký, ghi rõ họ tên)

(Ký, ghi rõ họ tên)

(Ký, ghi rõ họ tên)

ii


NGHIÊN CỨU XÂY DỰNG
NỀN TẢNG PHẦN MỀM FULLSTACKMQTT
DÀNH CHO KỸ SƯ.

iii


TCP


DANH MỤC VIẾT TẮT
Transmission Control Protocol

UDP

User Datagram Protocol

ATP

AppleTalk Transaction Protocol

CUDP

Cyclic UDP

RUDP

Reliable User Datagram Protocol

BGP

Border Gateway Protocol

DHCP

Dynamic Host Configuration Protocol

FTP


File Transfer Protocol

HTTP

Hypertext Transfer Protocol

HTTPS

Hypertext Transfer Protocol Secure

IMAP

Internet Message Access Protocol

IRC

Internet Relay Chat

MQTT

Originally an initialism of MQ Telemetry Transport

XMPP

Messaging and Presence Protocol

SYN

Synchronize


ACK

Acknowledges

FIN

Finish

URL

Uniform Resource Locator

iv


MỤC LỤC
DANH MỤC VIẾT TẮT .......................................................................................... iv
MỤC LỤC.................................................................................................................. v
MỤC LỤC HÌNH ẢNH ............................................................................................ ix
MỤC LỤC BẢNG ..................................................................................................... x
LỜI CAM ĐOAN ..................................................................................................... xi
LỜI CẢM ƠN:......................................................................................................... xii
CHƯƠNG 1. TỔNG QUAN. ..................................................................................... 1
1.1.

Lý do chọn đề tài: ......................................................................................... 1

1.2.

Tính cấp thiết của đề tài: .............................................................................. 1


1.3.

Mục tiêu: ....................................................................................................... 1

1.4.

Phương pháp nghiên cứu và đối tượng nghiên cứu: ................................... 1

1.5.

Các sản phẩm tương tự hoặc sản phẩm tiền nhiệm. ................................... 2

1.5.1.

Sản phẩm Django: ................................................................................. 2

1.5.2.

Sản phẩm Flask: .................................................................................... 2

1.6.

Phạm vi đề tài: .............................................................................................. 3

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT.......................................................................... 4
2.1.

Mơ hình mạng OSI: ......................................................................................... 4


2.2.

Giao thức mạng TCP: .................................................................................. 5

2.2.1.

Lịch sử của giao thức TCP: ................................................................... 5

2.2.2.

Bản thân TCP: ....................................................................................... 5

2.2.3.

Cách hoạt động giao tiếp của phương thức TCP.................................. 5

2.3.

Nền tảng WWW (world wide web):............................................................. 6

2.4.

Giao thức HTTP: .......................................................................................... 6

2.4.1.

HTTP là gì? ............................................................................................ 7

2.4.2.


Cách hoạt động của phương thức HTTP trên hạ tầng mạng: ............. 7

2.4.3.

Các phương thức của giao thức mạng HTTP: ...................................... 7

2.5.

Mã hoá dữ liệu:............................................................................................. 7

2.6.

Mã hoá bất đối xứng: ................................................................................... 7

2.7.

Mã hoá đối xứng:.......................................................................................... 8

2.8.

Phương thức HTTPS: .................................................................................. 9

2.9.

Các khái niệm Python cơ bản. ..................................................................... 9

2.9.1.

Cách thực thi một lệnh Python: ............................................................ 9
v



2.9.2.

Khái niệm Indentation (Thụt lề) trong Python. ................................... 9

2.9.3.

Biến trong Python: ................................................................................. 9

2.9.4.

Ghi chú trong Python: ......................................................................... 10

2.9.5.

Các nguyên tắc đặt tên biến ................................................................ 10

2.9.6.

Các kiểu dữ liệu trong Python: ........................................................... 10

2.9.7.

Kiểu văn bản trong Python (str): ........................................................ 11

2.9.8.

Cắt văn bản (str) trong Python: .......................................................... 11


2.9.9.

Cắt văn bản từ vị trí đầu tiên trong Python: ...................................... 11

2.9.10.

Cắt văn bản đến vị trí cuối trong Python: ....................................... 12

2.9.11.

Chỉ mục âm:...................................................................................... 12

2.9.12.

Chuyển đổi dữ liệu sang dạng viết hoa trong Python: .................... 12

2.9.13.

Chuyển đổi dữ liệu sang dạng viết hoa trong Python (với casefold):
12

2.9.14.

Chuyển đổi dữ liệu sang dạng viết thường trong Python: .............. 12

2.9.15.

Xoá khoảng trắng thừa trong Python: ............................................ 12

2.9.16.


Thay thế văn bản trong Python: ...................................................... 12

2.9.17.

Tách văn bản và tạo thành một mảng trong Python: ..................... 12

2.9.18.

Nối văn bản trong Python: ............................................................... 12

2.9.19.

Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 1): ............ 12

2.9.20.

Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 2): ............ 13

2.9.22.

Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 4): ............ 13

2.9.23.

Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 5 – với %):
13

2.9.24.


Chuyển đổi chữ cái đầu tiên thành chữ viết hoa trong Python: ..... 13

2.9.25.

Canh đều lề trong Python: ............................................................... 13

2.9.26.
Đếm số lần xuất hiện của một văn bản con trong văn bản gốc –
Python: 13
2.9.27.

Chuyển đổi văn bản sang chuẩn UTF-8 trong Python: .................. 13

2.9.28.

Tìm vị trí của một văn bản con trong Python: ................................ 13

2.9.29.

Kiểm tra tất cả ký tự có thuộc bảng Alphabet: ............................... 14

2.9.30.

Kiểm tra tất cả ký tự có phải là số: .................................................. 14

2.9.31.

Kiểm tra tất cả ký tự có phải là số (Phần 2): ................................... 14

2.9.32.


Boolean trong Python: ...................................................................... 14

2.9.33.

Số nguyên trong Python (int): .......................................................... 14
vi


2.9.34.

Số thực trong Python (float): ........................................................... 14

2.9.35.

Số phức trong Python: ...................................................................... 14

2.9.36.

Toán tử trong Python – Giới thiệu: ................................................. 14

2.9.37.

Toán tử số học:.................................................................................. 15

2.9.39.

Toán tử so sánh: ............................................................................... 15

2.9.40.


Toán tử lý luận (Logical):................................................................. 15

2.9.41.

Toán tử xác thực (Identify): ............................................................. 16

2.9.42.

Toán tử Membership:....................................................................... 16

2.9.43.

Toán tử Bitwise: ................................................................................ 16

2.9.44.

Danh sách trong Python ................................................................... 16

2.9.45.

Truy xuất dữ liệu qua chỉ số mục: ................................................... 16

2.9.46.

Chỉ số trong một mảng: .................................................................... 17

2.9.47.

Thay đổi giá trị phần tử: .................................................................. 17


2.9.48.

Thêm phần tử từ một đối tượng: ..................................................... 17

2.9.49.

Thêm phần tử từ một mảng khác: ................................................... 17

2.9.50.

Chèn phần tử vào mảng: .................................................................. 17

2.9.51.

Xoá phần tử trong mảng: ................................................................. 17

2.9.52.

Xoá phần tử qua chỉ mục: ................................................................ 17

2.9.53.

Xoá sự tồn tại của một danh sách: ................................................... 18

2.9.54.

Xoá tất cả phần tử của một danh sách: ........................................... 18

2.9.55.


Vòng lặp với một danh sách: ............................................................ 18

2.9.56.

Lấy chiều dài của một danh sách: .................................................... 18

2.9.57.

Sắp xếp một mảng chữ số: ................................................................ 18

2.9.58.

Sao chép một mảng: ......................................................................... 18

2.9.59.

Tuple trong Python:.......................................................................... 18

2.9.60.

Khởi tạo một biến Tuple: ................................................................. 19

2.9.61.

Truy xuất phần tử trong Tuple: ....................................................... 19

2.9.62.

Vòng lặp for trong Python: .............................................................. 19


2.9.63.

Vòng lặp while trong Python: .......................................................... 20

2.9.64.

Các từ khóa tác động đến vịng lặp: ................................................. 21

2.9.65.

Câu lệnh điều kiện trong Python: .................................................... 22

2.9.66.

Cấu trúc lệnh if trong Python: ......................................................... 22

2.9.67.

Lệnh if … else ................................................................................... 24
vii


2.9.68.

Lệnh if … elif … else trong Python: ................................................ 25

2.9.69.

Lệnh if lồng nhau trong Python: ...................................................... 26


2.10.

Javascript cơ bản: ................................................................................... 34

2.11.

HTML cơ bản .......................................................................................... 41

2.12.

Database là gì? Vai trị? .......................................................................... 46

2.13.

SQLInjection ........................................................................................... 46

CHƯƠNG 3. TRIỂN KHAI ĐỒ ÁN: ..................................................................... 48
3.1.

Mã hoá: ....................................................................................................... 48

3.2.

Giao thức TCP/IP với Socket ..................................................................... 49

3.3.

Giao thức HTTP: ........................................................................................ 52


3.4.

Giao thức MQTT ........................................................................................ 54

3.5.

Cơ chế Broken: ........................................................................................... 66

3.6.

Cơ sở dữ liệu:.............................................................................................. 68

3.6.1.

Lưu đồ giải thuật trợ giúp kết nối với MySQL. ................................. 68

3.6.2.

Lưu đồ giải thuật trợ giúp kết nối với SQLServer. ............................ 69

3.7.

Lưu đồ giải thuật bộ điều phối Render. .................................................... 70

CHƯƠNG 4. THỰC NGHIỆM: ............................................................................. 74
CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ: ......................................................... 77
5.1.

Kết luận: ..................................................................................................... 77


5.2.

Kiến nghị: ................................................................................................... 77

CHƯƠNG 6. TÀI LIỆU THAM KHẢO ................................................................ 78
PHỤ LỤC: ............................................................................................................... 79

viii


MỤC LỤC HÌNH ẢNH
Hình 1.1. Hình Django dành cho Python. .................................................................... 2
Hình 1.2. Hình nền tảng Flask dành cho Python. ......................................................... 2
Hình 2.1. Mơ hình giao tiếp giữa máy khách và máy chủ qua giao thức TCP .............. 5
Hình 2.2. Thời gian cần thiết để một hacker Brute force mật khẩu của bạn .................. 8
Hình 2.3. Thực thi lệnh python trên command line. ..................................................... 9
Hình 2.4. Thực thi lệnh python qua một tệp tin *.py .................................................... 9
Hình 2.5. Cách tạo ra một biến trong Python (trong command line)........................... 10
Hình 2.6. Ghi chú trên một dịng................................................................................ 10
Hình 2.7. Ghi chú trên nhiều dịng. ............................................................................ 10
Hình 2.8. Ví dụ về hàm print trong python. ............................................................... 11
Hình 2.9. Ví dụ về biến có dữ liệu là văn bản chứa nhiều dịng thơng tin. .................. 11
Hình 2.10. Sơ đồ câu lệnh If tham khảo tại tài liệu [5] ............................................... 23
Hình 2.11. Sơ đồ lệnh if else tham khảo tại [5] .......................................................... 24
Hình 2.12. Sơ đồ lệnh if elif else tham khảo tại [5]. ................................................... 26
Hình 2.13. Hình mơ tả q trình làm việc của một hàm. ............................................ 28
Hình 2.14. Hộp thoại sau khi sử dụng hàm alert. ....................................................... 34
Hình 2.15. Mẫu siêu văn bản html ............................................................................. 42
Hình 2.16. Mẫu siêu văn bản html 2 .......................................................................... 45
Hình 2.17. Hình mẫu về thẻ ul và li. .......................................................................... 46

Hình 3.1. Lưu đồ giải thuật thuật tốn mã hố RSA. .................................................. 48
Hình 3.2. Lưu đồ giải thuật TCP/IP với thư viện socket trong python. ...................... 49
Hình 3.3. Lưu đồ phương thức mạng HTTP. ............................................................. 52
Hình 3.4. Lưu đồ giải thuật giao thức MQTT. ........................................................... 65
Hình 3.5. Cách hoạt động của các Subcribe. .............................................................. 67
Hình 3.6. Cách hoạt động của các gói tin Publish. ..................................................... 68
Hình 3.7. Lưu đồ giải thuật quá trình kết nối cơ sở dữ liệu MySQL. .......................... 68
Hình 3.8. Lưu đồ quá tình kết nối với cơ sở dữ liệu SQLServer. ................................ 69
Hình 3.9. Lưu đồ thuật toán tạo ra nội dung gửi cho .................................................. 71

ix


MỤC LỤC BẢNG
Bảng 2.1. So sánh giữa HTTP và HTTPS .................................................................... 9
Bảng 2.2. Bảng toán tử số học. .................................................................................. 15
Bảng 2.3. Bảng toán tử chuyển nhượng ..................................................................... 15
Bảng 2.4. Bảng toán tử so sánh.................................................................................. 15
Bảng 2.5. Bảng toán tử logical................................................................................... 16
Bảng 2.6. Bảng toán tử xác thực ................................................................................ 16
Bảng 2.7. Bảng toán tử membership .......................................................................... 16
Bảng 2.8. Bảng toán tử bitwise .................................................................................. 16
Bảng 2.9. Bảng mẫu về chỉ số trong một mảng .......................................................... 17
Bảng 2.10. Bảng thuộc tính của đối tượng Math. ....................................................... 40
Bảng 2.11. Bảng các phương thức phổ biến trong thư viện Math. .............................. 41
Bảng 3.1. Bảng thông tin về các dạng tin nhắn. ......................................................... 55
Bảng 3.2. Bảng thơng tin, vị trí và ý nghĩa của các Flag trong Fixed header. ............ 56
Bảng 3.3. Bảng thông tin về giá trị Connect return trong phiên bản MQTT V3.1. .... 58
Bảng 3.4. Bảng trạng tháy Connect Return của phiên bản đặc biệt V5.1f. .................. 60
Bảng 3.5. Bảng thông tin về giá trị của Payload......................................................... 60

Bảng 3.6. Bảng phân tích chủ đề và giá trị qua hệ HEX. ............................................ 61
Bảng 3.7. Bảng phân tích giá trị chủ đề và QoS qua mã HEX. ................................... 63

x


LỜI CAM ĐOAN
Tên đề tài: “Nghiên cứu xây dựng nền tảng phần mềm Fullstack-MQTT cho kỹ sư”.
GVHD:

Th.S Lê Phan Hưng

SVTH:

Nguyễn Trần Phúc Bảo

MSSV:

17146232

Nguyễn Nam Bình

MSSV:

17146233

Khố:

2017-2023


- Số điện thoại liên lạc:
- Email:

038.694.0444 039.278.7271



- Lời cam kết:
“Nhóm chúng tơi xin cam đoan đồ án này là cơng trình nghiên cứu của nhóm dưới sự
hướng dẫn của Th.S Lê Phan Hưng. Những nhận định lời văn được nêu ra trong đồ án
là kết quả của sự nghiên cứu trực tiếp, nghiêm túc, độc lập. Tất cả các tài liệu tham khảo,
học thuật, bài báo,... trong đồ án đều được trích dẫn một cách đầy đủ. Đồ án vẫn sẽ đảm
bảo đầy đủ tính khách quan, trung thực, khoa học. Nếu có bất kỳ một sự vi phạm nào
chúng tơi xin chịu hồn tồn trách nhiệm.”

Tp.Hồ Chí Minh, ngày … tháng 02 năm 2023.
Thay mặt nhóm sinh viên
Ký tên

Nguyễn Trần Phúc Bảo

xi


LỜI CẢM ƠN:
Chúng em xin cảm ơn thạc sĩ Lê Phan Hưng đã giúp đỡ và tạo điều kiện cho nhóm
chúng em hồn thành đồ án này. Chúng em cũng cảm ơn sâu sắc tới toàn thể giảng
viên và ban giám hiệu nhà trường.
Chúng con xin cảm ơn đến gia đình và người thân đã giúp đỡ cho chi phí khi thực
hiện đề tài này.

Chúng tôi cũng rất cảm ơn bạn bè và đọc giả đã tìm tới và đọc bài nghiên cứu này.
Chúng tôi cũng xin cảm ơn một vài người bạn ẩn danh đã tải nền tảng của mình trên
sourceforce nơi lưu trữ mã nguồn mở. Tơi rất mong các bạn cùng nhóm chúng tơi
xây dựng FullstackMQTT trở nên thiết thực hơn nữa.

xii


CHƯƠNG 1. TỔNG QUAN.
1.1. Lý do chọn đề tài:
Ngày nay, với sự phát triển mạnh mẽ của công nghệ đặt biệt công nghệ thông tin
và viễn thông nhằm tiên phong tạo ra một nền tảng hỗ trợ cho lập trình fullstack
và IoT. Nên nhóm đề nghiên cứu nền tảng fullstackmqtt dành cho kỹ sư. Nhằm
phục vụ cho mục đích nghiên cứu và học tập. Nhóm rất mong muốn được nhiều
nhà phát triển cùng nhau xây dựng FullstackMQTT trở thành nền tảng mạnh mẽ,
có thể trợ giúp cho sự phát triển IoT, AIoT và IioT của nước nhà.
1.2. Tính cấp thiết của đề tài:
Ngày nay, công nghệ mới luôn luôn được ra đời và công việc liên quan cũng được
sinh ra, như Facebook ra đời kéo theo đó các lĩnh vực lập trình tự động marketing,
… cũng ra đời. Đồng thời, cũng rất nhiều công nghệ cũ cùng với công việc liên
quan cũng bị mất đi. Chúng ta sẽ rất tốn thời gian nếu như vơ tình tìm hiểu về
những cơng nghệ đó. Thay vào đó, chúng ta tự tạo ra nền tảng riêng biệt và từ tạo
ra cơ hội việc làm thì thật tuyệt vời. Nhưng dám nghĩ và dám làm thì vẫn chưa đủ
nếu như chúng ta thiếu đi nền tảng kiến thức đến từ sách, các đoạn phim liên quan.
Đề tài này được xây dựng từ nền kiến thức mà nhóm học tập được từ các sách, bài
báo khoa học, các bài học trực tuyến miễn phí và có trả phí trên các nền tảng học
tập trực tuyến. Đề tài xây dựng ra nền tảng lập trình mới và cũng đặc biệt chứng
minh rằng tự học, tự đọc sách và chi trả chi phí cho việc nâng cấp kiến thức bản
thân sẽ quan trọng như thế nào đối với mọi người nói chung và học sinh cùng sinh
viên nói riêng.

1.3. Mục tiêu:
Mục tiêu và sản phẩm nhóm hướng tới sau khi hoàn thành dự án là:

Nền tảng fstkmqtt (Fullstack MQTT) dưới dạng module package dành cho
python; và đặt biệt cải tiến Broken ở lớp thứ 7 trong mô hình OSI

Tài liệu hướng dẫn tích hợp bản thuyết mình.

Mẫu thử nghiệm.
1.4. Phương pháp nghiên cứu và đối tượng nghiên cứu:
Các phương pháp nghiên cứu nhóm sử dụng là:

Đọc tài liệu đề cập đến mạng OSI. Đặc biệt, nghiên cứu sâu tới TCP/IP và
các ứng dụng của nó.

Đọc tài liệu liên quan đến các chuẩn giao tiếp của giao thức MQTT V3.1 và
V5.0.

Xem và học hỏi từ các nguồn chia sẽ kiến thức như youtube, facebook, ….

Tham gia các cuộc tra đổi học thuật online qua các phần mềm như Messenger,
Zalo và Zoom.

Trao đổi với giảng viên trợ dẫn để hướng dẫn, đưa lời khuyên.
Đối tượng nghiên cứu:

Nghiên cứu về hạ tầng mạng với mơ hình OSI

Nghiên cứu giao thức mạng TCP/IP.


Nghiên cứu giao thức HTTP.
1




Nghiên cứu giao thức MQTT.

1.5. Các sản phẩm tương tự hoặc sản phẩm tiền nhiệm.
1.5.1.
Sản phẩm Django:

Hình 1.1. Hình Django dành cho Python.

1.5.2.

Django là một trong những nền tảng tốt bậc nhất dành cho python hỗ trợ cho
lập trình viên trong lập trình.
Ưu điểm:

Bảo mật của Django khá tốt.

Hỗ trợ người dùng mở rộng thoải mái với lưu lượng traffic lớn.

Dễ sử dụng với Python và mơ hình MVC

Dễ học tập với nguồn tài liệu học tập phổ biến dễ tìm
Nhược điểm:

Khơng đưa ra cảnh báo khi có lỗi.


Tạo bộ định tuyến tương đối khó và phức tạp.
Sản phẩm Flask:

Hình 1.2. Hình nền tảng Flask dành cho Python.

2


Ưu điểm:

Dễ dàng triển khai.

Dễ dàng học tập và nắm bắt.

Dễ dàng tiềm kiếm thơng tin tài liệu.

Có thể phịng chống XSS.
Nhược điểm:

Cần lập trình viên am hiểu về an ninh mạng, hiểu rõ được cách phịng
chống các lỗ hổng.

Khơng thể xem mơ tả lỗi.

Khó triển cho việc triển khai.
1.6. Phạm vi đề tài:
Triển khai dự án lên các nền tảng mã nguồn mở khác bao gồm hệ thống dịch
vụ pip và sourceforce
Phạm vi sử dụng: Quốc tế.


3


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. Mơ hình mạng OSI:











7

Lớp ứng dụng

Là nơi tương tác giữ người dùng với các phần mềm
trên thiết bị có thể truy cập mạng.

6

Lớp trình bày

Là nơi mã hoá dữ liệu từ dữ liệu từ kết quả ở lớp 7
(Lớp ứng dụng).


5

Lớp phiên

Là nơi tạo ra các kênh liên lạc qua cổng thơng tin
(port) có giá trị trong vùng 1 ÷ (2 − 1).

4

Lớp vận chuyển

Là nơi vận chuyển dữ liệu qua các giao thức TCP,
UDP, ATP, CUDP, RUDP

3

Lớp mạng

Quyết định con đường vật lý mà gói dữ liệu sẽ được
gửi đi.

2

Lớp liên kết dữ liệu

Xác định cấu trúc của dữ liệu trên mạng.

1


Lớp vật lý

Vận chuyển dịng bit thơ (0 1) trên phương tiện vật
lý.

Lớp ứng dụng: Là nơi có các tương tác giữa người dùng và máy tính qua các
ứng dụng mà có thể truy cập dịch vụ mạng tới các hệ thống máy chủ khác
nhau trên máy tính của người dùng.
Lớp trình bày: Khi người dùng thao tác với phần mềm sinh ra các dữ liệu có
thể sử dụng được thì các dữ liệu đó sẽ được chuyển tới lớp trình bày để được
xử lý qua các q trình như mã hố dữ liệu.
Lớp phiên: Là nơi tạo ra kênh để trao đổi giữa 2 máy (2 thực thể) khác nhau
qua môi trường mạng, hay gọi là một phiên. Lớp này đóng vai trờ quan trọng
và chịu trách nhiệm cho việc mở phiên và đảm bảo duy trình hoạt động của
một cổng đảm bảo rằng các gói dữ liệu đều được gửi trước khi một trong 2
bên yêu cầu ngắt quá trình do các yếu tố khác ảnh hưởng.
Lớp vận chuyển: Đây là lớp mạng đóng vai trị phân rã gói tin từ lớp phiên
thành nhiều gói tin phù hợp với tốc độ truyền, phù hợp với lớp phiên tại thiết
bị đầu cuối, tạo và kiểm tra tính đúng đắn gói tin nếu khơng đúng sẽ u cầu
lại gói đó.
Lớp mạng: Giữ 2 vai trò quan trọng. Một là định danh địa chỉ cuối cần nhận.
Hai là tìm đường đi đến điểm cuối ngắn nhất (Mơ hình đồ thị). Các dữ kiện
trên sẽ được đính kèm vào gói tin từ lớp vận chuyển đề xuất tới và tạo ra các
gói
Lớp liên kết dữ liệu: Từ các gói lớp này sẽ phân chia thành các khung và thực
hiện gửi từ nguồn tới đích. Lớp này có 2 phần chính bao gồm điều khiển liên
kết Logical (LLC) nhằm xác định phương thức mạng, kiểm tra và động bộ
4





hoá các khung dữ liệu. Hai là MAC (Media Access Control), địa chỉ MAC
đóng vai trị cung cấp kết nối thiết bị và xác định đặc quyền để gửi và nhận
dữ liệu.
Lớp vật lý: là nơi tín hiệu số được chuyển đổi thành các tính hiện vật lý học
như sóng, điện, cơ, …. Một số thiết bị ở lớp vật lý như Ăng-ten của router
(Sóng điện trường), Cáp quang, vệ tinh, dây điện, ….

2.2. Giao thức mạng TCP:
Phương thức TCP xuất hiện ở lớp thứ 4 trong mơ hình OSI. TCP viết tắt cho cụm
từ Transmission Control Protocol.
2.2.1.

Lịch sử của giao thức TCP:
Phương thức mạng TCP lần đầu tiên được công bố vào năm 1974 bởi nhà
phát triển Vint Cetf và Bob Kahn.

2.2.2.

Bản thân TCP:
TCP xuất hiện rất nhiều trong thực tế, vì cơ chế của giao thức TCP giúp nó
trong nhiều giao thức cao cấp hơn như Telnet, BGP, DHCP, FTP, HTTP,
HTTPS, IMAP, IRC, MQTT, XMPP, ….
Trong thực tế giao thức TCP xuất hiện rất nhiều trong thực tế, từ những trang
website mà chúng ta tìm kiếm hằng ngày, từ những phần mềm thiết kế như
Adobe, phần mềm văn phịng của Microsoft, …. Đâu đâu chúng ta cũng đều
có thể thấy giao thức TCP xuất hiện.
Trong lập trình, TCP chúng ta có thể tìm bất cứ ở đâu, như socket trong
python, winsock trên C, websocket.io trên javascript, ….


2.2.3.

Cách hoạt động giao tiếp của phương thức TCP

Hình 2.1. Mơ hình giao tiếp giữa máy khách và máy chủ qua giao thức TCP
Ta có cái trạng thái trên hình 3 lần lượt là:

CLOSED: Trang thái đóng.
5





LISTEN: Trạng thái lắng nghe (Chỉ có trên máy chủ).
ESTABLISHED: Trạng thái được thành lập, ở trạng thái này máy
khách và máy chủ có thể giao tiếp với nhau qua các khung dữ liệu.

FIN_WAIT_1, FIN_WAIT_2: Trạng thái chờ hoàn tất.

CLOSEWAIT: Trạng thái chờ đóng khi hồn tất tất cả tác vụ truyền
nhận giữ hai thiết bị.

LAST_ACK: Trạng thái chờ gói ACK cuối cùng từ nguồn bạn.

TIMEWAIT: Trạng thái chờ, thông thường là 2 mili giây.
Ví dụ minh hoạ, máy chủ (Server) có địa chỉ IP là 43.122.32.123 và cổng port
được mở là 43226, máy khách (Client) có địa chỉ IP là 213.213.43.123.
Khi máy khách kết nối tới máy chủ thì cổng port được mở trên máy khách sẽ

là 65322. Ta có các thơng tin như sau:

Địa chỉ khách: 213.213.43.123/65322 ở trạng thái CLOSED

Địa chỉ máy chủ: 43.122.32.123/43226 ở trạng thái LISTEN
Q trình kết nối như sau:

Client sẽ gửi một gói đồng bộ hoá (SYN) đến Server và chuyển sang
trạng thái SYN_SENT.

Khi Server nhận được gói SYN và gửi đến Client SYN + đoạn mã thừa
nhận (ACK), đồng thời chuyển trạng thái từ LISTEN sang trạng thái
SYN_RECD

Client sẽ gửi trả ACK.

Kết thúc quá trình kiểm tra kết nối Client và Server sẽ kết nối với nhau
qua cổng 43226 tại 213.213.43.123 (Đối với Server) với cổng 65322 tại
213.213.43.123 (đối với Client) đồng thời, cả Client và Server sẽ
chuyển sang trạng thái ESTABLISHED

Sau đó giữa Client và Server sẽ có các đường truyền trao đổi dữ liệu
với nhau.

Khi Client muốn chấm dứt kết nối. Nó thực hiện điều đó bằng cách gửi
FIN và chuyển sang trạng thái FIN_WAIT_1. Khi máy chủ nhận được
vây đó, nó sẽ trả lời với ACK và di chuyển đến trạng thái
CLOSE_WAIT. Khi ACK này được Client nhận được, nó sẽ di chuyển
đến trạng thái FIN_WAIT_2, chờ Server đóng kết nối. Khi Server đóng
kết nối nó cũng gửi một FIN, di chuyển đến trạng thái LAST_ACK. Khi

Client nhận được gói FIN đó nó sẽ gửi một ACK và chuyển đến trạng
thái TIME_WAIT. Sau đó sau khoảng 2ms, nó sẽ chuyển sang đến
trạng thái đón CLOSED. Đồng thời, khi server nhận được gói ACK từ
Client thì Server cũng đóng kết nối tới Client

Nếu Client khơng muốn đóng kết nối thì mối liên hệ giữa Client và
Server sẽ duy trì vĩnh viễn (cho đến khi một trong hai bên đóng kết nối
hoặc bị gián đoạn kết nối mạng).
2.3. Nền tảng WWW (world wide web):
Trước khi hiểu về HTTP chúng ta cùng nhau đi đến khởi nguyên cũng là lý do ra
đời của HTTP. Đó là WWW (World Wide Web) nền tảng phần mềm đầu tiên hỗ
trợ quản lý các tệp siêu văn bản HTML mà chúng ta sẽ tìm hiểu ở mục sau. HTTP
sinh ra giống như một vị cứu tinh trong việc hỗ trợ tìm kiếm và truy xuất đến các
tệp siêu văn bản thông qua các máy chủ trên thế giới được kết nối mạng.
2.4. Giao thức HTTP:
6


2.4.1.

HTTP là gì?
HTTP viết tắt cho cụm từ Hypertext Transfer Protocol (Giao thức truyền siêu
văn bản) được xây dựng trên phương thức có sẵn là TCP.

2.4.2.

Cách hoạt động của phương thức HTTP trên hạ tầng mạng:
Đối với các hồi tiếp tại các trạng thái LISTEN, SYN_SENT, SYN_RECD
của máy khách và máy chủ giống với giao thức TCP.
Tại đầu trạng thái ESTABLISHED máy khách sẽ gửi đến máy chủ một gói

SYN chứa thông điệp “hello server”.
Khi máy chủ nhận được thông điệp trên thì gửi một gói FIN kèm theo thơng
điệp “Hello client” và hồn tất q trình kết nối.

2.4.3.

Các phương thức của giao thức mạng HTTP:
Giao thức HTTP có các phương thức phổ biến sau:

GET: Phương thức GET được dùng để truy xuất thông tin từ máy chủ
đã cho bằng URL.

HEAD: Phương thức HEAD cũng tương tự GET, tuy nhiên phương
thức này dùng để vận chuyển dòng trạng thái và phần tiêu đề.

POST: Phương thức POST dùng để gửi dữ liệu tới Server, ví dụ như
hình ảnh, thơng tin của người dùng, ….

PUT: Chuyển đổi tất cả đại diện hiện tại của đối tượng nguồn thành nội
dụng được tải lên.

DELETE: Xố tồn bộ đại diện hiện tại của đối tượng nguồn được cung
cấp bởi một URL.

CONNECT: Thiết lập một đường hầm đến với máy chủ được xác định
bởi một URL.

OPTIONS: Mô tả các thiết lập giao tiếp cho nguồn đối tượng.

2.5. Mã hoá dữ liệu:

Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin và công cuộc số hố,
tự động hố các thiết bị cơng, nơng nghiệp và nhà thơng minh thì chúng ta sẽ khơng
thể khơng nhắc đến dữ liệu và kho lưu trữ dữ liệu. Vấn đề sẽ là làm sao để dữ liệu
phải đảm bảo tính tồn vẹn và an tồn đặc biệt có thể vơ hiệu hố gây cản trở đến
tin tặc khi họ lấy được dữ liệu? Đó chính là một câu hỏi khó trả lời, đơi lúc một
cuộc tấn cơng an ninh mạng sẽ xảy ra với một công ty, tổ chức nào đó với nhiều
cách tấn cơng như Brute Force, SQLInjection, DLL Injection, tấn công xã hội.
Cách tấn công nào cũng rất nguy hiểm đối với dữ liệu người dùng và khách hàng.
Vì vậy, ngay từ thời xa xưa họ đã nghĩ ra một cách tuyệt vời để mê hoặc đi trí
thơng minh của kẻ tấn cơng, đó chính là mã hoá. Phương pháp mã hoá được sử
dụng ở khắp mọi nơi, nó đóng vai trị khơng thể thiếu trên các lĩnh vực liên quan
đến dữ liệu.
Một số thuật toán mã hố đơn giản mà chúng ta có thể đã biết như Mouse Code,
MD5…. Chúng ta sẽ tìm hiểu sâu hơn ở những phần kế tiếp.
2.6. Mã hoá bất đối xứng:
Chúng ta đã biết về mã hoá dữ liệu và q trình hình thành của nó, ở phần này
chúng ta sẽ tìm hiểu về mã hố bất đối xứng. Trong kỹ thuật bảo mật dữ liệu, mã
7


hoá bất đối xứng là một dạng mã hoá mạnh nhất, bởi vì đơi khi có một vài thuật
tốn sẽ băm nhỏ dữ liệu ra tạo thành những đoạn mã vơ nghĩa. Tuy nhiên, cũng có
một số thuật tốn mã hố 2 chiều với các chìa khố hồn tồn khác nhau như RSA,
…. Mã hoá bất đối xứng đối với dữ liệu thì sẽ tạo ra sự an tồn gần như là tuyệt
đối. Nhưng, một vài thuật tốn có thể làm tăng độ dài của dữ liệu (tốn nhiều không
gian ô nhớ máy chủ để lưu trữ hơn). Có thể kể tên đến các loại mã hoá bất đối xứng
như SHA, SHA-2 được dùng trong công nghệ Blockchain, MD5, ….
2.7. Mã hoá đối xứng:
Ở mục 2.6 ở trước chúng ta đã tìm hiểu về mã hố bất đối xứng, ở phần này chúng
ta sẽ tìm hiểu về một dạng mã hoá mà ngắn hơn phần trước một ký tự. Mã hoá đối

xứng khác với mã hoá bất đối xứng ở chỗ nó có một chìa khố để mã hố và giải
mã. Tuy nhiên, tuỳ thuộc vào độ dài của key mà chúng ta có các đánh giá về độ
bảo mật và an tồn của nó. Nếu như q ngắn thì hệ thống có thể bị kẻ tấn cơng sử
dụng các kỹ thuật như Brute force tấn công vào hệ thống thông qua mật khẩu yếu.
Và, nghiêm trọng hơn là họ có thể xem và giải mã được những tệp tin quan trọng.
Nhưng hình dưới đây là bảng thuộc tính thời gian tấn công giải mã của hacker đối
với độ dài của mật khẩu.

Hình 2.2. Thời gian cần thiết để một hacker Brute force mật khẩu của bạn

8


Như hình 4 ta thấy được độ dài và dạng ký tự của mật khẩu sẽ ảnh hưởng tới thời
gian tấn công của một hacker.
Điểm mạnh:

Không ảnh hưởng nhiều đến không gian lưu trữ.

Tiện lợi.
Điểm yếu:

Dễ bị tấn công khi mật khẩu yếu.
2.8. Phương thức HTTPS:
Phương thức HTTPS là một phiên bản khác của phương thức mạng HTTP cùng
với sự kết hợp mã hố dữ liệu. Q trình truyền nhận các gói tin của phương thức
HTTPS được đánh giá an tồn và uy tín hơn so với phương thức mạng HTTP.
Dạng mã hoá phổ biến được sử dụng cho phương thức này là RSA1024. RSA1024
chúng ta sẽ được tìm hiểu ở phần sau.
HTTP

HTTPS
Khơng mã hố dữ liệu người dùng.
Có mã hố dữ liệu người dùng.
Nhanh hơn
Chậm hơn vì có mã hoá dữ liệu.
Bảng 2.1. So sánh giữa HTTP và HTTPS
2.9. Các khái niệm Python cơ bản.
2.9.1.
Cách thực thi một lệnh Python:

Đối với viết mã trực tiếp trên command line:

Hình 2.3. Thực thi lệnh python trên command line.


Đối với một tệp tin python

Hình 2.4. Thực thi lệnh python qua một tệp tin *.py
2.9.2.

Khái niệm Indentation (Thụt lề) trong Python.
Indentation chỉ đến khoảng trắng trước một dịng code. Đối với ngơn ngữ
khác như C, Java, Javascript, Cpp, C#, … thì khái niệm indentation chỉ giúp
cho chúng ta dễ đọc các mã lệnh hơn. Tuy nhiên, đối với Python, khái niệm
Indentation là không thể thiếu. Indentation sẽ giúp trình biên dịch ngơn ngữ
Python hiểu rằng đâu là một khối mã phụ thuộc.

2.9.3.

Biến trong Python:

Biến trong Python là một dạng có kiểu dữ liệu là Object, tức là, chúng ta có
thể thay đổi giá trị của nó theo các kiểu dữ liệu khác nhau mà chúng ta sẽ tìm
9


hiểu ở phần in đậm sau. Biến trong Python sẽ được tạo ra khi và khi chúng
ta gán giá trị cho nó.

Hình 2.5. Cách tạo ra một biến trong Python (trong command line).
2.9.4.

Ghi chú trong Python:
Ghi chú là một phần không thể thiếu trong lúc chúng ta viết một chương trình,
nó sẽ giúp chúng ta hiểu hơn về chương trình, hàm con hay một đoạn mã nào
đó giúp tổng quan chương trình làm nhiệm vụ gì.
Ta có hai dạng ghi chú:

Ghi chú trên một dịng:

Hình 2.6. Ghi chú trên một dòng.


Ghi chú trên nhiều dòng:
Đối với ghi chú cho các Object hay Hàm thì chúng ta hay sữ dụng bằng
cách sau:

Hình 2.7. Ghi chú trên nhiều dịng.

2.9.5.


2.9.6.

Ta có thể thay dấu nháy đơn thành dấu nháy kép để thức hiện ghi chú
nhiều lần.
Các nguyên tắc đặt tên biến

Bắt đầu với các ký tự chữ hoặc “_”.

Trong tên biến có thể có chữ, “_” và số.

Có phân biệt chữ hoa chữ thường
Các kiểu dữ liệu trong Python:

Kiểu văn bản: str.

Kiểu số: int, float, complex.

Kiểu mảng: list, tuple, range.
10


×