二十五、网卡丢包与数据管理

今日内容:
1、ifconfig查询结果解析
2、解决网卡丢包问题
3、路由管理

了解:

1、什么是交换

指网络访问, 几台计算机连在同一个交换机上, 配置同一个网段的不同 IP ;
在这里插入图片描述

2、什么是路由

指的是跨网络访问的路径选择;
在这里插入图片描述

一、Linux数据包处理过程

在这里插入图片描述

当外界数据从网卡流入后,需要对它进行路由决策

根据其目标决定流入本机空间,还是在内核空间直接转发给其他主机

情况1:如果是流入本机空间的数据:

则该数据会从内核空间进入到用户空间,接着被应用程序接受、处理
1>此时若本机用户空间的应用程序不需要产生新的数据,那边不涉及从某个网卡流出数据;
2>若本机空间的应用程序需要产生新的数据包对外发送,那就需要从某个网卡流出数据;
3>在流出之前,则要做路由决策:根据目标决定从哪个网卡里流出;

情况二:如果仅仅是经过本机穿法数据包:

则必然涉及到从某个网卡流出,此时数据包必须从流入网卡完整地转发给流出网卡;
但Linux主机默认未开启ip_forward转发功能,这使得数据包无法转发而被丢弃;

一台Linux主机能被当成路由器用,有三大前提:

1、至少有两块网卡,分别连接两个不同的网段;

2、开启路由转发功能;

临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward 方式1
sysctl -w net.ipv4.ip_forward=1  方式2

永久开启
Centos6:
vim /etc/sysctl.conf文件,net.ipv4.ip_forward=1
Centos7:
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/ip_ward.conf

查看是否开启:
sysctl net.ipv4.ip_forward
sysctl -a |grep ip_forward
cat /proc/sys/net/ipv4/ip_ward

如果Linux主机有多块网卡,若不开启数据包转发功能,那么这些网卡之间是无法互通的!

未开启转发功能可ping通的:

在这里插入图片描述

IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号);
只要能和其中一个地址通信,就能和另一个地址通信,而不需要开启数据包转发功能;

3、在该Linux主机上添加正确的路由规则/策略;

网关概念:把包交给它,他会帮你往外转发;

路由概念:到达地址后,该走哪条路;

route命令
选项
-n  查看当前路由的路由表
add / del添加或删除路由条目
-host主机路由
-net网络路由
default默认路由
gw指定下一跳
dev强制将路由条目关联到指定接口, 一般内核会自动判断
netmask明确使用关键字指定掩码,可不用此选项,直接IP/MASK

Flags 列所代表的的含义

U(route is up)开启
H(target is a host) 是一个主机路由
G(user gateway) 设置了下一跳

4、添加和删除

添加例:

route add -host 192.168.181.8/32 dev eth0 #添加添加主机路由
route add -net 网段/24(小于32即可) dev 网卡 #添加网络路由
route add -host 0.0.0.0/0(0代表所有网段) #添加默认路由/网关

删除例:将add改为del即可

route del default #删除网关
route del -host ip/网关 #删除主机路由
PS:若有多条默认路由, 后面加上"gw"地址就可以唯一删除指定条目

若不知道下一跳给谁,那么指定本机接口也是可以的:

route add -net 172.16.10.0/24 dev eth0

大多数时候可以偷懒,前提是你知道删除的是那条路由:

route del -net 172.16.10.0/24

二、网关、路由

1、Linux上分为三种路由:

主机路由:掩码32位,目标精确到某一台主机;

所以主机路由是直接指明到某台具体的主机怎么走,主机路由也就是所谓的静态路由

网络路由:掩码小于32位,目标精确到某一个网段的主机;

所以网络路由指明到某类网络怎么走

默认路由:掩码通常为0;

不步走主机路由、网络路由的,全都走默认路由,操作系统上设置的默认路由一般也称为网关

2、路由的优先级区分

若Linux上到某台主机有多条路由可以选择,这时候就会挑选优先级高的路由;

前提:主机范围越小、越精细、优先级越高,而缩小主机范围的恰恰是子网掩码,掩码越长,即范围就越小、越精准、优先级越高!

优先级区分:

1、在Linux中,路由条目的优先级确定方式是,先匹配掩码位的长度,掩码越长,优先级就越高,则优先级从高到低为:

主机路由>>>同网段的网络路由>>>网络路由>>>默认路由(即网关)
echo 1 > /proc/sys/net/ipv4/icpm_echo_ignore_all #禁止别人ping自己
Ethernet eth0 9000 

2、若路由长度的掩码长度相通,则比较节点之间的距离,管理距离短的生效;

三、配置永久路由

1、根据接口创建路由配置文件:

vim /etc/sysconfig/network-scripts/ifcfg-ethX #X为哪个网卡文件

2、配置格式

每行一个路由条目,先是要到达的目标,然后是via关键字,最后是下一跳地址,要求下一跳必须能到达,且一般都和eyhX同网段!

目标IP via 下一跳IP
10.0.0.0 via 192/168.10.222

3、配置举例

例如主机路由、默认路由、网段路由示例如下。其中dev是可以省略的,因为没有任何用处,配置在哪个eth文件中就会从哪个接口出去:

默认路由:
default   via 192.168.100.1
0.0.0.0/0 via 192.168.100.1

网络路由:
192.168.10.0/24 via 192.168.100.1

主机路由:
192.168.100.52/32 via 192/168.100.33 dev eth0

配置完后,重启network服务即可生效

4、配置永久路由注意三点

1、route-ethX的对应网卡配置文建ifcfg-ethX必须存在,否则路由无效!
 #PS:对于虚拟机,通常新添加的网卡都没有对应的ifcfg-ethX文件,但ifcfg却能找到该网卡;
 
2、如果在文件中配置永久默认路由,则必须保证所有使用了dhcp服务的网卡配置文件ifcfg-ethX中的defroute指令设置为no,表示dhcp不设置默认路由!

3、如果在route-ethX文件中配置永久路由,并且该网卡使用了dhcp服务分来配地址,也需要同第二条一样,把defroute值设为0,表示dhcp设置的路由允许被覆盖!

四、练习

为了排除外界网络环境的干扰,就选用仅主机模式,自己跟自己玩:

1、首先创建仅主机模式的四个交互机:

vmnet1 vmnet2 vmnet3 vmnet4

打开虚拟网络编辑器,进行以下配置,保存之后重启虚拟机;
在这里插入图片描述

2、精简网卡配置文件

当前实验环境下,网卡精简后的配置文件:

TYPE=Ethernet
BOOT=static
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=2.2.2.2(自定)
PREFIX=24(也可为:NETMASK=255.255.255.255)

在这里插入图片描述

3、通过上图总结网卡交互依赖过程:

格式:
目标IP via(通过谁) 网关(通过谁谁就是网关,且是唯一一个) dev(出口) eth0(出口网卡名)

简化原则:当前只是临时生效,简化后禁止重启网卡,不然会恢复!
	1>via(网关)和dev(eth端口)一致,删除一致的行,再进行添加即可
		删除命令:route del -net 2.2.2.0/24 #逐个删除,删除所有重复的行
		添加命令:route add default gw 1.1.1.2 #添加同名的网关,只加一次即可
	2>0.0.0.0代表所有网段
永久生效:
	修改对应的route-ethX配置文件,重启网络服务即可
	vim /etc/sysconfig/network-scripts/route-ethX
		#删除重复via(网关)与eth(端口,看配置文件名)的行
		#添加0.0.0.0 via 0.0.0.0 dev ethX
	systemctl restart network

修改完配置文件后,跨虚拟机交互,需要开启路由转发功能,每台机器都执行一遍以下命令:

echo 1 > /proc/sys/net/ipv4/ip_forward 开启路由转发,最后执行
setenforce 0
iptables -F
posted @ 2022-06-09 18:19  秋风お亦冷  阅读(136)  评论(0编辑  收藏  举报