- 局域网
- 局域网就是若干台互相连接起来的机器,它们能够给彼此发送信息。最简单的情形就是用一根网线把两台电脑连接起来。当两台以上的机器要互相连接时,一般采用星型拓扑,即用一台交换机或集线器把各个机器连接起来。
与局域网相对应就是广域网,也称公网。在上面描述的局域网中,信息的流动只能限于这个网内的机器;若要跟其他的局域网中的机器通信,需要在两个局域网之间架设网络。广域网本质上干的是同一件事情,只不过范围有点大,它能够连接全世界的局域网。我们平时所说的上网,指的就是通过广域网访问其他局域网或被访问。
- 局域网与公网的对接
如果局域网内只有一台机器(显然此时还不能称为“网”),那直接用网线把它和路由器的一个端口相连就行了。但是一台以上的机器连成网时,就需要通过交换机来连接路由器,交换机有一个端口和路由器相连,其他的端口连接的是局域网内的机器。
和交换机直接相连的路由器被称为网关路由器,因为它是局域网和外界通信的关口。
- 局域网的IP
上篇文章中提到了IP的本质,它其实是由路由器决定的。路由器代表的是公网,所以IP是用来标识一个节点在公网中的位置。IP不关心某个节点的具体构成,节点可以是一台单独的电脑还可以是由若干台电脑组成的局域网。
局域网内每台机器的IP又是如何分配的呢?这里要分两种情况:一种是每台机器有自己的公网IP;另一种每台机器没有公网IP,它们只有内网IP,然后共享同一个公网IP。此时,这个公网IP也被称为网关。
由于在第一种情况下,局域网的每台机器可以代表公网的一个节点,故这个节点可以被替换成另一个局域网,即局域网中的子网,这个子网就是后一种情况。这种网中网的嵌套可以分为三种情况:第一种嵌套第一种;第一种嵌套第二种;第二种嵌套第二种。但是第二种不可以嵌套第一种。嵌套起来就很复杂了,但是基本原理是相通的。
对于前者,我感觉交换机的作用就是路由器的一个扩展端口:本来路由器把一个IP映射到一个MAC地址,然后把这个MAC地址映射到一个端口;而现在IP和MAC的映射没有改变,但是却把这些特定IP(它们属于同一局域网)对应的MAC只映射到一个端口,通过这个端口和交换机相连。接着由交换机来完成MAC和特定主机的匹配。这等于是说,路由器中那张MAC地址和端口的映射表转移到了交换机中。
需要牢记的是,交换机属于链路层设备,它只能读取MAC地址,不能识别IP地址。
对于后者,需要用到NAT技术,即网络地址转换。因为局域网内所有机器共享一个IP带来这样一个问题:交换机接收到路由器发来的分组之后,这些分组具有相同的目的IP,交换机如何来确定这个分组到底要传给哪台机器呢?
- NAT技术
NAT技术的使命是完成内网IP和外网IP之间的转换,外网IP指的就是网关IP。它实现的核心其实是类似于路由器转发表的NAT转换表。
局域网的核心是交换机,它只能识别MAC地址。但集成了NAT功能的交换机就不仅仅是普通的交换机了,比如家用的路由器,它包括至少三个功能:交换机,DHCP服务器,NAT。家用路由器不仅要完成交换机的功能,还要负责内网IP的分配,另外NAT功能也是必不可少的。所以,在这个设备上我们可以看到网络设备日渐模糊的界限,到底是谁集成了谁?
所以,在第二种局域网中,处于核心的“多功能交换机”,首先要给内网的机器分配内网IP,这需要用到DHCP功能。
现在,若有台机器得到的IP是192.168.122.105,它要跟外界通信,目的IP是123.25.36.10。该分组经过“交换机”时,源主机IP会被替换成网关IP108.122.31.25,并且会在NAT转换表中留下一条记录:
| ——-源 ——— | —–目的—- |
|192.168.122.105 | 123.25.36.10 |
然后,当“交换机”接收到一个分组时,会识别其源主机IP,若它匹配123.25.36.10,那么就发给内网IP为192.168.122.105 的机器。
我们应该知道,网络通信基本都是一问一答,问和答所使用的分组,其源主机IP与目的地IP正好是相反的。
上面这个过程用到了NAT功能,显然这个模块可以识别IP且修改它。这不是普通交换机可以完成的任务。
- ARP协议
前面说过路由器有一张表可以把IP映射到MAC上。这个映射实际上是通过ARP协议完成的。
很多书上都说ARP协议仅限于局域网内使用,我个人觉得不是这样的。前面说过,路由器内部也有ARP协议,但是路由器不属于局域网,它是公网上的一个节点。我的理解是:如果一台设备支持ARP协议,那么ARP只能解析与该设备直接相连的那些机器的IP;如果一个IP不能被解析,那么相应的分组会被发给该设备的上级路由器或网关路由器。
在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表(维基百科)
我认为ARP协议的核心就是是这张表,存放IP和MAC地址的映射。ARP协议的工作包含两部分,一是动态生成这张表;二是根据表的内容完成对IP的解析,得出MAC地址。
比如,局域网中的主机A向B发送消息,当消息从IP数据报封装成MAC帧前,会从A的表中查找B的IP对应的MAC地址,然后把这个地址封装到MAC帧中再发送出去。这里需要了解的是,这个MAC帧将会被所有局域网中的机器接收,类似于“广播”,所有机器都会检查这个帧中的MAC地址,如果和自己的MAC地址一致,将继续解封;否则,直接丢弃这个帧。
如果A的表中没有与B的IP对应的MAC地址,那么A就向局域网中的所有主机发送一条ARP请求,这个请求包含B的IP地址,且MAC地址是FF-FF-FF-FF-FF-FF,于是所有与交换机相连接的主机(包括路由器)都会收到这个请求,但是只有B会回应,因为只有B的IP与请求中的IP一致。这样,A就可以更新自己的表,填入B的IP与MAC的对应。
但是,如果请求的IP不在这个局域网中,那么路由器会对请求做出回应,将自己的MAC地址发给A,当然是那个与该局域网相连的接口的MAC,因为一台路由可能同时连接了好几个局域网。
但是这里有个问题:路由器如何知道请求的IP在不在这个局域网?呃,好吧,纠结了半天终于想通了;路由器会查询自己的转发表,最后它肯定能知道有哪些IP是和这个接口绑定在一起的。当路由器接收到一个ARP请求后,读取它的请求IP:
- 如果这个IP是内网专用的IP,比如192.168.X.X,那它就直接丢弃不会应,因为显然这个IP肯定是局域网内某台机器的;
- 如果这个请求IP是公网IP,它会对比转发表,若请求IP和这个接口是绑定的,那意味着请求IP必然是局域网中某台机器的,丢弃;
- 那么就剩最后一种情况:请求的IP是公网IP且没有和这个路由器接口绑定,那意味着这个IP是外界的,只有此时路由器才会回应ARP请求,返回这个接口的MAC。
当主机A知道了路由器的MAC地址后,剩下的事情就简单了:更新自己的缓存表;将MAC帧发送给路由器;路由器提取目的IP,利用ARP找到对应的MAC地址,再发送到相应的接口,完事。
- 从上面的描述中我们可以看到,局域网中的机器互相通信时,信息是不经过路由器的,只需要经过交换机,无论这些机器具有公网IP还是内务IP,这会大大提升通信的效率。我想,这就是局域网的好处吧。
- 局域网就是若干台互相连接起来的机器,它们能够给彼此发送信息。最简单的情形就是用一根网线把两台电脑连接起来。当两台以上的机器要互相连接时,一般采用星型拓扑,即用一台交换机或集线器把各个机器连接起来。
完。