前一阵子作路由器的联网,因为利用了Openwrt操做系统,作起来虽然方便,可是不少原理细节都被忽略了。因此这里再来老生常谈一下wan口和lan口的区别,以及他们之间的工做原理。html
首先百度一下,基本知识:linux
熟悉网络的朋友都知道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负载均衡。ide
咱们这里用家庭网络来作举例,家庭内部网络的机器都是接lan口,经过lan口向外部网络发送数据包,首先发送一个请求到默认网关,其实就是cpu上的lan口,这里咱们这么理解,通常的路由器上的网关就是指cpu上的lan口,它通常经过交换芯片扩展出4个lan口,这些lan口就是平时使用的那几个lan口。路由器在分析下面发送来的数据包后,检查数据包中的内网IP地址时会检查设备自己的NAT地址转换表。在找到相应条目后,把源地址也就是原本的内网IP地址换成wan口的IP地址,目的地址不变,发送到外网上去。外部网络接受到数据包后,会解析出数据包中的路由器wan口IP地址,将响应数据包返回到这个wan口IP地址,发送回路由器。路由器将这个返回数据包中目的地址(wan口IP)NAT转换为内网IP,最终共完成整个数据包的发送和接受。spa
这里其实有一个问题要深刻一下,这么多lan口,你怎么区别返回数据时NAT该怎么转换?操作系统
另外路由器是怎么给这些lan口自动分配内网IP地址的?htm
先来回答第一个问题:blog
当一台小型商务企业的内部网计算机用户链接到 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不同,完了再慢慢研究吧。不过我想原理是差很少的。