一、 网络互连与因特网
在通信中经常提到互联的概念,其实包含两层含义:第一种是将两台计算机、客户端或服务器连接起来使之能够通信,只要这两台设备使用相同的通信协议,在同一个网络中就能实现要求;第二种是将多个异构通信网络连接起来,彼此之间能够互联互通,接入不同网络中的终端就能互通消息,这就组成了网络的网络------Internet。
那么我们为什么要把多个异构通信网络连接起来呢?
- 各个国家的通信网是逐步建立起来的,那么建设的时候所采用的技术也不尽相同,这就导致了多种不兼容的网络将长期共存。
- 另外,由于地域限制,单一的网络往往不能满足用户的通信需求,即一个网络无法覆盖所有用户。
- 当一个网络的规模超出一定的范围,节点中的数量会非常庞大,超过了网络负载能力,会造成通信性能急剧下降,比如吞吐量下降、丢包率增大等。
- 可靠性考虑
那么如何实现互联呢?直接将异构网络进行简单的物理连接是无法传输信息的。因为不同网络的寻址方案、信息封装格式、网络接入机制、差错分析方法、提供的服务质量、软硬件的设置等不尽相同。因此,我们需要在不同的网络层次进行互联,需要使用到不同的中间设备(网络互联设备)。
异构网络的互联,最著名的例子就是因特网。因特网的前身是阿帕网(ARPANET),起源于美国军方项目。为了保证战争中的网络部分节点收到损毁,其他部分还能正常进行通信联系。在大规模民用后迅速发展,取得了成功。现在普通用户只需要一台个人终端设备,都能和因特网进行连接。因特网具有很多优点:
- 开放的网络
- 信息量大,资源丰富
- 不受时间空间限制
- 接入方便快速,操作简单
因特网迅速发展壮大的原因是使用了TCP/IP协议族,通过TCP/IP实现的网络互连隐藏了网络的细节(包括底层网络技术、拓扑结构等)。通过在网络层使用统一的IP协议,隐藏了异构网络底层通信技术、拓扑结构的差异性。对于世界各地的用户而言,不需要了解自己和通信对方所在的是具体哪个物理网络,采用了什么样的数据链路层或物理层编码方式等。提供通用的一致性的网络服务,因特网在逻辑上是一个统一的、整体的虚拟网络,用户可将其看作是一个单一的网络。
从网络分层的角度,TCP/IP可以分为五层(TCP/IP体系参考模型 ):
基于TCP/IP架构的异构网络互联主要是依靠在网络层使用了统一的IP协议 来完成的,也就是说,连入因特网的终端不管底层采用的通信技术和物理环境如何,在网络层来看都好像在一个同一个规模巨大的逻辑网络 之中。网络层的一个主要功能就是实现不同主机之间的逻辑传输, 也就是说,在网络层中,每个主机都有一个唯一标识的地址------IP地址(32位地址格式),其中IP地址的分贝实在统一的管理下进行的(NIC)。由此,IP地址在网络层上屏蔽了异构网络之间硬件地址等特性的差异,利于网间通信的实现。
二、 网络分层与地址转换协议
通信网络分层的主要目的是将一个复杂的网络模型分成独立而又互相影响的若干模块,各层完成各自规定的功能,向上一层提供本层实现的通信服务,而不涉及到具体实现的技术细节,同时享受下一层提供给本层的通信服务,而无需了解下一层实现该服务的具体方法。各层通过接口传递相关参数和用户数据。
对于TCP/IP的五层架构而言,每层实现的主要的通信功能和通信范围都是不一样的。
不同节点的相同层实现的功能是相同的,每一层都有各自的通信范围,都要实现一定的通信目标。所以实际上,除了物理层之外,其他各层都有着通信含义的数据单元,都要进行寻址,实现数据单元的正确传输和接收。
- 数据链路层:物理地址,硬件地址,MAC地址
- 网络层:IP地址(自动分配或手动设置,可以变化)
- 传输层:端口号(TCP)或插口(UDP)
- 主机名-更加贴近用户侧使用
用户数据在网络中传输,在不同层用到的地址都是不同的,因此实现地址转换时非常必要的。我们常见的地址转换有两大类:
- IP地址与主机名的转换
- 小型网络:HOSTS文件记录主机名与IP地址的对应
- 大型网络:在域名系统(DNS)的名字服务器中存放映射表
- IP地址与主机物理地址的转换
- 根据IP地址获得物理地址:地址解析协议(ARP)
- 根据物理地址获得IP地址:逆向地址解析协议(PARP)
相对而言,我们常用到的是地址解析协议ARP:
下面,我们举个例子来说明ARP的具体过程:现在X是一个新加入网络的主机,它想知道IP地址位192.1.0.2的PA是多少,然后就进行广播,发送给主机Y、A、B这个请求,并告诉他们自己的IP地址和PA地址;这时候,主机A、B收到请求之后,将X的IP地址和PA地址进行缓存,发现自己并不是主机X想要的,不作回复。
而主机Y收到请求之后,将X的IP地址和PA地址进行缓存,发现自己是X所请求的,进行应答。
三、 IP地址
我们知道互联网核心技术包括数据格式、转发策略、路由控制,其中数据格式网络层最重要的就是IP地址。那么为什么要使用IP地址以及IP地址如何进行控制和管理呢?
IP地址的概念
通过TCP/IP实现的网络互连隐藏了网络细节(包括底层网络技术、拓扑结构等),提供通用的一致性的网络服务,因特网在逻辑上是一个统一的、整体的虚拟网络,用户可将其看作是一个单一的网络。
在TCP/IP体系结构中,为了实现不同网络的网际互连是通过IP协议完成的。 在互联网中有两套地址系统,一个是IP地址,另一个是MAC地址。IP地址完成的是不同网络的网际互连,为了解决互连网络中的寻址问题,IP协议定义了在全网唯一通用的32位地址格式------IP地址(IPv4)。这样的IP地址,实在统一的管理下(NIC)进行分配的。IP地址在网络层屏蔽了异种网络之间物理地址等特性的差异,利于网间通信的实现。
IP地址的表示和分类
点分十进制表示法
- 采用4个小数点分开的十进制整数,每个整数对应地址中的一个字节。如192.2.3.4
为了便于管理,我们采用了一种分类方式:
主要看A、B、C这三类:在A类中,网络号只有7个bit,主机号占24bit,从理论上可拥有2^24个IP地址(但是全零全一以及一些特定的管理IP地址不可以使用);以此类推,B类从理论上可拥有2^16个IP地址;C类从理论上可拥有2^8个IP地址。
子网和子网掩码
子网掩码是用来区分子网号和主机号的。看下图,设下面这个掩码是由一串"1"和一串"0"单独组成的,"1"对应于网络号和子网络号字段,"0"对应于主机号字段。
如果我们不进行子网划分,则其子网掩码即为默认值,此时子网掩码"1"的长度就是网络号的长度。子网掩码的表示方法很多,如:255.255.0.0,0xFFFF0000,187.5.0.0/16(16指的是1的个数)。子网掩码的功能有很多,如:能快速计算地址中的网络前缀在无类型的地址中获取网络前缀。
四、 路由器的基本结构和工作流程
路由器实在网络层实现了异构网络间互联互通的设备。它具有多个网络接口,分别接入不同网络,每个接口分配一个IP地址。IP从接口到达路由器,经过处理后,从接口B转发出去,就实现了从网络1到网络2的传输。
路由器最主要的功能就是根据本地路由表,确定某个IP包传输的 "最佳路径",并将其从对应的接口转发出去。根据不同的衡量标准,会得到不同的最佳结果,如最短或费用最低的通路。网络环境随时都在发生变化,为了本地路由表的可靠性,路由器会与其他路由器进行信息交换(各网络的位置、可达性等)。这些信息交换也是路由协议的一部分。
提到路由器,我们经常听到**"跳(HOP)"或 "下一跳(NEXT-HOP)"路由器** 的说法。在源主机到目的主机的路由上,每经过一个路由器被称为一跳,因此,对于某路由器相邻接的下游路由器成为其下一跳路由器 。由此,我们经常说IP包在因特网中是HOP-BY-HOP逐跳转发的,而在一个路由器中,IP分组被转发到哪里决定于:
- 该路由器的路由表的北荣
- 分组的目的地址
下面我们看一下路由器的基本工作过程,假设网络1中的主机A要通过路由器R向网络2中的主机B传送信息,可以看到,主机A、B终端上都采用了五层通信协议,路由器R用到了底下三层的通信协议。
用户A通过键盘或者其他将数据输入到终端,处理后形成数据单元,通过接口由应用层传输到传输层。
传输层根据UDP或TCP协议将上层数据进行封装,首部写入本地的传输层插口或端口号作为源地址,将通信对端B传输层对应进程的编号作为目的地址,形成了传输层报文之后,交织向下传输给网络层。
网络层将传输层报文封装成IP包,在IP包的首部中,将A的IP地址写入源IP地址字段,将B的IP地址写入目的IP地址字段。然后将封装好的IP包传送给数据链路层。
IP包被放入数据帧中,在前面加上了数据帧的首部,其中源地址是A的物理地址,目的地址填入路由器R与网络A连接的接口的物理地址,接下来物理层实现了 "0" "1"比特流的透明传输。
当R接收到这串比特流之后,经过译码将其恢复成数据帧,交付给数据链路层,数据链路层查看这个数据帧的首部,发现目的地址是自己的物理地址,确定这个数据帧是发给自己的,就将其中的数据精核部分发送给上一层。
根据前面数据封装的过程就已经可以知道,这些数据精核就是IP包,网络层检查IP包的首部,发现目的地址在网络2中,就去查看本地路由表,由此得知应该将IP包从R与网络2相连的端口发送出去。
于是这个IP数据包被交付为网络2使用的数据链路层协议,重新进行了封装。此时,这个数据帧的首部,源地址写的是R与网络2相连接口的物理地址,目的地址写的是主机B的物理地址。要注意,由于A和B在不同的网络中,采用不同的底层协议,因此无法知道对方的物理地址;而对于在同一个局域网中的节点来说,可以根据ARP协议获得其他节点的物理地址。
然后经过物理层的比特流传输,该消息进入了网络2,主机B收到这串比特流,经过译码后,得到数据链路层的数据帧,发现首部的目的地址写的是自己的物理地址,就将数据部分提取出来交给网络层。
网络层检查IP包首部的目的地址,就是B的IP地址,确定这个IP包就是发给自己的,进一步将IP包中的数据部分提交给传输层。
此时传输层收到这个报文,根据首部中填写的传输层目的地址,确定对应的进程,将报文中的数据提取出来交付给进程。
然后用户A发送的数据经过应用层和软件界面展示到了用户B的面前。
我们可以发现,IP自从发现之后,首部的目的IP地址和源IP地址是不变的,但是在数据链路层的数据帧在每次转发之后首部的IP地址都会改变。这就可以解释,IP是如何屏蔽底层通信技术间的差异性,实现了用户信息在异构网络中的传输。