环境:搭建lvs的nat和dr模式,分别在2种架构的apache上上传能提供下载的mp3文件,客户端去下载mp3文件并抓包,看2者的区别,本人使用的是wget的方式进行的下载。

lvs-dr模式

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式

首先建立连接(TCP3次握手)

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_02

之后客户端开始与服务器传送数据

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_03

服务器将mp3文件分片进行传输

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_04

最后传输完成,连接断开

lvs-nat模式

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_05

建立连接(3次握手)

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_06

客户端发送get请求,服务器给出回应,传送数据

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_07

 

抓包比较lvs的nat模式和dr模式_抓包比较lvs的nat模式和dr模式_08

最后传输完成,断开连接

通过抓包以及对比

首先使用dr模式的下载速度远大于nat模式,原因是2者的工作原理不同,dr的工作原理是:当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client,当client继续发包过来时,LVS根据刚才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real-server上,当连接中止或者超时,hash表中的记录将被删除。然而nat的工作原理是:client发送请求到LVS上,LVS选择一个Real-server,并记录连接信息到hash表中,然后修改client的请求的目的IP地址为Real-server的地址,将请求发给Real-server,Real-server收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS,LVS收到reply包后,修改reply包的的源地址为LVSIP,发送给client,从client来的属于本次连接的包,查hash表,然后发给对应的Real-server。当client发送完毕,此次连接结束或者连接超时,那么LVS自动从hash表中删除此条记录。综上所述,dr模式可以给服务器减少压力,dr模式的效率相比nat模式要快,但是dr模式也是有不足的地方,就是分发器与realserver必须在同一个局域网中,如果不在的话,是不能实现的,在这种情况下还是选择tunnel模式。