MAC地址在数据链路层工作,是绑定物理网卡,出厂时决定,是独一无二的。
IP地址在互联网的逻辑上代表一个设备,在ip地址使用到期后,ip地址会被重新分配,然后再次绑定到其他设备上。
交换机和路由器
交换机与路由器的区别:
电子设备是通过内部的网卡进行通信的
设备通过网线接入到了交换机的端口上,
这样交换机就知道了我的端口1对应的MAC地址是多少,实现交换机的端口号与MAC地址的绑定。
如果仅仅在局域网内进行通信,使用MAC地址即可。但是如果需要在整个互联网通信,那么MAC地址难以定位区域。我们需要使用另外一个地址叫IP地址。
当网络设备接入网络时,需要给MAC地址配置IP地址,分为IPV4地址和IPV6地址。
当电脑接入网线时,虽然我们没有去配置IP地址,但我们仍然可以使用,这是因为DHCP协议自动帮我进行配置。
当电脑连入网线,操作系统的网络协议栈,会发送DHCP请求,请求为其分配IP地址。
路由器收到请求后便会返回IP地址给设备,然后设备就会将其分配的IP地址分配到网卡上:
(在局域网中,IP地址是唯一的)
有了IP地址后,我们想要直接进行通信,还不能通信,还需要获取对方这个ip地址对应的MAC地址是多少。
通过ARP协议,我们可以将IP地址转化为MAC地址。(方式是通过广播的形式:发送ARP广播,询问是否有人的IP地址是这个,如果有人的IP地址是这个,那么请告诉我MAC地址是多少)
然后IP地址符合的则会将自己的MAC地址返回给请求的客户端。
接下来客户端会将这个IP地址对应的MAC地址缓存起来以便于下次使用。
然后将数据包补上MAC地址,发送给交换机,交换机则会根据MAC地址然后找到其对应的端口并发送到对应的端口上。
交换机怎么知道MAC地址对应的是哪个端口呢?
因为物理设备和交换机的不同端口是直接相连的:
交换机会存储一张端口与MAC地址的映射关系表:进行通信时,根据这个表查询是哪个端口,然后转发出去即可。
当有数据报从某设备发送过来时,该数据报会包含:
接下来为了方便后续会将源MAC与接收端口绑定,并填入MAC地址表。
然后需要查找发出端口,假如表中没有该MAC地址,则对除了接收该消息的端口以外的所有端口进行群发,这种现象成为泛洪。只要该MAC地址在这个网络中则一定会收到该消息。
通过上面的工作流程我们知道交换机只关心MAC地址,不关心IP地址。
MAC地址位于第二层数据链路层,因此数据链路层也被称为MAC层。
所以交换机也被称为二层设备:
接下来看看路由器:
路由器分为WAN口和LAN口,WAN口是用来接入运营商网络的。
如果忽略WAN口则路由器等于交换机。
来看看网关是什么东西:
先来了解下子网划分:
即IP地址与子网按位相与:
如果IP地址与该子网掩码按位相与,则IP地址的二进制的前24位不变,后8位变为0。
比如:
两个IP与子网掩码做了与运算之后的结果如果相同,说明这两个ip地址位于同一子网。
所以扩大ip数量只需要调小子网掩码,减少ip数量只需要同理
不同子网间没法直接通信,需要通过网关实现
发送数据报时,如果不是在同一个子网,则先发送到网关的MAC
然后网关根据ip地址,查询路由表,然后
根据目标ip判断如何发送的方式就是路由
从内网到互联网就是一个跨网络的行为,需要路由器担任网关,进行路由。
两个家庭都使用相同的ip地址访问互联网,为什么不冲突呢
数据包的发送是通过ip进行路由的,如果ip冲突,则arp表混乱,无法确定目标
思路很简单,就是让经由网关发送出去的ip地址用路由器去修改ip即可
于是通信的过程如下,经过路由器时会进行SNAT和反向SNAT
但是如果两个计算器都用的同一个ip地址,当接收服务器消息时怎么办?
所以此时需要将关联的属性往下扩展到传输层,以传输层协议TCP为例,里面有两个关键属性,源端口和目标端口
通过不同的端口来区分相同的ip地址。
SNAT是源地址转换,那同样有一个目标地址转换技术,也就是DNAT
SNAT是用于内网访问外网服务器的
但假如内网有服务要对外提供服务,我们需要在路由器上配置一个DNAT,内容为访问公网地址的8080端口,则帮我们转到计算机1,也就是192.168.1.10的八零端口。
则当访问数据包从WAN口进入后,路由器执行DNAT修改目标地址为192.168.1.10,修改目标端口为80。把数据包转发给了计算机1。
NAT基础深入到我们生活的方方面面,小到家庭网络达到庞大的运营商网络计算平台都通过NAT技术一层层的将我们的网络进行了分割。在IPV4地址严重匮乏的今天,我们的计算机网络仍旧能正常的运转,多亏了NAT技术的存在。