Chúng ta, con người, có thể được nhận diện theo nhiều cách khác nhau. Ví dụ, chúng ta có thể được nhận diện qua các tên trên giấy khai sinh. Chúng ta có thể được nhận diện qua số CCCD, giấy phép lái xe. Mặc dù mỗi cách đều có thể được dùng để nhận diện con người, nhưng trong một bối cảnh cụ thể, một dạng nhận diện có thể phù hợp hơn dạng khác. Ví dụ, các máy tính tại IRS (Cơ quan thuế nổi tiếng ở Mỹ) thích sử dụng số an sinh xã hội có độ dài cố định hơn là tên trong giấy khai sinh. Ngược lại, người bình thường lại thích sử dụng các tên trong giấy khai sinh dễ nhớ hơn là số an sinh xã hội. (Thực ra, bạn có thể tưởng tượng nói rằng, “Chào bạn. Tên tôi là 132-67-9875. Đây là chồng tôi, 178-87-1146” không?)
Đây là bài viết nằm trong chuyên mục Mạng máy tính.
Cũng như con người có thể được nhận diện theo nhiều cách, các máy chủ trên Internet cũng vậy. Một dạng nhận diện cho máy chủ là tên miền của nó. Tên miền—như www.facebook.com, www.google.com, gaia.cs.umass.edu—dễ nhớ và do đó được con người đánh giá cao. Tuy nhiên, tên miền không cung cấp nhiều về thông tin về vị trí của máy chủ trên Internet. (Ví dụ, tên miền như www.eurecom.fr, kết thúc bằng mã quốc gia .fr, cho chúng ta biết máy chủ có thể ở Pháp.)
Hơn nữa, vì tên miền có thể bao gồm các ký tự alphanumeric có độ dài thay đổi, chúng sẽ khó xử lý đối với các bộ định tuyến. Vì lý do này, các máy chủ còn được nhận diện qua địa chỉ IP, gọi là IP address.
Chúng ta sẽ bàn chi tiết hơn về địa chỉ IP trong các bài viết tiếp theo. Một địa chỉ IP bao gồm 4 byte và có cấu trúc phân cấp chặt chẽ. Một địa chỉ IP trông như 121.7.106.83, trong đó mỗi dấu chấm phân cách một byte, được biểu diễn dưới dạng thập phân từ 0 đến 255. Địa chỉ IP có tính phân cấp vì khi chúng ta quét từ trái sang phải, chúng ta có thêm thông tin cụ thể về vị trí của máy chủ trong Internet (tức là, trong mạng nào, trong mạng của các mạng). Tương tự, khi quét một địa chỉ bưu điện từ dưới lên trên, chúng ta có thêm thông tin cụ thể về vị trí của người nhận.
Dịch vụ cung cấp bởi giao thức phân giải tên miền DNS
Chúng ta vừa thấy rằng có hai cách để nhận diện một máy chủ—bằng tên miền (hostname) và bằng địa chỉ IP. Con người thích sử dụng tên miền dễ nhớ hơn, trong khi các bộ định tuyến lại ưa chuộng địa chỉ IP có độ dài cố định và có cấu trúc phân cấp. Để giải quyết sự khác biệt này, chúng ta cần một dịch vụ thư mục để chuyển đổi tên miền thành địa chỉ IP. Đây là nhiệm vụ chính của Domain Name System (DNS).
DNS (Domain Name System) là:
- (1) một cơ sở dữ liệu phân tán được triển khai trong một hệ thống phân cấp các máy chủ DNS
- (2) một giao thức lớp ứng dụng cho phép các máy chủ truy vấn cơ sở dữ liệu phân tán.
Các máy chủ DNS thường là các máy tính chạy hệ điều hành UNIX với phần mềm Berkeley Internet Name Domain (BIND) [BIND 2020]. Giao thức DNS chạy trên UDP và sử dụng port 53.
DNS thường được sử dụng bởi các giao thức lớp ứng dụng khác, bao gồm HTTP và SMTP, để chuyển đổi tên miền do người dùng cung cấp thành địa chỉ IP. Ví dụ, hãy xem xét những gì xảy ra khi một trình duyệt (tức là một khách hàng HTTP), chạy trên máy chủ của người dùng, yêu cầu URL www.someschool.edu/index.html. Để máy chủ của người dùng có thể gửi một thông điệp yêu cầu HTTP đến máy chủ Web www.someschool.edu, máy chủ của người dùng phải đầu tiên có được địa chỉ IP của www.someschool.edu. Quá trình này diễn ra như sau:
- Máy tính của người dùng chạy phần khách của ứng dụng DNS.
- Trình duyệt trích xuất tên miền, www.someschool.edu, từ URL và chuyển tên miền này cho phần khách của ứng dụng DNS.
- Phần khách DNS gửi một yêu cầu chứa tên miền đến một máy chủ DNS.
- Cuối cùng, phần khách DNS nhận được một phản hồi, bao gồm địa chỉ IP của tên miền.
- Khi trình duyệt nhận được địa chỉ IP từ DNS, nó có thể bắt đầu kết nối TCP với quá trình máy chủ HTTP nằm ở cổng 80 tại địa chỉ IP đó.
Chúng ta thấy từ ví dụ này rằng DNS thêm một độ trễ bổ sung—đôi khi là đáng kể—cho các ứng dụng Internet sử dụng nó. May mắn thay, như sẽ được bàn đến dưới đây, địa chỉ IP mong muốn thường được lưu trữ trong bộ nhớ cache của một máy chủ DNS “gần” đó, giúp giảm lưu lượng mạng DNS cũng như độ trễ trung bình của DNS.
DNS cung cấp một số dịch vụ quan trọng ngoài việc chuyển đổi tên miền thành địa chỉ IP:
- Alias tên máy chủ: Một máy chủ với tên miền phức tạp có thể có một hoặc nhiều tên gọi khác (alias). Ví dụ, một tên miền như relay1.west-coast.enterprise.com có thể có hai alias như enterprise.com và www.enterprise.com. Trong trường hợp này, tên miền relay1.west-coast.enterprise.com được gọi là tên miền chuẩn (canonical hostname). Các tên alias, khi có, thường dễ nhớ hơn các tên chuẩn. DNS có thể được ứng dụng gọi để có được tên miền chuẩn cho một alias tên miền cũng như địa chỉ IP của máy chủ.
- Alias máy chủ thư điện tử: Vì lý do hiển nhiên, địa chỉ email cần phải dễ nhớ. Ví dụ, nếu Bob có tài khoản với Yahoo Mail, địa chỉ email của Bob có thể đơn giản là bob@yahoo.com. Tuy nhiên, tên máy chủ của Yahoo Mail phức tạp hơn và ít dễ nhớ hơn nhiều so với chỉ yahoo.com (ví dụ, tên miền chuẩn có thể là relay1.west-coast.yahoo.com). DNS có thể được ứng dụng thư điện tử gọi để có được tên miền chuẩn cho một alias tên miền cũng như địa chỉ IP của máy chủ. Thực tế, bản ghi MX (dưới đây sẽ được giải thích) cho phép máy chủ thư điện tử và máy chủ Web của một công ty có thể có tên alias giống nhau; ví dụ, cả máy chủ Web và máy chủ thư của công ty có thể cùng được gọi là enterprise.com.
- Phân phối tải (Load distribution): DNS cũng được sử dụng để thực hiện phân phối tải giữa các máy chủ sao chép, như các máy chủ Web sao chép. Các trang web đông người truy cập, như cnn.com, được sao chép trên nhiều máy chủ, mỗi máy chủ chạy trên một hệ thống khác nhau và mỗi hệ thống có một địa chỉ IP khác nhau. Đối với các máy chủ Web sao chép, một bộ địa chỉ IP được liên kết với một alias tên miền. Cơ sở dữ liệu DNS chứa bộ địa chỉ IP này. Khi các client thực hiện một yêu cầu DNS cho một tên được ánh xạ với một bộ địa chỉ, máy chủ sẽ phản hồi với toàn bộ bộ địa chỉ IP, nhưng sẽ xoay vòng thứ tự các địa chỉ trong mỗi phản hồi. Vì một client thường gửi thông điệp yêu cầu HTTP đến địa chỉ IP đứng đầu trong bộ, việc xoay vòng DNS giúp phân phối lưu lượng giữa các máy chủ sao chép. Xoay vòng DNS cũng được sử dụng trong thư điện tử để nhiều máy chủ thư có thể có cùng tên alias. Ngoài ra, các công ty phân phối nội dung như Akamai đã sử dụng DNS theo các cách phức tạp hơn [Dilley 2002] để cung cấp phân phối nội dung Web.
DNS được quy định trong RFC 1034 và RFC 1035, và được cập nhật trong một số RFC bổ sung. Đây là một hệ thống phức tạp, và chúng ta chỉ đề cập đến các khía cạnh quan trọng của hoạt động của nó ở đây. Độc giả quan tâm có thể tham khảo các RFC này và cuốn sách của Albitz và Liu [Albitz 1993]; cũng xem bài báo hồi tưởng [Mockapetris 1988], cung cấp mô tả rõ ràng về cái gì và tại sao của DNS, và [Mockapetris 2005].
DNS hoạt động như thế nào?
Giả sử một ứng dụng nào đó (trình duyệt web hoặc mail agent) đang chạy trên máy của người dùng cần chuyển đổi một tên máy chủ (hostname) thành địa chỉ IP. Ứng dụng sẽ gọi phía máy khách của DNS, chỉ định tên máy chủ cần được dịch. (Trên nhiều máy dựa trên UNIX, gethostbyname()
là lệnh gọi hàm mà một ứng dụng gọi để thực hiện việc chuyển đổi này.) DNS trên máy của người dùng sau đó sẽ gửi một thông điệp truy vấn vào mạng. Tất cả các thông điệp truy vấn và phản hồi của DNS đều được gửi trong các gói UDP đến port 53. Sau một khoảng thời gian trễ (từ vài mili giây đến vài giây) DNS trên máy người dùng sẽ nhận được một thông điệp phản hồi từ DNS cung cấp phép ánh xạ mong muốn.
Phép ánh xạ này sau đó được chuyển lại cho ứng dụng đã gọi. Vì vậy, từ quan điểm của ứng dụng đang chạy trên máy người dùng, DNS là một hộp đen cung cấp một dịch vụ chuyển đổi đơn giản và rõ ràng. Nhưng thực tế, hộp đen thực hiện dịch vụ này rất phức tạp, bao gồm một số lượng lớn các máy chủ DNS phân bố khắp toàn cầu, cùng với một giao thức tầng ứng dụng quy định cách thức các máy chủ DNS và các máy yêu cầu truy vấn giao tiếp với nhau.
Một thiết kế đơn giản cho DNS có thể là có một máy chủ DNS duy nhất chứa tất cả các phép ánh xạ. Trong thiết kế tập trung này, các máy khách chỉ cần gửi tất cả các truy vấn đến máy chủ DNS duy nhất, và máy chủ DNS sẽ phản hồi trực tiếp cho các máy khách yêu cầu. Mặc dù sự đơn giản của thiết kế này có vẻ hấp dẫn, nhưng nó không phù hợp với Internet ngày nay, với số lượng máy chủ khổng lồ (và ngày càng tăng). Những vấn đề với thiết kế tập trung này bao gồm:
- Một điểm lỗi duy nhất. Nếu máy chủ DNS gặp sự cố, toàn bộ Internet sẽ ngừng hoạt động!
- Lưu lượng truy cập lớn. Một máy chủ DNS duy nhất sẽ phải xử lý tất cả các truy vấn DNS (cho tất cả các yêu cầu HTTP và email được tạo ra từ hàng trăm triệu máy).
- Cơ sở dữ liệu tập trung xa. Một máy chủ DNS duy nhất không thể “gần” với tất cả các máy khách yêu cầu truy vấn. Nếu chúng ta đặt máy chủ DNS duy nhất ở thành phố New York, thì tất cả các truy vấn từ Úc sẽ phải đi qua nửa kia của quả địa cầu, có thể qua các liên kết chậm và tắc nghẽn. Điều này có thể dẫn đến sự trễ đáng kể.
- Bảo trì. Máy chủ DNS duy nhất sẽ phải lưu trữ hồ sơ của tất cả các máy trên Internet. Không chỉ cơ sở dữ liệu tập trung này rất lớn, mà nó còn phải được cập nhật thường xuyên để tính đến từng máy chủ mới.
Tóm lại, cơ sở dữ liệu tập trung trong một máy chủ DNS duy nhất không thể mở rộng. Do đó, DNS được thiết kế theo kiểu phân tán. Thực tế, DNS là một ví dụ tuyệt vời về cách một cơ sở dữ liệu phân tán có thể được triển khai trên Internet.
Cơ sở dữ liệu phân cấp, phân tán
Để giải quyết vấn đề mở rộng quy mô, DNS sử dụng một số lượng lớn máy chủ, được tổ chức theo cách phân cấp và phân bố trên toàn thế giới. Không có máy chủ DNS nào chứa tất cả các phép ánh xạ cho tất cả các máy chủ trên Internet. Thay vào đó, các phép ánh xạ này được phân phối giữa các máy chủ DNS. Ở mức cơ bản, có ba loại máy chủ DNS:
- Root DNS (máy chủ DNS gốc)
- Top-level DNS (TLD)
- Authoritative DNS (máy chủ DNS có thẩm quyền)
Được tổ chức theo cấu trúc phân cấp như trong hình dưới.
Để hiểu cách ba loại máy chủ này tương tác, giả sử một máy khách DNS muốn xác định địa chỉ IP cho tên miền www.amazon.com. Ở mức cơ bản, các sự kiện sau sẽ diễn ra. Máy khách đầu tiên liên hệ với một trong các máy chủ gốc, máy chủ này sẽ trả về các địa chỉ IP của các máy chủ TLD cho tên miền cấp cao .com. Máy khách sau đó liên hệ với một trong các máy chủ TLD này, máy chủ này trả về địa chỉ IP của một máy chủ có thẩm quyền cho amazon.com. Cuối cùng, máy khách liên hệ với một trong các máy chủ có thẩm quyền của amazon.com, và máy chủ này trả về địa chỉ IP cho tên miền www.amazon.com.
Root DNS: Có hơn 1000 phiên bản máy chủ gốc được phân bố trên toàn thế giới. Các máy chủ gốc này là bản sao của 13 máy chủ gốc khác nhau, được quản lý bởi 12 tổ chức khác nhau và được điều phối bởi Internet Assigned Numbers Authority (IANA) [IANA 2020]. Các máy chủ tên gốc cung cấp địa chỉ IP của các máy chủ TLD.
- Top-level DNS (TLD): Đối với mỗi tên miền cấp cao—như com, org, net, edu, và gov, cùng với tất cả các tên miền cấp cao theo quốc gia như uk, fr, ca, và jp—có một máy chủ TLD (hoặc cụm máy chủ). Công ty Verisign Global Registry Services quản lý các máy chủ TLD cho tên miền cấp cao com, và công ty Educause quản lý các máy chủ TLD cho tên miền cấp cao edu. Hạ tầng mạng hỗ trợ một TLD có thể lớn và phức tạp. Các máy chủ TLD cung cấp địa chỉ IP cho các máy chủ DNS có thẩm quyền.
- Authoritative DNS: Mọi tổ chức có các máy chủ truy cập công khai (như máy chủ Web và máy chủ thư) trên Internet phải cung cấp các bản ghi DNS công khai để ánh xạ tên của các máy chủ đó với địa chỉ IP. Máy chủ DNS có thẩm quyền của một tổ chức lưu trữ các bản ghi DNS này. Một tổ chức có thể chọn tự triển khai máy chủ DNS có thẩm quyền của mình để lưu trữ các bản ghi này; hoặc tổ chức có thể trả tiền để lưu trữ các bản ghi này trên máy chủ DNS có thẩm quyền của một nhà cung cấp dịch vụ. Hầu hết các trường đại học và công ty lớn tự triển khai và duy trì máy chủ DNS có thẩm quyền chính và phụ (dự phòng).
Local DNS Server
Các máy chủ DNS gốc, TLD và có thẩm quyền đều thuộc vào hệ thống phân cấp của các máy chủ DNS. Ngoài ra còn có một loại máy chủ DNS quan trọng khác gọi là máy chủ DNS cục bộ. Máy chủ DNS cục bộ không thực sự thuộc vào hệ thống phân cấp của các máy chủ DNS nhưng vẫn đóng vai trò trung tâm trong kiến trúc DNS. Mỗi nhà cung cấp dịch vụ Internet (ISP)—chẳng hạn như ISP dân dụng hoặc ISP tổ chức—đều có một máy chủ DNS cục bộ (còn gọi là máy chủ tên mặc định). Khi một máy chủ kết nối với ISP, ISP sẽ cung cấp cho máy chủ địa chỉ IP của một hoặc nhiều máy chủ DNS cục bộ của nó (thường thông qua DHCP).
Đối với một ISP tổ chức, máy chủ DNS cục bộ có thể nằm trên cùng một mạng LAN với máy chủ; đối với một ISP dân dụng, nó thường chỉ cách máy chủ vài bộ định tuyến. Khi một máy chủ gửi yêu cầu DNS, yêu cầu này sẽ được gửi đến máy chủ DNS cục bộ, máy chủ này đóng vai trò như một proxy, chuyển tiếp yêu cầu vào hệ thống phân cấp máy chủ DNS.
Giả sử máy chủ cse.nyu.edu muốn có được địa chỉ IP của gaia.cs.umass.edu. Cũng giả sử rằng máy chủ DNS cục bộ của NYU cho cse.nyu.edu được gọi là dns.nyu.edu và máy chủ DNS có thẩm quyền cho gaia.cs.umass.edu được gọi là dns.umass.edu. Như được thể hiện trong hình trên, máy chủ cse.nyu.edu trước tiên gửi một thông điệp truy vấn DNS đến máy chủ DNS cục bộ của nó, dns.nyu.edu. Thông điệp truy vấn chứa tên máy chủ cần dịch, cụ thể là gaia.cs.umass.edu. Máy chủ DNS cục bộ chuyển tiếp thông điệp truy vấn đến một máy chủ DNS gốc.
Máy chủ DNS gốc nhận diện hậu tố edu và trả về cho máy chủ DNS cục bộ một danh sách địa chỉ IP của các máy chủ TLD chịu trách nhiệm cho miền edu. Máy chủ DNS cục bộ sau đó gửi lại thông điệp truy vấn đến một trong những máy chủ TLD này. Máy chủ TLD nhận diện hậu tố umass.edu và phản hồi với địa chỉ IP của máy chủ DNS có thẩm quyền của Đại học Massachusetts, cụ thể là dns.umass.edu. Cuối cùng, máy chủ DNS cục bộ gửi thông điệp truy vấn trực tiếp đến dns.umass.edu, và máy chủ này phản hồi với địa chỉ IP của gaia.cs.umass.edu. Lưu ý rằng trong ví dụ này, để có được phép ánh xạ cho một tên máy chủ, tám thông điệp DNS đã được gửi: 4 thông điệp truy vấn và 4 thông điệp phản hồi.
DNS Caching
DNS khai thác mạnh mẽ tính năng bộ nhớ đệm để cải thiện hiệu suất độ trễ và giảm số lượng thông điệp DNS dội quanh Internet. Ý tưởng đằng sau bộ nhớ đệm DNS rất đơn giản. Trong một chuỗi truy vấn, khi một máy chủ DNS nhận được một phản hồi DNS (chứa, ví dụ, một phép ánh xạ từ tên máy chủ sang địa chỉ IP), nó có thể lưu trữ tạm thời phép ánh xạ này trong bộ nhớ cục bộ.
Ví dụ, trong hình dưới, mỗi khi máy chủ DNS cục bộ dns.nyu.edu nhận được phản hồi từ một máy chủ DNS nào đó, nó có thể lưu trữ tạm thời bất kỳ thông tin nào có trong phản hồi đó. Nếu một cặp tên máy chủ/địa chỉ IP được lưu trữ trong bộ nhớ đệm của máy chủ DNS và có một truy vấn khác đến máy chủ DNS cho cùng một tên máy chủ, máy chủ DNS có thể cung cấp ngay địa chỉ IP mong muốn, ngay cả khi nó không phải là máy chủ có thẩm quyền cho tên máy chủ đó. Vì các máy chủ và phép ánh xạ giữa tên máy chủ và địa chỉ IP không phải là cố định vĩnh viễn, các máy chủ DNS sẽ xóa thông tin trong bộ nhớ đệm sau một khoảng thời gian (thường là hai ngày).
Lấy ví dụ, giả sử máy chủ apricot.nyu.edu gửi truy vấn đến dns.nyu.edu để tìm địa chỉ IP cho tên miền cnn.com. Hơn nữa, giả sử rằng vài giờ sau, một máy chủ khác của NYU, chẳng hạn kiwi.nyu.edu, cũng truy vấn dns.nyu.edu với cùng tên miền. Nhờ có bộ nhớ đệm, máy chủ DNS cục bộ sẽ có thể ngay lập tức trả về địa chỉ IP của cnn.com cho máy chủ yêu cầu thứ hai mà không cần phải truy vấn bất kỳ máy chủ DNS nào khác. Máy chủ DNS cục bộ cũng có thể lưu trữ địa chỉ IP của các máy chủ TLD, giúp máy chủ DNS cục bộ bỏ qua các máy chủ gốc trong chuỗi truy vấn. Thực tế, nhờ có bộ nhớ đệm, các máy chủ gốc chỉ bị truy vấn trong một phần rất nhỏ của các truy vấn DNS.
Phần tiếp theo mình sẽ nói tiếp về các loại bản ghi và thông điệp của DNS.
Comments 1