标签:
PC0(ip0/mac0)------SW(ip1/mac1)---------ROUTER(ip2/mac2)---------PC1(ip3/mac3)
假设是第一次通信,有路由器存在,跨网段的通信哦。
SW:交换机。
ROUTER:路由器。
1.PC0开始Ping PC1,因为是跨网段的通信,所以要先发ARP包请求网关的MAC地址,要拿到网关的MAC地址才能正确封装数据。这时ARP包(注意这里是ARP包,不是你的Ping包)(广播地址:FF:FF:FF:FF:FF:FF)
{PC0发送arp包:sour--(ip0/mac0),det--(ip3/FF:FF:FF:FF:FF:FF)} (网卡发送)
2.当Sw收到PC0的ARP包,先学习,将PC1的MAC地址记录下来并和对应的接口绑定,形成CAM表,因为SW没有学习到关于PC0 的网关的任何表项,所以将此ARP包进行泛洪,包的内容并没有修改。
{SW的cam表:(学习ip0/mac0/网卡口}
{SW发送arp包到ROUTER:sour--(ip0/mac0),det--(ip3/FF:FF:FF:FF:FF:FF)}(每个网卡口泛洪)
3.当ARP包到达了router,router先记录PC0的IP地址和对应的MAC地址,然后会响应这个ARP包,并作出回应,回应的这个ARP,源IP为router接口IP,源MAC为router接口MAC,目标IP为PC0的IP,目标MAC为PC0
的MAC。。这个ARP回应发回给SW,Sw学习这个MAC地址,并记录到CAM表,然后转发给PC0。
{ROUTER的cam表:存在(ip3/mac3/网卡口号); 学习(ip0/mac0/网卡口号);}
{ROUTER发送arp包到sw:sour--(ip2/mac2),det--(ip0/mac0)}
{SW的cam表:存在(ip0/mac0/网卡口号);学习(ip3/mac3/网卡口号)}
{SW发送arp包到PC0:sour--(ip1/mac1),det--(ip0/mac0)}
{PC0的arp表:学习(ip1/mac1/网卡口号);}
4.这时 PC0已经有了网关的MAC地址,Ping包就可以正常发送 ,Ping包格式源IP是PC0的IP,源MAC为PC0的MAC,目标IP为PC1的IP,目标MAC为PC0的网关的MAC。
{PC0发送ping包到SW:sour--(ip0/mac0),det--(ip3/mac1)}
{SW发送ping包到ROUTER:sour--(ip1/mac1),det--(ip3/mac2)}
5.
如果ROUTER没有连接PC1:
当PC0的Ping包到达路由器,路由器这时就要查看自己的路由表,发现有连接有PC1的这个网段,但是路由器没有PC1的MAC地址,无法将此包进行封装转发,封装失败,就将这个包丢弃
如果ROUTER连接了PC1:(ROUTER里面arp表中PC1的(ip3/mac3)建立)
1、路由器这时就从连接PC1网段的这个接口发送ARP包,源IP地址,连接PC1的接口IP地址,源MAC地址,连接PC1的接口MAC地址,目标IP地址,PC1的ip地址,目标MAC地址全F。
2、当PC1收到这个路由器发送的ARP包,进行相应,将自己的MAC地址返回给路由器。
3、路由器这个时候就获取了PC1的IP地址和对应的MAC地址。
当完成了以上的过程,交换机和路由器各个接口连接设备的MAC地址就全部知道了。
当第二个Ping包过来的时候就可以正常的转发了。
对于交换机的工作原理一定要弄清楚。
对于交换机来说,它只能看到2层的东西,它并不能查看到IP地址,只有路由器可以查看IP头部。
标签:
原文地址:http://blog.csdn.net/cy_cai/article/details/44836369