一、URL
URL(Uniform Resource Locator),统一资源标识符,是万维网服务程序上用于指定信息位置的表示方法,最初由万维网之父李爵士(Tim Berners-Lee)发明用来作为万维网的地址。我们打开浏览器输入网址,实际上就是输入 URL。
一个完整的 URL 包括协议、域名、端口号、路径、查询字符串、锚点,以下面这个 URL 为例:

- https:// --- 协议
- www.baidu.com --- 域名
- /s --- 路径
- ?wd=hello&rsv_spt=1 --- 查询字符串
- #5 --- 锚点
以上 URL 中并没有端口号,因为在使用 https 协议时,默认的端口号是 443,浏览器会自动识别并填充。
1.1 协议
协议就是要访问的资源的传输协议,对于网页的传输,一般为 http 协议或 https 协议。
1.2 域名
域名简单来说其实就是对 IP 的一种别称,在互联网中每个设备都会有一个独一无二的 IP,即 IP 和设备是一一对应的。要想访问互联网中的另一台设备,首先要通过 IP 去确定目标。
而 IP 是由一串无规律的数字组成的,难以人为记忆,而且 IP 可能会随着设备的重启而更新,也就是说,虽然 IP 和设备一一对应,但是每个设备的 IP 却未必是固定的,这就给通过 IP 去连接设备带来很多不便。
域名就是为解决这一麻烦而产生的,设定一个固定不变的域名,在 IP 和域名之间建立一种映射关系,这样我们只需要记住域名就可以连接到其对应的设备了。
比如,www.baidu.com 就是一个域名。其中,com 是顶级域名,baidu.com 是二级域名,www.baidu.com是三级域名。但是需要注意的是,baidu.com 和 www.baidu.com 是不同的域名,后者仅仅是前者的子域名,除此之外它们没有任何关系,因此它们可以属于不同的所有者。也就是说,baidu.com 和 www.baidu.com 完全有可能对应不同的设备。
此外,域名和 IP 也不一定是一一对应的。一个域名可以对应多个 IP,即一个域名对应多台设备,这样可以减轻单一设备的负载压力,称为均衡负载。多个域名还可以对应同一个 IP,即一台设备可以供多个服务提供方使用,这称为主机共享。
那么问题来了,访问另一台设备终究是要靠 IP 的,如何通过域名去确定 IP 呢?答案就是利用 DNS,这将在后文中介绍。
1.3 端口号
通常,一台机器往往不止提供一种服务,比如一个服务器可以同时提供HTTP、HPPTS、FTP等服务,那么提供不同的服务就需要不同的“窗口”,称之为端口(Port)。
一台机器共有65535个端口,前1024个端口号所对应的服务已经约定好,行成了一种标准,比如 HTTP 服务用80端口,HTTPS 服务用443端口,FTP 服务用21端口。
在连接另一台设备的时候,IP 和端口号缺一不可。但是在浏览网页的时候,之所以不用输入端口号也能正常访问,是因为浏览器自动帮我们填充了端口号。
1.4 路径
同一个域名下,往往会有很多个页面,路径是用来确定不同页面的位置的,就像本地设备中不同的文件有不同的路径一样。
1.5 查询字符串
查询字符串的作用是在同一个路径下去访问不同的内容,比如搜索引擎的关键字,就用到了查询字符串。
1.6 锚点
锚点用来标定当前页面下的位置,不同的锚点对应页面的不同位置,实现在当前页面内的定位跳转。
需要注意的是,锚点并不会传给服务器,它只是供浏览器在本地使用的。
二、DNS
DNS(Domain Name System),域名系统,其作用就是查询域名所对应的 IP,DNS 服务一般由网络运营商提供。
浏览器在访问一个域名时,首先向 DNS 服务器发请求获取域名对应的 IP,得到 IP 后再去向这个 IP 请求相应的页面。
我们可以用nslookup命令来通过 DNS 服务器查询域名对应的 IP:
nslookup baidu.com

ping命令也可以查询 IP:
ping baidu.com
