大数据之数据传输协议与负载均衡原理(一)

上一篇说到了应用层协议调用传输层协议,建立TCP连接的过程。
接着说TCP协议调用下层协议将数据传输到目标服务器的过程。

应用层协议:http, smtp, ssh

传输层协议:tpc,udp
命令:netstate -natp 可以查看哪些主机的哪些端口号与当前机器通信
持有:源端口号;目的端口号
网络层:ip,icmp
命令:route -n 路由表
持有: 源ip地址;终极目的地ip址
链路层:以太网
命令:arp -a 链路层数据表
持有:源mac地址;网关目的mac地址

网络层协议

当传输层需要传数据包,调用网络层时,需要指明目标端口的ip地址,ip地址包含两部分: 1、是对方的网络号,2、对方机器在其网络号中的编号。
eg:
ip=192.168.6.105
mask =255.255.255.0
gateway = 192.168.6.1
ip地址与mask通过二进制按位与运算后,只剩下192.168.6.0,即为局域网的网络号,剩下的105为主机号。通过网络号和主机号,即可找到该主机。

通过route -n 命令查看,看到网卡enp0s3,内核通过ip地址与mask二进制与就得到了destination地址,网卡连进了192.168.6.0的网络号的局域网中。 而192.168.6.1是我们在enp0s3配置的网关地址
在这里插入图片描述
互联网上的数据包的传输是基于每个数据包转发到下一个机器,下一个机器决策再往下传送到哪个机器上,而不是完整路径规划的方式,网络层就是决策这个数据包需要从哪个哪块网卡转发给下一站,即发给哪个网关。

数据包只能转发到与自己在同一局域网的网关,如果是在同一局域网内通信,则不需要网关进行决策,只有跨网通信才需要网关转发。路由器的就是一个网口在这个网,一个口在那个网,将局域网中的数据包转发到另一个网络中。

比如需要将数据包的终极目标地址是:119.75.217.26, 则将这个终极地址119.75.217.26 与路由表中每个的mask地址按位与,第一行按位与的结果与网络号的结果匹配,在同一个网络中,网络才通数据才可以到达。
在这里插入图片描述

因为网关地址和mask为都0.0.0.0,因此任何地址都能和它匹配的上,因此该网关为默认网关。

至此,网络层决策好了下一站的ip地址,会调用链路层,将ip地址转换为路由器网卡的mac地址。同时网络层协议还持有终极目标服务器的ip地址。

链路层协议

网络层协议决定了下一个网关地址,需要将网关的ip地址转换为路由器网卡的MAC地址,此时需要调用链路层协议将ip地址转换为mac地址,将数据包发给网关。
通过 arp -a 查看ip地址对应的mac地址
在这里插入图片描述
系统该开机的时候,并不知道哪个ip地址对应哪个mac地址,该表为空。通过arp 地址请求协议。

首先局域网内的机器A通过网路层的路由表,知道了要去下一站的ip地址,比如192.168.6.1,为了获取192.168.6.1的mac地址,服务器A会阻塞网络,发起arp协议请求:

step1:机器A造一个数据包,该数据包:
1)标记目的的mac地址为FFFF,
2)标注要请求的mac地址的192.168.6.1。

step2:局域网的交换机收到该目的地为FFFF的数据包,会广播到所有机器上去。

step3:请求的路由器收到该报文回复机器A自己的Mac地址,其他机器一看ip不是扔掉数据包。

step4:机器A将Mac地址填写到报文的MAC目的地字段,报文发送出去。

交换机中还有一张mac地址和交换机端口的映射表,在A到路由器的这一次数据传输过程中,经过交换机,交换机就会记录下来路由器的端口号和对应的mac地址,下一次请求的时候就直接转发数据包,不用再发起arp协议广播,以免广播冲撞。

NAT
源地址转换

Network Address Translation,网络地址转换。这种地址转换主要是解决ipv4不够用的问题。

当内网的设备192.168.6.105由端口123通过路由器访问外网某个端口时,路由器会随机生成一个端口号,然后将请求请求的源地址和端口改为路由器的公网地址和它的随机端口号,并记录下来该随机端口号和内外的192.168.6.105:123的对应关系。 这种修改了报文源地址的转换,称为S_NAT.

但是在内网起了一个tomcat,外网无法主动进来访问该地址。NAT解决了内网转换地址访问外网,但是解决不了外网访问内网里某台服务的问题。除非在路由器上绑定路由器的某个端口到内网机器的ip及端口。

负载均衡服务器-同进同出

当一个请求的vip进入负债均衡服务器,负债均衡服务器会将网络层请求的ip地址(vip地址)转换为后面真正的机器的地址(rip:real ip),这样更传输层协议,后面的rip收到该数据包匹配上了ip地址才会接收该数据包。该过程称为D_NAT,即目标地址替换。

在rip服务器上,已经没有vip了,建立的是cip(client ip)与rip的连接。服务器如果将该数据包返回客服端,客户端看到返回的是rip而非请求的vip返回的报文,会直接丢弃该数据包。因此在负载均衡服务器上,还要将rip再转换为vip发回给cip。将rip的默认网关设置为负债均衡处理器即可。
在这里插入图片描述

负载均衡服务器-只进不出

但是进入负载均衡服务器的数据量是不对称的,客户端请求的数据量一般比较小,服务器返回的数据量一般量比较大,会做很多次反方向D_NAT,将rip转回为vip再返回客户端,这样出现了I/O瓶颈问题,于是希望rip处理完的数据直接返回给客户端。

rip如果直接处理完成给客户端,那么客户端收到的是rip的返回,而非vip的返回,则会直接扔掉。于是需要rip返回客户端的报文上的源地址是vip,那么意味着rip机器上也有一个vip地址,但是由于负债均衡服务器有vip,rip上又有vip,ip地址再同一个网络中不能重复出现,因此需要在rip上配置vip地址,但是对外不暴露不出现,仅仅rip服务器自己知道自己有vip地址。

当cip-vip数据包到达rip上时,rip自己有vip于是接收了这个数据包,并建立了cip:port - vip:port的 socket连接,处理完成后,将vip-cip数据包通过rip上的路由器不经过负载均衡服务器传回cip。

问题是负载均衡如何将cip-vip交给对外不暴露vip的rip服务器? 可以参考网络层协议,ip地址是终极目标地址,但是mac地址才是下一站实际收到报文的地址。因此在负载均衡服务器上,在报文上套一层mac地址,目的地之写vip,该mac地址写rip的mac地址。这样报文可以送到rip服务器上,然后rip服务器用vip的地址确认自己是收件人。此处的约束为负债均衡服务器与rip在同一局域网内,不能再通过路由器中转了,否则mac地址就要写中转路由器地址。

DR模型:
在这里插入图片描述
上述即为lvs技术

隐藏vip

为了避免负载均衡服务器的vip地址与rip上的vip冲突:
1)回环接口配置vip外
外部请求不能访问这个网卡。不能让rip上的vip配置在物理网卡上,否则外部请求会访问到这个vip直接请求走了,这个外部不能访问的网卡即虚拟网卡回环接口。

2)arp请求隐藏vip
内部的网卡不会暴露这个vip地址达*在负载均衡服务器和rip所在的网络中,请求vip地址对应的mac地址时候,只有负载均衡服务器的mac地址会被被返回。即,发起arp请求协议封装报文FFFF,请求vip地址对应的mac地址时,rip上隐藏的vip不会返回,rip上的vip只能通过负载均衡服务器上的下一站的mac地址来发送报文。

3)禁止向外通告vip地址

回环接口配置vip

上面提到了隐藏的vip地址,需要将vip地址配置到一块外界访问不到的网卡上面,回环接口就是这块网卡。
在这里插入图片描述
回环接口的ip地址一般为127.0.0.0. 当我们访问localhost时候,这个发送出去的包到了回环接口编程了输入的包,直接调用了本机的端口应答。网卡的接口可以配置多个ip地址。

arp请求隐藏vip

当请求从vip进入到rip的物理网卡时,
当外部请求到了rip的物理网卡,当发起arp请求的时候,别人不会把它的地址暴露出去。前面说了,当一个机器发送FFFF的报文请求MAC地址时候,需要回复mac地址。需要配置arp请求的响应级别,arp_ignore文件,指定什么情况下返回mac地址:
在这里插入图片描述

arp_ignore: Define different modes for sending replies in response to received ARP requests that resolve local target IP address.
0 - (default): reply for any local target IP address, configured on any interface.
1 - reply only if the target IP address is local address configured on the incoming interface.
0:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应
原文链接:https://blog.csdn.net/brad_chen/article/details/47807281

禁止向外通告vip

当网卡一激活,就会向外通告自己的地址,因此要禁止rip上的vip向外通过,设置arp_annouce文件:

arp_annouce:Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface;
0 - (default) Use any local address, configured on any interface.
1 - Try to avoid local addresses that are not in the target’s subnet for this interface.
2 - Always use the best local address for this target.
————————————————
原文链接:https://blog.csdn.net/brad_chen/article/details/47807281

arp_announce:定义将自己的地址向外通告时的通告级别:
0:默认值,将本地任何接口的任何地址都向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告

选择配置2,则不会将vip的地址通告给别的网卡,只通告给自己的网卡内广播。

通过在回环接口配vip,在物理网卡上设置arp_ignore级别相应为1,arp_announce级别设置为2。实现了对vip对外隐藏,对内可见。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值