Hiểu biết về mạng máy tính (networking) rất quan trọng đối với bất kỳ ai quản trị máy chủ. Nó không chỉ cần thiết để đưa các dịch vụ của bạn lên mạng và chạy trơn tru, mà còn cung cấp cho bạn cái nhìn sâu sắc để chẩn đoán các vấn đề.

Bài viết này sẽ cung cấp tổng quan về một số khái niệm mạng phổ biến. Chúng ta sẽ thảo luận về thuật ngữ, các giao thức thông dụng, cũng như vai trò và đặc điểm của các tầng khác nhau trong mạng máy tính.
Hướng dẫn này không phụ thuộc vào hệ điều hành cụ thể nào, nhưng sẽ rất hữu ích khi bạn triển khai các tính năng và dịch vụ tận dụng mạng trên máy chủ của mình.
Bảng thuật ngữ mạng
Đầu tiên, chúng ta sẽ định nghĩa một số thuật ngữ phổ biến mà bạn sẽ thấy trong suốt hướng dẫn này, và trong các hướng dẫn và tài liệu khác liên quan đến mạng.
Các thuật ngữ này sẽ được giải thích chi tiết hơn trong các phần sau:
- Connection (Kết nối): Trong mạng, kết nối là những mảnh thông tin liên quan được truyền qua mạng. Nhìn chung, một kết nối được thiết lập trước khi truyền dữ liệu (bằng cách tuân theo các quy trình được quy định trong một giao thức) và có thể bị hủy bỏ khi kết thúc quá trình truyền dữ liệu.
- Packet (Gói tin): Packet là đơn vị nhỏ nhất được truyền có chủ đích qua mạng. Khi giao tiếp qua mạng, các gói tin là những phong bì mang dữ liệu của bạn (chia thành nhiều phần nhỏ) từ điểm đầu đến điểm cuối.
Các packet có một header (đầu gói) chứa thông tin về chúng bao gồm nguồn và đích, dấu thời gian, số lần nhảy qua mạng (network hops), v.v. Phần chính của gói tin chứa dữ liệu thực tế đang được truyền tải. Nó đôi khi được gọi là phần thân (body) hoặc tải trọng (payload).
- Network Interface (Giao diện Mạng): Giao diện mạng có thể đề cập đến bất kỳ loại giao diện phần mềm nào với phần cứng mạng. Ví dụ, nếu bạn có hai card mạng trong máy tính của mình, bạn có thể điều khiển và cấu hình từng giao diện mạng liên quan đến chúng một cách riêng lẻ
Một giao diện mạng có thể được liên kết với một thiết bị vật lý, hoặc nó có thể là một đại diện của một giao diện ảo. Thiết bị “loopback” (vòng lặp), là một giao diện ảo có sẵn trong hầu hết các môi trường Linux để kết nối trở lại cùng một máy, là một ví dụ về điều này.
- LAN (Mạng cục bộ): LAN là viết tắt của “local area network”. Nó đề cập đến một mạng hoặc một phần của mạng mà không thể truy cập công khai từ Internet lớn hơn. Mạng gia đình hoặc văn phòng là một ví dụ về LAN.
- WAN (Mạng diện rộng): WAN là viết tắt của “wide area network”. Nó có nghĩa là một mạng rộng lớn hơn nhiều so với LAN. Mặc dù WAN là thuật ngữ phù hợp để mô tả các mạng lớn, phân tán nói chung, nhưng nó thường được hiểu là toàn bộ Internet.
Nếu một giao diện được cho là kết nối với WAN, người ta thường cho rằng nó có thể truy cập được qua Internet.
- Protocol (Giao thức): Giao thức là một tập hợp các quy tắc và tiêu chuẩn định nghĩa một ngôn ngữ mà các thiết bị có thể sử dụng để giao tiếp. Có rất nhiều giao thức được sử dụng rộng rãi trong mạng, và chúng thường được triển khai ở các tầng khác nhau.
Một số giao thức cấp thấp là TCP, UDP, IP, và ICMP. Một số ví dụ quen thuộc về các giao thức lớp ứng dụng, được xây dựng trên các giao thức cấp thấp này, là HTTP (để truy cập nội dung web), SSH, và TLS/SSL.
- Port (Cổng): Cổng là một địa chỉ trên một máy duy nhất có thể được gắn với một phần mềm cụ thể. Nó không phải là một giao diện hoặc vị trí vật lý, nhưng nó cho phép máy chủ của bạn có thể giao tiếp bằng nhiều hơn một ứng dụng.
- Firewall (Tường lửa): Tường lửa là một chương trình quyết định liệu lưu lượng truy cập đi vào hoặc đi ra từ máy chủ có nên được cho phép hay không. Tường lửa thường hoạt động bằng cách tạo các quy tắc về loại lưu lượng truy cập nào được chấp nhận trên cổng nào. Nói chung, tường lửa chặn các cổng không được sử dụng bởi một ứng dụng cụ thể trên máy chủ.
- NAT (Dịch địa chỉ mạng): NAT là viết tắt của “network address translation”. Đó là một cách để đóng gói lại và gửi các yêu cầu đến một máy chủ định tuyến đến các thiết bị hoặc máy chủ liên quan trên một LAN. Điều này thường được triển khai trong các LAN vật lý như một cách để định tuyến các yêu cầu thông qua một địa chỉ IP duy nhất đến các máy chủ backend cần thiết.
- VPN (Mạng riêng ảo): VPN là viết tắt của “virtual private network”. Đây là phương tiện để kết nối các LAN riêng biệt thông qua Internet, đồng thời duy trì quyền riêng tư. Điều này được sử dụng để kết nối các hệ thống từ xa như thể chúng đang ở trên một mạng cục bộ, thường vì lý do bảo mật.
Có nhiều thuật ngữ khác mà bạn sẽ gặp, và danh sách này không đầy đủ. Chúng ta sẽ giải thích các thuật ngữ khác khi cần. Hiện tại, bạn nên hiểu một số khái niệm cấp cao để chúng ta có thể thảo luận tốt hơn về các chủ đề sắp tới.
Các tầng mạng
Mặc dù mạng thường được thảo luận về mặt topology (cấu trúc hình học) theo chiều ngang, giữa các máy chủ, việc triển khai của nó lại được phân lớp theo chiều dọc bên trong bất kỳ máy tính hoặc mạng nào.
Điều này có nghĩa là có nhiều công nghệ và giao thức được xây dựng chồng lên nhau để việc giao tiếp có thể hoạt động. Mỗi tầng kế tiếp, cao hơn sẽ trừu tượng dữ liệu thô nhiều hơn một chút.
Nó cũng cho phép bạn tận dụng các tầng thấp hơn theo những cách mới mà không cần phải đầu tư thời gian và công sức để phát triển các giao thức và ứng dụng xử lý các loại lưu lượng đó.
Ngôn ngữ chúng ta sử dụng để nói về từng sơ đồ phân lớp thay đổi đáng kể tùy thuộc vào mô hình bạn sử dụng. Bất kể mô hình nào được dùng để thảo luận về các tầng, đường đi của dữ liệu là như nhau.
Khi dữ liệu được gửi ra khỏi một máy, nó bắt đầu từ đỉnh của stack và lọc xuống dưới. Ở mức thấp nhất, việc truyền tải thực tế đến một máy khác diễn ra. Tại thời điểm này, dữ liệu di chuyển ngược lên qua các tầng của máy tính kia.
Mỗi tầng có khả năng thêm “lớp bọc” (wrapper) riêng của mình xung quanh dữ liệu mà nó nhận được từ tầng liền kề, điều này sẽ giúp các tầng tiếp theo quyết định làm gì với dữ liệu khi nó được chuyển giao.
Mô hình TCP/IP
Mô hình TCP/IP, thường được biết đến với tên gọi bộ giao thức Internet (Internet protocol suite), là một mô hình phân lớp được áp dụng rộng rãi. Mô hình này định nghĩa bốn lớp riêng biệt:
- Application (Lớp ứng dụng): Trong mô hình này, lớp ứng dụng chịu trách nhiệm tạo và truyền dữ liệu người dùng giữa các ứng dụng. Các ứng dụng có thể nằm trên các hệ thống từ xa, và phải xuất hiện như thể đang hoạt động cục bộ đối với người dùng cuối. Giao tiếp này được cho là diễn ra giữa các peer.
- Transport (Lớp vận chuyển): Lớp vận chuyển chịu trách nhiệm giao tiếp giữa các tiến trình (processes). Cấp độ mạng này sử dụng các port để chỉ định địa chỉ các dịch vụ khác nhau
- Internet (Lớp Internet): Lớp internet được sử dụng để vận chuyển dữ liệu từ node này sang node khác trong một mạng. Lớp này nhận biết các điểm cuối của kết nối, nhưng không quan tâm đến kết nối thực tế cần thiết để đi từ nơi này đến nơi khác. Địa chỉ IP được định nghĩa trong lớp này như một cách để tiếp cận các hệ thống từ xa một cách có thể định địa chỉ được.
- Link (Lớp liên kết): Lớp liên kết thực hiện cấu trúc liên kết (topology) thực tế của mạng cục bộ cho phép lớp internet trình bày một giao diện có thể định địa chỉ được. Nó thiết lập các kết nối giữa các nút lân cận để gửi dữ liệu.
Như bạn có thể thấy, mô hình TCP/IP mang tính trừu tượng và linh hoạt. Điều này khiến nó trở nên dễ triển khai và trở thành cách phân loại tầng mạng phổ biến và thống trị nhất hiện nay
Giao diện
Giao diện (Interfaces) là các điểm giao tiếp mạng của máy tính bạn. Mỗi giao diện được liên kết với một thiết bị mạng vật lý hoặc ảo.
Thông thường, máy chủ của bạn sẽ có một giao diện mạng có thể cấu hình cho mỗi card Ethernet hoặc card mạng không dây mà bạn có.
Ngoài ra, nó sẽ định nghĩa một giao diện mạng ảo được gọi là “loopback” hay giao diện localhost. Giao diện này được sử dụng để kết nối các ứng dụng và tiến trình trên cùng một máy tính với các ứng dụng và tiến trình khác. Bạn có thể thấy nó được gọi là giao diện “lo” trong nhiều công cụ.
Nhiều khi, các quản trị viên cấu hình một giao diện để phục vụ lưu lượng truy cập Internet và một giao diện khác cho mạng LAN hoặc mạng riêng.
Trong các trung tâm dữ liệu có bật mạng riêng (bao gồm cả DigitalOcean Droplets), VPS của bạn sẽ có hai giao diện mạng. Giao diện “eth0” sẽ được cấu hình để xử lý lưu lượng truy cập từ Internet, trong khi giao diện “eth1” sẽ hoạt động để giao tiếp với mạng riêng.
Giao thức
Mạng hoạt động bằng cách piggybacking (cõng) một số giao thức khác nhau lên trên nhau. Theo cách này, một mảnh dữ liệu có thể được truyền đi bằng nhiều giao thức được đóng gói bên trong nhau.
Chúng ta sẽ bắt đầu với các giao thức được triển khai ở các tầng mạng thấp hơn và đi dần lên đến các giao thức có mức độ trừu tượng cao hơn.
Kiểm soát truy cập phương tiện (Medium Access Control)
Kiểm soát truy cập phương tiện là một giao thức truyền thông được sử dụng để phân biệt các thiết bị cụ thể. Mỗi thiết bị được cho là có một địa chỉ kiểm soát truy cập phương tiện (MAC address) duy nhất, được mã hóa cứng khi sản xuất, giúp phân biệt nó với mọi thiết bị khác trên internet.
Việc định địa chỉ phần cứng bằng địa chỉ MAC cho phép bạn tham chiếu đến một thiết bị bằng một giá trị duy nhất ngay cả khi phần mềm bên trên có thể thay đổi tên cho thiết bị cụ thể đó trong quá trình hoạt động.
Địa chỉ MAC là một trong số ít giao thức từ tầng liên kết cấp thấp mà bạn có thể sẽ tương tác thường xuyên.
IP (Internet Protocol)
Giao thức IP là một trong những giao thức cơ bản cho phép internet hoạt động. Địa chỉ IP là duy nhất trên mỗi mạng và chúng cho phép các máy giao tiếp với nhau qua mạng. Nó được triển khai ở tầng internet trong mô hình TCP/IP.
Các mạng có thể được liên kết với nhau, nhưng lưu lượng truy cập phải được định tuyến khi vượt qua ranh giới mạng. Giao thức này giả định một mạng không đáng tin cậy và nhiều đường dẫn đến cùng một đích mà nó có thể thay đổi động giữa các đường dẫn đó.
Có một số triển khai khác nhau của giao thức này. Triển khai phổ biến nhất hiện nay là địa chỉ IPv4, tuân theo mẫu 123.123.123.123, mặc dù địa chỉ IPv6, tuân theo mẫu 2001:0db8:0000:0000:0000:ff00:0042:8329, đang ngày càng trở nên phổ biến do số lượng địa chỉ IPv4 có sẵn bị hạn chế.
ICMP
ICMP là viết tắt của “internet control message protocol”. Nó được sử dụng để gửi các thông báo giữa các thiết bị để chỉ ra tình trạng sẵn sàng hoặc các điều kiện lỗi của chúng. Các gói tin này được sử dụng trong nhiều công cụ chẩn đoán mạng khác nhau, chẳng hạn như ping và traceroute.
Thông thường, các gói tin ICMP được truyền đi khi một loại gói tin khác gặp sự cố. Chúng được sử dụng như một cơ chế phản hồi cho các giao tiếp mạng.
TCP
TCP là viết tắt của “transmission control protocol”. Nó được triển khai trong tầng vận chuyển của mô hình TCP/IP và được sử dụng để thiết lập các kết nối đáng tin cậy.
TCP là một trong những giao thức đóng gói dữ liệu thành các gói tin. Sau đó, nó truyền các gói tin này đến đầu cuối từ xa của kết nối bằng cách sử dụng các phương thức có sẵn ở các tầng thấp hơn. Ở đầu bên kia, nó có thể kiểm tra lỗi, yêu cầu gửi lại các phần nhất định và lắp ráp lại thông tin thành một mảnh logic duy nhất để gửi đến tầng ứng dụng.
Giao thức này xây dựng một kết nối trước khi truyền dữ liệu bằng cách sử dụng một hệ thống gọi là three-way handshake. Đây là cách để hai đầu của giao tiếp xác nhận yêu cầu và thống nhất về một phương pháp đảm bảo độ tin cậy của dữ liệu.
Sau khi dữ liệu đã được gửi, kết nối sẽ bị hủy bỏ bằng cách sử dụng một quy trình tương tự làfour-way handshake.
TCP là giao thức được lựa chọn cho nhiều mục đích sử dụng phổ biến nhất của internet, bao gồm WWW, SSH và email.
UDP
UDP là viết tắt của “user datagram protocol”. Nó là một giao thức đồng hành phổ biến với TCP và cũng được triển khai ở tầng vận chuyển.
Sự khác biệt cơ bản giữa UDP và TCP là UDP cung cấp khả năng truyền dữ liệu không đáng tin cậy. Nó không xác minh rằng dữ liệu đã được nhận ở đầu bên kia của kết nối. Điều này nghe có vẻ là một điều không tốt, và đối với nhiều mục đích, đúng là như vậy. Tuy nhiên, nó cũng cực kỳ quan trọng đối với một số chức năng.
Bởi vì nó không yêu cầu phải chờ xác nhận rằng dữ liệu đã được nhận và buộc phải gửi lại dữ liệu, UDP nhanh hơn nhiều so với TCP. Nó không thiết lập kết nối với máy chủ từ xa, nó chỉ gửi dữ liệu mà không cần xác nhận.
Vì đây là một giao dịch thẳng thắn, nó hữu ích cho các giao tiếp như truy vấn tài nguyên mạng. Nó cũng không duy trì trạng thái, điều này làm cho nó tuyệt vời để truyền dữ liệu từ một máy đến nhiều máy khách thời gian thực. Điều này làm cho nó lý tưởng cho VOIP (Thoại qua IP), trò chơi và các ứng dụng khác không thể chấp nhận sự chậm trễ.
HTTP
HTTP là viết tắt của “hypertext transfer protocol”. Nó là một giao thức được định nghĩa trong tầng ứng dụng tạo thành nền tảng cho giao tiếp trên web.
HTTP định nghĩa một số động từ cho hệ thống từ xa biết bạn đang yêu cầu gì. Ví dụ, GET, POST, và DELETE đều tương tác với dữ liệu được yêu cầu theo một cách khác nhau. Để xem ví dụ về các yêu cầu HTTP khác nhau trong thực tế, hãy tham khảo “Cách định nghĩa các tuyến đường và phương thức yêu cầu HTTP trong Express”.
DNS
DNS là viết tắt của “domain name system”. Nó là một giao thức tầng ứng dụng được sử dụng để cung cấp cơ chế đặt tên thân thiện với con người cho các tài nguyên internet. Đây là thứ liên kết một tên miền với một địa chỉ IP và cho phép bạn truy cập các trang web bằng tên trong trình duyệt của mình.
SSH
SSH là viết tắt của “secure shell”. Nó là một giao thức mã hóa được triển khai trong tầng ứng dụng có thể được sử dụng để giao tiếp với máy chủ từ xa một cách an toàn. Nhiều công nghệ bổ sung được xây dựng dựa trên giao thức này vì khả năng mã hóa đầu cuối và sự phổ biến của nó.
Có nhiều giao thức khác mà chúng ta chưa đề cập cũng quan trọng không kém. Tuy nhiên, điều này sẽ cung cấp cho bạn một cái nhìn tổng quan tốt về một số công nghệ cơ bản giúp internet và mạng hoạt động.
Kết luận
Đến đây, bạn hẳn đã quen thuộc với một số thuật ngữ mạng và có thể hiểu cách các thành phần khác nhau giao tiếp với nhau. Kiến thức này sẽ hỗ trợ bạn trong việc đọc hiểu các bài viết khác và tài liệu hướng dẫn của hệ thống.