为什么要有网络协议
生活中,两个人之间进行交流,都说中文,或者都说英文才能进行交流。或者说话之前先打声招呼,才开始对话,这是一种规则
而两个计算机之间进行通信,实现信息的交流,和资源的共享。也是需要遵循一定的规则的,这个规则就是网络协议。
常用的网络协议
- HTTP:超文本传输协议,是用于从服务器传输超文本到客户端的一种协议。
- HTTPS:安全的超文本传输协议,是HTTP的安全版本,使用SSL/TLS协议进行加密传输。
- TCP:传输控制协议,是面向连接的协议,提供可靠的数据传输服务。
- UDP:用户数据报协议,是面向无连接的协议,提供不可靠的数据传输服务。
- DNS:域名系统,是用于将域名转换为IP地址的协议。
- FTP:文件传输协议,是用于从服务器传输文件到客户端的一种协议。
- SMTP:简单邮件传输协议,
- POP3:邮局协议,
- IMAP:互联网邮件访问协议,
- DHCP:动态主机配置协议,
- ARP:地址解析协议,
上面协议有很多,这里不一一列举,下面着重介绍和前端开发接触最多的几个协议:http、tcp、dns
这篇文章先讲讲 DNS 协议。
IP地址
我们在访问其他计算机的时候,需要知道其他计算机的地址,才能与其通信,而在网络协议中,我们通常用IP来表示一个计算机的地址。
在大多数情况下,电脑和计算机是同一个东西。但是计算机不全是电脑,电脑只是狭义的计算机。现在智能家居很火,每个智能家居里面都有一个微型计算机,可以联网,但不能说每个智能家居里面都有一台电脑
IP地址是一串数字,比如192.168.1.1,192.168.1.2,192.168.1.3
IP地址可以分成两大类:
公网IP:公网IP是互联网上的IP地址,可以被互联网上的其他计算机访问。
这里是百度的公网IP地址
这里是必应的公网IP地址
如果我们自己的计算机也有一个公网IP,就可以被世界各地的其他计算机访问了。
私网IP:私网IP是局域网内的IP地址,只能在局域网内访问。比如192.168.1.1,192.168.1.2,192.168.1.3,127.0.0.1
其中127.0.0.1是本地环回地址,表示本机地址,一般用于本地开发。192.168.0.1是指本地局域网的网关的地址,一般是家里路由器
在局域网内部的计算机都会被分配一个局域网IP,通过局域网IP,内部的计算机就可以互相通信了,但是不同局域网的计算机之间是不能通信的,除非有公网IP。
公司内网就是一个局域网,在家里面是访问不了公司内网中的计算机的
但是地址是一串数字,对于人类来说,可读性很差,也很难记,所以就有了域名。
域名
域名是IP的名字,一般是一些特定组合的英文字符:www.baidu.com, www.bing.com.
有了域名之后,我们访问百度,就不需要在浏览器中输入百度服务器的IP了,直接输入www.baidu.com就可以了,多么美好啊
本机也有个域名,叫做localhost,localhost对应的IP地址就是127.0.0.1
域名的格式
域名由多个部分组成,每个部分用点号分隔,比如www.qdsj.com,
从右到左依次是:
- .com 是顶级域名(Top Level Domain,TLD)
- qdsj.com 是二级域名
- www.qdsj.com 是三级域名,其中 www 是子域名前缀
域名级别是从右向左计数的,比如:
- mail.google.com 中,mail 是子域名前缀,google.com 是二级域名,.com 是顶级域名
- shop.taobao.com 中,shop 是子域名前缀,taobao.com 是二级域名,.com 是顶级域名
但是,计算机是如何知道域名对应着哪个IP的呢?这就需要DNS服务了
DNS
DNS 是域名系统,是用于将域名转换为IP地址的协议。在没有域名之前,计算机之间通信是通过IP地址进行通信的。比如我们访问一个网站,我们输入的是域名,而不是IP地址,
http://www.taobao.com
浏览器访问这个淘宝的域名的时候,会先去dns服务器查询这个域名对应的IP地址,然后浏览器会根据IP地址去请求服务器。
注意,一个域名和IP并不是一一对应,完全绑定的,一个域名可能对应不同的IP地址,今天访问的是这个IP地址,明天可能就是另一个IP地址了
DNS 查询过程
当你在浏览器中输入 www.taobao.com 时,DNS 的查询过程如下:
-
浏览器缓存查询
- 首先查看浏览器自身的 DNS 缓存
- 如果有缓存且未过期,直接使用缓存的 IP 地址
-
操作系统缓存查询
- 如果浏览器缓存中没有,会查询操作系统的 DNS 缓存
- 在 Windows 中可以用
ipconfig /displaydns
查看系统的 DNS 缓存
-
本地 hosts 文件查询
- 检查本地 hosts 文件(Windows 系统位于 C:\Windows\System32\drivers\etc\hosts)
- hosts 文件中可以手动设置域名和 IP 的对应关系
-
本地 DNS 服务器查询
- 如果前面都没找到,会向本地 DNS 服务器发起查询
- 本地 DNS 服务器通常是由网络运营商提供的
-
递归查询过程
如果本地 DNS 服务器也没有缓存,会进行以下递归查询:- 先向根域名服务器查询
- 根域名服务器返回顶级域名服务器地址(如 .com 的服务器)
- 向顶级域名服务器查询
- 顶级域名服务器返回二级域名服务器地址(如 taobao.com 的服务器)
- 最终得到 www.taobao.com 的 IP 地址
-
返回结果
- DNS 服务器将查询到的 IP 地址返回给客户端
- 客户端会缓存这个结果,以便下次使用
DNS服务查询过程如下:
不同等级的DNS服务器组合起来一起查询过程:
这个过程看起来很复杂,但实际上通常在几毫秒内就能完成。DNS 查询采用递归查询和迭代查询相结合的方式,既保证了效率,又确保了准确性。
具体过程仅作了解,只需要记住dns是用来将域名转换为IP地址的协议就可以了。
总结:
这这篇文章介绍了前端开发中最常用内容:
- IP 地址
- IP 是计算机在网络中的地址标识
- 分为公网 IP(可以被互联网访问)和私网 IP(局域网内使用)
- 127.0.0.1 是本机地址,192.168.x.x 是常见的局域网地址
- 域名系统
- 域名是 IP 地址的别名,方便人类记忆和使用
- 域名分级:顶级域名(.com)、二级域名(example.com)、子域名(www.example.com)
- localhost 是 127.0.0.1 的域名
- DNS 协议
- 用于将域名转换为 IP 地址
- 查询过程:浏览器缓存 -> 系统缓存 -> hosts文件 -> DNS服务器
- DNS 使用递归查询和迭代查询相结合的方式
这些协议互相配合,共同支撑了互联网的运行。域名系统让我们能用易记的网址访问网站,DNS 协议帮我们找到服务器的实际地址
对前端开发者来说,理解这些协议有助于我们更好地开发和调试 Web 应用。下篇文章我们来了解 TCP,其为整个 HTTP 大厦的基石