赞
踩
通常我们知道,回环网卡是自己和自己玩,是ping不出去的。难道在回环网卡上设置ip地址,就真的ping不出去吗?我们使用一些路由机制就能让回环网卡上的数据包出去,并且返回的数据包回来。当然,这里就跟着我来实现使用回环网卡和外部网络通信吧!
ping 127.1
ping 127.2
ping 127.0.1
……
发现都可以ping成功。
猜想:这似乎是127.0.0.1地址的特殊用法吧。下面实验告诉你是怎么回事。
ip add a 1.1.1.1/24 dev lo
ping 1.1.1.2
ping 1.1.1.3
……
ping 1.1.1.100
发现都能ping通,这就告诉我们,只要是在回环网卡上设置一个网络,ping其网络上的任意ip地址都能够ping通。
(1)删除原来的ip地址
ip address del 1.1.1.10/24 dev lo
(2)新添加一个ip地址
ip add a 1.1.1.1/32 dev lo
ping 1.1.1.2将发行ping不通了。
(3)做下面的实验时候,为了不搞晕你和我,我们先不设置ip地址,将其删除。
centos6上使自己的eth0网卡上的192.168.233.61能ping通centos7上ens38网卡的1.1.1.2/24
有几种方法
方法1:直接修改网卡配置文件,修改配置ip
方法2:添加别名网卡ifconfig ens38:0 1.1.1.2/24
方法3:添加辅助ip,ip add a 1.1.1.2/24 dev ens38
,这里使用此方法
route add -net 1.1.1.0/24 dev eth0
可以在centos7上进行抓icmp包
tcpdump -i ens38 -nn icmp
来验证是否是192.168.233.61和1.1.1.2通讯。
天呐,怎么可以这样。其实是有原因的。因为其实通讯是依靠Mac地址来的,并不是完全靠ip地址来通讯的。
那么新问题来了,我能ping出去,利用1.1.1.2是否能ping回来192.168.233.61呢?这当然是要在centos7上设置路由了,这里的原理和上面一样,就不多说了,我们的目的不在这里。
ip add a 1.1.1.1/32 dev lo
发现已经可以成功ping通自己了。
2、centos7设置通向1.1.1.0/24网络的路由经过什么网卡出去
route add -net 1.1.1.0/24 dev ens38
代表发往1.1.1.0/24的网络都发到ens38网卡上面
3、这时候可以ping 1.1.1.1,然后在centos7或centos6上进行抓icmp包,看是否是1.1.1.1和1.1.1.2进行通信。理论上已经可以成功,如果不成功,多半是因为路由设置的问题。
4、这时候可以配一个httpd看是否能提供服务
yum -y install httpd(如果没有安装的话)
service httpd start
思考:难道就真是两个ip互相通信吗?
先抓包看现象吧,注意centos6上的回环网卡ip是1.1.1.1,centos7上ens38上的ip是1.1.1.2,我们开一个窗口进行抓包。
tcpdump -i ens38 -nn icmp
注意:centos6上的eth0网卡和ens38网卡是同一个物理网络。其他网卡不用考虑
(1)1.1.1.1->1.1.1.2时候,由于内核发现有通往1.1.1.0/24的网络,则利用eth0网卡发送出去,进行arp广播,寻找1.1.1.2的mac地址,那么在centos7的ens38网卡收到请求1.1.1.2网卡的mac地址,则将mac告诉centos6,由于eth0找到了1.1.1.2网卡的mac地址,则centos6利用eth0网卡和ens38网卡通信。于是我们看到的是192.168.233.61和1.1.1.2进行通信。实际上也验证一个结论,局域网之间的通信是按照mac地址来通信的。但是还是需要ip地址,因为icmp协议要求必须要有ip地址。
(2)1.1.1.2->1.1.1.1时候,内核同样查看自己的路由信息,发现了1.1.1.0/24的路由,则发生arp广播到ens38网卡上面,ens38在物理上发出广播,请求1.1.1.1的mac地址,物理网络上的所有网卡收到arp广播,centos6内核接收到arp广播,发现1.1.1.1地址在自己的一个网卡上面,于是就通过eth0网卡发出arp回应报文,这时候centos7接收到arp数据包的回应,则认为找到了1.1.1.1地址,则发出icmp请求,那么centos6接收到请求,查看目标地址是1.1.1.1,则接收下来,开始封装icmp回应报文,因为请求报文的目标地址是1.1.1.1,因此封装了一个回应报文,其源地址是1.1.1.1,目标地址是1.1.1.2,因此在centos7上看到的是1.1.1.1和1.1.1.2进行通信。因此又证明了局域网通信是依靠mac地址的,我们可以对回环网卡抓包,看是否接收的到,如下图,其实回环网卡是没有接收到任何请求数据包的。
其实lo网卡是“自己和自己玩的,不会接收到其他网卡上的数据包的,这里配置了一个1.1.1.1地址,只是骗骗内核,告诉内核我们的机器上行存在这个地址。内核就傻傻的认为我的机器上有这个地址。”
有什么我理解的不对的或者你不理解的,欢迎交流^_^
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。