从一个HTTP请求来研究网络分层原理

1.HTTP请求过程


从两台主机,往往是通过非常多的网络设备连到一起的,经过这么多的网络设备肯定会发生很多的问题吧,例如数据丢包数据重复等等等等,所以在网络的传输中是有非常多的问题需要解决的


2.网络分层有两种结构:

  • OSI:开放系统互联参考模型
  • TCP/IP 协议族

为了简化网络的复杂度,网络通信的不同方面被分解为多层次结构

3.一个HTTP请求的分层解析流程

分析:

1.首先我们在服务器部署了一个静态页面
2.这时候我们需用通过公网来访问服务器,既然要访问服务器,浏览器就要通过你的域名来解析,看看浏览器里面有没有域名对应的DNS相关信息的缓存,如果有就能直接拿到服务端的IP地址,没有的话要去你本地host文件的配置,若你没有配置的话就会发起相应的DNS请求,用来获取你服务器的IP地址
为什么要解析域名呢?

  • 因为客户端和服务端进行数据交互的时候是通过IP地址来

3.这时候应用层会构造一个DNS的请求报文,然后应用层会去调用传输层的接口(DNS是使用UDP来实现数据的传输)

  • 大白话就是说:应用层会调用传输层的API,然后再DNS的请求报文基础上加上一个UDP的请求头

4.然后传输层会把数据交给网络层,网络层一样会在UDP的请求报文上加一个IP的请求头
5.这时候数据回到数据链路层,数据链路层会实现一个二层的寻址,数据链路层会把自己的MAC头加上,并且会把你的请求报文会交给下一个机器的MAC地址也加上(MAC也就是常说的机器码)

6.再通过物理介质传出去,通常传到路由器上

  • 路由器是一个三层的设备只有网络层,数据链路层,还有物理层

7.传到路由器要先通过物理层,然后再由物理层到数据链路层,数据链路层会看看MAC地址是不是给我的,如果是给我的那就解析,如果不是给我的那就丢弃
8.然后数据会再网上进行传输到网络层,网络层会看一下把数据传到下一个路由器的地址是多少
9.然后会把数据传到运营商的服务器上(运营商的服务器非常复杂)

  • 然后如果是运营商本地的会找到对应的IP地址(再由路由器到服务器)(原路返回的样子参考)
  • 如果是不同的运营商的话,运营商会用他们对应的专线进行连接

10.然后到了对方服务器,然后也会一样,一层一层的解析,最后会到应用层解析你的HTTP的请求报文,解析完以后会去构造一个HTTP的响应报文,然后响应报文再原路返回到客户端

  • (数据链路层和网络层一般会解析IP地址)
  • (到传输层一般会解析TPC的端口)

(个人理解,仅供参考)

posted @ 2021-03-02 17:21  小柴Prog  阅读(175)  评论(0编辑  收藏  举报