本书是面向本、专科及高职“计算机网络”课程的教科书。全书共分为9章。第1章是绪论,介绍了数据通信的一些基础知识、Internet的历史、网络参考模型等内容。第2章到第4章介绍了各类常见的物理网络,以及通过它们上网的方式。第5章介绍了IP协议。第6章介绍了一些新型的交换技术。第7章介绍了广域网和城域网。第8章介绍了TCP协议。第9章综合介绍了一个组网实例。
本书深入浅出、简明易懂、内容丰富全面、实用性强,可作为高等学校计算机、电子、通信等专业的教材,也可供想系统学习计算机网络知识的人员参考。
《计算机网络技术》是作者多年教学教学成果以及科研、组网实践的结晶,书中介绍的很多组网技术与方法对全面认识理解当代计算机网络组建技术原理方法以及实际组网有很大的帮助。希望《计算机网络技术》可以成为大专院校计算机专业师生以及计算机组网爱好者案头工具书。
本书是编者多年从事计算机网络教学和工程实践的心血结晶。相比传统教科书,本书有以下特点:
① 建立了新的网络参考模型。网络参考模型对于计算机网络理论教学有着基础性的指导作用,如果网络参考模型是错的,那么整个计算机网络的理论基础就“崩塌”了。有些人采用的参考模型基于ISO的OSI参考模型,只是简化掉了表示层和会话层,变为五层。OSI参考模型和简化版的五层参考模型的问题是将虚拟网络和物理网络混为一谈,从概念上来说有问题。有问题的参考模型会给学生造成极大的混乱。本书建立了一个新的六层参考模型,严格地将虚拟网络和物理网络区分开了。这个模型能让学生理清思路,把握计算机网络的本质。
② 基于六层参考模型的理念,按照先物理网络再虚拟网络的顺序编排章节内容。这种编排方式更容易让学生了解物理网络和虚拟网络之间的关系,而且更加突出了TCP/IP协议的地位。作为计算机网络的一部分,讨论物理网络是非常有必要的。但过多地讨论物理网络是不实际的,因为物理网络方面的内容涉及多门基础课程。有限的篇幅,更多地应该用在讨论TCP/IP协议。将物理网络作为一个整体而不是分为几层来讨论,除了可以压缩篇幅,也更容易让学生从整体上把握物理网络。
③ 理论为先,理论要讲全讲透。编者坚持“写给别人的东西,自己首先要搞懂”的原则,在讲述协议之前,务必将相关的基础理论知识讲全讲透,使读者明白。理论上的东西搞清楚了,再了解细节就不是什么难事了。
④ 理论讲解力求简明易懂,生动活泼。计算机网络课程本身很少涉及非常抽象的理论,完全可以通过和现实世界的类比,生动形象地讲解开来。
⑤ 细节方面的讨论点到为止。理论讲解之后就是实现细节的讨论,过多地讨论细节是徒劳无益的。毕业后从事实际工作时,相关的协议就摆在手边,没必要让学生死记硬背过多的细节。
⑥ 大量引入工程理论,这是本书一大亮点。虽说理论指导实践,但纯理论的东西未必能直接指导实践。比如知道了路由器的工作原理并不代表就会配置路由器。在纯理论和实践之间是工程理论,能直接指导实践的是工程理论。路由器配置课程是计算机网络课程的后续专业课程,编者在教学实践当中发现学生在计算机网络课程学到的理论知识对配置路由器没有多大指导作用,这是因为传统计算机网络课程不会讲解这方面的工程理论知识。针对这个问题,本书增加了大量工程方面的理论知识,以加强理论的指导作用。Internet基本上不涉及很抽象的理论。纯理论讲解并不需要多大篇幅,与其为了理论而理论,不如节省篇幅用于讲解工程理论。
⑦ 理论紧密结合实际,以工程为导向,采用“纯理论+工程理论+工程实例”的模式,这是本书的特色。理论结合实际不但可以帮助学生学以致用,反过来也加深了学生对理论的理解,能起到事半功倍的效果。
⑧ 与时俱进,推陈出新。大部分早被淘汰的技术本书不再论述,比如有线城域网传输技术,只保留了万兆以太网。但本书没有一刀切,比如ATM虽已被淘汰,但它的一些思想并未被淘汰,所以仍然有所论述。特别是对于网络安全,本书也有所论述。当然考虑篇幅的问题,仅起抛砖引玉的作用,目的是引导学生关注网络安全问题。
编者还精心设计了一系列实验教案,作为本书配套电子资源挂在化学工业出版社官网上供师生下载。
本书内容较多,教师可以依据课时限制裁剪讲课内容。比如对通信类专业的学生,大都预先学习了数据通信方面的一些基础知识,就不必重复讲解这些知识了。有些小节的内容比较难懂,特意用星号标明。如果学生接受困难,只做原理性的论述即可。
本书参考了大量文献以及众多RFC、IEEE、ITU等标准或协议,在此对相关作者表示诚挚的谢意。
由于编者时间和水平有限,书中难免会有疏漏,欢迎读者指正。有问题或建议请发邮件到jsjnetwork@qq.com。
刘文林
2016年8月31日
南昌航空大学网络中心
第5章 IP协议
前面的几个章节介绍了各种物理网络,以及通过这些物理网络上网的方式,目的是让大家熟悉各类物理网络,现在到了介绍IP协议(RFC 791)的时候了。IP协议是实现不同物理网络互联互通的关键。所谓互联互通就是允许跨越不同的物理网络传输数据。任何物理网络基本的功能都是传输数据,但是各种物理网络传输数据的方式相差很大,某种物理网络的传输的数据无法直接进入另一种物理网络内传输。在Internet上,通信方之间可能跨越多种不同的物理网络,不解决互联互通的问题,Internet也就无从谈起。
5.1 实现互联互通的关键因素
5.1.1 统一数据包的格式
物理网络把数据封装在帧内,通过帧来传输数据。由于各种物理网络帧的格式不一样,所以一种物理网络的帧无法在另一种物理网络内传输。那么,是否可以统一帧的格式呢?理论上可以,但是这么做意味着要统一物理网络,并不是一个好主意。IP协议不是在物理网络的层面上统一数据包的格式,而是在虚拟网络的层面上统一数据包的格式。
IP协议对物理网络的要求很简单:物理网络可以用某种方式将IP分组封装在帧内,借助物理网络本身传输帧的机制传输IP分组。这个要求任何物理网络都可以满足。可以将IP分组作为帧的数据部分封装在帧内传输,这么做等于将物理网络当作运载IP分组的运输工具。IP协议不是统一运输工具(类比物理网络),而是统一货物(类比数据)打包的标准。类似的例子在现实生活中可以看到,集装箱就是个例子:货物用标准集装箱打包,可以很方便地用集装箱货船或者集装箱货车运输。这样做的好处是IP网络对各种物理网络广泛的兼容性,IP协议不会改变物理网络固有的运行方式。实际上,就物理网络的工作方式而言,物理网络在传输帧的时候,并不关心帧的数据部分是什么内容,它的任务只是传输数据。无论是传输其固有的数据(比如语音数据是电话网的固有数据)还是IP协议的数据都是数据。这就和递信一样,无论用户是寄情书还是寄绝交信,邮递员都不关心也不应该关心,他的工作只是投递信件。
5.1.2 统一地址
物理网络使用的地址称为物理地址。各种物理地址的编址方式是不一样的,地址长度也是不一样的。物理地址只是在物理网络内部有意义,出了物理网络就没有意义了,无法用来在整个Internet的范围内标识主机。所以,有必要在整个Internet的范围内规定一套统一的编址方式。同样,IP协议没有在物理网络层面上统一地址,而是在虚拟网络层面上统一地址。IP协议使用统一的IP地址。IP分组的分组头携带了数据发送者的IP地址(源IP地址)和数据接收者的IP地址(目的IP地址)。
Internet上的主机同时需要一个IP地址和一个物理地址:IP地址作为转发IP分组的依据;物理地址作为转发帧的依据。除了格式整齐统一,IP地址和物理地址另一个不同点是它是一种全Internet性的地址,可以在全Internet的范围内用标识一台主机,无论它属于哪个物理网络。如果某个物理网络的主机要使用IP协议向其它物理网络的主机发送数据,可以将数据封装于IP分组内,并将IP分组的目的地址设置为对方的IP地址。
IP地址和物理地址的关系类似学生的学号和身份证号的关系。学号只在本校有意义,不同学校的编号方式可能不一样,但也有可能因为采用相同的编号方式导致不同学校学生的学号一样。学生的学号未必是全国的,但学生的身份证号是全国的。
5.1.3 IP交换
IP分组在物理网络内部传输没有什么特别之处,等同于传输帧。当IP分组要离开某个物理网络进入另外一个物理网络时,麻烦出现了:某种物理网络的帧不能直接进入另外一种物理网络。毫无疑问,数据要从一个物理网络进入另一个物理网络,必须将它的帧从源物理网络的格式转换为目的物理网络的格式。这个过程是由路由器完成的。
路由器可以用来连接不同类型的物理网络。和物理网络的交换机一样,路由器也是按照“存储-转发”的模式工作,负责中转不同物理网络之间的数据。路由器通过它的端口连接物理网络,端口的类型要和物理网络匹配。比如,连接以太网使用以太网的端口。端口是它所连接的物理网络的一部分,就像物理网络中的一台主机的端口,需要配置相应的IP地址和物理地址。它可以从它连接的物理网络接收帧,也可以按照它所连接的物理网络的帧格式向物理网络内的主机发送帧。
图表 5 1 IP交换
请看图表 5 1,路由器的端口1、2、3分别连接物理网络A、B、C,假设A网络内的主机H1有数据要发送到B网络内的主机H2。数据首先以A网络帧的格式发给端口1;收到帧后,路由器将帧头帧尾去掉,分离出IP分组,这个过程称为拆包;路由器依据IP分组的目的IP地址查找路由表,决定将IP分组转发到端口2,这个过程称为路由;端口2重新封装IP分组,加上帧头和帧尾,但是这次是按照B网络的帧格式,这个过程称为打包;端口2后把封装好的帧发送给B网络。A网络可以通过自身的数据交换机制将帧从H1转发到端口1;同样,B网络可以通过自身的数据交换机制将帧从端口2转发到H2。这两个过程都属于物理网络内部的数据转发,和IP交换过程无关。假设A是以太网,网络内部数据转发是由交换机/HUB完成的;假设B是电话网,网络内部数据转发是由程控电话交换机完成的。
整个IP交换分为三个步骤:拆包、路由和打包。可以把IP交换和运货的过程做个类比:用卡车运送货物(类比IP分组)到某个岛屿,到了港口,卡车不能再前进了,于是码头工人把货物从卡车上搬下来(类比拆包);港口调度员调度一艘船运送货物(类比路由);于是码头工人将货物搬上这艘船(类比打包),后经水路运到目的地。
对于IP交换,它关心的是如何转发IP分组,至于IP分组封装成什么形式的帧,并不很重要。采用不同的封装方式就像采用不同的运输工具,分组由一个物理网络交换到另一个物理网络就像换了个运输工具一样。
5.1.4 IP网络
在统一IP分组格式和IP地址后,通过IP交换的机制可以跨越不同物理网络传输标准的IP分组。IP协议实际上在物理网络之上定义了一个逻辑上的网络——IP网络,这个网络上传输的是IP分组。当然,这个逻辑上的网络终要依靠底层的物理网络完成实际的数据传输。虽然物理网络千变万化,但是IP网络是统一的,Internet可以定义为一个全球性的IP网络。
图表 5 2 IP网络封装实例
如果把数据封装在IP分组内,就可以在整个Internet的范围内传输数据了。图表 5 2是个数据封装的实例:数据封装在TCP分组内→TCP分组封装在IP分组内→IP分组封装于以太网帧内。到了物理层,不再封装,物理层负责把帧转换为信号,通过传输媒体发送出去。
数据发送过程是个不断封装的过程,接收数据则是个不断拆封的过程:帧拆封为IP分组→IP分组拆封为TCP分组→数据从TCP分组中分离出来。
5.1.5 IP地址
IP地址是32位长的二进制整数,范围从0~232-1,总共有232(大约等于43亿)个IP地址。计算机行业喜欢用16进制表示二进制整数,可以将IP地址表示为16进制整数。不过这种方法很不直观,也难以记忆。习惯上,采用点分十进制的方式表示IP地址。也就是把二进制的IP地址分为4个字节(一字节有8位长,对应的十进制整数的范围是0~255),字节之间用点号分隔,并用十进制表示出来。比如二进制的IP地址11000000101010000000000000000001分为4个字节,用点号分隔为11000000.10101000.00000000.00000001。个字节11000000等于十进制的192,第二个字节10101000等于十进制的168,第三个字节00000000等于十进制的0,第四个字节等于十进制的1。于是,这个IP地址可以表示为:192.168.0.1。
IP地址分为两部分:高位部分是网络号(又称为网络地址),低位部分是主机号。网络号用于标识网络,由ICANN(Internet Corporation for Assigned Names and Numbers)或者它的分支机构统一分配的。任何一个网络要想加入Internet,必须申请一个网络号。主机号用于标识网络内的主机。主机号的分配由网络管理员自行决定,网络管理员可以按照自己喜欢的方式分配,只要保证网络内任何两台主机的主机号不重复即可。网络号+主机号构成一个完整的IP地址,可以地标识一台主机。这类似学生的学号,前面的数字标识班级号,后面的数字标识学生在班级里面的序号,两者合起来构成完整的学号。
路由器根据IP分组的目的IP地址查找路由表,决定分组转发路径的过程称为IP路由。路由器路由的时候只关心目的IP地址的网络号,这是因为路由是以网络为单位的,它是网络之间的寻址过程。
如何分配网络号是个至关重要的问题。好的网络号分配方案可以使路由的过程变得简单高效;反之,差的网络号分配方案会使路由的过程变得复杂低效。那么该如何分配网络号?这并不是什么高深的学术问题,普通人也可以提出一个很好的建议:按照层次分配网络号。邮政编码是一个典型的例子:两位代表省/自治区/直辖市,中间两位代表县/市,后两位代表区。可以仿照邮政编码这样划分网络号:IP地址的若干位代表国家号,次高的若干位代表省/州号,接着若干位代表市/县号,……,以此类推,构建一个完整的层次。
这样分层划分网络号的好处有两点:
(1) 符合网络的天然层次结构,便于分层管理网络号。现实的网络也是基本按照行政区划分层的,有分层管理的需要。ICANN可以以国家为单位把网络号分配给国家,然后国家为各省/州分配网络号,省/州为市/县分配网络号,……,以此类推,非常方便。
(2) 大大简化路由。请看图表 5 3,假设严格按照行政区划分配网络号,可以按照网络层次设置核心路由器,实现分层路由:国际级核心路由器负责国家之间的路由,核心路由器负责国内各省之间的路由,省级核心路由器负责省内各市/县之间的路由,……,以此类推。分层路由的好处是简单高效:每个路由器之需要负责下一层路由器之间的路由,比如中国的核心路由器只需要负责各省之间的路由,出范围的路由,可以转交上一层路由器处理。假设中国北京的用户要访问美国弗罗里达的用户,路由的路径是:北京→中国→ICANN→美国→弗罗里达。图表 5 3严格的分层模式,构建了一棵以ICANN国际级核心路由器为根的一棵树。
图表 5 3 分层路由
指向上级路由器的路径通常称为默认路径或者默认路由,默认路径用于路由不属于本路由器管辖范围内地址的路由。以中国的核心路由器为例,它的路由表只需记录到各个省级行政单位(包括港澳台总共34个)的路径,加上指向上级路由器的默认路径,总共仅需要35条路由表项。
5.1.6 分类编址方案
图表 5 4 分类编址方案
现在,看看实际的网络号分配方案是什么样的。早的方案把IP地址分为A、B、C、D、E五类(图表 5 4),这种方案称为分类编址方案。E类地址是保留地址,保留给将来使用。D类地址是组播地址,用于IP层的组播。IP组播地址的意义和以太网组播地址的意义一样,只是一个用于物理网络的组播(仅限物理网络内部),另一个一个用于IP网络的组播(可能跨越多个物理网络)。A、B、C类地址是用户通常使用的IP地址,它们是单播IP地址,用于标识主机。IP单播地址和以太网单播地址的意义一样,只是一个用于物理网络的单播,另一个用于IP网络的单播。
这几类地址通过的几位特征位来区分:
(1) A类地址的位是0,网络号8位长,总共有27=128个A类地址,范围是1.0.0.0~127.255.255.255。A类地址的数量少,但是可容纳的主机数量达到224=16777216。
(2) B类地址的两位是10,网络号16位长,总共有214=16384个B类地址,范围是128.0.0.0~191.255.255.255,每个B类地址可以容纳的主机数量是216=65536。
(3) C类地址的三位是110,网络号24位长,总共有221=2097152个C类地址,范围是192.0.0.0~223.255.255.255,每个C类地址可以容纳的主机数量是28=256。
A类地址的前一个字节是网络号,B类地址的前两个字节是网络号,C类地址的前三个字节是网络号。
由于网络号和主机号是合并在一个IP地址内的,路由器在路由时必须有一种机制将网络号从IP地址中分离出来,作为路由的依据。分类编址的方案的好处是:路由器很容易的根据IP地址位的特征从IP地址分离出网络号。很明显,分类编址方案是无层次的网络号分配方案。
5.1.7 一些特殊的IP地址
(1) 全局广播地址
32位全为1的IP地址255.255.255.255,用于向Internet上的所用主机发送广播。目的IP地址为全局广播地址的IP分组称为全局广播IP分组。按照定义,路由器收到全局广播分组后必须将它转发到Internet上的所有网络。而在网络内部,以以太网为例,全局广播分组封装为广播帧,以便广播到整个以太网,终Internet上的所有主机都可以收到这个全局广播分组。路由器可以采用交换机处理广播帧的“扩散”方法,向相邻的所有路由器转发IP全局广播分组,除了给它发送全局广播分组的那个路由器,相邻的路由器再转发给和它们相邻的路由器,……,以此类推,直至传遍整个Internet。扩散广播分组可能引发类似以太网广播风暴的后果,从而成为某些捣乱分子的破坏手段。可以想象,如果有人不断向Internet发送全局广播分组,全球的路由器将疲于奔命,甚至崩溃。出于安全的考虑,这个地址实际上已经被废除了,IP协议的下一个版本IPv6,正式废除了这个地址。路由器收到全局广播分组,会把它丢弃掉。
(2) 网络地址
主机位全是0的IP地址。这个地址用来标识网络号,不能分配给主机用。这就和用100000代表北京所有地区的邮编一样。后面可以看到,它在路由匹配算法中有特殊用处。A类网络地址的形式为A.0.0.0;B类网络地址的形式为B.B.0.0;C类网络地址的形式为C.C.C.0。
(3) 子网广播地址
主机位全是1的IP地址,用于网络号所限定子网内的广播。子网广播地址同样不能分配给主机使用。A类子网广播地址的形式为A.255.255. 255;B类子网广播地址的形式为B.B. 255. 255;C类子网广播地址的形式为C.C.C. 255。和全局广播不同,子网内广播只限于子网(subnet)内部,有时又称为定向广播。可以将IP分组的目的地址设置为定向广播地址,向子网内所有主机发送广播。在以太网内,定向广播IP分组封装为广播帧,以便子网内所有主机可以收到。路由器不会转发定向广播IP分组,它会将定向广播IP分组丢弃。这种行为是合乎逻辑的,因为既然是子网内广播,路由器就不该将这个分组广播到其它子网中。从广播的角度说,子网其实是一个IP广播域。