一次网络请求都经历了什么

互联网的发展给人们的生活带来了极大的便利… ,就像我们生活工作中遇到问题就百度一下,打开浏览器,然后在地址栏输入www.baidu.com ,然后enter一下就出来了百度的页面
在这里插入图片描述
看似很简单的一个操作,但是背后牵扯的知识却非常的复杂,作为技术人,我们需要对背后知识有所了解,接下来我们就以这个案例来了解下浏览器是怎样通过网络获得这个页面的。

1.我们在浏览器地址栏输入www.baidu.com,然后enter一下,浏览器会访问自身的DNS缓存信息,通过域名来查找对应的ip,如果没找到,就去操作系统的DNS缓存中查找,如果还是没有找到就是去host文件中查找了,最后是去DNS服务器获取服务器端的ip地址,浏览器同时会将请求信息打包成http请求,通过socket将HTTP请求信息给了网络传输层(这里是使用的TCP协议),浏览器这层叫做应用层(使用的协议其实是HTTPS,这里将它简化,使用HTTP协议)。
在这里插入图片描述
2.当TCP收到HTTP请求信息会在其外面套上一层TCP头信息,这个TCP头里面有两个比较重要的参数,一个是Destination Port目的地端口,也就是百度服务器监听的端口,这个端口默认是80,除非你在浏览器地址栏输入访问地址的时候在域名后面加上端口信息,例如:www.baidu.com:8080 ,还有一个参数是Source Port 本机端口(这里我们为了方便理解省略了建立连接的过程,也就是三次握手,这个Source Port其实就是在建立连接的时候操作系统为该连接分配的端口,这个端口是16位的,最大到65535),这里Source Port 是35616(操作系统分配的),然后带着这个数据 ,还有本机ip地址,服务端ip地址传给 网络层(使用IP协议)
在这里插入图片描述
3.IP协议收到TCP数据段后,会在其基础上封装一个IP协议头部信息生成网络层的数据报,然后IP协议头部信息中有两个重要的属性,分别是Source IP 与Destination IP,Source IP是本机IP地址,Destination IP是目的地IP地址,也就是我们要请求的服务器IP地址182.61.200.6,同时会判断这目的IP地址是不是本机,如果是的话这个数据就不会发往下一层,如果不是本机地址(其实就是判断目的IP地址与本机IP地址是不是在一个网段上),就会发往网关地址(在我们电脑启动的时候,会被DHCP协议配置IP地址与默认的网关 192.168.1.1),这时候会通过ARP协议(地址转换协议,能够通过IP获取对应主机的MAC地址)获取192.168.1.1主机MAC地址,然后就将数据报发送到数据链路层,也就是MAC层。
在这里插入图片描述
4.数据链路层收到传过来的数据报,会在其基础上封装一个带有MAC头部信息的数据帧,这个头部信息主要有两个重要参数,分别是源MAC地址与目的MAC地址,这里这个源MAC地址就是你电脑网卡的MAC地址(MAC地址占6字节,MAC地址是网络中每台设备唯一的网络标识),目的MAC地址在这里就是网关的MAC地址,然后将数据帧发送到网卡,然后由网卡生成bit流发送到路由器

在这里插入图片描述
5.路由器收到后这些bit流后,路由器的网卡会转成数据帧,交给MAC层,MAC层收到后会取出目的MAC地址然后与当前网卡的MAC对比,如果正确就将抛去MAC头的数据报交给上层处理,也就是交给网络层,这里是IP协议来处理,它会取出这个你这个目的IP地址,然后去它的路由表中去找该IP应该从哪个网口发出去,没有找到的话,就获取下一跳IP地址查ARP表,寻找对应的MAC地址(也就是它上层路由器的IP地址,ARP表中没有的话就发送ARP请求获取对应IP的MAC地址),然后封装IP报文(这个封装,会对源IP地址进行改变,具体怎么改变是由NAT模式决定的),后交给MAC处理,封装成以太网帧,这时候目的MAC地址就是你下一跳的MAC地址。
在这里插入图片描述
6.在传输的过程中,可能或遇到交换机这种二层设备,当数据流传输到交换机的话,会交给数据链路层处理,在该层会将MAC头部信息中的目的MAC地址拿出来去地址表中查找对应的出口,我们知道,交换机有很多的网口,而它这个地址表就维护着某个MAC地址与某个网口的对应关系,这个表的对应关系一开始的时候没有,当有数据从某个网口进来的时候,它就会记录进去某个MAC地址对应某个网口。如果能够找到对应关系,就会转发出去,如果找不到,那就只能广播出去了,往它所有网口都发一遍。
在这里插入图片描述
7.比如说咱们经历了若干的网络设备传输,终于到了某个路由器上匹配目的IP段。这时候路由器会根据ARP表获取对应IP的MAC地址,如果没有的话就使用ARP协议进行请求获取,获取之后,封装目的MAC地址为服务器的MAC地址,然后通过对应网口发送出去。
在这里插入图片描述
8.当服务器网卡收到数据流后,首先会交给交给数据链路层,数据链路层将MAC头取出,目的MAC地址与本机MAC地址进行对比,匹配不上就丢掉,匹配的上就将脱了MAC的数据报交给网络层处理(这里是IP协议),网络层收到数据报之后,将IP头取出,进行IP地址比对,比对的上就交给传输层(TCP协议),传输层根据其中目的端口80,交给80端口的应用,这里比如说是nginx。
在这里插入图片描述
9.当nginx应用收到http信息后,进行处理,知道它要请求这个index.html页面,然后将index.html放到响应体中,封装http信息,交给传输层处理,传输层就是在其基础上封装TCP头部信息,源端口就是nginx监听的端口,这里也就是80端口,目的端口,就是请求的源端口。接着交给网络层处理,源IP就是本机的IP地址,然后目的IP是之前请求来的时候经过路由器处理的公网IP,接着交给数据链路层,在该层,会封装MAC头部信息,源MAC地址就是本机MAC地址,目的MAC地址就是网关MAC地址,最后交给网卡发送出去,然后就顺着来的路又回去了。
在这里插入图片描述

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页