网络相关的学习和命令总结
工作两年后,发现sheel脚本用的挺多,一直感觉自己用的还可以,后来才发现很多地方自己不够清楚,特写下这篇博客对用到的地方进行总结。
一、route
直连路由:是直接连接在路由器接口的网段,由路由器自动生成,属于静态路由。
非直连路由:是不直接连接在路由器接口的网段,此记录需要手动添加(静态路由)或者是使用动态路由。。
estination Gateway Genmask Flags Metric Ref Use Iface 192.168.198.0 * 255.255.255.0 U 1 0 0 eth0 192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0 default 192.168.198.2 0.0.0.0 UG 0 0 0 eth0
route命令的输出项说明:
Destination | 目标网段或者主机 |
Gateway | 网关地址,”*” 表示目标是本主机所属的网络,不需要路由 |
Genmask | 网络掩码 |
Flags | 标记。一些可能的标记如下: |
U — 路由是活动的 | |
H — 目标是一个主机 | |
G — 路由指向网关 | |
R — 恢复动态路由产生的表项 | |
D — 由路由的后台程序动态地安装 | |
M — 由路由的后台程序修改 | |
! — 拒绝路由 | |
Metric | 路由距离,到达指定网络所需的中转数(linux 内核中没有使用) |
Ref | 路由项引用次数(linux 内核中没有使用) |
Use | 此路由项被路由软件查找的次数 |
Iface | 该路由表项对应的输出接口 |
3种路由类型:
主机路由:
主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。例如,在下面的示例中,本地主机通过IP地址192.168.1.1
的路由器到达IP地址为10.0.0.10的主机。
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- 10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
网络路由:
网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的实例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为
192.168.1.1的路由器上
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ----- --- --- ----- 192.19.12.0 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
默认路由
当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。例如,在
下面的示例中,默认路由是IP地址为192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
首先给出两个结论:
①、同一台服务器只有一个路由表,因此如果两个物理网卡配置为同一个网断的IP,会有一个网卡收不到数据,因为经过路由查找时,只会经过第一路由表项。
Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
②、同一个网卡,如果被设置为两个网段的IP(虚IP),只有一个可以通的,经过路由查找时,会过滤掉第二路由项。
Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0:1
本质上可以讲在同一个服务器上,因为只有一个路由表,所以一个网段只能有一个路由项同时一个网卡也只能有一个路由项,就比如上面的例子,第一个例子中是有两个路由表项(会全部通过第一个),第二个例子中也是有两个路由表项(忽略第二个,所以不能访问)。
二、以太网三张表
arp表、路由表和交换机表
可参考链接:https://cloud.tencent.com/developer/article/1173761
可参考链接:https://blog.51cto.com/dengqi/1223132
三、arping
arping主要用来:是查看ip的MAC地址及IP占用的问题
arp -a:看缓存表。
四、bonding
bond原理:网卡工作在混杂(promisc)模式,接收到达网卡的所有数据包,tcpdump工作用的也是混杂模式(promisc),将两块网卡的 MAC地址修改为相同接收特定MAC的数据帧,然后把相应的数据帧传送给bond驱动程序进行处理
bond模式(0、1、6用的多):
bond0(balance-rr) Round-robin policy平衡轮询策略,Bond0可以保证bond虚拟网卡和被bond的两张或多张物理网卡拥有相同的MAC地址,其中bond虚拟网卡的MAC地址是其中一张物理网卡的MAC地址,而bond虚拟网卡的MAC地址是根据bond自己实现的一个算法来选择的。在bond0模式下,如果一个连接或者会话的数据包从不同的网口发出,途中再经过不同的链路,则在客户端很有可能会出现数据包无序到达的现象,而无序到达的数据包一般需要重新发送,这样网络的吞吐量就会下降。同时,如果做bond0的两张或多张网卡接到了同一交换机上,还需对其配置聚合模式(原因是交换机表不能处理一个mac地址对应多个网端口)。
bond1(active-backup)Active-backup policy主备策略,mac地址是外部可见的,所以交换机不需要做配置,还有5和6。
bond2(balance-xor) XOR policy 平衡策略,基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,交换机需要静态聚合。
bond3 broadcast 广播策略,在每一个slave接口上传输每一个数据包,此模式提供了容错能力,交换机需要静态聚合。
bond4 (802.3ad)IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 动态连接聚合),建立一个聚合组,它们共享一样的速率和双工设定。根据802.3ad规范将多个slave工做在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略能够经过xmit_hash_policy选项从缺省的XOR策略改变到其余策略。须要注意的 是,并非全部的传输策略都是802.3ad适应的,尤为考虑到在802.3ad标准43.2.4章节说起的包乱序问题。不一样的实现可能会有不一样的适应 性。
必要条件:ethtool支持获取每一个slave的速率和双工设定;switch(交换机)支持IEEE802.3ad Dynamic link aggregation;大多数switch(交换机)须要通过特定配置才能支持802.3ad模式。
bond5(balance-tlb)Adaptive transmit load balancing适配器传输负载均衡,不须要任何特别的switch(交换机)支持的通道bonding。在每一个slave上根据当前的负载(根据速度计算)分配外出流量。若是正在接受数据的slave出故障了,另外一个slave接管失败的slave的MAC地址。
必要条件:ethtool支持获取每一个slave的速率。
bond6(balance-alb) Adaptive load balancing适配器适应性负责均衡,该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb),并且不须要任何switch(交换机)的支持。接收负载均衡是经过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的惟一硬件地址,从而使得不一样的对端使用不一样的硬件地址进行通讯。
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,所以对端学习到这个硬件地址后,接收流量将会所有流向当前的slave。这个问题能够经过给全部的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而致使流量从新分布。当新的slave加入到bond中时,或者某个未激活的slave从新 激活时,接收流量也要从新分布。接收的负载被顺序地分布(roundrobin)在bond中最高速的slave上当某个链路被从新接上,或者一个新的slave加入到bond中,接收流量在全部当前激活的slave中所有从新分配,经过使用指定的MAC地址给每一个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件: 条件1:ethtool支持获取每一个slave的速率;条件2:底层驱动支持设置某个设备的硬件地址,从而使得老是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每一个 bond 中的slave都有一个惟一的硬件地址。若是curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本同样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量