---
# System prepended metadata

title: Mạng Máy Tính

---

# Computer Networks Cơ Bản
## I. Giới thiệu
### 1. Mạng máy tính là gì?
#### Khái niệm
Mạng máy tính đề cập đến các thiết bị máy tính được kết nối với nhau có thể trao đổi dữ liệu và chia sẻ tài nguyên với nhau.

#### Các loại network khác
##### IOT
Internet of Things (Internet vạn vật) là các vật thể vật lý được kết nối với nhau với các cảm biến,khả năng xử lý,phần mềm và các
công nghệ khác.
![image](https://hackmd.io/_uploads/ByEAVSbDel.png)

##### Wireless (Mạng không dây)
Giống như các loại mạng khác, chỉ có điều là không sử dụng cáp. Công nghệ này sử dụng nhiều loại kết nối vô tuyến khác nhau.
![image](https://hackmd.io/_uploads/rkseHSZPgl.png)


##### Mobile (Mạng di động)
Mobile/Cellular network bao gồm một số trạm gốc (base station), mỗi trạm phục vụ việc truyền (transmit) và nhận dữ liệu số không dây.
![image](https://hackmd.io/_uploads/rkWmSrbPxe.png)


#### SDN (Software-Defined Networking)
Là một công nghệ cho phép ảo hóa (virtualization) các thiết bị mạng
![image](https://hackmd.io/_uploads/HyG8HSZPgg.png)


### 2. Internet
#### Internet là gì?
Internet là một hệ thống mạng được kết nối toàn cầu, tạo điều kiện thuận lợi cho việc giao tiếp và truy cập tài nguyên dữ liệu trên toàn thế giới, thông qua một tập hợp rộng lớn các mạng lưới tư nhân, công cộng, doanh nghiệp, học thuật và chính phủ.

#### Web là gì?
Các thuật ngữ 'Internet' và 'World Wide Web' thường được sử dụng thay thế cho nhau, nhưng chúng không hoàn toàn giống nhau.

Internet đề cập đến hệ thống truyền thông toàn cầu, bao gồm phần cứng và cơ sở hạ tầng, trong khi web là một trong những dịch vụ được truyền thông qua internet.

#### Các dịch vụ Internet
Internet = Cơ sở hạ tầng cung cấp dịch vụ cho các ứng dụng
+ Email
+ Nhắn tin
+ VOIP (Voice over IP)
+ Lướt Web
+ Gaming

### Protocol (giao thức)
#### Network Protocol
Giao thức mạng là một tập hợp các quy tắc được thiết lập để xác định cách dữ liệu được truyền giữa các thiết bị khác nhau trong mạng.
![image](https://hackmd.io/_uploads/S1LFFB-Pxx.png)

#### Một số giao thức phổ biến
##### TCP
Một giao thức phổ biến được sử dụng để giao tiếp qua mạng.
![image](https://hackmd.io/_uploads/HkSP5BbDll.png)



##### HTTP
Viết tắt của Hyper Text Transfer Protocol (Giao thức Truyền Tải Siêu Văn Bản), là giao thức chính để duyệt web.
Phiên bản bảo mật là HTTPS.
![image](https://hackmd.io/_uploads/rkHc9Bbwxg.png)
 
##### SMTP
Simple Mail Transfer Protocol (Giao thức Truyền Thư Đơn Giản): được thiết kế để gửi và phân phối email.
![image](https://hackmd.io/_uploads/BycbiBbwxx.png)

##### FTP
File Transfer Protocol (Giao thức Truyền Tệp): FTP cho phép người dùng truyền tệp từ máy này sang máy khác.
Các loại tệp có thể bao gồm tệp chương trình, tệp đa phương tiện, tệp văn bản, tài liệu,...
![image](https://hackmd.io/_uploads/SJdSiSZDxx.png)

##### Telnet
Quá trình kết nối ở đây được gọi là đăng nhập từ xa. Hệ thống gửi yêu cầu kết nối là máy tính cục bộ, và hệ thống chấp nhận kết nối là máy tính từ xa. Ví dụ: TeamViewer, UltraView,...
![image](https://hackmd.io/_uploads/B1a5iB-vxe.png)

### 3. Mô hình OSI 
Mô hình OSI (Open Systems Interconnection) mô tả 7 tầng (layer) mà hệ thống máy tính sử dụng để giao tiếp qua mạng. 
![image](https://hackmd.io/_uploads/BkD7ar-Pgg.png)

Trong đó, L5 L6 L7 thuộc các tầng phần mềm (software), còn L1 L2 L3 thuộc các tầng phần cứng (hardware).
![image](https://hackmd.io/_uploads/ryMdpBbvxe.png)

Các đơn vị vận chuyển tương ứng như sau
![image](https://hackmd.io/_uploads/Hk69TBZDlg.png)
+ L1: Bit
+ L2: Frame (khung)
+ L3: Packet (gói tin)
+ L4: Segment (phân khúc)
+ L5, L6, L7: Message

### 4. Một số loại mô hình khác
![image](https://hackmd.io/_uploads/B1NzCHWwxl.png)
So với mô hình OSI, thì mô hình TCP/IP chỉ có 4 layer, Application, Presentation, Session được gộp lại thành Application layer.

Physical và Data Link được gộp thành Network Interface.

Dưới đây sẽ là chi tiết các tầng theo mô hình TCP/IP

## II. Application Layer (tầng ứng dụng)
### 1. Giới thiệu
#### Khái niệm
Tầng ứng dụng đảm bảo một ứng dụng có thể giao tiếp hiệu quả với các ứng dụng khác trên các hệ thống máy tính và mạng khác nhau.

Đây là một thành phần trong ứng dụng, kiểm soát phương thức giao tiếp với các thiết bị khác. 

Đây là một dịch vụ lớp trừu tượng (abstruction layer) giúp che giấu phần còn lại của ứng dụng khỏi quá trình truyền tải (transmit).

#### Chức năng
+ Đảm bảo rằng ứng dụng nhận được đã được xác định, có thể truy cập và sẵn sàng chấp nhận dữ liệu
+ Khi cần thiết, cho phép xác thực giữa các thiết bị nhằm tăng cường lớp bảo mật mạng
+ Xác định các loại message được trao đổi, ví dụ: request và response (yêu cầu và phản hồi)
+ Đảm bảo sự đồng thuận ở cả hai phía về quy trình khôi phục lỗi, tính toàn vẹn và bảo mật dữ liệu
+ Xác định các giao thức và cú pháp dữ liệu ở cấp độ ứng dụng
+ Hiển thị dữ liệu ở phía nhận cho ứng dụng người dùng.

#### Các giao thức ở tầng ứng dụng
![image](https://hackmd.io/_uploads/r1S9xLZDxg.png)

### 2. P2P và Client-Server
#### APPLICATION ARCHITECTURE (Kiến trúc ứng dụng)
Kiến trúc ứng dụng được thiết kế bởi nhà phát triển ứng dụng và quy định cách thức ứng dụng được cấu trúc trên các hệ thống đầu cuối khác nhau.

Client-Server:
![image](https://hackmd.io/_uploads/S1h_bUZwle.png)

Peer to Peer (P2P):
![image](https://hackmd.io/_uploads/SkFvWUbvxx.png)

### 3. HTTP
#### HTTP là gì
Hyper Text Transfer Protocol (Giao thức Truyền Tải Siêu Văn Bản), là giao thức tầng ứng dụng của Web, là cốt lõi của Web. 
Giao thức này được định nghĩa trong [RFC 1945] và [RFC 2616].

HTTP được triển khai trong hai chương trình: chương trình client (máy khách) và chương trình  server (máy chủ). Được chạy trên các hệ thống đầu cuối khác nhau, giao tiếp với nhau bằng cách trao đổi các thông điệp HTTP. 
HTTP định nghĩa cấu trúc của các thông điệp này và cách client và server trao đổi message với nhau.
![image](https://hackmd.io/_uploads/rkHc9Bbwxg.png)

#### Web Page
+ Một Web page bao gồm các đối tượng (objects)
+ Một đối tượng đơn giản là một file, ví dụ như file HTML, file ảnh JPEG, ứng dụng Java hoặc một đoạn video
+ Hầu hết các web page bao gồm một file HTML cơ sở và một số đối tượng được tham chiếu
+ URL (Uniform Resource Locator), là địa chỉ của một tài nguyên duy nhất trên Web. Cấu trúc URL:
![image](https://hackmd.io/_uploads/BySLm8Zwee.png)

#### Client-Server
![image](https://hackmd.io/_uploads/r1YdXIbPle.png)
+ HTTP client khởi tạo kết nối TCP tới máy chủ `www.udemy.com` trên cổng (port) 80
+ HTTP client gửi HTTP request đến máy chủ, bao gồm tên đường dẫn `/course_x/test.docx`.
+ HTTP server nhận được request, tìm `/course_x/test.docx` trong đó, đóng gói (encapsulate) đối tượng trong HTTP response và gửi response lại cho client.
+ HTTP client nhận được response. Kết nối TCP
kết thúc.
![image](https://hackmd.io/_uploads/HJhoV8-vgl.png)
![image](https://hackmd.io/_uploads/S1X2EUZvex.png)

#### Một số response status code
+ **200 OK**: Request đã thành công và thông tin được trả về trong response
+ **301 Moved Permanently**: Đối tượng được request đã được di chuyển vĩnh viễn, URL mới được chỉ định trong tiêu đề `Location:` của response. Phần mềm client sẽ tự động lấy URL mới.
+ **400 Bad Request**: Đây là mã lỗi chung cho biết server không thể hiểu được request.
+ **404 Not Found**: Tài liệu được request không tồn tại ở server này.
+ **505 HTTP Version Not Supported**: Phiên bản HTTP Protocol Request không được hỗ trợ. 

### 4. HTTPS
HTTPS (Hypertext Transfer Protocol Secure) là một phần mở rộng (extension) của HTTP. Bảo mật hơn HTTP vì nội dung truyền đi được mã hóa.
Nó là sự kết hợp giữa giao thức HTTP và SSL (Secure Socket Layer).
Ví dụ:
![image](https://hackmd.io/_uploads/S1shbCZPxl.png)
#### Nguyên lý hoạt động
![image](https://hackmd.io/_uploads/B1pCWAWwxe.png)

#### SSL và TLS
SSL và TLS là các giao thức mã hóa (encrypt) và xác thực (authenticate) việc truyền dữ liệu giữa các server, hệ thống, ứng dụng và người dùng.
#### Certificate
![image](https://hackmd.io/_uploads/BkGUzAZvgg.png)

### 5. FTP
![image](https://hackmd.io/_uploads/HJloG0Zwee.png)
![image](https://hackmd.io/_uploads/B1_szRZvgx.png)
#### Một số lệnh FTP
+ `USER [username]`: Dùng để gửi thông tin định danh (identification) người dùng đến server.
+ `PASS [password]`: Dùng để gửi mật khẩu người dùng đến server.
+ `LIST`: Dùng để yêu cầu server gửi lại danh sách tất cả các file trong folder hiện tại.
+ `RETR [filename]`: Dùng để lấy về (retrieve) một file.
+ `STOR [filename]`: Dùng để lưu một file vào thư mục hiện tại của máy chủ từ xa (remote host).

#### Một số phản hồi FTP
+ **331** Username OK, yêu cầu mật khẩu.
+ **125** Kết nối dữ liệu (data connection) đã mở; bắt đầu truyền dữ liệu (data transfer).
+ **425** Không mở được kết nối dữ liệu.
+ **452** Lỗi ghi file

#### TFTP
+ Trivial File Transfer Protocol
+ Sử dụng UDP hay vì TCP
+ Port: 69
+ Không có xác thực (authentication)
+ RFC 1350

### 6. Email
#### SMTP
SMTP (Simple Mail Transfer Protocol), được định nghĩa trong RFC 5321. SMTP chuyển thư từ mail server của người gửi đến mail server của người nhận.
![image](https://hackmd.io/_uploads/S1poBXMPgl.png)

#### Các giao thức truy cập mail
#### POP3
+ Post Office Protocol— Version 3
+ RFC 1939
+ Cực kì đơn giản, các chức năng có hạn
+ Port 110

#### IMAP
+ Internet Mail Access Protocol
+ RFC 3501
+ Giải quyết những hạn chế lớn của POP3

#### HTTP
+ Dựa trên web (web-based)
+ User Agent là một web browser
+ Các mail server vẫn giao tiếp thông qua SMTP

### 7. DNS
Domain Name Systen (DNS) là một hệ thống đặt tên phân cấp (hierarchical) và phân tán (distributed) dành cho máy tính, dịch vụ và các tài nguyên khác trên Internet.

DNS dịch tên miền mà con người có thể đọc được (ví dụ: `www.udemy.com`) thành địa chỉ IP mà máy có thể đọc được (ví dụ: `104.16.66.85`).
![image](https://hackmd.io/_uploads/HJAFdmMDxx.png)

#### Một số tool DNS
+ `nslookup [website]`
+ `ping [website]`
+ `ipconfig` / `displaydns`
+ `ipconfig` /`flushdns`

### 8. Remote Access
#### Lí do sử dụng truy cập từ xa
+ Làm việc từ xa
+ Hỗ trợ từ xa
+ ...

#### Telnet
+ VTY – Virtual TeletYpe
+ Sử dụng TCP/port 23
+ Giao thức client-server
+ Hỗ trợ xác thực (authentication), nhưng lại dưới dạng plain text (dễ dàng đọc được).
![image](https://hackmd.io/_uploads/B1a5iB-vxe.png)

#### SSH
+ SSH - Secure Shell
+ Sử dụng TCP/port 22 
+ Giao thức client-server
+ Authencation được mã hóa (encrypted)
+ Data transfer được mã hóa
![image](https://hackmd.io/_uploads/ry0xaQzDee.png)

## III. Transport Layer (tầng vận chuyển)
### 1. Giới thiệu
Các giao thức tầng vận chuyển cung cấp khả năng giao tiếp logic giữa các tiến trình (process) ứng dụng chạy trên các máy chủ (host) khác nhau.
![image](https://hackmd.io/_uploads/rJ68aM8Dgg.png)
Các tiến trình ứng dụng sử dụng giao tiếp logic do tầng vận chuyển cung cấp để gửi message cho nhau.

Giao thức TCP và UDP
+ TCP đáng tin cậy hơn (reliable)
+ UDP nhanh hơn

### 2. UDP
UDP, được định nghĩa trong [RFC 768], thực hiện hầu như ít chức năng nhất mà một giao thức vận chuyển có thể làm. Ngoại trừ một số kiểm tra lỗi nhẹ, nó không bổ sung gì cho IP.
![image](https://hackmd.io/_uploads/r14tAzLPlx.png)

#### Tại sao lại nhanh?
+ Kiểm soát tốt hơn ở cấp độ ứng dụng đối với dữ liệu được gửi đi, và thời điểm gửi
+ Không thiết lập kết nối
+ Không có trạng thái kết nối
+ Packet header nhỏ

Format UDP header:
![image](https://hackmd.io/_uploads/rkmzyQ8Deg.png)

#### Giao thức của một số ứng dụng
![image](https://hackmd.io/_uploads/S1IBk78wlx.png)

### 3. UDP Checksum
![image](https://hackmd.io/_uploads/r1cu1mLDgg.png)

### 4. TCP
TCP là giao thức truyền dữ liệu đáng tin cậy được triển khai trên lớp mạng đầu cuối không đáng tin cậy (IP).

#### So sánh header UDP và TCP
![image](https://hackmd.io/_uploads/HkE8DQ8wxg.png)

#### Three-way Handshake
Bắt tay ba bước là một quá trình được sử dụng trong mạng TCP/IP để thiết lập kết nối giữa server và client.

Nó sử dụng chuỗi `SYN` → `SYN ACK` → `ACK` để thực hiện điều đó.

SYN: Synchronize
ACK: Acknowledgement

![image](https://hackmd.io/_uploads/B1PedQLDle.png)
+ Client gửi packet với sequence number là 1010 (random)
+ Server trả lại một SYN hoàn toàn khác, không liên quan đến cái ban đầu, cùng với đó là ACK chính là SYN ban đầu cộng thêm 1 là 1011. ACK để cho biết server đã nhận được sequence trước đó
+ Client gửi lại ACK mà đó là SYN của server cộng thêm 1, là 2021.
+ Đến đây, kết nối TCP được thiết lập

#### Reliable Transfer
TCP phải khôi phục dữ liệu bị hỏng, mất, trùng lặp hoặc bị gửi không đúng thứ tự qua Internet. 
TCP đạt được độ tin cậy này bằng cách gán một số thứ tự (sequence number) cho mỗi octet mà nó truyền và yêu cầu ACK từ phía người nhận.

**Trường hợp 1**:
![image](https://hackmd.io/_uploads/HyDYF78Pxx.png)
+ A gửi Seq=92 tới B, B gửi lại ACK=100 nhưng bị mất dữ liệu
+ Có 1 khoảng thời gian timeout từ đó A biết là bị mất dữ liệu
+ A gửi lại và sau đó B gửi thành công ACK=100

**Trường hợp 2**:
![image](https://hackmd.io/_uploads/rJKY578vle.png)
+ A gửi liên tiếp Seq=92 và Seq=100 đến B
+ Nhưng thời điểm A nhận ACK từ B đã quá thời gian timeout
+ Vì vậy A lại gửi lại Seq=92 cho B, timeout được reset
+ Cho tới khi ACK của segment thứ 2 được nhận trước timeout mới, segment thứ 2 sẽ không được gửi lại

**Trường hợp 3**:
![image](https://hackmd.io/_uploads/B1_L3mUDxe.png)
+ A gửi liên tiếp 2 segment như trường hợp trên
+ ACK=100 của segment đầu tiên bị mất
+ Nhưng ngay trước khi timeout, A nhận đc ACK=120
+ Từ đó A biết B đã nhận đủ mọi thứ qua byte 119 (120-1) nên không gửi thêm gì nữa

#### Congestion control (kiểm soát tắc nghẽn)
TCP sử dụng thuật toán tránh tắc nghẽn phản ứng, điều chỉnh động tốc độ gửi dữ liệu để giảm lượng tắc nghẽn mạng và mất gói tin.
+ Thuật toán bắt đầu chậm
+ Giai đoạn tránh tắc nghẽn
+ Giai đoạn phát hiện tắc nghẽn
![image](https://hackmd.io/_uploads/HJZ0QYLPxx.png)
+ Ban đầu gửi các packet một cách chậm rãi để theo dõi ACK được trả lại hay không, nếu trả lại như dự tính thì nghĩa là không bị mất gì và mọi thứ đang hoạt động tốt
+ Từ đó bắt đầu gửi các packet nhanh hơn đến ngưỡng đầu tiên (sau khi kết thúc slow start phase), từ đó một số packet bắt đầu fail
+ Sau đó từ từ tăng size của packet lên, cho đến khi tìm được size hoàn hảo, từ đó tiếp tục giữ ở size đó

### 5. TCP Header
![image](https://hackmd.io/_uploads/ryvH8K8Pgx.png)

**Source Port**: đây là một trường 16 bit xác định port number của người gửi.

**Destination Port**: đây là một trường 16 bit xác định port number của người nhận.

**Sequence Number**: là một trường 32 bit chỉ ra bao nhiêu dữ liệu đã được gửi trong phiên TCP. Khi bạn thiết lập một kết nối TCP mới (3 way handshake), thì sequence number ban đầu là một giá trị ngẫu nhiên 32 bit. Bên nhận sẽ sử dụng sequence number này và gửi lại một acknowledgment (ACK). Các trình phân tích giao thức như Wireshark thường sử dụng số thứ tự tương đối bắt đầu từ 0 vì nó dễ đọc hơn so với một số ngẫu nhiên lớn.

**Acknowledgment Number**: trường 32 bit này được bên nhận sử dụng để yêu cầu đoạn (segment) TCP tiếp theo. Giá trị này sẽ là sequence number được tăng thêm 1.

**Data offset**: đây là trường độ lệch dữ liệu 4 bit, còn được gọi là độ dài header. Nó cho biết độ dài của phần header TCP để xác định phần dữ liệu thực sự bắt đầu từ đâu.

**Reserved**: đây là 3 bit dành cho trường dự phòng. Chúng không được sử dụng và luôn được đặt là 0.

**Flags**: có 9 bit dành cho các flags, còn được gọi là các bit điều khiển. Chúng được sử dụng để thiết lập kết nối, gửi dữ liệu và kết thúc kết nối:
+ **URG**: Urgent Pointer(con trỏ khẩn cấp). Khi bit này được thiết lập, dữ liệu được xử lý ưu tiên so với các dữ liệu khác.
+ **ACK**: được dùng để xác nhận.
+ **PSH**: đây là chức năng push. Nó thông báo cho ứng dụng rằng dữ liệu nên được truyền ngay lập tức và không cần đợi cho đến khi lấp đầy một đoạn TCP.
+ **RST**: reset kết nối. Khi bạn nhận được bit này, bạn phải ngắt kết nối ngay lập tức. Điều này chỉ được thực hiện khi có lỗi không thể phục hồi và đây không phải là cách bình thường để kết thúc kết nối TCP.
+ **SYN**: được sử dụng trong quá trình bắt tay ba bước ban đầu và dùng để thiết lập sequence number ban đầu.
+ **FIN**: bit kết thúc này được dùng để kết thúc kết nối TCP. TCP là giao thức full duplex (song công hoàn toàn) nên cả hai bên đều phải sử dụng bit FIN để kết thúc kết nối. Đây là phương pháp bình thường để kết thúc một kết nối.

**Window**: trường 16 bit window chỉ định bao nhiêu byte mà bên nhận sẵn sàng nhận. Nó được sử dụng để bên nhận có thể thông báo cho bên gửi rằng họ muốn nhận thêm dữ liệu so với lượng hiện tại, bằng cách chỉ rõ số byte vượt quá số thứ tự trong trường acknowledgment.

**Checksum**: 16 bit được sử dụng cho mã kiểm tra để kiểm tra xem phần header TCP có OK hay không.

**Urgent pointer**: 16 bit này được sử dụng khi bit URG được thiết lập; con trỏ khẩn cấp này chỉ ra vị trí mà dữ liệu khẩn cấp kết thúc.

**Options**: trường này là tùy chọn và có thể có độ dài từ 0 đến 320 bit.

**Padding**: Đảm bảo dữ liệu 32bit, thêm các số 0 để đủ format 32bit.

#### Ví dụ trong Wireshark:
![image](https://hackmd.io/_uploads/S1iFqYUwxx.png)

Có thể thấy destination và port number. Sequence number là 0 nhưng Wireshark cho biết đây là số thứ tự tương đối. Trong thực tế, nó là một thứ khác. 

Cũng có thể thấy bit SYN đã được thiết lập trong các flag, window size, checksum, urgent pointer và options.

## IV. Network Layer (tầng mạng)
### 1. Tầng mạng
#### Router
Bộ định tuyến (router) là một thiết bị mạng chuyển tiếp các gói dữ liệu giữa các mạng máy tính.

Bộ định tuyến thực hiện chức năng định hướng lưu lượng trên Internet.
![image](https://hackmd.io/_uploads/SJmwqwPvgx.png)

#### Routing
![image](https://hackmd.io/_uploads/Sy1ocPvwee.png)
![image](https://hackmd.io/_uploads/HJxh5PDwlg.png)

### 2. IP Address
 Addressing của các tầng
![image](https://hackmd.io/_uploads/SJbFhvPDlx.png)

#### IP
Internet Protocol (IP) là tầng Internet, tất cả các giao thức khác ở tầng 1 đến tầng 3 đều tồn tại để hỗ trợ IP

#### IP Address
+ Địa chỉ IP là mã số định danh duy nhất.
+ Địa chỉ IP bao gồm 32 bit, được chia thành 4 phần gọi là "octet" hoặc "byte". Mỗi octet chứa 8 bit

Ví dụ: `71.205.0.13`
![image](https://hackmd.io/_uploads/SJGrTDvPgx.png)
![image](https://hackmd.io/_uploads/BkdSpPDvxe.png)

Chú ý: Mỗi octet không vượt quá 255
![image](https://hackmd.io/_uploads/SyIDpPDDel.png)

### 3. Subnetting 
#### Cấu trúc địa chỉ IP
![image](https://hackmd.io/_uploads/r1G-EOPwlx.png)
![image](https://hackmd.io/_uploads/S19ZVuDvgx.png)
![image](https://hackmd.io/_uploads/SJeM4_Dwgx.png)
![image](https://hackmd.io/_uploads/SkpGEdvDel.png)

**Subnet mask** là số 32 bit được tạo bằng cách tạo các host bit thành toàn số 0 và thiết lập các bit mạng thành toàn số 1.

**Ví dụ**:
![image](https://hackmd.io/_uploads/Sytw4dvDlx.png)
![image](https://hackmd.io/_uploads/HycOVODwge.png)

Chú ý: Địa chỉ IP không bắt đầu bằng số 0.

### 4. DHCP
Dynamic Host Configuration Protocol (DHCP) là một giao thức quản lý mạng được sử dụng trong mạng máy tính để tự động gán địa chỉ IP và các tham số (parameter) giao tiếp khác cho các thiết bị được kết nối với mạng.

DHCP sử dụng mô hình client-server
![image](https://hackmd.io/_uploads/SkiFFuvPll.png)

### 5. ICMP
The Internet Control Message Protocol (ICMP) là giao thức tầng mạng được các thiết bị mạng sử dụng để chẩn đoán (diagnose) các sự cố mạng như
+ Traceroute
+ Ping
+ Báo cáo lỗi
 
#### Tracerout
+ Công cụ ICMP được sử dụng để ánh xạ routing path (đường dẫn định tuyến)
+ Giúp quản trị viên tìm ra các điểm gián đoạn (interruptions) và các vấn đề mạng khác
+ Windows: `tracert`
+ Linux MAC:
`traceroute`
+ Ví dụ:
`tracert udemy.com`

#### Ping
+ Ping đơn giản hơn tracerout
+ Nó gửi các lệnh ping (còn được gọi là echo request) và sau đó đo thời gian message đến đích và quay trở lại nguồn ban đầu

#### Error reporting
+ Thực hiện giao thức để tự động kiểm tra links và báo cáo sự cố
+ Khi lưu lượng (traffic) bị hủy hoặc từ chối, các thiết bị mạng thường gửi message ICMP chứa thông tin chi tiết

#### Bảo mật
Có nhiều cách hacker có thể sử dụng ICMP để thực hiện các cuộc tấn công DDoS, bao gồm:
+ Ping of death
+ Smurf
+ ICMP flood

### 6. NAT
Network address translation (NAT) là phương pháp ánh xạ một hoặc nhiều địa chỉ private IP  thành một địa chỉ public IP.

#### Lí do
![image](https://hackmd.io/_uploads/BJZGKYPPll.png)
Chỉ có hơn 4 tỉ địa chỉ IP khác nhau, chắc chắn sẽ không đủ cho Internet ngày nay

#### Cách hoạt động
![image](https://hackmd.io/_uploads/SyPFKtDvgl.png)
+ PC2 với private IP `10.0.0.3` muốn gửi packet đến Server1
+ Khi nó đi qua Router1, IP sẽ được dịch sang public IP là `173.0.11.2` và từ đó tiếp tục đi đến Server1
+ Khi Server1 trả lại response, đi qua Router1, nó sẽ tìm trong những địa chỉ IP đã dịch xem private IP trước đó là gì và từ đó gửi lại về đúng máy PC2 với IP `10.0.0.3`
+ Với việc này, nhiều thiết bị trong một LAN (Local Area Network) có thể sử dụng cùng một public IP

### 7. IPv6
Ví dụ một địa chỉ IPv6
![image](https://hackmd.io/_uploads/r1t0C3wDlg.png)
![image](https://hackmd.io/_uploads/r1D1JTDPxe.png)
Có 8 phần, mỗi phần ngăn cách bởi dấu hai chấm (:)
Nếu một địa chỉ IPv6 chứa một hoặc nhiều nhóm số 0 liên tiếp, chúng có thể được thay thế bằng hai dấu hai chấm (::)

Ví dụ
![image](https://hackmd.io/_uploads/BysQyTPwlx.png)

![image](https://hackmd.io/_uploads/ByO8y6Dwge.png)
Để bỏ số 0 đứng đầu trong bất kỳ nhóm 4 chữ số thập lục phân (hexadecimal) nào: quy tắc chỉ áp dụng cho số 0 đứng đầu và không có số 0 đứng cuối. Ngay cả khi một nhóm gồm 4 số 0, chúng ta chỉ có thể bỏ 3 số 0 đầu tiên.  **000**0

![image](https://hackmd.io/_uploads/BJgeTy6Dwgx.png)
![image](https://hackmd.io/_uploads/BkcTyTDvxg.png)

Việc thay thế các số 0 liên tiếp chỉ có thể được áp dụng một lần, nếu không, địa chỉ IPv6 gốc không thể được tạo lại từ biểu diễn rút gọn
![image](https://hackmd.io/_uploads/Byd1gpPPgg.png)

### 8. Routing
Có 2 loại
#### Static (tĩnh)
+ Admin phải tự cài đặt cấu hình một cách thủ công
+ Không thể mở rộng
+ Dễ xảy ra lỗi hơn các giao thức định tuyến
+ Đường dẫn cố định
+ Bảo mật hơn

#### Dynamic (động)
+ Sử dụng các giao thức và thuật toán định tuyến
+ Dễ dàng cấu hình (và mở rộng) hơn
+ Dễ dàng cấu hình lại (hoặc cập nhật) khi cần
+ Xem xét các đường dẫn khác nhau tại một thời điểm nhất định

### 9. Routing protocols
#### Autonomous system
Hệ thống tự quản (AS) là một mạng hoặc một nhóm mạng rất lớn với một chính sách routing duy nhất.
![image](https://hackmd.io/_uploads/BJLSx2Fvel.png)

Có 2 loại: trong và ngoài
#### Interior Gateway Routing
+ IGP – Interior Gateway Protocol
+ Định tuyến (routing) bên trong hệ thống tự quản (AS)
+ Thường chỉ có một chính sách routing duy nhất
+ RIP, OSPF, EIGRP + Static routing (tĩnh)

#### Exterior Gateway Routing
+ EGP – Exterior Gateway Protocol
+ Định tuyến bên ngoài AS. Còn có thể hiểu là định tuyến giữa các hệ thống tự quản (AS)
+ Sử dụng duy nhất BGP
![image](https://hackmd.io/_uploads/r1j4-hYwee.png)

## V. Link and Physical (tầng liên kết và vật lý)
### 1. Giới thiệu
#### Các dịch vụ tầng liên kết
**Framing**
Đóng gói các "packet" ở tầng mạng vào một "datagram" ở tầng liên kết trước khi truyền đi.

**Link Access** 
Chỉ định các quy luật để truyền khung (frame).

**Reliable Delivery**
Đảm bảo việc phân phối các datagram qua liên kết mà không có lỗi.

**Phát hiện và sửa lỗi**
Để đảm bảo truyền gói tin, các lỗi được phát hiện phải được sửa.

#### Triển khai
Phần lớn, tầng liên kết được triển khai trong network adapter hoặc NIC (Network Interface Card).

Ở trung tâm của network adapter là bộ điều khiển tầng liên kết, thường là một chip chuyên dụng đơn thực hiện nhiều dịch vụ tầng liên kết (đóng khung, truy cập liên kết, phát hiện lỗi,...).

Do đó, phần lớn chức năng của bộ điều khiển tầng liên kết được triển khai trong phần cứng

#### Các dịch vụ tầng vật lý
**Connection establishment**
Thiết lập kết nối vật lý giữa hai thiết bị từ xa.

**Connection Termination**
Kết thúc kết nối vật lý giữa hai thiết bị từ xa.

**Modulation**
Chuyển đổi giữa biểu diễn dữ liệu của người dùng và tín hiệu truyền tương ứng.

**Communication resource sharing**
+ Flow control (Kiểm soát lưu lượng)
+ Giải quyết tranh chấp để tránh collision (va chạm)

### 2. Địa chỉ MAC
Địa chỉ MAC (Media Access Control) là một thuộc tính chữ số duy nhất gồm 12 ký tự được sử dụng để xác định từng thiết bị điện tử trên mạng.

Ví dụ địa chỉ MAC:
![image](https://hackmd.io/_uploads/H1kXu2YDle.png)

Cách xem địa chỉ MAC trên máy: dùng lệnh `ifconfig`.

**Cấu trúc**
![image](https://hackmd.io/_uploads/r1Yrd3FPlg.png)
Có 2 phần, OUI và NIC, mỗi phần 3 byte, tổng 6 byte.

### 3. Switching
Switching là quá trình chuyển tiếp các gói tin đến từ một port đến một port dẫn đến đích.
![image](https://hackmd.io/_uploads/H1SKbfivee.png)

### 4. ARP
Address Resolution Protocol (ARP) là giao thức tầng thứ 2 được sử dụng để ánh xạ địa chỉ MAC thành địa chỉ IP.

Tất cả các host trên mạng đều được xác định theo địa chỉ IP, nhưng NIC (Network Interface Card) không có địa chỉ IP, chúng có địa chỉ MAC.

=> ARP là giao thức được sử dụng để liên kết địa chỉ IP với địa chỉ MAC.

#### Cách hoạt động
![image](https://hackmd.io/_uploads/Sk_mmfswxe.png)
**1**. PC1 kiểm tra local cache
**2**. PC1 gửi ARP request tới mọi thiết bị
**3**. PC2 ánh xạ địa chỉ MAC của PC1 với địa chỉ IP của nó
**4**. PC2 phản hồi lại PC1 với địa chỉ MAC
**5**. PC1 nhận phản hồi
**6**. PC1 ghi nhớ ánh xạ giữa IP và MAC

Bên trên là trong trường hợp PC1 và PC2 cùng một network segment, vậy còn nếu PC2 là mạng từ xa thì sao?
![image](https://hackmd.io/_uploads/rJ9kNMjDel.png)
Sẽ đi qua từng router, theo tuyến đã định sẵn để đến đúng đích đến

### 5. ARP Security
#### Vấn đề của ARP
Client hoàn toàn được phép gửi các phản hồi ARP "không mong muốn".

Để một thiết bị mạng có thể biết địa chỉ MAC của thiết bị khác, nó sẽ gửi một yêu cầu ARP với nội dung kiểu như "Ai có địa chỉ IP này" và sau đó sẽ liệt kê địa chỉ IP với hy vọng rằng request đó sẽ đến được chính thiết bị đó và nó sẽ reply với địa chỉ MAC của thiết bị đó.

![image](https://hackmd.io/_uploads/ryAXHzoPxx.png)
Nhìn vào ảnh, hacker là MAC C, địa chỉ IP là 3. Router là MAC A, địa chỉ IP là 1. Và laptop là MAC B, địa chỉ IP là 2.

Hacker gửi cho cả hai người một phản hồi ARP với thông tin rằng IP 2 và IP 1 thuộc về thiết bị có địa chỉ MAC C. 
Tuy nhiên địa chỉ MAC C lại thuộc về hacker đã gửi những tin nhắn giả mạo này. Về bản chất, hacker đang giả làm đích đến mong muốn ban đầu

![image](https://hackmd.io/_uploads/rk3aLGsPgg.png)
Tất cả những điều này sẽ dẫn đến kết quả sau:

Cả hai thiết bị vừa được cung cấp thông tin sai, router và laptop, sẽ gửi lưu lượng của chúng đến hacker – với địa chỉ MAC C, kể cả khi chúng muốn gửi lưu lượng đến thiết bị kia.

Hãy nhớ rằng switch sử dụng địa chỉ MAC chứ không phải địa chỉ IP. Nếu laptop muốn gửi tin nhắn đến router, nó sẽ sử dụng địa chỉ IP đích là `10.1.1.1`, nhưng trong bảng ARP, nó sẽ tìm thấy một ánh xạ sai của `10.1.1.1` với MAC C, và miễn là nó sử dụng địa chỉ MAC đó, gói tin sẽ được gửi đến hacker.

![image](https://hackmd.io/_uploads/HycDvfsDxe.png)
Tất nhiên, hacker có thể sử dụng cách tiếp cận tương tự để xóa bằng chứng, bằng cách đơn giản là gửi thông tin chính xác ngay sau khi xong việc.

#### Biện pháp
Có những cấu hình có sẵn để khắc phục việc này.

Một trong số đó là DAI (Dynamic ARP Inspection), một tính năng có thể được cấu hình trên các thiết bị để phát hiện hành vi này và thiết lập một số biện pháp khắc phục, chẳng hạn như chặn port mà hacker bị nghi ngờ đã kết nối đến.

### 6. VLAN
VLAN (virtual local area network) là một nhóm các máy tính được kết nối với cùng một mạng nhưng không cùng một LAN vật lý.

+ Phạm vi ID VLAN hợp lệ: 1-4094
+ Giao tiếp giữa các VLAN có thể được thiết lập thông qua router
+ Các liên kết mang nhiều VLAN: “trunk”
+ Các liên kết mang VLAN đơn: “access"

### 7. Ethernet
#### Giao thức Ethernet
Ethernet là một giao thức kết nối các thiết bị trên mạng thông qua kết nối **có dây** (wired).
![image](https://hackmd.io/_uploads/r1tBCfiDlg.png)

**Các tiêu chuẩn Ethernet**
![image](https://hackmd.io/_uploads/B1h_Afiwll.png)

## VI. Mạng di động và mạng không dây
### 1. Giới thiệu
#### Các thành phần của mạng không dây (wireless)
+ Wireless hosts
+ Wireless links
+ Base Station
+ Cơ sở hạ tầng mạng

#### Những thách thức của mạng không dây
+ Giảm cường độ tín hiệu khi khoảng cách tăng
+ Sự can thiệp từ các nguồn khác
+ Truyền đa đường (Multipath propagation)
+ Tỉ lệ bị nhiễu (signal-to-noise)

### 2. Wi-Fi
Wi-Fi là một họ các giao thức mạng không dây, dựa trên họ tiêu chuẩn IEEE 802.11, thường được sử dụng cho mạng cục bộ của các thiết bị và truy cập Internet.

#### Các tiêu chuẩn Wi-Fi
![image](https://hackmd.io/_uploads/r1jFb4oPxx.png)

#### Các thành phần của Wi-Fi
+ BSS – Basic Service Set
+ Access Point (AP)
+ SSID – Service Set Identifier
+ Wi-Fi jungle
+ Beacon frames
+ Passive scanning
+ Active scanning

### 3. Mạng di động (Cellular)
#### GSM
GSM (Global System for Mobile communications) là một tiêu chuẩn do Viện tiêu chuẩn viễn thông châu Âu phát triển để mô tả các giao thức cho mạng di động kỹ thuật số thế hệ thứ hai (2G) được sử dụng bởi các thiết bị di động như điện thoại di động và máy tính bảng.

#### GPRS
General Packet Radio Service (GPRS) là tiêu chuẩn dữ liệu di động theo gói trên hệ thống thông tin di động toàn cầu 2G và 3G. Đây là 1 phần của GSM chứ khônt phải GSM thế hệ sau.
+ Nhắn tin SMS và phát sóng
+ Giữ trạng thái luôn truy cập internet (always on)
+ Multimedia messaging service (MMS)
+ Push-to-talk over cellular (PoC)
+ Ứng dụng Internet cho các thiết bị thông minh thông qua giao thức ứng dụng không dây (WAP)
+ Dịch vụ point-to-point (P2P): kết nối mạng với Internet (IP)

#### Các thế hệ
**1G**
+ Được thiết kế dành riêng cho giao tiếp bằng giọng nói.
+ Gần như đã bị khai tử.

**2G**
+ Hệ thống 2G ban đầu cũng được thiết kế cho giao tiệp bằng giọng nói, nhưng sau đó được mở rộng (2.5G) để hỗ trợ dữ liệu
+ SMS và MMS

**3G**
+ Thoại + dữ liệu, nhưng với liên kết truy cập vô tuyến tốc độ cao hơn
+ "Mobile broadband"
+ Gọi video

**4G**
+ Tăng tốc độ
+ Tăng chất lượng các cuộc gọi video, gaming, streaming,...

#### Kiến trúc mạng di động
![image](https://hackmd.io/_uploads/HkNWI4iPle.png)

## VII. An ninh mạng máy tính
### 1. Giới thiệu
Hacking là hành vi cố tìm cách xâm nhập các thiết bị số, như máy tính, điện thoại thông minh hoặc thậm chí toàn bộ mạng.

#### Tại sao lại hack?
+ Lấy cắp dữ liệu
+ Chiếm quyền truy cập
+ Làm thiệt hại danh tiếng của mục tiêu
+ Activism (chủ nghĩa hoạt động)

### 2. Các mối đe dọa trên mạng
#### Phishing
Lừa người dùng lộ thông tin cá nhân, hoặc chạy những đoạn mã độc.

#### Virus/Malware
Malware = Các phần mềm độc hại (malicious)

#### Ransomeware
Là các phần mềm tống tiền. Hacker sẽ mã hóa máy tính cùng với những file quan trọng của mình, và yêu cầu tiền chuộc để lấy khóa giải mã (decryption key).

#### (D)DOS
(Distributed) Denial of Service. Là tấn công từ chối dịch vụ. Đơn giản là làm cho lưu lượng truy cập web cao bất thường đến mức sập web

#### Input validation attacks
Ví dụ: SQL Injection

Ngoài ra đọc về OWASP top 10 để biết thêm về 10 lỗ hổng web phổ biến nhất. https://owasp.org/www-project-top-ten/

### 3. Firewall
Tường lửa (Firewall) sử dụng các quy tắc để kiểm soát traffic vào, ra khỏi hệ thống. Nó hoạt động như một rào chắn giữa mạng an toàn và mạng không an toàn, cùng với đó là kiểm soát các truy cập đến nguồn lực của mạng thông qua một mô hình kiểm soát chủ động. 

Chỉ những traffic phù hợp với chính sách được định nghĩa trong tường lửa mới được truy cập vào mạng, mọi traffic khác đều bị từ chối.
![image](https://hackmd.io/_uploads/S1Qx6NjPeg.png)

### 4. IPS và IDS
Intrusion Detection System không thể ngặn chặn các cuộc tấn công mà chỉ phát hiện ra.

Intrusion Prevention System vừa có thể phát hiện và ngăn chặn các cuộc tấn công.
![image](https://hackmd.io/_uploads/ry2A6EjPxx.png)



