路由(选择最优路径)
跨越从源主机到目标主机的一个互联网络来转发数据包的过程

路由器不会广播,没有时会丢弃。
路由表可学习可配置。
跨网段才需要路由器,本网段不需要路由器。

路由器的工作原理

在要发送的主机中,要先封装数据,在网络层中,封装的数据头部中,源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协议。

计算机网络之静态路由相关推荐

  1. 计算机网络实验 静态路由的配置(DAY 55)

    文章目录 1:第一步 先配置ip地址和子网掩码 1:主机1的ip地址和子网掩码 2:主机2的ip地址 3:给两个路由器加装模块 4:配置路由器1的ip和clock 5:配置路由器2的ip 6:配置s端 ...

  2. 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...

    <计算机网络>实六 静态路由配置 实验报告 实验报告六 班级:07东方信息 姓名: 学号: 实验时间:10年5月17日 机房:9#205 组号: 机号:A 一.实验题目 静态路由配置 二. ...

  3. 计算机网络·ip地址计算+ip地址配置+静态路由配置

    看完能会做计网作业你说神不神奇 一.解决各类IP地址 二.搭建网络拓扑图 三.配置ip地址 四.配置静态路由 某公司内部的网络拓扑如下图所示: 其中网络1有主机120台,网络2有主机60台,网络3有主 ...

  4. 计算机网络 实验六 静态路由配置,实验六-静态路由配置.doc

    实验六-静态路由配置 实验报告书 课程名称 计算机网络技术与应用 实验题目 实验六:静态路由配置 专业班级 2010级信息管理与信息系统2班 学 号 37号 姓 名 肖丹妮 指导教师 赵圆圆老师 计算 ...

  5. 计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由

    目录 前言 一.关闭泛洪信息 二.静态路由 命令 例题 三.动态路由 (一)RIP协议 RIP命令 例题 (二)OSPF协议 OSPF命令 例题(单区域) 例题(多区域) 四.查看全局路由表 结语 前 ...

  6. 计算机网络静态路由大作业 3地互联,计算机网络-静态路由配置

    计算机网络综合实习三:路由器基本配置 一.实验目的 通过实验掌握利用路由器实现网络互联的一般方法,掌握基本的路由器配置命令. 二.实验原理 不同的计算机网络在技术和工作方式上的差异,是需要进行网络互联 ...

  7. 计算机网络自顶向下方法课程实验一华为三层交换机路由器配置静态路由

    一 实验目的 1.识别静态路由的应用场景 2.掌握静态路由的配置 二 实验原理 静态路由是指由用户或网络管理员手工配置的路由信息.当网络的拓扑结构或链路的状态发生变化时,网络管理员需要手工去修改路由表 ...

  8. (考研湖科大教书匠计算机网络)第四章网络层-第五节:静态路由配置及其可能产生的路由环路问题

    获取pdf:密码7281 专栏目录首页:[专栏必读]王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记.题目题型总结.注意事项.目录导航和思维导图 王道考研408计算机组成原理万字笔记 ...

  9. 韩立刚计算机网络笔记-第06章 动态路由和静态路由

    第06章 动态路由和静态路由 6.1路由-网络层实现的功能 网络层功能就是给传输层协议提供简单灵活的.无连接的.尽最大努力交付的数据包服务. 通俗一点来讲,网络中的路由器为每一个数据包单独的选择转发路 ...

最新文章

  1. matlab文档型数据导入,MATLAB-数据导入
  2. python3 用queue做历史记录
  3. 第四节:IO、序列化和反序列化、加密解密技术
  4. boost::geometry::model::multi_linestring用法的测试程序
  5. Zookeeper入门总结
  6. 山东大学 2020级数据库系统 实验六
  7. transform用于图像检索
  8. (10)FPGA跨时钟域处理
  9. CentOS6.5安装教程
  10. “System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”
  11. ElasticSearch全文搜索引擎之Aggregation聚合查询(结合Kibana)
  12. 数学魔鬼表达式——第二天
  13. Php freeradius 认证,FreeRADIUS 配置认证记录入数据库
  14. Vue路由守卫(通俗易懂)
  15. 九十年前到江西(2009-06-09)
  16. _()---由此知度娘和google的冷暖
  17. (二)TCP客户端/服务器通信------select函数
  18. 程序设计竞赛学习总结
  19. 最全面的Java核心技术开发手册
  20. 14-排序优化:如何实现一个通用的、高性能排序函数?

热门文章

  1. 蓝屏代码000c2_电脑蓝屏怎么办?Win8蓝屏故障0x000000c2的解决方法
  2. 如何用计算机算出身高,Excel中制作身高体重计算器的操作方法
  3. 电脑日常使用指南(电脑的正确使用姿势)
  4. Transformer升级之路:长度外推性与位置鲁棒性
  5. 哈希算法和加密算法的本质区别
  6. 小公司的大企业病,一定要根治
  7. 离线地图数据包下载(全国地图数据)及应用到手机APP
  8. Android-App性能测试工具GT的使用方法
  9. Linux 系统下Eclipse安装及使用
  10. MATLAB产生雷达脉冲信号,一些有关雷达的程序 另外求有关单脉冲雷达信号产生的程序...