Lịch sử về URL: Domain, Protocol and Port

Bài viết được dịch từ nguồn: https://eager.io/blog/the-history-of-the-url-domain-and-protocol/

Ngày 11/1/1982, 20 nhà khoa học máy tính đã họp và thảo luận về vấn đề thư điện thử. Tham dự có những người sau này đã sáng lập nên Sun Microsystems, Zork, NTP, Unix. Vấn đề được đưa ra là: có 455 cổng trên ARPANET và tình hình đang nằm ngoài sự kiểm soát.

arpanet-1969.gif

Vấn đề đang xảy ra vào thời điểm đó bởi vì ARPANET đang trên giai đoạn chuyên đổi từ giao thức NCP ban đầu sang giao thức TCP/IP. Với sự chuyển đổi đột ngột sẽ có vô số các mạng kết nói với nhau đòi hỏi phải có một hệ thống domain phân cấp nhiều hơn để ARPANET có thể giải quyết được vấn đề của mình trong khi các mạng khác vẫn có thể giải quyết vấn đề của chúng.

Tại thời điểm đó, các mạng lớn có tên tuổi như “COMSAT”, “CHAOSNET”, “UCLNET” and “INTELPOSTNET” và được duy trì bởi nhóm các trường đại học và các công ty trên khắp nước Mỹ.

Theo thiết kế ARPANET ban đầu, một trung tâm mạng thông tin (NIC) có trách nhiệm duy trì một danh sách các tập tin ở mỗi máy chủ trên mạng. Các tập tin được gọi là HOSTS.TXT, tương tự như /etc/hosts trên Linux hay OS X ngày nay. Mọi sự thay đổi sẽ yêu cầu các NIC tới FTP tới mỗi máy chủ trên mạng.

Có một danh sách tập tin đơn lẻ trên mạng intenet sẽ, và đương nhiên, không mở rộng vô hạn. Email được ưu tiên, tuy nhiên, nó là thử thách được ưu tiên giải quyết trong ngày. Kết luận cuối cùng của họ là tạo ra một hệ thống phân cấp, trong đó bạn có thể truy vấn hệ thống bên ngoài để cho domain hoặc tập những domains bạn cần. Vì vậy tên miền được sinh ra.

arpanet.gif

Điều quan trọng là để xua tan mọi ảo tưởng rằng những quyết định này được thực hiện với sự thấy trước của tương lai tên miền. Trong thực tế, giải pháp do họ đưa ra chủ yếu được quyết định bời vì nó là cách gây ra khó khăn ít nhất cho hệ thống hiện có.

UUCP and the Bang Path

Một đề xuất thất bại khác liên quan đến việc phân cách các thành phần của tên miền với dấu chấm than (!). Ví dụ, để kết nối tới máy chủ ISIA trên ARPANET, bạn sẽ vào !ARPA!ISIA. Sau đó bạn có thể truy vấn cho các máy chủ sử dụng ký tự đại diện, như vậy !ARPA!* sẽ trả về cho bạn mọi máy chủ ARPANET.

Phương pháp giải quyết này không phải là một sự phân tách rõ ràng theo tiêu chuẩn, đó là một nỗ lực để duy trì hệ thống. Hệ thống phân cách các máy chủ bằng dấu chấm than sinh ra một công cụ chuyển đổi dữ liệu gọi lại UUCP vào năm 1976. UUCP ngày nay có khả năng vẫn được cài đặt sẵn trong terminal trên OS X hoặc Linux.

ARPANET đã được giới thiệu vào năm 1969, và nhanh chóng trở thành một công cụ truyền thông mạnh mẽ ... chỉ số ít các trường đại học và các tổ chức chính phủ trong đó có quyền truy cập vào nó. Internet như chúng ta biết nó sẽ không được công bố rộng rãi bên ngoài của các Tổ chức nghiên cứu cho đến năm 1991, hai mươi mốt năm sau. Nhưng điều đó không có nghĩa là những người dùng máy tính không được giao tiếp với nhau.

coupler.jpg

Trong thời đại trước khi Internet, phương pháp giao tiếp phổ biến giữa các máy tính là quay số kết nối trực tiếp điểm-điểm. Ví dụ, nếu bạn muốn gửi cho tôi một tập tin, bạn sẽ dùng modem của bạn gọi modem của tôi, và chúng ta sẽ chuyển các tập tin. Để việc này được phổ biến hơn, UUCP đã được sinh ra.

Trong hệ thống này, mỗi máy tính có một tập tin trong đó liệt kê các host kết nối được, số điện thoại của họ, và một tên người dùng và mật khẩu trên máy chủ đó. Sau đó bạn soạn thảo một 'con đường', từ máy tính hiện tại của bạn đến đích của bạn, thông qua các máy chủ mà mỗi máy chủ trong số đó biết cách làm thế nào để kết nối đến máy chủ tiếp theo:

sw-hosts!digital-lobby!zack

uucp.jpg

Địa chỉ này sẽ hình thành không chỉ là một phương pháp gửi cho tôi tập tin hoặc kết nối với máy tính của tôi trực tiếp, mà còn sẽ là địa chỉ email của tôi. Trong thời đại này trước khi "máy chủ mail ', nếu máy tính của tôi đã được tắt, bạn sẽ không gửi cho tôi một email.

Trong khi sử dụng ARPANET được giới hạn ở các trường đại học hàng đầu, UUCP tạo ra một Internet lậu cho phần còn lại của chúng ta. Nó hình thành cơ sở cho cả Usenet và hệ thống BBS.

DNS

Đặc biệt, hệ thống DNS chúng ta vẫn sử dụng ngày hôm nay đã được đề xuất vào năm 1983. Hiện nay, nếu bạn chạy một truy vấn DNS, ví dụ bằng cách sử dụng công cụ đào, bạn có thể sẽ thấy một phản ứng mà trông như thế này:

;; ANSWER SECTION:
google.com. 299 IN A 172.217.4.206

Đây là thông báo cho chúng tôi rằng google.com có thể truy cập tại 172.217.4.206. Như bạn đã biết, A được thông báo cho chúng tôi rằng đây là 'địa chỉ' được lưu lại, lập bản đồ một miền đến một địa chỉ IPv4. 299 là 'thời gian để sống, cho chúng tôi biết giá trị này sẽ có giá trị trông vòng nhiều hơn bao nhiêu giây nữa, trước khi nó cần được truy vấn một lần nữa. Nhưng IN nghĩa là gì?

“IN” là viết tắt của 'Internet'. Cũng tương tự như vậy, lĩnh vực này đã trở lại vào một thời đại của những mạng mạng máy tính đầy tính cạnh tranh nhưng cũng rất cần thiết để tương thích. Các giá trị tiềm năng khác là CH cho CHAOSNET hoặc HS cho Hesiod, đó là các dịch vụ tên của hệ thống Athena. CHAOSNET là đã bị lãng quên từ lâu, nhưng một phiên bản nhiều cải tiến hơn của Athena vẫn được sử dụng bởi các sinh viên tại MIT cho đến ngày nay. Bạn có thể tìm thấy danh sách các lớp DNS trên trang web của IANA, mà không có gì ngạc nhiên khi chỉ có một giá trị tiềm năng được sử dụng phổ biến hiện nay.

TLDs

Thực sự không thể dám chắc rằng đã có bất kỳ TLDs nào khác sẽ được tạo ra. John Postel, 1994

Một khi các tên miền đã được quyết định nên được sắp xếp theo thứ bậc, điều cần thiết là phải quyết định những gì nằm ở thư mục gốc của hệ thống phân cấp đó. Gốc mà theo truyền thống được biểu thị bằng một dấu “.”. Trong thực tế, kết thúc tất cả các tên miền của bạn với một “.” là vô cùng chính xác, và hoàn toàn sẽ làm việc trong trình duyệt web của bạn: google.com.

TLD đầu tiên là .arpa. Nó cho phép người sử dụng giải quyết hostname ARPANET truyền thống của họ trong quá trình chuyển đổi. Ví dụ, nếu máy tính của tôi đã được đăng ký trước đó với tư cách như hfnet, địa chỉ mới của tôi sẽ là hfnet.arpa. Đó chỉ là tạm thời, trong quá trình chuyển đổi, các quản trị viên máy chủ đã có một sự lựa chọn rất quan trọng để thực hiện: đó là lựa chọn trong năm tên miền cấp cao mà họ sẽ chấp nhận? ".com", ".gov", ".org", ".edu" Hoặc ".mil".

Khi chúng ta nói DNS là thứ bậc, những gì chúng tôi hiểu là có một tập các máy chủ DNS gốc phải chịu trách nhiệm về những người sẽ lần lượt trả lời làm thế nào để có được đến google.com, ví dụ, chuyển đổi .com thành các tên miền .com,. Các vùng DNS gốc của internet bao gồm mười ba cụm máy chủ DNS. Chỉ có 13 cụm máy chủ, bởi vì đó là tất cả chúng ta có thể phù hợp trong một gói tin UDP đơn. Trong lịch sử, DNS đã hoạt động thông qua các gói UDP, có nghĩa là đáp ứng một yêu cầu không thể có nhiều hơn 512 byte.

Các máy chủ DNS gốc hoạt động rất an toàn, bên trong lồng nhốt. Một đồng hồ trong vùng an toàn nhằm đảm bảo camera giám sát không bị lặp lại. Thực tế được đưa ra là DNSSEC đã bị chậm triển khai như thế nào, một cuộc tấn công trên một trong những máy chủ có thể cho phép kẻ tấn công để chuyển hướng tất cả lưu lượng truy cập Internet cho một phần của người sử dụng. Điều này, tất nhiên, làm cho bộ phim trộm cướp tuyệt vời nhất đã không bao giờ được thực hiện.

Không hề ngạc nhiên rằng các tên máy chủ cho các TLDs cấp cao cấp không thực sự thay đổi tất cả những gì thường diễn ra. 98% yêu cầu gốc máy chủ DNS nhận được là do lỗi, thường xuyên nhất vì khách hàng gặp rắc rối mà không nhớ cache đúng kết quả của họ. Điều này đã trở thành một vấn đề như vậy mà một số nhà khai thác DNS gốc đã phải quay lên máy chủ đặc biệt chỉ để trở về 'đi' cho tất cả những người yêu cầu tra cứu DNS ngược trên các địa chỉ IP của họ.

Các máy chủ tên TLD được quản lý bởi các công ty và chính phủ khác nhau trên toàn thế giới (Verisign quản lý .com). Khi bạn mua một tên miền .com, khoảng 0,18 $ tại ICANN, và $ 7,85 ở Verisign.

Protocol

Thành phần đầu tiên của URL là giao thức được sử dụng để truy cập vào nó. Giao thức pổ biến nhất là http, là một giao thức truyền tải tài liệu đơn giản do Tim Berners-Lee phát minh ra. Nó không phải là sự lựa chọn duy nhất. Một số người tin rằng chúng ta chỉ nên sử dụng Gopher. Thay vì là mục đích chung, Gopher được thiết kế đặc biệt để gửi dữ liệu có cấu trúc tương tự như cách một cây tập tin có cấu trúc.

Ví dụ, nếu bạn gửi yêu cầu tới /cars, nó sẽ trả về:


1Chevy Camaro             /Archives/cars/cc     gopher.cars.com     70
iThe Camero is a classic  fake                  (NULL)              0
iAmerican Muscle car      fake                  (NULL)              0
1Ferrari 451              /Factbook/ferrari/451  gopher.ferrari.net 70

trong đó xác định hai chiếc xe, cùng với một số dữ liệu về chúng và nơi bạn có thể kết kối tới để lấy thêm thông tin.

gopher.jpg

Giao thức phổ biến đầu tiên là FTP, nó được tạo ra vào năm 1971, như một cách để liệt kê và tải các tập tin từ máy tính từ xa. Gopher là một phần mở rộng hợp lý về điều này, ở chỗ nó cung cấp một danh sách tương tự, nhưng bao gồm các tiện ích cho phép đọc các siêu dữ liệu về đầu vào. Điều này có nghĩa là nó có thể được sử dụng cho mục đích tự do nhiều hơn như một nguồn tin hoặc một cơ sở dữ liệu đơn giản. Tuy nhiên, sự tự do và sự đơn giản được đặc trưng bởi HTTP và HTML.

HTTP là một giao thức rất đơn giản, đặc biệt là khi so sánh với FTP hay thậm chí là giao thức HTTP/2 đang dần trở nên phổ biến hiện nay. Trước hết, HTTP là hoàn toàn dựa trên văn bản, chứ không phải được cấu tạo bởi các dãy nhị phân (điều mà cso thể sẽ làm cho nó hiệu quả hơn). Tim Berners-Lee đã tiên lượng chính xác rằng việc sử dụng một định dạng văn bản sẽ dễ dàng hơn cho các thế hệ lập trình viên phát triển và gỡ lỗi các ứng dụng dựa trên HTTP.

Giao thức HTTP khá đơn giản:

Request:

GET /index.html HTTP/1.1
Host: www.example.com

Respond:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    Hello World, this is a very simple HTML document.
  </body>
</html>

Bạn có thể tạo nên giao thức riêng nếu bạn thích, tích hợp các bytes vào thông điệp TCP theo cách bạn muốn. Yêu cầu duy nhất là bất cứ ai bạn đang trao đổi cùng phải nói chung một ngôn ngữ. Vì lý do này, các giao thức trên đã được chuẩn hóa rộng rãi.

Port

Lịch trình của Gopher và HTTP có thể được chứng minh bởi số cổng mặc định của chúng. Các dòng thời gian của Gopher và HTTP có thể được chứng minh bằng số cổng mặc định của họ. Gopher là 70, HTTP 80. Các cổng HTTP được đăng ký (có thể do Jon Postel tại IANA) theo yêu cầu của Tim Berners-Lee khoảng giữa năm 1990 và 1992.

Việc đăng ký 'số cổng' thậm chí ra đời trước Internet. Trong giao thức NCP ban đầu cung cấp các địa chỉ từ xa ARPANET được xác định bởi 40 bit. 32 bit đầu tiên xác định các máy chủ từ xa, tương tự như cách một địa chỉ IP hoạt động ngày hôm nay. 8 bit cuối cùng được gọi là AEN (Another Eight-bit Number) và được sử dụng bởi máy tính từ xa để phân biệt các thông điệp khác nhau được gửi từ các địa chỉ khác nhau.

Chúng nhanh chóng yêu cầu người dùng đăng ký các 'socket numbers' để hạn chế va chạm có thể xảy ra. Khi số cổng các đã được mở rộng đến 16 bit với giao thức TCP/IP, nơi mà quá trình đăng ký đã được tiếp tục.

Trong khi các giao thức có một cổng mặc định, nó cho phép các cổng vào còn được xác định bằng tay để cho phép phát triển cục bộ và lưu trữ của nhiều dịch vụ trên cùng một máy. Tư duy tương tự như vậy cũng là cơ sở tiền đề cho các trang web với www. Vào thời điểm đó, dường như không một ai được cấp quyền truy cập vào thư mục gốc của tên miền của họ. Nếu bạn cung cấp cho người sử dụng tên máy chủ cụ thể của bạn (dx3.cern.ch), bạn đang gặp rắc rối khi bạn cần phải thay thế máy đó. Bằng cách sử dụng một tên miền phụ thông thường (www.cern.ch), bạn có thể chỉ cần thay đổi những gì là cần thiết.

The Bit In-between

Như bạn đã biết, cú pháp URL đặt một dấu gạch chéo kép (//) giữa các giao thức và phần còn lại của URL:

http://eager.io

Đó là dấu gạch chéo kép được thừa hưởng từ hệ thống máy tính Apollo đó là một trong những hệ thống máy trạm đầu tiên. Các nhóm Apollo đã có một vấn đề tương tự với Tim Berners-Lee: họ cần một cách để tách một đường dẫn từ các máy con đường đó là trên. Giải pháp của họ là tạo ra một định dạng đường dẫn đặc biệt:

//computername/file/path/as/usual

Và Tim Berners-Lee sao chép chương trình đó. Bây giờ anh hối hận vì quyết định đó, muốn các tên miền (trong trường hợp này example.com) là phần đầu tiên của đường dẫn:

http:com/example/foo/bar/baz

Phần kết

Cho đến nay, chúng ta đã đề cập các thành phần của một URL cho phép bạn kết nối với một ứng dụng cụ thể trên một máy chủ từ xa ở đâu đó trên Internet. Điều thứ hai, và cũng là cuối cùng bài của loạt bài này sẽ bao gồm những thành phần của URL được xử lý bằng ứng dụng từ xa để trả lại cho bạn một phần cụ thể của nội dung, Path, Fragment, truy vấn và Auth.

Tôi đã từng muốn gộp tất cả các nội dung trong một bài viết duy nhất, nhưng chiều dài của nó đã rất có thể sẽ khiến quý độc giả ngao ngán. Bài viết thứ hai là hoàn toàn xứng đáng với thời gian của bạn bỏ ra. Nó bao gồm những thứ như các hình thức được coi như có thể thay thế cho các URL Tim Berners-Lee, lịch sử của các hình thức ngày và cách mà cú pháp tham số GET đã được quyết định, và trải qua mười lăm năm bài cãi về việc làm như thế nào để cho URL đó sẽ không thay đổi. Nếu bạn quan tâm, bạn có thể đăng ký dưới đây để nhận được thông báo khi bài viết đó được phát hành.