• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2022
博客园    首页    新随笔    联系   管理    订阅  订阅

交换与路由

一.交换与路由

1.什么是交换
指的是网络访问, 几台计算机连在同一个交换机上, 配置同一个网段的不同 IP 就可以直接通信了(这不不谈及三层交换机)

2.什么是路由
在这里插入图片描述
二.Linux处理数据包过程

1.一台Linux主机能够被当成路由器用的三大前提
至少有两块网卡连接两个不同的网段
开启了路由转发功能
在该Linux主机上添加了正确的路由规则/策略

2.过程图
在这里插入图片描述

当外界数据从网卡流入后需要对他进行路由决策
根据其目标决定是流入本机用户空间
还是在内核空间直接就转发给其他主机

3.如果是流入本机用户空间的数据

则该数据会从内核空间进入到用户空间,接着被应用程序接收并处理
1. 此时如果本机用户空间的应用程序不需要产生新的数据, 那便不涉及从某个网卡流出数据
2. 如果本机用户空间的应用程序需要产生新的数据包对外发送,那便需要从某个网卡流出数据
3. 但在流出之前,也需要做路由决策:根据目标决定从哪个网卡流出
4.如果仅仅是经本机转发数据包
则必然涉及到从某个网卡流出,此时数据包必须从流入网卡完整地转发给流出网卡
但Linux主机默认未开启 ip_ forward 功能, 这使得数据包无法转发而被丢弃
5.开启 Linux 主机的路由功能
临时开启, 重启网络服务会失效
🎁方式1
# echo 1 > /proc/sys/net/ipv4/ip_ forward
🎁方式2
# sysctl -W net.ipv4.ip_forward=1
永久生效, 则写入配置文件
🎁CentOS 6中
将"/etc/sysctl.conf"文件中的 "net.ipv4.ip_forward" 值改为1即可

🎁在"Centos7"中"systemd"管理了很多功能,"sysctl"的配置文件也分化为多个
"/etc/sysctl.conf"
"/etc/sysctl.d/*.conf"
"/usr/lib/sysctl.d/*.conf"
并且这些文件中默认都没有"net.ipv4.ip_forward"项

🎁建议直接写入"systemd"提供自定义内核修改项的目录
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
查看是否开启了转发功能
🎁[root@shawn ~]#sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

🎁[root@shawn ~]#cat /proc/sys/net/ipv4/ip_forward
0

🎁[root@shawn ~]#sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
未开启无法进行通信

在这里插入图片描述

🎁只有当本机被别人当成网关并且本机开启路由转发功能时
🎁别人发来的请求包,本机才会帮忙转发,这一点很重要,请务必记住
未开启转发可 ping 通

在这里插入图片描述

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

三.网关 / 路由

1.Linux 上分为三种路由
主机路由 : 掩码固定32位, Destination(目的地) 精确到某一台主机
🎁主机路由是直接指明到某台具体的主机怎么走, 主机路由也就是所谓的静态路由
网络路由 : 掩码小于32位, Destination精确到某一个网段的主机
🎁网络路由指明到哪一类网络
默认路由 : 掩码通常为 0
🎁不走主机路由和网络路由的, 全部走默认路由
🎁操作系统上设置的默认路由一般也称为网关
2.路由优先级挑选
若 Linux 上到某主机有多条路由可以选择, 这时候会挑选优先级高的路由
主机范围越小, 越精确, 优先级越高 (而决定主机范围的就是子网掩码)
所以掩码越长, 越精确, 优先级越高
1. 主机路由    #最高
2. 网络路由    #第二
3. 默认路由    #最低
示例
🎁如果在本机"ping 4.4.4.4"
[root@shawn ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         1.1.1.2         0.0.0.0         UG    0      0        0 ens32
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 ens32
2.2.2.3         1.1.1.2         255.255.255.255 UGH   0      0        0 ens32
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens32

🎁先检索掩码长度,然后再对应"Destination"(目的地)
1. 255.255.255.255 ---->2.2.2.3        #发现无法匹配
2. 255.255.255.0 ------>1.1.1.0        #无法匹配
3. 255.255.0.0 -------->192.134.0.0    #无法匹配
4. 0.0.0.0 ------------>0.0.0.0        #能匹配

🎁如果检索到了两块网卡网段地址都是"4.4.4.0"(能匹配),子网掩码长度也相同"255.255.255.0"
🎁但是如果本机直连的是"eth0"网卡,那么"eth0"对应的那条路由条目优先级高

四.路由配置命令(临时)
1.route 命令

常用命令及选项
route [add / del] [-host / -net / default] [ip地址/及掩码] [gw] [dev]
add / del	添加或删除路由条目
-host	主机路由
-net	网络路由
default	默认路由
gw	指定下一跳
dev	强制将路由条目关联到指定接口, 一般内核会自动判断
route -n 查看路由表

Flags 列所代表的的含义

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

2.命令示例
添加和删除主机路由

🎁添加
# route add -host 10.10.0.125 gw 10.10.0.2

🎁删除
# route del -host 10.10.0.125
添加和删除网络路由
🎁添加
# route add -net 10.10.0.125 gw 10.10.0.2
# route add -net 10.10.0.125 netmask 255.255.255.0 gw 10.10.0.2
👉如果没有下一跳,可以直接指定接口也是可以的
# route add -net 10.10.0.0/24 dev eth0

🎁删除
# route del -net 10.10.0.0/24 gw 10.10.0.2
# route del -net 10.10.0.0/24 netmask 255.255.255.0 gw 10.10.0.2
# route del -net 10.10.0.0/24 dev eth0
👉但大多数使用简短删除方法(偷懒行为)
# route del -net 10.10.0.0/24
添加和删除默认路由
🎁添加
# route add default gw 10.10.0.2

🎁删除
# route del default
# route del default gw 10.10.0.2
👉若有多条默认路由, 后面加上"gw"地址就可以唯一删除指定条目

五.永久配置路由

1.创建路由配置文件
/etc/sysconfig/network-script/route-eth3X :3X代表的是接口编号
2.文件内容格式
DEST via nexthop

[目标地址] [关键字] [下一跳地址]

🎁主机路由
"10.10.0.0/32 via 10.10.0.2 dev eth1"

🎁默认路由
"default via 10.10.0.0"
"0.0.0.0/0 via 10.10.0.2"

🎁网络路由
"10.10.0.0via 10.10.0.2"
配置完毕重启生效
3.配置路由注意事项
route-ethXX 的对应网卡配置文件 ifcfg-ethXX 必须存在,否则路由无效 (注意:对于虚拟机,通常新
添加的网卡都没有对应的 ifcfg-ethXX 文件,但 ifconfig 却能找到该网卡)
如果在文件中配置永久默认路由,则必须保证所有使用了 DHCP 服务的网卡配置文件 ifcfg-ethXX 中的 DEFROUTE 指令设置为 "no" ,表示 DHCP 不设置默认路由。
如果在 route-ethXX 文件中配置永久路由,且该网卡使用了 DHCP 服务分配地址,则必须保证该网卡的 ifcfg-ethXX 文件中的 PEERROUTES 指令设置为 "no" ,表示 DHCP 设置的路由允许被覆盖。
posted @ 2021-03-29 00:18  博客之记  阅读(470)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3