MAC表、ARP缓存表、路由表以及端口映射NAT

1.MAC地址表

说到MAC地址表,就不得不说一下交换机(工作在第二层:数据链路层)的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。

交换机的工作原理:交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。

1.1: 如下图:详细讲解交换机传输数据帧的过程

一个简单的网络

1)主机A会将一个源MAC地址为自己,目标MAC地址为主机B的数据帧发送给交换机。

2)交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为f 0/1) 记录到MAC地址表中。

3)然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去,如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了f 0/1接口)(广播)。

4)这时,局域网的所有主机都会收到此数据帧(这些主机都会学习主机1的MAC地址),但是只有主机B收到此数据帧时会响应这个广播(回应一个数据帧,此数据帧中包括主机B的MAC地址)。

5)当交换机1 收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现一对一通信(单播)了。

1.2:如下图:当局域网存在多个交换机互联的时候,交换机的MAC地址表是怎么记录的呢?

一个实际的网络

1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机1

2)交换机1收到此数据帧后,会学习源MAC地址(f0/1口对应主机1的MAC),并检查MAC地址表,发现没有目标主机C的MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。

3)交换机2收到此数据帧后也会将数据帧中的主机1的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标主机C的MAC地址的记录,则会广播此数据帧。

4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机2都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。

5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。

总结:从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。

TIP:交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。


2.ARP缓存表详解

上面我们讲解了交换机的工作原理,知道交换机是通过MAC地址通信的,但是我们是如何获得目标主机的MAC地址呢?这时我们就需要使用ARP协议了,在每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。

ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。

如下图:详细讲解ARP的工作原理。

一个简单的网络

1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。

2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。

3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP响应,其中包括自己的MAC地址。

4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。

TIP:在主机的ARP缓存表内只保存和自己在同一个网段内的IP与MAC的对应关系(cmd:ARP -a)


3.路由表详解

路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没有当今的互联网。

在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。

数据路由的过程:

路由器是工作在网络层的,在网络层可以识别逻辑地址。
当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址(ip地址)的网络部分,然后在路由表中进行查找。
如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,
如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置了默认路由,就按照默认路由的配置转发到路由器的相应接口;
如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。

如下图:详细介绍路由器的工作原理:

不同网段间的通信

1)HostA在网络层将来自上层的报文根据IP协议封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB(192.168.2.2),HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段(自然的自己的ARP缓存表内并没有HostB的记录),因此发送HostB的数据包需要经过自己的默认网关路由A的转发。

2)HostA通过ARP请求获取网关路由A的网卡E0口的MAC地址,并在链路层将路由器网卡E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己(IP数据报没有改动)。

3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2(路由器A的E1接口的APR表内有路由器B的E1接口的IP与MAC记录),因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。

4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

5)此时HostB才会收到来自HostA发送的数据。

总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。


4.内网、公网、端口映射(NAT)

一般在家里我们自己的电脑的IP一般都是192168.x.x这样的内网IP,而内网是无法访问外网的。实际上我们却可以和公网主机进行通信例如可以访问百度等等。那么是如何做到的呢?端口映射。‘

原理:

1)内网中的一台主机A要访问百度,会向默认网关S(具有NAT能力,一般的路由器TPlink等等都i是有的)发送IP数据数据报,报文头中包括目标主机的(就是百度)IP、端口和A自己的内网IP、端口,

2)NAT网关S会把A发送的IP数据报首部的中的A的IP、端口替换成自己的公网IP、一个未使用的端口P,并且会记下这个映射关系(端口号《==》A的IP与端口映射),为以后转发数据包使用。

3) 然后再把数据发给百度,百度收到请求数据后做出反应,发送数据到NAT网关S的端口P,然后NAT网关S将P端口的数据转发给内网中的那台电脑A,实现内网和公网的通讯.

分类:

动态的端口映射: 当连接关闭时,NAT网关S会释放分配给这条连接的端口,以便以后的连接可以继续使用。
静态的端口映射: 在NAT网关上开放一个固定的端口,然后设定此端口收到的数据要转发给内网哪个IP和端口,不管有没有连接,这个映射关系都会一直存在。

TIP:二级三级等等各级网络分包商比如长城等等是一种很狗比的存在。

猜你喜欢

转载自my.oschina.net/Aruforce/blog/1630505