互联网怎么工作 · 计算机入门
打开一个网站时,网页是怎么在一秒之内,从地球另一边来到你屏幕上的?
课程目录为什么需要它
你每天都在用互联网,以后写的程序也几乎都要和它打交道。
知道一次访问的基本过程(地址、名字、数据包、服务器),就能看懂「找不到服务器」这样的提示,认出不安全的网站,以后还能自己做网站。
直觉理解
互联网是由无数台计算机通过电缆、光纤和无线电(Wi-Fi、移动网络)连成的一张大网。在上面传东西,很像寄信:
- 每台设备都有一个地址,叫 IP 地址,比如
203.0.113.7。数据靠它找到正确的计算机,就像信靠门牌地址找到人家。 - 名字比数字好记,所以我们用
example.com这样的域名。一个叫 DNS 的服务就像手机里的通讯录:查一个名字,得到对应的号码。 - 大东西拆成小块来传。一个网页或一张照片会被切成很多数据包 Packet,每个包上写着要去哪里和一个编号。路由器 Router 一站一站地把包往前传。不同的包可能走不同的路、乱序到达;你的计算机按编号把它们重新排好,缺了哪个就再要一次。
- 浏览器提问,服务器回答。你的浏览器(Chrome、Safari、Edge……)发出一个请求:「请把这个网页发给我。」服务器 Server 是一台一直开着、随时等着的计算机,它把网页发回来。这段对话的规则叫 HTTP。
一个网址(URL)分成几部分:
https:// | www.example.com | /pets/cats.html |
|---|---|---|
| 怎么对话(协议) | 哪台服务器(域名) | 服务器上的哪个页面(路径) |
https 里的 s 表示这段对话是加密的:中间的人既看不到,也改不了,浏览器会显示一把小锁。没有小锁的页面,千万别输密码。
定义
互联网 Internet
The internet is a global network of networks that lets computers anywhere exchange data.互联网是由许多网络连成的全球网络,让各地的计算机可以互相交换数据。
IP 地址 IP address
An IP address is a number that identifies a device on a network so that data can be delivered to it.IP 地址是标识网络上一台设备的编号,数据靠它送到正确的设备。
域名系统 DNS
DNS (the Domain Name System) translates domain names such as example.com into IP addresses.DNS(域名系统)把 example.com 这样的域名翻译成 IP 地址。
示例
查一个名字
动手试试这台机器是一个迷你 DNS:一张名字和地址的对照表。查一查 shop.net,再故意打错成 scool.edu,你会看到和浏览器一样的提示。
dns = {
"example.com": "203.0.113.7",
"school.edu": "198.51.100.20",
"shop.net": "192.0.2.55",
}
name = "school.edu" # change me 改这里
if name in dns:
print(name, "is at", dns[name])
else:
print("Server not found:", name)- L2通讯录:每个名字对应一个 IP 地址。
example.com → 203.0.113.7 - L6要查的名字。
name = "school.edu" - L7这个名字在通讯录里吗?
yes - L8回答它的地址。
school.edu is at 198.51.100.20
切成数据包
动手试试一条消息被切成编了号的小块,每块 4 个字符(真实的数据包大约能装 1500 个字节)。把消息写长一点,或者改改每块的大小。
message = "See you at six" # change me 改这里
size = 4
number = 1
for start in range(0, len(message), size):
print("packet", number, "[" + message[start:start + size] + "]")
number = number + 1- L1要发送的消息。
message = "See you at six" - L2每个包装 4 个字符。
size = 4 - L51 号包装前四个字符,空格也算。
packet 1 [See ] - L5最后一个包装剩下的部分。
packet 4 [ix]
重新排好顺序
动手试试数据包到达的顺序是 3、1、4、2。多亏了编号,你的计算机还是能把消息拼回来。
arrived = [(3, "at s"), (1, "See "), (4, "ix"), (2, "you ")]
arrived.sort()
message = ""
for number, piece in arrived:
message = message + piece
print(message)- L1按到达顺序排列的包:(编号,内容)。
3, 1, 4, 2 - L2按编号排序。
1, 2, 3, 4 - L5把各块拼起来。
message = "See you at six" - L6消息完整了。
See you at six
常见错误
互联网不只是网页
网页(在浏览器里看的网站)只是跑在互联网上面的一种东西。电子邮件、视频通话、网络游戏和 App 更新,用的也都是互联网。
小锁表示加密,不代表可信
HTTPS 只说明中间的人看不到、改不了数据。骗子网站也可以有小锁,所以还要核对域名一字不差:examp1ebank.com(里面是数字 1)不是 examplebank.com。
「云」就是别人的电脑
「存在云上」的文件,其实放在叫数据中心的大楼里的服务器上,你通过互联网访问它们。没有网络就拿不到,除非你的设备上也存了一份。
小测验
1. DNS 是做什么的?
查看答案
答案:A
DNS 就是互联网的通讯录:给它名字,它给你 IP 地址。
2. 在 https://www.example.com/news/today.html 里,哪一部分是域名?
查看答案
答案:B
域名夹在 https:// 和后面第一个 / 之间,它说明是哪台服务器;后面的部分说明是哪个页面。
3. 一张照片的数据包乱序到达了。会怎样?
查看答案
答案:B
数据包编号就是为了这个。只有丢了的包才需要重新要一次。
要点
- 设备之间靠 IP 地址找到对方;DNS 把
example.com这样的名字翻译成地址。 - 数据拆成编了号的数据包传输,到了以后再拼回去。
- 浏览器提问,服务器回答。HTTPS 让对话保密,但域名还是要自己核对。
动手练习
3 道小练习:先想一想,再动手改一改看看结果,最后自己来一次。提交马上告诉你对不对。
- 想一想在哪里登录?
你的银行网站是
examplebank.com,现在要输入密码。哪个地址是安全的? - 改一改给通讯录加一个名字
机器要查
news.org,可是它的通讯录里还没有这个名字,所以打印Server not found。在通讯录里加一行,让
news.org对应198.51.100.99,机器就会打印:news.org is at 198.51.100.99要查的名字保持
news.org不变。 - 自己来一个网页的旅程
把打开
https://example.com的步骤排好顺序:- A 服务器把网页拆成数据包发回来。
- B DNS 把
example.com翻译成 IP 地址。 - C 你输入网址,按下回车。
- D 浏览器向那个 IP 地址发出请求。
- E 浏览器把数据包拼好,显示出网页。
按顺序写出五个字母,例如
ABCDE。
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| Internet | 互联网 | A worldwide network of networks that lets computers exchange data. |
| IP address | IP 地址 | A number that identifies a device on a network, like a street address. |
| DNS | 域名系统 | The system that turns domain names into IP addresses, like a phone book. |
| Packet | 数据包 | A small numbered piece of data sent across a network. |
| Server | 服务器 | A computer that is always on and answers requests from other computers. |
| URL | 网址 | A web address: protocol, domain name and path, such as https://example.com/news. |
| HTTPS | HTTPS 加密连接 | HTTP with encryption, so nobody in between can read or change the data. |