要实现应用程序之间的交互。 咱们须要一个可以在浏览器和web服务器之间传递请求和响应的机制。 因为请求和响应都是由0和1组成的数字信息, 因此, 咱们须要的是一种可以将数字信息搬运到指定目的地的机制。web
它的基本思路是将数字信息分割成一个一个的小块, 而后装入一些被称为包的容器中来运送。数据库
包至关于信件或者包裹,而交换机和路由器则至关于邮 局或快递公司的分拣处理区。包的头部存有目的地等控制信息,经过许多 交换机和路由器的接力,就能够根据控制信息对这些包进行分拣,而后将 它们一步一步地搬运到目的地。浏览器
这个负责搬运数字信息的机制再加上浏览器和web服务器这些网络应用程序, 这两部分组成了网络。缓存
HTTP
请求消息DNS
服务器查询域名对应的 IP
地址当咱们在浏览器输入网址(URL)后, 浏览器就要开始解析URL:安全
当访问Web服务器时应该使用HTTP协议, 访问FTP服务器时应该使用FTP协议。服务器
解析完URL以后, 咱们就知道应该要访问的目标了。这里咱们以HTTP协议为例。网络
HTTP协议定义了客户端和服务器之间交互的消息内容和步骤。架构
与HTTP关系密切的协议:负载均衡
客户端向服务器发送请求消息, 请求消息中包含“对什么”和“进行怎样的操做”两个部分。 “对什么”部分称为URI
。分布式
服务端返回响应消息。
请求消息:
响应消息:
Content-Type
字段来定义 (MIME 类型)状态码概要:
返回响应消息后, 浏览器会将数据提取出来并显示在屏幕上。
当网页中包含图片时, 会在网页中相应位置嵌入表示图片文件的标签的控制信息。 而后再次访问服务器获取图片并显示在预留的空间中。
因为每条请求消息只能写一个URI, 因此每次只能获取一个文件。若是网页包含三张图片, 则会向服务器发送四条请求。
咱们通常在网站输入的都是域名, 可是在委托操做系统发送消息时,必须提供域名对应的IP地址。 所以, 在生成HTTP消息后, 接下来就是根据域名查询IP地址。
TCP/IP网络协议是经过IP地址来肯定通讯对象的, 所以不知道IP地址就没法将消息发送给对方。
根据域名查询 IP 地址时,浏览器会使用 Socket 库中的解析器。
解析器会向DNS服务器发送查询消息(DNS服务器也有IP地址, 只不过这个 IP 地址是做为 TCP/IP 的一个设置项目事先设置好的,不须要再去查询了)。
DNS 服务器会从域名与 IP 地址的对照表中查找相应的记录,并 返回 IP 地址。
固然, 一个DNS服务器的内存是有限的, 不可能存有全部域名对应的IP地址,当在本服务器上查不到时, 就会展开DNS服务器的大接力, 从而查找要查询的信息。
有时候, 并不须要从最上级的根域开始查找, 由于DNS服务器有一个缓存功能, 能够记住以前查询过的域名。 缓存能够减小查询所需的时间。
当HTTP请求消息和DNS查询IP地址准备就绪, 接下来就要委托操做系统来发送消息。
协议栈分为上下两部分:
- 上: 分为了两块, 分别负责TCP和UDP协议的收发数据 - 下: 用IP协议控制网络包收发操做的部分。
在互联网上传送数据时, 数据会被切分红一个一个的网络包, 而将网络包发送给通讯对象的操做就是由IP来负责的。 IP中还包括ICMP协议(告知网络包传送过程当中的错误和各类控制消息), ARP协议(根据IP地址查询对应的以太网MAC地址)。
浏览器、邮件等通常应用程序收发数据时用 TCP; DNS 查询等收发较短的控制数据时用 UDP。
套接字的实体就是通讯控制信息
协议栈是根据套接字中记录的控制信息来工做的。
建立套接字时,首先分配一个套接字所需的内存空间,而后向其 中写入初始状态。
因为套接字中记录了通讯双方的信息以及通讯处于怎样的 状态,因此只要经过描述符肯定了相应的套接字,协议栈就可以获取全部 的相关信息,这样一来,应用程序就不须要每次都告诉协议栈应该和谁进 行通讯了。
链接其实是通讯双方交换控制信息。所谓控制信息,就是用来控制数据收发操做所需的一些信息,例如IP 地址 和端口号。
三次握手🤝:
MTU:一个网络包的最大长度,以太网中通常为 1500字节。
MSS:除去头部以后,一个网络包所能容纳的 TCP 数据的最大 长度
HTTP请求消息通常不会太长, 一个网络包就能装下, 但若是要提交表单数据, 可能会超出一个网络包的容量, 此时就须要对数据进行拆分。
TCP具有确认对方是否成功收到网络包, 以及当对方没收到时进行重发的功能, 所以在发送网络包以后, 接下来还要进行确认操做。
经过“序号”和“ACK 号”能够确认接收方是否收到了网络包。实际上网络的错误检测和补偿机制很是 复杂。
协议栈会检查收到的数据块和 TCP 头部的内容,判断是否有数据丢失,若是没有问题则返回 ACK 号。而后,协议栈将数据块暂存到接收缓冲区中,并将数据块按顺序链接起来还原出原始的数据,最后将数据交给应用程序
数据发送完毕后断开链接。
服务器会先发起断开链接。
四次挥手👋:
UDP只负责单纯地发送包而已,并不像 TCP 同样会对包的送达状态进行监控,因此协议栈也不知道有没有发生错误。如下状况能够考虑使用UDP协议:
TCP很复杂是为了保证将数据高效且可靠地发送给对方。可是若是数据很短, 一个包就能装下, 咱们就不用考虑哪一个包送达, 哪一个包没有送达了, 这样, 咱们发送数据, 根据对方的回复来肯定是否须要重发便可。
音频和视频数据中缺乏了某些包并不会产生严重的问题, 只是会产生一些失真或卡顿。
HTTP 请求的方法,TCP 的确认响应和序号,客户端和服务器之间的关系,这一 切都与包的传输无关。所以,全部的包在传输到目的地的过程当中都是独立 的,相互之间没有任何关联。
交换机根据 MAC 地址表查找 MAC 地址,而后将信号发送到相 应的端口。
交换机的全双工模式能够同时发送和接收信号
路由器的端口都具备 MAC 地址,只接收与自身地址匹配的包, 遇到不匹配的包则直接丢弃。
完成包接收操做以后,路由器就会丢弃包开头的 MAC 头部。MAC 头 部的做用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口 的 MAC 地址。所以,当包到达路由器以后,MAC 头部的任务就完成了, 因而 MAC 头部就会被丢弃。
这一部分与咱们关系不大, 就不作赘述了。
防火墙的基本思路就是只容许发往特定服务器中的特定应用程序的包经过, 而后屏蔽其余的包。
经过端口号限定应用程序
经过控制位判断链接方向
包过滤方式的防火墙可根据接收方 IP 地址、发送方 IP 地址、接 收方端口号、发送方端口号、控制位等信息来判断是否容许某个 包经过。
#### 防火墙没法抵御的攻击
防火墙只关心包的起点和终点, 但对包中的特定数据是没法检测的。
应对包内容致使的服务器问题应对措施:
当服务器的访问量上升时, 增长服务器线路的带宽是有效的, 可是网络速度是有限的, 并不能解决全部问题。
在这种状况下, 使用多台服务器来分担负载的方法更有效, 这种架构统称为分布式架构。
使用负载均衡器, 首先要用负载均衡器的IP地址代替Web服务器的实际地址并注册到DNS服务器上。 这样当要访问咱们的Web服务器实际上要通过负载均衡器进行一次转发。 这样咱们只要经过在负载均衡器上来判断咱们服务器的负载从而决定该请求由哪一个服务器来处理。
除了使用多台功能相同的Web服务器来分担负载外, 还能够经过将整个系统按功能分红不一样的服务器, 如Web服务器, 数据库服务器。 缓存服务器就是一种按功能来分担负载的方法。
缓存服务器是一台经过代理机制对数据进行缓存的服务器。代理介于 Web 服务器和客户端之间,具备对 Web 服务器访问进行中转的功能。当进 行中转时,它能够将 Web 服务器返回的数据保存在磁盘中,并能够代替 Web 服务器将磁盘中的数据返回给客户端。这种保存的数据称为缓存,缓 存服务器指的也就是这样的功能。
正向,代理的是客户端; 反向,代理的是服务端。
上面的是在 Web 服务器一端部署一个代理,而后利用其缓存功能来 改善服务器的性能,还有一种方法是在客户端一侧部署缓存服务器。
正向代理刚刚出现的时候, 其目的之一就是缓存, 另外一个目的是设置防火墙。
在使用正向代理时,通常须要在浏览器的设置窗口中的“代理服务器” 一栏中填写正向代理的IP地址,浏览器会忽略网址栏的内容,直接将全部请求发送给正向代理。
使用正向代理须要在浏览器中进行设置,这能够说 是识别正向代理的一个特征。可是,设置浏览器很是麻烦,若是设置错误 还可能致使浏览器没法正常工做。
因而咱们可使用代理服务器来接受网路上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给请求链接的客户端。
负载均衡就是一种反向代理的应用。
缓存服务器判断转发目标的方法还有一种,那就是查看请求消息的包头 部。由于包的 IP 头部中包含接收方 IP 地址,只要知道了这个地址,就知道用户要访问哪台服务器, 这种方法称为透明代理。
透明代理集合了正向代理和反向代理的优势。正常状况下, 请求消息是从浏览器直接发送到Web服务器, 并不会到达透明代理。
咱们将透明代理放在请求消息从浏览器传输到Web服务器的路径中, 当消息通过时进行拦截。 链接互联网的接入网就是一个关口, 咱们能够在这里设置反向代理, 用户察觉不到代理的存在, 也不会注意到HTTP消息是如何被转发的, 所以你们更倾向于将透明代理说成是缓存。
内容分发服务就是咱们常说的CDN缓存。
提供CDN缓存的厂商, 会和网络运营商还有Web服务器运营者签定协议,建立一些最接近用户网络的边缘服务器,而后将文件缓存在这些边缘服务器(节点)。 只要Web服务器和CDN缓存服务器创建链接, 那么当客户端访问web服务器时, 实际上就是在访问CDN缓存服务器。
它与DNS相结合,使用户可以以最小的延迟访问节点。
重定向能够以较高的精度匹配到目标服务器, 问题是会带来更多的请求
当web服务器更新之后, 缓存服务器的内容可能就再也不适用, 此时须要一套更新机制来更新缓存。
TCP协议: 传输控制协议。是基于链接的协议,也就是说,在正式收发数据前,必须和对方创建可靠的链接。
IP协议: 用于将多个包交换网络链接起来的,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的从新组装功能,以适应不一样网络对包大小的要求。
UDP协议: 简单版的TCP协议, 只负责单纯地发送包, 不负责监控。 适用于包很小的请求和音视频传输。
问题: 为何不直接使用域名来查询而要使用IP地址?
答:
问题: 为何是三次握手, 四次挥手?
答: 三次握手时,服务器同时把ACK和SYN放在一块儿发送到了客户端那里
四次挥手时,当收到对方的FIN报文时,仅仅表示对方再也不发送数据了可是还能接收数据,己方是否如今关闭发送数据通道,须要上层应用来决定,所以,己方 ACK 和 FIN 通常都会分开发送。
问题: 正向代理和反向代理的区别
答:
一、正向代理实际上是客户端的代理,帮助客户端访问其没法访问的服务器资源。反向代理则是服务器的代理,帮助服务器作负载均衡,安全防御等。
二、正向代理通常是客户端架设的,好比在本身的机器上安装一个代理软件。而反向代理通常是服务器架设的,好比在本身的机器集群中部署一个反向代理服务器。
三、正向代理中,服务器不知道真正的客户端究竟是谁,觉得访问本身的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,觉得本身访问的就是真实的服务器。
四、正向代理和反向代理的做用和目的不一样。正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡、安全防御等做用。两者均能提升访问速度。
问题: 一次完整的HTTP请求
答:
在HTTP工做开始以前,Web浏览器首先要经过网络与Web服务器创建链接,该链接是经过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,所以Internet又被称做是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议创建以后才能进行更高层协议的链接,所以,首先要创建TCP链接,通常TCP链接的端口号是80。
浏览器发送其请求命令以后,还要以头信息的形式向Web服务器发送一些别的信息,以后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
正如客户端会随同请求发送关于自身的信息同样,服务器也会随同应答向用户发送关于它本身的数据及被请求的文档。
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
在完成这次数据通讯后,服务器会经过TCP四次挥手主动断开链接。但若这次链接为长链接,那么浏览器或服务器的头信息会加入keep-alive的信息,会保持此链接状态,在有其它数据发送时,能够节省创建链接的时间。