计算机网络

发布于:2024-04-17 ⋅ 阅读:(25) ⋅ 点赞:(0)

网络协议

计算机网络交换数据需要遵守的一些事先约定好的规则

为什么要对网络协议分层

简化问题,灵活性好,易于实现和维护,促进标准化

缺点:功能可能出现在各个层中增加开销。为了使不同体系结构的计算机网络都能互联,国际标准化组织 ISO 于1977年提 出了一个试图使各种计算机 在世界范围内互联成网的标准框架,即著名的开放系统互联基本参考模型 OSI/RM,简称为OSI。

TCP/IP(四层): 应用层、运输层、网际层和网络接口层。

五层协议(综合TCP/IP和osi)应用层、运输层、网络层、数据链路层和物理层

OSI七层协议:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层。

TCP/IP(四层): 应用层、运输层、网际层和网络接口层。

应用层:

应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。

在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等

运输层:

是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。 运输层主要使用一下两种协议

1. 传输控制协议-TCP:提供面向连接的,可靠的数据传输服务。

2. 用户数据协议-UDP:提供无连接的,尽大努力的数据传输服务(不保证数据传输的可靠性)。

UDP TCP
是否连接 无连接 面向连接
是否可靠
连接对象个数 1v1,1v多,多v1,多v多 1v1
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部小20字节, 大60字节
场景 适用于实时应用(IP电话、视频会议、直播等) 用于要求可靠传输的应用,例如文件传输

每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协 议之一:

运行在TCP协议上的协议:

http https ftp pop3 smtp telnet ssh

  1. HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏 览。
  2. HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
  3. FTP(File Transfer Protocol,文件传输协议),用于文件传输。
  4. POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
  5. SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子 邮件。
  6. TELNET(Teletype over the Network,网络电传),通过一个终端 (terminal)登陆到网络。
  7. SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

运行在UDP协议上的协议:bootp ntp dhcp dns

  1. BOOTP(Boot Protocol,启动协议),应用于无盘设备。
  2. NTP(Network Time Protocol,网络时间协议),用于网络同步。
  3. DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态 配置IP地址。

运行在TCP和UDP协议上: DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作

网络层:

网络层的任务就是选择合适的网间路由和交换结点,确保计算机通信的数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP协议,因此分组也叫IP数据报 ,简称数据报。

互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连 接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol) 和许多路由选择协 议,因此互联网的网络层也叫做网际层或 IP 层。

数据链路层:

数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息 (如同步信息,地址信息,差错控制等)。

发送端在层与层之间传输数据时,每经过一层时会被打上一个该层所属的首部信息。反之,接收端在层与层之间传输数据时,每经过一层时会把对应的首部信息去除。

物理层:

实现相邻计算机节点之间比特流的透明传送。物理层上所传送的数据单位是比特。

TCP/IP 协议族

在互联网使用的各种协议中重要和著名的就是 TCP/IP 两个协议。现在人们 经常提到的 TCP/IP 并不一定是单指 TCP 和 IP 这两个具体的协议,而往往是表 示互联网所使用的整个 TCP/IP 协议族。

TCP的三次握手四次挥手

第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。 

第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。

第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接, 于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文 是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。

比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据

第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位 (FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外 FIN报文段即使不携带数据也要占据一个序列号。

第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号 seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。

第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、 序列号seq=2350(2300+50)。

第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。

一个TCP连 接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个 链接,通过四次挥 手来关闭一个连接。 当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。

问题:

1.为什么TCP连接的时候是3次?2次不可以吗?

考虑丢包的可能,如果服务器端的第二次握手对应的报文丢失,客户端没收到就不会向服务器端发送数据。如果是三次,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

2.为什么TCP连接的时候是3次,关闭的时候却是4次?

因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端 收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户 端发FIN报文(所以不能一次性将确认报文和 FIN报文发给客户端,就是这里多出来了一次)。

关键是要保证服务器端把数据都发完

3.为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认 ack报文就会重发第三次挥手的报文,这样报文一去一回 长时间就是2MSL,所以需要等这么长 时间来确认服务端确实已经收到了。

4.如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接

什么是HTTP,HTTP 与 HTTPS 的区别

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。超文本传输协议

区别 HTTP HTTPS
协议 运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份 身披 SSL( Secure Socket Layer )外壳的 HTTP,运行于 SSL 上,SSL 运行于 TCP 之上, 是添加了加密和认证机制的 HTTP
端口 80        443
资源消耗 较少 由于加解密处理,会消耗更多的 CPU 和内存资源
开销 无需证书 需要证书,而证书一般需要向认证机构购买
加密机制 共享密钥加密和公开密钥加密并用的混合加密机制
安全性 由于加密机制,安全性强

常用HTTP状态码

1xx    Informational(信息性状态码)接受的请求正在处理

2xx   Success(成功状态码)请求正常处理完毕

3xx Redirection(重定向状态码)需要进行附加操作以完成请求

4xx Client Error(客户端错误状态码)服务器无法处理请求

5xx Server Error(服务器错误状态码)服务器处理请求出错

2XX 成功(这系列表明请求被正常处理了)

常用HTTP状态码:

200 OK,表示从客户端发来的请求在服务器端被正确处理

204 No content,表示请求成功,但响应报文不含实体的主体部分

206 Partial Content ,进行范围请求成功

3XX 重定向 (表明浏览器要执行特殊处理)

301 moved permanently,永久 性重定向,表示资源已被分配了新的 URL

302 found,临时性重定向,表示资源临时被分配了新的 URL

303 see other,表示资源存在着另一个 URL, 应使用 GET 方法获取资源 (对于 301/302/ 303响应,几乎所有浏览器都会删除报文主体并 自动用 GET重新请求)

304 not modified ,表示服务器允许访问资源,但请求未满足条件的情况(与重定向无关)

307 temporary redirect,临时重定向,和302 含义类似,但是期望客户端保持请求方法不变向新的地址发出请求

4XX 客户端错误

400 bad request,请求报文存在语法错误

401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息

403 forbidden ,表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述

404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

500 internal sever error,表 示服务器端在执行请求时发生了错误

501 Not Implemented,表示服务器不支持当前请求所需要的某个功能

503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

GET和POST区别

浏览器和服务器的交互是通过 HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。

HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。

  • GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。
  • POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。
  • PUT:英文含义是放置,也就是向服务器新添加数据,就是所谓的增。
  • DELETE:从字面意思也能看出,这种方式就是删除服务器数据的过程。

1.Get是不安全的,因为在传输过程,数据被放在请求的URL中; Post的所有操作对用户来说都是不可见的。但是也可以在get请求加上 request body,给 post请求带上 URL 参数

2.Get请求提交的url中的数据最多只能是2048字节,这个限制是浏览器或者服务器给添加的,http协议并没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运 行,防止有人恶意发送请求。Post请求则没有大小限制

3.字符类型限制。 Get限制Form表单的数据集的值必须为ASCII字符;;而Post支持整个ISO10646字符集。

4.Get执行效率却比Post方法好。Get是form提交的默认方法。

5.GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST, 浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

什么是对称加密与非对称加密

对称密钥加密是指加密和解密使用同一个密钥的方式。

而非对称加密是指使用一对非对称密钥,即 公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

Session、Cookie和Token的主要区别

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份

cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response 向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie, 以此来辨认用户身份。

session是依赖Cookie实现的。session是服务器端对象。session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。

Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自 己的合法地位 session与token区别

session机制存在服务器压力增大,CSRF跨站伪造请求攻击,扩展性不强等问题;

session存储在服务器端,token存储在客户端 token提供认证和授权功能,作为身份认证,token安全性比session好;

session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上,token适用于项目级的前后端分离(前后端代码运行在不同的服务器下)

Servlet是线程安全的吗

Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet() 和doPost()方法内。虽然 使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。

Servlet接口中有哪些方法及Servlet生命周期

在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在 doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet可以设置 初始化参数,供Servlet内部使用。

Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:

void init(ServletConfig config) throws ServletException

void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException

void destory()

java.lang.String getServletInfo()

ServletConfig getServletConfig()

生命周期: 1.Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其 init()方法进行Servlet的初始化; 请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法; 当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet 的destroy()方法。 init方法和destory方法只会执行一次,service方法客户端每次请求Servlet都会执行。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init 方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。

如果客户端禁止 cookie 能实现 session 还能用吗?

session 依赖cookie里面的sessionid,禁用Cookie相当于失去 了Session ID,也就得不到Session了

假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:

1手动通过URL传值、隐藏表单传递Session ID。

2 用文件、数据库等形式保存Session ID,在跨页过程中手动调用。

说说浏览器访问http://www.taobao.com,经历了怎样的过程。

首先在浏览器输入网址搜索,首先是查找浏览器缓存,浏览器会保存一段时间你之前访问过的一些网址的DNS信息,不同浏览器保存的时常不等。如果没有找到对应的记录,这个时候浏览器会尝试调用系统缓存来继续查找这个网址的对应DNS信息。如果还是没找到对应的IP,那么接着会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS信息。如果还是没有,这个请求就会被发送到ISP(注:Internet Service Provider,互联网服务提供商,就是那些拉网线到你家里的运营商,中国电信中国移动什么的),ISP也会有相 应的ISP DNS服务器,一听中国电信就知道这个DNS服务器的规模肯定不会小,所以基本上都能在这里找得到。

如果还是没有的话, 你的ISP的DNS服务器会将请求发向根域名服务器进行搜索。根域名服务器就是面向全球的顶级DNS服务器,共有13台逻辑上的服务器,从A到M命名,真正 的实体服务器则有几百台,分布于全球各大洲。所以这些服务器有真正完整的DNS数据库。如果到了这里还是找不到域名的对应信息,那只能说明一个问题:这个域名本来就不 存在,它没有在网上正式注册过。或者卖域名的把它回收掉了(通常是因为欠费)。

这也就是为什么打开一个新页面会有点慢,因为本地没什么缓存,要这样递归地查询下去。

例如"mp3.baidu.com",域名先是解析出这是个.com的域名,然后跑到管理.com域名的服务器上进行进一步查询,然后是.baidu,最后是mp3, 所以域名结构为:三级域名.二级域名.一级域名。 浏览器终于得到了IP以后,浏览器接着给这个IP的服务器发送了一个http请求,方式为get,例如访问nbut.cn。这个get请求包含了主机(host)、用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive表示浏览器告诉对方服务 器在传输完现在请求的内容后不要断开连接,不断开的话下次继续连接速度就很快了。其他的顾名思义就行了。还有一个重点是Cookies,Cookies保存了用户的登陆信息,在每 次向服务器发送请求的时候会重复发送给服务器。Corome上的F12与Firefox上的firebug(快捷键shift+F5)均可查看这些信息。服务器响应请求,发回数据,客户端解析数据渲染页面。

ARP:地址解析协议

ARP协议为IP地址到对应的硬件地址之间提供动态映射。

如果本地主机想要向某一个IP地址的主机(路由表中的下一跳路由器或者直连的主机,注意此处IP地址不一定是IP数据报中的目的IP) 发包,但是并不知道其硬件地址,此时利用ARP协议提供的机制来获取硬件地址,具体过程如下:

本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。

目的主机的ARP层解析这份广播报文,识别出是询问其硬件地址。于是发送ARP应答包,里面包含IP地址及其对应的硬件地址。

本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据报就可以传送了。

ARP高速缓存

每个主机都有一个ARP高速缓存表,这样避免每次发包时都需要发送ARP请求来获取硬件地址。默认老化时间是20分钟。利用arp -a命令可以查看显示系统中高速缓存的内容。 Windows下“arp -d”命令可以清除arp高速缓存表。

ARP代理

如果ARP请求时从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器可以回答该请求,这个过程称作委托ARP或者ARP代理。这样可以欺骗发起ARP请求的 发送端,使它误以为路由器就是目的主机。

RARP:逆地址解析协议

将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP 服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。 RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址。

:浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?

A: 1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。

2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。

3、路由缓存:路由器也有DNS缓存。

4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。

5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服 务器,依次类推)。

CDN 原理

RPC

RPC(Remote Procedure Call Protocol)远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够 像访问本地系统资源一样,去访问远端系统资源。比较关键的一些方面包括:通讯协议、序列化、资源(接口)描述、服务框架、性能、语言支持等。

具体调用过程:

1、 服务消费者(client客户端)通过调用本地服务的方式调用需要消费的服务;

2、 客户端存根(client stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体;

3、 客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端;

4、 服务端存根(server stub)收到消息后进行解码(反序列化操作);

5、 服务端存根(server stub)根据解码结果调用本地的服务进行相关处理;

6、 本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub);

7、 服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方; 8、 客户端存根(client stub)接收到消息,并进行解码(反序列化);

9、 服务消费方得到 终结果;而RPC框架的实现目标则是将上面的第2-10步完好地封装起来,也就是把调用、编码/解码的过程给封装起来,让用户感觉上像调用本地服务一样 的调用远程服务。

负载均衡算法/策略

循环均衡

每一次来自网络的请求轮流分配给内部中的服务器

权重轮循均衡  

给每个服务器分配不同的权重,按比例分

随机均衡

处理请求分担时随机选择

响应速度均衡

对各服务器发起探测请求如ping 根据响应时间来决定

最少连接均衡 

把当前请求分配给连接数最少的服务器

处理能力均衡

分配给内部中处理负荷最轻的服务器

dns响应均衡

根据最先受到域名解析ip地址来继续请求服务

哈希算法

一致性哈希  相同参数的请求综述发到同一提供者。 

ip地址散列 

通过管理发生方ip和目的地ip的散列,间来自同一发送方的分组统一转发到相同的服务器。

url散列

通过管理客户端请求url信息的散列,将发送到相同url的请求转发到同一服务器。