网络协议基础01-七层网络协议

前言:为什么学?

1.避不开:几乎所有的程序运行都会涉及到网络协议

2.不过时:越基础知识越不容易过时,值得花时间深入学习和积累。

容器技术、大数据、云计算、人工智能、区块链...等技术更新迭代速度很快,刚学完这个版本,又即将被更好的替代,应接不暇。掌握了计算机组成原理、操作系统、网络协议、数据结构与算法这些基础,不管新技术变化再块,基础的知识还是相差不大的。

3.没记录:以往学习的很多知识都没记录文档,学完就丢了,顾此想重新梳理学习,温故知新。

以下整理的资料,很基础的知识,适合小白,大佬们跳过。

一、网络通信的原理

1.互联网的本质就是一系列的网络协议

(1)计算机如何一起玩耍?

               

 

两台计算机之间通信与两个人打电话之间通信的原理是一样的

 

(比如:中国有很多地区,不同的地区有不同的方言,为了大家都能彼此听懂,这里就需要统一标准,讲普通话。跟美国,全球打电话,统一标准,用英语)

两台计算机之间通信,也有一系列统一的协议标准,大家都遵循这个标准,就可以彼此交流

     

2.七层网络

               (1)互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

               

 

(2)网络协议通常分7层,网络为什么要分层?

我理解像我们写代码需要分层一样,为了抽象统一,责任分离,解耦,组件复用,标准制定等。这个思想跟数据部的思想是统一的。

(3)每层都负责干啥活?

为了更容易理解各层具体干了哪些事,这里举了个我们日常生活中寄快递

层级

解释

类比送快递

1.物理层:信道&公路

实实在在,看得见的电缆、光纤等物理设备,,能传输原始0,1信号

快递运输需要的公路、铁路和航线等,可以运输东西

2.数据链路层:打帧贴mac地址(标识局域网具体主机)&打包贴门牌号(标识楼层具体门排号)

封装多少数据为一组(帧)+贴上mac地址(主机mac地址,世界唯一性,能精确匹配到局域网里面是哪台主机),数据包到局域网广播一下,谁的mac地址一一对应,谁把包收下

打包快递,打包多少东西为1个包裹(帧)+贴个有门牌号如14楼1401房(mac)。包裹到楼层,吼一声,1401下来拿快递,1401一听确实是自己的,收下

3.网络层:贴ip地址(源ip地址,目标ip)&贴单元楼层号(寄地址,收地址)

封装ip数据(源ip地址,目标ip);根据ip可以在互联网网中找到目标主机所在局域网

贴地址具体到单元楼层号(详细地址精确到单元号)保利666,14楼,快递能精确找到你地址所在单元楼层。

4.传输层:标端口号(找应用程序)&写收件人(找人)

前面已经能把数据包带到具体的主机上了,但是包给哪个应用程序,就需要贴上端口号,应用程序网络收发数据都会绑定一个端口号

前面已经准确找到房号了,这里还需要确定这个包裹给谁,再写上收件人

5.会话层:控制会话

会话控制,何时建立和释放会话等(socket就是介于传输和下面者三层)

东西送到,你点给差评,老板让你改改,你不肯。。。

6.表示层:翻译官

网络数据翻译成字符串等(不同编码表示的意思)

只说英文的和只说普通话要交流,中间需要个翻译,两者都会的

7.应用层:app

表示层表示的意思给应用程序看(http协议出行)

人机交互,发个http请求。。。

                这里5,6,7层可以看作成一层,统一叫应用层。

(4)快速记住

为了加深记忆,整了一段“照骗”口诀:

勿(物)恋(链)网(网)红,传(传)说会(会)被照片表(表)面欺骗,都是美图应(应)用的锅

二、各层之间数据传输

1.OSI七层协议数据传输的封包与解包过程

 

 

PC1发送(封包)

应用层表示层会话层传输层网络层数据链路层物理层
【数据】【数据】【数据】【TCP报头+数据】【IP报头+TCP报头+数据】【以太帧头+IP报头+TCP报头+数据】【0101010...】
app发送数据经过翻译控制会话帧转位发送(电信号)
贴端口号(给哪个app)贴IP(到哪个局域网)贴mac地址(到哪个主机,世界唯一)

PC2接收(解包)

物理层数据链路层网络层传输层会话层表示层应用层
【0101010...】【以太帧头+IP报头+TCP报头+数据】【IP报头+TCP报头+数据】【TCP报头+数据】【数据】【数据】【数据】
位(电信号)转帧处理帧头处理ip头处理TCP头控制会话翻译app收到数据
报头包括ip和port

        到这里,对网络数据传输应该有一个大概的了解了。往下再看看一下重要环节

三、各层相关协议

1.物理层(电信号:0101)

功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

2.数据链路层(帧头:0101->以太帧+mac地址)

由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。

功能:定义了电信号的分组方式

相关协议:以太网协议,mac地址

(1)以太网协议ethernet(帧)

早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet。ethernet规定

a.一组电信号构成一个数据包,叫做‘

b.每一数据帧分成:报头head和数据data两部分

 

(2)mac地址(局域网地址,世界唯一性,主机身份证)

1)head中包含的源和目标地址由来:

ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址,它是用来确认网络设备位置的位址

2)mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址.

长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

 

3)区分物理网卡和虚拟网卡

包含以下mac地址的前8个字节(前3段)是虚拟网卡

"00:05:69"; //vmware1

"00:0C:29"; //vmware2

"00:50:56"; //vmware3

"00:1c:14"; //vmware4

"00:1C:42"; //parallels1

"00:03:FF"; //microsoft virtual pc

"00:0F:4B"; //virtual iron 4

"00:16:3E"; //red hat xen , oracle vm , xen source, novell xen

"08:00:27"; //virtualbox

4)广播

有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

3.网络层(ip报头:ip+arp)

由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,

 

那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难

功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址(ip地址)

相关协议:ip协议,arp协议

(1)ip协议(区分不同局域(子)网)

1)定义

        • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
        • 范围0.0.0.0-255.255.255.255
        • 一个ip地址通常写成四段十进制数,例:172.16.10.1

ip地址分俩部分:

        • 网络部分:标识子网
        • 主机部分:标识主机

注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

子网掩码(255.255.255.0):

所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

2)判断任意两个IP地址是否处在同一个子网络?

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,

172.16.10.1:10101100.00010000.00001010.000000001

255255.255.255.0:11111111.11111111.11111111.00000000

AND运算得网络地址结果:10101100.00010000.00001010.000000001→172.16.10.0

172.16.10.2:10101100.00010000.00001010.000000010

255255.255.255.0:11111111.11111111.11111111.00000000

AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

结果都是172.16.10.0,因此它们在同一个子网络。

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

3)ip数据包结构

 

如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了

 

(2)arp协议(根据ip,获取mac地址)

计算机在发包时,如何获取目标主机的mac,就需要通过arp协议

1)工作过程

假设有:

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;

主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

2)路由表

#route -n   ,列出内核路由表

 

Destination:目标网络或目标主机

0.0.0.0:匹配所有目标

192.168.5.0:匹配这个网段的

Gateway :网关地址,如果没有就显示星号

Genmask :网络掩码

Flags:一个标识(U:路由是启动,G:需要透过外部的主机 (gateway) 来转递封包)

Metric :距离、跳数

Ref:不用管,恒为0(Not used in the Linux  ker-nel.)

Use:该路由被使用的次数,可以粗略估计通向指定网络地址的网络流量

Iface: 接口,即eth0,eth0等网络接口名

3)判断某个网路封包应该如何传递?

 

举例:我当前主机ip是192.168.5.129,若我有包要传往192.168.5.130,它的执行顺序应该是:

1)先找内网,192.168.5.130是属于192.168.5.0这个网域的路由,找到了,直接由ens33(网卡)传递出去。

若我的包要传到百度:14.215.177.38,它会先找内网,内网没有就走网关出去:

1)192.168.5.0,ip不是在内网的,则去网关找

2)0.0.0.0,从它的接口ens33传出去了,透过ens33将封包传给192.168.5.2这个网关(Gateway)出去了。这个包就由下个路由来找下一跳。

(先内再外,由小范围到大范围)

4)查看高速缓存中的所有项目

#arp -an //查看当前缓存的ip和对应的mac地址

 

#ping 192.168.5.130/131,之后,这个ip和mac地址就缓存起来了

 

130的ip和mac地址

 

4.传输层(TCP协议,UDP协议...)

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启微信,企业微信,等多个应用程序,

那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

传输层功能:建立端口到端口的通信

补充:端口范围0-65535,0-1023为系统占用端口

相关协议:TCP协议,UDP协议

(1)TCP协议

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

优点:可靠,稳定

TCP报头结构:

 

1)源端口 目标端口

2)seq:序列码,可理解为包的id.操作系统的一个递增主键(如:805100)

3)ack:确认编码,seq+1

4)控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。

a)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

b)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

c)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。通常在发送端在发送大包时或者在分片报文的最后一片tcp报文中会将PSH置1,告诉接受端立即推送给上层。

d)RST:重置连接标志

e)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1

f)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流

5).窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

6).校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

7)紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

(2)经典的三次握手(重点)

 

1)第一次握手(A-B)

起初两端都处于CLOSED关闭状态。(服务端要提前启动,监听端口,状态变为LISTEN(监听)状态)Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态等待Server确认;

(SYN=1:表示要握手的包,ack=1:表示应答包,seq=xxxxxx100(数字)传输序列号)

2)第二次握手(B-A)

Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,

Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;

实际上服务端应答发了1个包包含了2种意思:跟客户端建立连接,同意客户端建立连接请求。

(SYN=1 Synchronize(同步),seq=xxxxx200ACK=1 ACK (ACKnowledge Character) 中文译名: 确认字符 分 类,ack = xxxxx100+1)

3)第三次握手(A-B)

Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,

Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。

(ACK=1,seq=xxxx100+1,ack=xxxxx200+1)

(3)四次挥手

 

数据传输结束后,通信的双方都可释放连接,A和B都处于ESTABLISHED状态。

1)第一次挥手(A-B)

A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。

2)第二次挥手(B-A)

B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。

3)中间A等待

A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

4)第三次挥手(B-A)

B可能数据还没发完,先发完。B没有要向A发出的数据了,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。

5)第四次挥手(A-B)

A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

(4)经典问题

1)为什么到最后一步A还需要等待2MSL(Maximum Segment Lifetime:报文生命周期的两倍时间),而不是直接进入CLOSED状态?

因为是怕A最后发送这个包,可能B无法收到(网络波动啥的)。

如果B没收到,在超时后还能继续发送FIN.

1.假设A在这时间不等待,直接close,那就无法收到第二次的FIN请求,B就永远无法收到最后一次挥手请求。

2.假设这时A在close后,马上又个B发送一个端口号都相同的请求,这里就第一次握手不就和第四次挥手搞混了。

结论:a.保证TCP协议的全双工连接能够可靠关闭  b.保证这次连接的重复数据段从网络中消失

2)为什么A还要发送一次确认呢?可以二次握手吗?

不可以。主要为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。

3)Server端易受到SYN攻击?

服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认

4)为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

(5).UDP协议(不可靠)

优点:快

1).基于连接与无连接;

2).对系统资源的要求(TCP较多,UDP少);

3).UDP程序结构较简单;

4).流模式与数据报模式 ;

5).TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

5.会话层

由来:建立端口到端口的通信后,谁来控制什么时候会话何时断开?

功能:发送方和接收方之间进行通信时创建维持、之后终止断开连接的地方

解释:

     (1) 支持会话连接的建立和释放,以及常规数据的传输,支持协商式地有序释放会话连接,发起协商式有序释放会话连接的一方必须事先获得对应的令牌;

    (2) 支持用户以半双工或全双工的方式交换数据,同时支持用户之间进行优先级较高的数据传输;

    (3)支持用户分割会话单元内部的数据流,支持用户分割会话单元,要求活动和主同步令牌的支持;对于主同步点请求,对方必须予以应答;

    (4)支持用户在异常情况下进行恢复动,支持活动管理服务,利用活动划分逻辑工作段,并加以控制和恢复。

6.表示层

由来:网络中来的数据人是看不懂的,需要翻译成人能理解的。

功能:将复杂的数据结构转化为扁平的字节串格式,说人话

解释:比如一台使用 EBCDIC 码的电脑要和一台使用ASCII码的电脑进行通信。对于小写字母“a”来说, EBCDIC将其表示为0x81, ASCII 将其表示为 0x61。

这时就需要表示层 从中进行数据“翻译”,来确保从一个系统的应用层发出的信息,可以被 另一个系统的应用层正确识别。简单的理解,你表示的是什么。

(1)数据格式 (data formatting)

1)字符编码:EBCDIC、ASCII

2)图片编码:GIF(Graphic Interchange Format)、JPEG(Joint Photographic Experts Group)

3)多媒体数据:多种形式,可以下载完之后再放,也可以边下载边放

(2)数据压缩 (data compression)

(3)数据加密 (data encryption)

7.应用层

由来:表示层的东西表示给谁用?各种应用程序

功能:跟人交互的玩意。各种应用程序,浏览器,服务器等

解释:顾名思义就是应用程序。它是tcp/ip五层模型的最高层,用于为用户提供服务的。

(1)标准的应用层协议:http协议(明送秋波)

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

(2)通讯模式

1)客户-服务器(c/s)模式:浏览器和服务器

2)对等模式(p2p)

3)混合模式

(3)https协议

为了解决HTTP报文裸露没有加密的缺点,对报文进行加密错误。像送快递,给车厢上锁。

HTTP+SSL/TLS(加解密协议)

四、使用场景

1.常用的4层负载均衡和7层负载均衡

(1)四层就是基于IP+端口的负载均衡

LVS(Linux Virtual Server),三种工作模式

(2)七层就是基于URL(http)等应用层信息的负载均衡

nginx反向代理

2.Nginx优缺点:

Nginx的优点:

      1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。
      2. Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一;相反LVS对网络稳定性依赖比较大。
      3. Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
      4. 可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
      5. Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
      6. Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
      7. Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。
      8. Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有 lighttpd了,不过 lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。
      9. Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多。

Nginx的缺点:

      1. Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。
      2. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持Session的直接保持,但能通过ip_hash来解决。

3.LVS的优

LVS的优点:

      1. 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
      2. 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
      3. 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived。
      4. 无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会受到大流量的影响。
      5. 应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。

LVS的缺点:

      1. 软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
      2. 如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有 Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

五、LVS的三种工作模式

1、基于NAT的LVS模式负载均衡

(1)NAT(Network Address Translation)网络地址转换。LVS负载调度器可以使用两块网卡配置不同的IP地址

客户端ip:CIP

对外是公网ip:VIP(Virtual IP Address)

对内是私钥ip:DIP

DIP连接的是后端的真实服务器:RIP(Real Server)

 

问题:原路返回

带宽成为瓶颈

消耗算力

要求RS的GW指向负载均衡服务器

能不能服务器直接返回给客户端?

2、基于TUN的LVS负载均衡

IP隧道(IP tunning):一种数据包封装技术。它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server)

 

 

LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担

3、基于DR的LVS负载均衡

直接路由模式,要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享

 

 

速度快

成本低

负载和RS要再同一局域网

4.LVS负载均衡调度算法

(1)四种静态: 

rr:轮循

wrr:加权轮询

dh: 目标地址散列调度

sh: 源地址散列调度

(2)动态调度方法:

lc: 最少连接

wlc: 加权最少连接

sed: 最短期望延迟

nq: never queue最少队列调度

LBLC: 基于本地的最少连接

LBLCR: 基于本地的带复制功能的最少连接

  • 19
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值