早先的路由器是奢侈品,大学宿舍里的几个人想要联机玩《魔兽争霸》需要自己组网。
第一层(物理层)
物理层怎么互通呢?靠网线,网线有两种,一种是电脑连电脑,一种是电脑连网口。
我们用电脑连电脑的网线。一根网线,两个头,一头插在一台电脑的网卡上,一头插在另一台电脑的网卡上。仅仅这样还是通不了的,水晶头要做交叉线,就是1-3、2-6交叉接法。
水晶头的1、2和3、6脚,分别起着收、发信号的作用。将一端的1号和3号线、2号和6号线互换一下位置,就能在物理层实现一端发送的信号,另一端能收到。
除了物理层互通,还要配置两台电脑的IP、子网掩码和网关,才能实现两台电脑的互通。
到此,两台电脑就已经构成了一个最小的局域网,即LAN,可以玩联机游戏了!
如果第三个人想要加入进来呢?早先的交换机也是很贵。有一个东西叫做Hub,就是集线器。这个设备可以将多台电脑连接起来。
集线器工作在物理层,它将自己收到的每一个字节,都复制到其他端口去。
第二层(数据链路层)
Hub采取广播的模式,一台电脑发出的包,其他每台电脑都能收到,就会产生几个问题:
1. 这个包是发给谁的?谁该接收?
2. 大家都发,会不会产生混乱?有没有谁先谁后的规则?
3. 如果发送的时候出现了错误,怎么办?
这几个问题都是二层,数据链路层即MAC层要解决的问题。
MAC的全称是Medium Access Control,即媒体访问控制。控制往媒体发数据的时候,谁先发、谁后发的问题,防止混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。解决这个问题有多种方法,跟车管所约束马路上跑的车一样:
- 分多个车道,每个车一个车道,在计算机里叫信道划分;
- 单双号限行,轮着来,计算机里叫轮流协议;
- 有事先出门,发现堵就回去。错过高峰再出去。这叫随机接入协议。以太网就是用这种方式。
第二个问题解决了,就是解决了媒体接入访问控制的问题。
回到第一个问题:发给谁,谁接收?这里用到链路层地址,因为第二层主要解决媒体接入控制的问题,所以也叫MAC地址。
这就涉及到第二层的网络包格式。
对于以太网,第二层网络包的开始是目标MAC地址和源MAC地址。然后是类型,大部分类型是IP数据包。
有了MAC地址,数据包在网络上广播,目标机器才能发现这个包是给它的。
以太网的二层包的最后是CRC,循环冗余检测。通过异或算法,计算这个包在传输的过程中是否出现错误,解决的是第三个问题。
还有一个问题没有解决,当源机器知道目标机器的地址的时候,可以将目标机器的地址放入包里,但如果不知道呢?
一个广播网络里有多台机器,我如何知道每台机器的MAC地址呢?这就是ARP协议的作用,就是已知IP地址,求MAC地址。
在一个局域网里,知道了IP地址,不知道MAC怎么办?靠“吼”。
发送一个广播包,谁是目的IP谁来回答。具体的查询和应答报文像下面这样:
为了避免每次都用ARP,机器本地也会进行ARP缓存。当然机器不断上线下线,所以ARP的MAC缓存也有一个有效期。
局域网
至此,宿舍的几台电脑就组成了一个局域网,用Hub连起来就可以玩局域网版的《魔兽争霸》了。
这种方法对于一个宿舍没问题,但是一旦机器数量增多,就会有新问题。因为Hub是广播的,不管别的网口需不需要都会收到所有包。
包一多,发生冲突的概率就会提高。我们需要更智能的设备。一般每个网口只连一台电脑,这台电脑的IP和MAC都是固定的,只要记住这台机器的MAC地址,如果目标MAC不是它,就不向它转发了。
这就是交换机,它检查包的MAC头,然后根据策略转发。
交互机怎么知道每个口的电脑MAC地址呢?需要交换机会学习。
电脑MAC1将一个包发给另一台电脑MAC2,这个包到达交换机时,一开始交换机也不知道电脑MAC2在哪个口,所以只能转发给每个口。但是交换机会记住MAC1来自一个明确的口,以后只要目标是MAC1,直接发到这个口。
过一段时间之后,交换机就有了整个网络的结构了,这就是转发表。但机器IP是会变的,所以这个转发表有一个过期时间。
有了交换机,你接几十台、上百台机器打游戏,就都没什么问题。
小结
-
MAC是用来解决多路访问的堵车问题的;
-
ARP是通过广播的方式寻找目标MAC地址的,会将结果缓存下来;
-
交互机有MAC地址学习能力,学完就不需要广播了。
两个思考题:
1. 我们讲了二层的ARP协议,即已知IP地址求MAC;还有一种协议叫RARP,即已知MAC求IP,你知道它可以用来干什么吗?
2. 如果一个局域网里有多个交换机,ARP广播的模式会出现什么问题?