---
# System prepended metadata

title: Mạng máy tính part 2

---

# Mạng máy tính part 2

## Chương 4: Network Layer: Data plane (Lớp mạng)

### 1. Network layer:
- Vận chuyển các segment từ phía gửi đến phía nhận
- Tại phía gửi, đóng gói segments --> datagrams/packets(gói tin)
- Ở phía nhận, vận chuyển các segment đến tần transport
- Giao thức tầng network có trong tất cả cá host, router
- Router kiểm tra header trong tất cả các gói tin IP đi qua nó

### 2. Chức năng:
#### a. Vận chuyển:
- Chuyển tiếp gói tin từ cổng này sang cổng kia của router

#### b. Định tuyến:
- Tính toán các con đường cho goi tín từ điểm đầu đến cuối

### 3. Sự tương hỗ giữa forwarding và routing:
- Thuật toán định tuyến (routing algorithm) --> local forwarding table (Bảng định tuyến)
#### a. Data plane:
- chức năng cục bộ, trên mỗi bộ định tuyến
- xác định cách datagram đến cổng đầu vào của bộ định tuyến được chuyển tiếp đến cổng đầu ra của bộ định tuyến
- ![](https://hackmd.io/_uploads/B11JGJjUh.png)

#### b. Control plane:
- logic toàn mạng
- xác định cách datagram được định tuyến giữa các bộ định tuyến dọc theo đường dẫn đầu cuối từ máy chủ nguồn đến máy chủ đích
- hai cách tiếp cận mặt phẳng điều khiển:
    - thuật toán định tuyến truyền thống: được thực hiện trong bộ định tuyến
    - software-defined networking (SDN): được triển khai trong các máy chủ (từ xa)

##### b.1. Trên mỗi control plane:
- Các thành phần thuật toán định tuyến riêng lẻ trong mỗi và mọi bộ định tuyến tương tác trong control plane
- ![](https://hackmd.io/_uploads/rkTZQkj82.png)

##### b.2.  SDN control plane:
- Bộ điều khiển từ xa tính toán, cài đặt bảng định tuyến trong bộ định tuyến
- ![](https://hackmd.io/_uploads/ryZmEkjU2.png)

### 4. Network service model:
- Mô hình dịch vụ cho kênh gửi datagrams:
    - Gửi từng gói một
    - Gửi một luồng 

- ![](https://hackmd.io/_uploads/S1zGByjLn.png)
- ![](https://hackmd.io/_uploads/S1WQByjL3.png)
- Reflections on best-effort  service:
    - Sự đơn giản của cơ chế đã cho phép Internet được triển khai rộng rãi thông qua
    - Cung cấp đầy đủ băng thông cho phép hiệu suất của các ứng dụng thời gian thực (ví dụ: giọng nói tương tác, video) ở mức “đủ tốt” trong “hầu hết thời gian”
    - Các dịch vụ phân tán ở tầng ứng dụng, được sao chép (trung tâm dữ liệu, mạng phân phối nội dung) kết nối gần với mạng của khách hàng, cho phép cung cấp dịch vụ từ nhiều địa điểm
    - Kiểm tra tắc nghẽn của các dịch vụ "linh hoạt" giúp giảm tắc nghẽn.

### 5. Tổng quan cấu trúc của router

- Kiến trúc bậc cao:
- ![](https://hackmd.io/_uploads/S1WYSWi8n.png)

#### a. Input port:
- ![](https://hackmd.io/_uploads/r1FM8Wi8h.png)
- decentralized switching:
    - sử dụng các giá trị trường header, tra cứu cổng đầu ra bằng cách sử dụng bảng chuyển tiếp (một phần của bảng định tuyến) trong bộ nhớ cổng đầu vào (“match plus action”)
    - mục tiêu: hoàn thành xử lý cổng đầu vào ở 'tốc độ đường truyền'
    - xếp hàng cổng đầu vào: nếu các datagram đến nhanh hơn tốc độ chuyển tiếp vào kết cấu chuyển đổi
    - chuyển tiếp dựa trên đích: chỉ chuyển tiếp dựa trên địa chỉ IP đích (truyền thống)
    - chuyển tiếp tổng quát: chuyển tiếp dựa trên bất kỳ tập hợp giá trị trường header nào

- Destination-based forwarding:
    - Có 32 bit lưu địa chỉ --> có tối đa hơn 4 tỉ địa chỉ. Nếu lưu vào máy --> quá lớn để lưu
    - Sử dụng range để khắc phục điều này: ![](https://hackmd.io/_uploads/Sksov-j8n.png)

-  Longest prefix matching:
    - Khi tìm mục nhập bảng chuyển tiếp cho địa chỉ đích nhất định, hãy sử dụng **tiền tố** địa chỉ dài nhất khớp với địa chỉ đích.
    - ![](https://hackmd.io/_uploads/HyF80-j8h.png)
    - Longest prefix matching: thường được thực hiện bằng cách sử dụng **bộ nhớ có địa chỉ tam phân** (**ternary content addressable memories**) (TCAMs)
    - Content addressable: cung cấp địa chỉ tới TCAM: lấy địa chỉ trong một chu kỳ đồng hồ, bất kể kích thước bảng
    - Cisco Catalyst: khoảng ~1 triệu mục bảng định tuyến trong TCAM

##### a.1. Switching fabrics:
- Chuyển gói tin từ input đến output tương ứng
- switching rate: Tốc độ mà các gói tin có thể được chuyển từ đầu vào sang đầu ra
    - thường được đo là bội số của tốc độ dòng vào/ra
    - N inputs: tốc độ chuyển mạch N lần tốc độ dòng mong muốn.
    - ![](https://hackmd.io/_uploads/BJfhkMiL3.png)
- 3 loại switching fabric chính:
    - Memory: ![](https://hackmd.io/_uploads/r1ngezjL3.png)
    - Bus: ![](https://hackmd.io/_uploads/S1FbeMjLh.png)
    - Interconnection network: ![](https://hackmd.io/_uploads/r1JmlzoUn.png)

###### a.1.1. Switching via memory
- Bộ định tuyến thế hệ đầu tiên:
    - Máy tính truyền thống với chuyển đổi dưới sự kiểm soát trực tiếp của CPU
    - Gói được sao chép vào bộ nhớ của hệ thống
    - Tốc độ bị giới hạn bởi băng thông bộ nhớ (2 giao cắt bus trên mỗi datagram)
- ![](https://hackmd.io/_uploads/SJlQbzsLh.png)


###### a.1.2. Switching via a bus
- Datagram từ bộ nhớ cổng đầu vào đến bộ nhớ cổng đầu ra thông qua một bus chia sẻ
- **Bus contention**: tốc độ chuyển mạch bị giới hạn bởi băng thông bus
- Bus 32 Gbps, Cisco 5600: đủ tốc độ cho các bộ định tuyến truy cập
- ![](https://hackmd.io/_uploads/BJGlfzsLh.png)


###### a.1.3. Switching via interconnection network
- Mạng Crossbar, Clos, các mạng kết nối khác ban đầu được phát triển để kết nối các bộ xử lý trong bộ đa xử lý
- **Multistage switch**: nxn switch từ nhiều tầng của switch nhỏ hơn
- **Khai thác song song**:
    - Phân mảnh datagram thành các ô có độ dài cố định khi entry
    - Chuyển các ô qua fabric, tập hợp lại datagram khi thoát
- ![](https://hackmd.io/_uploads/B1VfQGiI3.png)
- Chia tỷ lệ, sử dụng song song nhiều “plane” chuyển mạch:
    - Tăng tốc, mở rộng quy mô thông qua song song
- Bộ định tuyến CRS của Cisco:
    - Đơn vị cơ bản: 8 switching planes
    - Mỗi plane: mạng kết nối 3-stage
    - Khả năng chuyển đổi lên đến 100 Tbps
    - ![](https://hackmd.io/_uploads/r1eTmzoLn.png)


##### a.2. Input port queuing
- Nếu switching fabỉc chậm hơn so với cổng đầu vào kết hợp -> xếp hàng có thể xảy ra ở input queues
    - Chậm trễ và mất hàng đợi do tràn bộ đệm đầu vào!
- Head-of-the-Line (HOL) blocking: datagram xếp hàng đợi ở phía trước hàng đợi ngăn những người khác trong hàng đợi di chuyển về phía trước
- **Output port contention** (tranh chấp): chỉ có thể truyền một gói dữ liệu màu đỏ. gói màu đỏ thấp hơn bị chặn
    - ![](https://hackmd.io/_uploads/BJUJrGo8h.png)
- **One packet time later**: gói màu xanh lá cây xảy ra HOL blocking
    - ![](https://hackmd.io/_uploads/rkRKHfiIh.png)

##### a.3. Output port queuing: CỰC KỲ QUAN TRỌNG
- ![](https://hackmd.io/_uploads/S1gpBfjLn.png)
- Cần có **bộ đệm** khi các gói dữ liệu đến từ fabric nhanh hơn tốc độ truyền liên kết (link transmission rate). Chính sách loại bỏ (Drop policy): gói dữ liệu nào sẽ loại bỏ nếu không có bộ đệm trống? --> Datagram có thể bị mất do tắc nghẽn, thiếu bộ đệm
- **Nguyên tắc lập lịch** (Scheduling discipline) chọn trong số các datagram được xếp hàng đợi để truyền --> Lập kế hoạch ưu tiên – ai có hiệu suất tốt nhất, tính trung lập của mạng
- Bộ đệm khi tốc độ đến switching vượt quá tốc độ dòng đầu ra
- Xếp hàng (chậm trễ) và mất dữ liệu do tràn bộ đệm cổng đầu ra!
- ![](https://hackmd.io/_uploads/S1R6PGsLn.png)

##### a.4. Tính buffer:
- ![](https://hackmd.io/_uploads/BkXG_Mj8n.png)
- nhưng quá nhiều bộ đệm có thể làm tăng độ trễ (đặc biệt là trong các bộ định tuyến gia đình)
    - RTT dài: hiệu suất kém cho các ứng dụng thời gian thực, phản hồi TCP chậm chạp
    - Nhớ lại kiểm soát tắc nghẽn dựa trên độ trễ: “giữ liên kết cổ chai vừa đủ đầy (bận) nhưng không đầy hơn”

##### a.5. Buffer Management:
- ![](https://hackmd.io/_uploads/HJCoOzoUh.png)
- **Quản lý bộ đệm:**
    - **drop**: thêm gói nào, drop khi bộ đệm đầy
        - **tail drop**: thả gói đến
        - **priority**: thả/xóa trên cơ sở ưu tiên
    - **marking**: đánh dấu gói nào để báo hiệu tắc nghẽn (ECN, RED)

##### a.6. Packet Scheduling
- Packet scheduling: quyết định xem gói nào sẽ gửi đến link
    - first come, first served (FCFS)
    - priority
    - round robin
    - weighted fair queueing
- ![](https://hackmd.io/_uploads/r16DqMoI2.png)
- FCFS:
    - Các gói được truyền theo thứ tự đến cổng đầu ra
    - also known as: First-in-first-out (FIFO) 
- Priority:
    - Giao thông đến được phân loại, xếp hàng theo lớp
        - Bất kỳ trường header nào cũng có thể được sử dụng để phân loại
        - ![](https://hackmd.io/_uploads/HJP7jziL2.png)
    - Gửi gói từ hàng đợi ưu tiên cao nhất có gói đệm
        - FCFS trong lớp ưu tiên
        - ![](https://hackmd.io/_uploads/Sk1tizi8n.png)
- Round Robin (RR):
    - Giao thông đến được phân loại, xếp hàng theo lớp
        - Bất kỳ trường header nào cũng có thể được sử dụng để phân loại
    - Máy chủ theo chu kỳ, liên tục quét hàng đợi lớp, lần lượt gửi một gói hoàn chỉnh từ mỗi lớp (nếu có)
        - ![](https://hackmd.io/_uploads/BkdW2zoU3.png)
- Weighted Fair Queuing (WFQ)
    - Round Robin tổng quát
    - Mỗi lớp, i, có trọng số, w_i và nhận được lượng dịch vụ được tính trọng số trong mỗi chu kỳ:![](https://hackmd.io/_uploads/BkNt2foIn.png)
    - Đảm bảo băng thông tối thiểu (per-traffic-class)
    - ![](https://hackmd.io/_uploads/Hy5TnfsU3.png)

### 6. Internet Protocol (IP)
#### a. Network Layer: Internet
- ![](https://hackmd.io/_uploads/B15k0GsL3.png)
#### b. IP Datagram format
- ![](https://hackmd.io/_uploads/SyT-RGsUn.png)
- type of data: độ ưu tiên dữ liệu
- time to live: trường giá trị đếm lùi. Số router (hops) tối đa có thể đi qua. Nếu đi quá thì sẽ coi là đi lang thang --> xóa
- length: Tổng độ dài datagram --> max 2^16/64K (bytes)
- upper layer: giao thức tầng trên
- 16-bit, flgs, fragment offset: Phân mảnh, ráp gói tin
- options: timestamp, ....
#### c. IP fragmentation, reassembly
- Liên kết mạng có MTU
- MTU: Maximum transfer unit - chiều dài gói tin lớn nhất được cho phép đi qua ở tầng 2
- Ví dụ: ![](https://hackmd.io/_uploads/S1MHWQiL2.png)
- Giải thích:
    - length = 4000 bytes, header = 20 bytes --> độ dài còn lại là 3980 bytes
    - MTU = 1500 bytes, header = 20 bytes --> độ dài còn lại đc gửi 1480 bytes
    - Chia thành 3 gói 1480 bytes, 1480 bytes, 1020 bytes.
    - Cộng thêm 20 bytes header vào mỗi gói: 1500 bytes, 1500 bytes, 1040 bytes.

#### d. Addressing:
- **Địa chỉ IP**: mã định danh 32 bit được liên kết với từng giao diện máy chủ hoặc bộ định tuyến
- **Giao diện (Interface)**: kết nối giữa máy chủ/bộ định tuyến và liên kết vật lý
    - bộ định tuyến thường có nhiều interface
    - máy chủ thường có một hoặc hai interface (ví dụ: Ethernet có dây, 802.11 không dây)
- ![](https://hackmd.io/_uploads/HJ0G4moI3.png)
##### d.1. Subnets:
- Interface của thiết bị có thể tiếp cận vật lý với nhau mà không cần thông qua bộ định tuyến can thiệp
- Địa chỉ IP có cấu trúc:
    - **Phần mạng con (Subnet part)**: các thiết bị trong cùng một mạng con có chung các bit bậc cao.
    - **Phần máy chủ (Host part)**: các bit thứ tự thấp còn lại.
    - ![](https://hackmd.io/_uploads/ryGk_7iU3.png)
- Công thức xác định mạng con:
    - Tách từng giao diện khỏi máy chủ hoặc bộ định tuyến của nó, tạo ra các “đảo” của các mạng bị cô lập
    - Mỗi mạng bị cô lập được gọi là **mạng con**
    - ![](https://hackmd.io/_uploads/HkcIOXoI3.png)
    - (24 bit bậc cao: phần mạng con của địa chỉ IP)
##### d.2. CIDR: **C**lassless **I**nter**D**omain **R**outing
- Classless InterDomain Routing: Định tuyến liên miền không phân lớp
    - Phần mạng con của địa chỉ có độ dài tùy ý
    - Định dạng địa chỉ: a.b.c.d/x, trong đó x là # bit trong phần mạng con của địa chỉ
    - ![](https://hackmd.io/_uploads/HJSXtXs8h.png)

- Có hai câu hỏi: 
    - Q: Làm cách nào để máy chủ nhận được địa chỉ IP trong mạng của nó (phần địa chỉ máy chủ)?
    - Q: Làm thế nào để một mạng có được địa chỉ IP cho chính nó (phần mạng của địa chỉ)?
- Làm thế nào để máy chủ có được địa chỉ IP?
    - Được mã hóa cứng bởi sysadmin trong tệp cấu hình (ví dụ: /etc/rc.config trong UNIX)
    - **DHCP**: **D**ynamic **H**ost **C**onfiguration **P**rotocol (Giao thức Cấu hình Động cho Máy chủ): tự động lấy địa chỉ từ máy chủ
        - “plug-and-play” (cắm là chạy)

##### d.3. DHCP: Dynamic Host Configuration Protocol
- **Mục đích**: Máy chủ thu được địa chỉ IP động từ máy chủ mạng khi nó "tham gia" vào mạng.
    - Có thể gia hạn cho thuê địa chỉ đang sử dụng.
    - Cho phép tái sử dụng địa chỉ (chỉ giữ địa chỉ trong khi kết nối / hoạt động).
    - Hỗ trợ cho người dùng di động tham gia / rời mạng.
- Tổng quan về DHCP:
    - Host gửi thông điệp DHCP discover qua sóng radio [tuỳ chọn]
    - Máy chủ DHCP phản hồi với thông điệp DHCP offer [tuỳ chọn]
    - Host yêu cầu địa chỉ IP: thông điệp DHCP request
    - Máy chủ DHCP gửi địa chỉ: thông điệp DHCP ack
- Kịch bản DHCP client-server:
    - Thông thường, máy chủ DHCP sẽ được đặt cùng vị trí trong bộ định tuyến, phục vụ tất cả các mạng con mà bộ định tuyến kết nối tới.
    - Một DHCP client mới đến cần một địa chỉ trong mạng này.
    - ![](https://hackmd.io/_uploads/rkqDiXi83.png)
    - ![](https://hackmd.io/_uploads/S1hJ2QjU3.png)
    -  Hai bước trên có thể được bỏ qua "nếu một client nhớ và muốn sử dụng lại một địa chỉ mạng đã được cấp trước đó" [RFC 2131].

- DHCP: more than IP addresses
    - DHCP có thể trả lại nhiều hơn địa chỉ IP được phân bổ trên mạng con:
        - Địa chỉ của bộ định tuyến bước găọp đầu tiên cho client
        - Tên và địa chỉ IP của máy chủ DNS
        - Network mask (chỉ ra network với host trong địa chỉ)
- Ví dụ:
    - Máy tính xách tay kết nối sẽ sử dụng DHCP để lấy địa chỉ IP, địa chỉ của bộ định tuyến gặp đầu tiên, địa chỉ của máy chủ DNS.
    - Thông điệp DHCP REQUEST được đóng gói trong UDP --> IP --> Ethernet
    - Khung Ethernet phát sóng (đích: FFFFFFFFFFFF) trên mạng LAN, được nhận tại bộ định tuyến chạy máy chủ DHCP.
    - Khung Ethernet được chuyển đổi thành IP, sau đó UDP được chuyển đổi thành DHCP.
    - ![](https://hackmd.io/_uploads/r1XZAQjIn.png)
    - Máy chủ DHCP tạo thông điệp DHCP ACK chứa địa chỉ IP của client, địa chỉ IP của bộ định tuyến đầu tiên cho client, tên và địa chỉ IP của máy chủ DNS.
    - Thông điệp phản hồi từ máy chủ DHCP được đóng gói và chuyển tiếp đến client, giải mã lên tới DHCP tại client.
    - Bây giờ client biết địa chỉ IP của mình, tên và địa chỉ IP của máy chủ DNS, địa chỉ IP của bộ định tuyến đầu tiên của nó.
    - ![](https://hackmd.io/_uploads/Syt9Cmi8n.png)
- Mạng nhận phần mạng con của địa chỉ IP như thế nào?
    - Mạng nhận phần mạng con được cấp phát từ không gian địa chỉ của nhà cung cấp dịch vụ Internet (ISP) mà mạng đó đang sử dụng.
    - ![](https://hackmd.io/_uploads/ByLryEo8h.png)
##### d.4. Hierarchical addressing: route aggregation (Địa chỉ phân cấp: tổng hợp tuyến đường)
- Địa chỉ phân cấp cho phép quảng bá thông tin định tuyến một cách hiệu quả: ![](https://hackmd.io/_uploads/ByhEe4jU3.png)
- Organization 1 chuyển từ nhà cung cấp dịch vụ Internet (ISP) Fly-By-Night-ISP sang ISP-R-Us.
- Bây giờ ISP-R-Us quảng bá một tuyến đường cụ thể hơn đến Organization 1.
- **Q**: Một ISP nhận được khối địa chỉ như thế nào?
- **A**: ICANN: Tổ chức Quốc tế về Các Tên và Số được Gán http://www.icann.org/
    - Phân phối địa chỉ IP thông qua 5 hệ thống đăng ký khu vực (RRs) (có thể sau đó phân phối cho các đăng ký cục bộ)
    - Quản lý vùng gốc DNS, bao gồm ủy quyền quản lý các tên miền cấp cao (TLD) như (.com, .edu, ...)
- **Q**: Có đủ địa chỉ IP 32-bit không?
    - ICANN đã phân phối phần cuối cùng của địa chỉ IPv4 cho các hệ thống đăng ký khu vực vào năm 2011.
    - Cơ chế NAT (tiếp theo) giúp hạn chế việc cạn kiệt không gian địa chỉ IPv4.
    - IPv6 có không gian địa chỉ 128-bit.

#### e. NAT: network address translation
- NAT: tất cả các thiết bị trong mạng cục bộ chỉ chia sẻ **một địa chỉ IPv4** khi có liên quan đến thế giới bên ngoài
- ![](https://hackmd.io/_uploads/r1kYGVjLn.png)
    - **Tất cả** các datagram **rời khỏi** mạng cục bộ đều có **cùng** địa chỉ IP NAT nguồn: 138.76.29.7, nhưng số cổng nguồn khác nhau
    - Datagram có nguồn hoặc đích trong mạng này có địa chỉ 10.0.0/24 cho nguồn, đích (như thường lệ)
- Tất cả các thiết bị trong mạng cục bộ đều có địa chỉ 32 bit trong không gian địa chỉ IP “riêng tư” (tiền tố 10/8, 172.16/12, 192.168/16) chỉ có thể được sử dụng trong mạng cục bộ.
- **Lợi ích**:
    - Chỉ cần một địa chỉ IP từ ISP của nhà cung cấp cho tất cả các thiết bị
    - Có thể thay đổi địa chỉ của máy chủ trong mạng cục bộ mà không cần thông báo cho thế giới bên ngoài
    - Có thể thay đổi ISP mà không cần thay đổi địa chỉ của các thiết bị trong mạng nội bộ
    - Bảo mật: các thiết bị bên trong mạng cục bộ không thể trực tiếp truy cập, nhìn thấy bởi thế giới bên ngoài
- **Cài đặt**: NAT routers phải (tự động): 
    - Các **datagram gửi đi**: **thay thế** (source IP address, port #) của mọi datagram gửi đi thành (NAT IP address, new port #)
        - Các cient/server từ xa sẽ phản hồi bằng cách sử dụng (NAT IP address, new port #) làm địa chỉ đích
    - **Ghi nhớ** (trong bảng dịch NAT) mọi cặp dịch (source IP address, port #) sang (NAT IP address, new port #)
    - Các **datagram đến**: **thay thế** (NAT IP address, new port #) trong các trường đích của mọi gói dữ liệu đến bằng (source IP address, port #) tương ứng được lưu trữ trong bảng NAT
- ![](https://hackmd.io/_uploads/H1qJALsUh.png)
- NAT đã gây tranh cãi:
    - bộ định tuyến “nên” chỉ xử lý tối đa lớp 3
    - Địa chỉ “thiếu” cần được giải quyết bằng IPv6
    - vi phạm đối số end-to-end (thao tác cổng # bởi thiết bị lớp mạng)
    - Truyền tải NAT: nếu client muốn kết nối với server sau NAT thì sao?
- nhưng NAT vẫn ở đây:
    - Được sử dụng rộng rãi trong mạng gia đình và tổ chức, mạng di động 4G/5G

#### f. IPv6:
- Motivation: 
    - Động lực ban đầu: Không gian địa chỉ IPv4 32 bit sẽ được phân bổ hoàn toàn
    - Động lực bổ sung:
        - Tốc độ xử lý/chuyển tiếp: tiêu đề có độ dài cố định 40 byte
        - Cho phép xử lý các “luồng” ở tầng mạng khác nhau
- IPv6 datagram format:
    - ![](https://hackmd.io/_uploads/HkHklvjI3.png)
    - priority: Độ ưu tiên của gói tin trong luồng
    - flow label: xác định các datagram trong cùng một "luồng”. (khái niệm về “dòng chảy” không được định nghĩa rõ ràng).
    - Những thứ bị thiếu (so với IPv4):
        - Không có checksum (tăng tốc độ xử lý trong bộ định tuyến)
        - Không có phân mảnh, hợp nhất (fragmentation/reassembly)
        - Không có các options (không có sẵn dưới dạng giao thức lớp trên, tiêu đề tiếp theo tại bộ định tuyến)
- Chuyển từ IPv4 sang IPv6:
    - Không phải tất cả các bộ định tuyến đều có thể được nâng cấp đồng thời
        - Không có “ngày cờ”
        - Mạng sẽ hoạt động như thế nào với các bộ định tuyến IPv4 và IPv6 hỗn hợp?
##### f.1. **Tunneling**: 
- Gói dữ liệu IPv6 được mang dưới dạng tải trọng (payload) trong gói dữ liệu IPv4 giữa các bộ định tuyến IPv4 ("gói trong gói")
    - Tunneling được sử dụng rộng rãi trong các ngữ cảnh khác (4G/5G)
- Tunneling and encapsulation (đóng gói):
    - ![](https://hackmd.io/_uploads/BJ_6XDoU3.png)
    - Thông thường: datagram dưới dạng payload trong link-layer frame
    - ![](https://hackmd.io/_uploads/rJDIEwoUn.png)
    - Tunneling: Gói dữ liệu IPv6 dưới dạng payload trong gói dữ liệu IPv4
- Tunneling: ![](https://hackmd.io/_uploads/rJDUBDsUh.png)

### 7. Generalized forwarding: match plus action
- Đánh giá: mỗi bộ định tuyến chứa một bảng chuyển tiếp
    - Trừu tượng hóa “match plus action”: khớp các bit trong gói đến, thực hiện hành động
        - Chuyển tiếp dựa trên đích (destination-based forwarding): chuyển tiếp dựa trên địa chỉ dest. IP
        - Chuyển tiếp tổng quát(generalized forwarding):
            - Nhiều trường header có thể xác định hành động
            - Nhiều hành động có thể: drop/copy/modify/log gói
- ![](https://hackmd.io/_uploads/rJtGdwiL2.png)

- **Flow table abstraction**:
    - **Flow**: được xác định bởi các giá trị trường header (trong các trường của lớp link, network, transport)
    - Generalized forwarding: quy tắc xử lý gói đơn giản
        - **match**: các giá trị mẫu trong các trường header gói
        - **actions**: đối với gói phù hợp: thả, chuyển tiếp, sửa đổi, gói phù hợp hoặc gửi gói phù hợp đến bộ điều khiển
        - **priority**: phân biệt các mẫu chồng chéo
        - **counters**: #byte và #packets
    - ![](https://hackmd.io/_uploads/r1WgnPo83.png)
    - ![](https://hackmd.io/_uploads/rJrMnwjLh.png)

### 8. OpenFlow:
- Flow table entries:
    - ![](https://hackmd.io/_uploads/By0ahwjU2.png)
- Ví dụ:
    - Chuyển tiếp dựa trên điểm đến (Destination-based forwarding):
        - ![](https://hackmd.io/_uploads/HJTZ6vsIn.png)
        - Các gói dữ liệu IP đến địa chỉ IP 51.6.0.8 phải được chuyển tiếp đến cổng đầu ra của bộ định tuyến 6
    - Tường lửa (Firewall):
        - ![](https://hackmd.io/_uploads/BJbaTPjLh.png)
        - Chặn (không chuyển tiếp) tất cả các gói tin đến cổng TCP 22 (cổng ssh #)
        - ![](https://hackmd.io/_uploads/HyQQ0vsU3.png)
        - Chặn (không chuyển tiếp) tất cả các datagram được gửi bởi máy chủ 128.119.1.1
    - Chuyển tiếp dựa trên đích lớp 2 (Layer 2 destination-based forwarding):
        - ![](https://hackmd.io/_uploads/H1Pw0DjI2.png)
        - khung lớp 2 với địa chỉ MAC đích 22:A7:23:11:E1:02 nên được chuyển tiếp đến cổng đầu ra 3
- OpenFlow abstraction: 
    - match+action: trừu tượng thống nhất các loại thiết bị khác nhau
    - Router: 
        - match: longest destination IP prefix
        - action: forward out a link
    - Switch
        - match: destination MAC address
        - action: forward or flood
    - Firewall
        - match: IP addresses and TCP/UDP port numbers
        - action: permit or deny
    - NAT
        - match: IP address and port
        - action: rewrite address and port
- Ví dụ:
    - ![](https://hackmd.io/_uploads/r1ThJx2Ih.png)
    - Các bảng được phối hợp có thể tạo hành vi trên toàn mạng, ví dụ:
        - Datagram từ máy chủ h5 và h6 nên được gửi đến h3 hoặc h4, qua s1 và từ đó đến s2
    - ![](https://hackmd.io/_uploads/HJA8llnUh.png)
- Kết luận:
    - “match plus action” abstraction: khớp các bit trong (các) tiêu đề gói đến trong bất kỳ lớp nào, thực hiện hành động
        - Khớp trên nhiều trường (lớp liên kết, mạng, lớp vận chuyển)
        - Hành động cục bộ: thả, chuyển tiếp, sửa đổi hoặc gửi gói phù hợp tới controller
        - “Chương trình” hành vi trên toàn mạng
    - Dạng đơn giản của “khả năng lập trình mạng” (network programmability)
        - "Processing" có thể lập trình được trên từng gói tin.
        - Nguồn gốc lịch sử: mạng hoạt động
        - Ngày nay: lập trình tổng quát hơn: P4 (Xem P4.org).


### 9. Middleboxes:
- Middlebox (RFC 3234): Bất kỳ hộp trung gian nào thực hiện các chức năng khác ngoài các chức năng bình thường, tiêu chuẩn của một bộ định tuyến IP trên đường dẫn dữ liệu giữa một máy nguồn và máy đích.
- ![](https://hackmd.io/_uploads/rJkRzghLn.png)
- Ban đầu: các giải pháp phần cứng độc quyền (đóng)
- Chuyển hướng đến **phần cứng "whitebox"** triển khai giao diện lập trình ứng dụng mở
    - Rời bỏ các giải pháp phần cứng độc quyền
    - **Các hành động cục bộ có thể lập trình** thông qua match+action
    - Chuyển hướng đến sự đổi mới / phân biệt trong phần mềm
- **SDN**: điều khiển tập trung và quản lý cấu hình (về mặt logic) thường ở trong môi trường đám mây private/public
- **Network functions virtualization (NFV)**: các dịch vụ có thể lập trình trên phần cứng whitebox mạng, tính toán, lưu trữ.
- ![](https://hackmd.io/_uploads/ByQhVe3L3.png)
- ![](https://hackmd.io/_uploads/r1TTEenL3.png)




## Chương 5: Network layer: Control Plane
### 1. Introduction:
- Chức năng của tầng Network: 
    - **forwarding**: di chuyển các gói từ đầu vào của bộ định tuyến đến đầu ra của bộ định tuyến thích hợp --> data plane
    - **routing**: xác định tuyến đường được thực hiện bởi các gói từ nguồn đến đích --> control plane
- Hai cách tiếp cận để cấu trúc control plane mạng:
    - Điều khiển trên mỗi bộ định tuyến (truyền thống)
    - Điều khiển tập trung theo logic (SDN)
- Control plane trên mỗi bộ định tuyến:
    - Các thành phần thuật toán định tuyến riêng lẻ trong **mỗi và mọi** bộ định tuyến tương tác trong control plane.\
    - ![](https://hackmd.io/_uploads/rkGYven8n.png)
- Software-Defined Networking (SDN) control plane:
    - Bộ điều khiển từ xa tính toán, cài đặt bảng chuyển tiếp trong bộ định tuyến
    - ![](https://hackmd.io/_uploads/H1oaPl38n.png)

### 2. Routing protocols:
- **Mục đích** của routing protocol: xác định con đường "tốt" (tương đương, tuyến đường), từ máy chủ gửi đến máy chủ nhận, thông qua mạng bộ định tuyến
    - Đường dẫn - **path**: chuỗi các gói của bộ định tuyến đi từ máy chủ nguồn ban đầu nhất định đến máy chủ đích cuối cùng
    - “**Tốt**”: “chi phí” thấp nhất, “nhanh nhất”, “ít tắc nghẽn nhất”
    - **Routing**: a “top-10” networking challenge!
    - ![](https://hackmd.io/_uploads/ryQMYenL2.png)
- **Graph abstraction: link costs**
    - ![](https://hackmd.io/_uploads/r1WNtxnL3.png)
    - ![](https://hackmd.io/_uploads/HkdHtlhIn.png)
    - Chi phí (cost) do nhà điều hành mạng xác định: có thể luôn bằng 1 hoặc tỷ lệ nghịch với băng thông hoặc tỷ lệ nghịch với tắc nghẽn
    - ![](https://hackmd.io/_uploads/rJJptgn82.png)
- **Routing algorithm classification:**
    - ![](https://hackmd.io/_uploads/Sykb9lnUh.png)
    - **Global**: Tất cả các router đều có cấu trúc liên kết hoàn chỉnh, thông tin về link cost
        - Thuật toán "link state"
    - **Dynamic**: Các tuyến đường thay đổi nhanh hơn.
        - Cập nhật định kỳ hoặc để đáp ứng với thay đổi link cost
    - **Static**: tuyến đường thay đổi chậm theo thời gian
    - **Decentralized**: quá trình tính toán lặp đi lặp lại, trao đổi thông tin với hàng xóm
        - Bộ định tuyến ban đầu chỉ biết chi phí liên kết đến các hàng xóm đính kèm
        - Thuật toán "distance vector"
### 3. Dijkstra’s link-state routing algorithm
- **Centralized**: cấu trúc liên kết mạng, link cost được biết đến với tất cả các nút
    - Được thực hiện thông qua "link state broadcast"
    - Tất cả các nút có cùng thông tin
- Tính toán các đường dẫn chi phí thấp nhất từ một nút ("nguồn") đến tất cả các nút khác
    - Cung cấp bảng chuyển tiếp (**forwarding table**) cho nút đó
- **Iterative**: sau k lần lặp lại, biết đường dẫn chi phí thấp nhất đến k đích
- ![](https://hackmd.io/_uploads/HyTK1W3U3.png)
    - D(v): Khoảng cách đến v
    - p(v): Cha của v theo đường đi ngắn nhất
    - N': Tập hợp các nút có đường dẫn chi phí thấp nhất được biết chắc chắn
- ![](https://hackmd.io/_uploads/H1b6e-n83.png)
- Ví dụ:
    - ![](https://hackmd.io/_uploads/B1_Hbb2U2.png)
    - ![](https://hackmd.io/_uploads/rJYfGZ3I2.png)
    - ![](https://hackmd.io/_uploads/rJRXzZ3I3.png)
- **Discussion**:
    - Đpt thuật toán: n nodes
        - n lần lặp: cần phải kiểm tra tất cả các node không trong N
        - n*(n+1)/2 lần so sánh: O(n^2)
        - Có thể tốt hơn: O(nlogn)
    - Độ phức tạp của thông điệp:
        - Mỗi bộ định tuyến phải phát thông tin trạng thái liên kết của nó tới n bộ định tuyến khác
        - Các thuật toán quảng bá hiệu quả (và thú vị!): Giao thoa liên kết O(n) để phổ biến một thông điệp quảng bá từ một nguồn
        - Mỗi thông báo của bộ định tuyến đi qua các liên kết O(n): độ phức tạp của thông báo tổng thể: O(n^2)
- **Oscillations possible**:
    - Khi chi phí liên kết phụ thuộc vào lưu lượng giao thông, có thể xảy ra sự dao động trong tuyến đường (**route oscillations**).
    - Kịch bản mẫu:
        - Định tuyến đến đích a, lưu lượng đi vào tại d, c, e với tốc độ 1, e (<1), 1
        - Chi phí liên kết là định hướng và phụ thuộc vào lưu lượng
    - ![](https://hackmd.io/_uploads/B1zn4-n83.png)

### 4. Distance vector algorithm 
- Dựa trên Bellman-Ford (BF) (QHĐ)
- ![](https://hackmd.io/_uploads/rks68WhI3.png)
- Ví dụ:
    - ![](https://hackmd.io/_uploads/B1XEDbhLn.png)
- Distance vector algorithm:
    - **Ý tưởng chính**:
        - Theo thời gian, mỗi nút sẽ gửi ước tính vectơ khoảng cách của riêng mình cho các nút lân cận
        - Khi x nhận được ước tính DV (distance vector) mới từ bất kỳ hàng xóm nào, nó sẽ cập nhật DV của chính nó bằng phương trình B-F: ![](https://hackmd.io/_uploads/SJKbFW3L3.png)
        - trong các điều kiện tự nhiên nhỏ, ước tính D_x(y) hội tụ về chi phí thực tế thấp nhất d_x(y)
    - ![](https://hackmd.io/_uploads/r1iKtZnU3.png)
    - **Iterative, asynchronous** (lặp, không đồng bộ): mỗi lần lặp cục bộ gây ra bởi:
        - Thay đổi chi phí liên kết cục bộ
        - Tin nhắn cập nhật DV từ hàng xóm
    - **Distributed, self-stopping** (phân tán, tự dừng): mỗi nút chỉ thông báo cho các nút lân cận khi DV của nó thay đổi
        - Hàng xóm sau đó thông báo cho hàng xóm của họ – chỉ khi cần thiết
        - Không nhận được thông báo, không có hành động nào được thực hiện!
- Ví dụ: Xem trong slide =))
- **State information diffusion**:
    - ![](https://hackmd.io/_uploads/ryiZkf283.png)
    - Giao tiếp lặp, các bước tính toán khuếch tán thông tin qua mạng:
        - t=0, chỉ có mỗi c
        - t=1, vector khoảng cách xa thêm 1 bước nhảy --> là b
        - t=2, b + vector khoảng cách xa thêm 2 bước nhảy --> là a,e
        - t=3, a,b,e + vector 3 bước nhảy --> d,f,h
        - t=4, a,b,d,e,f,h + vector 4 bước --> g,i
- **Link cost changes**:
    - ![](https://hackmd.io/_uploads/HJgn1zhU3.png)
    - ![](https://hackmd.io/_uploads/ByNfgf2U3.png)
    - Nút phát hiện thay đổi link cost cục bộ
    - Cập nhật thông tin định tuyến, tính toán lại DV cục bộ
    - Nếu DV thay đổi, thông báo cho hàng xóm
    - ![](https://hackmd.io/_uploads/rJPIxM3Ih.png)
    - ![](https://hackmd.io/_uploads/BkpZ-Gn8n.png)
- So sánh: LS (link state) và DV (distance vector)
    - **message complexity**:
        - LS: n bộ định tuyến, gửi tin nhắn O(n^2)
        - DV: Trao đổi giữa các hàng xóm; thời gian hội tụ thay đổi.
    - **speed of convergence**:
        - LS: thuật toán O(n^2), tin nhắn O(n^2)
            - Có thể có dao động
        - DV: thời gian hội tụ thay đổi
            - Có thể có các vòng lặp định tuyến
            - Bài toán đếm đến vô cực
    - **robustness**:
        - LS:
            - bộ định tuyến có thể quảng cáo chi phí liên kết không chính xác
            - mỗi bộ định tuyến chỉ tính toán bảng riêng của nó
        - DV:
            - Bộ định tuyến DV có thể quảng cáo chi phí đường dẫn không chính xác (“Tôi có một đường dẫn chi phí thực sự thấp đến mọi nơi”): black-holing
            - mỗi bảng của bộ định tuyến được sử dụng bởi những người khác: lỗi lan truyền qua mạng

### 5. Intra-ISP routing: OSPF
#### a. Making routing scalable:
- **Scale** (quy mô): hàng tỷ điểm đến
    - Không thể lưu trữ tất cả các điểm đến trong bảng định tuyến!
    - Trao đổi bảng định tuyến sẽ tràn ngập các liên kết!
- **administrative autonomy** (tự chủ quản trị):
    - Internet: một mạng lưới các mạng
    - Mỗi quản trị mạng có thể muốn kiểm soát tuyến đường trong mạng của mình
#### b. Internet approach to scalable routing: 
- Tổng hợp các bộ định tuyến thành các vùng được gọi là “hệ thống tự chủ” (autonomous systems) (AS) (còn gọi là “miền”)
- intra-AS (hay còn gọi là “intra-domain”): định tuyến giữa các AS (“mạng”)
    - Tất cả các bộ định tuyến trong AS phải chạy cùng một giao thức intra-domain (nội miền)
    - Các bộ định tuyến trong AS khác nhau có thể chạy các giao thức định tuyến nội miền khác nhau
    - Bộ định tuyến cổng: ở “cạnh” AS của chính nó, có (các) liên kết đến (các) bộ định tuyến trong các AS khác
- inter-AS (còn gọi là “inter-domain”): định tuyến giữa các AS
    - Cổng thực hiện định tuyến liên miền (cũng như định tuyến intra-domain)
#### c. Interconnected ASes:
- bảng chuyển tiếp được định cấu hình bởi các thuật toán định tuyến intra- và inter- AS
    - intra-AS routing determine entries for destinations within AS
    - ![](https://hackmd.io/_uploads/Syj-cMhLn.png)
    - inter-AS & intra-AS determine entries for external destinations
    - ![](https://hackmd.io/_uploads/HJSG5znU2.png)
- ![](https://hackmd.io/_uploads/HJLEqM2Ln.png)
#### d. Inter-AS routing:  a role in intradomain forwarding
- ![](https://hackmd.io/_uploads/SyQyoGnU2.png)
- Giả sử bộ định tuyến trong AS1 nhận được datagram ngoài AS1:
    - Bộ định tuyến nên chuyển tiếp gói đến bộ định tuyến cổng trong AS1, nhưng cái nào?
- AS1 inter-domain routing phải:
    - Tìm hiểu điểm đến nào có thể truy cập thông qua AS2, điểm đến nào thông qua AS3
    - Truyền thông tin về khả năng tiếp cận này đến tất cả các bộ định tuyến trong AS1
#### e. Inter-AS routing:  routing within an AS
- Các giao thức định tuyến nội bộ (intra-AS routing) AS phổ biến nhất:
    - RIP: Routing Information Protocol [RFC 1723]
        - DV cổ điển: DV được trao đổi cứ sau 30 giây
        - Không còn được sử dụng rộng rãi
    - EIGRP: Enhanced Interior Gateway Routing Protocol
        - Dựa trên DV
        - Trước đây là độc quyền của Cisco trong nhiều thập kỷ (được mở vào năm 2013 [RFC 7868])
    - OSPF: Open Shortest Path First [RFC 2328]
        - link-state routing
        - Giao thức IS-IS (tiêu chuẩn ISO, không phải tiêu chuẩn RFC) về cơ bản giống như OSPF
#### f. OSPF (Open Shortest Path First) routing
- "open": công khai
- Link-state cổ điển:
    - Mỗi bộ định tuyến truyền rộng thông báo trạng thái liên kết OSPF (trực tiếp qua IP thay vì sử dụng TCP/UDP) cho tất cả các bộ định tuyến khác trong toàn bộ AS.
    - Có thể sử dụng nhiều số liệu link cost khác nhau: băng thông, độ trễ.
    - Mỗi bộ định tuyến có thông tin đầy đủ về mô hình mạng, sử dụng thuật toán Dijkstra để tính toán bảng chuyển tiếp.
- **Bảo mật**: Tất cả các thông điệp OSPF được xác thực (để ngăn chặn xâm nhập độc hại).
#### g. Hierarchical OSPF (OSPF phân cấp)
- Hai cấp độ: local area, backbone.
    - Thông báo trạng thái liên kết chỉ được truyền trong area, hoặc backbone.
    - Mỗi nút có thông tin chi tiết về mô hình khu vực (area); chỉ biết hướng để đến các điểm đến khác.
- ![](https://hackmd.io/_uploads/Bk_ITf28n.png)
    - **Area border routers**: "tổng hợp" khoảng cách đến các điểm đến trong khu vực đó (own area), quảng bá trong backbone.
    - **Local routers**: 
        - Truyền thông trạng thái liên kết chỉ trong khu vực.
        - Tính toán định tuyến trong khu vực.
        - Chuyển tiếp gói tin ra ngoài thông qua area border router
    - **Boundary router**: kết nối với các AS khác.
    - **Backbone router**: chạy OSPF giới hạn trong backbone.

### 6. Routing among ISPs: BGP
#### a. Internet inter-AS routing: BGP
- BGP (Border Gateway Protocol): giao thức định tuyến giữa miền giao thức (inter-domain) trên thực tế
    - “glue that holds the Internet together”: "liên kết kết nối Internet lại với nhau"
- Cho phép mạng con mạng quảng bá sự tồn tại của nó và các điểm đến nó có thể đạt được đến phần còn lại của Internet: "Tôi đang ở đây, đây là những gì tôi có thể đạt được và như thế nào"
- BGP cung cấp cho mỗi AS (tổ chức mạng) một phương tiện để:
    - **eBGP**: nhận được thông tin về khả năng tiếp cận mạng con từ các AS lân cận
    - **iBGP**: truyền thông tin đạt được đến tất cả các AS-internal router.
    - Xác định các tuyến "tốt" đến các mạng khác dựa trên thông tin đạt được và *chính sách*.
- eBGP, iBGP connections: ![](https://hackmd.io/_uploads/rk_vWQh82.png)
#### b. BGP basics: 
- **BGP session**: hai bộ định tuyến BGP (“ngang hàng”) trao đổi thông báo BGP qua kết nối TCP bán cố định:
    - Đường dẫn quảng cáo đến các tiền tố mạng đích khác nhau (BGP là giao thức “vector đường dẫn”)
- Khi cổng AS3 3a quảng bá đường dẫn **AS3,X** đến cổng AS2 2c:
    - AS3 **hứa** với AS2 nó sẽ chuyển tiếp datagram tới X
- ![](https://hackmd.io/_uploads/rJUM7m2L3.png)
#### c. Path attributes and BGP routes:
- BGP advertised route:  prefix + attributes 
    - Prefix (tiền tố): điểm đến được quảng cáo
    - Hai thuộc tính (attribute) quan trọng:
        - **AS-PATH**: danh sách các AS mà quảng cáo tiền tố đã đi qua
        - **NEXT-HOP**: chỉ ra bộ định tuyến AS bên trong cụ thể cho AS next-hop
- **Policy-based routing**:
    - Quảng cáo tuyến nhận cổng sử dụng chính sách nhập (**import policy**) để chấp nhận/từ chối đường dẫn (ví dụ: không bao giờ định tuyến qua AS Y).
    - Chính sách AS cũng xác định xem có **quảng bá** đường dẫn tới các AS lân cận khác hay không
#### d. BGP path advertisement:
- ![](https://hackmd.io/_uploads/r14CI7382.png)
    - Bộ định tuyến AS2 2c nhận quảng cáo đường dẫn AS3,X (thông qua eBGP) từ bộ định tuyến AS3 3a
    - Dựa trên chính sách AS2, bộ định tuyến AS2 2c chấp nhận đường dẫn AS3,X, truyền (thông qua iBGP) tới tất cả các bộ định tuyến AS2
    - Dựa trên chính sách AS2, bộ định tuyến AS2 2a quảng cáo (thông qua eBGP) đường dẫn AS2, AS3, X tới bộ định tuyến AS1 1c
- ![](https://hackmd.io/_uploads/ryaLvm3L3.png)
    - Bộ định tuyến cổng có thể tìm hiểu về nhiều đường dẫn đến đích:
        - Bộ định tuyến cổng AS1 1c học đường dẫn AS2,AS3,X từ 2a
        - Bộ định tuyến cổng AS1 1c học đường AS3,X từ 3a
        - Dựa trên chính sách, bộ định tuyến cổng AS1 1c chọn đường dẫn AS3,X và quảng cáo đường dẫn trong AS1 qua iBGP
- ![](https://hackmd.io/_uploads/S1yr2Xn8h.png)
    - nhớ lại: 1a, 1b, 1d tìm hiểu qua iBGP từ 1c: “đường dẫn đến X đi qua 1c”
    - tại 1d: Định tuyến nội miền (intra-domain) OSPF: để đến 1c, sử dụng giao diện 1
    - tại 1d: để đến X, sử dụng giao diện 1
- ![](https://hackmd.io/_uploads/H1Y2JE38n.png)
    - tại 1a: Định tuyến nội miền OSPF: để đến 1c, sử dụng giao diện 2
    - tại 1a: để đến X, sử dụng giao diện 2
#### e. BGP messages
- Thông điệp BGP được trao đổi giữa các peer qua kết nối TCP
- Thông điệp BGP:
    - OPEN: mở kết nối TCP tới BGP peer từ xa và xác thực việc gửi BGP peer
    - UPDATE: quảng cáo đường dẫn mới (hoặc rút tiền cũ)
    - KEEPALIVE: duy trì kết nối khi không có UPDATE; cũng như ACK yêu cầu OPEN
    - NOTIFICATION: thông báo lỗi trong tin nhắn trước đó; cũng được sử dụng để đóng kết nối
#### f. Tại sao định tuyến Intra-, Inter-AS khác nhau?
- chính sách:
    - inter-AS: quản trị viên muốn kiểm soát cách lưu lượng truy cập được định tuyến, ai định tuyến qua mạng của nó
    - intra-AS: quản trị viên duy nhất, vì vậy chính sách ít có vấn đề hơn
- tỉ lệ:
    - định tuyến phân cấp giúp tiết kiệm kích thước bảng, giảm lưu lượng cập nhật
- hiệu suất:
    - intra- AS: có thể tập trung vào hiệu suất
    - inter-AS: chính sách chi phối hiệu suất
#### g. Hot potato routing
- ![](https://hackmd.io/_uploads/H1oc442U2.png)
- 2d biết rằng (thông qua iBGP) nó có thể định tuyến đến X thông qua 2a hoặc 2c
- **Hot potato routing**: chọn cổng cục bộ có chi phí ***intra-domain*** ít nhất (ví dụ: 2d chọn 2a, mặc dù có nhiều AS nhảy đến X hơn): đừng lo lắng về chi phí intra-domain!
#### h. BGP: achieving policy via advertisements
- ![](https://hackmd.io/_uploads/rkFe_N2L3.png)
- ISP chỉ muốn định tuyến lưu lượng đến/từ mạng khách hàng của mình (không muốn chuyển lưu lượng giữa các ISP khác – một chính sách “thế giới thực” điển hình)
    - A quảng cáo đường dẫn Aw đến B và C
    - B chọn không quảng cáo BAw cho C!
    - B không nhận được "doanh thu" khi định tuyến CBAw, vì không ai trong số C, A, w là khách hàng của B
    - C không tìm hiểu về đường dẫn CBAw
    - C sẽ định tuyến CAw (không sử dụng B) để đến w
    - ![](https://hackmd.io/_uploads/rJS5u4hI2.png)
#### i. BGP route selection:
- Bộ định tuyến có thể tìm hiểu về nhiều tuyến đến AS đích, chọn tuyến dựa trên:
    - thuộc tính giá trị sở thích cục bộ: quyết định chính sách
    - AS-PATH ngắn nhất
    - bộ định tuyến NEXT-HOP gần nhất: định tuyến khoai tây nóng
    - tiêu chí bổ sung
### 7. Software defined networking (SDN)
- Internet network layer: được triển khai theo lịch sử thông qua phương pháp kiểm soát phân tán trên mỗi bộ định tuyến:
    - Bộ định tuyến **nguyên khối** chứa phần cứng chuyển mạch, chạy triển khai độc quyền các giao thức chuẩn Internet (IP, RIP, IS-IS, OSPF, BGP) trong hệ điều hành bộ định tuyến độc quyền (ví dụ: Cisco IOS)
    - Các “hộp trung gian” khác nhau cho các chức năng lớp mạng khác nhau: tường lửa, bộ cân bằng tải, hộp NAT, ..
- ~2005: quan tâm mới đến việc xem xét lại control plane
- **Per-router control plane**
    - Các thành phần thuật toán định tuyến riêng lẻ **trong mỗi và mọi** bộ định tuyến tương tác trong control plane với các bảng chuyển tiếp máy tính
    - ![](https://hackmd.io/_uploads/r1t_dSh83.png)
- **Software-Defined Networking (SDN) control plane**
    - ![](https://hackmd.io/_uploads/SJUhOB3I2.png)
- Tại sao cần có một control plane tập trung logic?

    - Quản lý mạng dễ dàng hơn: tránh các lỗi cấu hình bộ định tuyến, linh hoạt hơn trong luồng lưu lượng mạng.
    - Chuyển tiếp dựa trên bảng (nhớ API OpenFlow) cho phép "lập trình" bộ định tuyến.
        - Lập trình tập trung trở nên dễ dàng hơn: tính toán bảng tập trung và phân phối.
        - Lập trình phân tán khó khăn hơn: tính toán bảng là kết quả của thuật toán phân tán (giao thức) được thực hiện trong từng bộ định tuyến.
    - Thực hiện mở (không độc quyền) của control plane.
        - Khuyến khích sự đổi mới: để hàng nghìn bông hoa nở.
- Traffic engineering: difficult with traditional routing
    - ![](https://hackmd.io/_uploads/HJbdKH2Ln.png)
        - Q: Nếu nhà điều hành mạng muốn lưu lượng từ U đến Z đi qua UVWZ thay vì UXYZ, thì sao?
        - A: Cần xác định lại trọng số liên kết để thuật toán định tuyến lưu lượng tính toán các tuyến đúng như vậy (hoặc cần một thuật toán định tuyến mới)!
        - Trọng số liên kết chỉ là "nút điều khiển": không có quá nhiều kiểm soát!
    - ![](https://hackmd.io/_uploads/Hku2KShUn.png)
        - Q: Nếu nhà điều hành mạng muốn chia lưu lượng từ U đến Z thành hai luồng đi qua UVWZ và UXYZ (cân bằng tải), thì sao?
        - A: Không thể thực hiện điều đó (hoặc cần một thuật toán định tuyến mới).
    - ![](https://hackmd.io/_uploads/B1xk5HhLn.png)
        - Q: Nếu W muốn định tuyến lưu lượng màu xanh và màu đỏ khác nhau từ W đến Z, thì sao?
        - A: Không thể thực hiện điều đó (với chuyển tiếp dựa trên đích và định tuyến LS, DV). 
        - Chúng ta đã học trong Chương 4 rằng chuyển tiếp tổng quát và SDN có thể được sử dụng để đạt được bất kỳ định tuyến nào mong muốn.
- ![](https://hackmd.io/_uploads/SkNH9HnU3.png)
    - 1. chuyển tiếp “dựa trên luồng” tổng quát (ví dụ: OpenFlow)
    - 2. phân chia control, data plane
    - 3. các chức năng control plane nằm ngoài các data-plane switches
    - 4. các ứng dụng kiểm soát có thể lập trình được.
- Data-plane switches:
    - ![](https://hackmd.io/_uploads/S1oMoS3Un.png)
    - Các switch nhanh, đơn giản và thông dụng triển khai chuyển tiếp dữ liệu tổng quát (Chương 4.4) trong phần cứng.
    - Bảng luồng (chuyển tiếp) được tính toán, cài đặt dưới sự giám sát của bộ điều khiển.
    - Giao diện lập trình ứng dụng (API) để kiểm soát switch dựa trên bảng (ví dụ, OpenFlow).
        - Xác định những gì có thể kiểm soát, những gì không thể kiểm soát.
    - Giao thức để giao tiếp với bộ điều khiển (ví dụ, OpenFlow).
- SDN controller (network OS): 
    - ![](https://hackmd.io/_uploads/Byluy2Hn83.png)
    - Duy trì thông tin trạng thái mạng
    - Tương tác với các ứng dụng điều khiển mạng "ở trên" thông qua giao diện API phía Bắc (northbound API)
    - Tương tác với các switch mạng "ở dưới" thông qua giao diện API phía Nam (southbound)
    - Được triển khai như một hệ thống phân tán để đạt hiệu suất, khả năng mở rộng, khả năng chống lỗi và tính ổn định.
- Network-control apps:
    - ![](https://hackmd.io/_uploads/rkjI2rnIh.png)
    - "Lõi" của việc điều khiển: thực hiện các chức năng điều khiển bằng cách sử dụng các dịch vụ cấp thấp, API được cung cấp bởi bộ điều khiển SDN
    - Được tách ra: có thể được cung cấp bởi bên thứ ba: khác với nhà cung cấp định tuyến hoặc bộ điều khiển SDN

#### a. Components of SDN controller
- ![](https://hackmd.io/_uploads/rk5k6HnL3.png)
- *Lớp giao diện cho ứng dụng điều khiển mạng*: API trừu tượng hóa
- *Quản lý trạng thái toàn mạng*: trạng thái của các liên kết mạng, switch, dịch vụ: một cơ sở dữ liệu phân tán
- *Giao tiếp*: giao tiếp giữa bộ điều khiển SDN và các switch được kiểm soát.

#### b. OpenFlow protocol
- Hoạt động giữa bộ điều khiển và switch
- Sử dụng giao thức TCP để trao đổi tin nhắn
    - Tùy chọn mã hóa
- Ba lớp tin nhắn OpenFlow:
    - Tin nhắn từ bộ điều khiển đến switch
    - Tin nhắn không đồng bộ (switch đến bộ điều khiển)
    - Tin nhắn đối xứng (khác)
- Khác biệt so với OpenFlow API
    - API được sử dụng để chỉ định các hành động chuyển tiếp tổng quát.
- ![](https://hackmd.io/_uploads/ByHZCH2Uh.png)

- controller-to-switch messages:
    - Các tin nhắn quan trọng từ bộ điều khiển đến switch:
        - features: bộ điều khiển truy vấn tính năng của switch, switch trả lời
        - configure: bộ điều khiển truy vấn/thiết lập các tham số cấu hình của switch
        - modify-state: thêm, xóa, sửa đổi các mục dòng lưu lượng trong bảng OpenFlow
        - packet-out: bộ điều khiển có thể gửi gói tin này ra cổng cụ thể của switch.
- switch-to-controller messages:
    - Các tin nhắn quan trọng từ switch đến bộ điều khiển:
        - packet-in: chuyển gói tin (và điều khiển liên quan) đến bộ điều khiển. Xem tin nhắn packet-out từ bộ điều khiển.
        - flow-removed: mục bảng luồng bị xóa tại switch.
        - port status: thông báo cho bộ điều khiển về thay đổi trên một cổng.
- May mắn thay, các nhà điều hành mạng không "lập trình" các switch bằng cách tạo và gửi các tin nhắn OpenFlow trực tiếp. Thay vào đó, họ sử dụng các trừu tượng cấp cao hơn tại bộ điều khiển.
#### c. SDN: control/data plane interaction example
- ![](https://hackmd.io/_uploads/HkfkzvhU2.png)
- 1. Công tắc S1, gặp sự cố mất kết nối, sử dụng tin nhắn trạng thái cổng OpenFlow để thông báo cho bộ điều khiển.
- 2. Bộ điều khiển SDN nhận tin nhắn OpenFlow, cập nhật thông tin trạng thái kết nối.
- 3. Ứng dụng thuật toán định tuyến Dijkstra đã đăng ký để được gọi mỗi khi trạng thái kết nối thay đổi. Nó được gọi.
- 4. Thuật toán định tuyến Dijkstra truy cập thông tin đồ thị mạng, thông tin trạng thái kết nối trong bộ điều khiển, tính toán các tuyến đường mới.
- ![](https://hackmd.io/_uploads/H1_OMPhL3.png)
- 5. Ứng dụng định tuyến dựa trên trạng thái kết nối tương tác với thành phần tính toán bảng luồng trong bộ điều khiển SDN, tính toán các bảng luồng mới cần thiết.
- 6. Bộ điều khiển sử dụng OpenFlow để cài đặt các bảng mới trong các công tắc cần cập nhật.

#### d. OpenDaylight (ODL) controller
- ![](https://hackmd.io/_uploads/Bk4oGD2Uh.png)
- Service Abstraction Layer (SAL): kết nối các ứng dụng và dịch vụ nội bộ và bên ngoài

#### e. ONOS (Open Network Operating System) controller
- ![](https://hackmd.io/_uploads/SkXfXwh8h.png)
- Các ứng dụng điều khiển được tách riêng khỏi bộ điều khiển.
- Khung công việc intent: mô tả cấp cao của dịch vụ: điều gì thay vì làm thế nào.
- Tập trung đáng kể vào lõi phân tán: độ tin cậy của dịch vụ, sao chép hiệu suất mở rộng.

#### f. SDN: selected challenges
- Tăng cường mặt phẳng kiểm soát: hệ thống phân tán đáng tin cậy, đáng tin cậy, có khả năng mở rộng hiệu suất, bảo mật.
    - Khả năng chống lại sự cố: tận dụng lý thuyết mạnh về hệ thống phân tán đáng tin cậy cho mặt phẳng kiểm soát.
    - Đáng tin cậy, bảo mật: đã được tích hợp từ ngày đầu? 
- Mạng, giao thức đáp ứng yêu cầu cụ thể của nhiệm vụ
    - Ví dụ: thời gian thực, đáng tin cậy tuyệt đối, bảo mật tuyệt đối.
- Mở rộng Internet: vượt xa một mạng riêng.
- SDN quan trọng trong các mạng di động 5G.
#### g. SDN and the future of traditional network protocols
- Bảng chuyển tiếp được tính toán bởi SDN so với bảng chuyển tiếp được tính toán bởi bộ định tuyến: chỉ là một ví dụ về tính toán tập trung logic so với tính toán giao thức.
- Có thể tưởng tượng việc SDN tính toán kiểm soát tắc nghẽn: bộ điều khiển thiết lập tốc độ của nguồn gửi dựa trên mức tắc nghẽn được báo cáo bởi bộ định tuyến (đến bộ điều khiển).

### 8. ICMP: internet control message protocol
- Được sử dụng bởi các host và bộ định tuyến để truyền thông tin cấp mạng:
    - Báo cáo lỗi: host, mạng, cổng, giao thức không thể truy cập
    - Yêu cầu/phản hồi echo (sử dụng bởi ping)
- Lớp mạng "trên" IP:
    - Các thông điệp ICMP được mang trong các datagram IP
- **Thông điệp ICMP**: loại, mã cùng với 8 byte đầu tiên của datagram IP gây ra lỗi.
- ![](https://hackmd.io/_uploads/SkV_4vhIh.png)
- **Traceroute and ICMP**:
    - Nguồn gửi gửi các tập hợp các đoạn UDP đến đích.
        - Tập hợp đầu tiên có TTL = 1, tập hợp thứ hai có TTL = 2, v.v.
    - Datagram trong tập hợp thứ n đến định tuyến thứ n:
        - Định tuyến từ chối datagram và gửi thông điệp ICMP nguồn (loại 11, mã 0)
        - Thông điệp ICMP có thể bao gồm tên của định tuyến và địa chỉ IP
    - Khi thông điệp ICMP đến tại nguồn: ghi lại RTTs
    - **Tiêu chí dừng**:
        - Đoạn UDP cuối cùng cuối cùng đến máy chủ đích
        - Đích trả lại thông điệp ICMP "cổng không thể truy cập" (loại 3, mã 3)
        - Nguồn dừng lại.

### 9. Network management, configuration
#### a. What is network management?
- Hệ thống tự chủ (autonomous systems) (hay còn gọi là “mạng”): 1000 thành phần phần cứng/phần mềm tương tác
- Các hệ thống phức tạp khác yêu cầu giám sát, cấu hình, kiểm soát:
    - Máy bay phản lực, nhà máy điện hạt nhân, những người khác?
- **Quản lý mạng** (network management) bao gồm triển khai, tích hợp và phối hợp phần cứng, phần mềm và các yếu tố con người để giám sát, kiểm tra, thăm dò ý kiến, định cấu hình, phân tích, đánh giá và kiểm soát mạng và tài nguyên thành phần để đáp ứng hiệu suất hoạt động, thời gian thực và Yêu cầu về chất lượng dịch vụ với chi phí hợp lý.

#### b. Components of network management
- ![](https://hackmd.io/_uploads/H1-PIPnLh.png)
- Managing server: 
    - Ứng dụng, thông thường có liên quan đến mạng
    - Người quản lý (con người) trong quá trình quản lý
- Network management protocol: được sử dụng bởi máy chủ quản lý để truy vấn, cấu hình, quản lý thiết bị; được sử dụng bởi thiết bị để thông báo cho máy chủ quản lý về dữ liệu, sự kiện.
- Managed device: thiết bị với các thành phần phần cứng, phần mềm có thể được quản lý, cấu hình.
- Data: dữ liệu cấu hình "trạng thái" của thiết bị, dữ liệu hoạt động, thống kê thiết bị.

#### c. Network operator approaches to management (Các phương pháp quản lý mạng của nhà khai thác mạng)
- CLI (Command Line Interface)
    - Nhà khai thác mạng gửi các lệnh (kiểu, kịch bản) trực tiếp đến các thiết bị cá nhân (ví dụ: qua SSH).

- SNMP/MIB
    - Nhà khai thác mạng truy vấn/cài đặt dữ liệu (MIB) của các thiết bị bằng cách sử dụng giao thức quản lý mạng đơn giản (Simple Network Management Protocol) (SNMP).

- NETCONF/YANG
    - Trừu tượng hóa hơn, áp dụng cho toàn mạng, tổng thể hơn
    - Tập trung vào quản lý cấu hình đa thiết bị.
    - YANG: ngôn ngữ mô hình dữ liệu
    - NETCONF: truyền tải hành động/dữ liệu tương thích YANG đến/từ/cho các thiết bị từ xa
- ![](https://hackmd.io/_uploads/BJknDv382.png)
#### d. SNMP protocol
- Hai cách để truyền tải thông tin MIB, lệnh:
- ![](https://hackmd.io/_uploads/ryZg_P2U2.png)
- Message types: ![](https://hackmd.io/_uploads/HJwW_P383.png)
- Message formats: ![](https://hackmd.io/_uploads/HkumOwnL3.png)
- Management Information Base (MIB)
    - Dữ liệu hoạt động của thiết bị quản lý (và một số cấu hình)
    - Được thu thập vào mô-đun MIB (MIB module) của thiết bị
        - Có hơn 400 mô-đun MIB được xác định trong các RFC; còn nhiều MIB khác do các nhà cung cấp cụ thể tạo ra
    - Cấu trúc thông tin quản lý (SMI): ngôn ngữ định nghĩa dữ liệu
    - Ví dụ về các biến MIB cho giao thức UDP: ![](https://hackmd.io/_uploads/HJP1tP3I2.png)
#### e. NETCONF
- Mục tiêu: Quản lý/Cấu hình thiết bị trên toàn mạng một cách chủ động
- Hoạt động giữa máy chủ quản lý và các thiết bị mạng được quản lý
    - Các hành động: lấy, thiết lập, chỉnh sửa, kích hoạt cấu hình (retrieve, set, modify, activate configurations)
    - Hành động xác nhận tổ hợp (atomic-commit) trên nhiều thiết bị
    - Truy vấn dữ liệu hoạt động và thống kê
    - Đăng ký nhận thông báo từ các thiết bị
- Mô hình gọi thủ tục từ xa (RPC)
    - Các thông điệp giao thức NETCONF được mã hóa trong XML
    - Trao đổi qua giao thức truyền tin an toàn, đáng tin cậy (ví dụ: TLS)
- NETCONF initialization, exchange, close: 
    - ![](https://hackmd.io/_uploads/SJMYKwhU3.png)
- Selected NETCONF Operations: ![](https://hackmd.io/_uploads/HyGstPhI3.png)
- Sample NETCONF RPC message: ![](https://hackmd.io/_uploads/HJg6KPhUh.png)
#### f. YANG
- ![](https://hackmd.io/_uploads/BJ_zcPn82.png)
- Ngôn ngữ mô hình dữ liệu được sử dụng để chỉ định cấu trúc, cú pháp, ngữ nghĩa của dữ liệu quản lý mạng NETCONF
    - Có sẵn các loại dữ liệu tích hợp, tương tự như SMI
- Tài liệu XML mô tả thiết bị, khả năng có thể được tạo ra từ mô tả YANG
- Có thể biểu thị các ràng buộc giữa dữ liệu cần phải được thỏa mãn bởi một cấu hình NETCONF hợp lệ
    - Đảm bảo các cấu hình NETCONF tuân thủ các ràng buộc về tính đúng đắn, nhất quán

### 10. Tổng kết chương:
- Approaches to network control plane
    - Per-router control (traditional)
    - Logically centralized control (software defined networking)
- Traditional routing algorithms
    - Implementation in Internet: OSPF , BGP
- SDN controllers
    - Implementation in practice: ODL, ONOS
- Internet Control Message Protocol
- Network management



## Chương 6: The Link Layer and LANs

### 1. Introduction:
- Thuật ngữ:
    - Hosts và routers: các nút (nodes)
    - Kênh truyền thông kết nối các nút kề nhau trên đường truyền thông: liên kết (links)
      - Dây cáp (wired)
      - Không dây (wireless)
      - Mạng LAN (LANs)
    - Gói layer-2: khung (frame), bao gồm gói dữ liệu (datagram)
- **Tầng liên kết** dữ liệu có trách nhiệm chuyển gói dữ liệu từ một nút sang nút **kề vật lý** (physically adjacent) qua một liên kết.
- ![](https://hackmd.io/_uploads/SyojWIp82.png)
#### a. Context: 
- Datagram được chuyển tiếp bằng các giao thức liên kết khác nhau qua các liên kết khác nhau:
    - Ví dụ, WiFi trên liên kết đầu tiên, Ethernet trên liên kết tiếp theo
- Mỗi giao thức liên kết cung cấp các dịch vụ khác nhau
    - Ví dụ, có thể hoặc không cung cấp việc chuyển dữ liệu đáng tin cậy qua liên kết
- tương tự như một ví dụ trong lĩnh vực vận chuyển:
    - chuyến đi từ Princeton đến Lausanne
        - xe limo: Princeton đến JFK
        - máy bay: JFK đến Geneva
        - xe lửa: Geneva đến Lausanne
    - du khách = datagram
    - đoạn vận chuyển = liên kết giao tiếp
    - phương tiện vận chuyển = giao thức tầng liên kết
    - đại lý du lịch = thuật toán định tuyến
#### b. Services
- **framing, link access** (đóng khung, truy cập liên kết):
    - đóng gói datagram vào khung, thêm header và phần trailer
    - truy cập kênh nếu sử dụng môi trường chia sẻ
    - địa chỉ "MAC" trong tiêu đề khung xác định nguồn và đích (khác với địa chỉ IP!)
- **reliable delivery between adjacent nodes** (giao tiếp đáng tin cậy giữa các nút kề nhau)
    - chúng ta đã biết cách thực hiện điều này!
    - hiếm khi được sử dụng trên các liên kết có tỷ lệ lỗi bit thấp
    - liên kết không dây: tỷ lệ lỗi cao
        - Câu hỏi: tại sao cần cả độ tin cậy của cả tầng liên kết và tầng kết thúc-kết thúc?
- ![](https://hackmd.io/_uploads/rJim7ITU3.png)
- **flow control** (Điều khiển luồng): 
  - Điều tiết tốc độ truyền giữa các nút gửi và nhận liền kề.
- **error detection** (Phát hiện lỗi): 
  - Các lỗi do suy giảm tín hiệu, nhiễu.
  - Bộ nhận phát hiện lỗi, yêu cầu gửi lại hoặc loại bỏ khung dữ liệu.
- **error correction** (Khắc phục lỗi): 
  - Bộ nhận xác định và sửa lỗi bit mà không cần gửi lại.
- **half-duplex and full-duplex** (Bán đúp và toàn đúp):
  - Trong chế độ bán đúp, các nút ở hai đầu của liên kết có thể truyền dữ liệu, nhưng không phải cùng một lúc.

#### c. Where is the link layer implemented?
- Trong mỗi và mọi host
- Link layer được cài đặt ở network interface card (NIC) hoặc một chip
    - Ethernet, card hoặc chip Wifi
    - Thực hiện lớp liên kết và vật lý
- Gắn vào các bus hệ thống của host
- Kết hợp phần cứng, phần mềm, firmware

#### d. Interfaces communicating
![](https://hackmd.io/_uploads/HyIOrUpLn.png)


| Phía gửi                                                                         | Phía nhận                                                           |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| - đóng gói datagram vào khung (frame)                          | - kiểm tra lỗi, truyền dữ liệu đáng tin cậy, điều khiển luồng, v.v. |
| - thêm các bit kiểm tra lỗi, truyền dữ liệu đáng tin cậy, điều khiển luồng, v.v. | - trích xuất datagram, chuyển cho tầng trên ở phía nhận             |


### 2. Error detection, correction
#### a. Error detection
- EDC (Error Detection and Correction): các bit phát hiện và sửa lỗi (ví dụ: dư thừa)
- D: dữ liệu được bảo vệ bằng kiểm tra lỗi, có thể bao gồm các trường header
- ![](https://hackmd.io/_uploads/ByPwPUaLn.png)
- Error detection không đáng tin cậy 100%
    - Giao thức có thể bỏ sót một số lỗi, nhưng hiếm xảy ra
    - Trường EDC lớn hơn sẽ cung cấp khả năng phát hiện và sửa lỗi tốt hơn.

#### b. Parity checking (Kiểm tra chẵn lẻ)


| **single bit parity**                                              | **two-dimensional bit parity**    |
|:------------------------------------------------------------------ | --- |
| detect single bit errors                                           | Phát hiện và **sửa lỗi** một bit    |
| ![](https://hackmd.io/_uploads/rkBqO8TUh.png)                      | ![](https://hackmd.io/_uploads/Hk37F8pU2.png)|
| Parity bit được đặt sao cho tổng số bit 1 là số chẵn (Even parity) | ![](https://hackmd.io/_uploads/BJl79YIpI2.png)|

#### c. Internet checksum (review)
- **Mục tiêu**: phát hiện lỗi (tức là các bit bị đảo) trong đoạn đã được truyền
- Phía gửi:
    - Xem nội dung của đoạn UDP (bao gồm các trường header UDP và địa chỉ IP) như là một chuỗi các số nguyên 16 bit
    - **checksum**: tổng (tổng bù một) của nội dung đoạn
    - Giá trị checksum được đặt vào trường checksum UDP
- Phía nhận:
    - Tính toán checksum của đoạn nhận được
    - Kiểm tra xem checksum tính toán có bằng giá trị trường checksum không:
        - Không bằng - phát hiện lỗi
        - Bằng nhau - không phát hiện lỗi. Nhưng có thể vẫn có lỗi? Sẽ thảo luận thêm sau ....

#### d. Cyclic Redundancy Check (CRC)
- Một phương pháp mã hóa phát hiện lỗi mạnh mẽ hơn. 
- D: các bit dữ liệu (được cung cấp, hãy tưởng tượng chúng như một số nhị phân)
- G: mẫu bit (generator) có r+1 bit (được cung cấp)
- ![](https://hackmd.io/_uploads/rJEko8T8n.png)
- Mục tiêu: chọn r bit CRC, R, sao cho <D,R> chia hết cho G (mod 2)
    - Phía nhận biết G, chia <D,R> cho G. Nếu phần dư khác không: phát hiện lỗi!
    - CRC có thể phát hiện được tất cả các lỗi tập trung có độ dài nhỏ hơn r+1 bit
    - CRC được sử dụng rộng rãi trong thực tế (Ethernet, 802.11 WiFi)
- Note: Phép chia mod 2: XOR
- Ví dụ:
    -  ![](https://hackmd.io/_uploads/Bylgh8TI2.png)
### 3. Multiple access protocols
- Hai loại "liên kết":
    - point-to-point
        - liên kết point-to-point giữa Ethernet switch, host
        - PPP (Point-to-Point Protocol) cho truy cập quay số (dial-up)
    - Broadcast (shared wire or medium): Truyền phát đa điểm (broadcast) là quá trình gửi dữ liệu từ một nguồn đến tất cả các thiết bị kết nối trên một mạng chia sẻ chung hoặc trên một phương tiện truyền dẫn chung. Các thiết bị kết nối trên mạng này có thể nhận và xử lý thông điệp gửi đến.

        - Old-fashioned Ethernet:Trong Ethernet truyền thống, tín hiệu được truyền qua một cáp vật lý chung và các thiết bị trên mạng có thể nghe và nhận tất cả các tín hiệu được truyền đi.

        - Upstream HFC in cable-based access network: HFC (Hybrid Fiber-Coaxial) là một công nghệ sử dụng sợi quang và cáp đồng để cung cấp dịch vụ truyền thông, đặc biệt là truyền dẫn tín hiệu TV cáp và internet. Trong mạng truy cập dựa trên cáp, tín hiệu được truyền đi từ thiết bị của người dùng (upstream) thông qua mạng cáp đồng truyền điểm đến trạm cung cấp dịch vụ.

        - 802.11 wireless LAN, 4G/4G, satellite: Trong các mạng này, tín hiệu được truyền qua sóng vô tuyến hoặc tín hiệu vệ tinh để truyền dữ liệu giữa các thiết bị. Các thiết bị trên mạng có thể nhận và xử lý tín hiệu từ các nguồn truyền khác nhau trong không gian chia sẻ.
- ![](https://hackmd.io/_uploads/HkCb0IpL2.png)

#### a. Multiple access protocols
- Kênh phát sóng chia sẻ duy nhất
- Hai hoặc nhiều truyền thông đồng thời bởi các nút: nhiễu sóng
    - **Va chạm** xảy ra khi một nút nhận được hai hoặc nhiều tín hiệu cùng một lúc
- **Multiple access protocol**: 
    - Thuật toán phân tán xác định cách các nút chia sẻ kênh, tức là xác định khi nào nút có thể truyền
    - Giao tiếp về việc chia sẻ kênh phải sử dụng chính kênh đó!
         - Không có kênh ngoài tần số để phối hợp

#### b. MAC protocols: taxonomy
- Ba lớp rộng rãi:
    - Phân vùng kênh (channel partitioning): Chia kênh thành các "mảnh" nhỏ hơn (khe thời gian, tần số, mã) và cấp phát mỗi mảnh cho một trạm sử dụng riêng.
    - Truy cập ngẫu nhiên (random access): Không chia kênh, cho phép xung đột xảy ra. Xử lý xung đột để khôi phục lại thông tin.
    - "Lấy lượt" (taking turns): Các trạm lần lượt truy cập kênh, nhưng các trạm có nhiều dữ liệu cần gửi có thể lấy lượt lâu hơn.

#### c. Channel partitioning MAC protocols:
- **TDMA: time division multiple access**
    - Truy cập vào kênh theo "vòng" (rounds)
    - Mỗi trạm nhận một khe cố định (độ dài = thời gian truyền gói tin) trong mỗi vòng
    - Các khe không được sử dụng trở thành trạng thái rảnh
    - Ví dụ: Mạng LAN 6 trạm, trạm 1, 3, 4 có gói tin để gửi, khe 2, 5, 6 rảnh
    - ![](https://hackmd.io/_uploads/Bkyt1DaIh.png)
    
- FDMA: frequency division multiple access 
    - FDMA (Frequency Division Multiple Access) là phương pháp truy cập nhiều người dùng sử dụng chia dải tần số. Kênh tần số được chia thành các băng tần (frequency bands), và mỗi trạm được gán một băng tần tần số cố định. Thời gian truyền thông không sử dụng trong các băng tần tần số trở thành thời gian rỗi.
    - Ví dụ: Trong một mạng LAN gồm 6 trạm, các trạm 1, 3 và 4 có gói tin để gửi, trong khi các băng tần tần số 2, 5 và 6 không sử dụng và trở thành thời gian rỗi
    - ![](https://hackmd.io/_uploads/rJe3eP68n.png)

#### d. Random access protocols
- Khi một nút có gói tin để gửi, nó sẽ truyền với tốc độ dữ liệu đầy đủ của kênh, được ký hiệu là R. Không có sự phối hợp trước đó giữa các nút. Khi có hai hoặc nhiều nút truyền cùng một lúc, sẽ xảy ra "va chạm".

- Các giao thức MAC (Medium Access Control) theo tiêu chuẩn truy cập ngẫu nhiên xác định:
    - Cách phát hiện va chạm.
    - Cách khắc phục va chạm (ví dụ: thông qua việc truyền lại với độ trễ).

- Một số ví dụ về giao thức MAC truy cập ngẫu nhiên:
    - ALOHA, slotted ALOHA.
    - CSMA, CSMA/CD, CSMA/CA.

##### d.1. Slotted ALOHA
- Slotted ALOHA là một giao thức truy cập ngẫu nhiên trong mạng, và nó tuân theo những giả định sau:
    - Tất cả các khung dữ liệu có cùng kích thước.
    - Thời gian được chia thành các khe thời gian bằng nhau (thời gian để truyền 1 khung dữ liệu).
    - Các nút bắt đầu truyền chỉ khi bắt đầu một khe thời gian.
    - Các nút được đồng bộ hóa.
    - Nếu có 2 hoặc nhiều nút truyền trong cùng một khe thời gian, tất cả các nút phát hiện va chạm.

- Cách hoạt động của Slotted ALOHA như sau:
    - Khi một nút nhận được một khung dữ liệu mới, nó sẽ truyền trong khe thời gian tiếp theo.
    - Nếu không có va chạm: nút có thể gửi khung dữ liệu mới trong khe thời gian tiếp theo.
    - Nếu có va chạm: nút sẽ gửi lại khung dữ liệu trong mỗi khe thời gian tiếp theo với xác suất p cho đến khi thành công.
    - p random --> tại sao?
- Với Slotted ALOHA, việc chia thời gian thành các khe đồng bộ giúp giảm khả năng xảy ra va chạm và tăng hiệu suất của mạng.

- ![](https://hackmd.io/_uploads/SJFYGPTU3.png)
- Các ưu điểm của Slotted ALOHA:
    - Một nút hoạt động có thể liên tục truyền với tốc độ đầy đủ của kênh.
    - Phân tán mạnh: chỉ cần đồng bộ hóa các khe thời gian trong các nút.
    - Đơn giản.

- Các nhược điểm của Slotted ALOHA:
    - Xảy ra va chạm dẫn đến lãng phí khe thời gian.
    - Có khe thời gian trống.
    - Các nút có thể phát hiện va chạm trong thời gian ngắn hơn thời gian để truyền một gói tin.
    - Đồng bộ hóa đồng hồ
    
- Hiệu quả của Slotted ALOHA: Trong thời gian dài, tỷ lệ khe thời gian thành công (nhiều nút, mỗi nút có nhiều khung để gửi)
    - Giả sử: N nút với nhiều khung để gửi, mỗi nút truyền trong khe thời gian với xác suất p
        - Xác suất một nút cụ thể thành công trong một khe thời gian = p(1-p)^(N-1)
        - Xác suất một nút bất kỳ thành công = Np(1-p)^(N-1)
        - Hiệu suất tối đa: tìm p* sao cho Np(1-p)^(N-1) là lớn nhất
        - Với nhiều nút, lấy giới hạn của Np*(1-p*)^(N-1) khi N tiến đến vô cùng, ta có: Hiệu suất tối đa = 1/e = 0.37
    - Tốt nhất: kênh được sử dụng cho các truyền thông hữu ích trong 37% thời gian!

##### d.2. Pure ALOHA:
- Pure ALOHA là một phiên bản đơn giản hơn của Slotted ALOHA và không đòi hỏi đồng bộ hóa. Trong Pure ALOHA, khi một khung dữ liệu đến, nút sẽ truyền ngay lập tức mà không cần đồng bộ hóa thời gian. Tuy nhiên, xác suất va chạm tăng lên do thiếu đồng bộ hóa này. Khung gửi tại thời điểm t0 có thể va chạm với các khung khác được gửi trong khoảng thời gian [t0-1, t0+1].

- ![](https://hackmd.io/_uploads/BJmJVvTIh.png)

- Hiệu suất của Pure ALOHA rất thấp, chỉ đạt khoảng 18%. Điều này có nghĩa là kênh được sử dụng cho các truyền thông hữu ích chỉ trong khoảng 18% thời gian.

#### d.3. CSMA (carrier sense multiple access)
- CSMA (Carrier Sense Multiple Access) là một phương pháp trong đó các nút trước khi truyền sẽ lắng nghe (sense) kênh truyền xem nó đang rảnh hay đang bận. Nếu kênh truyền được cảm nhận là rảnh, nút sẽ truyền toàn bộ khung dữ liệu. Ngược lại, nếu kênh truyền được cảm nhận là bận, nút sẽ hoãn việc truyền.

- CSMA/CD (Carrier Sense Multiple Access with Collision Detection) là một phiên bản mở rộng của CSMA. Nó bổ sung khả năng phát hiện va chạm (collision detection). Khi các truyền thông va chạm được phát hiện trong thời gian ngắn, các truyền thông đang va chạm sẽ bị hủy bỏ, giảm thiểu lãng phí trên kênh truyền. Việc phát hiện va chạm dễ dàng hơn trong mạng có dây, nhưng khá khó trong mạng không dây.

- Tương tự với con người, CSMA tương tự như việc không gián đoạn người khác. Người ta sẽ lắng nghe xem người khác đang nói hay không trước khi bắt đầu nói. CSMA/CD tương tự như người có kiến thức lịch sự, biết phát hiện sự trùng lặp trong cuộc trò chuyện và tự gián đoạn để tránh lãng phí thời gian.

- Collisions: 
    - Va chạm vẫn có thể xảy ra khi sử dụng carrier sensing: 
        - Độ trễ truyền dẫn làm cho hai nút có thể không nghe thấy nhau khi một trong hai bắt đầu truyền. 
    - Khi xảy ra va chạm, toàn bộ thời gian truyền gói tin sẽ bị lãng phí. 
        - Khoảng cách và độ trễ truyền dẫn đóng vai trò trong việc xác định xác suất xảy ra va chạm.
    - ![](https://hackmd.io/_uploads/r1clBvaI3.png)

- CSMA/CD: 
    - CSMA/CS giảm lượng thời gian bị lãng phí trong các va chạm bằng cách ngừng truyền khi phát hiện xảy ra va chạm.
    - ![](https://hackmd.io/_uploads/H1lArrw6U3.png)
- Thuật toán CSMA/CD cho Ethernet
    1. NIC nhận datagram từ lớp mạng và tạo frame.
    2. Nếu NIC cảm nhận được kênh:
       - Nếu kênh đang trống: bắt đầu truyền frame.
       - Nếu kênh đang bận: chờ cho đến khi kênh trở thành trống, sau đó truyền.
    3. Nếu NIC truyền toàn bộ frame mà không xảy ra va chạm, NIC hoàn thành quá trình truyền frame!
    4. Nếu NIC phát hiện một truyền thông khác trong quá trình gửi: hủy bỏ truyền và gửi tín hiệu jam.
    5. Sau khi hủy bỏ, NIC thực hiện quá trình đợi ngẫu nhiên (nhị phân) quay lui:
       - Sau m lần va chạm, NIC chọn K ngẫu nhiên từ tập {0, 1, 2, ..., 2m-1}. NIC đợi K·512 bit time và quay lại Bước 2.
       - Càng có nhiều va chạm, thời gian đợi ngẫu nhiên càng lâu.
- CSMA/CD efficiency:
    - T_prop: Đây là độ trễ lan truyền tối đa giữa hai nút trong mạng LAN.
    - t_trans: Đây là thời gian cần thiết để truyền một khung có kích thước lớn nhất trong mạng.
    - ![](https://hackmd.io/_uploads/H1rP8vTI3.png)
    - Hiệu suất của giao thức Ethernet CSMA/CD tiến tới 1 (tức là tiến tới tận dụng tối đa kênh truyền) trong các trường hợp sau:

        - Khi t_prop tiến tới 0: Điều này có nghĩa là độ trễ lan truyền giữa các nút trong mạng LAN rất nhỏ. Khi không có độ trễ đáng kể, khả năng xảy ra va chạm giảm, dẫn đến hiệu suất tốt hơn.

        - Khi t_trans tiến tới vô cùng: Điều này có nghĩa là thời gian truyền một khung dữ liệu lớn nhất trong mạng rất lớn. Khi thời gian truyền một khung dữ liệu tăng lên, khả năng xảy ra va chạm giảm, dẫn đến hiệu suất tốt hơn.

    - Ethernet CSMA/CD cung cấp hiệu suất tốt hơn so với giao thức ALOHA và có các ưu điểm như đơn giản, rẻ tiền và phân tán. Điều này giúp nó trở thành một lựa chọn hợp lý cho các mạng LAN.

#### e. “Taking turns” MAC protocols:
- Giao thức MAC theo phương pháp chia sẻ kênh:
    - chia sẻ kênh một cách hiệu quả và công bằng ở tải cao
    - không hiệu quả ở tải thấp: độ trễ khi truy cập kênh, băng thông chỉ được phân chia 1/N ngay cả khi chỉ có 1 nút hoạt động!
- Giao thức MAC ngẫu nhiên:
    - hiệu quả ở tải thấp: một nút đơn có thể tận dụng toàn bộ kênh
    - tải cao: gánh nặng va chạm
- Giao thức "taking turns":
    - tìm kiếm sự kết hợp tốt nhất giữa hai phương pháp trên!
- polling (điều phối):
    - nút chủ "mời" các nút khác truyền lần lượt
    - thường được sử dụng với các thiết bị "dumb"
- Vấn đề:
    - tải overhead khi điều phối (polling overhead)
    - độ trễ
    - điểm hỏng duy nhất (nút chủ) (single point of failure (master))
    - ![](https://hackmd.io/_uploads/S1OntwTLn.png)
- Token passing (truyền thông bằng mã thông báo):
    - Mã thông báo điều khiển được truyền từ một nút này sang nút kế tiếp theo theo thứ tự.
    - Tin nhắn mã thông báo
    - Vấn đề:
        - Tải overhead mã thông báo
        - Độ trễ
        - Điểm hỏng duy nhất (mã thông báo)
    - ![](https://hackmd.io/_uploads/ryb-5wT82.png)

#### f. Cable access network
- FDM, TDM and random access: 
    - ![](https://hackmd.io/_uploads/BkaR5DaI2.png)
    - Có nhiều kênh FDM (Frequency Division Multiplexing) xuống (phát sóng) song song: lên đến 1,6 Gbps/kênh. 
        - Một CMTS đơn lẻ truyền dữ liệu vào các kênh này. 
    - Có nhiều kênh lên (upstream) (lên đến 1 Gbps/kênh). 
        - Hệ thống hỗ trợ nhiều phương pháp truy cập: tất cả người dùng cạnh tranh (truy cập ngẫu nhiên) cho các khoảng thời gian truyền lên của một số kênh cụ thể; những kênh khác được gán bằng phương pháp TDM (Time Division Multiplexing).

![](https://hackmd.io/_uploads/rkpKivTUn.png)
- DOCSIS (Data Over Cable Service Interface Specification) là một tiêu chuẩn dành cho giao diện dịch vụ cáp truyền dữ liệu. 
    - Tiêu chuẩn này sử dụng phương pháp FDM (Frequency Division Multiplexing) để chia kênh tần số cho truyền dữ liệu lên và xuống.
    - Trong phần truyền dữ liệu lên, tiêu chuẩn sử dụng phương pháp TDM (Time Division Multiplexing) trong đó một số khe thời gian được gán cho các người dùng cụ thể, trong khi một số khe thời gian khác dùng cho phần tranh chấp.
        - Khung MAP (Map Allocation) trong phần truyền dữ liệu xuống được sử dụng để gán các khe thời gian truyền dữ liệu lên cho từng người dùng. 
        - Yêu cầu cho các khe thời gian truyền dữ liệu lên (và dữ liệu tương ứng) được truyền thông qua phương pháp truy cập ngẫu nhiên (random access) sử dụng quy tắc binary backoff trong các khe thời gian được chọn.

#### g. Summary of MAC protocols
- channel partitioning, by time, frequency or code
    - Time Division, Frequency Division
- random access (dynamic), 
    - ALOHA, S-ALOHA, CSMA, CSMA/CD
    - carrier sensing: easy in some technologies (wire), hard in others (wireless)
    - CSMA/CD used in Ethernet
    - CSMA/CA used in 802.11
- taking turns
    - polling from central site, token passing
    - Bluetooth, FDDI,  token ring 

### 4. LANs: addressing, ARP
#### a. MAC addresses:
- Địa chỉ IP 32 bit
    - địa chỉ lớp network cho giao diện
    - được sử dụng để chuyển tiếp lớp 3 (lớp network)
    - ví dụ: 128.119.40.136
- Địa chỉ MAC (hoặc địa chỉ LAN, địa chỉ vật lý hoặc địa chỉ Ethernet):
    - Chức năng: được sử dụng "cục bộ" để chuyển khung dữ liệu từ một giao diện đến một giao diện khác kết nối vật lý (cùng mạng con, theo ý nghĩa địa chỉ IP).
    - Địa chỉ MAC có 48 bit (đối với hầu hết các mạng LAN) được ghi vào ROM của NIC (Network Interface Card) và đôi khi cũng có thể được thiết lập bằng phần mềm.
    - VD: 1A-2F-BB-76-09-AD --> ký hiệu thập lục phân (cơ số 16) (mỗi "chữ số" đại diện cho 4 bit)
- Mỗi giao diện trên mạng LAN
    - có một địa chỉ MAC duy nhất với 48 bit
    - có một địa chỉ IP duy nhất trong phạm vi cục bộ với 32 bit (như chúng ta đã thấy)
    - ![](https://hackmd.io/_uploads/HJWLydp8n.png)
- Phân bố địa chỉ MAC được quản lý bởi IEEE
- Nhà sản xuất mua một phần không gian địa chỉ MAC (đảm bảo tính duy nhất)
- Tương tự:
    - Địa chỉ MAC: tương tự như số An Sinh Xã Hội
    - Địa chỉ IP: tương tự như địa chỉ bưu điện
- Địa chỉ MAC: không gian địa chỉ phẳng, có thể di chuyển
    - Có thể di chuyển giao diện từ mạng LAN này sang mạng LAN khác
    - Nhớ lại, địa chỉ IP không thể di chuyển: phụ thuộc vào mạng con IP mà nút được kết nối.

#### b. ARP: address resolution protocol
- Bảng ARP: Mỗi nút IP (máy chủ, router) trên mạng LAN có bảng ARP
    - Ánh xạ địa chỉ IP/MAC cho một số nút trên mạng LAN:
          <Địa chỉ IP; Địa chỉ MAC; TTL>
    - TTL (Thời gian tồn tại): thời gian sau đó mà ánh xạ địa chỉ sẽ bị quên (thường là 20 phút)
- ![](https://hackmd.io/_uploads/Hy7Kmua8h.png)
- ![](https://hackmd.io/_uploads/HyzhmOpIn.png)
- ![](https://hackmd.io/_uploads/BJNpX_aI3.png)
- ![](https://hackmd.io/_uploads/SJB0QupUn.png)

#### c. Routing to another subnet: addressing
- Chúng ta sẽ đi qua quá trình gửi một datagram từ A đến B thông qua R, tập trung vào việc định địa chỉ ở hai lớp IP (datagram) và MAC (frame).

- Giả định:
    - A biết địa chỉ IP của B.
    - A biết địa chỉ IP của router đầu tiên, R (làm thế nào A biết địa chỉ này?).
    - A biết địa chỉ MAC của R (làm thế nào A biết địa chỉ này?).
- ![](https://hackmd.io/_uploads/rJG3Ddp83.png)

- Máy A tạo một datagram IP với địa chỉ nguồn IP là A và địa chỉ đích IP là B.
- Máy A tạo một frame link-layer chứa datagram IP từ A đến B.
- Địa chỉ MAC của R được sử dụng làm đích của frame.
- ![](https://hackmd.io/_uploads/BJdg_dTLh.png)

- Frame được gửi từ A tới R.
- Frame được nhận tại R, datagram được loại bỏ và truyền lên tầng IP.
- ![](https://hackmd.io/_uploads/B1wE_OaI3.png)

- R xác định giao diện ra, chuyển datagram có địa chỉ IP nguồn là A, địa chỉ đích là B cho tầng liên kết
- R tạo ra frame tầng liên kết chứa datagram IP từ A đến B. Địa chỉ đích của frame là địa chỉ MAC của B.
- ![](https://hackmd.io/_uploads/H1RqO_T83.png)

- transmits link-layer frame
- ![](https://hackmd.io/_uploads/HJHJKOa8h.png)

- B nhận được frame, trích xuất datagram IP với đích là B
- B chuyển datagram lên giao thức IP
- ![](https://hackmd.io/_uploads/HJ0mK_p8n.png)

### 5. LANs: Ethernet
- Công nghệ mạng LAN có dây "dominant":
    - Công nghệ LAN được sử dụng rộng rãi đầu tiên
    - Đơn giản, giá rẻ
    - Theo kịp cuộc đua tốc độ: từ 10 Mbps đến 400 Gbps
    - Chip đơn, nhiều tốc độ (ví dụ: Broadcom BCM5761)
- ![](https://hackmd.io/_uploads/H19tH2pLn.png)

#### a. Ethernet: physical topology
- Bus: phổ biến đến giữa những năm 90
    - Tất cả các nút trong cùng một miền va chạm (có thể xảy ra va chạm với nhau)
- Switched: thịnh hành ngày nay
    - Switch ở link-layer 2 hoạt động ở trung tâm
    - Mỗi "chi nhánh" chạy một giao thức Ethernet riêng biệt (các nút không va chạm với nhau)

#### b. Ethernet frame structure
- Giao diện gửi đóng gói datagram IP (hoặc gói giao thức lớp mạng khác) vào khung Ethernet
- ![](https://hackmd.io/_uploads/rJFoPnpI3.png)

- **preamble**:
    - Được sử dụng để đồng bộ tốc độ đồng hồ của người nhận và người gửi
    - 7 byte của 10101010 theo sau bởi một byte của 10101011
- **addresses**: 6 byte địa chỉ MAC nguồn và đích
    - Nếu bộ điều hợp nhận được khung có địa chỉ đích khớp hoặc địa chỉ phát sóng (ví dụ: gói ARP), nó sẽ chuyển dữ liệu trong khung đó cho giao thức lớp mạng.
    - Nếu không, bộ điều hợp sẽ loại bỏ khung.
- **type**: chỉ định giao thức lớp cao
    - thường là IP nhưng cũng có thể là các giao thức khác, ví dụ như Novell IPX, AppleTalk
    - được sử dụng để phân giải đa trục ở người nhận
- **CRC**: kiểm tra dư đồng trục tại người nhận
    - nếu phát hiện lỗi: khung bị loại bỏ
#### c. Ethernet: unreliable, connectionless
- **connectionless**: không có bước làm quen (handshaking) giữa NIC gửi và bộ điều hợp nhận
- **unreliable**: NIC nhận không gửi ACK hoặc NAK cho NIC gửi
    - Dữ liệu trong các khung bị loại bỏ chỉ được khôi phục nếu bộ điều hợp (NIC) gửi ban đầu sử dụng rdt ở lớp cao (ví dụ: TCP), nếu không, dữ liệu bị mất
- Giao thức MAC của Ethernet: unslotted **CSMA/CD với binary backoff**

#### d. 802.3 Ethernet standards: link & physical layers
- Có nhiều tiêu chuẩn Ethernet khác nhau
    - Giao thức MAC và định dạng khung chung
    - Tốc độ khác nhau: 2 Mbps, 10 Mbps, 100 Mbps, 1 Gbps, 10 Gbps, 40 Gbps
    - Phương tiện lớp vật lý khác nhau: sợi quang, cáp
- ![](https://hackmd.io/_uploads/rkzHs3pU2.png)



### 6. LANs: switches
- Switch là một thiết bị ở lớp liên kết: thực hiện vai trò hoạt động
    - lưu trữ và chuyển tiếp các khung Ethernet
    - kiểm tra địa chỉ MAC của khung đến, chọn lọc và chuyển tiếp khung tới một hoặc nhiều liên kết ra khi khung cần được - chuyển tiếp trên đoạn, sử dụng CSMA/CD để truy cập đoạn
- mờ nhạt: các máy chủ không nhận biết sự hiện diện của các switch
- cắm và chạy, tự học
    - các switch không cần được cấu hình

#### a. Switch: multiple simultaneous transmissions
- ![](https://hackmd.io/_uploads/r1b63nTLn.png)

- Các máy chủ có kết nối riêng, trực tiếp với switch
- Các switch đệm các gói tin
- Giao thức Ethernet được sử dụng trên mỗi liên kết đến, vì vậy:
    - không có va chạm; full duplex
    - mỗi liên kết là miền va chạm riêng biệt
- **switching**: A-đến-A' và B-đến-B' có thể truyền đồng thời, không gặp va chạm
    - nhưng A-đến-A' và C-đến-A' không thể xảy ra đồng thời
- ![](https://hackmd.io/_uploads/HJWRnnT8h.png)
- ![](https://hackmd.io/_uploads/HJGQ626Lh.png)

#### b. Switch: self-learning
- Switch học được máy chủ nào có thể đạt được thông qua các giao diện nào
    - khi nhận được frame, switch "học" vị trí của người gửi: đoạn mạng LAN đầu vào
    - ghi lại cặp người gửi/vị trí trong bảng switch
- ![](https://hackmd.io/_uploads/Bkdoy6aU2.png)

#### c. Switch: frame filtering/forwarding
- Khi switch nhận được frame:
    1. Ghi lại đường truyền đầu vào và địa chỉ MAC của máy gửi.
    2. Tra cứu bảng switch bằng địa chỉ MAC đích.
    3. Nếu có mục được tìm thấy cho đích:
       a. Nếu đích nằm trên đoạn từ đó frame được nhận
          - Thì loại bỏ frame.
       b. Ngược lại, chuyển tiếp frame qua giao diện được chỉ định trong mục đích.
       c. Nếu không có mục nào được tìm thấy cho đích:
          - Gửi frame qua tất cả các giao diện ngoại trừ giao diện nhận được frame (flood).
- ![](https://hackmd.io/_uploads/SkTA-p6Uh.png)
- Ví dụ: ![](https://hackmd.io/_uploads/ByHhz6a83.png)

#### d. Interconnecting switches

![](https://hackmd.io/_uploads/r1jSNaaIn.png)

- ![](https://hackmd.io/_uploads/SJM3VpaU3.png)

#### e. Small institutional network
- ![](https://hackmd.io/_uploads/B1bCVpTU2.png)

#### f. Switches vs. routers
- Cả router và switch đều sử dụng phương pháp "store-and-forward":
    - Router là thiết bị tầng mạng (network-layer), kiểm tra các tiêu đề tầng mạng (network-layer headers).
    - Switch là thiết bị tầng liên kết (link-layer), kiểm tra các tiêu đề tầng liên kết (link-layer headers).
- Cả router và switch đều có bảng chuyển tiếp (forwarding table):
    - Router tính toán bảng chuyển tiếp bằng cách sử dụng thuật toán định tuyến và địa chỉ IP.
    - Switch học bảng chuyển tiếp bằng cách sử dụng các phương pháp như flooding, learning và địa chỉ MAC.
- ![](https://hackmd.io/_uploads/r1IBSTpUn.png)


### 7. LANs: VLANs
- Miền phát sóng đơn (single broadcast domain):
    - Vấn đề về quy mô: Toàn bộ lưu lượng phát sóng ở tầng 2 (ARP, DHCP, địa chỉ MAC không xác định) phải đi qua toàn bộ mạng LAN.
    - Vấn đề về hiệu suất, bảo mật, và riêng tư.
- Vấn đề quản lý:
    - Người dùng CS chuyển văn phòng đến EE - vật lý được kết nối với switch EE, nhưng muốn vẫn được kết nối logic với switch CS.
- 

#### a. Port-based VLANs
- Virtual Local Area Network (VLAN): Các switch hỗ trợ tính năng VLAN có thể được cấu hình để định nghĩa nhiều mạng khu vực cục bộ ảo trên cơ sở hạ tầng mạng khu vực cục bộ vật lý duy nhất.
- VLAN dựa trên cổng (port-based VLAN): Các cổng trên switch được nhóm lại (bởi phần mềm quản lý của switch)
    - ![](https://hackmd.io/_uploads/Syo7sppIh.png)
- để switch vật lý duy nhất có thể hoạt động như nhiều switch ảo khác nhau.
    - ![](https://hackmd.io/_uploads/BynEjaaL2.png)
#### b. VLANS spanning multiple switches
![](https://hackmd.io/_uploads/BySznTaIh.png)

- Trunk port: là cổng được sử dụng để chuyển tiếp các khung (frames) giữa các VLAN được xác định trên nhiều switch vật lý. 
    - Các khung được chuyển tiếp trong cùng một VLAN giữa các switch không thể là các khung 802.1 thông thường (phải chứa thông tin VLAN ID). 
    - Giao thức 802.1q được sử dụng để thêm/xóa các trường tiêu đề bổ sung cho các khung được chuyển tiếp giữa các cổng trunk.
- ![](https://hackmd.io/_uploads/B1TbnpaLh.png)


### 8. Link virtualization: MPLS
#### a. Multiprotocol label switching (MPLS)
- Mục tiêu là tăng tốc độ chuyển tiếp IP trong mạng các bộ định tuyến hỗ trợ MPLS bằng cách sử dụng nhãn độ dài cố định thay vì áp dụng phương pháp khớp tiền tố ngắn nhất truyền thống. 
    - Phương pháp này cho phép thực hiện các hoạt động tìm kiếm nhanh hơn bằng cách sử dụng một định danh có độ dài cố định. 
    - Nó mượn ý tưởng từ phương pháp Mạch ảo (Virtual Circuit) nhưng vẫn giữ nguyên địa chỉ IP trong các datagram IP.
- ![](https://hackmd.io/_uploads/SyvrTTpI3.png)

#### b. MPLS capable routers
- Bộ định tuyến hỗ trợ MPLS, còn được gọi là bộ định tuyến chuyển nhãn (label-switched router)
- chuyển tiếp các gói tin đến giao diện ra dựa trên giá trị nhãn (label) mà không kiểm tra địa chỉ IP. 
    - Bảng chuyển tiếp MPLS riêng biệt với bảng chuyển tiếp IP. 
- **Sự linh hoạt** (flexibility) của MPLS cho phép các quyết định chuyển tiếp MPLS có thể khác với quyết định chuyển tiếp IP. 
    - Nó sử dụng địa chỉ nguồn và đích để định tuyến các luồng đến cùng đích một cách khác nhau (kỹ thuật giao thông). 
    - Nó có khả năng chuyển hướng các luồng nhanh chóng nếu liên kết gặp sự cố: các đường dự phòng được tính toán trước.

#### c. MPLS versus IP paths
- ![](https://hackmd.io/_uploads/BkOV0Ta8h.png)
    - Định tuyến IP: đường dẫn đến đích được xác định bởi địa chỉ đích
- ![](https://hackmd.io/_uploads/HyzcCT6Un.png)
    - **MPLS routing**: Đường đi đến điểm đích có thể dựa trên địa chỉ nguồn và đích. 
        - Đây là một phiên bản của việc chuyển tiếp tổng quát (MPLS thực hiện từ 10 năm trước). 
        - Chức năng chuyển hướng nhanh (fast reroute): tính toán trước các tuyến dự phòng trong trường hợp xảy ra sự cố mất kết nối.

#### d. MPLS signaling
- Sửa đổi các giao thức truyền thông trạng thái liên kết OSPF và IS-IS để mang thông tin được sử dụng bởi việc định tuyến MPLS, 
    - ví dụ như băng thông liên kết, lượng băng thông liên kết "đã được đặt trước". 
- Nhập các bản ghi định tuyến MPLS sử dụng giao thức RSVP-TE để thiết lập việc chuyển tiếp MPLS tại các bộ định tuyến hạ lưu.
- ![](https://hackmd.io/_uploads/B102eAaIn.png)
- ![](https://hackmd.io/_uploads/Bk-AgCpL3.png)


### 9. Data center networking
#### a. Datacenter networks
- Các mạng có từ hàng chục đến hàng trăm nghìn máy chủ, thường được kết nối chặt chẽ, gần nhau:
    - Doanh nghiệp trực tuyến (ví dụ: Amazon)
    - Các máy chủ nội dung (ví dụ: YouTube, Akamai, Apple, Microsoft)
    - Các công cụ tìm kiếm, khai thác dữ liệu (ví dụ: Google)
- Những thách thức gặp phải bao gồm:
    - Sự tồn đọng của nhiều ứng dụng, mỗi ứng dụng phục vụ số lượng khách hàng đồ sộ
    - Đáng tin cậy
    - Quản lý/đảm bảo cân bằng tải, tránh tình trạng quá tải trong xử lý, mạng và dữ liệu
- ![](https://hackmd.io/_uploads/SyvzXRT83.png)

#### b. Datacenter networks: network elements
- ![](https://hackmd.io/_uploads/S19dmCT83.png)
- ![](https://hackmd.io/_uploads/S1SYQApU3.png)
#### c. Datacenter networks: multipath
- Sự kết nối mạnh mẽ giữa các switch và rack:
    - Tăng khả năng thông lượng giữa các rack (có nhiều đường đi định tuyến khả dụng)
    - Tăng độ tin cậy thông qua tính dự phòng
- ![](https://hackmd.io/_uploads/ryXf4RT8h.png)

#### d. Datacenter networks: application-layer routing
- ![](https://hackmd.io/_uploads/S1AMNAaLh.png)
- Bộ cân bằng tải (Load Balancer): định tuyến tầng ứng dụng
    - Nhận yêu cầu từ khách hàng bên ngoài
    - Chỉ đạo công việc trong trung tâm dữ liệu
    - Trả kết quả cho khách hàng bên ngoài (ẩn thông tin bên trong trung tâm dữ liệu khỏi khách hàng)

#### e. Datacenter networks: protocol innovations
- Link layer:
    - RoCE (Remote DMA over Converged Ethernet): công nghệ RDMA (Remote Direct Memory Access) qua Ethernet hội tụ.
- Transport layer:
    - ECN (Explicit Congestion Notification): được sử dụng trong kiểm soát tắc nghẽn tầng vận chuyển (DCTCP, DCQCN).
    - Thử nghiệm với kiểm soát tắc nghẽn hop-by-hop (backpressure).
- Routing, quản lý:
    - SDN (Software-Defined Networking) được sử dụng rộng rãi trong các trung tâm dữ liệu của tổ chức.
    - Đặt các dịch vụ liên quan, dữ liệu gần nhau càng gần càng tốt (ví dụ: trong cùng một rack hoặc rack gần) để giảm thiểu việc truyền thông giữa các tầng 2 và tầng 1.

### 10. A day in the life of a web request
- Hành trình của chúng ta xuống cấu trúc giao thức đã hoàn tất!
- Ứng dụng, vận chuyển, mạng, liên kết
- Tổng hợp tất cả lại: tổng quan!
    - Mục tiêu: nhận ra, xem xét, hiểu các giao thức (ở tất cả các tầng) tham gia trong kịch bản dường như đơn giản: yêu cầu trang web www.
    - Kịch bản: sinh viên kết nối máy tính xách tay vào mạng của trường, yêu cầu/nhận www.google.com.
1. ![](https://hackmd.io/_uploads/SJCi5Ra82.png)
2. ![](https://hackmd.io/_uploads/SJO3qC6U2.png)
3. ![](https://hackmd.io/_uploads/Hyq1oCTUn.png)
4. ![](https://hackmd.io/_uploads/BydkiCpI2.png)
5. ![](https://hackmd.io/_uploads/rkc4i0aLn.png)
6. ![](https://hackmd.io/_uploads/Bk0NiC6I3.png)
7. ![](https://hackmd.io/_uploads/ry-HoCT8h.png)

