从一个HTTP请求来看网络分层原理
1.HTTP请求的完整过程
问题:当用户在浏览器输入网址回车后,网络协议都做了哪些工作?
1.首先是 浏览器,解析出URL中的域名
2.根据域名获取对应的IP地址,首先从浏览器缓存查看
如果没有从本地hosts(etc/hosts)文件中查看,还没有则从LDNS,RootServer域名服务器,国际顶级域名服务商的DNS层层解析
3.拿到IP地址后,浏览器就可以发起与服务器的三次握手
4.握手建立后,就可以开始组装http请求报文,发送报文
5.服务器收到请求报文后,报文解析,生成响应数据,发送响应数据
6.浏览器收到响应数据之后,开始渲染页面
2.DNS解析 网址成对应服务端IP

3.获取服务器IP地址详细过程:
得到域名后,浏览器先会去解析域名,然后去看下浏览器中有没有域名对应的DNS的相关信息的缓存,有的话我们就能从中拿到服务端S的ip地址,没有的话,会去本地的host文件里看有没有配置,没有配置的话,会发起一个DNS的请求,获取服务器的ip地址(DNS也是一台服务器,也有自己的ip地址,通常是配置在操作系统上的)。
这时应用层会构造一个DNS请求报文,然后应用层会调用传输层的一个接口,因为DNS使用UDP来进行数据的传输,所以应用层会调用传输层的UDP相关的一个协议,实现数据的传输。说白了就是应用层会调用传输层的API,传输层会在DNS请求报文的基础上加一个UDP的请求头,然后传输层会把数据交给网络层,网络层同样的会在UDP的请求报文的基础上再加一个IP的请求头,网络层再把IP请求报文交给数据链路层,数据链路层会实现一个二层的寻址,这时它会把自己的MAC头加上去,并且会把对应的请求报文应该要去交给下一个机器的MAC地址也加上去(会通过网络层的ARP协议去找到,ARP会发送ARP的请求去看下IP地址对应的MAC地址是多少,拿到之后会交给数据链路层),然后通过物理层传出去,通常传到路由器上面。路由器是一个三层的设备,最开始会通过物理层来进行连接,之后物理层把数据交给数据链路层,链路层会看下MAC地址是不是给我的,是给我的就解析,不是就丢弃,解析完后,数据报文在往上面去传输到网络层,网络层会去看下这个数据应该传到下一个路由器的地址是多少,这个时候它会通过运营商的网络接口传到运营商的路由器上面,运营商会有自己的DNS服务器,如果电脑配置的是运营商的DNS的话,会直接去运营商的DNS服务器上去找对应的域名,这个时候就会拿到对应的ip地址,然后开始一个层层的原路返回,直到应用层拿到了返回的报文,也就是拿到了域名对应的IP地址。
这时应用层就会进行HTTP请求报文的发送,这时HTTP会干什么呢?
同样的它会去调用传输层的协议,因为HTTP是基于TCP协议来实现的,所以在调用传输协议的时候,传的是TCP的一些参数,TCP会调网络层的IP协议,IP协议会加IP头,然后数据链路层会加上MAC头,和刚才UDP协议是一样的,会通过物理层和路由器进行数据的传输,这一次携带的是IP地址,所以不用访问运营商的DNS服务器,而是运营商根据IP地址把数据报文传输给目标服务器的运营商,运营商之前有专线进行连接,所以数据到达了服务器的网络环境下,仍然逐层解析,物理层发往数据链路层,链路层判断数据是不是给自己的,是的话就进行解析,链路层发往网络层,判断网络的IP地址是不是自己,是的话进行解析,发往传输层,解析TCP的端口比如80,传输层会把请求报文交给应用层应用程序,如果部署的是Nginx服务器的话,默认去找80端口对应的应用程序,应用层解析报文,构造一个HTTP的响应报文,逐层返回到客户端C。
4.HTTP请求的完整过程

参考链接:https://blog.csdn.net/qq_44073614/article/details/118995139
https://zhuanlan.zhihu.com/p/376592517

浙公网安备 33010602011771号