zoukankan      html  css  js  c++  java
  • 从一个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的端口)

    (个人理解,仅供参考)

    我正在黑暗中摸索前行,每一盏我点亮的路灯下都有我沾满泥垢的掌印,但光亮终会散满我所幻想的世界。
  • 相关阅读:
    JS时间自动更新
    浏览器一般兼容问题
    实现笛卡尔心形线的重复循环绘制
    js判断是否为ie6以外的浏览器,若是,则调用相应脚本
    html+css+js实现标签页切换
    实现跨浏览器的背景渐变
    IE8支持HTML5的占位符placeholder
    JS打造的跟随鼠标移动的酷炫拓扑图案
    JS获取阴历阳历和星期
    svn up时提示跳过某节点
  • 原文地址:https://www.cnblogs.com/progweb/p/14470059.html
Copyright © 2011-2022 走看看