@网络通信之路由

网络通信之路由

一.交换与路由

1.什么是交换

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

img

2.什么是路由

img

二.Linux处理数据包过程

1.一台Linux主机能够被当成路由器用的三大前提

- 至少有两块网卡连接两个不同的网段
- 开启了路由转发功能
- 在该Linux主机上添加了正确的路由规则/策略

2.路由过程图

img

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

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

#则该数据会从内核空间进入到用户空间,接着被应用程序接收并处理

  -1. 此时如果本机用户空间的应用程序不需要产生新的数据, 那便不涉及从某个网卡流出数据

  -2 如果本机用户空间的应用程序需要产生新的数据包对外发送,那便需要从某个网卡流出数据

  -3 但在流出之前,也需要做路由决策:根据目标决定从哪个网卡流出

4.如果仅仅是经本机转发数据包

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

5.开启 Linux 主机的路由功能

1>.临时开启, 重启网络服务会失效

 🎁方式1 

  # echo 1 > /proc/sys/net/ipv4/ip_ forward

 

 🎁方式2

  # sysctl -W net.ipv4.ip_forward=1

2>.永久生效, 则写入配置文件

🎁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

3>.查看是否开启了转发功能

🎁[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

 

4>.未开启无法进行通信

img

 #只有当本机被别人当成网关并且本机开启路由转发功能时

 #别人发来的请求包,本机才会帮忙转发,这一点很重要,请务必记住

5>.未开启转发可 ping

img

   #  IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号)

   #  只要能和其中一个地址通信,就能和另一个地址通信,而不需要开启数据包转发功能

三.网关 / 路由

1.Linux 上分为三种路由

1>.主机路由 : 掩码固定32位, Destination(目的地) 精确到某一台主机
主机路由是直接指明到某台具体的主机怎么走, 主机路由也就是所谓的静态路由
2>.网络路由 :掩码小于32位, Destination精确到某一个网段的主机
  网络路由指明到哪一类网络
3>.默认路由 : 掩码通常为 0
不走主机路由和网络路由的, 全部走默认路由

操作系统上设置的默认路由一般也称为网关 
2.路由优先级挑选
- 若 Linux 上到某主机有多条路由可以选择, 这时候会挑选优先级高的路由
- 主机范围越小, 越精确, 优先级越高 (而决定主机范围的就是子网掩码)
- 所以掩码越长, 越精确, 优先级越高**
优先级: 
 
 1主机路由  #最高

 2网络路由  #第二

 3默认路由  #最低
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 -------->169.254.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.命令示例

1>.添加和删除主机路由
🎁添加

   \# route add -host 172.16.10.55 gw 192.168.10.20

🎁删除

  \# route del -host 172.16.100.55

 
2>.添加和删除网络路由
🎁添加

   \# route add -net 172.16.10.0/24 gw 192.168.100.70

   \# route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70

 
👉如果没有下一跳,可以直接指定接口也是可以的

   \# route add -net 172.16.10.0/24 dev eth0

🎁删除

   # route del -net 172.16.10.0/24 gw 192.168.100. 70

   # route del -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70

   # route del -net 172.16. 10.0/24 dev eth0
👉但大多数使用简短删除方法(偷懒行为)

  \# route del -net 172.16. 10.0/24
3>.添加和删除默认路由
🎁添加

  \#  route add default gw 192. 168.100.10
🎁删除

  \# route del default

  \# route del default gw 192.168. 100.10


五.配置永久路由

1.创建路由配置文件

`/etc/sysconfig/network-script/route-ethXX` :**XX**代表的是接口编号

2.文件内容格式

DEST via nexthop
[目标地址] [关键字] [下一跳地址]
🎁主机路由

  "192.168.100.52/32 via 192.168.100.33 dev eth1"
🎁默认路由

 "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"
#配置完毕**重启生效**

3.配置路由注意事项

1> route-ethXX** 的对应网卡配置文件 **ifcfg-ethXX** 必须存在,否则路由无效 (注意:对于虚拟机,通常新添加的网卡都没有对应的 **ifcfg-ethXX** 文件,但 **ifconfig** 却能找到该网卡)


2>.如果在文件中配置永久默认路由,则必须保证所有使用了 **DHCP** 服务的网卡配置文件 **ifcfg-ethXX** 中的 **DEFROUTE** 指令设置为 **"no"** ,表示 **DHCP** 不设置默认路由。


3>.如果在 **route-ethXX** 文件中配置永久路由,且该网卡使用了 **DHCP** 服务分配地址,则必须保证该网卡的 **ifcfg-ethXX** 文件中的 **PEERROUTES** 指令设置为 **"no"** ,表示 **DHCP** 设置的路由允许被覆盖。

4.练习

img

使所有IP地址能相互 **ping** 通,从1.1.1.8直接ping到4.4.4.4
#(注:非在同一网段的网络,也可以互相通信)
posted @ 2021-04-08 15:39  ଲ一笑奈&何  阅读(42)  评论(0编辑  收藏  举报