Все ли домены технически заканчиваются на «.»?
Да, если вы посмотрите на основные RFC, связанные с DNS, потому что любое имя там передается с конечным байтом значения 0, который кодирует корень, также известный как конечная точка в формате «представления».
См. раздел 3.1.5 RFC 1035:
NAME доменное имя, представленное в виде последовательности меток, где
каждая метка состоит из октета длины, за которым следует
количество октетов. Имя домена заканчивается
октет нулевой длины для нулевой метки корня.
Вот почему при использовании копать землю
или записывая файлы зон, вы видите, что имена заканчиваются точкой в конце, чтобы устранить любую двусмысленность.
Теперь все зависит от контекста. В URL-адресах вы пишете имена хостов без точки в конце, и это работает, потому что подразумевается, что они абсолютны.
Вы можете проконсультироваться RFC 8499 который теперь является стандартным справочником для всего, что связано с терминологией DNS.
В нем говорится следующее:
Формат представления имен в глобальной DNS представляет собой список.
меток, упорядоченных по убыванию расстояния от корня, закодированных
как ASCII, с "." символ между каждой меткой. В
формате представления, полное доменное имя включает
корневая метка и соответствующая разделительная точка. Например, в
формат представления, полное доменное имя с двумя
некорневые метки всегда отображаются как «example.tld». вместо
"пример.tld". [RFC1035] определяет метод отображения октетов.
которые не отображаются в ASCII.
Общий формат отображения используется в приложениях и бесплатных
текст. Это то же самое, что и формат презентации, но показывающий
корневая метка и "." прежде чем это необязательно и редко
сделано. Например, в обычном формате отображения полностью квалифицированный
доменное имя с двумя некорневыми метками обычно отображается как
«example.tld» вместо «example.tld.». Имена в общем
формат отображения обычно пишут так, что
направленность системы письма представляет метки по
уменьшающееся расстояние от корня (поэтому и в английском, и в
Язык программирования C метка корневого домена или домена верхнего уровня (TLD)
в упорядоченном списке самый правый; но на арабском может быть
самый левый, в зависимости от местных правил).
А позже определяется полное доменное имя и подробно рассказывается о реальной проблеме, связанной с контекстом:
Полное доменное имя (FQDN): часто это простой способ
сказать то же самое, что и «доменное имя узла», как указано
выше. Однако термин неоднозначный. Строго говоря, а
полное доменное имя будет включать все метки, в том числе
метка корня нулевой длины: такое имя будет записано
"www.example.net." (обратите внимание на завершающую точку). Но, поскольку каждый
имя в конечном итоге имеет общий корень, имена часто пишутся
относительно корня (например, "www.example.net") и по-прежнему
называется «полностью квалифицированным». Этот термин впервые появился в [RFC819].
В этом документе имена часто пишутся относительно корня.
Необходимость в термине «полное доменное имя» исходит из
наличие частично определенных доменных имен, которые являются именами
где одна или несколько последних меток в упорядоченном списке
опущен (например, доменное имя "www" относительно
«example.net» идентифицирует «www.example.net»). Такие родственные имена
понимаются только по контексту.
Что касается:
При каких сценариях вы увидите домен, оканчивающийся на «.» как "google.com"?
Легко, сделайте любой DNS-запрос:
$ dig NS google.com +noall +ans
google.com. 3ч9м51с В NS ns4.google.com.
google.com. 3ч9м51с В NS ns2.google.com.
google.com. 3ч9м51с В NS ns3.google.com.
google.com. 3ч9м51с В NS ns1.google.com.
Обратите внимание, что результаты были бы точно такими же, если бы я использовал google.com.
так как копать землю
является DNS-клиентом и, следовательно, ожидает, что все имена будут абсолютными (поэтому конечная точка не является обязательной).
Вы также можете добавлять точки к любому имени и, следовательно, иметь такие URL-адреса, как https://www.google.com/
. Для плоскости DNS будет то же самое. Так и для IP и TCP тоже. Для TLS должно быть так же, если нет ошибок в реализациях. На уровне HTTP/HTTPS правильный сервер будет работать, но обратите внимание, что вы можете столкнуться с ошибками только из-за этого (и, следовательно, с отображением другой страницы, отличной от обычной, или с ошибкой).
То же самое для адресов электронной почты и везде, где вы используете имена.
И если вы хотите задавать вопросы, то да, по определению есть только один корень... по крайней мере, в теории (см. RFC 2826 «Технический комментарий IAB об уникальном корне DNS»). Каждая сеть (от локального дома до даже полного состояния) может определять локальный корень, а другие протоколы определяют имя, которое выглядит как корень, но не на самом деле (например: эт
или же кусочек
). Но в этот момент вы выходите на политические арены, а не на технические.