为何须要了解二层封装呢? 由于在一个路由器转发数据包的时候,除了知道目的地怎么去(有路由),还须要二层的正确封装,不然就算有路由的话,也没法进行通讯。缓存
这是卷一提到过的,虽然没有像协议卷一说得那么细,可是,它也说明了,必须获取数据链路层的信息才能正常进行封装,而这个二层的信息一般就是目的mac地址,而提供这个IP对应MAC的机制,就经过ARP来完成,而且经过缓存保存下来。而网络层,则是经过静态或者动态路由协议获取相关的信息,保存在路由表中,也叫路由选择信息库 RIB。安全
这个拓扑主要介绍ARP和代理ARP在以太网类型中起一个什么做用。IP地址信息如图上所示网络
第一个证实,二层若是没有获取到封装的信息,则数据包都不会发送出去。
根据这个图就配置了IP地址,右边路由有一跳缺省路由,这时候随便测试一个不存在的地址,查看数据包发送的状况。
在R2上telnet 12.1.1.3,一个不存在的地址 。app
没有响应是正常的,可是这个没响应,到低是由于找不到二层的封装,仍是应用层没有响应呢。 三层信息路由是没有问题的,由于是直连网段,,那么以太网通讯,必须知道对方的MAC地址,而默认状况下,是不知道的,那么就须要一个机制来进行查询,就是ARP了。tcp
发送了三个ARP查询,而网络中没有人进行响应,因此,二层没法获得封装(没有获取12.1.1.3的MAC地址)则通讯失败。ide
这时候,咱们作一个静态ARP绑定,而后在进行telnet,MAC地址能够随意定义。测试
其中1.1.1就是表示MAC 0001.0001.0001 能够省略写的。spa
发现了什么? 由于MAC地址有了封装(就是手工绑定的),它直接发送TCP链接给12.1.1.3了,发送了4个SYN的包,由于对方没有响应SYN+ACK,因此这个TCP会话没有继续进行下去。操作系统
结论: 不管在一个相同网段,仍是不一样网段的状况下,若是二层的介质是以太网,那么就必须获取对方的MAC地址信息,相同网段则是目的地址的MAC地址,不一样网段则是路由表中的下一跳 ,一种特殊状况下,就是启用了代理arp的话,那么也是目的地址,可是MAC则是下一跳。 这也是在当前IPV4的网络中,ARP是一个很是不安全的协议,由于很容易就实现***了,只要网关的MAC被***者以错误的MAC告诉当前网络的设备,那么整个网络就通讯不正常了。3d
第二个证实:路由器在路由模式和主机模式下,数据包是怎么通讯的。
仍是这个拓扑,在右边路由器上关闭路由功能,no ip routing,那么能与 1.1.1.1通讯么?
答案是:能够的。
通了是通了,那么它是怎么通的呢
在show arp后,发现除了有12.1.1.1的MAC地址信息(以前ping过了),还有1.1.1.1对应的MAC信息,另一个重要的信息就是12.1.1.1和1.1.1.1的MAC地址信息都是关于12.1.1.1的,这是为何? 这就是所谓的代理ARP和主机模式工做的工程。
一、无网关状况下:当没有网关的状况下,它会对当前网络进行ARP查询,询问访问的目的地址的MAC地址信息,若是这个时候,网关知道怎么去这个目的地址,而且开启了代理ARP的功能,那么就会回应这个ARP响应,那么回应的内容就是这个目的地址的MAC地址是本身,这对于PC或者主机路由器来讲是不知道的,它就认为这个MAC是对应目的主机,每次发送去往这个目的地址的时候,二层就封装这个目的MAC,而后发送出去。
二、有网关的状况下:当有网关的状况下,它只会询问网关的MAC是多少,若是网关响应了后,那么PC或主机路由器,就会把这个数据包发送出去,它无论网关是否知道怎么去往这个目的地址不。
能够进行证实:一、在没有网关的状况下,把R1的代理ARP给关闭了,默认是打开的,而且把ARP 缓存清掉 shutdown接口,clear arp
不通,由于R1的接口已经关闭了代理ARP了,因此不不会去响应这个ARP的Request。
二、设置网关为R1的接口,而且发送一个去往2.2.2.2的telnet的会话,看TCP会话是否会发出去,若是出去了,就证实以前说的是对的,无论网关是否知道目的地可达,PC或主机路由器都会发送。
这时候开始telnet 2.2.2.2
telnet2.2.2.2 ,提示目的不可达,或者网关和主机是downde
首选,路由器发送ARP的Request选为12.1.1.1(GW)的MAC地址是多少。R1响应这个ARP的请求。紧接着一个TCP会话发送出去,R1直接回复一个ICMP的差错报文,主机不可达。
路由模式的数据包转发,不跟主机模式同样,主机模式是只要设置了网关或者没设置都会发送arp请求,可是,路由模式的话,先查看路由表,若是路由表中没有该路由,则不作任何动做。
能够看出,由于路由表没有去往2.2.2.2的路由信息,因此不采起任何动做,连ARP都没有发送。
第三个证实:两个不一样网段的主机,可否进行通讯?
在设置有GW的状况下,确定是不可能的,可是,在某种状况下,它却成为可能,那就是两个主机都不设置IP,而且有代理ARP功能。
说明:R1和R2都是关闭了路由功能的路由器,而且接口开启了代理ARP功能。IP地址与图
从R1开始ping 2.2.2.2,而且抓取R1的数据包进行分析。
没看错,R1与R2能够通讯了,仔细看抓包的内容,首先R1发送一个arp的查询,{how has 2.2.2.2? tell 1.1.1.1}一个询问2.2.2.2的MAC Request包就发送出去了,由于R2与R1是直连(链路),因此,R2收到了这个ARP 的Request,并且R2是开启了代理ARP功能的,也就是说只要R2知道2.2.2.2怎么去,就会响应这个ARP的请求(这里明显就是本身),因此第二个诉举报就是arp的reply{2.2.2.2 is at c0:01:05:04:00:00},那么这时候R1就有R2的mac地址映射了,因此就发送了数据包出去,也就是icmp的echo,这时候R2收到,须要回应这个数据包,可是,它并不知道对方的MAC是什么,紧接着也发送了一个ARP的请求过去,询问1.1.1.1的MAC,而后,R1回复这个ARP请求。后续,通讯就正常了。
注意:若是是正常的ARP询问,那么只要一方放送ARP请求,另一份响应的时候,还会把请求方的ARP的信息缓存起来。而且在主机模式下的路由器是不能关闭代理ARP的,就算接口下关闭了,也同样会响应请求。
其实,不仅有代理ARP能实现这个需求,好比在PC的状况下,由于PC没有代理ARP机制,因此,能够直接把1.1.1.1的网关设置为2.2.2.2,2.2.2.2的网关为1.1.1.1,它同样能通讯,由于它会发送ARP信息来请求网关。
注意:并非全部的操做系统都是能执行的,有些是禁止的,之全部说明这个案例,主要是说明ARP在MAC和IP对应时候的做用,已经二层封装。
本文首发于公众号:网络之路博客