📚 第二章 TCP/IP基础知识
📄 一句话概括

internet 是「网际网」的通称,Internet 是特指「那个全球的」。 它的定义不是「规模大」,是「用同一套协议、自愿互联」。

📝 本节和前面几节的关系

2.2 讲完了标准,2.3 讲「互联网」这个词本身。 这一节会用到三个真实站点的往返时间,数据是当场测的。

一、两个词,一大一小

中文都叫「互联网」,英文却是两个词:

写法 含义 例子
internet 网际网(通称) 任何互相连起来的网络
Internet 特指全球互联网 你在用的那一个
intranet 内部网 公司内部的那个

第一行那个小写的词是「技术概念」:只要几个网络用统一的协议连起来,就叫一个 internet。 所以一个公司内部跨机房连起来,也是一个 internet。 第二行那个大写的词是「专有名词」:它是「所有 internet 里最大的那一个」, 而且它没有所有者、没有总部、没有总开关。 这个词的首字母大写是唯一能区分两者的地方,所以中文里说「互联网」时,往往要靠上下文判断。

二、定义不在规模,在协议

三个特征,缺一个就不算:

特征 含义 反例
同一套协议 都能跑 IP 专有网络(SNA)
自愿互联 没有强制、没有中心 一个公司的内网
对等开放 任何网络都能申请接入 封闭的行业网

第一行是「技术门槛」:只要你的网络能跑 IP,并且愿意连出去,你就在互联网里。 不需要申请、不需要批准、不需要付费给某个「互联网管理机构」。 你只需要找一个 ISP 买接入。 第二行是「结构特征」:互联网是一堆网络「自愿」连起来的, 所以它没有「上级」可以下一道命令让所有网络改协议。 这就是为什么协议升级那么慢——IPv6 推了二十多年还在过渡期。 第三行解释了一个常见误解:「公司内网」也是一个 internet(网际网), 但它不对外开放,所以不算 Internet 的一部分。 区别不在技术,在「开不开放」。

三、量一下「距离」

「网和网之间」这句话,用往返时间能体会到:

站点 建连毫秒 说明
www.qq.com 53.7 国内,最近
www.python.org 189.1 海外,跨洋
www.example.com 239.1 海外,更远

三个数差几倍,说明它们物理上就不在同一个地方。 而你的机器到它们之间要经过若干个「不同的网络」——每过一个,就是一次「网际互联」。 注意这三个数都是 IPv6 路径上测的:本机走的是 IPv6, 而 IPv6 的路由往往不如 IPv4 成熟,绕远是常事。 所以这个数不能当成「物理距离」的度量,它只说明「路径不一样」。 这也是互联网的一个特点:两点之间的路径不是固定的,路由可以随时变。 所以同一个网站,早上和晚上走的可能完全是两条路。

四、动手 Demo:互联网是「一堆互相连的网络」,先量一下距离

连三个不同地域的站点,各量一次 TCP 建连时间。 这个数不是「物理距离」,是「路径长短」的近似。

import socket, time

for host in ('www.qq.com', 'www.python.org', 'www.example.com'):
    try:
        t0 = time.perf_counter()
        c = socket.create_connection((host, 443), timeout=6)
        ms = (time.perf_counter() - t0) * 1000
        ip = c.getpeername()[0]
        c.close()
        print('%-18s %-28s %.1f' % (host, ip, ms))
    except Exception as e:
        print('%-18s %s' % (host, type(e).__name__))

实跑输出:

--------------------------------------------------------------------
互联网是「一堆互相连的网络」,先量一下距离
--------------------------------------------------------------------
**「互联网」这个词的直观含义,可以用往返时间来体会。**下面连三个不同地域的站点,
各量一次 TCP 建连时间。

  站点                对端 IP                     建连毫秒
  ---------------------------------------------------------
  www.qq.com          240e:97c:2f:201d::12d       53.7
  www.python.org      2a04:4e42::223              189.1
  www.example.com     2606:4700:10::ac42:93f3     239.1

**三个数差几倍,说明它们物理上就不在同一个地方。**
**而你的机器到它们之间,要经过若干个「不同的网络」**——**每过一个,就是一次「网际互联」。**
**注意这一列出来的对端地址全是 IPv6**:**说明本机走的是 IPv6 路径**,
**而 IPv6 的路由往往不如 IPv4 成熟,绕远是常事**——**这也是「能通」与「走得好」是两件事的例子。**
**这就是「互联网(internet)」的字面意思**:**不是「一个网」,是「网和网之间」。**
**所以它没有中心,也没有「总开关」。**

三个数分别是几十、一百多、两百多毫秒:国内最短,跨洋明显变长。 但这不是「距离越远越慢」的严格证明——因为路径可能绕路,而且中间设备的排队也会影响。 注意对端地址全是 IPv6:说明本机走的是 IPv6 路径。 想对比 IPv4 的话,可以强制指定地址族, 做法是在 create_connection 前先 getaddrinfo 挑出 IPv4 地址。 这一列数值波动很大,同一台机器隔几分钟再测可能差一倍。 所以「测一次就下结论」是不可靠的——要测就多测几次看中位数。

30 秒实验

  1. 连跑三次,看三个数的波动有多大。
  2. 把端口改成 80,看建连时间有没有区别。
  3. 想一下:如果某个网站被「墙」了,这个测试会表现成什么?

常见误区

  1. 以为 internet 和 Internet 是一回事。 小写是通称,大写是特指,中文里都译成「互联网」。
  2. 以为互联网有「管理机构」能下命令。 它是自愿互联的,没有总开关,也没有上级。
  3. 以为「往返时间」等于「物理距离」。 路径可以绕路、可以拥塞,这个数只说明「路径长短」。
自测三问(点开对答案) 1. internet 与 Internet 的区别是什么? —— **internet 是「网际网」的通称**(任何互连的网络),**Internet 特指全球互联网**。 首字母大写是唯一区分。 2. 互联网的三个特征是哪些? —— **同一套协议(都能跑 IP)、自愿互联(无中心)、对等开放(谁都能接)。** 缺一个就不算 Internet。 3. 为什么协议升级在互联网上这么慢? —— **因为没有「上级」能下令**:它是一堆网络自愿连起来的,所以只能靠「慢慢渗透」。 IPv6 推了二十多年还在过渡。

下一节讲互联网与 TCP/IP 到底是什么关系。

相关笔记