网址,也叫域名,域名就像一个 IP 地址的可读版本,比如,百度的域名 www.baidu.com,他的 ip 是 110.242.68.3,输入 IP 一样可以跳转到百度搜索的页面,我想没有一个人没去记百度的 IP 吧。其实我们真正访问的就是这个IP。
所以输入网址之后,实际就是将网址解析,查询 IP 地址,然后通过 IP 和端口访问到百度的网站。
解析网址
当输入到地址栏之后,首先浏览器需要对网址进行解析。
首先看一下 URL 的组成,https://www.baidu.com
首先是协议,http 或者 https,
然后 www.baidu.com 就是域名,域名可以理解为 IP 的可读版本。
再然后冒号后面的就是端口。
再后面的是资源路径,表示在服务器上的文件路径。
问号后面的是参数,参数是在发送某些请求时添加在 URL 里的。参数的格式:key=value。
最后井号后面的时锚点。
对 URL 进行解析之后,浏览器就知道了 web服务器,资源地址和资源名,根据这些内容生成 HTTP 的请求信息。
DNS获取真实地址
HTTP 请求信息为被操作系统发送到 web 服务器,但在发送之前,需要通过域名获取到真实的 IP 地址。
打个比方,我们保存联系人都是用名字来保存,很少会有人记住几十个电话号码的。但是我们需要打电话时又不能直接通过名字打电话,手机理解不了这个名字,只能理解电话号码,其实就是手机得知你要打电话,比如你要打给张三,手机查到张三的电话是 10086,然后给 10086打电话。
这里的名字和电话就是域名和 IP 的关系。要想通过域名得到对应的 IP,此时就需要 DNS 服务器了。
DNS 服务器-应用层
从大到小有 根服务器、顶级域服务器、权威服务器、本地服务器
DNS 的工作流程
1. 首先客户端发出来一个 DNS 请求,想要直到 www.server.com 的 IP 地址,发送给本地 DNS 服务器。
2. 本地服务器接受到请求之后,会去缓存中查找是否存在,如果有直接返回即可,如果没有,就会去问根服务器。
3. 根服务器接到请求之后,发现后缀域名是 .com,说你去问问 .com 的顶级域服务器,看看他有没有这个 IP
4. 本地服务器拿着请求找到顶级域服务器,询问是否有该域名的 IP 地址,顶级域服务器也不知道,说你去问问 server.com 的权威服务器。
5. 本地服务器有拿着这个域名找到权威服务器,权威服务器查询之后就把对应的 IP 告诉了本地服务器。
6. 本地服务器将 IP 返回给客户端。
除了上面的迭代式的查询,还有一种递归式的查询,顺序不同,但是这样根服务器的压力会比较大。
同时,浏览器会先看是否存在缓存,如果有缓存就不用发送给本地服务器,直接返回即可。
TCP 传输数据--传输层
获取到 IP 地址后,由于 DNS 只指路不带路,所以需要一个协议栈,将 HTTP 传输工作交给协议栈,协议栈使用 TCP 和 UDP 协议来收发数据。
TCP 报文头部格式,首先有源端口号和目标端口号,相当于导航的出发地和目的地,打车的时候司机才知道到哪接你,送你去哪,你就是数据包。
然后是序列号,主要是为了解决包的乱序问题。
还有确认号,目的是确认是否收到,确保不出现丢包的情况。
状态位,例如 SYN、ACK、RST、FIN分别是连接,应答,重新连接,断开连接。
窗口大小,主要用于流量控制,根据接收端的处理能力限制窗口流量。
值得一提的是,TCP 传输数据前需要进行三次握手建立连接,计算机网络——TCP 协议的三次握手 / 四次挥手-CSDN博客
TCP 是传输层的协议,会给应用层传下来的 HTTP 报文加上 TCP 的头部,头部包含了上面的各类信息,然后将数据包给网络层处理。
IP协议--网络层
IP 协议的主要功能就是寻址和路由,相当于导航,导航最重要的就是起点地址和目的地地址。在 IP 协议中就表现为源 IP 地址和目的地 IP 地址。
还需要记录协议号,表示使用的是 TCP 协议。当目标设备有多个网卡,就会有多个 IP 那么该怎么判断传给哪个网卡,主要是通过 路由表规则来判断,如果都不符合,就会发送给 0.0.0.0。
IP 协议给传输层传下来的 TCP 报文加上 IP 头,之后传递给网络接口层处理。
网络接口层会给 IP 数据报加上MAC头部,用来找到路由器。
最后数据通过网关,交换机,路由器,最终成功发到了服务器。
解析请求
服务器接收到了HTTP请求之后,会对请求进行解析,根据请求的内容执行相应的操作,比如数据库查询,读取文件等。
处理完一系列的请求操作后,服务端会发送 HTTP 的响应报文,客户端接收到了响应之后,同样进行解析,获取到 HTML 文件,图片等数据,然后对其进行渲染,生成网页,同时根据网页中其他的 URL 再次请求服务器,直到网页完全渲染。
最后不再传输数据后,关闭 TCP 连接,通过四次挥手的方式。
总结
1. 地址栏输入 URL
2. 应用层 DNS 协议解析域名的IP地址
3. 网络层 TCP 协议发起连接,传输对应的 HTTP 请求报文,通过每层模型的不同的协议,生成最终的请求数据包并发送给服务器
4. 服务器接收到了请求数据包后,解析请求,并进行处理,比如读取文件,查询数据库,然后生成响应的 HTTP 报文
5. 浏览器接收到了响应报文之后,同样进行解析,获取其中的 HTML 文件,图片视频的 URL等,然后将这些渲染到页面上,同时根据获取到的图片视频等的 URL 再次请求服务器,直到所有 URL 都解析完成,然后将页面所有内容都渲染完毕。
6. 结束数据传输可以断开 TCP 的连接。