更多大厂面试内容可见 -> http://11come.cn
计算机网络面试高频:输入域名会发生那些操作,开放性回答
输入域名之后,会发生哪些操作?
当在浏览器中输入www.baidu.com
并按下回车键时,会触发一系列复杂的网络过程,包括DNS解析、TCP连接建立、HTTP请求和响应等。以下是这个过程中发生的详细步骤,分层次地说明每一个环节,
域名 www.baidu.com
其实最后还有一个点,即 www.baidu.com.
,域名级别从右到左递减,根域名为 .
,顶级域名为 .com
,二级域名为 baidu
,三级域名为 www
1、首先会经过通过 DNS 解析 将域名解析为对应的 IP 地址
在 DNS 解析之前 ,浏览器会先检查是否存在 DNS 缓存,存在则返回
如果没有,之后会检查操作系统是否存在 DNS 缓存,存在则返回(Linux 中可以通过 /ets/hosts
文件设置,可以将域名解析到任意能够访问的 IP 地址)
如果都没有,则会向本地 DNS 服务器发送域名解析请求
DNS 服务器解析过程: 首先,客户端发送一个 DNS 解析请求给【本地 DNS 服务器】,如果本地 DNS 服务器中存在域名与 IP 的映射,就直接返回
如果没有,本地 DNS 服务器会去请求【根域名服务器】解析 www.baidu.com
,根域名服务器发现顶级域名为 .com
,于是将 .com
的顶级域名服务器地址返回
接下来,本地 DNS 服务器会再去请求 .com
的【顶级域名服务器】解析 www.baidu.com
,顶级域名服务器会返回 baidu.com
域名服务器的地址
接下来,本地 DNS 服务器会再去请求 baidu.com
的【权威域名服务器】,该权威域名服务器就会返回 www.baidu.com
域名对应的 IP 地址
经过 DNS 域名解析,客户端就拿到了域名对应的 IP 地址,接下来双方就可以建立 TCP 连接进行通信了
2、双方建立 TCP 连接
客户端拿到了域名对应的 IP 地址,就可以向该 IP 地址发送 TCP 连接建立的请求了,通过 三次握手 双方建立了 TCP 连接,之后就可以进行网络通信了
3、数据传输
当客户端需要发送数据的时候,应用层会发起 HTTP 请求,接下来到了 传输层 ,HTTP 请求的数据就会被封装在 TCP报文 中,并且添加上 TCP 头信息(包含了源、目的端口号、序列号、确认号等信息)
接下来到了 网络层 ,TCP 报文会被封装在 IP 报文 中,并添加上 IP 头信息(包含了源 IP、目的 IP 等信息)
接下来到了 数据链路层 ,IP 报文会被封装在 MAC 报文 中,并添加上 MAC 头信息(包含了源 MAC、目的 MAC 等信息)
接下来到了 物理层 ,到了物理层会将数字信息转为电信号,电信号通过网线进行传输,完成数据发送的功能,这一步通过网卡来完成,即网卡收到数据包之后,将数据转为电信号通过网线发送出去,之后电信号到达了 交换机 ,交换机通过 MAC 报文 头部的 MAC 地址进行数据的转发,之后到达了 路由器 ,路由器会根据 IP 报文 头部的 IP 地址进行数据的转发
之后数据包抵达服务器,服务器对数据包进行一层一层拆分,先将 MAC 报文 的头部拿出来,判断 MAC 地址等信息是否符合,之后将 IP 报文 的头部拿出来,判断 IP 地址等信息是否符合,之后将 TCP 报文 的头部拿出来,判断序列号、端口号等信息是否符合,如果都符合就将这个数据包发送给服务端监听这个端口的应用进程,这就完成了一次请求数据的传递了
当双方数据传输完毕之后,通过 四次挥手 断开双方的 TCP 连接即可
扩展:可以再添加上 HTTPS 中的 TLS 握手阶段
如果使用 HTTPS 通信的话,在 TCP 握手建立 TCP 连接之后,还需要通过 TLS 握手来协商双方加密的 对称密钥 ,可以将 TLS 握手阶段给说一下
那么 TLS 握手的过程总共包含了 4 次通信 ,在 4 次通信之后,TLS 协议也就建立成功了,可以进行 HTTPS 通信了,TLS 握手过程中的 4 次通信如下:
1、第一次通信 ClientHello :客户端向服务端发送加密请求,主要是协商 TLS 版本、随机数(生成后续的对称密钥)
2、第二次通信 ServerHello :服务端向客户端回复,主要协商 TLS 版本、随机数(生成后续的对称密钥)、数字证书(包含公钥)
3、第三次通信 客户端回应 :取出数字证书的公钥,将用于通信的 对称密钥 通过公钥加密发送给服务端
4、第四次通信 服务端最后回应 :使用自己本地的密钥进行解密,得到用于通信的 对称密钥
通过 TLS 握手阶段,双方就可以拿到对称密钥,之后双方就可以使用这个 对称密钥 进行加密通信了