美文网首页程序员
说人话,浏览器访问服务器时,大体框架怎么走

说人话,浏览器访问服务器时,大体框架怎么走

作者: 阿敏其人 | 来源:发表于2018-09-01 13:34 被阅读29次

文/阿敏其人
本文出自“阿敏其人”简书博客,转载须取得同意。


首先,我们平时访问的网站,比如www.baidu.com,这个叫做域名。
一个域名,一般都对应这一个ip地址(也可能对应好几个ip)。

image.png

我们知道,通过ip肯定也能访问网站的。

通过ip访问

一、简洁版流程

我们通过域名访问网站的服务器。简单来说经过了如下几步:

  • 1、通过DNS服务器把域名转成对应的ip
  • 2、通过tcp协议,浏览器跟服务器通过 3次握手 建立连接。
  • 3、建立连接后,浏览器通过http协议 正式发送一个request,比如get请求
  • 4、服务器收到request,返回一个response
  • 5、浏览器通过 4次挥手 ,关闭连接。

把域名转成对应的ip的过程,有一套缓存机制。
先找本地缓存,后找网络。如下流程中,1如果找到了,就不会执行2了。
1、浏览器本地缓存:浏览器会在本地的缓存中查找是否存在当前访问域名的缓存
2、host文件:当前操作系统的hosts文件是否写有IP和域名对应的关系
3、本地的Local:DNS Local查找是否写有IP和域名对应的关系(DNS其实就是我们的交换机或者路由器配置的DNS)
4、网络上的DNS

从tcp协议的角度看

从tcp协议的角度看,关心的事情只有3个步骤

  • 连接连接 (3次握手)
  • request和response
  • 关闭连接 (4次挥手)

二、相对复杂版

本节点会涉及到一些铺垫知识,当然不感兴趣可以直接略过查看二.2。

二.1、知识点铺垫

涉及到简单的:

  • 集线器
  • 交换器
  • 路由器
  • arp协议
  • 默认网关
  • 子网掩码
  • mac地址

二.1.1 集线器和交换机

二.1.1.1 两台电脑直接通过网线传输数据

image.png

如果两台电脑之间通过网线连接是可以直接通信的。需要设置三个东西:

  • 1、ip
  • 2、网络掩码 (子网掩码)
  • 3、ip地址需要控制在同一网段内
    • 同一网段举例: 一台为192.168.1.1另一台为192.168.1.2则可以进行通信
    • ip地址本来是是0-256,但是我们只能用2-254

三者缺一不可。

二.1.1.2 多台电脑内部通信

多台电脑组成一个网络的时候,可以用集线器或者交换机

集线器,是旧时代的产物。

二.1.2 集线器

集线器,一般叫做 hub。

  • 接口较少情况下,可以用集线器
  • 集线器通过广播的方式发送数据,每一次发送所有关联的电脑谁都会收到数据,
    • 集线器有个缺点,它以广播的方式进行发送任何数据,即如果集线器接收到来自A电脑的数据本来是想转发给B电脑,如果此时它还连接着另外两台电脑C、D,那么它会把这个数据给每个电脑都发送一份,因此会导致网络拥堵
image.png

如果用一句话来总结集线器的话:通过广播的方式全局收发数据,容易造成堵塞。

二.1.3 交换机

交换器一般叫做 switch。

  • 克服了集线器以广播发送数据的缺点,当需要广播的时候发送广播,当需要单播的时候又能够以单播的方式进行发送
  • 它已经替代了之前的集线器
  • 企业中就是用交换机来完成多态电脑设备的链接成网络的
image.png

比如192.168.1.1(记为A) 想给通过 192.168.1.2(记为B)发消息。

直接通过交换机不行,中间还会用到==arp==协议。

  • 1、A先看看自己的arp缓存里面有没有B的mac地址。如果没有,执行第2步如果有,执行第4步。
  • 2、 以广播的方式跟交换器说自己 想跟B通信。交换器通过arp协议通知到全部网卡
  • 3、一番查找之后,B机器知道别人要跟自己通信,就把自己的mac地址通过 **单播** 的方式通过交换机告诉A。
  • 4、A拿到B的mac地址之后,(会缓存起来)就可以通过指定ip和B通信了。

注:可以通过 arp -a 命令查看当前的电脑缓存的其他机器的网卡上的mac地址。

关于mac地址补充
1、mac地址前3部分表示网卡的生产厂商,后六位在这个厂商对这个网卡的唯一标志
2、每个网卡除了有一个自己身为的mac地址,还有一个为 FF:FF:FF:FF:FF:FF 的地址。(利用这个 FF:FF:FF:FF:FF:FF 可以实现一点网络攻击,比如arp攻击)

如果用一句话来总结交换机的话:可以广播,可以单播,在数据收发的过程,目的ip和源ip不变,一直变化的是mac地址。可以通过arp协议寻找到目标ip的mac地址。

二.1.3 路由器

我们把具有转发数据能力的设备,称之为网关。默认网关一般是路由器,路由器至少有两个网卡。

同一个网段下,多台电脑通过交换机来通信是没问题的,但是两个网段下想要通信,就需要路由器了。

比如192.169.1.1和192.168.2.1 就是两个不同的网段。
比如192.168.1.1,其中第三部分就是网段。

image.png

按照上图,比如PC1的ip是192.168.1.1,PC3的ip是192.168.2.1,他们在不同的网段下。

那么PC1发消息时,发现对方跟自己不在同一个网段。

  • 1、192.168.1.1会通过switch0先发给192.168.2.1,但是mac地址必须是路由器的192.168.1.4的mac地址。不然路由器是根本就不收。
  • 2、switch0 发给Router0的192.168.1.4,发现数据不是给自己的,但是自己又具有网关的转发能力,所以转给192.168.2.4
  • 3、到了192.168.2.4时,该消息的mac地址在路由器上会被改成192.168.2.1的mac地址。(不然PC3根本就不收)

一句话总结简介总结路由器:路由器扮演者默认网关的角色(具有转发数据能力的设备,称之为网关),路由器至少有两个网卡,两个网卡就可以连接不同的两个网段,这样不同网段下的ip就可以互相收发数据了。

二.2、浏览器访问服务器

image.png

大致流程

  • 1、PC1要访问 www.baidu.com 这个地址,首要要到到DNS服务器把域名转成ip
    DNS : Domain Name System(域名服务器)

    • PC1首先会通过switch0,利用arp得到默认网关的192.168.1.254的mac地址,然后消息再转到默认网关的另一端,这个另一端通过互联网发送到DNS服务器
  • 2、NDS服务器把域名解析成ip之后就会把域名对应的ip发给PC1

  • 3、PC1拿到ip之后,那么就浏览器要访问服务器,会通过tcp协议跟服务器进行3次握手 (3次握手是为了 建立连接)

  • 4、握手建立完成之后,PC1会通过http协议向服务器发送request数据包。(请求方式、cookie之类的),然后得到服务器的response,没其他意外通过response的数据进行渲染页面就展示出来了。

  • 5、PC1得到服务器的相应之后,就要关闭连接了,这时候通过tcp协议向服务器发送4次挥手。(4次挥手是为了断开连接)

当前阶段就到这里了。
如有空闲,再做完善。
文中多少有一些不谨慎的地方,请网络专业的小伙伴见谅。

对于非网络方向的开发来说,建一个小小的框架比死磕分支要来得实际。
先把大致框架搭建起来,真正需要时,再系统补充,方为常道。

不妥之处,还望指点。
本文完。


参考:
输入网址后,浏览器从访问服务器到呈现网页的过程
其他相关图片,侵删。

相关文章

  • 说人话,浏览器访问服务器时,大体框架怎么走

    文/阿敏其人本文出自“阿敏其人”简书博客,转载须取得同意。 首先,我们平时访问的网站,比如www.baidu.co...

  • http的302和304

    302重定向 浏览器访问服务器,服务器返回带着location,浏览器直接访问location指定的链接。 304...

  • thinkphp框架url隐藏应用的入口文件index.php

    搭建好thinkphp框架,浏览器输入url访问时,总会先访问入口文件index.php 比如我在模块 test ...

  • tornado_请求与响应

    认识请求与响应 浏览器是如何能访问到服务器的?服务器又是怎样给浏览器回应的?当我们在浏览器里输入网址时,浏览器会根...

  • JavaWeb开发之状态管理Session

    session(会话) 什么是session: ①是服务器端的状态管理技术。②当浏览器访问服务器时,服务器会创建一...

  • 2、session

    从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器时,可能会反复连接这个...

  • jumpserver

    Docker 安装 访问 浏览器访问: http://<容器所在服务器IP> SSH 访问: ssh -p 222...

  • 【golang】http请求报文和响应报文

    一.建立一个简单的tcp服务器,来看看浏览器访问服务器的时候会发送什么信息。 用浏览器访问127.0.0.1:80...

  • Tomcat总体架构与核心配置详解

    1.浏览器访问服务器的流程 b/s(浏览器/服务器模式) 浏览器是客户端(发送http请求) ———> 服务器端 ...

  • HTTP请求中的那些状态码

    当浏览器访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返...

网友评论

    本文标题:说人话,浏览器访问服务器时,大体框架怎么走

    本文链接:https://www.haomeiwen.com/subject/oloywftx.html