Ứng dụng mạng (network applications) là các chương trình máy tính tham gia vào mạng máy tính. Chúng "trò chuyện" với nhau bằng cách "cắm" vào mạng.
Ví dụ: khi bạn truy cập google.com, trình duyệt đóng vai trò là ứng dụng mạng, tận dụng Internet để giao tiếp với ứng dụng mạng chạy trên máy chủ của Google.
Thường thì cơ chế giao tiếp này bị ẩn đi (abstracted) khỏi nhà phát triển ứng dụng. Bề ngoài, nó trông giống như giao tiếp giữa các tiến trình (Inter-Process Communication) trên cùng một máy. Nhưng giao tiếp qua mạng có thách thức hoàn toàn khác.
Ví dụ: truyền tín hiệu mất rất nhiều thời gian theo tiêu chuẩn máy tính. Ánh sáng mất 0.1337 giây (2 × 3.14 × 6400 / 300000) để đi quanh Trái Đất. Giả sử CPU chạy 1GHz (109 phép tính/giây), giao tiếp giữa các tiến trình trên cùng máy chỉ mất ~10-7 - 10-8 giây. Nghĩa là giao tiếp với máy tính bên kia Trái Đất chậm hơn khoảng 1 triệu lần!
Bài viết này giải thích cách các ứng dụng mạng giao tiếp qua Internet. Để xem tổng quan cấp cao về Internet, xem bài viết này.
Giới Thiệu Về Mạng Máy Tính
Một độ phức tạp khác là sự đa dạng của các hệ thống cuối (điện thoại, laptop, Windows, Mac...). Phức tạp này được quản lý bằng cách trừu tượng hóa sự khác biệt và đưa ra một bộ quy tắc thống nhất gọi là Giao thức (Protocols).
Giao thức là các khối xây dựng của giao tiếp giữa ứng dụng mạng. Các giao thức phổ biến: HTTP, TCP, IP, SMTP. Giống như ngôn ngữ con người (tiếng Anh) giúp mọi người giao tiếp, giao thức lấp đầy khoảng trống trong giao tiếp mạng.
Giao tiếp mạng thách thức do quy mô và sự không chắc chắn. Ví dụ: đường truyền bị nghẹt dẫn đến gói tin bị loại bỏ. Chiến lược giải quyết: chia vấn đề lớn thành các bài toán con, giải quyết từng cái, rồi kết hợp. Protocol Stack (Chồng giao thức) sử dụng tư duy này.
Hãy tưởng tượng bạn xây web bán pizza. Khi người dùng tương tác, frontend cần giao tiếp với backend server. Không tuyệt vời nếu bạn chỉ tập trung xây web mà không lo cách dữ liệu đi từ frontend đến backend qua Internet?
Chồng giao thức lo phần giao tiếp mạng cho chúng ta. Ứng dụng (frontend) dùng Lớp Ứng dụng (Application Layer) để nói chuyện với ứng dụng khác (backend). Lớp ứng dụng dùng "dịch vụ" của Lớp Vận chuyển (Transport Layer) để truyền tin. Lớp vận chuyển lại dùng dịch vụ của Lớp Mạng (Network Layer). Cứ thế, lớp trên dùng dịch vụ lớp dưới để giao tiếp. Lớp Vật lý (Physical Layer) là các dây dẫn truyền tín hiệu điện.
Tóm lại: chồng giao thức chứa nhiều lớp, mỗi lớp giải quyết một phần của bài toán lớn. Giao thức mô tả giải pháp cho bài toán con.
Giao thức quy định:
- Loại tin nhắn (request, response...)
- Cú pháp các loại tin nhắn (các trường trong tin nhắn)
- Ngữ nghĩa của các trường (ý nghĩa thông tin)
- Quy tắc khi nào và như thế nào tin nhắn được gửi/phản hồi
Hãy đi sâu vào từng lớp, bắt đầu từ lớp trên cùng.
Lớp Ứng Dụng (Application Layer)
Ứng dụng kinh doanh dùng lớp này để giao tiếp qua mạng. Ví dụ: đặt hàng trên web pizza dùng lớp ứng dụng. HTTP là một lựa chọn để gửi thông tin lên backend.
Giao thức lớp ứng dụng định nghĩa cách các ứng dụng trên các hệ thống cuối khác nhau truyền tin nhắn cho nhau. Ngoài quy tắc giao tiếp, ứng dụng còn cần cách tìm nhau, tức là định địa chỉ (addressing). Địa chỉ ứng dụng gồm:
- Địa chỉ IP: nhãn số gán cho hệ thống cuối.
- Số cổng (Port Number): định danh tiến trình nhận trên máy đích. Cần thiết vì một máy có thể chạy nhiều ứng dụng mạng (ví dụ: 2 tab trình duyệt = 2 tiến trình).
Địa chỉ ứng dụng xác định danh tính trên mạng, giao thức định nghĩa quy tắc giao tiếp. Cùng nhau tạo thành Địa chỉ Socket (protocol type, IP, port).
Socket là giao diện giữa lớp ứng dụng và lớp vận chuyển. Nó là điểm nhập vào mạng: ứng dụng gửi/nhận tin nhắn qua socket của mình.
Tóm tắt: Ứng dụng nói chuyện qua giao thức lớp ứng dụng. Lớp ứng dụng nhờ lớp vận chuyển truyền dữ liệu giữa các hệ thống cuối. Cặp (IP, port) xác định ứng dụng. Thông tin chảy từ ứng dụng vào mạng qua Socket.
Ví dụ HTTP: Giao tiếp giữa trình duyệt của tôi và server ilovecookies.com. Khi nhập địa chỉ, trình duyệt gửi HTTP request.
Điểm chú ý trong request:
- Loại request:
GET - Host:
ilovecookies.com(tên miền dễ đọc thay cho IP) - Máy nguồn chấp nhận các định dạng phản hồi, ngôn ngữ...
Cấu trúc này là một phần của HTTP quy định quy tắc giao tiếp. Server nhận request và phản hồi response.
Response chứa dữ liệu riêng của giao thức (status code 200, content-type...) và dữ liệu HTML (đã cắt bớt). Cặp request-response này tạo nên giao tiếp mạng thành công, hiển thị trang ilovecookies.com trên màn hình.
Lớp Vận Chuyển (Transport Layer)
Lớp này cung cấp giao tiếp logic giữa ứng dụng trên các host khác nhau: từ góc độ ứng dụng, như thể 2 host kết nối trực tiếp. Lưu ý: giao tiếp logic, không phải vật lý (không có dây nối trực tiếp).
Lớp vận chuyển chia tin nhắn ứng dụng thành các mảnh nhỏ (chunks), gói mỗi mảnh vào tin nhắn vận chuyển có header, chuyển cho lớp mạng.
Lý do chia nhỏ: tận dụng mạng hiệu quả. Internet rộng lớn, nhiều đường song song truyền dữ liệu giữa 2 host.
Vấn đề tự nhiên: thứ tự gói tin. Các mảnh cần ghép lại đúng thứ tự ở máy nhận. Lớp vận chuyển phía nhận chịu trách nhiệm ghép lại đúng thứ tự.
Lớp vận chuyển cũng cần dữ liệu bổ sung: số thứ tự (sequence numbers) để ghép lại, số cổng (port) để định tuyến đến đúng ứng dụng.
Internet cung cấp 2 giao thức lớp vận chuyển:
- UDP (User Datagram Protocol)
- TCP (Transmission Control Protocol)
Hai giao thức khác nhau về dịch vụ cung cấp cho lớp ứng dụng:
| TCP | UDP |
|---|---|
| Truyền dữ liệu tin cậy (Reliable) | Truyền dữ liệu không tin cậy (Unreliable) |
| Khôi phục gói mất/hỏng bằng truyền lại | Không có cơ chế khôi phục gói mất/hỏng |
| Độ trễ cao hơn, đổi lấy độ tin cậy | Độ trễ thấp hơn, chấp nhận mất dữ liệu |
Yêu cầu dịch vụ của ứng dụng quyết định chọn giao thức. Ví dụ: hệ thống thanh toán cần TCP (tin cậy), dịch vụ streaming video có thể chấp nhận mất dữ liệu để nhanh hơn (UDP).
Tóm tắt: Lớp vận chuyển chia tin nhắn ứng dụng thành mảnh, gói header, truyền. Phía nhận ghép lại đúng thứ tự, dùng số cổng chuyển cho đúng ứng dụng.
Tiếp ví dụ HTTP:
Quan sát: HTTP GET request xuất hiện dưới dạng TCP payload. Gói tin đầu tiên có sequence number = 1. Chứa port nguồn (65012 - tab trình duyệt) và port đích (80 - server).
Hai gói đầu trong 57 gói TCP của response. Phần dưới bên phải thấy thông tin HTTP và HTML. Port nguồn/đích bị đảo ngược so với request.
Lớp Mạng (Network Layer)
Khác với lớp vận chuyển, lớp mạng cung cấp giao tiếp logic giữa 2 host cuối (end hosts). Sự khác biệt tinh tế: lớp vận chuyển nối ứng dụng, lớp mạng nối host.
Lớp mạng lấy gói vận chuyển, gói vào gói mạng (network packet) thêm thông tin riêng. Lớp mạng cung cấp dịch vụ nỗ lực tối đa (best-effort): không đảm bảo thời gian, thứ tự, hay giao cuối cùng. Đây chính là động lực cho TCP: vì lớp mạng không tin cậy, TCP bổ sung logic để đảm bảo tin cậy.
Lớp mạng chịu trách nhiệm chuyển gói từ host gửi đến host nhận. Giao thức lớp mạng cũng chạy trên Router - thiết bị chuyển mạch gói tin, phần của lõi mạng.
Giả sử host 1 gửi gói đến host 2. Host 1 chuyển gói cho router. Router đọc thông tin gói mạng, xác định chuyển tiếp qua link 2 (nơi host 2 kết nối).
Mỗi router có bảng chuyển tiếp (forwarding table) trong RAM (xây dựng động) để xác định link chuyển tiếp. Ví dụ bảng định tuyến:
| Địa chỉ | Link |
|---|---|
| 192.168.1.1 | Link 1 |
| 168.134.1.1 | Link 2 |
| 172.158.1.2 | Link 3 |
Router dùng địa chỉ đích trong gói mạng để tra bảng (bitwise XOR). Xem bảng định tuyến trên máy bạn:
Mac: netstat -nrf inet
Linux: netstat -nr
Windows: Get-NetRoute -AddressFamily IPv4
Chú ý entry đặc biệt: default hoặc 0.0.0.0 gọi là default gateway. Gói tin được gửi đến default gateway nếu không entry nào khớp địa chỉ đích.
Internet chứa hàng loạt thiết bị như vậy chuyển gói tin, tạo giao tiếp logic giữa host cuối.
Vì mọi người chia sẻ router và dây truyền, router có hàng đợi (queues) chứa gói tin đến khi xử lý/xuất. Nếu hàng đợi đầy (lưu lượng tăng), sự không tin cậy xuất hiện.
Giao thức mạng Internet gọi là Internet Protocol (IP). Thành phần chính lớp mạng Internet:
- IP: quy định địa chỉ (IPv4, IPv6), định dạng gói, quy ước xử lý gói.
- Giao thức định tuyến: xác định đường gói tin đi từ nguồn đến đích.
- ICMP: cơ chế báo lỗi gói tin và phản hồi yêu cầu thông tin lớp mạng.
Tóm tắt: Lớp mạng cung cấp giao tiếp logic giữa 2 host cuối. Giao thức chạy trên host cuối và thiết bị lõi (router). Router chuyển gói mạng, tạo nên giao tiếp logic.
Tiếp ví dụ ilovecookies.com:
Gói mạng gói gọn gói TCP, gói TCP gói gọn gói ứng dụng. Màu xanh: nội dung gói mạng, vàng: gói vận chuyển, còn lại (bắt đầu bằng GET): gói ứng dụng.
Các trường gói mạng liên quan đến chức năng: địa chỉ nguồn = IP máy tôi, địa chỉ đích = IP server ilovecookies.com.
Đóng gói (encapsulation) và thông tin từng lớp liên quan đến ý tưởng giao tiếp logic: gói mạng chứa IP 2 máy cuối, gói vận chuyển chỉ chứa port. Lớp vận chuyển nhờ lớp mạng chuyển dữ liệu giữa máy cuối. Khi dữ liệu đến máy nhận, lớp vận chuyển tiếp quản, dùng port trong gói vận chuyển chuyển cho đúng ứng dụng.
Lớp Liên Kết (Link Layer)
Phạm vi hẹp hơn các lớp trên: cung cấp dịch vụ chuyển gói qua các link riêng lẻ trong đường end-to-end.
Ví dụ: link là các đường chấm đỏ (xem hình minh họa). Lớp liên kết cho phép di chuyển gói lớp mạng từ nút này sang nút kia qua một link đơn lẻ.
Giao thức lớp liên kết định nghĩa:
- Định dạng gói trao đổi giữa 2 nút ở 2 đầu link.
- Hành động trên gói tin của các nút đó.
Bộ điều hợp mạng (Network adapter) triển khai giao thức lớp liên kết. Là phần cứng vật lý cho phép máy tính kết nối mạng và trao đổi thông tin.
Xem danh sách bộ điều hợp trên máy bạn:
Mac: networksetup -listallhardwareports
Linux: lshw -class network -short
Windows: Get-NetAdapter -Name *
Trong kết quả, mỗi thiết bị có địa chỉ lớp liên kết gọi là địa chỉ MAC. Địa chỉ MAC lưu trong ROM, gán khi sản xuất, coi là vĩnh viễn. Mỗi nút (host và router) trên đường đi có địa chỉ MAC.
Trước đó nói về IP address - cũng là định danh thiết bị. Tương tự có nhiều định danh: địa chỉ nhà và số CMND/CCCD. Có vài lý do nút cần cả MAC và địa chỉ lớp mạng:
- Giao thức các lớp phải có thể thay thế nhau. Ví dụ: IPX không dùng địa chỉ lớp mạng.
- IP address lưu trong RAM, cấu hình lại mỗi lần adapter di chuyển/khởi động → tạm thời.
- Nếu bỏ MAC, adapter phải đẩy mọi gói tin lên chồng giao thức. Lớp mạng kiểm tra khớp IP. Nhưng làm nhiều lần như vậy kém hiệu quả: ngắt (interrupt) chuyển gói tin tốn kém.
Tóm tắt: Để các lớp là khối xây dựng độc lập trong kiến trúc mạng, nhiều lớp cần sơ đồ định địa chỉ riêng.
Đến nay đã gặp 3 loại địa chỉ:
- Tên máy (Hostnames) cho lớp ứng dụng (
ilovecookies.com). Được chuyển thành IP qua DNS. - Địa chỉ IP cho lớp mạng.
- Địa chỉ MAC cho lớp liên kết.
Giống như DNS giải quyết IP từ hostname, ARP (Address Resolution Protocol) dùng để xác định MAC đích từ IP.
ARP xây bảng trong RAM ánh xạ IP → MAC. Giao thức có spec (gói tin đặc biệt) để tự động tạo bảng.
Lớp mạng chuyển gói tin và MAC đích (từ bảng ARP) cho lớp liên kết. Lớp liên kết gói gọn vào gói liên kết, chuyển dọc link đến nút đích.
Giả sử host 222.222.222.220 gửi gói đến host 222.222.222.222. Lớp mạng dùng ARP giải quyết MAC đích = 49-BD-D2-C7-56-A2, chuyển gói + MAC cho lớp liên kết. Lớp liên kết chuyển gói qua link giữa 2 host.
Trường hợp phức tạp hơn: host gửi gói đến host trên mạng khác (ví dụ: từ mạng nhà tôi đến ilovecookies.com).
2 điểm chú ý: (1) Router có 2 IP vì tham gia 2 mạng khác nhau. (2) 2 mạng riêng biệt gọi là subnet - nhóm logic thiết bị mạng để quản lý dễ dàng.
Giả sử host 222.222.222.222 gửi gói đến host 111.111.111.111 (qua mạng khác). Sẽ không tìm thấy đích trong subnet của mình, chuyển gói đến default gateway (router). Lớp mạng dùng ARP giải quyết MAC = 88-B2-2F-54-1A-0F. Router dùng bảng định tuyến chuyển gói đến link nối subnet kia. Lại dùng ARP giải quyết MAC đích, gói đi dọc link.
Tóm tắt: Adapter (phần cứng) triển khai giao thức lớp liên kết. Giao thức định nghĩa sơ đồ định địa chỉ MAC, ARP ánh xạ IP → MAC. Lớp liên kết gói gọn gói lớp mạng, chuyển qua link.
Giao thức lớp liên kết phổ biến: Ethernet. Tiếp ví dụ ilovecookies.com xem Ethernet hoạt động:
Gói Ethernet chứa MAC nguồn/đích (đã ẩn), gói gọn gói IP.
Tóm Tắt
Tóm gọn bài viết qua hình dưới:
Ứng dụng trên 2 hệ thống khác nhau (host) giao tiếp dùng giao thức. Giao thức = quy tắc điều phối giao tiếp. Chồng giao thức giải quyết nhiều bài toán con để giải quyết bài toán giao tiếp mạng. Mỗi lớp tập trung giải quyết bài toán con nhờ dịch vụ lớp dưới trong hệ thống trừu tượng.
Giao thức lớp ứng dụng ở mức trừu tượng cao nhất. Ứng dụng gửi tin nhắn tuân theo quy tắc giao thức ứng dụng (HTTP). DNS ánh xạ hostname → IP. Tin nhắn đẩy qua socket interface truyền qua mạng dùng lớp vận chuyển.
Lớp vận chuyển phơi bày giao tiếp logic giữa 2 ứng dụng trên host khác nhau. Chia tin nhắn ứng dụng thành mảnh nhỏ, gói header. Tin nhắn ứng dụng tái tạo từ các mảnh, đẩy qua socket dùng port. Các gói tin gửi qua mạng nhờ lớp mạng.
Lớp mạng tiếp quản, cung cấp giao tiếp logic giữa 2 host. Gói gọn gói vận chuyển vào gói mạng. Internet chứa thiết bị chuyển mạch gói, dùng bảng định tuyến trong RAM (xây động bằng giao thức định tuyến). Lớp mạng nhờ lớp liên kết chuyển gói.
Lớp liên kết chuyển gói qua các link đơn lẻ. Thiết bị phần cứng (adapter) triển khai giao thức lớp liên kết, có địa chỉ vĩnh viễn = MAC. MAC là định danh lớp này. ARP ánh xạ IP → MAC.
Cuối cùng, lớp liên kết chuyển gói cho lớp vật lý - các dây dẫn thông tin truyền qua.
Cảm ơn bạn đã đọc! Hy vọng bạn học được điều mới về mạng máy tính hôm nay.
Nguồn Tham Khảo
- Computer Networking: A Top-Down Approach, 7th Edition - James F. Kurose, Keith Ross - Pearson
- Wireshark · Go Deep.