简介:openwrt是一个关闭NAT功能的路由器
在Debian3 ping 192.168.18.12 时,在ICMP请求包发送之前,会先根据ip去查路由表,路由表中配置了一条静态路由记录,指明desIp网段与192.168.18.0/24网段相同的包发送到10.0.5.1这个网关上做进一步处理,根据路由表中的记录,去查arp表中10.0.5.1该ip的mac地址,如果表中无记录首先会发送arp包获取10.0.5.1的mac地址,拿到地址以后对数据包进行封装,再从Debian3的ens6网卡输出,
数据包内的mac和ip如下:srcIp:10.0.5.2
srcMac:13:3e:44
desIp:192.168.18.12
desMac:13:3e:60
Q1:如果Debian3的本机路由表上并没有这样一条记录也没有默认路由会发生什么?
当路由表上没有该记录时,Debian3的ip协议栈无法判断该ICMP请求包下一跳的地址,Debian3会生成一个ICMP 目标不可达消息告知本机,也就是说ICMP请求包并不会从ens6的网卡上输出。
openwrt3的br-lan网卡输入数据包内容同上,这时br-lan网卡收到ICMP请求包时会先比对mac地址看包是不是发送给自己的,比对成功后网卡会将帧中的数据取出,并根据mac头部指定的携带包的类型,将其传递给ip协议栈进行处理,openwrt3的ip协议栈会先根据desIp判断该包是不是发送给自己的,当包不是发送给自己的时候,会进入转发,openwrt3会根据包中的desIp去路由表中查询,openwrt3的路由表中配置了一条记录指明desIp网段与192.168.18.0/24网段相同的包要发送到172.16.0.1这个网关上做进一步处理,根据该记录通过arp拿到172.16.0.1的mac地址,再从openwrt3的eth1网卡输出,
数据包内的mac和ip如下: srcIp:10.0.5.2
srcMac:11:3e:60
desIp:192.168.18.12
desMac:11:3e:49
openwrt1的br-lan网卡输入数据包内容同上,openwrt1通过desIp判断该包是发送给自己的,在收到ICMP请求包以后要发送ICMP响应包,openwrt1先根据ICMP请求包中的srcIp:10.0.5.2去路由表中进行查询,openwrt3的路由表中配置了一条记录指明desIp网段与10.0.5.0/24网段相同的包发送到172.16.0.5这个网关上做进一步处理,根据该记录通过arp拿到172.16.0.5的mac地址,再从openwrt1的br-lan网卡输出,
数据包内的mac和ip如下: srcIp:192.168.18.12
srcMac:11:3e:49
desIp:10.0.5.2
desMac:11:3e:60
Q2:如果openwrt1路由表上并没有这样一条记录也没有默认路由会发生什么?
由于openwrt3关闭了NAT功能,所以openwrt1收到ICMP请求包的srcIp还是Debian3的ip:10.0.5.2,并没有被替换成172.16.0.5,openwrt1需要根据ICMP请求包的srcIp发送响应包,由于路由表中并没有记录指明10.0.5.2的下一跳的地址,因此响应包无法发送,进行抓包会发现,只有请求包送达到openwrt1的br-lan网卡,没有响应包从该网卡发出。
openwrt3的eth1网卡输入数据包内容同上,查询路由表和arp并从openwrt3的br-lan网卡输出,
数据包内的mac和ip如下: srcIp:192.168.18.12
srcMac:13:3e:60
desIp:10.0.5.2
desMac:13:3e:44
Debian3的ens6网卡输入数据包内容同上。
以上就是能ping通192.168.18.12时数据包来去的整个过程