热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机网络之静态路由

路由(选择最优路径)跨越从源主机到目标主机的一个互联网络来转发数据包的过程路由器不会广播,没有时会丢弃。路由表可学习可配置。跨网段才需要路

路由(选择最优路径)
跨越从源主机到目标主机的一个互联网络来转发数据包的过程
在这里插入图片描述
路由器不会广播,没有时会丢弃。
路由表可学习可配置。
跨网段才需要路由器,本网段不需要路由器。

路由器的工作原理
在这里插入图片描述
在要发送的主机中,要先封装数据,在网络层中,封装的数据头部中,源IP地址是1.1,目的IP地址是4.1.发送的主机要发送数据时,怎么知道要经过路由器呢?主机中也有路由表(主机可以工作在每一层),主机要发送数据时也要看自己的主机表,怎么看主机的路由表呢?如下:
route -n
[root@centos—text ~]# route -n
Kernel IP routing table
Destination//目的IP Gateway //下一跳Genmask//子网掩码 Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[root@centos—text ~]#

下一跳为0.0.0.0表示没有下一跳,不需要通过路由器,属于本网段通信。

在linux中配路由:route add default gw 172.16.255.254
删除路由为:route del default gw 172.16.255.254
[root@centos—text ~]# route add default gw 172.16.255.254
[root@centos—text ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 172.16.255.254 0.0.0.0 UG 0 0 0 eth0
[root@centos—text ~]#

总之,当主机或路由器需要发送数据时,会将数据的目的ip与本机的路由表的网段匹配,匹配成功会将数据发往相应的接口或下一跳,匹配不成功会丢弃。其中,目的ip为0.0.0.0表示可以匹配所有网段。

路由表的条目,一行是一条路由表。可以是网段对应接口,也可以是网段对应下一跳。其中,接口是本路由器的接口,下一跳是下一个路由器与本路由器相连的接口IP地址(同一网段的)。每经过一跳TTL都会减一。
[root@centos—text ~]# route add default gw 172.16.255.254
[root@centos—text ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 172.16.255.254 0.0.0.0 UG 0 0 0 eth0
[root@centos—text ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 172.16.3.36 icmp_seq=2 Destination Host Unreachable
From 172.16.3.36 icmp_seq=3 Destination Host Unreachable
From 172.16.3.36 icmp_seq=4 Destination Host Unreachable//这是目标主机不可达,有0.0.0.0可以匹配到
From 172.16.3.36 icmp_seq=5 Destination Host Unreachable
From 172.16.3.36 icmp_seq=6 Destination Host Unreachable
From 172.16.3.36 icmp_seq=7 Destination Host Unreachable
^C
— 192.168.1.1 ping statistics —
10 packets transmitted, 0 received, +6 errors, 100% packet loss, time 9463ms
pipe 3
[root@centos—text ~]# route del default gw 172.16.255.254
[root@centos—text ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
[root@centos—text ~]# ping 192.168.1.1//这是网络不可达,没有可以匹配的路由了
connect: Network is unreachable
[root@centos—text ~]#

网关就是下一跳。

Windows中查看路由表如下:
route print
在这里插入图片描述

发送数据的主机的数据怎么到达第一个路由器呢?
需要用到ARP地址解析协议(IP地址解析为MAC地址),广播得到MAC地址。MAC地址是数据链路层的。
在这里插入图片描述

Ip是在主机的路由表里知道的,如图,假设源地址的ip的2.0网段,目标地址的ip是1.0网段,在主机里肯定有一条到达1.0网段的路由可以匹配,1.0网段的下一跳是2.1,这时,想要将数据发送到1.100需要经过2.1转发过去,我们现在知道了2.1这个IP地址,但是不能将2.1作为目标地址封装,不然数据就发送给路由器了,就不能到达1.100了,我们现在知道2.1,但是不能将数据发给2.1,因为二层交换机,数据链路层只能识别MAC地址,所以在数据链路层封装的头部源地址应该是aa,目的地址应该是bb,bb是根据2.1地址和ARP地址解析协议得到的,ARP协议是根据广播(在本广播域中)得到的bb,ARP在2.0网段内广播我要2.1ip的MAC地址,得到bb。
路由器接收到数据后,先解封装,发现MAC地址是自己的,所以它将数据交给网络层进行处理,发现目的ip为1.100,然后查找路由表,将数据发送给1.100。
整个过程如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

路由表的形成

路由表
路由器中维护的路由条目的集合
路由器根据路由表做路径选择

通信的过程可以说是封装与解封装的过程。

下面是一个封装与解封装完整的例子。
:在172.16.50.59中向172.16.50.60中发送数据。
封装过程如下:
1、在网络层封装ip地址时,源IP地址为172.16.50.59,目的IP地址为172.16.50.60
2、在数据链路层封装源MAC地址时,怎么判断源MAC地址该封装哪个网口的MAC 地址呢?
查看路由表,通过路由表可以知道,本机ip和目的地址ip是不是同一个网段(即要知道他们的网络地址),50.59知道自己的IP地址和子网掩码,所以50.59知道自己的网段为172.16.0.0/16,此时50.59需要判断50.60是哪一个网段的IP地址,此时50.59选择用自己本机的子网掩码和50.60得到50.60的网段是172.16.0.0/16,然后50.59去路由表中找相对应的目的网段为172.16.0.0/16的路由,
在这里插入图片描述
查找到gateway为0.0.0.0(即没有下一跳,属于本网段通信),相对应的网口为eth0,所以此时在数据链路层应该封装的源MAC地址是eth0的MAC地址,查看eth0的MAC地址如下:
在这里插入图片描述

那么目的MAC地址呢?
没有下一跳的就是本网段通信,本网段通信直接封装目的IP地址的MAC地址,借助ARP广播获取172.16.50.60的MAC地址,获取后,封装到数据链路层的目的MAC 地址中。
ARP广播获取MAC地址后,会在本机内存中缓存MAC对应的IP地址,查看172.16.50.59的ARP缓存表如下:
在这里插入图片描述
所以在发送主机50.59中三层,二层都封装好了,可以转发出去了
在这里插入图片描述

总结一下:在发送方,查找路由表时,有下一跳时就封装下一跳的MAC地址(借助ARP广播获取MAC地址),没有下一跳(即下一跳为0.0.0.0,在同一个广播域内)时,就封装目的IP地址的MAC地址。
其实,在封装网络层之前它就已经查看路由表了,通过查看路由表知道要封装哪一个源ip地址,即封装哪一个网口的IP地址。再查看路由表之前已经得到了目的IP地址的网段,根据网段去路由表中匹配,根据匹配结果得到相应的接口名称,然后得到源IP地址和源MAC地址。

解封装过程如下:
172.16.50.60接收到数据后,要解封装(从下往上走的过程)。
1、首先,50.60查看数据链路层的目的MAC地址,发现就是自己的MAC地址,所以接着进一步解封装,把MAC头部去掉,剩下的交给网络层处理。
2.网络层查看目的IP地址发现是自己的IP地址,所以接着进一步解封装。后面的其他步骤我们还没有学。

配路由命令如下:
Route add default gw 172.16.1.2 //gw为下一跳,此时目的ip为0.0.0.0
查看ARP缓存表命令如下:
Linux:arp -an
Windows:arp -a

下一跳肯定和本机在同一个网段。

插一个例子,再讲一个封装解封装的例子,在172.16.50.60中ping192.168.1.1,此时50.60的路由表如下:
在这里插入图片描述
Ping192.168.1.1结果如下:
在这里插入图片描述
这个过程的封装和解封装过程如下:
在网络层,源IP地址为172.16.50.60,目的IP地址为192.168.1.1
由于在50.60的路由表中有一条目的地址为0.0.0.0的路由,可以匹配,
所以在数据链路层的源mac地址为172.16.50.60的接口eth0的MAC 地址
目的MAC地址为172.16.1.2的MAC地址(借助ARP广播)。但是我们查看arp缓存表得到:
在这里插入图片描述
可以发现没有172.16.1.2的MAC地址,所以无法完成封装,所以ping192.168.1.1的结果为主机不可达。

为什么有时候用xshell远程登录,前一天还可以登录,第二天就显示密码错误了呢?
有可能是IP地址和别人的重复了,
在这里插入图片描述
在封装的时候通过ARP广播获取MAC地址时,两个相同ip都收到了广播,收到时间会有先后顺序,先收到的那个将自己的MAC地址发给了交换机,如果发送的是想连接的MAC地址,就可以正常通信了,如果收到的是不正确的MAC地址,就会出错了。这种错误是可以防止的,可以通过手工配置MAC地址,防止这种错误,如下:
手工配置MAC地址:arp --help / /可以查看arp帮助
在这里插入图片描述
arp -s IP地址 MAC地址
例如:
arp -s 172.16.50.60 00:df:ab:cd: //配置ARP
arp -d 172.16.50.60 //删除ARP

ARP工作时,如果缓存中有了相应的MAC地址,就不会去广播了,所以缓存的作用就是提高速度。

在路由条目中,如果gateway(下一跳)为0.0.0.0,说明没有下一跳,就会通过arp广播获取目的ip的MAC地址
在路由条目中,如果gateway(下一跳)不为0.0.0.0,说明有下一跳,就会通过arp广播获取下一跳ip的MAC地址,获取到的MAC地址就会作为目的MAC地址。
下一跳地址肯定和本机ip在同一个网段。

路由表非常重要,路由表正确才可以封装成功,封装成功才可以通信。

路由器根据路由表收到数据包,然后转发,主机也是。

直连路由没有下一跳(下一跳为0.0.0.0),直连路由属于直连网段。
路由表的形成
直连网段
配置IP地址,端口UP状态,形成直连路由
直连网段(本网段)有直连路由。
只要给网口配置上IP地址,激活网口就会生成直连路由。
非直连网段
非直连网段才需要动态路由(学习)或者静态路由(配置)。
在这里插入图片描述
查看路由表用命令route -n //n不要少
如下:有三条直连路由
在这里插入图片描述
只要给网口配置上IP地址,激活网口就会生成直连路由,如下:
在这里插入图片描述
在这里插入图片描述
静态路由
由管理员手工配置的,是单向的
缺乏灵活性
在这里插入图片描述

默认路由
当路由器在路由表中找不到目标网络(具体网段)的路由条目时,路由器把请求转发到默认路由接口
在这里插入图片描述
路由的优先级,由高到低:直连路由,静态路由,动态路由,默认路由。

下一跳地址一定要配本网段的地址,不然配不上,如图:
在这里插入图片描述
本网段有172.16.0.0/16,172.17.1.2不属于本网段,所以配不上这条路由。

在路由表中,第一列目的地址如果是0.0.0.0,表示默认路由。

配路由操作如下:
Linux配置默认路由(默认网关):
route add default gw 172.16.1.2(下一跳IP地址,也叫网关地址)
要永久配置默认路由:
需要修改配置文件
方法1. 可以在网口的配置文件里面加
方法2. 可以在/etc/sysconfig/network(建议在这个文件加)加
加的内容为:
GATEWAY(必须大写,区分大小写)=IP地址

建议使用方法二配置默认路由,因为默认路由的优先级最低,只配一条就可以了。

配置静态路由如下:
route add -net 目的IP地址 netmask 目的IP地址子网掩码 gw 下一跳
例如:route add -net 192.168.1.2 netmask 255.255.255.0 gw 172.16.1.5

如果服务器所在的网络只有一个出口,只配置一条默认路由就可以了。

路由器转发数据包的封装过程
在这里插入图片描述

交换与路由对比
路由工作在网络层
根据“路由表”转发数据
路由选择
路由转发
交换工作在数据链路层
根据“MAC地址表”转发数据
硬件转发

故障排查
分层检查

物理层检查:线有没有接好,如果线接好了检查有没有激活网口;
数据链路层:主要看arp缓存表,看要访问的主机对应的IP地址是不是对的;
网络层:看ip是否正确,子网掩码是否正确;看路由表有没有对应的可匹配的路 由,如果有,下一跳对应的是否正确;
分段检查
将网络划分成多个小的段,逐段排除错误。
先看本网段是否可以通信,

先分层检查,看本机是否正常(检查三层是否正确),如果正常,看网段是否正确,比如ping网关看是否可以ping通,要到达其他网段肯定要可以ping通网关才可以。如果ping通了,说明本网段没有问题,问题在其他网段。
在检查过程中,可以不断ping各个下一跳,如果能ping通,说明从主机到下一跳之间网络正常。

例如:
检查如图的故障:

在这里插入图片描述

在pc1首先ping路由器R1的s0IP地址,如果通的话,说明从主机到路由器R1没问题,否则pingpc2的IP地址,如果通,说明主机正常,问题在路由器R1。然后ping外网一个地址,例如baidu.com,如果通说明公网没问题,如果不同说明公网有问题。剩下的检查和之前的一样,重复操作即可。

Icmp协议,就是平时我们用的ping命令,用来检查网络故障的协议。

网络层主要的协议就是ARP协议,ICMP协议。


推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • This feature automatically validates new regions using the AWS SDK, ensuring compatibility and accuracy. ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
author-avatar
carefulff
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有