Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Mạng - Đề 02 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong mô hình TCP/IP, tầng nào chịu trách nhiệm chính cho việc định tuyến gói tin giữa các mạng khác nhau?
- A. Tầng Vận chuyển (Transport Layer)
- B. Tầng Mạng (Internet Layer)
- C. Tầng Liên kết Dữ liệu (Data Link Layer)
- D. Tầng Ứng dụng (Application Layer)
Câu 2: Giao thức TCP cung cấp cơ chế kiểm soát lỗi và kiểm soát luồng để đảm bảo truyền dữ liệu tin cậy. Cơ chế kiểm soát lỗi chính của TCP là gì?
- A. Sử dụng checksum ở tầng liên kết dữ liệu
- B. Mã hóa dữ liệu trước khi truyền
- C. Sử dụng số thứ tự và cơ chế ACK (Acknowledgement)
- D. Không có cơ chế kiểm soát lỗi, TCP là giao thức không tin cậy
Câu 3: Xét tình huống một ứng dụng client gửi liên tục các yêu cầu nhỏ đến server. Nếu sử dụng TCP, có thể xảy ra hiện tượng "Nagle"s algorithm" làm giảm hiệu suất. Giải pháp nào sau đây giúp giảm thiểu ảnh hưởng của thuật toán Nagle?
- A. Chuyển sang sử dụng giao thức UDP
- B. Tăng kích thước bộ đệm gửi (send buffer) ở client
- C. Giảm kích thước cửa sổ trượt (sliding window) của TCP
- D. Vô hiệu hóa thuật toán Nagle bằng tùy chọn socket TCP_NODELAY
Câu 4: Trong lập trình socket, hàm `bind()` được sử dụng để làm gì?
- A. Thiết lập kết nối đến một server từ client
- B. Gán địa chỉ IP và số cổng cho socket server
- C. Đóng kết nối socket
- D. Gửi dữ liệu qua socket
Câu 5: Sự khác biệt chính giữa giao thức UDP và TCP trong ngữ cảnh lập trình mạng là gì?
- A. TCP là giao thức hướng kết nối và tin cậy, UDP là giao thức không kết nối và không tin cậy.
- B. UDP là giao thức hướng kết nối và tin cậy, TCP là giao thức không kết nối và không tin cậy.
- C. Cả TCP và UDP đều là giao thức hướng kết nối và tin cậy.
- D. Cả TCP và UDP đều là giao thức không kết nối và không tin cậy.
Câu 6: Khi một client gửi yêu cầu HTTP đến server web, cổng đích mặc định mà client sẽ kết nối đến trên server là cổng nào?
Câu 7: Trong ngữ cảnh socket programming, "blocking socket" và "non-blocking socket" khác nhau như thế nào?
- A. Blocking socket nhanh hơn non-blocking socket.
- B. Blocking socket sẽ tạm dừng chương trình cho đến khi thao tác hoàn thành, non-blocking socket trả về ngay lập tức.
- C. Non-blocking socket chỉ dùng cho UDP, blocking socket chỉ dùng cho TCP.
- D. Blocking socket cho phép gửi và nhận dữ liệu đồng thời, non-blocking thì không.
Câu 8: Cho đoạn mã giả lập trình socket server (TCP):
```
create_socket()
bind_socket(port=8080)
listen_socket()
while True:
client_socket = accept_connection()
handle_client(client_socket)
close_client_socket(client_socket)
```
Mô hình server này là mô hình gì?
- A. Iterative Server (Tuần tự)
- B. Concurrent Server (Đồng thời)
- C. Non-blocking Server
- D. Event-driven Server
Câu 9: Để xây dựng một ứng dụng chat đa người dùng, giao thức nào sau đây phù hợp hơn để truyền tải tin nhắn theo thời gian thực?
- A. TCP
- B. UDP
- C. FTP
- D. SMTP
Câu 10: Địa chỉ IP "127.0.0.1" thường được gọi là gì và dùng để làm gì?
- A. Địa chỉ broadcast, gửi tin đến tất cả các máy trong mạng
- B. Địa chỉ multicast, gửi tin đến một nhóm máy
- C. Địa chỉ IP công cộng, dùng để kết nối internet
- D. Địa chỉ loopback (localhost), dùng để kiểm tra và phát triển ứng dụng mạng trên máy cục bộ
Câu 11: Phương thức giao tiếp mạng nào sau đây là "one-to-many", trong đó một nguồn gửi dữ liệu đến một nhóm các máy nhận xác định trước?
- A. Unicast
- B. Broadcast
- C. Multicast
- D. Anycast
Câu 12: Trong lập trình mạng, "serialization" (tuần tự hóa) dữ liệu dùng để làm gì?
- A. Chuyển đổi cấu trúc dữ liệu hoặc đối tượng thành một định dạng có thể truyền qua mạng hoặc lưu trữ.
- B. Mã hóa dữ liệu để bảo mật thông tin.
- C. Nén dữ liệu để giảm kích thước truyền tải.
- D. Kiểm tra tính toàn vẹn của dữ liệu khi truyền.
Câu 13: Để một server TCP có thể chấp nhận nhiều kết nối đồng thời từ client, mô hình lập trình nào thường được sử dụng?
- A. Mô hình tuần tự (Iterative)
- B. Mô hình đa luồng (Multi-threading) hoặc đa tiến trình (Multi-processing)
- C. Mô hình non-blocking I/O đơn luồng
- D. Mô hình broadcast
Câu 14: Giả sử bạn muốn xây dựng một ứng dụng truyền video trực tuyến, yêu cầu độ trễ thấp và chấp nhận mất mát gói tin ở mức độ nhất định. Giao thức nào phù hợp hơn?
- A. TCP
- B. UDP
- C. FTP
- D. HTTP
Câu 15: Trong lập trình socket, hàm `listen()` được sử dụng ở phía server để làm gì?
- A. Tạo mới một socket.
- B. Gửi dữ liệu đến client.
- C. Đặt socket server vào trạng thái lắng nghe kết nối đến.
- D. Đóng kết nối socket.
Câu 16: Điều gì xảy ra khi một client cố gắng kết nối đến một cổng trên server mà không có ứng dụng nào đang lắng nghe trên cổng đó?
- A. Kết nối được thiết lập nhưng không có dữ liệu được truyền.
- B. Client tự động chuyển sang kết nối đến cổng khác.
- C. Server tạo một tiến trình mới để xử lý kết nối.
- D. Kết nối bị từ chối (Connection Refused) từ server.
Câu 17: Trong lập trình mạng với TCP, thứ tự các bước cơ bản để thiết lập kết nối từ client đến server là gì?
- A. Client gửi SYN -> Server gửi SYN-ACK -> Client gửi ACK
- B. Server gửi SYN -> Client gửi SYN-ACK -> Server gửi ACK
- C. Client gửi ACK -> Server gửi SYN-ACK -> Client gửi SYN
- D. Server gửi ACK -> Client gửi SYN-ACK -> Server gửi SYN
Câu 18: Tại sao cần phải quan tâm đến "byte order" (thứ tự byte) khi lập trình mạng và truyền dữ liệu giữa các hệ thống khác nhau?
- A. Để tối ưu hóa tốc độ truyền dữ liệu.
- B. Vì các hệ thống khác nhau có thể sử dụng thứ tự byte khác nhau (ví dụ: big-endian và little-endian), dẫn đến việc hiểu sai dữ liệu.
- C. Để mã hóa dữ liệu trước khi truyền.
- D. Để kiểm soát luồng dữ liệu trên mạng.
Câu 19: Trong mô hình OSI, tầng nào tương đương với tầng Mạng (Internet Layer) trong mô hình TCP/IP?
- A. Tầng Giao vận (Transport Layer)
- B. Tầng Liên kết Dữ liệu (Data Link Layer)
- C. Tầng Mạng (Network Layer)
- D. Tầng Vật lý (Physical Layer)
Câu 20: Phương pháp nào sau đây thường được sử dụng để giải quyết vấn đề "C-10K problem" (khả năng xử lý hàng ngàn kết nối đồng thời) trong server?
- A. Sử dụng mô hình server tuần tự (iterative).
- B. Tăng số lượng luồng xử lý (threads) cho mỗi kết nối.
- C. Sử dụng giao thức TCP thay vì UDP.
- D. Sử dụng Non-blocking I/O và kiến trúc hướng sự kiện (event-driven).
Câu 21: Trong giao thức HTTP, mã trạng thái "404 Not Found" có nghĩa là gì?
- A. Yêu cầu thành công.
- B. Tài nguyên yêu cầu không tìm thấy trên server.
- C. Lỗi server nội bộ.
- D. Client không có quyền truy cập.
Câu 22: Để kiểm tra kết nối mạng và đo thời gian khứ hồi (round-trip time) đến một địa chỉ IP hoặc hostname, công cụ dòng lệnh nào thường được sử dụng?
- A. ping
- B. traceroute
- C. netstat
- D. ipconfig
Câu 23: Trong lập trình socket, hàm `accept()` trả về giá trị gì?
- A. Số byte đã nhận được.
- B. Mã lỗi kết nối.
- C. Một socket mới đại diện cho kết nối đã được chấp nhận từ client.
- D. Địa chỉ IP của client kết nối.
Câu 24: Khi thiết kế một giao thức ứng dụng mới chạy trên nền TCP, bạn cần xác định điều gì để phân tách các thông điệp (messages) trong luồng byte TCP?
- A. Sử dụng giao thức UDP thay vì TCP.
- B. Một cơ chế phân tách thông điệp, ví dụ: sử dụng ký tự đặc biệt (delimiter) hoặc tiền tố độ dài (length prefix).
- C. Giả định rằng mỗi lần gọi `send()` sẽ tương ứng với một thông điệp riêng biệt.
- D. Không cần phân tách, TCP tự động xử lý.
Câu 25: Trong lập trình mạng, "port scanning" (quét cổng) là kỹ thuật dùng để làm gì?
- A. Tăng tốc độ truyền dữ liệu mạng.
- B. Mã hóa dữ liệu truyền trên mạng.
- C. Xác định các cổng đang mở và dịch vụ đang chạy trên một hệ thống mạng.
- D. Ngăn chặn tấn công từ chối dịch vụ (DoS).
Câu 26: Để đảm bảo tính bảo mật khi truyền dữ liệu nhạy cảm qua mạng, giao thức nào thường được sử dụng cho web browsing (truy cập web) thay vì HTTP?
- A. FTP
- B. SMTP
- C. Telnet
- D. HTTPS
Câu 27: Trong lập trình socket, hàm `shutdown()` được sử dụng để làm gì?
- A. Đóng hoàn toàn socket và giải phóng tài nguyên.
- B. Đóng một phần kết nối socket, cho phép ngừng gửi hoặc nhận dữ liệu, hoặc cả hai.
- C. Khởi tạo lại socket về trạng thái ban đầu.
- D. Kiểm tra trạng thái kết nối socket.
Câu 28: Cho tình huống client và server giao tiếp qua TCP socket. Nếu client đột ngột bị tắt (crash) mà không đóng socket đúng cách, server sẽ phát hiện ra điều này như thế nào?
- A. Server sẽ nhận được thông báo lỗi ngay lập tức.
- B. Server không bao giờ phát hiện được và kết nối vẫn mở.
- C. Server có thể phát hiện thông qua cơ chế keep-alive của TCP hoặc timeout ở tầng ứng dụng sau một khoảng thời gian.
- D. Server sẽ tự động đóng kết nối sau khi client khởi động lại.
Câu 29: Trong lập trình mạng, "network address translation" (NAT) được sử dụng để làm gì?
- A. Cho phép nhiều thiết bị trong mạng riêng (LAN) chia sẻ một địa chỉ IP công cộng duy nhất để truy cập internet.
- B. Tăng tốc độ truyền dữ liệu mạng.
- C. Mã hóa địa chỉ IP để bảo mật.
- D. Phân tích lưu lượng mạng để phát hiện xâm nhập.
Câu 30: Khi một ứng dụng client cần phân giải tên miền (ví dụ: www.example.com) thành địa chỉ IP, nó sẽ sử dụng dịch vụ nào?
- A. DHCP
- B. DNS
- C. ARP
- D. ICMP