首页 > 代码库 > 信息在网络中的漫游(三)
信息在网络中的漫游(三)
这篇文章要介绍局域网,但是局域网有很多实现的方法,本篇采用目前最流行的以太网。
首先要明白的是什么是局域网?为什么要有局域网?逻辑上,我个人认为先有局域网,然后根据互联的需求再有的公共因特网。一个不太恰当的类比是:局域网就像现在的一个个国家,而公共因特网是联合国。联合国是个比较松散的组织,局域网可以选择加入,也可以选择不加入。但是局域网本身的出现,是因为有几台电脑(一般地理上比较接近,比如同一个公司、同一所大学等)想要相互连接在一起,以便相互通信,比如共享文件等。连接的方式有总线型、环型、星型等。以太网采用的是星型结构,即用一台交换机或集线器把各个端系统集结起来,然后由这台交换机或集线器伸出一个链路接入因特网。这是目前最流行的一种入网方式。
那么现在的问题是,当交换机(以下均以交换机为例,集线器事实上基本被交换机所取代)从路由器接收到一个分组后,它如何根据这个分组的目的IP识别每个具体的端系统呢?因为没有交换机之前,路由器每个接口都和一个端系统之间有一条独有的链路,而每个接口都是被转发表和一个IP绑定在一起的(见前一篇),这种情况下,根据IP定位一个特定的端系统还是相当简单的。
但是交换机或者局域网中的任意一台端系统怎样识别另一台端系统呢?更具体的说,这个子网(就是该局域网)的各个网卡之间是如何识别彼此的?这就要说到交换机的工作原理和MAC地址了。上一篇曾说过IP地址是全球唯一的,而MAC地址也是全球唯一的,但是IP的决定权在路由器手中,而MAC地址却是和网卡紧紧绑定在一起的。每块网卡在被制造出来的时候就会被分配一个全球唯一的MAC地址(也称为物理地址),MAC地址的长度是6个字节,共48个bit,通常用十六进制表示,如下:
88-B2-2F-34-1A-0F
如此说来,每个入网的端系统,具体的说,是接入公共因特网的网卡,都会有两个地址,一个是IP地址,另一个是MAC地址。一个不太恰当的比方是:IP地址是一个人的住址,但是这个值是会随着搬家而变动的;但是MAC地址是一个人的身份证号码,是不会随着搬家而变化的。两个地址的作用是不同的,IP的作用是将信息从源主机发送到目的主机,而这两个主机可能相隔十万八千里,中间要经过很多路由器;而MAC地址主要用于两个相邻节点(我们把网络中的每个主机称为节点,包括端系统和路由器)之间的通信。学术的说,IP是服务于端到端的,而MAC是服务于节点到节点的。那到底有啥不同?
这里不得不扯一下OSI七层模型,但是不会展开讲,只说有用的。这里先忽略运输层,假设一台主机向另一台发送信息,那么这个信息会先被送往该主机的TCP模块(我还不清楚具体名字是啥,但肯定有这么一个跟TCP相关的模块)封装成IP数据报,然后这个数据报会被送往该主机的网卡,并在那里继续封装,成为所谓的链路层帧。“封装”这个动作,其实就是在原信息的基础上添加一些首部字节,这些字节最重要的部分当然是源地址和目的地址,比如IP数据报的首部字节中就含有源主机IP和目的主机IP;MAC帧中含有源节点MAC和目的节点MAC。MAC帧发送出去后,第一个路由器接收到,会先拆分这个帧得到IP数据报,然后从中得到目的IP再放到相应的接口,在接口处再次封装成MAC帧发往下一个路由器。。。以此循环直到送往目的主机,再一层层剥落得到源信息。
所以,MAC地址才是最后真正用到的主机“物理”地址,相对的,IP地址还是有点“虚”的,比较抽象的。那么交换机是如何利用MAC地址来转发局域网中的信息呢?很简单,跟路由器类似,里面也有一张转发表,但是映射关系是MAC地址和接口,而不是IP和接口。那么接下来的发生的事情就都懂了(见上一篇文章)。这里要注意的是,交换机本身的实现细节不必太关心,只需要知道它有很多接口,分别连接路由器和各个端系统的接口。它自己没有IP,应该也没有MAC,或者说它的MAC对局域网中的各个网卡是不可见的,是透明的,也就是说,各个网卡都只把交换机当成一段普通的线路,它们的信息会沿着线路直接到达(不经过什么特殊设备)目的网卡。
在局域网内,一台主机要给另一台主机发送信息,但是源主机只知道目的主机的IP,但是不知道对应的MAC,这时ARP协议就闪亮登场了,它的作用就是把IP映射到对应的MAC上。所以,网卡在把IP数据报封装成MAC帧的时候,是一定要ARP帮助的。封装好的MAC被交换机截取,它检查帧的目的MAC地址,然后发到相应的接口就了事了。
但是ARP协议有个局限,就是它的映射表只有本子网(在本篇中就是本局域网)的IP,那么如果目的主机不在本子网呢?ARP是无法解析这个IP对应的MAC的,这种情况下,网卡封装IP数据报的时候,应该把目的MAC地址设置成路由器那块网卡的MAC地址,以便继续中转。这一过程是如何实现的呢?当ARP不知道一个IP对应的MAC时,它会使用MAC广播地址(即FF-FF-FF-FF-FF-FF)向局域网内所有主机询问,然后局域网内的所有网卡(包括路由器的那块)都会收到这个询问帧,并与自己的IP对比,如果不相符,则丢弃这个帧;但是,路由器却不会丢弃,因为它对比的不是自己的IP,而是路由转发表,当看到这个IP存在于表中时,就会把网卡的MAC地址返回给源主机,然后源主机就可以把路由器网卡的MAC作为目的地址。
那么现在整体描绘一下,信息是如何从源主机发送到它的网关路由器的:首先我们假设该主机已经通过某DNS服务器得到了目的主机的IP,然后利用ARP解析对应的MAC,如果MAC地址在本局域网,则由交换机直接转发而不必通过路由器;否则会把信息发送到路由器,由路由器继续转发直到目的地。
信息在网络中的漫游(三)