网络故障分析:路由篇(上册)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-12 15:22:49

点击下载

作者:李涤非

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

网络故障分析:路由篇(上册)

网络故障分析:路由篇(上册)试读:

内 容 简 介

本书阐述了计算机网络中与路由相关的故障诊断方法,并通过案例讲解了如何应用理论知识分析网络故障产生的原因,重点在于分析过程,旨在为读者提供一种易于理解和掌握的网络故障分析方法,以达到有效排除网络故障的目的。

全书共6章,分上、下两册出版。上册内容包括:网络基础和故障排除方法、直连路由和静态路由的故障分析、RIP协议的故障分析。下册内容包括:EIGRP协议的故障分析、链路状态路由协议(OSPF)的故障分析、与路由协议相关的安全技术。本书为上册。

本书适合网络工程师、管理员和自学网络技术的读者阅读,既可作为思科网络技术学院的教辅用书,也可作为相关院校师生的教学参考读物。版权信息书名:网络故障分析:路由篇(上册)作者:李涤非排版:aw出版社:电子工业出版社出版时间:2015-01-01ISBN:9787121247132本书由电子工业出版社授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —前  言

互联网是一个全球性的网络,它的主体是终端设备(包括服务器、个人计算机以及目前各种手持PC设备),它们直接向用户提供各种资源。而互联网的另一个组成部分是各种网络设备,路由器又是其中的重要部分。路由器使用路由协议在网络设备之间传递网络可达信息,这些信息保证了用户终端之间能够通过互联网相互通信,因此路由器在互联网中承担了极其重要的角色。随着互联网规模的增长,网络技术人员维护网络的任务更加繁重,各种疑难问题也大大增加。由于路由设备在互联网中处于核心地位,因此,如果能够快速、有效地解决路由故障问题,对于提高网络的可用性和可靠性都具有非常重要的意义。

本书阐述了计算机网络中与路由相关的故障分析方法,这种方法区别于其他同类书籍所采用的程序框图式的叙述方式,而是根据数据分组在网络中传输的路径、所经历的处理过程来确定故障发生的位置,然后分析可能发生的故障原因。本书通过设计好的案例讲解如何应用理论知识分析和解决网络故障问题,重点在于讲解分析过程,旨在为读者提供一种易于理解和掌握的网络故障分析方法。

全书共6章,分上、下两册出版。本书为上册,以下是各章的简要内容。

第1章,介绍OSI参考模型、TCP/IP协议栈,以及其中主要协议的工作机制、IP地址分类和子网划分方法。这些内容主要为后面章节提供预备知识,同时也作为后续章节的理论参考。在本章的最后还介绍了业界通用的网络故障排除模型,作为后面章节的理论指导。

第2章,首先介绍路由表的工作机制及路由表的构建过程,并以此为理论基础讲解直连路由如何生成以及静态路由的不同配置方法。最后以路由器构建路由表项的原理和过程为线索,重点阐述直连路由和静态路由的故障分析方法。

第3章,介绍距离矢量路由协议RIP,首先介绍RIP协议的工作原理并重点阐述路由环路产生的原因和防止环路的各项措施。因为RIP是本书中第一个介绍的路由协议,所以在这一章中还详细介绍了“度量”和“管理距离”等重要的基本概念,它们是正确理解路由协议如何选路的基础。本章详细讲述了RIPv1和RIPv2的主要区别以及它们的基本配置方法,重点介绍了利用RIP自动传播默认路由的方法、产生自动汇总的条件以及RIPv2的手工汇总配置方法,详细介绍了负载均衡的两种工作方式以及它们与路由器转发方式之间的关系。在本章的最后,按照RIP协议的工作过程,分别阐述了路由发布、路由安装方面的故障分析和故障排除方法。

笔者在编写过程中注重对基本理论和协议原理的讲解,以循序渐进的方式介绍网络中遇到的各种问题和解决方法,启发读者对这些问题进行深入思考,希望读者能够在真正理解的基础上掌握所学的内容。这种写作方式不同于目前图书市场上的其他同类书籍。笔者多年在思科网络技术学院担任培训教师,以笔者对目前学校和一些培训机构授课方式的了解,近年来,对网络知识的讲授方法逐渐演变为强调操作的重要性,在授课过程中以学生能否在设备上把预期的实验结果做出来为依据来判断学生是否掌握了学习内容。长此以往,导致学生过多地注重对各种命令的使用而不知不觉地忽略了对协议原理和实现机制的理解和掌握,以为熟练操作就是掌握所学知识的标志。这个问题反映到网络故障排除上就表现为遇到问题后只注意对各项配置命令的检查,或检查命令是否输入有误、或检查是否漏掉配置命令。如果确认配置命令无误,则面对故障便不知所措。他们通常将“故障排除”称为“排错”,意思是说排除故障的过程就是查找错误。殊不知在实际网络环境中,大部分网络故障都不是因为输入了错误的配置命令引起的。例如,目前互联网中不同网络设备接口的MTU尺寸不尽相同,同时网络中大量存在的过滤设备很可能造成MTU探测过程的失败,而很多主机的应用程序在发送IP分组时不允许在中途进行分片,从而造成数据分组传输失败。类似这种故障并非由配置错误造成,仅仅熟练掌握配置命令而对网络原理、数据分组经过网络设备时的处理过程等协议的实现细节不了解,不会运用相关网络协议的理论知识去分析遇到的问题,是无法排除这类网络故障的。

笔者在本书中尝试从介绍网络原理入手,希望读者能够在掌握基本理论和网络协议的工作原理与实现方法的基础上,应用本书中介绍的故障排除方法,对遇到的网络故障问题进行分析、判断,最终找到故障原因并解决问题。这也是笔者在每一章的前面花大量篇幅详细介绍相关协议的实现机制、工作过程和配置方法的原因。希望读者在阅读本书时不要忽略这部分内容而直接跳到故障分析部分。因为前者是内在的基础,后者是外在的应用,忽略前者而重视后者便是舍本逐末。全书上册的第1章是其他章节的预备知识和理论基础,对于上面列举的MTU问题,在本书的第1章中有详尽的论述。如果读者在故障排除过程中遇到对网络原理、协议的运行机制等不清楚或不理解的地方,请返回到本书的理论部分仔细阅读。

本书面向初学者或刚入职的工程技术人员,因此不涉及一些复杂、难深的网络技术。同时在讲解故障排除方法时尽量避免采用单纯罗列所有可能的故障原因,然后直接列举解决方法的叙述方式。本书的重点在于介绍故障分析方法和过程,使读者最终获得运用已掌握的理论知识分析和解决未知问题的能力。

本书由李涤非编写并统稿,参加编写工作的还有董燕、李国鼐、邢学东、王炬和吴晓明。感谢思科公司刘亢经理对本书部分章节提出的意见和建议,更要感谢电子工业出版社的宋梅老师,没有宋梅老师的耐心帮助和鼓励,本书将无法完成。

由于作者水平有限,不足之处在所难免,请读者给予批评指正。

邮件地址:lidf2014@163.com李涤非2014年12月于北京第1章网络基础和故障排除方法本章要点OSI参考模型介绍了解OSI参考模型各层的功能TCP/IP协议栈地址解析协议网络故障排除方法本章小结

本章介绍有关理解计算机网络所必备的一些概念,OSI参考模型的体系结构、分层及各层的功能与相互关系,重点阐述TCP/IP协议栈的主要协议内容、IP地址的结构、分类和子网划分方法。这些内容是后续章节的理论基础。本书的核心部分虽然是网络故障排除,但了解网络原理尤其是网络协议的内部实现机制,是有效排除网络故障的必要前提。建议读者仔细阅读本章内容,理解所述网络协议的设计思想、工作方式和原理。本章最后介绍网络故障排除的通用方法,它是资深网络工程师们多年工作经验的结晶,在这里作为一个框架提供给读者,具体的分析、诊断方法将会在后面的章节中详述。1.1 OSI参考模型介绍1.1.1 为什么需要OSI参考模型

在回答这个问题之前,先简单回顾一下OSI参考模型出现之前的计算机网络发展历程:1974年,著名的IBM公司提出了世界上最早的计算机网络体系结构SNA(System Network Architecture),它的主要目的是为了实现IBM本公司设备之间的互连。随后DEC公司(20世纪80年代初DEC在计算机行业排名仅次于IBM)于1975年提出了自己的网络体系结构DNA(DIGITAL Network Architecture),图1-1是两种网络结构的示意图。由于相互之间缺乏沟通,这些不同厂商自己提出的网络体系结构之间存在差异,互不相容。因此,将不同厂商设备通过网络互连存在很大的困难,必须在不同厂商设备之间做一些翻译和转换的工作。这种专用的体系结构实际上体现了一种封闭性。图1-1 IBM与DEC公司的计算机网络体系结构

随着计算机网络规模与数量的急剧增长,这种不同厂商设备之间的不兼容性,严重阻碍了计算机网络的健康发展。各厂商也意识到各自的体系结构之间缺乏兼容性所造成的问题,于是开始想办法解决这个难题以促进网络的进一步发展。这时,在制定国际标准方面具有权威性的国际组织——国际标准化组织(International Organization for Standardization, ISO)着手制定统一的标准:OSI参考模型(Open System Interconnection Reference Model),如图1-2所示。该参考模型的研究和起草工作起始于20世纪70年代末,于1984年正式发布。这个标准的第一个词之所以称为“Open”(意为“开放”),是相对于上面所提到的厂商私有网络体系结构的封闭性而言的。这是一个对所有厂商和机构都开放的标准,只要遵守这个标准,就可以和其他任何同样遵守该标准的网络相互通信。图1-2 OSI参考模型

读者不难看出图1-1所示的两个私有体系结构与图1-2的OSI标准模型之间的相似性。实际上,在制定OSI参考模型的过程中,工作组的成员研究了当时已存在的一些解决方案,包括IBM公司的SNA和ARPANET(Internet的前身)等网络体系结构,在它们的基础上提出的OSI参考模型。这个标准的参考模型提出后,已有的网络体系结构都与之建立对应关系。例如,SNA最初的模型只定义了6层,并没有定义物理层,这部分功能由其他标准实现,而图1-1中SNA之所以加入物理层是为了与OSI参考模型对应。

需要强调的是:OSI参考模型只是一个理论框架,它定义了信息要通过网络传递所要完成的各项任务,但并不规定具体如何去实现。即它只定义了需要做什么,并没有规定如何做。虽然OSI参考模型的实际应用意义不是很大,但它对于理解计算机网络内部运作的机制很有帮助,也为我们学习网络知识提供了一个很好的参考。这也是几乎每一本计算机网络教科书都以OSI参考模型为主体框架描述相关网络协议与标准的原因。本书在一开始介绍OSI参考模型同样是为了便于在后续章节中清楚地描述和定位网络故障。说明:协议(Protocol)是指网络中通信实体之间就交换信息等问题所做的某种约定或制定的相应规则。1.1.2 OSI的层次结构

图1-2清楚地展示了OSI参考模型的层次结构,那么为什么要分层呢?在回答这个问题之前,首先了解一下计算机之间互连的目的和意义。在人们应用计算机的早期,由于价格非常昂贵,计算机的数量很少,设备之间互连的主要目的是为了资源共享以节约成本,典型的例子是通过网络共享打印机、文件服务器等。资源共享是计算机网络产生的动因。随着互联网的飞速发展,目前,除资源共享之外,计算机网络已成为用户信息交流和协同工作的平台。1.在网络中传输数据信息需要完成的任务

无论是简单的资源共享还是复杂的协同工作,网络中最基本的操作就是将数据从源可靠地传递到目的地,这看似简单的一句话,背后却隐藏着复杂的处理过程。我们以大家都熟悉的发送电子邮件的过程为例,了解一下在网络中传输数据信息需要完成哪些任务。

① 发送方在写好邮件后交给网络以便通过它传送到接收方。

② 与现实生活中邮寄信件相似,要有统一的信件格式才能保证双方相互理解,因此要预先定义好标准的格式。

③ 网络上的设备所能接收的信息长度是有限的,因此,需要对邮件的内容进行分割,并且规定好分割的最大长度。

④ 要送达到接收方必须正确地标明目的方地址,同时,为了在发生意外情况下能够收到退信,还要写明发送方的源地址。当然,这种地址要定义成网络设备(类似于邮递员)能够理解的格式。

⑤ 网络设备要能够找到一条可达的路径将邮件送达目的地。

⑥ 要确定数据信息以何种形式在媒介(有线或无线)上传送。2.在网络中传输数据信息可能出现的问题

以上这些任务如果都完成了,理论上,就能够将邮件送达到接收方。但谁也不能保证网络中不发生意外,因此,需要考虑一下可能出现的下列问题。

① 数据损坏:硬件故障或环境的影响可能造成数据内容丢失或被破坏。

② 数据之间过长的延迟:数据传递可能要经过一个冗长的路径,在这个过程中难免会出现延迟,对于延迟的容忍时间应该如何规定?

③ 数据丢失与重传:如果延迟时间超出了容忍范围就认为发生了数据丢失,那么发方就需要重传。这时,重传的数据与收方已接收到的数据之间很可能出现顺序颠倒的现象,因为重传的是早先已发送的数据,而到达的时间却较晚,在这种情况下如何排序?

对于上述故障,网络协议首先要能够检测,继而必须能够纠正。

通过上面对发送电子邮件所需完成的各项任务以及在网络传输中可能出现的故障的分析,不难看出在网络中将数据从源可靠地传递到目的地是一件非常复杂的工作。人们在处理复杂的事务时往往将其分解成多个子任务,对于整个任务来说每个子任务相对简单。完成所有的子任务后,整个任务也即告完成,这种分而治之的方法极大地简化了问题。OSI参考模型分层的目的就是为了简化问题而将任务分解。如图1-2所示,它分为7层,将数据在网络中可靠传输这一复杂的任务分解成7个子任务。上述发送邮件的过程中所要做的全部工作都要在这7个子任务中完成,才能保证邮件可靠地送达。

需要强调的是,各层之间是相互关联的,下层(层号较小)为上层(层号较大)提供服务,类似于工业化生产中的流水线作业。主机发送数据时由上层逐层传递给下层,接收数据时则相反,从下层逐层传递到上层。分层的方法除了能够简化问题外,还有如下优点。

① 每一层对应一个功能模块,各模块之间相互独立,即相邻层之间定义出标准界面,而本层内部实现的功能对其他层是不可见的,当某一层需要修改其功能模块时不影响其他层。这样做的好处是可以并行开发、维护不同层的功能模块,提高了工作效率。

② 在进行网络故障分析时,分层的方法还能够帮助我们分解、简化问题,定位故障点。3.常用计算机网络分类

在具体介绍OSI参考模型各层功能之前,先介绍一种常用的计算机网络分类方法,按照网络的规模和覆盖的地域范围分为如下几类。

① 局域网(Local Area Network, LAN):一般在几千米的范围以内,通常在一座建筑物或一个园区(Campus)内。办公室的计算机网是最典型的局域网。

② 城域网(Metropolitan Area Network, MAN):城域网的覆盖范围比局域网更广,通常覆盖一个城市,从几十千米到100千米不等。城域网是由一个城市范围内的局域网互连而成的。

③ 广域网(Wide Area Network, WAN):广域网所覆盖的范围比城域网更广,地理范围可从几百千米到几千千米。跨国公司在不同国家和地区的办公局域网可互连起来构成一个规模更大的广域网。大家熟知的互联网就是典型的广域网。1.2 了解OSI参考模型各层的功能

OSI参考模型的7个层次按照由上至下的顺序分别为应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,如图1-2所示。上面的应用层最靠近用户,下面的物理层最接近网络介质。从本书的侧重点出发,将这7层进一步划分为两个部分:上部层次和下部层次。上部层次为用户的应用程序提供网络服务,而下部层次主要负责数据在网络中的传输工作。由于本书的焦点在于网络故障分析,因此,将重点关注下部各层的功能。注意:这里所说的上部层次和下部层次是根据本书的需要划分的,并不是标准的分类方式。1.2.1 OSI上部层次

OSI参考模型的上部层次(第5、6、7层)靠近用户的应用程序,应用程序通过它们与网络进行交互。下面分别简要介绍各层功能(按照发送数据的顺序)。1.第7层——应用层

应用层对用户的应用软件提供接口以便它们能够使用网络服务。在上面提到的发送邮件的例子中,写好邮件后交给网络传输的工作就是首先由应用层接手的。在这个例子中,应用层为用户的邮件应用程序提供服务,准备将邮件通过网络传递到目的地。应用层中除了提供大家熟悉的邮件服务外,还提供文件传输(FTP),远程登录(Telnet)和万维网(WWW/HTTP)等服务。2.第6层——表示层

在发送邮件的例子中,为了通信双方相互能够理解而预先定义标准格式的工作就是表示层要完成的主要任务,将不同类型的表达格式转换为标准格式的工作也称为“翻译”。除了定义标准的信息格式以外,表示层还包括数据的加密与解密、压缩与恢复等任务。说明:表示层中的加密与压缩任务是可选的,并不一定对所有的用户都需要。此外,数据的加密与解密处理原则上也可以在其他层中实现,不一定必须在表示层中完成。例如,网络通信中常用的IPSec协议就是在网络层实现加/解密操作的。3.第5层——会话层

应用层接收到的用户信息,经过表示层转换成标准格式,交给会话层以对话的方式完成双方的信息交换。会话层的任务是在两个节点间建立和维护会话连接。例如,服务器验证用户登录的过程就是会话层的一个典型实例。1.2.2 OSI下部层次

OSI参考模型的下部层次(第1、2、3、4层)负责数据传输工作,网络工程师所重点关注的就是这些部分。下面分别介绍各层功能(按照发送数据的顺序)。1.第4层——传输层

传输层负责端到端节点之间的数据传输和控制功能。首先解释一下什么是叫端到端:仍然以发送邮件为例,假设某个在北京的用户A给在广州的用户B发送一封邮件,北京到广州相距上千千米,邮件在传输过程中还需要经过很多其他的网络设备,在这条路径上的所有节点设备都要对邮件信息做某种处理,而传输层定义的任务仅在发送端A和接收端B上完成,中间的设备不需要执行传输层任务,由于A和B是整个路径上的两个端点,因此我们强调传输层负责端到端之间的数据传输和控制任务。

在发送端,为了方便网络传输,传输层将上面三层传来的信息分割成段,然后传递给下面的网络层;在接收端,传输层接收到这些分段信息后,将其重新组合起来传递给上面的会话层。用户会有多种不同的应用程序,因此传输层还要能够区分不同的上层应用。为信息分段以及区分不同的上层应用是传输层最基本的任务。

传输层协议分为两种类型:可靠的和不可靠的。对于可靠协议(如TCP/IP协议栈中的TCP协议)除了完成上述基本任务外,还要保证信息能够可靠传输。它首先要检查信息是否完好到达,如果到达还可能需要为它们排序、重组;如果没有到达或出现差错就通知发送方重新发送。同时可靠的传输层协议还具有流量控制的机制。对于不可靠协议(如TCP/IP协议栈中的UDP协议)除了可选的差错检查功能外,不对数据做可靠性检查也不提供流量控制的机制。因此,可靠的协议实现起来相对复杂一些,而不可靠协议实现比较简单。注意:这里所说的可靠性并不能保证信息在传递过程中不发生问题,而是通过在接收端检查信息是否完好到达,如果有问题再通知发送方重传来实现的。

既然传输层协议分为可靠的和不可靠的两种,那么上层协议如何在两者之间选择呢?如果选择了不可靠的传输层协议,一旦数据损坏或丢失将如何补救?这些问题将在1.3.2节中介绍TCP和UDP协议时再详细讨论。

在了解了传输层定义的任务之后,简要说明一下1.1.2节那个发送邮件的例子中,属于传输层的任务有:信息的分割,数据损坏、丢失后的重传以及重新排序等。从这些任务的内容看,邮件服务选用的是可靠的传输层协议。

综合我们讨论过的上述4层所定义的任务,读者应该能够体会到一项较复杂的任务是如何被逐层分解的。当然,仅分解到传输层整个信息传输的任务还没有完成,接下来讨论下三层分别完成哪些任务。2.第3层——网络层

在讨论传输层任务时我们曾提到过,信息在传输过程中还需要经过很多网络设备,并且传输的距离越长可选的路径就越多,其中的一些设备要负责选择一条合适的路径将信息送达目的地。这些负责选路的设备叫作路由器,网络层的一项重要任务——选路,就是由它们完成的。更进一步地说,选路要有依据,根据地址才能选路,因此网络层还要定义地址格式。网络层定义的地址称为网络层地址(也叫逻辑地址),在1.3.4节中我们将具体介绍目前最常用的网络层地址——IP地址。

除了选路和定义网络层地址以外,网络层的任务还包括不同类型网络之间的互连和拥塞控制。不同类型的网络之间协议各不相同,当它们互连时网络层负责协议间的转换工作。网络拥塞是指网络设备的某个接口收到过多的数据,超出了它的处理能力而发生的延迟增加甚至丢失数据的现象。这时网络层负责调度资源,让重要的数据优先通过,缓解拥塞所造成的负面影响。这就与公路上发生交通堵塞时,警察指挥疏导的情况相类似。说明:对于网络拥塞的解决办法不仅限于网络层。例如,利用传输层TCP协议也可以实现拥塞避免。该技术内容超出本书范围,有兴趣的读者可参考相关资料。3.第2层——数据链路层

网络层选好路径之后,下一步的任务是将数据朝目的方向送出,具体到网络设备就是将数据从设备的某个接口发送出去。数据在通往目的地传输过程中需要经过很多网络设备,我们所说的链路就是指这些网络设备之间的连接通路。总体来说,数据链路层的任务就是要保证数据在网络设备之间的链路上正确传递,相对于传输层负责管理源端与目的端之间的端到端通信,数据链路层负责相邻网络设备之间的通信。可以将网络设备理解为中间经过的信息点,因此也叫作点到点通信。端到端通信是建立在点到点通信的基础上的,它由多个点到点通信信道组成,如图1-3所示。端到端通信是传输层的概念;而点到点通信是数据链路层的概念。读者应当熟悉这些术语,以便阅读技术文档时能准确理解其含义。图1-3 点到点通信与端到端通信

根据IEEE 802标准,数据链路层又分两个子层:媒介访问控制(Media Access Control, MAC)子层和逻辑链路控制(Media Access Control, LLC)子层,如图1-4所示。分层即任务的分解,数据链路层又分为子层即对该层任务的进一步分解。LLC的主要任务是差错校验和流量控制。MAC的主要任务是将数据组成帧、定义数据链路层地址(也叫作物理地址)以及控制对网络媒介的使用权,这两个子层的任务合起来就是数据链路层所要完成的所有任务。图1-4 数据链路层子层说明:IEEE 802有一系列的标准,它们定义OSI最下面两层——物理层和数据链路层的功能。如前所述,OSI只确定了哪一层需要做什么,并没有规定如何去实现。IEEE 802标准规定了如何实现物理层和数据链路层的功能。

IEEE 802标准定义LLC子层(对应IEEE 802.2)的主要目的是为了对它的上层——网络层屏蔽不同MAC子层的差异,如图1-5所示,IEEE 802.3和IEEE 802.5分别对应以太网和令牌环网协议类型,它们与LLC子层有不同的接口。LLC对它的上层即网络层的接口是统一的,这样网络层就不需要了解LLC下面到底是何种网络类型。遗憾的是IEEE这一良苦用心在现实网络环境中并没有得到认可,目前在网络中占统治地位的低层协议——以太网协议在封装用户数据时并没有采用划分子层的方式,而是使用传统的DIX 2.0以太网标准,虽然在这个标准中没有定义LLC子层,但它同样要完成LLC所规定的任务,因为它要涵盖整个数据链路层的功能。图1-5 LLC子层屏蔽下层差异说明:网络中的以太网数据帧有两种格式:其中,用于传送用户数据的帧格式为DIX 2.0标准(它没有划分子层),例如,发送电子邮件、网页浏览等;而用于网络设备之间交换控制信息的帧格式大多为IEEE 802.2/802.3(它划分了两个子层),例如,生成树协议即采用这种帧格式,如图1-6所示。

DIX的由来:以太网是一个开放式的、多厂商参与的局域网标准。施乐(Xerox)公司发明了以太网以后,另外两家公司(Digital Equipment Corporation和Intel)也加入进来。1980年,Digital Equipment Corporation、Intel 与Xerox 三家公司宣布了10 Mbps 以太网标准,该标准的名称由这三家公司的英文首写字母组合而成,即DIX以太网标准(DIX标准的最高版本为2.0)。随后以太网协议交给IEEE管理,成为了一个开放性的协议。开放性使得以太网成为目前使用最为广泛的局域网技术。

由于目前网络中绝大多数的以太网帧格式都使用DIX 2.0标准,所以我们以该标准为例介绍数据链路层定义的任务。(1)组帧(封装)

当网络层请求发送数据时,数据链路层将网络层传来的数据组成一定的格式准备发送,这一过程称为组帧,以太网的帧格式如图1-6所示。下面介绍一下帧的组成。图1-6 DIX 2.0(上)和IEEE 802.2/802.3 帧格式(下)

① 前同步信号(Preamble):左侧第一个字段为8字节的前同步信号,它的任务是保证网卡的接口在重要数据字段到来之前与之同步,这一过程可以简单理解为通知接口做好接收数据的准备工作,它本身的内容没有实质性的意义。

② 目的地址(Destination Address):紧接着前同步信号的是48 bit目的地址字段,该字段对应帧的目的地接口地址。以太网是广播型网络,一个站点发送的数据帧会被网络中多个站点收到,接收站点读取帧中的目的地址与自己的接口地址进行比较,如果相同则继续接收并处理后面的内容;如果不同就可以忽略帧的其余内容(将其丢弃)。

③ 源地址(Source Address):目的地址后面的是48 bit的源地址字段,以太网站点在它传送的每个帧中用自己的接口地址作为源地址。接收站点可根据源地址对发送站点进行应答。

④ 类型(Type)与长度(Length)字段:该字段DIX与IEEE 802.3标准定义有所不同。

在DIX以太网标准中,源地址字段后面是2字节的类型字段(参见图1-6上部)。它包含一个标识符,用来说明帧的数据字段中携带的上层协议(网络层协议)的类型,例加,标识符0x0800(0x表示后面的数字为十六进制数)指示上层协议为IP。类型字段的意义重大,如果没有它标识上层协议类型,以太网协议将无法支持多种网络层协议。

IEEE 802.3标准在最初确立时这部分对应的是2字节的长度字段(参见图1-6下部),而上层协议类型由IEEE 802.2(对应LLC子层)中定义。长度字段中的数值指明了在它后面的数据字段中数据的长度,以字节为单位。目前的IEEE 802.3标准中对此做了修改,这个字段被称为长度/类型字段。由于以太网帧中数据字段的最大长度定义为1 500字节(也称为以太网的最大传输单元MTU),协议规定若该字段中的数值小于或等于1 500,则作为长度字段使用(这时其后包含IEEE 802.2协议内容),若大于或等于1 536则作为类型字段使用(因为根据IEEE 802.3标准不可能有这么长的以太网帧)。这时,IEEE 802.3帧的组成结构与DIX标准定义的完全相同。因此,当前的IEEE 802.3标准与DIX完全兼容。

⑤数据字段(Data field):这个字段的内容与前面的类型与长度字段相关,当前面的字段代表类型时,数据字段的内容是网络层传递下来的数据,规范规定的长度范围是46~1 500字节;当前面的字段代表长度时(IEEE 802.3最初的标准),数据字段包含LLC协议(IEEE 802.2)及网络层传递下来的数据这两部分内容,规范规定的长度范围也是46〜1 500字节。

⑥ 帧检查序列字段(Frame Check Sequence field, FCS):这是以太网帧的最后一个字段。字段的长度为4字节,其中的数值用来检查帧的完整性。这个值是通过循环冗余校验(Cyclic Redundancy Check, CRC)的算法计算出来的。发送站点首先计算出帧的CRC数值放入FCS字段,接收站点收到数据帧后重新计算该值并与FCS字段做比较,以判断帧是否有误。

在这里逐字段地解释每一部分的内容有两点考虑,一是使读者了解以太网帧的组成结构及各字段的功能,以便在故障分析过程中能够读懂并理解数据帧的内容;二是通过分析具体的以太网帧格式,理解封装对于实现数据链路层任务的意义。从上述内容及图1-6中可以看出,数据字段的左侧是数据链路层添加的内容,它类似于寄信时封装信封,因此这一过程叫作数据封装。左侧封装的内容在发送数据帧时先于数据字段发送,所以形象地称它为帧头。数据字段的右侧是FCS字段,它后于数据字段发送,因此被称作尾部。封装的内容对应该层所要完成的任务,例如,地址字段表明数据链路层要完成寻址的功能,而FCS字段表明该层需要对数据进行差错校验。在发送方,以太网网卡在发送数据之前封装帧头和帧尾。在接收方,收到数据帧以后查看封装的内容,根据它做相应的处理,完成本层任务后拆除封装送给上层协议。(2)定义数据链路层地址

在网络通信中需要用地址区分参与通信的各个站点。数据链路层所使用的地址被固化在网络设备的接口中(如以太网网卡、路由器的以太网接口等),用于标识设备的物理接口。由于它存在于硬件中,也称为硬件地址或物理地址,又由于IEEE 802.3标准中寻址定义在MAC子层,所以以太网地址又称MAC地址。

无论哪种地址都有一个共同的特点——唯一性,以太网的MAC地址也不例外,这就需要有一个机构统一管理以确保唯一性。最初以太网的MAC地址由Xerox公司统一维护,目前以太网MAC地址转由IEEE管理。MAC地址是一个定长的48比特二进制数(书写时用6字节表示),它由两部分组成,前24比特称作OUI(Organizational Unique Identifier),用来区分不同的硬件生产厂商,每个以太网设备的生产厂商需要从IEEE获得一个组织唯一标识符(OUI),它是全球唯一的。后24比特是由生产厂家分配给每个接口的唯一的编号,因此可以保证这48比特的MAC地址是全球唯一的,如图1-7所示,图中给出的MAC地址示例00.00.0c.12.34.56(MAC地址均以十六进制表示)中的前24比特值00.00.0c是Cisco公司的OUI。图1-7 MAC地址结构

MAC地址分为三种类型:单播、广播和多播。

① 单播地址(Unicast Address):唯一地标识一个特定的接口,它代表单个节点。单播地址可以存在于以太网帧头中的目的或源地址字段。当站点接收到目的地址是单播的以太网数据帧后,首先比较数据帧的目的地址字段是否与自己的MAC地址相同,相同则继续处理后面的部分;如果不同则丢弃。单播地址用于节点间单独通信。

② 广播地址(Unicast Address):表示网络中所有站点都将接收和处理该数据帧,它代表所有节点。它以特殊的48比特全1表示,写作十六进制的形式为FF-FF-FF-FF-FF-FF。当站点接收到目的地址是广播数据帧后,不再与自己的单播MAC地址进行比较,而是无条件地接收和处理该数据帧。广播地址用于单个节点与网络中所有其他节点间通信。

③ 多播地址(Multicast Address):是介于单播和广播之间的一种地址形式(也称组播地址),它代表一组节点,例如,某个设备要与它同厂商的其他网络设备通信,该如何区分呢?这种情况下,网络设备厂商可以向IEEE申请一个特殊的MAC地址代表所有该厂商生产的网络设备,这种地址通常代表多个节点,故称为多播地址。多播MAC地址第一个字节中的最后一个比特要求置为1,值0代表单播MAC地址。很多文档中都说当MAC地址的第一个字节为0x01时表示该地址是多播MAC地址。实际上这样说并不严谨,只要最后一个比特的值是1(广播地址除外)就表示多播,如第一字节为0x01、0x03或0x33等都是多播地址。注意:广播和多播地址只能存在于目的地址字段,源地址字段的非单播地址没有实际意义。

在这里读者可能会提出一个问题:在上面介绍OSI参考模型中网络层的功能时曾提到过一种地址——网络层地址,而这里又定义了数据链路层地址。为什么在OSI参考模型中要定义两种地址呢?这个问题我们留在1.3.4节中讲解IP地址时再详细解释。这里先简要说明一下两者的区别,除了两者所属层次不同以外,数据链路层地址在网络通信中是必不可少的,而网络层地址则是可选的。(3)媒介访问控制

在封装好数据帧以后,下一步要将其发送出去。以太网采用广播型传输方式。在早期的以太网中,互连设备是集线器。它的特点是将收到的数据信号转发到网络的每一个角落。因此,连接到它上面的主机发出的数据所有其他节点都能收到(图1-8和图1-9代表这种连接方式)。数据以电信号或光信号的形式在介质中传播,当多个站点同时发送数据时,它们的数据信号可能会在信道的某处相遇,两组信号相遇就发生了冲突,也称碰撞(Collision)。它类似于车辆在道路交叉口相遇的情形,如图1-8所示。信号发生碰撞后数据就会被损坏,为了避免信号在媒介中发生冲突,必须对媒介的使用进行某种控制,它类似于公路上的交通管制。图1-8 媒介访问控制图1-9 以太网中碰撞的产生

以太网的媒介访问控制机制可简写为CSMA/CD(载波侦听多路访问/碰撞检测)。由于网络中各站点收发信息的随机性,它们可能随时会访问网络中的其他站点,为了避免在一开始就与其他站点的信号发生碰撞,标准中规定:在发送信息之前,站点必须先侦听网络的状况,看看网络媒介上是否已经有信号(这个过程称为载波侦听,因为以太网是由通信网络发展而来的,所以沿用了通信中的名词——载波),如果听到有载波,站点就不能发送自己的信息而是继续侦听直到载波消失;如果没有听到载波,这时它认为当前网络媒介空闲,站点就可以发送自己的信息。这一过程简称为“先听后发”,术语CSMA中的CS(Carrier Sense,载波侦听)就是指的“先听后发”。MA(Multiple Access,多路访问)是对这种网络结构的描述:在网络中一个源节点发出的信息可以同时到达其他多个站点。

既然“先听后发”的机制能够避免发送数据的站点在一开始就与其他站点的信号发生碰撞,那么术语中的CD(Collision Detect,碰撞检测)又有何用处呢?考虑一下图1-9中的情形,当计算机A和D同时需要发送数据时,按照“先听后发”的机制它们会同时侦听网络的状况。如果恰好这时网络空闲,这意味着它们都没有听到载波,则A和D就会同时发送自己的信息。显然它们的信号必定会在网络的某处相遇——发生碰撞,此时,A和D的信息都会被损毁。因此,仅有CSMA还不能完全解决碰撞问题,站点还要在发送数据的同时执行碰撞检测工作,一旦测到碰撞就立即停止发送,等待下一个时机重新发送。这一过程被称为“边发边听”,所谓的“听”就是指检测碰撞。

在这里顺便介绍一下碰撞检测是如何影响双工模式的。所谓双工是指设备收和发这两个功能(方向),如果某个设备既可以接收也可以发送,它就是一个双工设备,网络设备都支持双工模式(收音机是一个双工的反例,它只能接收不能发送,因此属于单工设备)。双工还进一步分为半双工和全双工,如果一个设备在接收数据的同时不能发送、在发送数据的同时不能接收,就称它为半双工设备;反之,能够同时收发的设备称为全双工设备。显然,半双工的工作方式不如全双工的效率高,如果能够选择我们自然会优选全双工的工作方式。只要设备接口有两条独立的信道,都可以实现全双工的工作模式。例如,以太网中所使用的双绞线和光纤都有独立的收、发信道。以100Mbps网卡的RJ-45接口为例,规范规定引脚1、2为发送线对,引脚3、6为接收线对。从这一点来看显然是支持全双工的,因为它具有两条独立的物理通路。但是如果该以太网接口需要执行碰撞检测的工作(如集线器的端口),它就只能工作在半双工模式,这是因为当它在发送数据时要通过接收线对侦听信道上有无信号来实现碰撞检测,因此不能用接收线对接收正常数据。只有不需要做碰撞检测的设备接口才可以工作在全双工模式。集线器的端口必须工作在半双工模式,因为它只支持CSMA/CD的工作方式。而主机的网卡、交换机和路由器的接口既可以工作在半双工模式也可以工作在全双工模式(不需要做碰撞检测),它取决于所连接的对端设备的工作模式。要求直接相连的设备接口之间双工模式必须一致。

以上我们从以太网的CSMA/CD技术入手介绍了媒介访问控制的一个具体实现方法。实际上,媒介访问控制方法并不止这一种,CSMA/CD是早期局域网中比较常用的一种技术。随着以太网技术的发展,传输速率越来越高,碰撞检测过程会严重影响传输速率。因此在万兆以太网标准中取消了碰撞检测的内容,接口只工作在全双工模式。相应地要求连接方式为点到点的拓扑结构(类似于两个人打电话的情形),从源发送的数据只有唯一的目的地。

点到点的网络类型不存在信道竞争的问题,因此,不需要复杂的介质访问控制方法。大多数广域网也采用点到点的拓扑结构,因为广域网距离很长,一旦信道上发生冲突,控制、恢复起来非常复杂和耗时,采用点到点拓扑能够使信道的访问控制简化,并易于实现。对于不同的网络类型媒介访问控制方法各不相同,它是数据链路层的一项重要任务。4.第1层——物理层

为了将数据链路层组成的帧放到介质上传输,需要将数据帧转换成能够在物理介质上传播的电信号或光信号的形式。物理层位于OSI参考模型的最低层,它提供与通信介质的连接,直接负责原始比特流的传输。为了实现比特流的物理传输,物理层标准定义了接口的机械连接、电气信号、信号功能以及电路规程特性。例如,物理层标准规定了以太网RJ-45接口的引脚数目、排列方法以及物理尺寸和各个引脚的电压范围。

物理层还定义了物理拓扑结构,所谓拓扑结构是指网络设备和线缆的连接形式。常见的物理拓扑结构有总线形拓扑、星形拓扑、环形拓扑、树状拓扑、网状拓扑以及蜂窝式拓扑,如图1-10所示。网络拓扑结构对于网络设计、管理维护工作是至关重要的。同时,准确地描述网络拓扑结构是排除网络故障的前提条件之一。图1-10 常见的物理拓扑结构1.2.3 OSI各层定义的任务是如何实现的

前面介绍了OSI参考模型中各层需要完成的任务,回顾1.1.2节发送电子邮件的例子中所提出的问题,在OSI的七层中都给出了相应的解决办法。但上面只是逐层列出了要完成的任务,并没有说明完整的实现过程。

在这里我们通过图1-11来考察一下OSI各层定义的任务是如何实现的。假设计算机A上的某个应用程序要发送数据给计算机B。首先,该应用程序把数据交给计算机A的应用层,应用层在数据前面加上应用层的数据包头即H7(Header 7意为第7层头信息),从而得到一个用户数据加上应用层头信息的数据结构。为了叙述方便,这里介绍一下协议数据单元(PDU)的概念:某一层的数据加上该层的头部或尾部信息所组成的数据结构叫作这一层的协议数据单元(Protocel Data Unit, PDU)。所以,上述的H7加上应用层数据合起来叫作应用层协议数据单元。应用层数据包头中的内容是节点间相互通信所需的控制信息,添加控制信息的过程称为封装。封装完成后应用层将该协议数据单元交给表示层。表示层并不关心应用层PDU中哪一部分是包头,哪一部分是用户数据。它只是将收到的应用层PDU看作表示层要处理的数据,前面再加上包含本层控制信息的H6(Header 6意为第6层头信息,H5、H4等与此类同),构成表示层的协议数据单元,再交给会话层。这一过程在第4、3、2层被重复进行(注意第2层的特殊性,它不但要封装头部信息还有尾部的校验信息),分别将上层传来的PDU加上本层的控制信息,这是一个逐层封装的过程。当数据链路层完成封装后把它的PDU交给物理层,物理层将这个PDU封装到适当的电信号或光信号中,然后传输到网络媒介上。通常对物理层传输的内容以比特流(位流)的形式表示,而不具体区分哪些是物理层的封装内容。

以上是发送方通过层层封装将数据发送出去的过程,接下来我们看一下这些封装内容的作用。在接收端,物理层首先接收到对方发来的比特流,解开物理层封装,从信号中提取出1和0,转换成数据链路层能够识别的格式后提交给它。数据链路层的功能模块读取头部和尾部的信息(图1-11中H2和T2的内容),根据这些信息的内容完成数据链路层定义的任务。例如,根据头部的物理地址信息完成数据链路层的寻址工作。数据链路层在完成了本层的任务之后,将该层的包头和尾部信息去掉(此过程称为解封装),将剩余部分交给网络层。网络层的功能模块读取该层数据结构的头部信息(图1-11中H3的内容),根据这些信息的内容完成网络层定义的任务。之后,去掉H3封装,送给它的上层——传输层。依此类推,最后将应用层PDU的头部去掉,传递给上面的用户应用程序。

综上所述,发送方在OSI参考模型的每一层,将完成本层任务所需的控制信息以封装的方式添加到被传输的数据上,在接收方的对等层读取封装信息,根据它的内容完成本层的任务。OSI各层定义的任务就是通过这种发方逐层封装、收方逐层解封装的处理过程来实现的。

根据1.1.2节提到的OSI分层原则,某层内部实现的功能对其他层是不可见的。这个原则应用到封装与解封装的过程就是:发送方在某一层的封装内容只能由接收方同一层来处理。例如,发送方在传输层封装的头部信息,只能由接收方的传输层读取,不允许其他各层查看它的内容,这叫作对等层通信原则。图1-11中收发双方相同层之间的连线代表了这个过程。读者可能会注意到,除了物理层以外其他各层间的连线均用虚线表示,这是因为对等层之间除物理层以外其他各层并不能在物理上直接通信,而是逻辑上的虚拟通信。这一规则的优点在于:每一层的功能模块之间相互独立。由于本层内部实现的功能对其他层是不可见的,当某一层需要修改其内容时不影响其他各层。这有助于简化问题、提高效率。然而,在现实网络环境中也存在一些例外的情况,例如,有些厂商的设备在实现DHCP协议时,某些情况下并没有严格地遵守对等层通信的规则。图1-11 数据传输时OSI各层封装与解封装过程

OSI最下面4层与网络通信密切相关,为了方便起见,对这4层的协议数据单元(PDU)定义了较简洁的表示方法:● 数据在传输层封装后得到的协议数据单元称为段(Segment);● 在网络层被封装后得到的协议数据单元称为分组(Packet);● 在数据链路层被封装后得到的协议数据单元称为帧(Frame);● 在物理层,数据的单位称为比特(Bit),参见图1-11中最下面4

层的英文注释。

在本书后续章节中会用到这些术语简化表达。例如,不再以全称“数据链路层协议数据单元”描述第二层的数据结构,而以术语“帧(Frame)”代表。请读者注意它们之间的对照关系。

OSI参考模型是计算机网络互连的理论框架,也是对网络内部结构的简练概括与描述。对于一个合格的网络工程师,要学会运用这个模型的层次化方法分析问题。各层协议的封装内容与它所完成的任务是密切相关的,例如,在查看数据包头部或尾部的封装时,应当能够根据它的具体内容推断出它所要完成的任务,再由这些任务的内容联系到它属于参考模型中的哪一层。反之,在了解了参考模型某一层所需完成的任务之后,能够推断出相应地在数据包头或尾部应当封装哪些内容。这样才算是真正的理解、掌握了OSI参考模型。当然,对于初学者来说,要达到这个要求还需要一个过程。但是,必须要培养这种运用OSI参考模型分析问题的意识,而不是仅仅记忆七层模型中每一层的名字和功能。这也是笔者在本书的开头花篇幅介绍OSI参考模型的初衷。希望读者在阅读本书后面的内容时,能够有意识地运用该参考模型分析和解决网络问题。1.3 TCP/IP协议栈

TCP/IP协议起源于美国国防部的ARPA网项目,因此也被称作DoD模型(Department of Defense Model)。它是互联网的基础,随着互联网的发展和普及,TCP/IP协议目前已成为计算机网络的事实上的标准。因此,TCP/IP协议将是本书论述的重点。

从字面上看,TCP/IP代表了两个协议:TCP(传输控制协议)和IP(互联网协议)。实际上它是一个包括几十个协议在内的协议栈(协议集合),而TCP协议和IP协议是其中最基本也是最重要的两个协议,因此以这两个协议为代表叫作TCP/IP协议栈。1.3.1 TCP/IP分层模型

TCP/IP协议栈有自己的分层模型。虽然TCP/IP协议已成为事实上的标准,但网络工程师们仍然使用OSI参考模型所定义的术语或概念进行交流,例如,IP协议并不是根据它在TCP/IP协议栈中的层次叫它2层协议,而是根据它对应的OSI参考模型中的层次被称为3层协议。因此,有必要了解TCP/IP协议栈分层与OSI参考模型之间的对应关系,如图1-12所示。实际上,TCP/IP协议的确立早于OSI参考模型,两者间不存在严格的层次对应关系。分层的目的是相同的,但具体的划分方法会存在差异。TCP/IP分为4层,自下而上分别为网络接口层(Network Interface Layer)、网际层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer)。图1-12 TCP/IP协议栈分层与OSI参考模型对比● 网络接口层:位于最低层,它对应OSI的物理层和数据链路层,

由于开发TCP/IP的主要目的是实现底层异构网络(指OSI最下面

两层运行不同协议的网络)的互连,因此,它在OSI的物理层与

数据链路层相对应的部分是开放的,支持已有的协议类型。如以

太网、令牌环网和FDDI以及各种WAN协议。● 网际层:负责将分组从源节点送往目标节点主机,该层在功能上

等同于OSI参考模型中的网络层。● 传输层:负责端到端的数据通信。其功能与OSI参考模型中传输

层是相同的。● 应用层:为用户的应用软件提供网络服务。TCP/IP协议栈应用

层的功能对应OSI参考模型的上3层。与OSI相比,TCP/IP模型简

化了上层协议,将会话层和表示层融合到应用层中,使通信的层

次减少,提高了通信效率。

本章不对TCP/IP协议栈做全面的介绍,只选择其中与本书内容相关的协议在下面的小节中进行阐述。1.3.2 TCP/IP传输层协议:TCP和UDP

TCP(Transport Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是传输层的两个主要协议。前者提供面向连接的可靠性服务,后者提供无连接的不可靠服务。根据各层功能的划分,传输层协议不会直接参与路由过程,似乎与本书讨论的专题没有直接的关联,但本书后面章节中所涉及的路由协议用到了传输层协议所提供的服务,并且互联网中大部分数据都是通过这两个协议进行传输的,因此有必要了解一下它们的工作机制。1. TCP协议

TCP协议是应用较广泛的一个传输层协议,WWW、文件传输(FTP)和电子邮件等服务都用到了TCP协议。由于协议的封装格式与要完成的任务密切相关,我们从介绍TCP的协议封装格式入手来了解TCP协议所要完成的任务和工作机制。图1-13给出了TCP的封装格式。图1-13 TCP的封装格式(1)TCP协议格式

① 源/目的端口号。

源/目的端口号用于区分源和目的端传输层不同的应用进程。以客户机/服务器工作模式为例,一台服务器上可以为客户端提供多种服务。例如,WWW服务器可以同时提供邮件服务。当客户机向该服务器请求某种服务时,它首先通过目的IP地址找到服务器,但是如何区分这台服务器上的不同服务呢?显然只有IP地址是不够的,端口号就是用来区分应用层服务的。通信过程是在源和目的端之间进行的,因此端口号也分为源和目的端口,分别用于区分源端和目的端的应用进程。举例来说,某主机打开两个浏览器窗口,同时浏览不同WWW服务器上的内容。它通过目的端口号向服务器方指示请求WWW服务,但回传的主页信息放入哪个浏览器窗口呢?这就需要客户机上的源端口来区分,不同的浏览器窗口对应不同的源端口。

端口号是一个16比特的数字,在通信过程中客户端如何知道服务进程对应的端口号呢?这个问题可以通过端口号的分配方式解决。端口号的范围从0〜65535,端口号0保留。其中1〜1023由IANA管理,被称作“Well Known Ports”(众所周知的端口)。这些端口号固定分配给一些公共的服务,例如,80端口分配给HTTP(WWW)服务,25端口分配给SMTP(简单邮件传输协议)服务等。客户机就是通过这些预先定义好的众所周知的端口号来了解所对应的服务的。1024〜65535范围的端口号被称为动态端口(Dynamic Ports),一般在网络通信时随机分配。该范围的端口号通常分配给客户端的应用进程,例如,系统为客户端的浏览器进程分配大于1024的端口号。

② 序列号:

序列号用来标识TCP发送端发送的数据流,以字节为单位。它表示在这个TCP段中的第一个数据字节。例如,某主机发送了两个TCP段数据,每个段包含500字节,假设第一个段中的序列号是1,则第二个段的序列号为501,它由第一个段的序列号加上段数据长度计算得来:1+500=501。其余各段的序列号以此类推。序列号标识了段中的数据在发送端数据流中的位置。

③ 确认号:

确认号指出本机希望接收的下一个段的序号。还以上面序列号中的例子来说明,当接收端成功地收到第一个段后,根据上述计算结果,

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载