赞
踩
本篇文章还是针对计算机网络TCP/IP五层模型中的第三层网络层,主要包括的内容有路由器工作原理,转发数据工程,路由表的组成、ARP协议,ping命令的具体使用,tracepath命令等等,在网络排查故障方面会给予你一定的提示。
目录
路由:动词,跨越从源主机到目标主机的一个互联网络来转发数据包的过程
能够将数据包转发到正确的目的地,并在转发过程中选择最佳路径的设备---路由器
路由器如何知道我们的数据从哪里来到哪里去呢?
路由器在网络层,数据会添加IP包头,里面包含了源IP地址和目的IP地址
路由器它自己如何判断哪条路径是最佳路径呢?
路由器里面有个路由表,会选择最佳的
路由器如何知道它自己能去哪些地方呢?
路由器里面有个路由表,如果目的IP地址不在路由表里面,那么路由器会将数据丢弃,并且告诉目的地址不可达
路由表里有:目的网段(目标网段)、接口(从路由器自己的哪个接口发送出去)、下一跳地址(对方路由器的IP)
现在是假设IP包数据在传输的过程中没有被路由器进行修改:源IP和目的IP不修改(学了NAT之后可能会修改)
路由表是在路由器的内存里的,停电会丢失,插上电会自动生成
电脑、手机里都有路由表,只要是能配IP地址的,或者要上网的设备,都有路由表(交换机也可以有路由表),有路由表的机器也都有arp缓存表(arp -a可以查看电脑的arp缓存表)
路由的类型:
1.直连路由:路由器的接口配置的IP地址,直接相连的网段 ---》自己直接配置的网段 ---》自动产生,不需要配置
需要满足两个条件:需要配置IP地址,同时需要激活网卡(网卡状态要是up的)
2.非直连路由(只要是不直连的,想要过去,都需要添加静态路由或者动态路由)
静态路由:由管理员手工配置的,是单向的,缺乏灵活性
默认路由:当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口。默认路由是需要人添加的,属于特殊的静态路由,优先级比较低。
配置网关就是添加一条默认路由,末节网络中适合添加默认路由
动态路由:路由器自己产生
静态路由是由管理员手工去配置的,不配置路由表里没有 --》适合网络规模比较小的
动态路由是路由器互相之间学习(互相告诉),需要在每个路由器上启用路由协议,配置自己能到达哪些网络 --》适合网络规模比较大,路由器比较多
常见的动态路由协议:rip、ospf、BGP
动态路由协议详解:https://blog.csdn.net/m0_59388634/article/details/122375429?spm=1001.2014.3001.5502
优先级:直连路由--》静态路由--》动态路由--》默认路由
网关:网络的关卡---》gateway
路由器的LAN口的接口 ---》网关是一个角色,是pc成路由器相连的哪个lan口为网关,路由器自己不喊网关
添加静态路由:
Windows里:ip route 192.168.10.0(目标网段) 255.255.255.0(目标网段的子网掩码) 192.168.20.1(下一跳地址)
Linux里:ip route add 192.168.90.0/24 via 192.168.0.2 dev ens33
目标网段和子网掩码 下一跳 从自己的哪个接口送出去
路由器的作用:实现跨网段的通信使用,将数据从一个网络转发到另外一个网络,根据路由表转发数据
路由器工作过程:
1.查看IP包的目的IP地址
2.计算出目标网段
3.到路由表里查看是否有到目标网段的路由
4.如果有,就转发,如果没有,就告诉客户机不能到达
数据在传输过程中,就是一直在发arp广播包,Mac地址在一直更改,IP地址没有变
数据转发过程:
在Linux中临时添加IP地址:(重启系统就会丢失)
- ###临时添加IP地址命令
- [root@xieshan ~]# ip address add 192.168.0.33/24 dev ens33 #address可以简写为add,添加了的IP地址跟系统里的IP地址,共享一个Mac地址
- ####原来的IP情况:
- [root@xieshan ~]# ip add
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
- link/ether 00:0c:29:7b:fb:12 brd ff:ff:ff:ff:ff:ff
- inet 192.168.0.43/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
- valid_lft 85526sec preferred_lft 85526sec
- inet 192.168.0.130/24 brd 192.168.0.255 scope global secondary noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::3ecb:fb98:7235:d96d/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
- ####临时添加IP地址之后的IP情况:
- [root@xieshan ~]# ip address add 192.168.0.33/24 dev ens33
- [root@xieshan ~]# ip add
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
- link/ether 00:0c:29:7b:fb:12 brd ff:ff:ff:ff:ff:ff
- inet 192.168.0.43/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
- valid_lft 85462sec preferred_lft 85462sec
- inet 192.168.0.130/24 brd 192.168.0.255 scope global secondary noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet 192.168.0.33/24 scope global secondary ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::3ecb:fb98:7235:d96d/64 scope link noprefixroute
- valid_lft forever preferred_lft forever

Linux系统查看路由表
- [root@xieshan ~]# ip route #查看路由表
- default via 192.168.0.1 dev ens33 proto static metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.130 metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.43 metric 100
- 192.168.66.0/24 dev ens37 proto kernel scope link src 192.168.66.254 metric 101
- [root@xieshan ~]#
Linux添加静态路由
- [root@xieshan ~]# ip route add 192.168.90.0/24 via 192.168.0.2 dev ens33 #添加一条静态路由
- [root@xieshan ~]# ip route
- default via 192.168.0.1 dev ens33 proto static metric 100 #metric值小的优先级高
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.130 metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.43 metric 100
- 192.168.66.0/24 dev ens37 proto kernel scope link src 192.168.66.254 metric 101
- 192.168.90.0/24 via 192.168.0.2 dev ens33
- [root@xieshan ~]# ip route del 192.168.90.0/24 #删除一条路由
- [root@xieshan ~]# ip route
- default via 192.168.0.1 dev ens33 proto static metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.130 metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.43 metric 100
- 192.168.66.0/24 dev ens37 proto kernel scope link src 192.168.66.254 metric 101
- ####如果把默认路由删了,就会无法上网,ping自己的网关以及baidu都会不成功
- [root@xieshan ~]# ip route del default #删除默认路由
- [root@xieshan ~]# ping www.baidu.com
- connect: 网络不可达
- [root@xieshan ~]# ping 114.114.114.114
- connect: 网络不可达
- [root@xieshan ~]# ip route
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.130 metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.43 metric 100
- 192.168.66.0/24 dev ens37 proto kernel scope link src 192.168.66.254 metric 101
- [root@xieshan ~]# ip route add default via 192.168.0.1 dev ens33 #添加默认路由
- [root@xieshan ~]# ip route
- default via 192.168.0.1 dev ens33
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.130 metric 100
- 192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.43 metric 100
- 192.168.66.0/24 dev ens37 proto kernel scope link src 192.168.66.254 metric 101
- [root@xieshan ~]# ping www.baidu.com
- PING www.baidu.com (14.215.177.38) 56(84) bytes of data.
- 64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=55 time=28.5 ms
- 64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=55 time=27.9 ms

ping命令:用来测试网络的连通性,测试你的电脑和别人的电脑之间的网络是否流畅
-c count 发包的数量
-i interval 指定发送数据包之间的间隔,默认是1秒
-s size 指定发送数据的大小
-W timeout 超时的时间,也就是ping不通的时候,最多等待多久
每个ping包有1秒时间,如果有5个ping包,就有5秒的时间
-w deadline 期限
- [root@xieshan ~]# ping www.baidu.com
- PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
- 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=52 time=5.01 ms
- 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=52 time=5.04 ms
- 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=52 time=5.04 ms
- ^C
- --- www.a.shifen.com ping statistics ---
- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms
- rtt min/avg/max/mdev = 5.011/5.032/5.043/0.059 ms
0% packet loss 是丢包率,丢包越少越好
avg 是平均时间,越短越好
time 是响应时间,是数据包往返时间加起来的
#以上三个指标可以用来作为查看网络速度和质量的参考依据
ping命令的执行过程:
1.如果是域名,先进行域名解析到具体的一个IP
2.将要ping的IP地址和自己的子网掩码进行与运算,得出相应的网段号
3.然后到自己的电脑里的路由表里查询是否有到这个网段的路由,如果没有就走默认路由,会有下一跳地址
4.查看本机arp缓存表里面是否有下一跳地址的mac地址,如果有就直接封装,如果没有就发arp广播获得下一跳地址的mac地址
5.得到了mac地址后,封装好数据,走物理层(网线)送出数据
举例说明:本机IP:192.168.0.237/24,ping 192.168.90.1的过程:
1.拿目的IP192.168.90.1和自己的子网掩码进行与运算,得到目的网段192.168.90.0
2.查看本机的路由表,是否有到达这个网段的路由,如果没有就走默认路由,下一跳地址为192.168.0.1
3.查看本机arp缓存表里是否有下一跳地址192.168.0.1的Mac地址,如果有就直接封装帧,如果没有,就发arp广播获得192.168.0.1的Mac地址
4.得到了Mac地址后,封装好数据,走物理层送出数据
如果ping一台服务器ping不通,可能有哪些原因?
1.服务器挂了
2.对方服务器开启了防火墙
3.运营商问题,可能是中间线路断了,或者宽带被剪了
4.家里路由器出问题了,可能接口送了
ping不通的检查方法:
1.分段ping,从自己的网关一路ping出去
2.替换,换个目标服务器ping试一下
3.先硬件后软件:先检查网络是否联通,再检查IP地址,还有dns和网关
ping命令的使用总结:
1.ping通
2.ping不通
请求超时
1.对方开启了防火墙,不允许icmp协议包通过
2.中间路由器丢弃了我们的ping包
Destination Host Unreachable
1.一般是ip地址没有人使用
2.检查自己主机的模式
网络不可达
1.没有填写默认网关
未知的名称或服务
1.没有填写dns服务器地址
域名解析相关文件:
- [root@xieshan ~]# ip route add default via 192.168.100.1 dev ens33
- Error:Nexthop has invalid gateway. --->下一跳地址需要使用相同网段的ip
- [root@xieshan ~]# cat /etc/resolv.conf --->存放dns服务器IP地址的,真正我们进行域名查询的时候,就到这个文件里找dhs服务器地址
- Generated by NetworkManager
- nameserver 114.114.114.114
- nameserver 192.168.0.1
- nameserver 8.8.8.8
- ####nameserver最多可以3个
- [root@slave-mysql ~]# cd /etc/sysconfig/network-scripts/
- [root@slave-mysql network-scripts]# vim ifcfg-ens33
- BOOTPROTO=none
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- IPADDR=192.168.0.27
- NETMASK=255.255.255.0
- GATEWAY=192.168.0.1
- DNS1=114.114.114.114
- [root@slave-mysql network-scripts]# ifup ens33

当我们激活新的配置的时候,NetworkManager服务会读取ifcfg-ens33 里的DNS1这个配置写到/etc/resolv.conf
ifcfg-ens33 里的DNS1决定了resolv.conf 文件里的nameserver的值,但是真正有效的是resolv.conf 文件
1.先给虚拟机关机,添加一块网卡,然后开机
2.ip a查看系统识别网卡的名称(一般第二块网卡都叫ens37)
- [root@xieshan network-scripts]# ip a
- 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
- link/ether 00:0c:29:7b:fb:1c brd ff:ff:ff:ff:ff:ff
- inet 192.168.66.254/24 brd 192.168.66.255 scope global noprefixroute ens37
- valid_lft forever preferred_lft forever
- inet6 fe80::20c:29ff:fe7b:fb1c/64 scope link
- valid_lft forever preferred_lft forever
3.修改配置文件(跟手工配置IP地址的步骤类似,但是第二块网卡不能配置默认路由,否则机器上网会出现问题)
- [root@xieshan ~]# cd /etc/sysconfig/network-scripts/
- [root@xieshan network-scripts]# cp ifcfg-ens33 ifcfg-ens37
- [root@xieshan network-scripts]# vim ifcfg-ens37
- [root@xieshan network-scripts]# cat ifcfg-ens37
- BOOTPROTO="none"
- NAME="ens37"
- DEVICE="ens37"
- ONBOOT="yes"
- IPADDR=192.168.66.233
- PREFIX=24
- ###GATEWAY=192.168.0.1 #不要配置网关,也就是默认路由
- DNS1=114.114.114.114
- [root@xieshan network-scripts]# systemctl restart network #配置好文件后需要重新激活网卡,centos8中激活的命令是ifup ens37
- [root@xieshan network-scripts]# service NetworkManager restart
- [root@xieshan network-scripts]# ip a
- 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
- link/ether 00:0c:29:7b:fb:1c brd ff:ff:ff:ff:ff:ff
- inet 192.168.66.233/24 brd 192.168.66.255 scope global noprefixroute ens37
- valid_lft forever preferred_lft forever
- inet6 fe80::20c:29ff:fe7b:fb1c/64 scope link
- valid_lft forever preferred_lft forever

添加多网卡的目的:可以链路聚合,可以冗余,可以连接多个网段,可以更加多的网段通信,还可以做路由器(后面做NAT实验时会用得着)
广播:将广播地址做为目的地址的数据帧
广播域:网络中能接收到同一个广播所有节点的集合
路由器是隔离广播域的,默认情况下,路由器不会转发广播包,路由器一个接口就是一个广播域
ARP协议:Address Resolution Protocol 地址解析协议
ARP协议只能在局域网中使用(IP协议在整个互联网中使用)
在网络中充斥这很多arp广播,因为计算机之间需要通信
arp协议可以理解为侦查的功能,它的作用:将一个已知的IP地址解析成MAC地址
arp缓存表: 存放的是我们电脑或者路由器里的某个IP对应的Mac地址,它是存放在内存里的,会动态更新
arp报文:
1.请求报文 request---》广播,在帧层面目的地址全是F,就是一个广播包
2.响应报文 response---》单播,在帧层面目的地址跟源地址都是具体的,就是单播包
arp协议的二层封装和三层封装:
二层(数据链路层): 源mac是自己的mac 目的mac是ff:ff:ff:ff:ff:ff
三层(网络层):源ip是自己的ip 目的ip是对方的ip
arp协议的封装内容:---》电脑和路由器查看
目的MAC:00:00:00:00:00:00 -->通过arp协议需要得到目的MAC地址,但是暂时不知道,所以先使用0填充
源MAC:00:0c:29:7b:fb:12(具体的)
目的IP:192.168.2.199
源IP:192.168.2.43
帧的封装内容:---》交换机查看,电脑和路由器也会查看
目的MAC:FF:FF:FF:FF:FF:FF -->表示我需要的目的MAC,广播地址
源MAC:00:0c:29:7b:fb:12
动态arp记录和静态arp记录有什么区别?
静态绑定:静态的arp记录优先级会更高(类似于意志会更坚定,不会受到别人的干扰)
好处:可以防止arp病毒
arp病毒:
让局域网里的机器找不到正确的网关对应的mac地址(欺骗,让你的arp缓存表里网关的mac地址发生变化,使用它告诉你的新的mac地址)
防范措施:
安装防火墙,静态绑定正确的网关的mac地址
抓包工具分析出病毒源
静态绑定正确的网关的mac地址
IP地址不能和网关冲突,如果冲突会导致其他的电脑会得到冲突的IP的Mac地址,导致不能上网了
一个电脑不要配置两个默认网关(其实就是两条默认路由),会导致走错路,导致上不了网
0.0.0.0 0.0.0.0 代表任意IP地址,任意的子网掩码
查看arp缓存表以及删除缓存表中的记录以及静态绑定
- [root@xieshan network-scripts]# arp -a #查看arp缓存表
- ? (192.168.2.144) at 60:30:d4:7f:9c:92 [ether] on ens33
- ? (192.168.2.110) at 62:64:77:32:43:27 [ether] on ens33
- ? (192.168.2.134) at f8:a2:d6:04:5a:d6 [ether] on ens33
- ? (192.168.2.199) at <incomplete> on ens33
- gateway (192.168.2.1) at a4:1a:3a:38:8d:29 [ether] on ens33
- ? (192.168.2.123) at 16:2b:c3:5f:08:d7 [ether] on ens33
- ? (192.168.2.147) at 00:e0:4c:26:5b:68 [ether] on ens33
- [root@xieshan network-scripts]# arp -d 192.168.2.144 #删除arp缓存表里的一条数据,(再次ping这个IP地址会再次获得)
- [root@xieshan network-scripts]# arp -a
- ? (192.168.2.144) at 60:30:d4:7f:9c:92 [ether] on ens33
- ? (192.168.2.110) at 62:64:77:32:43:27 [ether] on ens33
- ? (192.168.2.134) at f8:a2:d6:04:5a:d6 [ether] on ens33
- ? (192.168.2.199) at <incomplete> on ens33
- gateway (192.168.2.1) at a4:1a:3a:38:8d:29 [ether] on ens33
- ? (192.168.2.123) at 16:2b:c3:5f:08:d7 [ether] on ens33
- ? (192.168.2.147) at 00:e0:4c:26:5b:68 [ether] on ens33
- [root@xieshan network-scripts]# arp -s 192.168.2.110 62:64:77:32:43:27 #绑定arp记录,将某个mac地址绑定到某个ip地址
- [root@xieshan network-scripts]# arp -a
- ? (192.168.2.144) at 60:30:d4:7f:9c:92 [ether] on ens33
- ? (192.168.2.110) at 02:64:77:32:43:27 [ether] PERM on ens33 #从动态的记录变为静态的arp记录
- ? (192.168.2.134) at f8:a2:d6:04:5a:d6 [ether] on ens33
- ? (192.168.2.199) at <incomplete> on ens33
- gateway (192.168.2.1) at a4:1a:3a:38:8d:29 [ether] on ens33
- ? (192.168.2.123) at 16:2b:c3:5f:08:d7 [ether] on ens33
- ? (192.168.2.147) at 00:e0:4c:26:5b:68 [ether] on ens33

如何获得缓存表里所有正在使用的IP地址对应的Mac地址:
- [root@xieshan network-scripts]# arp -a|tr -d "()"|grep -v incomplete|awk '{print $2,$4}'
- 192.168.2.144 60:30:d4:7f:9c:92
- 192.168.2.110 62:64:77:32:43:27
- 192.168.2.134 f8:a2:d6:04:5a:d6
- 192.168.2.1 a4:1a:3a:38:8d:29
- 192.168.2.123 16:2b:c3:5f:08:d7
- 192.168.2.147 00:e0:4c:26:5b:68
在Linux中,tracepath 是路由追踪命令,可以知道我们电脑到目的主机,经过哪些路由器,可以知道它们的下一跳地址
- [root@xieshan network-scripts]# tracepath www.baidu.com
- 1?: [LOCALHOST] pmtu 1500
- 1: gateway 1.436ms
- 1: gateway 1.309ms
- 2: 192.168.0.1 1.763ms
- 3: 192.168.0.1 1.740ms pmtu 1492
- 3: 175.0.148.1 5.745ms
- 4: 222.247.27.113 5.289ms
- 5: 61.187.25.61 6.758ms
- 6: no reply
- 7: no reply
- 8: no reply
- 9: 121.14.14.138 33.536ms
- 10: 14.215.32.106 18.267ms
在Windows中,使用:E:\>tracert www.baidu.com也可以获得同样的效果
tracepath为什么能够获取到下一跳地址?
tracepath是基于ICMP协议的(收到数据必须要回复对方),它有个TTL,转发数据给路由器。TTL从1开始,每经过一个路由器就减1,当TTL为0时,路由器就不会为它转发数据,但是会给他回一个包,回包的时候,就可以知道那个路由器的IP地址了。当TTL为0之后,下一次传输数据又会给原始TTL加1,这样数据可以比上一次多走一个路由器。tracepath默认是发30个数据包。
使用arping命令去ping别人的IP地址,如果一个ip地址对应一个Mac地址,那么这个IP地址就没有冲突,如果一个IP地址对应好几个Mac地址,就可能有冲突
- [root@xieshan network-scripts]# arping -I ens33 192.168.2.1 #-I 时指定接口
- ARPING 192.168.2.1 from 192.168.2.43 ens33
- Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29] 1.374ms
- Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29] 4.153ms
- Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29] 5.612ms
- Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29] 1.210ms
- Unicast reply from 192.168.2.1 [A4:1A:3A:38:8D:29] 1.262ms
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。