Thứ Hai, 15 tháng 5, 2017

TRỜI SINH IP SAO CÒN SINH MAC?

** Lời dẫn: Bài dịch về để giải thích về một câu hỏi mà những người khi mới làm quen với môn học Mạng máy tính hay gặp phải, tiêu đề lấy cảm hứng "Du - Lượng" trong Tam quốc diễn nghĩa.
Xem bài gốc tại địa chỉ: Why do we have both MAC addresses and IP addresses? từ blog kỹ thuật fixedbyvonnie.com.
* Lưu ý về thuật ngữ: 

  • Để đảm bảo tính khách quan về mặt kỹ thuật, một số thuật ngữ như: host, frame, header, trailer sẽ được giữ nguyên trong bản dịch.
  • Thuật ngữ "layer" trong ngữ cảnh mô hình TCP/IP có thể được dịch là "tầng" hoặc "lớp". Trong bản dịch, hai từ dịch đích được dùng lẫn lộn với cùng một ý nghĩa.
Nội dung bản dịch:
Cớ sao trời sinh MAC lại còn sinh IP?
Đây là thực sự là một câu hỏi đã làm bận lòng tôi suốt một thời gian dài:
Tại sao máy tính lại cần đến cả địa chỉ vật lý – MAC lẫn địa chỉ IP? Tại sao máy tính cần tới 2 địa chỉ để kết nối mạng? Chỉ địa chỉ IP không đủ sao? Rốt cuộc MAC là địa chỉ như thế nào?
Nghe khoai thật nhưng lại cực kỳ thú vị đây. Tiếp tục đọc nhé, hi vọng tôi có thể giúp các bạn hiểu được.
Đầu tiên hãy nói về MAC, bởi anh chàng này kín tiếng hơn so với người anh em đại chúng IP của mình.
👉  NHỮNG ĐỊA CHỈ MAC KỲ DIỆU
Khi nhắc đến MAC, nhiều người lại dễ liên tưởng đến dòng máy tính đình đám là mơ ước của bao đứa trẻ và mất hồn bao người lớn.
Thật lòng mà nói, “địa chỉ MAC” lại là một khái niệm không được lung linh như thế. Địa chỉ MAC, còn được biết đến là địa chỉ vật lý, về bản chất là định danh – tên duy nhất của thiết bị. Nó là một số dài 6 byte, thường được viết dưới dạng số thập lục phân (Hexadecimal), đóng vai trò như một địa chỉ duy nhất phục vụ mục đích giao tiếp với các thiết bị khác trong mạng.
Bất kỳ thiết bị nào từ PC cho đến máy in, TV, lò nướng, máy Xbox, máy photo Xerox – nếu có khả năng giao tiếp với các thiết bị khác thì sẽ có địa chỉ MAC. Với máy tính, bạn có thể dễ dàng xem địa chỉ MAC của mình trong Windows. Dãy số này có nửa đầu để định danh nhà sản xuất, còn nửa sau có thể được ấn định bất kỳ tùy thuộc vào nhà sản xuất.
Như vậy về lý thuyết, mỗi địa chỉ MAC trên thế giới này là duy nhất, như kiểu dấu vân tay của con người vậy.
👉  VẬY, ĐỊA CHỈ IP THÌ SAO?
Thật thừa thãi khi sử dụng tận 2 loại địa chỉ, trong khi chúng đều là định danh duy nhất cho một thiết bị kết nối mạng. Các thiết bị kết nối mạng này được gọi là các host (trong tiếng Việt đôi khi dịch là máy trạm) và cần được cấp 1 địa chỉ IP để có thể kết nối đến các host khác.
Vậy nếu IP giúp host giao tiếp với nhau rồi… thì cần MAC để làm gì?
Để tự giải đáp cho mình, các bạn cùng tôi tìm hiểu một chút về TCP/IP.
👉  VỠ LÒNG VỀ TCP/IP
TCP/IP là một mô hình phân lớp giao thức mạng phổ biến nhất hiện hành.
Hài hước một chút, hãy nhìn TCP như thể những câu chuyện mà máy tính sẽ buôn với nhau nếu chúng tham dự một bữa tiệc cocktail hoặc một sự kiện nào đó. Tương tự như con người sử dụng các ngôn ngữ khác nhau để giao tiếp, máy tính cũng có cách của riêng chúng để trao đổi thông tin với nhau. Một “ngôn ngữ” như thế được gọi là một giao thức – định nghĩa nên các luật để giao tiếp giữa các máy tính với nhau.
Vào thời kỳ khởi thủy của Internet, dường như mỗi nhà sản xuất, mỗi công ty trên thế giới lại lập ra một ngôn ngữ riêng “nói chuyện” với máy tính. Đầu những năm 80, IBM có một cái riêng, Apple, Xerox cũng không chịu kém cạnh, mọi thứ rối rắm như canh hẹ!
Trong hoàn cảnh đó, một nhóm các nhà khoa học ưu tú của Bộ quốc phòng Mỹ và Tổ chức tiêu chuẩn quốc tế tiến hành độc lập, đồng thời, xây dựng một tiêu chuẩn giao tiếp thống nhất cho các máy tính. Kết quả là sự ra đời của 2 mô hình OSI và TCP/IP, nhưng vì OSI tiến những bước quá nặng nề và chậm chạp: mất quá nhiều thời gian để tiêu chuẩn hóa mô hình OSI, nên TCP/IP được chấp nhận và ưa chuộng.
👉  KHIÊU VŨ VỚI TCP/IP
TCP/IP là một bộ các giao thức có phân cấp, định nghĩa việc giao tiếp giữa các máy tính với nhau như thế nào.
“Có phân cấp” nghĩa là mỗi một nhóm giao thức, được gọi là một lớp (layer), lại cung cấp một dịch vụ nào đó cho lớp phía trên nó.
Có 5 lớp trong mô hình TCP/IP:
  • Lớp ứng dụng – Application
  • Lớp giao vận – Transport
  • Lớp Internet
  • Lớp liên kết dữ liệu – Data Link
  • Lớp vật lý – Physical

Lớp liên kết dữ liệu quy định các đặc tính tiêu chuẩn cho việc tạo frame Ethernet trong khi lớp Internet định nghĩa giao thức IP có nhiệm vụ đánh địa chỉ.
Nhân tiện, “tạo frame” là một thuật ngữ ám chỉ việc lớp liên kết dữ liệu đóng gói nội dung bằng một header và trailer Ethernet. Gọi là “frame” hay “khung” vì tải dữ liệu được thêm thông tin vào cả hai đầu.
Khi một host liên lạc với một host khác, dữ liệu chạy dọc từ trên xuống qua các lớp TCP/IP và nhận thêm header ở mỗi lớp.
Vì thế khi bạn đi đến fixedbyvonnie.com, trình duyệt của bạn bàn giao lại việc xử lý đường dẫn này cho giao thức HTTP thuộc tầng ứng dụng.
Tầng ứng dụng thêm vào header của riêng nó, trong trường hợp này là header HTTP chứa các thông tin về website fixedbyvonnie.com. Nếu bạn đang sử dụng Chrome, header HTTP nôm na như sau:
Này! Tớ là Chrome và tớ muốn file index.php từ fixedbyvonnie.com
Về mặt kỹ thuật, đây là yêu cầu kiểu HTTP GET, nói với web server rằng bạn muốn lấy một tài liệu nào đó.
Tiếp đó, TCP/IP chuyển dữ liệu xuống tầng giao vận, ở đó có 2 giao thức là UDP và TCP. Do chúng ta đang lấy ví dụ vể duyệt web nên header TCP sẽ được thêm vào tạo nên một segment mới, chuyển đơn vị này xuống lớp Internet. Tại tầng này, segment được gắn tiếp một header nữa. Có hàng tá thứ trong header ở lớp Internet, nhưng để đơn giản, tôi chỉ quan tâm đến địa chỉ IP nguồn và đích. Xử lý xong, ta có một gói tin – packet Internet ở lớp Internet.
Ngay khi được đưa xuống lớp liên kết dữ liệu, packet lúc nào được đóng khung ở hai đầu bởi một “mớ” thuộc giao thức Ethernet. Tôi cố tình tỏ ra mơ màng khi sử dụng từ “mớ” bởi sợ đầu óc sẽ quay cuồng nổ tung khi cố giải thích tường tận “mớ” gồm những gì. Xin phép không đi vào quá chi tiết.
Vậy cái gì nằm trong header Ethernet? Đó là địa chỉ MAC nguồn và đích, còn trailer Ethernet chỉ là một con số dài giúp host đích biết được frame có nguyên vẹn hay không(checksum).
 Vậy là rất nhiều header được thêm vào làm cho đơn vị dữ liệu của chúng ta, ban đầu chỉ là một yêu cầu HTTP GET gọn nhẹ, lớn dần lên theo dọc theo chiều xuống của mô hình TCP/IP. Đến khi xuống lớp vật lý, dữ liệu được mã hóa thuần túy vật lý vào dây đồng thành các mức điện áp hoặc vào cáp quang thành các xung ánh sáng.
Tại host đích là web server, quá trình ngược lại diễn ra: tín hiệu dữ liệu thô ở lớp vật lý, các header được loại bỏ dần theo chiều từ dưới lên trong mô hình TCP/IP, cho đến khi bóc tách được dữ liệu cốt lõi nhất là yêu cầu HTTP GET của host nguồn.
Vẫn còn ngờ ngợ khó tin phải không? Nghĩ mà xem:
Khi server nhận được yêu cầu HTTP GET, nó là một chuỗi dài các ký hiệu ‘0’ và ‘1’. Nhưng vì cả máy của bạn và server của tôi đều hiểu TCP/IP, server của tôi sẽ biết phải dịch chuỗi nhị phân đó như thế nào để hiểu thông điệp muốn nói gì.
👉  GIỜ CẦN QUAN TÂM ĐẾN ĐỊA CHỈ MAC ĐÂY
Sau khi nhập vào thanh địa chỉ nội dung fixedbyvonnie.com, máy tính của bạn sẽ cố để làm rõ cái máy tính với tên gọi fixedbyvonnie.com nằm ở trong mạng cục bộ hay chỗ quái quỷ nào trên thế giới.
Nó sử dụng giao thức DNS để làm việc đó. Không đi quá sâu vào mặt kỹ thuật, một cách dễ hiểu, máy tính của bạn sẽ biết fixedbyvonnie.com không nằm trong mạng cục bộ LAN vì địa chỉ IP của trang web này nằm khác nhóm với IP máy tính của bạn.
Chẳng hạn, fixedbyvonnie.com có IP là 198.57.208.223. Giá trị 198.57.208 nói cho máy tính của bạn biết bạn nằm ở mạng khác với website của tôi vì những giá trị tương tự trong IP của bạn khác giá trị trên (vai trò của subnet mask).
Do đó khi yêu cầu HTTP GET của bạn đang trên hành trình trượt dọc ngăn xếp TCP/IP, đến lớp liên kết dữ liệu, máy tính của bạn sẽ lẩm bẩm:
Mặc dù tao biết fixedbyvonnie.com nằm ở mạng khác, nhưng tao chẳng biết đi đường nào đến đó cả. Hmm… làm thế nào giờ? À, chờ chút, cái router biết nhiều hơn tao. Tao sẽ gửi yêu cầu này đến default gateway bằng cách gửi frame tới địa chỉ MAC của default gateway gắn với tao!
Sau đóng gói, dữ liệu này đưa thẳng đến router của nhà bạn. Các thông tin của các lớp trên vẫn giữ nguyên, kể cả địa chỉ IP đích là 198.57.208.223 trong header IP.
Đây là nguyên tắc trị giá triệu đô mà bạn phải nắm được:
Địa chỉ IP nguồn và đích trong header IP không bao giờ thay đổi trong suốt hành trình của gói tin. Nói cách khác, khi gói tin dịch chuyển trong mạng, địa chỉ IP nguồn và đích là tĩnh. Chúng không thay đổi.
Nhưng các địa chỉ MAC thì luôn thay đổi.
Cứ mỗi lần gói tin chuyển từ router này sang router khác, header và trailer được bóc đi và thay mới. Các thông tin mới luôn bao gồm địa chỉ MAC nguồn là MAC của router vừa nhận gói tin và MAC đích là MAC của router kế tiếp.
Bạn đã rút ra được gì chưa?
Trong khi địa chỉ MAC giúp các gói tin đến thiết bị kế tiếp, thì địa chỉ IP gánh trách nhiệm giúp gói tin vượt qua cả hành trình và đến được đích cuối cùng của nó.
👉  VÍ DỤ MINH HỌA NHO NHỎ
Giả sử có 3 routers giữa máy tính của bạn và server của tôi.
Gọi tên các thiết bị như sau:
  • A là máy tính của bạn
  • B là Router 1
  • C là Router 2
  • D là Router 3
  • E là fixedbyvonnie.com

Để gói tin chạy được từ A đến B, lớp 2 của TCP/IP đóng khung gói tin với header Ethernet chứa địa chỉ MAC đích là B và địa chỉ MAC của A là địa chỉ nguồn (ND: đã nói đến “địa chỉ” ở lớp 2 thì phải hiểu ngay là địa chỉ MAC, lớp 3 là địa chỉ IP ).
Nhớ lại phần trên, mô hình TCP/IP gồm 5 lớp, lớp Internet thêm một header có chứa IP nguồn và IP đích vào gói tin. Sau đó gói tin đưa xuống lớp 2, đóng frame Ethernet có đại chỉ MAC như đã nói rồi đưa lên truyền ở lớp vật lý.
Nếu tôi có năng lực đọc được ý nghĩ của Router 1, chắc hẳn nó sẽ nghĩ như này:
Chà, mình có biết nhóm IP nào mà chứa địa chỉ IP của thằng fixedbyvonnie.com này không nhỉ? Um… không biết rồi, thôi để hỏi thằng hàng xóm Router 2.
Để đưa frame đến được Router 2, Router 1 bóc header chứa MAC cũ là địa chỉ máy tính của bạn và thay địa chỉ MAC của nó vào phần địa chỉ nguồn. Đồng thời, thay thế địa chỉ đích bằng địa chỉ MAC của Router 2. Suốt quá trình đó, địa chỉ IP nguồn và đích bất khả xâm phạm.
Kịch bản tiếp diễn như vậy ở các chặng sau cho đến khi gói tin dến được đích, với địa chỉ MAC liên tục thay đổi.
Địa chỉ IP giữ vai trò trong bức tranh lớn, nhưng MAC mới là thứ đưa gói tin đi từng bước một. Nếu chỉ có mỗi địa chỉ IP, máy tính của bạn thực sự chẳng biết làm gì với gói tin cả.
Đây hiển nhiên chỉ là cách giải thích tinh gọn về cách hoạt động của MAC và IP, nhưng thực sự rất cơ bản. Nếu bạn muốn biết thêm chi tiết hoặc có thắc mắc, hãy comment xuống dưới. Xin cảm ơn!


Analog flash clock widget