📚 第五章 IP协议相关技术
📄 一句话概括

域名用点分隔,从右往左读:最右是顶级域,越往左越具体。 硬限制只有两条:单个标签 63 字节、整个域名 255 字节。

📝 本节和前面几节的关系

5.2.2 讲了 DNS 的来历,这一节讲「名字的语法」。 4.3.1 的 IP 写法是「四段数字」,域名的「八段以内」正好相反。

一、从右往左读

写的时候从左往右,读的时候从右往左: .com 是「商业机构」,baidu 是「谁」,www 是「哪台机器」。

域名 层级数 从右往左怎么读
www.example.co.jp 4 jp → co → example → www
mail.google.com 3 com → google → mail
a.b.c.d.cn 5 cn → d → c → b → a

第三行故意写得夸张,说明「层级没有上限」:规范只限制长度,不限制层数。 但层数越多,解析要走的路越长——每多一层,就多一次「问下一级」的往返。

二、两条硬限制

规范里能称得上「硬」的限制只有两条:

限制 数值 为什么
单个标签 最多 63 字节 DNS 报文里长度字段的约定
整个域名 最多 255 字节 报文空间有限
字符集 字母数字和连字符 早期兼容性考虑

第一行那个 63 是「63 个字节,不是 63 个字符」: 所以中文域名要先转成 punycode(xn-- 开头),一个汉字占 3 字节,能放的字数就少了。 第三行「只能字母数字和连字符」 解释了为什么域名里不能有下划线——虽然有些老系统偷偷用过,但那是不合规的。

三、顶级域分两类

通用顶级域(gTLD)和国家顶级域(ccTLD):

类别 例子 谁管
通用 com、org、net、info ICANN 授权
国家 cn、jp、uk、de 各国机构
新通用 app、dev、shop 2012 年后开放

第三行「2012 年后开放」是个分水岭:在这之前顶级域只有二十几个, 之后一次放开了上千个——所以现在看到 .xyz、.top 都不奇怪。 「.com.cn」是两级不是一级:cn 是国家顶级域,com.cn 是它下面的一层。 所以「在中国注册 .com.cn」和「在国际注册 .com」是两件不同的事,管理的机构也不同。

四、动手 Demo:域名是从右往左读的

把几个域名按点拆开,看层级数、顶级域,以及反过来读是什么样。 注意 a.b.c.d.cn 这种五层域名是合法的。

for name in ('www.example.co.jp', 'mail.google.com', 'a.b.c.d.cn'):
    p = name.split('.')
    print(len(p), p[-1], '->'.join(reversed(p)))

实跑输出:

--------------------------------------------------------------------
域名是从右往左读的
--------------------------------------------------------------------
**域名的层级藏在点里**:**最右边是顶级域,越往左越具体。**
**读的时候要从右往左,和写的时候相反。**

  域名                  标签数     顶级域     从右往左读
  --------------------------------------------------------------
  www.example.co.jp     4          jp         jp→co→example→www
  mail.google.com       3          com        com→google→mail
  a.b.c.d.cn            5          cn         cn→d→c→b→a

**第三行那个 `a.b.c.d.cn` 不是瞎写的**:**它合法,说明域名可以有四层以上。**
**规范的硬限制只有两条**:**单个标签最多 63 字节,整个域名最多 255 字节。**

**算一下这两个限制的含义**:
**单标签 63 字节,意味着「一级能塞下 63 个英文字母」**;
**总长 255 字节,意味着最多约 127 个标签(算上点)**。

**顶级域分两类**:**通用顶级域(com、org、net、info)和国家顶级域(cn、jp、uk)。**
**所以「.com.cn」是「中国的商业机构」**——**它是两级,不是一级。**
**这一点在国内注册域名时经常被搞混。**

'->'.join(reversed(p)) 这一行就是「从右往左读」的代码版: 先 split 拆开,再 reversed 反转,最后拼起来。 这个顺序和 DNS 的查询顺序是一致的——先找 cn,再找 d,再找 c…… 「层数没有上限」这句话要配一个实践建议:一般不超过四层。 因为每多一层,解析时就多一次「问下一级」,而每次往返都是几十毫秒。 顶级域这一列可以直接用来判断「这是什么类型的站」:.gov 是政府、.edu 是教育、.mil 是军事, 这些是「受限顶级域」,申请要审资格。 所以「看到 .gov.cn 就默认它可信一点」是有依据的。

30 秒实验

  1. 算一下:www.example.co.jp 有几层?顶级域是什么?
  2. 想一下:为什么单个标签限制 63 字节而不是 63 个字符?
  3. 想一下:.com.cn 和 .com 有什么区别?

常见误区

  1. 以为「域名从左往右读」。 从右往左,最右是顶级域。
  2. 以为「域名层级有限制」。 层数不限,只限制单标签 63 字节和总长 255 字节。
  3. 以为「.com.cn 是一级」。 是两级,cn 是顶级域,com 是它下面的。
自测三问(点开对答案) 1. 域名应该从哪个方向读? —— **从右往左**:先顶级域,再逐级向左到主机名。 2. 域名的两条硬限制是什么? —— **单个标签最多 63 字节,整个域名最多 255 字节。** 3. 通用顶级域和国家顶级域有什么区别? —— **通用的按用途(com、org),国家的按地域(cn、jp)**,管理机抅也不同。

下一节看一次查询到底走了几步。

相关笔记