• 当你访问一个网页时,后台做了些什么?


    当你在浏览器输入一个网址后,他是如何访问服务器,从而如何跳出一个页面的,想要了解这些,你大概需要了解一下知识:

    1.DNS的原理及工作过程

    2.HTTP协议的请求响应报文以及工作过程

    3.TCP/IP协议的三次握手和四次挥手

    4.路由交换原理及过程

    5.NAT地址转换技术

    6.端口映射

    后面有访问完整过程描述

    目录

    1.DNS

    1)DNS是什么:

    2)DNS工作过程

                解析详细步骤

    2.HTTP

    1)概念:

    2)HTTP协议工作过程

    3)HTTP报文

    请求报文

     响应报文

    GET 和 POST 传输的区别?

    3.TCP的三次握手和四次挥手过程

    1)三次握手

    2)四次挥手

    4.路由交换原理及过程

              1)路由的概念

              2)交换的概念

    5.NAT

    1)工作原理及实现方式

    2)NAT的作用

    6.端口映射 

    用户访问网站的完整过程


    接下来简单介绍一下

    1.DNS

    1)DNS是什么:

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去+·记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。访问网站的实质就是解析其域名得到IP地址,再转向其网站。

    2)DNS工作过程

    DNS查询方式

    DNS是一个分布式系统,绝大多数的DNS服务器端的数据库不会拥有所有的域名记录,当客户端向一个DNS服务器端查询域名但该DNS服务器端上却没有该域名的记录时,此时会有两种继续查询的方式:

    ●递归查询:由DNS服务器向其他DNS服务器进行查询,将最终查询结果返回给DNS客户端

    ●迭代查询:DNS服务器告知DNS客户端其他DNS服务器地址,客户端自行向其他DNS服务器进行查询。

     解析详细步骤

    1)系统首先会查找本地的DNS缓存和hosts文件信息,确认其中是否有与,域名www.xxx.com所对应的IP地址。如果有,就直接访问这个IP地址所对应的www.xxx.com域名服务器。

    2)如果没有找到,那么,系统将会把浏览器的解析请求发送给本地主机所指定的DNS服务器,称为LDNS(localdns)。如果LDNS服务器中有域名www.xxx.com所对应的IP地址,则返回给客户端的浏览器,如果没有,则继续请求其他DNS服务器。

    3)LDNS服务器会从DNS系统的根(.)开始请求对域名www.xxx.com的解析。根DNS服务器全球只有13台,根域名服务器是没有域名www.xxx.com解析记录的。但是它会有域名www.xxx.com所对应的顶级域.com的解析记录,因此直接把顶级域.com所对应的DNS地址返回给LDNS服务器。

    4)LDNS服务器获取到顶级域.com对应的DNS服务器地址后,就会去.com服务器请求对www.xxx.com域名的解析。在顶级域名服务器也不会有www.xxx.com的解析记录的。但是它有www.xxx.com的父级域名的解析记录,即xxx.com。因此顶级域名.com服务器又会把xxx.com所对应的DNS服务器的IP地址返回给LDNS。

    5)LDNS服务器收到xxx.com所对应的IP地址后,就会去xxx.com域名服务器请求对www.xxx.com的域名解析。xxx.com域名对应的DNS服务器是该域名的授权DNS服务器。这个DNS服务器就是企业购买域名时用于管理解析的服务器。

    6)xxx.com域名DNS服务器会吧www.xxx.com域名所对应的IP地址给解析出来,然后发给LDNS。

    7)LDNS把解析出来的结果,www.xxx.com所对应的IP地址发送给客户端的浏览器。并且LDNS也会将其域名和对应的地址缓存到cache中。

    8)客户端浏览器收到后,也会将其域名以及对应的IP地址缓存的到DNS缓存和hosts文件中。

    2.HTTP

    1)概念:

    HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。

    HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。

    HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

    HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

    HTTPS 默认工作在 TCP 协议443端口

    2)HTTP协议工作过程

    概述:

    (1) 客户端连接到Web服务器

    浏览器进行DNS域名解析,得到对应的IP地址据这个IP,找到对应的服务器建立连接(三次握手)

    (2) 发送HTTP请求 

    建立TCP连接后发起HTTP请求(一个完整的http请求报文)服务器响应HTTP请求,浏览器得到html代码(服务器如何响应)

    (3) 服务器接受请求并返回HTTP响应 

    浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)

    (4) 释放连接TCP连接 

    数据传输完成,发送断开连接请求,服务器关闭TCP连接(四次挥手)

    (5) 客户端浏览器解析HTML内容

    浏览器对页面进行渲染呈现给用户

    3)HTTP报文

    请求报文

    请求报文内容及作用 

    1)请求行

    作用:用来说明客户端想要做什么。                                                                             

    内容:包括方法字段GET和URL字段以及HTTP协议版本

    2)请求头

    作用:通过客户端把请求的相关信息发给服务器

    内容:包括媒体类型、语言类型、支持压缩、客户端类型、主机等信息。

    3)空行

    作用:告诉服务器空行以下内容不属于请求头部信息。

    4)请求报文主体

    作用:用来说明客户端具体想要做的事情。

    内容:查看信息、应用post方法。

     响应报文

     响应报文内容及作用 

    1)状态行

    作用:用来说明服务端响应客户端的状态。

    内容:包括洗衣及版本号、数字状态码、状态情况

    2)响应头

    作用:通过服务端把响应的相关信息给客户端

    内容:包括Location、server、connect、vary等

    3)空行

    作用:告诉客户端空行以下内容不属于响应头部信息。

    4)响应报文主体

    作用:用来装载着要返回给客户端的数据

    内容:包括文本、html、视频或者是图片。

    GET 和 POST 传输的区别?

    ●get 提交的数据会放在 URL 之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在 URL 中,可能会存在安全问题,因此往往用于获取资源信息。而 post 参数放在请求主体中,并且参数不会被保留,相比 get 方法,post 方法更安全,主要用于修改服务器上的资源。

    ●get 请求只支持 URL 编码,post 请求支持多种编码格式。

    ●get 只支持 ASCII 字符格式的参数,而 post 方法没有限制。

    ●get 提交的数据大小有限制(这里所说的限制是针对浏览器而言的),而 post 方法提交的数据没限制

    ●get 方式需要使用 Request.QueryString 来取得变量的值,而 post 方式通过 Request.Form 来获取。

    ●get 方法产生一个 TCP 数据包,post 方法产生两个(并不是所有的浏览器中都产生两个)。

    HTTP常见状态码

    分类分类描述
    1**信息,服务器收到请求,需要请求者继续执行操作
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步的操作以完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器在处理请求的过程中发生了错误

    3.TCP的三次握手和四次挥手过程

    1)三次握手

    所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

    三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手

    第一次握手:

    客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

    第二次握手:

    服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

    第三次握手.

    客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1(ISN---初始序列号)

    2)四次挥手

    TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

    四次挥手过程:

    1)第一次挥手:客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 

    2)第二次挥手:服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 

    3)第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 

    4)第四次挥手:客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

    4.路由交换原理及过程

    1)路由的概念

    路由是指将IP报文通过路由器的一个接口上收到数据包,根据数据路由包的目的地址进行定向并转发到另一个接口的过程。简单的说路由是指导IP报文发送的路径信息。

    工作过程

    传统地,路由器工作于OSI七层协议中的第三层,其主要任务是接收来自一个网络接口的数据包,根据其中所含的目的地址,决定转发到下一个目的地址。因此,路由器首先得在转发路由表中查找它的目的地址,若找到了目的地址,就在数据包的帧格前添加下一个MAC地址,同时IP数据包头的TTL(Time To Live)域也开始减数,并重新计算校验和。当数据包被送到输出端口时,它需要按顺序等待,以便被传送到输出链路上。

    2)交换的概念

    交换是按照通信两端传输信息的要求,用人工或设备自动完成的方法,动态地把要传输的信息送到符合要求的相应路由上的技术的统称。交换的方式经历了电路交换、数据交换和IP交换三个主要阶段,期间实现了从模拟信号到数字信号,从窄带到宽带的跨越。

    工作过程(二层交换机)

    当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上;
    再去读取包头中的目的MAC地址,并在地址表中查找相应的端口;
    如表中有与这目的MAC地址对应的端口,把数据包直接复制到这端口上。

    5.NAT

    1)工作原理及实现方式

    a) NAT工作原理:NAT又称网络地址转换,让在专用网内拥有本地IP(私有IP)的主机通过装有NAT软件的路由器连接到因特网上能和外界通信的技术,借助于NAT技术,私有(保留)IP地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的公有IP地址,而一个局域网只需使用少量公有IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

     b) NAT实现的三种方式:

    1. 静态转换Static Nat:私有IP转公有IP,IP地址一对一,即某一私有IP只能转为某一公有IP。

    2. 动态转换Dynamic Nat:私有IP转公有IP,转换的公有IP地址不确定。

    3. 端口多路复用OverLoad:所有内部网络的主机均可共享一个合法外部IP地址实现对Internet的访问。不仅可以最大限度地节约IP地址资源,同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。

    2)NAT的作用

    1.在一定程度上缓解 IP 地址空间枯竭的压力

    2.有效避免来自外网的攻击,可以很大程度上提高网络安全性(屏蔽私网 ip)

    3.控制内网主机访问外网,同时也可以控制外网主机访问内网,解决了内网和外网不能互通的问题

    6.端口映射 

    端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

    我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。

    用户访问网站的完整过程

    1、客户端在浏览器中输入要访问的域名地址,如:www.xxx.com

    2、浏览器请求解析DNS服务器,把域名www.xxx.com转换成web服务器的IP地址。(两种情况)

            1)系统首先会查找本地的DNS缓存和hosts文件信息,确认其中是否有域名www.xxx.com所对应的IP地址。如果有,就直接访问这个IP地址所对应的www.xxx.com域名服务器。

            2)如果没有找到,那么,系统将会把浏览器的解析请求发送给本地主机所指定的DNS服务器,称为LDNS。如果LDNS服务器中有域名www.xxx.com所对应的IP地址,则返回给客户端的浏览器,如果没有,则继续请求其他DNS服务器。

           ①LDNS服务器会从DNS系统的根(.)开始请求对域名www.xxx.com的解析。根DNS服务器全球只有13台,根域名服务器是没有域名www.xxx.com解析记录的。但是它会有域名www.xxx.com所对应的顶级域.com的解析记录,因此直接把顶级域.com所对应的DNS地址返回给LDNS服务器。

         ②LDNS服务器获取到顶级域.com对应的DNS服务器地址后,就会去.com服务器请求对www.xxx.com域名的解析。在顶级域名服务器也不会有www.xxx.com的解析记录的。但是它有www.xxx.com的父级域名,即xxx.com。因此顶级域名.com服务器又会把xxx.com所对应的DNS服务器的IP地址返回给LDNS。

           ③LDNS服务器收到xxx.com所对应的IP地址后,就会去xxx.com域名服务器请求对www.xxx.com的域名解析。xxx.com域名对应的DNS服务器是该域名的授权DNS服务器。这个DNS服务器就是企业购买域名时用于管理解析的服务器。

          ④xxx.com域名DNS服务器会吧www.xxx.com域名所对应的IP地址给解析出来,然后发给LDNS。

          ⑤LDNS把解析出来的结果,www.xxx.com所对应的IP地址发送给客户端的浏览器。并且LDNS也会将其域名和对应的地址缓存到cache中。

         ⑥客户端浏览器收到后,也会将其域名以及对应的IP地址缓存的到DNS缓存和hosts文件中。

    3、浏览器从访问的IP地址(URL)解析出默认的断后号:80

    4、浏览器通过解析后得到的IP地址和端口号进行web服务器建立一条TCP连接通道。

            1)第一次握手:

            建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

            2)第二次握手:

            服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

            3)第三次握手:

            客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

    5、建立TCP连接之后,浏览器根据HTTP协议生成HTTP请求报文发送给web服务器

    6、网络层开始负责将这样的数据包在网络上传输,如何穿过路由器,最终到达目的ip地址

    ( 如果是在局域网中,服务器有自己固定的私网IP,在对外传输的时候,会经过NAT转换,改成路由器的公网IP,而端口映射会精准导向服务器访问 

    7、web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。

    8、web服务器关闭HTTP连接,关闭TCP连接,web服务器显示访问的网站内容到屏幕上。

            1)第一次挥手:

            客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 

            2)第二次挥手:

            服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 

            3)第三次挥手:

            服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 

            4)第四次挥手:

            客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

  • 相关阅读:
    基于vue的黑马前端项目小兔鲜
    十九、一起学习Lua 垃圾回收
    枚举类和集合
    cnn卷积神经网络反向传播,卷积神经网络维度变化
    mysql常用函数及视图索引
    Gartner公布《2023中国ICT技术成熟度曲线》,得帆信息入选低代码代表厂商
    docker部署Jenkins与任务创建【七千字超详细指南】
    数字化广告运营,小迈科技的关键一步
    测试架构师的职责及困境
    Android充电驱动bq24375源码分析
  • 原文地址:https://blog.csdn.net/weixin_46595570/article/details/127855289