当我们在浏览器输入网址的时候,背后发生了什么事情?

220 阅读5分钟

我们已经知道,李爵士发明了三样东西,那就是URL+http+html,这三样东西构成了万维网的基础,今天来讲讲URL,URL的全称是Uniform Resource Locator,在维基百科上有一个洋气的翻译,叫做**统一资源定位器,**也就是是我们常说的网址,一个完整的URL包含以下几个部分:

用文字描述即为:

  1. 传送协议。
  2. 访问资源需要的凭证信息(可省略)
  3. 服务器。(通常为域名,有时为IP地址)
  4. 端口号。(以数字方式表示,若为默认值可省略)
  5. 路径。(以“/”字符区别路径中的每一个目录名称)
  6. 查询参数。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
  7. 片段。以“#”字符为起点

在域名系统的层次结构中,各种域名都隶属于域名系统根域的下级。域名的第一级是顶级域,顶级域名下一层是二级域名,一级一级地往下。

顶级域名

域名刚被设计出来时,顶级域名主要分成两类:

第一类是国家和地区顶级域ccTLD(Country Code Top-level domains),例如.cn .jp .uk

第二类是通用顶级域 gTLD(general Top-level domains),例如:

  • .gov(源自单词government,现被用于政府的网站)

  • .edu(源自单词education,现被用于各类学校的网站)

  • .com(源自单词company,现在成为全球注册量最大、最通用的域名)

  • .org (源自单词organization,被用于各种非营利组织)

  • .net (源自单词network,当时被定位为网络基础服务提供商)

子域名

顶级域名下面是二级域名,它位于顶级域名的左侧。例如在baidu.com的域名中,baidu是二级域名,再往下,images.baidu.com 就是三级域名。通常情况下,人们基于公司、产品或服务的名称来创建二级域名或更低级别的域名,以方便其他人识别和记忆。

今天,办事处位于美国的互联网名称与数字地址分配机构(ICANN)负责互联网域名空间的开发和架构。只有经过它授权的域名注册管理机构和域名注册商,才能对外界提供顶级域名管理和注册服务。另外,互联网号码分配局(IANA)负责运营域名系统根区域、委派顶级域名的管理,并负责.int和.arpa两个域名的管理。

躺着赚钱的ICANN总部

那域名到底是个什么东东?

我们已经知道,互联网就是由一台台电脑编织成的网络,每一台电脑都有一个IP地址,百度的服务器也是电脑,不过超级大,39.156.69.79就是这台电脑的IP地址,这个地址储存在hosts(主机文件)中,当我们需要从百度获取资料的时候,就相当于先要通过浏览器访问他们服务器进行请求,我们的浏览器就是一个请求工具,接下来就会来到他们的服务器大门,这个服务器就像政务办事处,有65535个办事窗口,也就是端口,浏览器根据协议从80端口请求出html文件,这时候,那台超级电脑就会响应请求,浏览器就会把它们加载到电脑上,并渲染成能够阅读的文字和图片。(强行插入《无敌破坏王2:大闹互联网》这部电影,把这个过程讲的非常形象。)

可是IP地址是一串很难记忆的数字,所以这个时候,就需要有一个更符合人类思维习惯的方式去访问它——也就是通过域名去访问,即baidu.com,那计算机是怎么知道baidu.com是对应39.156.69.79的呢?这个时候DNS服务器就登场了。

DNS(Domain Name System 的缩写)服务器就像这个互联网所有域名和IP的档案局,当输入域名的时候,浏览器就会把域名发给DNS服务器,DNS服务器就会进行检索,把域名转化为IP地址,这个时候就会走一遍上述的流程了。我们常说的DNS劫持,就是在DNS服务器在解析过程中,被第三方加入了一些其他成分(比如一些运营商在一些网页植入的广告),甚至是改变本来的IP地址,可以理解为这个档案局遭到了持刀抢劫,所以在互联网中,坚持不作恶,真的是一个互联网公司的底线。

那怎么才能知道一个网站的IP地址呢?一般可以通过IP查询网站这样的图形界面查询,比如ip38.com,也可以通过ns lookup命令行来查询下面为示例:

[root@localhost ~]# nslookup baidu.com
Server:		192.168.50.1
Address:	192.168.50.1#53

Non-authoritative answer:
Name:	baidu.com
Address: 39.156.69.79
Name:	baidu.com
Address: 220.181.38.148

一个域名有可能对应多个IP地址,也就是说有多台服务器,一般大型公司都会采取这样的策略,防止大量访问造成服务器死机,这个叫负载均衡。在华北和华南,查询到的baidu.com的IP地址就会不一样。与此同时,也有多个域名共用一个服务器的情况,这个叫主机共享。

我们可以通过 ping (Packet Internet Groper)命令来,用来检查网络是否通畅或者网络连接速度情况,可以得出当前网络通信的网络延迟、网络丢包率、网络抖动等等有价值信息。ping 命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。