1.web请求

来源:互联网 发布:超级优化基因液 编辑:程序博客网 时间:2024/05/22 04:57

1.简单介绍

访问DNS获取ip地址
用户访问网站输入域名,在浏览器连接到网站前需要先等待操作系统ISP(互联网提供商如电信)的DNS服务器以获取对应的ip地址。由于web网站众多,某一个DNS服务器不保证就能知道答案,于是将请求发往另外的DNS服务器,过程一直持续下去知道某个DNS服务器上面记录了这个域名对应的ip地址。ip地址被传回到用户浏览器然后浏览器才向这个ip地址发起连接。

IP协议
ip主要是将地址信息加到每个数据包里面,请求过程发送数据包,数据包会先通过家中的猫发送到默认的ISP路由器。ISP的路由器知道更多的路由,他将数据包发送到目的地近的那台路由器,一直转发下去知道传到目的地。优点在于整个网络中某一个路由器停止响应不会造成网络瘫痪因为还有其他的路线。对于某个连接发送了多个数据包还可能每个数据包结果的路线并不同。


握手
SYN(Synchronize)过程,客户端发送SYN请求连接,服务端接收到之后发回SYN/ACK,客户端收到后发送ACK确认。套接字在两端进行协商这两边可以发送或者接受数据。


带宽,延迟
带宽指某个连接在特定时间可以传输的数据总量通常为bit/s单位。延迟指的是给定请求收到响应所需要的时间,可以ping操作进行衡量。


HTML
文本文档适合压缩以及传输,并且可以不需要特定软件来编辑或者查看。

链接
网站由链接到其他网站的文档构成(比如js/css/图片)


web内容
静态/动态资源。页面内容可以在保持打开期间更新而不是必须要在服务端生成浏览器全部需要的内容。比如ajax技术使用浏览器轮询方式局部更新。再比如webSockets允许浏览器保持一个长连接,使服务器按需要发送数据。所以静态/动态资源不必强行分辨。

数据库
整个web环境最薄弱的环节,必须在硬盘四处搜索数据而耗费大量时间。缓存是一种优化方案但是数据不一定是最新的。



DNS

DNS看起来像是一颗树,每个节点逐级下降:
顶级域名下面有.com
.com下面有exapmle.com
在下面有www.eample.com
加入你一段时间没有访问过他则必须遍历整个树来找到这个域名对应的ip地址。顶级域名服务器将请求向下级域名服务器发送,再向下发送主键靠近某个树节点就是这个域名对应的ip地址


四到七层负载均衡

① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。

② 所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。 比如四层的负载均衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。

③ 负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。

  1、负载均衡分为L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:LVS,F5。

  2、另一种叫做L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:  haproxy,MySQL Proxy。

  注意:上面的很多Load Balancer既可以做四层交换,也可以做七层交换。






2.缓存

缓存只要是为了降低负载

基于浏览器的缓存
浏览器保存访问过的某些内容,有时候可以绕开建立连接。比如后退键可以瞬间加载。

WEB加速器
浏览器加载一个新页面的时候会有一个数据流暴增,页面此时空白网络连接也处于空闲的状态。加速器利用这一段建立好的网络连接去检查页面上面的一些链接在后台将链接内容下载。由于现在网络资源常常是动态的,现在得WEB加速器一般是架设在服务器前段的缓存。

WEB代理(反向代理)
WEB代理架设在浏览器和互联网之间,代替浏览器发送请求。WEB代理将需要的数据准备好之后发回给浏览器,代理与浏览器之间的连接是很快的。比如某个大型网站某个内容同时被很多人浏览,web代理将这个内容先缓存起来这样可以降低很多流量和成本。这种技术通常是ISP网络供应商假设基础设施来实现。但是中间逐层代理假如出现错误不好排查问题。常用实现有Squid/nginx等

边缘缓存(比如CDN)
这种缓存位于web应用和用户之间。web应用对资源做一次提供,边缘缓存将它缓存下来,减少用户与web应用的交互。常用实现有varnish等。

平台缓存
应用框架自带的缓存,一些应用框架提供了一些缓存库类给开发者使用。

应用缓存
开发者自己实现缓存,比如整合memcached将文档缓存下来并设置过期时间。

数据库缓存
数据库查询时性能瓶颈。将某些内容一次查询后放到内存中提供高速存取。


3.内网以及域名

内网:
通常是公用一个路由器,路由器上面的就是自己的外网ip,内网中机器公用这一个外网ip连接到互联网。
外网:使用云计算供应商提供的虚拟主机我们假设他有一个外网ip这个外网ip可以申请一个域名进行备案然后进行绑定,我们就可以在互联网中访问他,用域名访问如果不带端口号就默认访问的是这台机器的80端口,所以通常我们使用www.baidu.com是没有在后面添加80端口的,当然如果你的虚拟主机中的应用程序监听的是非80端口如果想在互联网中访问的话就要带上这个非80端口。
端口映射
还有一个问题,路由器上面的外网ip被互联网访问的时候怎么知道访问的是这个路由器下面的哪一台机器呢?这里主要是在路由器上面DMZ功能将内网某个机器映射到路由器ip上,当外部访问路由器ip就会直接访问内网中的那台电脑。
端口映射:同一个路由器下多个电脑访问百度,百度传回来的数据怎么知道传给哪一台呢?这里就是端口映射,路由器将他的ip地址(外网ip)的端口1映射到路由器下面的电脑1,电脑1访问百度时其实是路由器用外网ip:1向百度发出请求,这是内网访问外网。百度返回结果时就向你的外网ip:1返回数据,路由器根据这个端口1将数据包转发给电脑1,这就是外网访问内网。

我们发送接收数据都通过运营商。访问百度时我们路由器将我们路由器下面的请求作了端口映射,在运营商处会再次进行端口映射和转化
下面是路由器端口映射的图

访问路由器ip:8080就会去访问内网中的192.168.1.xx:8080。其中路由器ip绑定域名之后可以换成域名:8080去访问内网中的192.168.1.xx:8080
路由器WAN口

接外部 IP 地址用,通常指的是出口,转发来自内部 LAN 接口的 IP 数据包,这个口的 IP 是唯一的。

路由器LAN
接内部 IP 地址用,LAN 内部是交换机。


原创粉丝点击