一、网络分层模型
当A主机和B主机通信时,在网络中会存在数据丢包、数据重复、数据完整性校验、数字转换模拟信号(无线转光纤等)等问题,为了简化网络的复杂性,因此网络通信的不同方面被分解为多层次结构,不同层次结构中定义标准的接口,并且每一层只与紧挨着的上层或者下层进行通信,将网络分层,这样就可以修改替换某一层的软件,只要层与层之间的接口保持不变,就不会影响其它层。
- OSI(Open System InterConnetion Reference Model):开放系统互联参考模型
- TCP/IP协议族
![](https://img-blog.csdnimg.cn/d9e8cc670f9847109c7a1637f4c90740.png)
![](https://img-blog.csdnimg.cn/55feb39fb8864d5a9c58d334a2593a6e.png)
二、HTTP请求过程
![](https://img-blog.csdnimg.cn/542c6580fb1f46c2952f38822dbbc3ff.png)
1.如图有个静态的html在右上角的服务器上,当客户端进行请求访问服务器时
2.首先把域名解析成ip地址,先去浏览器中查看有没有DNS解析该域名的缓存,如下可以查看谷歌浏览器中域名IP的解析
chrome://net-internals/#events
3.如果没有则去本地域名解析文件hosts中查看
4.如果没有接着发起一个DNS服务的请求到最近的DNS服务器,最近的DNS服务器没有就会继续发送给上层DNS服务器,最终会发送到根DNS服务器上处理,返回时各个DNS服务器也会保存对应配置,以便下次解析
5.得到服务器ip后,客户端发起请求与服务器进行三次握手
6.三次握手后会组装http请求报文发送给服务器,服务器收到请求报文之后进行解析处理,生成并返回响应数据
7.客户端得到响应数据后渲染出页面
8.四次挥手关闭连接
- 发送HTTP/DNS请求过程:应用层构造一个HTTP请求报文,然后应用层调用传输层的接口(一个socket API),传输层在HTTP报文基础上添加一个TCP请求头,再发送给网络层,网络层也在TCP请求报文基础上添加一个IP的请求头后发送给数据链路层,数据链路层把ARP协议获得服务器的MAC地址和自己的MAC地址加到请求报文上,最终通过物理层传输出去。
- 解析HTTP/DNS请求过程:物理层获得HTTP请求后,会发送到数据链路层,数据链路层会判断该请求中包含的服务器MAC地址是不是自己的,如果是再解析并发送到网络层,网络层判断对应IP是不是自己,然后解析发送给传输层,传输层会解析对应端口,最后把请求报文发送给端口对应的应用程序。