https://blog.csdn.net/qq_40373699/article/details/106792968

1. OSI网络七层模型

image.png
image.png

2. 应用层

比如浏览器、qq微信都是属于应用层,准确的说是应用层客户端,访问的服务器就是应用层服务端。我们在浏览器发送的请求会被加上http协议传输到传输层。还有xftp、sqlyong等等会加ssh协议。
这些协议就是所谓的应用层协议,用来约定两个程序传输的格式、怎么加密的等等。不同的场景选择不同的协议来工作。
其后的传输层、网络层、网络接口层我们并不需要关心,因为这是操作系统内核帮我们做好的事情了。就像我们使用浏览器一样,http协议浏览器帮我们加好了,只需要输入域名就可以。

用linux访问百度举个例子:

  1. 创建连接
    1. echo 8 <> /dev/tcp/www.baidu.com/80
    8 就代表文件描述符, <>代表输入和输出,/dev/tcp/www.baidu.com/80 是文件路径,但是操作系统内核会把这个路径转换成对百度的socket连接

创建socket之后,cd到/proc目录下

3. 网络层的下一跳机制

image.png
传输层会帮我们做三次握手,创建数据包,但是是在网络层发出去的。也就是在创建握手包之后他是调向网络层的,网络层对应的就是IP协议了。

首先查一下我们ip信息
image.png

  • eth0:eth表示以太网。 0表示网卡的序号。所以这里eth0表示以太网第1块网卡。
  • intel 192.168.0.62:IP地址
  • netmask 255.255.255.0:掩码
  • broadcast 192.168.0.255:广播地址

再看一下网卡配置文件

以 IP地址 “20.136.22.420”为例。当发送数据包时,知道了目标地址的IP, 那么会先查找本地的路由表。先依次与每个路由表的Genmask(掩码)进行与运算,

arp协议

计算机**A**启动后网络的第一步是连接互联网, 而连接互联网首先要做的是上报**A**自己的信息,如果想要把数据包发出去就要遵循下一跳的机制,但是现在计算机是空白的,什么都不知道,这该怎么办呢?遇到了先有鸡还是先有蛋的问题。
arp协议规定, 计算机**A**初始包的MAC地址应为:FF:FF:FF:FF:FF:FF:FF 目标ip地址是:192.168.1.1。所以计算机**A**的刚一启动时会像外发送的数据包的数据为:MAC地址:FF:FF:FF:FF:FF:FF:FF,目标ip地址:192.168.1.1,源MAC地址:{**A**@MAC} ,如果交换机收到这样的数据包,则会向自己所有的连接设备广播。 同一局域网内的计算机会把这个包丢掉,如果遇到路由器,则会给计算机**A** 分配一个IP地址{**A**@IP} ,然后响应这样一个数据包:MAC地址:{R@MAC} 目标地址:{**A**@IP},这样计算机收到之后会把这些信息注册到自己的路由表。
交换机收到计算机**A**的初始arp包之后会在本地记录计算机**A**的MAC地址, 所以路由器返回数据时交换机不会广播,而是直接发送到目标MAC地址。

数据包会有这样6个元素:

  1. 源端口号 + 目标端口号
  2. 源IP地址 + 目标IP地址
  3. 源MAC地址 + 目标MAC地址

其中:源MAC地址 + 目标MAC地址解决直接点对点设备的传输问题。源IP地址 + 目标IP地址解决找到某一台服务器。源端口号 + 目标端口号解决找到某个程序处理数据。这6个元素解决了以太网中所有寻址和数据传输的问题。

NAT模式

跳转百度百科:https://baike.baidu.com/item/nat/320024?fr=aladdin
image.png
image.png

网络地址欺骗与DR模式

在D-NAT,有一个始终无法改变的弊端,就是由于TCP/IP协议的制约,服务器的数据包想要成功发送给C1和C2就必须经过LoadBalance,因为在C1和C2看来他们是和LoadBalance握手的,并不是和S1/S2。这样的话,LoadBlance还要承担着非负载均衡的职责:响应数据包,这样会浪费负载均衡本身的算力。

由于网络传输的非对称性,上行和下行的所需要的带宽

解决这一个问题的方式很简单,就是让服务器S1和S2自己返回数据包而不经过LoadBlance。但是这样做会破坏TCP协议。现在只要让C1和C2认为数据包是从S1和S2发过来的即可。

MAC地址欺骗
要想让C1和C2认为数据包是从S1和S2发过来的,首先就是不能让LoadBalance处理C1和C2发过来的数据包,由于TCP协议的关系,负载均衡收到符合自己IP的数据包一定会自己处理,因此我们需要修改内核的配置,破坏arp协议,让LoadBalance即使看到数据包是发给自己的MAC地址的,也要强行把MAC地址改为S1/S2
并发送给对方。 但是S1/S2并不知道LoadBalance的这种行为。所以这叫做MAC地址欺骗

服务器如何内藏LoadBalance的IP:
新增一块环形网卡即可。

image.png