首页 > 代码库 > 路由器WAN口和LAN口详解

路由器WAN口和LAN口详解

前一阵子做路由器的联网,由于利用了Openwrt操作系统,做起来虽然方便,但是很多原理细节都被忽略了。所以这里再来老生常谈一下wan口和lan口的区别,以及他们之间的工作原理。

首先百度一下,基本知识:

熟悉网络的朋友都知道WAN是英文Wide Area Network的首字母所写,即代表广域网;而LAN则是Local Area Network的所写,即本地(或叫局域网)。那么我们不妨给路由器上的WAN口和LAN口取一个中文名称,分别是广域网端口和本地网端口。从名称中不难发现,WAN口主要用来连接外部网络,如ADSL、LAN、光纤等各种接进线路;而LAN口用来连接内部网络,主要与局域网中的交换机、集线器或PC相连。在家里使用时,路由器WAN口使用的IP地址为网络运营商所提供的静态或动态公网IP地址,而LAN口所使用的IP地址则是局域网中分配的内网IP地址。因此,每一个路由器都会拥用一个私有IP地址,这样既可让路由器充当局域网中的网关,也便于网管对路由器进行治理。宽带路由器的路由功能就体现在wan口IP地址和lan口IP地址之间的数据路由上,通常我们根据网络运营商所提供的接入方式来设置WAN口的网络参数,通常有静态IP地址、动态IP地址或PPPOE等方式,它与网络运营商的接入设备处于同一个外网。而将LAN口的IP地址则设置为本地局域网内的IP地址,通常是我们自己可以在宽带路由器上自行设定的IP地址,LAN口下所连接的计算机组成一个“本地网”,路由器的LAN口IP地址是这个网络的网关。

再详细说说数据在同一个路由器上wan口和lan口数据是如何走的。其实这个过程就是NAT的一个过程。NAT技术的出发点事为了解决IPv4地址不足的问题,提高现有IPv4地址利用率,但他们的实现机制不一样。VLSM和CIDR也是这个目的,他们是通过调整子网掩码长度。而NAT技术通过允许组织内部网络使用非全局可路由IP地址的用通过地址转换为全局可路由的IP地址来访问Internet,以降低对公网IP地址的需求。

NAT就运行在位于内外网之间的路由设备上,在内外网用户之间通信时对数据包中的地址进行转换。

主要用于三种情形:(1)无足够的公网IP地址可用时(2)重构网络IP地址部署(3)实现简单的TCP负载均衡。

我们这里用家庭网络来做举例,家庭内部网络的机器都是接lan口,通过lan口向外部网络发送数据包,首先发送一个请求到默认网关,其实就是cpu上的lan口,这里我们这么理解,一般的路由器上的网关就是指cpu上的lan口,它一般通过交换芯片扩展出4个lan口,这些lan口就是平时使用的那几个lan口。路由器在分析下面发送来的数据包后,检查数据包中的内网IP地址时会检查设备本身的NAT地址转换表。在找到相应条目后,把源地址也就是本来的内网IP地址换成wan口的IP地址,目的地址不变,发送到外网上去。外部网络接受到数据包后,会解析出数据包中的路由器wan口IP地址,将响应数据包返回到这个wan口IP地址,发送回路由器。路由器将这个返回数据包中目的地址(wan口IP)NAT转换为内网IP,最终共完成整个数据包的发送和接受。

这里其实有一个问题要深入一下,这么多lan口,你怎么区别返回数据时NAT该怎么转换?

另外路由器是怎么给这些lan口自动分配内网IP地址的?

先来回答第一个问题:

当一台小型商务企业的内部网计算机用户连接到 Internet 资源时,该用户的 TCP/IP 协议产生一个 IP 数据包,该数据包包含以下值,这些值位于 IP 和 TCP 或 UDP 标头中:(粗体内容表示受 NAT 影响的项目):
  
  • 目标 IP 地址:Internet 资源 IP 地址
  • 源 IP 地址:私有 IP 地址
  • 目标端口:Internet 资源 TCP 或 UDP 端口
  • 源端口: 源应用程序 TCP 或 UDP 端口
  
  请求源主机或者其它路由器将此 IP 数据包发送给 NAT, 然后由 NAT 将向外发送的数据包的地址解析如下:
  
  • 目标IP地址:Internet 资源 IP 地址
  • 源IP 地址:ISP 分配的公用地址
  • 目标端口:Internet 资源 TCP 或 UDP 端口
  • 源端口:重新映射的源应用程序TCP 或 UDP 端口
  
  NAT 将重新映射的 IP 数据包发送到 Internet 。响应计算机将向 NAT 返回一个响应。当 NAT 接收到此响应时,该数据包将包含以下地址信息:
  
  • 目标IP 地址:ISP 分配的公用地址
  • 源IP地址:Internet 资源 IP 地址
  • 目标端口:重新映射的源应用程序 TCP 或 UDP 端口
  • 源端口:Internet 资源的 TCP 或者 UDP 端口
  
  当 NAT 完成映射和解析地址后,将向 Internet 客户端发送数据包,此数据包包含以下地址信息:
  
  • 目标 IP 地址:私有 IP 地址
  • 源 IP 地址:Internet 资源 IP 地址
  • 目标端口:源应用程序TCP 或者 UDP 端口
  • 源端口:Internet 资源 TCP 或 UDP 端口

看完这段,我的理解是根据NAT表和端口号来对不同的lan和不同的服务做区别的。NAT表应该是临时创建的,哪个lan口发出请求,NAT表就增加一项,记录私有(内网)IP,不同的服务使用端口号的映射来做区别。

那么第二个问题就要涉及DHCP了。我们再来了解下这个应用层服务。基础知识可以先百度。

DHCP是一个基于广播的协议,它的操作可以归结为四个阶段,这些阶段是IP租用请求、IP租用提供、IP租用选择、IP租用确认。

 

从这4个名词中我们就知道DHCP的基本工作原理了,首先lan广播找到DCHP服务器,那么lan广播的这一段就是DHCP客户端。接着可能有很多DHCP服务器返回了OFFER报文进行IP地址预分配,然后DHCP客户端选择(一般是第一个收到的offer)进行确认REQUEST,DHCP服务器收到确认后,带着预先准备好的ip发送ACK报文,完成整个过程。那么这里的服务器就是我们的网关咯,也就是CPU,它是装过dhcp服务的openwrt系统,但是openwrt系统的dhcp和linux不一样,完了再慢慢研究吧。不过我想原理是差不多的。