05.计算机网络---网络层/路由器工作原理/ARP协议/ping命令

本篇文章还是针对计算机网络TCP/IP五层模型中的第三层网络层,主要包括的内容有路由器工作原理,转发数据工程,路由表的组成、ARP协议,ping命令的具体使用,tracepath命令等等,在网络排查故障方面会给予你一定的提示。

目录

一.路由/路由器/路由表

二.ping命令

三.给虚拟机添加网卡,并在系统文件中添加配置

四.广播与广播域

五.ARP协议

六.tracepath命令

七.如何判断IP地址是否和别人冲突了


一.路由/路由器/路由表

路由:动词,跨越从源主机到目标主机的一个互联网络来转发数据包的过程

能够将数据包转发到正确的目的地,并在转发过程中选择最佳路径的设备---路由器

路由器如何知道我们的数据从哪里来到哪里去呢?

        路由器在网络层,数据会添加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地址没有变

数据转发过程:

05.计算机网络---网络层/路由器工作原理/ARP协议/ping命令_第1张图片

在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:  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:  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命令

ping命令:用来测试网络的连通性,测试你的电脑和别人的电脑之间的网络是否流畅

-c count 发包的数量

-i  interval 指定发送数据包之间的间隔,默认是1秒

-s size 指定发送数据的大小

-W timeout 超时的时间,也就是ping不通的时候,最多等待多久

        每个ping包有1秒时间,如果有5个ping包,就有5秒的时间

-w deadline 期限

05.计算机网络---网络层/路由器工作原理/ARP协议/ping命令_第2张图片

[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:  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:  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协议

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

六.tracepath命令

在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个数据包。

七.如何判断IP地址是否和别人冲突了

使用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

你可能感兴趣的:(计算机网络,运维,网络协议,linux,网络)