NAT ------ 内网的主机如何通过路由器与外网的主机通信

内网主机A,路由器B,外网主机C

使用了两个协议:

路由:位于网络层,为数据包提供一个寻径的算法,不改变数据包的源IP和目的IP,但是会修改源MAC和目的MAC,只在同个网段的进行数据的转发

NAT:为私有地址能访问互联网提供的一种解决方案。一个私有地址的计算机想与外界进行通信,通过NAT的端口映射,随机分配一个未使用的端口号,在路由器的路由表中形成一一对应关系 ,即 内网IP+端口号 转换为 公网IP+端口号。路由器收到公网数据包后,根据端口号,进行比对路由表,看是哪个内网主机发送的数据包,将数据包回发给相应的内网IP。NAT规定:数据包从内网到外网,会自动建立端口映射;数据包从外网到内网,只会查询收到的数据包的端口有没有映射到内网,而不会自动建立端口映射。

过程

A发送数据给C:

  A首先发送数据给路由器,数据包的源IP是A的,源端口号是A的,源MAC是A的,目的IP是C的,目的端口号是C的,目的MAC是B的LAN的;

  B收到数据后生产一个唯一的端口号(如果A的端口号在路由表中是唯一的就用A的)与A的端口号一一对应,并把它和A的IP、端口号、MAC存入路由表中,B发送数据给C(假设B和C之前没有其他路由器),数据包的源IP是B的WAN的,源端口是B生成的和A的端口号一一对应的端口号,源MAC是B的WAN的,目的IP是C的,目的端口号是C的,目的MAC是C的。

说明:跨网段通信中,目的MAC始终是下一跳的MAC,源MAC始终是发送者的MAC(同样也是转发一次,改变一次);目的IP和端口号时钟是终端的,不会改变

C发送数据给A反向同理。

二层交换机:交换机工作主要依靠MAC表(MAC和以太网端口映射表),交换机会记录每个端口连接的主机的MAC。当交换机收到主机的数据包,提取目的MAC地址,查看目的MAC地址的主机连接哪个端口,然后往那个端口发送数据。交换机不会改变数据包的任何信息,包括MAC。

无线路由器:目前的无线路由器同时扮演有线网络中交换机与路由器的角色。传统有线网络中的交换机与路由器一般是分离的,客户端要传输数据时,若在同一子网在交换机上传输无须经过路由器,若跨子网传输数据时就要通过交换机与路由器了。无线路由器能接收发送给子网的数据包,也能接收发往外网的数据包。当接收到子网的数据包,无线路由器只起到交换机的作用;当接收到发往外网的数据包,通过NAT协议发送出去。

上一篇:Nginx 针对建立TCP连接优化


下一篇:内网DMZ外网之间的访问规则