前言网络机制是为了实现应用程序之间的交互。我们需要一种可以在浏览器和Web服务器之间传递请求和响应的机制。由于请求和响应都是由0和1组成的数字信息,因此我们需要的是一种能够将数字信息传输到指定目的地的机制。它的基本思想是将数字信息一个一个地分割成小块,然后将它们打包到一些称为包裹的容器中进行运输。数据包相当于信件或包裹,交换机和路由器相当于邮局或快递公司的分拣处理区。数据包的头部包含目的地等控制信息,通过许多交换机和路由器的中继,这些数据包可以根据控制信息进行排序,然后逐级传送到目的地。这种移动数字信息的机制与网络应用程序(例如浏览器和Web服务器)一起构成了网络。分工浏览器:负责将请求报文委托给操作系统中的网络控制软件。协议栈:将请求报文打包,并添加目的地址等控制信息。网卡:将数据包转换成电信号,通过网线发送出去,使数据包进入网络。集线器、交换机、路由器:网卡发出的数据包会经过交换机等设备到达用于上网的路由器。网络运营商将负责将数据包传送到目的地。接入网、网络运营商:互联网的入口线路称为接入网,可以使用电话线、有线电视、光纤等各种通信线路作为接入网。通过接入网进入骨干网。骨干网中运营商众多,路由器数量众多。这些路由器相互连接形成一个巨大的网络,我们的网络数据包经过几台路由器的中继,最后发送出去。到目标网络服务器。防火墙:防火墙将检查传入的数据包。缓存服务器:部分网页数据可以重复使用。这些可重用的数据存储在缓存服务器中。如果要访问的网页数据恰好在缓存服务器中,就不用再去操心web服务器了。此外,在大型网站中,可能会有向多个网络服务器发布消息的负载均衡器,也可能会使用通过分布在整个互联网上的缓存服务器来分发内容的服务。Web服务器:当网络数据包到达Web服务器时,将数据解包并还原为原始请求报文,然后传递给Web服务器程序。和客户端一样,这个操作也是由操作系统中的协议栈来完成的。接下来,Web服务器将解析请求消息以封装响应消息并将其发送回客户端。探索之旅浏览器生成消息生成HTTP请求报文向DNS服务器查询域名对应的IP地址并委托协议栈发送消息生成HTTP请求报文。当我们在浏览器中输入网址(URL)时,浏览器会开始解析该URL:当访问Web服务器时应该使用HTTP协议,访问FTP服务器时应该使用FTP协议。解析完URL后,我们就知道应该访问的目标了。这里我们以HTTP协议为例。HTTP协议HTTP协议定义了客户端与服务器交互的消息内容和步骤。与HTTP密切相关的协议:负责传输的IP协议:作用是向对方传输各种数据包。其中两个重要的条件是IP地址和MAC地址。IP地址是指分配给节点的地址,MAC地址是指网卡所属的固定地址。TCP协议保证可靠性:提供可靠的字节流服务。采用三次握手策略。TCP标志在握手过程中使用——SYN和ACK。发送方首先向对方发送一个带有SYN标志的数据包。接收方收到后,发回一个带有SYN/ACK标志的数据包。发送方为了传递确认信息,返回一个末尾带有ACK标志的数据包,表示握手结束。如果在握手过程中的某个阶段出现莫名中断,TCP协议会以相同的顺序再次发送相同的数据包。负责域名解析的DNS服务:提供域名与IP地址之间的解析服务。客户端向服务器发送请求消息,请求消息包含两部分:“做什么”和“怎么做”。“到什么”部分称为URI。服务器返回响应消息。请求消息:请求行:包含请求方法、HTTP版本、URI消息头:每行包含一个头字段,用于标识请求的附加信息(如日期、客户端支持的数据类型、语言、压缩格式、缓存控制等)消息体:包含客户端发送给服务器的数据。响应消息:状态行:包含HTTP版本、状态码、响应短语(用于解释状态码)消息头消息体:包含服务器发送给客户端的数据,消息体的格式将通过Content-消息头中的Type字段定义(MIME类型)状态码摘要:浏览器返回响应消息后,会提取数据显示在屏幕上。当网页中包含图片时,代表图片文件的标签的控制信息将被嵌入到网页中相应的位置。然后再次访问服务器获取图片并显示在预留空间中。由于每个请求报文中只能写入一个URI,所以一次只能获取一个文件。如果网页包含三个图像,将向服务器发送四个请求。通过DNS服务器查询服务器的IP地址。我们一般在网站上输入域名,但是在委托操作系统发送消息时,必须提供域名对应的IP地址。因此,生成HTTP报文后,下一步就是根据域名查询IP地址。TCP/IP网络协议是通过IP地址来确定通信对象的,所以在不知道IP地址的情况下无法将报文发送给对方。DNS如何查询域名对应的IP地址浏览器在根据域名查询IP地址时,会使用Socket库中的解析器。解析器会向DNS服务器发送查询报文(DNS服务器也有一个IP地址,但是这个IP地址是作为TCP/IP的一个设置项预先设置好的,所以不需要查询)。DNS服务器会从域名和IP地址的对照表中查找对应的记录,并返回IP地址。当然,DNS服务器的内存是有限的,不可能存储所有域名对应的IP地址。当在这台服务器上找不到他们时,DNS服务器就会启动一个大的中继来寻找要查询的信息。有时候,不需要从顶级根域开始查找,因为DNS服务器有缓存功能,可以记住之前查询过的域名。缓存可以减少查询所需的时间。当HTTP请求报文和DNS查询IP地址准备好后,下一步就是委托操作系统发送报文。协议栈和网卡创建socket:当协议栈收到委托后,首先会创建一个socket来连接服务器发送和接收数据。断开与服务器的连接并删除套接字。IP和Ethernet数据包收发操作使用UDP协议收发数据的操作协议栈分为上下两部分:-Upper:分为两部分,分别负责TCP的收发数据和UDPprotocols-Lower:使用IP协议控制发送和接收网络数据包操作的部分。在互联网上传输数据时,会将数据一个一个地分成网络包,将网络包发送给通信对象的操作由IP负责。IP还包括ICMP协议(在网络包传输过程中通知错误和各种控制消息)和ARP协议(根据IP地址查询相应的以太网MAC地址)。浏览器和电子邮件等常见应用程序在发送和接收数据时使用TCP;DNS查询和其他短期控制数据在发送和接收短控制数据时使用UDP。创建套接字的实体是通信控制信息。协议栈根据套接字中记录的控制信息工作。创建socket时,首先分配socket所需的内存空间,然后将初始状态写入其中。由于socket记录了通信双方的信息以及通信的状态,只要通过描述符确定对应的socket,协议栈就可以获取到所有相关信息。这样,应用程序就不需要每次都告诉协议栈应该和谁通信。与服务器的连接Connection实际上是两个通信方之间控制信息的交换。所谓控制信息就是控制数据发送和接收操作所需要的一些信息,如IP地址、端口号等。三向握手?:连接中:客户端向服务器发送一个网络数据包(设置SYN为1)。连接完成:服务器找到对应的套接字并返回响应。设置SYN(接受连接)和ACK(网络包可能丢失错误,ACK置1表示确认收到网络包)。网络包返回给客户端,通过响应SYN确认连接,判断连接是否成功:客户端设置ACK为1回传给服务器,告诉服务器刚才的响应包已经收到。发送和接收数据MTU:一个网络包的最大长度,以太网中一般为1500字节。MSS:去掉包头后,一个网络包所能容纳的TCP数据的最大长度。HTTP请求报文一般不会太长,可以容纳在一个网络包中。但是如果要提交表单数据,可能会超过一个网络包的长度。capacity,此时需要对数据进行拆分。TCP具有确认对方是否成功收到网络包的功能,当对方没有收到时重传。因此,在发送网络包之后,接下来需要进行确认操作。通过“序号”和“ACK号”,可以确认接收方是否收到了网络包。事实上,网络的错误检测和补偿机制非常复杂。协议栈会检查接收到的数据块和TCP头的内容,判断是否有数据丢失,如果没有问题则返回ACK号。然后,协议栈将数据块暂存在接收缓冲区中,将数据块连接起来以恢复原始数据,最后将数据传递给应用程序,在数据发送完毕后断开连接。服务器将首先发起断开连接。挥手四次?:客户端进程发送连接释放消息,停止发送数据。释放数据报文头,FIN=1,其序列号为seq=u服务器收到连接释放报文,发送确认报文,ACK=1,ack=u+1服务器发送完最后一个数据后,它发送给客户端发送连接释放消息,FIN=1,ack=u+1。客户端收到服务器的连接释放报文后,必须发送确认,ACK=1,ack=w+1,自己的序列号是seq=u+1UDP协议UDP只负责简单发送数据包,不像TCP也会监控数据包的投递状态,所以协议栈不知道是否有错误。以下情况可以考虑UDP协议:数据很短,使用UDP发送效率更高TCP非常复杂,保证数据高效可靠地发送给对方。但是如果数据很短,一个包裹就可以放得下,那么我们就不用考虑哪个包裹送达了,哪个包裹没有送达。这样我们发送数据,根据对方的回复判断是否需要重发。音频和视频数据音频和视频数据中缺少某些数据包不会导致严重问题,只是会出现一些失真或断断续续的情况。集线器、交换机、路由器HTTP请求方式、TCP确认响应和序列号、客户端和服务器之间的关系,所有这些都与数据包传输无关。因此,所有数据包在传输到目的地的过程中都是独立的,彼此没有关联。集线器向所有线路交换机发送信号,线路交换机从MAC地址表中查找MAC地址,然后将信号发送到相应的端口。交换机的全双工模式可以同时发送和接收信号。路由器根据“IP地址”判断转发目标。所有路由器端口都有MAC地址,只接收与自己地址匹配的报文,不匹配的报文丢弃。在完成数据包接收操作后,路由器丢弃数据包开头的MAC标头。MAC头的作用是将数据包投递到路由器,接收方的MAC地址就是路由器端口的MAC地址。因此,当数据包到达路由器时,MAC头的任务就完成了,MAC头就被丢弃了。接入网和网络运营商部分与我们关系不大,这里不再赘述。服务器端防火墙的结构与原理负载均衡缓存服务器内容分发服务防火墙防火墙的基本思想是只允许发往特定服务器中特定应用程序的数据包通过,然后阻断其他数据包。设置包过滤规则,通过端口号限制应用,通过控制位判断连接方向。包过滤防火墙可以判断是否允许数据包通过。####防火墙无法防御的攻击。防火墙只关心数据包的开始和结束,而不能检测数据包中的具体数据。针对包内容引起的服务器问题的应对对策:该问题的根本原因是web服务器程序存在bug,修复bug可以防止宕机。另一种方法是在防火墙外部署设备,检查包内容,阻断有害包。或者软件负载均衡当服务器访问量增加时,增加服务器线路的带宽是有效的,但网速有限,不能解决所有问题。在这种情况下,使用多台服务器来分担负载会更有效,这种架构统称为分布式架构。要使用负载均衡器,首先将Web服务器的实际地址替换为负载均衡器的IP地址,并在DNS服务器上注册。这样,当我们要访问我们的web服务器时,实际上要经过负载均衡器进行一次转发。这样,我们只需要在负载均衡器上判断我们服务器的负载情况,就可以决定由哪个服务器来处理请求。缓存服务器除了使用多台功能相同的Web服务器来分担负载外,还可以将整个系统按照功能划分为不同的服务器,如Web服务器、数据库服务器等。缓存服务器是一种按功能分担负载的方法。缓存服务器是通过代理机制缓存数据的服务器。代理处于Web服务器和客户端之间,具有中继对Web服务器的访问的功能。中转时,可以将Web服务器返回的数据保存在磁盘中,并可以将磁盘中的数据返回给客户端而不是Web服务器。这种保存的数据称为缓存,缓存服务器就是指这样的功能。Forwardproxy转发,代理就是客户端;相反,代理是服务器。上面就是在Web服务器端部署一个代理,然后利用它的缓存功能来提高服务器的性能。另一种方法是在客户端部署缓存服务器。正向代理刚出现的时候,它的一个目的是缓存,另一个目的是设置防火墙。使用正向代理时,一般需要在浏览器设置窗口的“代理服务器”栏中填写正向代理的IP地址,浏览器会忽略地址栏的内容,直接将所有请求发送到转发代理。正向代理改进版——反向代理使用正向代理,需要在浏览器中设置,可以说是正向代理识别的一个特性。但是,设置浏览器非常麻烦,错误的设置可能会导致浏览器无法正常工作。所以我们可以使用代理服务器接受网络上的连接请求,然后将请求转发给内网的服务器,并将从服务器得到的结果返回给请求连接的客户端。负载平衡是一种反向代理应用程序。透明代理缓存服务器确定转发目标的另一种方法是检查请求报文的包头。因为数据包的IP头中包含了接收方的IP地址,只要知道这个地址,就知道用户要访问哪个服务器。这种方法称为透明代理。透明代理结合了正向代理和反向代理的优点。正常情况下,请求报文是直接从浏览器发送到Web服务器,不会到达透明代理。我们在浏览器到Web服务器的请求报文路径中放置了一个透明代理,在报文通过时进行拦截。连接到互联网的接入网是一个网关。我们可以在这里设置一个反向代理。用户不会意识到代理的存在,也不会注意到HTTP消息是如何转发的。因此,大家倾向于将透明代理称为缓存。内容分发服务内容分发服务就是我们常说的CDN缓存。提供CDN缓存的厂商会与网络运营商和网络服务器运营商签订协议,创建一些离用户网络最近的边缘服务器,然后在这些边缘服务器(节点)上缓存文件。Web服务器只要与CDN缓存服务器建立连接,当客户端访问Web服务器时,实际上是在访问CDN缓存服务器。查找最近的缓存服务器。这与DNS相结合,使用户能够以最小的延迟访问节点。通过重定向服务器分配访问目标重定向可以高精度匹配目标服务器,但问题是会带来更多的更新缓存服务器内容的请求。当网络服务器更新时,缓存服务器的内容可能不再适用。这时候就需要更新机制来更新缓存。请求到达服务器,响应返回浏览器总结TCP协议:TransmissionControlProtocol。它是一种基于连接的协议,即在发送和接收数据之前,必须与对方建立可靠的连接。IP协议:用于连接多个分组交换网络。它在源地址和目标地址之间传输称为数据包的东西。它还提供了数据大小的重组功能以适应不同的网络。包装尺寸要求。UDP协议:简单版的TCP协议,只负责简单的发送数据包,不负责监听。适用于小包和音视频传输的请求。问:为什么不直接用域名查询而是用IP地址查询?答:IP地址是一个只有4个字节的数字,而域名是一个字符,有几十到几百个字节,增加了路由器的负担。域名比较好记,IP地址是一串数字,不太好记。问:为什么会有三次握手和四次挥手?答:三次握手过程中,服务端同时向客户端发送ACK和SYN。当挥手四次时,当收到对方的FIN报文时,只表示对方不再发送数据,但仍然可以接收数据。现在是否关闭发送数据通道需要由上层应用决定。所以自己的ACK和FIN一般是分开发送的。问题:正向代理和反向代理有什么区别?答:1、正向代理实际上是客户端的代理,帮助客户端访问它无法访问的服务器资源。反向代理是服务器的代理,帮助服务器做负载均衡、安全保护等。2、正向代理一般由客户端设置,比如在自己的机器上安装一个代理软件。反向代理一般由服务器设置,比如在自己的机器集群中部署一个反向代理服务器。3、在正向代理中,服务器不知道真正的客户端是谁,认为访问自己的才是真正的客户端。在反向代理中,客户端不知道真正的服务器是谁,以为??自己访问的就是真正的服务器。4、正向代理和反向代理的作用和目的不同。正向代理主要用来解决访问限制问题。反向代理是提供负载均衡、安全保护等功能。两者都可以提高访问速度。问题:一个完整??的HTTP请求答案:建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接。大名鼎鼎的TCP/IP协议族,所以Internet又叫TCP/IP网络。HTTP是比TCP更高级的应用层协议。按照规则,只有下层协议建立后,才能建立上层协议的连接。因此,必须先建立TCP连接。一般TCP连接的端口号为80,浏览器向Web服务器发送请求命令。浏览器发送请求头信息。浏览器发送请求命令后,还需要以头信息的形式向Web服务器发送一些其他信息。之后,浏览器发送一个空行通知服务器。它已完成发送此标头。Web服务器响应客户端对服务器的请求后,服务器会向客户端发回一个响应,HTTP/1.1200OK,响应的第一部分是协议的版本号和响应状态码。Web服务器发送响应头就像客户端通过请求发送关于它自己的信息一样,服务器通过响应将关于它自己的数据和请求的文档发送给用户。Web服务器向浏览器发送数据Web服务器向浏览器发送头部信息后,发送一个空行表示头部信息的发送到此结束,然后按照Content-描述的格式发送Typeresponseheaderinformation用户请求的实际数据。Web服务器关闭TCP连接并完成数据通信后,服务器会主动通过TCP断开连接四次。但是,如果连接是长连接,浏览器或服务器的头部信息会添加keep-alive信息,保持连接状态。当发送其他数据时,可以节省建立连接的时间。
