Java网络编程核心技术详解(视频微课版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-10 19:22:07

点击下载

作者:孙卫琴

出版社:电子工业出版社

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

Java网络编程核心技术详解(视频微课版)

Java网络编程核心技术详解(视频微课版)试读:

内容简介

本书结合大量典型的实例,详细介绍了用Java来编写网络应用程序的技术。本书内容包括:Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、MVC设计模式、JavaMail API、安全网络通信、XML数据处理和Web服务。

阅读本书,读者不仅可以掌握网络编程的实用技术,还可以进一步提高按照面向对象的思想来设计和开发Java软件的能力。本书适用于所有Java编程人员,包括Java初学者及资深Java开发人员。本书还可作为高校的Java教材,以及企业Java培训教材。

未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。

版权所有,侵权必究。

图书在版编目(CIP)数据

Java网络编程核心技术详解:视频微课版/孙卫琴编著.—北京:电子工业出版社,2020.3

ISBN 978-7-121-38315-1

Ⅰ.①J… Ⅱ.①孙… Ⅲ.①JAVA语言-程序设计 Ⅳ.①TP312.8

中国版本图书馆CIP数据核字(2020)第010548号

责任编辑:孙学瑛

印  刷:

装  订:

出版发行:电子工业出版社

     北京市海淀区万寿路173信箱 邮编:100036

开  本:787×1092 1/16 印张:37.5 字数:960千字

版  次:2020年3月第1版

印  次:2020年3月第1次印刷

定  价:129.00元

凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。

质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。

本书咨询联系方式:010-51260888-819,faq@phei.com.cn。推荐序

在IT行业,大多数Java程序员都看过孙卫琴老师的书。孙老师的书,清晰严谨,把复杂的技术架构层层剖析,结合典型的实例细致讲解,读者只要静下心来好好品读,就能深入Java技术的殿堂,领悟其中的核心思想,并掌握开发实际应用的种种技能。

读好书,犹如和名师面对面交流,可以全面地学习和传承名师在这个技术领域里的经验和学识。孙老师及其同仁孜孜不倦地钻研Java技术,紧跟技术前沿,传道授业、著书立说。无数程序员从中受益,从Java小白成长为Java大牛。

Oracle作为Java领域的技术引领者和规范制定者,非常欢迎中国的作者把最新的Java技术介绍给广大Java开发人员,孙老师的书刚好满足了这一需求。如今,Java在网络应用开发领域得到了非常广泛的运用,这本书深入浅出地介绍了套接字编程、非阻塞通信、数据报通信、RMI框架、安全网络通信和Web服务等网络编程技术。读者如果希望成为高级Java开发人员,本书是必备的参考手册和学习宝典。

甲骨文人才产业基地作为Oracle在中国的业务拓展公司,非常欣赏这本书,许多老师和学员都用本书作为首选的Java网络编程参考书。相信读者能够从中受益匪浅,轻松上手,循序渐进,最后精通技术。王正平甲骨文人才产业基地教育产品部总监前 言

Java语言是第1个完全融入网络的语言。Java语言之所以适合编写网络应用程序,归功于它的以下三方面的优势。(1)Java语言与生俱来就是与平台无关的。Java程序能够运行在不同的平台上,运行在不同平台上的Java程序之间能够方便地进行网络通信。(2)Java语言具有完善的安全机制,可以对程序进行权限检查,这对网络程序至关重要。(3)JDK类库提供了丰富的网络类库(如套接字API、JavaMail API和JDBC API等),大大简化了网络程序的开发过程。

本书将展示如何利用Java网络类库来快速便捷地创建网络应用程序,致力于完成以下任务。

·实现访问HTTP服务器的客户程序。

·实现HTTP服务器。

·实现多线程的服务器,以及非阻塞的服务器。

·解析并展示HTML页面。

·通过JDBC API访问数据库。

·通过JavaMail API接收和发送电子邮件。

·利用RMI框架实现分布式的软件系统。

·进行安全的网络通信,对数据加密,验证身份,保证数据的完整性。

·运用第三方开源软件框架,如Axis、Spring和CXF,开发Web服务,实现分布式的软件系统。

本书的组织结构和主要内容

本书结合大量典型的实例,详细介绍了用Java来编写网络应用程序的技术。本书内容包括:Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、MVC设计模式、JavaMail API、安全网络通信、XML数据处理和Web服务。图1展示了本书各章之间的循序渐进关系。

从图1可以看出,本书第1章介绍了分层的网络体系结构,Java网络程序位于最上层——应用层,并且通过套接字访问底层网络,也可以说,套接字为应用层封装了底层网络传输数据的细节。套接字(Socket)是Java网络编程的基础,第2章和第3章分别详细介绍了Socket与ServerSocket的用法。Java网络程序都采用客户/服务器模式,客户端发出获得特定服务的请求,服务器接收请求,执行客户端所请求的操作,然后向客户端发回响应。本书在介绍服务器端编程时,探讨了服务器端实现并发响应多个客户请求的两种方式:一种方式是运用线程池(第3章),还有一种方式是采用非阻塞通信(第4章)。在介绍客户端编程时,介绍了JDK提供的一种通用的客户端协议处理框架(第6章)。图1 本书各章之间的顺序渐进关系

利用Java网络API,可以实现基于各种应用层协议(比如HTTP和FTP)的服务器程序与客户程序,本书侧重介绍了HTTP服务器(第5章)与HTTP客户程序(第7章)的实现方法,HTTP客户程序也被称为浏览器。

本书还介绍了两种分布式的软件架构:RMI(第11章)和Web服务(第17章和第18章)。这些分布式架构主要解决的问题是,如何让客户端调用服务器端的远程对象。RMI是JDK自带的,它要求客户端与服务器端都是Java程序,而Web服务允许用任意编程语言编写的客户程序与服务器程序之间能够通信。本书详细介绍了RMI框架的用法。RMI框架在其实现中封装了用套接字通信的细节,此外,RMI框架的实现会把客户端的方法调用请求信息序列化为字节序列,把它发送给服务器端,然后在服务器端再通过反序列化把字节序列还原为方法调用请求。RMI框架还运用了动态代理机制,为客户端提供了远程对象的代理。客户端实际上直接访问的是远程对象的代理。为了帮助读者理解RMI框架的实现原理,本书第9章和第10章分别介绍了Java序列化以及反射机制。在介绍反射机制时,还介绍了动态代理。

本书第17章和第18章介绍了在开源软件框架Axis、Spring和CXF中创建和发布Web服务的方法。这些框架软件封装了客户端和服务器端底层通信的细节,使得开发人员只要利用框架软件的API、注解和配置文件,就能方便地编写与具体业务领域相关的服务程序和客户程序。

本书还介绍了两个常用的客户端的网络API:JDBC API(第12章)和JavaMail API(第14章),这两个API分别用于访问数据库服务器和邮件服务器,在它们的实现中都封装了用套接字与服务器通信的细节。Java客户程序可以通过JDBC API来访问各种数据服务器,还可以通过JavaMail API来访问各种邮件服务器。

本书第13章介绍了一个运用了MVC设计模式和RMI框架的综合应用。MVC设计模式把实际的软件应用分为视图、控制器和模型3个层次,每个层次相对独立。本书的范例把模型作为远程对象放到RMI的服务器端,把视图和控制器放到RMI的客户端。

本书第15章介绍了SSLSocket,它支持SSL(Server Socket Layer)协议和TLS(Transport Layer Security)协议。运用SSLSocket,可以实现安全的网络通信,网络上传输的是被加密的数据,并且通信两端还能验证对方的身份。

本书在介绍以上技术时,采用UML建模语言中的类框图和时序图来展示对象模型,以及类与类之间的协作关系。此外,本书还把一些常见的设计模式,如静态代理模式、动态代理模式和MVC设计模式等运用到实际例子中。阅读本书,读者不仅可以掌握Java网络编程的实用技术,还可以进一步提高按照面向对象的思想来设计和编写Java软件的能力。

这本书是否适合您

阅读本书,要求读者已经具备了Java编程的基础知识。对于不熟悉Java语言的读者,建议先阅读本书作者的另一本书《Java面向对象编程》,本书是它的姊妹篇。《Java面向对象编程》自2006年7月出版后,一直畅销至今,受到了广大IT读者的欢迎。本书围绕着网络编程,进一步介绍了Java语言的一些高级特性,这些特性是作为一个高级Java开发人员必须知晓的。深入了解这些高级特性,有助于开发人员熟练地开发分布式的软件系统,或者轻松地学习和掌握现有的分布式软件架构。

本书一方面由浅入深地组织内容,满足Java网络编程初学者的需求,另一方面与实际项目紧密结合,介绍了线程池、非阻塞通信和动态代理等高级话题,可作为Java开发人员的参考手册。本书还可以作为高校的Java教材,以及企业培训教材。

致谢

本书在编写过程中得到了Oracle公司在技术上的大力支持。此外,JavaThinker.net网站的网友为本书的编写提供了有益的帮助,在此表示衷心的感谢!尽管我们尽了最大努力,但本书难免会有不妥之处,欢迎各界专家和读者朋友批评指正。以下网址是作者为本书提供的技术支持网址,读者可通过它下载与本书相关的资源(如源代码、软件安装程序和视频课程、PPT讲义等),还可以与其他读者交流学习心得,以及对本书提出宝贵意见。

http://www.javathinker.net/javanet.jsp

读者服务

微信扫码:38315

·获取博文视点学院20元付费内容抵扣券

·获取本书配套500+分钟的视频微课,以及配套源代码

·获取免费增值资源

·加入读者交流群,与更多读者互动

·获取精选书单推荐第1章 Java网络编程入门

所有上过网的人都熟悉这样的过程:打开浏览器程序,输入一个URL地址,这个地址指向的网页就会从远程Web服务器传到客户端,然后在浏览器中显示出来。网络编程的最基础的任务就是开发像浏览器这样的客户程序,以及像Web服务器这样的服务器程序,并且使两者能有条不紊地交换数据。

张三给李四邮寄一封信,张三不必亲自把信送到李四家里,送信的任务由邮政网络来完成。张三只需提供李四的地址,邮政网络就会准确地把这封信送达目标地址。同样,服务器程序与客户程序只需关心发送什么样的数据给对方,而不必考虑如何把这些数据传输给对方,传输数据的任务由计算机网络来完成,如图1-1所示。图1-1 计算机网络负责传输通信数据

由此可见,网络应用程序建立在计算机网络的基础上。本章介绍了计算机网络的一些基本概念,重点介绍了网络的分层思想和TCP/IP。最后以EchoServer和EchoClient为例,介绍如何利用套接字创建简单的Java服务器程序和Java客户程序。1.1 进程之间的通信

进程指运行中的程序,进程的任务就是执行程序中的代码。以下例程1-1的EchoPlayer类是一个独立的Java程序,它可以在任意一台安装了JDK的主机上运行。EchoPlayer类不断读取用户从控制台输入的任意字符串XXX,然后输出echo:XXX。如果用户输入的字符串为“bye”,就结束程序。例程1-1为EchoPlayer类的源代码。例程1-1 EchoPlayer.java

运行“java EchoPlayer”命令,就启动了EchoPlayer进程,该进程执行EchoPlayer类的main()方法。图1-2演示了EchoPlayer进程的运行过程,它从本地控制台中获得标准输入流和标准输出流。本地控制台为用户提供了基于命令行的用户界面,用户通过控制台与EchoPlayer进程交互。图1-2 EchoPlayer进程的运行过程确切地说,运行“java EchoPlayer”命令,就启动了一个Java虚拟机(Java Virtual Machine,JVM)进程,该进程执行EchoPlayer类的main()方法。本书为了叙述方便,把运行EchoPlayer类的main()方法的JVM进程直接称为EchoPlayer进程。

EchoPlayer类的echo(String msg)方法负责生成响应结果。如果需要把生成响应结果的功能(即echo(String msg)方法)移动到一个远程主机上,那么上面的EchoPlayer类无法满足这一需求。在这种情况下,要创建两个程序:客户程序EchoClient和服务器程序EchoServer。EchoClient程序有两个作用:

·与用户交互,从本地控制台获得标准输入流和标准输出流。

·与远程的EchoServer通信,向EchoServer发送用户输入的字符串,接收EchoServer返回的响应结果,再把响应结果写到标准输出流。

EchoServer程序负责接收EchoClient发送的字符串,然后把响应结果发送给EchoClient。图1-3演示了EchoClient与EchoServer的通信过程。客户机和远程服务器是通过网络连接的两台主机。客户机上运行EchoClient进程,远程服务器上运行EchoServer进程。图1-3 EchoClient与EchoServer通信

张三给李四打电话,两者顺利通话的前提条件是他们各自的电话机都连接到了电话网络上。张三和李四只需关注他们谈话的具体内容,而不必考虑如何把自己的话音传输到对方的电话机上。传输语音信息的任务是由电话网络来完成的。

同样,两个进程顺利通信的前提条件是它们所在的主机都连接到了计算机网络上。EchoClient与EchoServer只需关注它们通信的具体内容,例如EchoClient发送信息“hello”,那么EchoServer返回信息“echo:hello”。EchoClient和EchoServer都无须考虑如何把信息传输给对方。传输信息的任务是由计算机网络来完成的。

Java开发人员的任务是编写EchoClient和EchoServer程序,接下来在两台安装了JDK的主机上分别运行它们,两个进程就会有条不紊地通信。

由于进程之间的通信建立在计算机网络的基础上,Java开发人员有必要对计算机网络有基本的了解,这有助于更容易地掌握Java网络编程技术。1.2 计算机网络的概念

计算机网络是现代通信技术与计算机技术相结合的产物。所谓计算机网络,指把分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统。在计算机网络上,众多计算机可以方便地互相通信,共享硬件、软件和数据信息等资源。通俗地说,计算机网络就是通过电缆、电话线或无线通信设施等互联的计算机的集合。

网络中每台机器称为节点(Node)。大多数节点是计算机,此外,打印机、路由器、网桥、网关和哑终端等也是节点。在本书中,用“节点”指代网络中的任意一个设备,用“主机”指代网络中的计算机节点。

如图1-4所示,人与人之间通过某种语言来交流,网络中的主机之间也通过“语言”来交流,这种语言称为网络协议,这是对网络协议的通俗解释,1.3节还会更深入地介绍网络协议的概念。图1-4 网络协议是网络中主机之间通信的语言

网络中的每个主机都有地址,它是用于标识主机的字节序列。字节序列越长,可以表示的地址数目就越多,这意味着可以有越多的设备连入网络。

按照计算机联网的区域大小,可以把网络分为局域网(Local Area Network,LAN)和广域网(Wide Area Network,WAN)。局域网指在一个较小地理范围内的各种计算机互联在一起的通信网络,可以包含一个或多个子网,通常局限在几千米的范围之内。例如在一个房间、一座大楼,或是在一个校园内的网络可称为局域网。广域网连接地理范围较大,常常是一个国家或是一个洲,是为了让分布较远的各局域网互联。

Internet是由许多小的网络互联成的国际性大网络,在各个小网络内部使用不同的协议,那么如何使不同的网络之间能进行信息交流呢?如图1-5所示,上海人讲上海方言,广东人讲广东方言,上海人与广东人用普通话沟通。与此相似,不同网络之间的互联靠网络上的标准语言—TCP/IP。如图1-6所示,一个网络使用协议A,另一个网络使用协议B,这两个网络通过TCP/IP进行互联。1.4节对TCP/IP做了进一步介绍。图1-5 上海人与广东人用普通话沟通图1-6 不同的网络通过TCP/IP互联1.3 OSI参考模型

在计算机网络产生之初,每家计算机厂商都有一套自己的网络体系结构,它们之间互不相容。为此,国际标准化组织(International Organization for Standization,ISO)在1979年建立了一个分委员会,来专门研究一种用于开放系统互联(Open System Interconnection,OSI)的体系结构,“开放”这个词意味着:一个网络系统只要遵循OSI模型,就可以和位于世界上任何地方的、也遵循OSI模型的其他网络系统连接。这个分委员会提出了OSI参考模型,它为各种异构系统互联提供了概念性的框架。

OSI参考模型把网络分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,如图1-7所示。每一层都使用下层提供的服务,并为上层提供服务。图1-7 OSI参考模型的分层结构

不同主机之间的相同层称为对等层。例如主机A中的表示层和主机B中的表示层互为对等层,主机A中的会话层和主机B中的会话层互为对等层。

OSI参考模型中各层的主要功能如下。(1)物理层(Physical Layer)

传输信息离不开物理介质,如双纽线和同轴电缆等,但物理介质并不在OSI的7层之内,有人把物理介质当作OSI的第零层。物理层的任务就是为它的上一层提供物理连接,以及规定通信节点之间的机械和电气等特性,如规定电缆和接头的类型、传送信号的电压等。在这一层上,数据作为原始的比特(bit)流被传输。本层的典型设备是集线器(Hub)。(2)数据链路层(Data Link Layer)

数据链路层负责在两个相邻节点间的线路上,无差错地传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。数据链路层要负责建立、维持和释放数据链路的连接。在传送数据时,如果接收方检测到所传数据中有差错,就要通知发送方重发这一帧。本层的典型设备是交换机(Switch)。(3)网络层(Network Layer)

在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多个通信子网。网络层的任务就是选择合适的网间路由和交换节点,确保数据被及时地传送到目标主机。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,包头中含有逻辑地址信息——源主机和目标主机的网络地址。本层的典型设备是路由器(Router)。

如图1-8所示,主机A发送的数据先后经过节点1和节点4,最后到达主机B。相邻两个节点之间的线路被称为数据链路,比如主机A与节点1、节点1与节点4,以及节点4与主机B之间的线路。数据链路层负责数据链路上的数据传输。从主机A到主机B的整个路径被称为路由,网络层负责选择合适的路由。图1-8 从主机A到主机B的路由以及数据链路(4)传输层(Transport Layer)

该层的任务是根据通信子网的特性来充分利用网络资源,为两个端系统(也就是源主机和目标主机)的会话层提供建立、维护和取消传输连接的功能,以可靠方式或者不可靠方式传输数据。所谓可靠方式,指保证把源主机发送的数据正确地送达目标主机;所谓不可靠方式,则指不保证把源主机发送的数据正确地送达目标主机,数据有可能丢失,或出错。在这一层,信息的传送单位是报文。(5)会话层(Session Layer)

这一层也可以被称为会晤层或对话层,在会话层及以上层次中,数据传送的单位不再另外命名,统称为报文。会话层管理进程之间的会话过程,即负责建立、管理、终止进程之间的会话。会话层还通过在数据中插入校验点来实现数据的同步。(6)表示层(Presentation Layer)

表示层对上层数据进行转换,以保证一个主机的应用层的数据可以被另一个主机的应用层理解。表示层的数据转换包括对数据的加密、解密、压缩、解压和格式转换等。(7)应用层(Application Layer)

应用层确定进程之间通信的实际用途,以满足用户实际需求。浏览Web站点、收发E-mail、上传或下载文件以及远程登入服务器等都可以看作是进程之间通信的实际用途。

如图1-9所示,当源主机向目标主机发送数据时,在源主机方,数据先由上层向下层传递,每一层都会给上一层传递来的数据加上一个信息头(header),然后向下层发出,最后通过物理介质传输到目标主机。在目标主机方,数据再由下层向上层传递,每一层都先对数据进行处理,把信息头去掉,再向上层传输,最后到达最上层,就会还原成实际的数据。各个层加入的信息头有着不同的内容,比如网络层加入的信息头中包括源地址和目标地址信息;传输层加入的信息头中包括报文类型、源端口和目标端口、序列号和应答号等信息。在图1-9中,AH、PH、SH、TH、NH和DH分别表示各个层加入的信息头,数据链路层还会为数据加上信息尾DT。图1-9 数据在上下层之间的封装和解封装过程

在生活中,也常常采用这种方式来传输实际物品。比如张三给李四邮寄一封信,真正要传输的内容是信。为了保证信能正确到达目的地,在发送时,需要把信封装到一个信封中,上面写上发信人和收信人地址。接收方收到了被封装的信,需要拆开信封,才能得到里面的信。

OSI参考模型把网络分为多个层次,每个层次都有明确的分工,这简化了网络系统的设计过程。例如在设计应用层时,只需考虑如何创建满足用户实际需求的应用,在设计传输层时,只需考虑如何在两个主机之间传输数据,在设计网络层时,只需考虑如何在网络上找到一条发送数据的路径,即路由。

对等层之间互相通信需要遵守一定的规则,如通信的内容和通信的方式,这种规则被称为网络协议(Protocol)。值得注意的是,OSI参考模型并没有具体的实现方式,它没有在各层制定网络协议,但它为其他计算机厂商或组织制定网络协议提供了参考框架。网络的各个层次都有相应的协议,以下归纳了OSI各个层的一些典型协议,这些协议均由第三方提供。

·物理层协议:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

·数据链路层协议:HDLC、PPP、IEEE 802.3/802.2等。

·网络层协议:IP、IPX、ICMP、IGMP、AppleTalk DDP等。

·传输层协议:TCP、UDP、SPX等。

·会话层协议:NetBIOS、RPC、NFS、AppleTalk等。

·表示层协议:ASCII、GIF、JPEG、MPEG等。

·应用层协议:TELNET、FTP、HTTP、SNMP、SMTP等。1.4 TCP/IP参考模型和TCP/IP

国际标准化组织ISO制订的OSI参考模型提出了网络分层的思想,这种思想对网络的发展具有重要的指导意义。但由于OSI参考模型过于庞大和复杂,所以它难以被投入实际运用中。与OSI参考模型相似的TCP/IP参考模型吸取了网络分层的思想,但是对网络的层次做了简化,并且在网络各层(除主机-网络层外)都提供了完善的协议,这些协议构成了TCP/IP集,简称TCP/IP。TCP/IP是目前最流行的商业化协议,它是当前的工业标准或“事实标准”,TCP/IP主要用于广域网,在一些局域网中也有运用。

TCP/IP参考模型是美国国防部高级研究计划局计算机网(Advanced Research Project Agency Network,ARPANET)以及后来的Internet使用的参考模型。ARPANET是由美国国防部(U.S.Department of Defense,DoD)赞助的研究网络。最初,它只连接了美国境内的四所大学。在随后的几年中,它通过租用的电话线连接了数百所大学和政府部门。最终,ARPANET发展成为全球规模最大的互联网络——Internet。最初的ARPANET则于1990年永久关闭。图1-10把TCP/IP参考模型和OSI参考模型进行了对比。图1-10 比较TCP/IP参考模型和OSI参考模型

TCP/IP参考模型分为4个层次:应用层、传输层、网络互联层和主机-网络层。每一层都有相应的协议。确切地说,TCP/IP应该被称为TCP/IP集,它是TCP/IP参考模型的除主机-网络层以外的其他三层的协议的集合,而IP和TCP则是协议集的最核心的两个协议。表1-1列出了各层的主要协议,其中主机-网络层的协议是由第三方提供的。表1-1 TCP/IP参考模型的各层的主要协议

在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层,这两层的功能被合并到应用层,同时将OSI参考模型中的数据链路层和物理层合并到主机-网络层。下面分别介绍各层的主要功能。(1)主机-网络层

实际上TCP/IP参考模型没有真正提供这一层的实现,也没有提供协议。它只是要求第三方实现的主机-网络层能够为上层——网络互联层提供一个访问接口,使得网络互联层能利用主机-网络层来传递IP数据包。

美国电气及电子工程师学会(Institute of Electrical and Electronics Engineer,IEEE)制定了IEEE802.3和IEEE802.4协议集,它们位于OSI参考模型的物理层和数据链路层,相当于位于TCP/IP参考模型的主机-网络层。采用IEEE802.3协议集的网络被称为以太网,采用IEEE802.4协议集的网被称为令牌环网。以太网和令牌环网都向网络互联层提供了访问接口。(2)网络互联层

网络互联层是整个参考模型的核心。它的功能是把IP数据包发送到目标主机。为了尽快地发送数据,把原始数据分为多个数据包,然后沿不同的路径同时传递。如图1-11所示,由主机A发出的原始数据被分为3个数据包,然后沿不同的路径到达主机B,可谓殊途同归。数据包到达的先后顺序和发送的先后顺序可能不同,这就需要上层——传输层对数据包重新排序,还原为原始数据。图1-11 3个数据包沿不同的路径到达主机B

网络互联层具备连接异构网的功能。图1-12展示了其连接以太网和令牌环网的方式。以太网和令牌环网是不同类型的网,两者有不同的网络拓扑结构。以太网和令牌环网都向网络互联层提供了统一的访问接口,访问接口向网络互联层隐藏了下层网络的差异,使得两个网络之间可以顺利传递数据包。图1-12 网络互联层连接以太网和令牌环网

网络互联层采用的是IP(Internet Protocol),它规定了数据包的格式,并且规定了为数据包寻找路由的流程。(3)传输层

传输层的功能是使源主机和目标主机上的进程可以进行会话。在传输层定义了两种服务质量不同的协议,即传输控制协议(Transmission Control Protocol,TCP)和用户数据报协议(User Datagram Protocol,UDP)。TCP是一种面向连接的、可靠的协议。它将源主机发出的字节流无差错地发送给互联网上的目标主机。在发送端,TCP负责把从上层传送下来的数据分成报文段并传递给下层。在接收端,TCP负责把收到的报文进行重组后递交给上层。TCP还要处理端到端的流量控制,以避免接收速度缓慢的接收方没有足够的缓冲区来接收大量数据。应用层的许多协议,如HTTP(Hyper Text Transfer Protocol)、FTP(File Transfer Protocol)和TELNET协议等都建立在TCP基础上。

UDP是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。UDP不能保证数据报的接收顺序同发送顺序相同,甚至不能保证它们是否全部到达目标主机。应用层的一些协议,如SNMP和DNS协议就建立在UDP基础上。如果要求可靠的传输数据,则应该避免使用UDP,而要使用TCP。(4)应用层

TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。针对各种各样的网络应用,应用层引入了许多协议。基于TCP的应用层协议主要包括以下几类。

·FTP:文件传输协议,允许在网络上传输文件。

·Telnet:虚拟终端协议,允许从主机A登入远程主机B,使得主机A充当远程主机B的虚拟终端。

·HTTP:超文本传输协议,允许在网络上传送超文本,本书第5章(创建非阻塞的HTTP服务器)对此做了进一步介绍。

·HTTPS(Secure Hypertext Transfer Protocol):安全超文本传输协议,允许在网络上安全地传输超文本,网上传输的是经过加密的数据,到达目的地后再对数据解密。

·POP3(Post Office Protocol-Version 3):邮局协议-版本3,允许用户在客户程序中访问在远程服务器上的电子邮件。

·IMAP4(Internet Message Access Protocol Version 4):Internet消息访问协议-版本4,允许用户访问和操纵远程服务器上的邮件和邮件夹。IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是不是要下载此邮件,还可以在服务器上创建或更改文件夹或邮箱,删除邮件或检索邮件的特定部分。在POP3中,邮件是被保存在服务器上的,当用户阅读邮件时,所有内容都会被立刻下载到用户的机器上。IMAP4服务器可以被看作是一个远程文件服务器,而POP3服务器可以被看作是一个存储转发服务器。

·SMTP(Simple Mail Transfer Protocol):简单邮件传送协议,是发送电子邮件的协议。

基于UDP的应用层协议主要包括:SNMP(Simple Network Management Protocol),即网络管理协议,为管理本地和远程的网络设备提供了一个标准化途径,是分布式环境中的集中化管理协议;DNS(Domain Name System),即域名系统协议,把主机的域名转换为对应的IP地址。1.4.1 IP

IP网络(即在网络层采用IP的网)中的每台主机都有唯一的IP地址,IP地址用于标识网络中的每个主机。IP地址分为IPv4和IPv6。(1)IPv4

用32位的二进制序列来表示主机地址。为了便于在上层应用中方便地表示IP地址,可以把32位的二进制序列分为4个单元,每个单元占8位,然后用十进制整数来表示每个单元,这些十进制整数的取值范围是0~255。如某一台主机的IP地址可为192.166.3.4。

相对于IPv6,IPv4是更早期出现的IP地址形式,但现在仍然使用广泛。本书后文在默认情况下采用IPv4地址。(2)IPv6

用128位的二进制序列来表示主机地址,大大扩充了可用地址的数目,IPv6是新一代的互联网络IP地址标准。

IPv6的128位地址通常分成8段,每段为4个十六进制数。例如:

以上地址比较长,不易于阅读和书写。零压缩法可以用来缩减其长度。如果有一个段或几个连续段的值都是0,那么这些0就可以简单地以“::”来表示。上述地址可写成:

值得注意的是,这种零压缩法只能用一次。例如上例中的“ABAA”后面的“0000”就不能再次简化。这种限制的目的是为了能准确还原被压缩的0,不然就无法确定每个“::”代表多少个0。

另外,如果一个段中包含4个0,那么可以用一个0来表示。以下3个IPv6地址是等价的:

此外,段中前导的0也可以省略,因此以下两个IPv6地址是等价的:

在IPv6地址中可以嵌入IPv4地址,用IPv6和IPv4的混合体来表示。例如:

在以上地址中,“::FFFF”采用IPv6形式,“192.168.89.9”采用IPv4形式。以上地址等价于以下的IPv6地址:

IP地址的组成

下面以IPv4为例,介绍IP地址的组成。IP地址由两部分组成:IP网址和IP主机地址。IP网址表示网络的地址,IP主机地址表示网络中的主机的地址。网络掩码用来确定IP地址中哪部分是网址,哪部分是主机地址。

网络掩码的形式与IP地址相同,但有一定的限制。在网络掩码的二进制序列中,前面部分都为1,后面部分都为0。假定IP地址192.166.3.4的网络掩码为255.255.255.0。这个网络掩码的二进制序列为11111111.11111111.11111111.00000000。把网络掩码与IP地址进行二进制与操作,得到的结果就是IP网址。因此,IP地址192.166.3.4的网址为192.166.3.0。如果把网络掩码设为255.255.0.0,那么IP网址为192.166.0.0。在Internet上,每个主机都必须有全球范围内唯一的IP地址。国际机构NIC(Internet Network Information Center)统一负责全球地址的规划和管理,与此同时,InterNIC、APNIC、RIPE和CNNIC等机构具体负责美国及全球其他地区的IP地址分配。中国地区的IP地址分配由CNNIC机构负责。

图1-13展示了两个互联的网络的配置,从该图可以看出,每个网络都有IP网址,两个网络之间用路由器连接。图1-13 每个IP网络都有自己的网址,通过路由器与其他网络连接

子网划分

一个公司可能拥有一个网址和多个主机。例如,如果网址为16192.166.0.0,则可以有2(即65536)个主机加入网中。为了更好地管理网络,提高网络性能和安全性,可以把网络划分为多个子网。子网可包括某地理位置内(如某大楼或相同局域网中)的所有主机。例如对于网址为“192.166.0.0”的网络,可从整个网络中分出3个子网,这3个子网的网址分别为:192.166.1.0,192.166.2.0和192.166.3.0,这些子网的掩码都为255.255.255.0。

发送数据包的过程

IP是面向包的协议,即数据被分成若干小数据包,然后分别传输它们。IP网络上的主机只能直接向本地网上的其他主机(也就是具有相同IP网址的主机)发送数据包。主机实际上有两个不同性质的地址:物理地址和IP地址。物理地址是由主机上的网卡来标识的,物理地址才是主机的真实地址。如图1-14所示,主机A向同一个网络上的另一个主机B发包时,会通过地址解析协议(Address Resolution Protocol,ARP)获得对方的物理地址,然后把包发给对方。ARP的运行机制为主机A在网络上广播一个ARP消息:“要寻找地址为192.166.3.5的主机”,接着,具有这个IP地址的主机B就会做出响应,把自身的物理地址告诉主机A。图1-14 在同一个网络中,主机A直接向主机B发送IP数据包

当主机A向另一个网络上的主机B发送包时,主机A利用ARP找到本地网络上的路由器的物理地址,把包转发给它。路由器会按照如下步骤处理数据包。(1)如果数据包的生命周期已到,则该数据包被抛弃。(2)搜索路由表,优先搜索路由表中的主机,如果能找到具有目标IP地址的主机,则将数据包发送给该主机。(3)如果匹配主机失败,则继续搜索路由表,匹配同子网的路由器,如果找到匹配的路由器,则将数据包转发给该路由器。(4)如果匹配同子网的路由器失败,则继续搜索路由表,匹配同网络的路由器,如果找到匹配的路由器,则将数据包转发给该路由器。(5)如果以上匹配操作都失败,就搜索默认路由,如果默认路由存在,则按照默认路由发送数据包,否则丢弃数据包。

从以上路由器的处理步骤可以看出,IP并不保证一定把数据包送达目标主机,在发送过程中,会因为数据包结束生命周期,或者找不到路由而丢弃数据包。

域名

虽然IP地址能够唯一标识网络上的主机,但IP地址是数字型的,用户记忆数字型的IP地址很不方便,于是人们又发明了另一种字符型的地址,即所谓的域名(Domain Name)。域名地址具有易于理解的字面含义,便于记忆。IP地址和域名一一对应。例如JavaThinker网站的域名为www.javathinker.net,对应的IP地址为:43.247.68.17。

域名是从右至左来表述其意义的,最右边的部分为顶层域,最左边的则是这台主机的机器名称。域名一般可表示为:主机机器名.单位名.网络名.顶层域名。如:mail.xyz.edu.cn,这里的mail是xyz学校的一个主机的机器名,xyz代表一个学校的名字,edu代表中国教育科研网,cn代表中国,顶层域一般是网络机构或所在国家地区的名称缩写。

DNS(Domain Name System)协议采用DNS服务器提供把域名转换为IP地址的服务。DNS服务器分布在网络的各个地方,它们存放了域名与IP地址的映射信息。用户需要访问网络上某个主机时,只需提供主机直观的域名,DNS协议首先请求地理位置比较近的DNS服务器进行域名到IP地址的转换,如果在该服务器中不存在此域名信息,那么DNS协议再让远方的DNS服务器提供服务。

URL(统一资源定位器)

URL(Uniform Resource Locator),即统一资源定位器。它是专为标识网络上资源位置而设的一种编址方式,大家熟悉的网页地址就属于URL。URL一般由3部分组成:

应用层协议://主机IP地址或域名/资源所在路径/文件名

例如JavaThinker网站提供的JDK安装软件包的URL为:

其中“http”指超文本传输协议,“www.javathinker.net”是Web服务器的域名,“software”是文件所在路径,“jdk8.exe”才是相应的文件。

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载