一、进程通信
进程是指运行中的程序,进程的任务就是执行程序中的代码。下面的EchoPlayer类是一个独立的Java程序,它可以在任意一台安装了JDK的主机上运行。EchoPlayer类不断读取用户从控制台输入的任意字符串XXX,然后输出echo:XXX。如果用户输入的字符串为“bye”,就结束程序。EchoPlayer类的代码如下:
import java.io.*;
public class EchoPlayer {
public String echo(String msg) {
return "echo:"+msg; }
public void talk()throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String msg=null;
while((msg=br.readLine())!=null){
System.out.println(echo(msg));
if(msg.equals("bye")) //当用户输入"bye",结束程序
break;
}
}
public static void main(String arg[])throws IOException{
new EchoPlayer().talk();
}
}
运行“java EchoPlayer”命令,就启动了EchoPlayer进程,该进程执行EchoPlayer类的main()方法。图1演示了EchoPlayer进程的运行过程,它从本地控制台中获得标准输入流和标准输出流。本地控制台为用户提供了基于命令行的用户界面,用户通过控制台与EchoPlayer进程交互。

图1 EchoPlayer进程的运行过程
EchoPlayer类的echo(String msg)方法负责生成响应结果。如果需要把生成响应结果的功能(即echo(String msg)方法)移动到一个远程主机上,那么上面的EchoPlayer类无法满足这一需求。在这种情况下,要创建两个程序:客户程序EchoClient和服务器程序EchoServer。EchoClient程序有两个作用:与用户交互,从本地控制台获得标准输入流和标准输出流。与远程的EchoServer通信,向EchoServer发送用户输入的字符串,接收EchoServer返回的响应结果,再把响应结果写到标准输出流。
EchoServer程序负责接收EchoClient发送的字符串,然后把响应结果发送给EchoClient。图2演示了EchoClient与EchoServer的通信过程。客户机和远程服务器是通过网络连接的两台主机,客户机上运行EchoClient进程,远程服务器上运行EchoServer进程。

图2 EchoClient与EchoServer通信
张三给李四打电话,两者顺利通话的前提条件是他们各自的电话机都连接到了电话网络上。张三和李四只需关注他们谈话的具体内容,而不必考虑如何把自己的话音传输到对方的电话机上。传输语音信息的任务是由电话网络来完成的。
同样,两个进程顺利通信的前提条件是它们所在的主机都连接到了计算机网络上。EchoClient与EchoServer只需关注它们通信的具体内容,例如EchoClient发送信息“hello”,那么EchoServer返回信息“echo:hello”。EchoClient和EchoServer都无需考虑如何把信息传输给对方。传输信息的任务是由计算机网络来完成的。
Java开发人员的任务是编写EchoClient和EchoServer程序,接下来在两台安装了JDK的主机上分别运行它们,两个进程就会有条不紊地通信。
由于进程通信建立在计算机网络的基础上,Java开发人员有必要对计算机网络有基本的了解,这有助于更容易地掌握Java网络编程技术。
二、计算机网络
计算机网络是现代通信技术与计算机技术相结合的产物。所谓计算机网络,是指把分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统。在计算机网络上,众多计算机可以方便地互相通信、共享硬件、软件和数据信息等资源。通俗地说,计算机网络就是通过电缆、电话线、或无线通信设施等互联的计算机的集合。
网络中每台机器称为节点(node)。大多数节点是计算机,此外,打印机、路由器、网桥、网关和哑终端等也是节点。在本书中,用节点一词指代网络中的任意一个设备,用主机指代网络中的计算机节点。
如图3所示,人与人之间通过某种语言来交流,网络中的主机之间也通过“语言”来交流,这种语言称为网络协议,这是对网络协议的通俗解释,后面还会更深入地介绍网络协议的概念。

图3 网络协议是网络中主机之间通信的语言
网络中的每个主机都有地址,它是用于标识主机的一个字节序列。字节序列越长,可以表示的地址数目就越多,这意味着可以有更多的设备连入网络。
按照计算机连网的区域大小,可以把网络分为局域网(LAN,Local Area Network)和广域网(WAN,Wide Area Network)。局域网(LAN)是指在一个较小地理范围内的各种计算机互联在一起的通信网络,可以包含一个或多个子网,通常局限在几千米的范围之内。例如在一个房间、一座大楼,或是在一个校园内的网络可称为局域网。广域网(WAN)连接地理范围较大,常常是一个国家或是一个洲,其目的是为了让分布较远的各局域网互联。
到Internet海洋去冲浪,如今已成为一种时尚。Internet是指国际互联网,也叫做因特网,是全球范围内的广域网,为世界上不同类型的计算机交换数据提供了通信媒介。
Internet目前已经覆盖了160多个国家和地区,连接着几十万个子网和上千万台电脑主机,Internet的用户超过4000万。Internet上汇聚了成千上万的信息资源,成为世界上信息资源最丰富的公共计算机网络。
Internet提供的服务包括WWW(World-Wide-Web)服务、电子邮件(E-mail)服务、文件传输(FTP)服务和远程登录(Telnet)服务等,全球用户可以通过这些服务,来获取Internet上的信息或者开展各种业务。
Internet是由许多小的网络互联成的国际性大网络,在各个小网络内部使用不同的协议,那么如何使不同的网络之间能进行信息交流呢?如图4所示,上海人讲上海方言,广东人讲广东方言,上海人与广东人用普通话沟通。与此相似,不同网络之间的互联靠网络上的标准语言—TCP/IP协议。如图5所示,一个网络使用协议A,另一个网络使用协议B,这两个网络通过TCP/IP协议进行互联。

图4 上海人与广东人用普通话沟通

图5 不同的网络通过TCP/IP协议互联
三、OSI参考模型
在计算机网络产生之初,每个计算机厂商都有一套自己的网络体系结构,它们之间互不相容。为此,国际标准化组织(ISO,International Organization for Standization)在1979年建立了一个分委员会,来专门研究一种用于开放系统互联(Open System Interconnection,简称OSI)的体系结构,“开放”这个词意味着:一个网络系统只要遵循OSI模型,就可以和位于世界上任何地方的、也遵循OSI模型的其他网络系统连接。这个分委员会提出了OSI参考模型,它为各种异构系统互联提供了概念性的框架。
OSI参考模型把网络分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,参见图6。每一层使用下层提供的服务,并为上层提供服务。
不同主机之间的相同层称为对等层。例如主机A中的表示层和主机B中的表示层互为对等层,主机A中的会话层和主机B中的会话层互为对等层。

图6 OSI参考模型的分层结构
OSI参考模型中各层的主要功能如下。
1.物理层(Physical Layer)
传输信息离不开物理介质,如双纽线和同轴电缆等,但物理介质并不在OSI的7层之内,有人把物理介质当作OSI的第零层。物理层的任务就是为它的上一层提供物理连接,以及规定通信节点之间的机械和电气等特性,如规定电缆和接头的类型、传送信号的电压等。在这一层,数据作为原始的比特(bit)流传输。本层的典型设备是Hub(集线器)。
2.数据链路层(Data Link Layer)
数据链路层负责在两个相邻结点间的线路上,无差错的传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。数据链路层要负责建立、维持和释放数据链路的连接。在传送数据时,如果接收方检测到所传数据中有差错,就要通知发送方重发这一帧。本层的典型设备是Switch(交换机)。
3.网络层(Network Layer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送到目标主机。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,包头中含有逻辑地址信息—源主机和目标主机的网络地址。本层的典型设备是Router(路由器)。
如图7所示,主机A发送的数据先后经过节点1和节点4,最后到达主机B。相领两个节点之间的线路称为数据链路,比如主机A与节点1、节点1与节点4,以及节点4与主机B之间的线路都是数据链路。数据链路层负责数据链路上的数据传输。从主机A到主机B的整个路径称为路由,网络层负责选择合适的路由。

图7 从主机A到主机B的路由以及数据链路
4.传输层(Transport Layer)
该层的任务是根据通信子网的特性最佳地利用网络资源,为两个端系统(也就是源主机和目标主机)的会话层提供建立、维护和取消传输连接的功能,以可靠方式或者不可靠方式传输数据。所谓可靠方式,是指保证把源主机发送的数据正确地送达目标主机;所谓不可靠方式,则是指不保证把源主机发送的数据正确地送达目标主机,数据有可能丢失,或出错。在这一层,信息的传送单位是报文。
5.会话层(Session Layer)
这一层也可以称为会晤层或对话层,在会话层及以上层次中,数据传送的单位不再另外命名,统称为报文。会话层管理进程之间的会话过程,即负责建立、管理、终止进程之间的会话。会话层还通过在数据中插入校验点来实现数据的同步。
6.表示层(Presentation Layer)
表示层对上层数据进行转换,以保证一个主机的应用层的数据可以被另一个主机的应用程理解。表示层的数据转换包括对数据的加密、解密、压缩、解压和格式转换等。
7.应用层(Application Layer)
应用层确定进程之间通信的实际用途,以满足用户实际需求。浏览Web站点、收发E-mail、上传或下载文件以及远程登录服务器等都可以看作是进程之间通信的实际用途。
如图8所示,当源主机向目标主机发送数据,在源主机方,数据先由上层向下层传递,每一层会给上一层传递来的数据加上一个信息头(header),然后向下层发出,最后通过物理介质传输到目标主机,在目标主机方,数据再由下层向上层传递,每一层先对数据进行处理,把信息头去掉,再向上层传输,最后到达最上层,就会还原成实际的数据。各个层加入的信息头有着不同的内容,比如网络层加入的信息头中包括源地址和目标地址信息;传输层加入的信息头中包括报文类型、源端口和目标端口、序列号和应答号等。在图8中,AH、PH、SH、TH、NH和DH分别表示各个层加入的信息头,数据链路层还会为数据加上信息尾DT。

图8 数据在上下层之间的封装和解封装过程
在发送方,数据由上层向下层传递,每一层把数据封装后再传给下层;在接收方,数据由下层向上层传递,每一层把数据解封装后再传给上层。在生活中,也常常采用这种方式来传输实际物品。比如张三给李四邮寄一封信,真正要传输的内容是信,为了保证信能正确到达目的地,在发送方,需要把信封装到一个信封中,上面写上发信人和收信人地址。邮件到了接收方,需要拆开信封,才能得到里面的信件。
OSI参考模型把网络分为多个层次,每个层次有明确的分工,这简化了网络系统的设计过程。例如在设计应用层时,只需考虑如何创建满足用户实际需求的应用,在设计传输层时,只需考虑如何在两个主机之间传输数据,在设计网络层时,只需考虑如何在网络上找到一条发送数据的路径,即路由。
对等层之间互相通信需要遵守一定的规则,如通信的内容和通信的方式,这种规则称为网络协议(Protocol)。值得注意的是,OSI参考模型并没有具体的实现方式,它没有在各层制定网络协议,但它为其他计算机厂商或组织制定网络协议提供了参考框架。网络的各个层次都有相应的协议,以下归纳了OSI各个层的一些典型协议,这些协议均由第三方提供:
l 物理层协议:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
l 数据链路层协议:SDLC、HDLC、PPP、STP、帧中继等。
l 网络层协议:IP、IPX、RIP、OSPF等。
l 传输层协议:TCP、UDP、SPX等。
l 会话层协议:NetBIOS、ZIP(AppleTalk区域信息协议)等。
l 表示层协议:ASCII、ASN.1、JPEG、MPEG等。
l 应用层协议:TELNET、FTP、HTTP、SNMP等。
四、TCP/IP参考模型及协议
ISO制定的OSI参考模型提出了网络分层的思想,这种思想对网络的发展具有重要的指导意义。但由于OSI参考模型过于庞大和复杂,使它难以投入到实际运用中。与OSI参考模型相似的TCP/IP参考模型吸取了网络分层的思想,但是对网络的层次做了简化,并且在网络各层(除了主机-网络层外)都提供了完善的协议,这些协议构成了TCP/IP协议集,简称TCP/IP协议。TCP/IP协议是目前最流行的商业化协议,相对于OSI,它是当前的工业标准或“事实标准”, TCP/IP协议主要用于广域网,在一些局域网中也有运用。
TCP/IP参考模型是美国国防部高级研究计划局计算机网(Advanced Research Project Agency Network,ARPANET)以及后来的Internet使用的参考模型。ARPANET是由美国国防部(U.S.Department of Defense,DoD)赞助的研究网络。最初,它只连接了美国境内的四所大学。随后的几年中,它通过租用的电话线连接了数百所大学和政府部门。最终,ARPANET发展成为全球规模最大的互联网络—Internet。最初的ARPANET则于1990年永久关闭。图9把TCP/IP参考模型和OSI参考模型作了对比。

图9比较TCP/IP参考模型和OSI参考模型
1.TCP/IP参考模型
TCP/IP参考模型分为四个层次:应用层、传输层、网络互联层和主机-网络层。在每一层都有相应的协议。确切地说,TCP/IP协议应该称为TCP/IP协议集,它是TCP/IP参考模型的除了主机-网络层以外的其他三层的协议的集合,而IP协议和TCP协议则是协议集中最核心的两个协议。表1列出了各层的主要协议,其中主机-网络层的协议是由第三方提供的。
表1 TCP/IP参考模型的各层的协议
应用层 |
FTP、TELNET、HTTP |
SNMP、DNS |
传输层 |
TCP |
UDP |
网络互联层 |
IP |
主机-网络层 |
以太网: IEEE802.3 |
令牌环网:IEEE802.4 |
在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层,这两层的功能被合并到应用层,同时将OSI参考模型中的数据链路层和物理层合并到主机-网络层。下面分别介绍各层的主要功能。 (1)主机-网络层 实际上TCP/IP参考模型没有真正提供这一层的实现,也没有提供协议。它只是要求第三方实现的主机-网络层能够为上层—网络互联层提供一个访问接口,使得网络互联层能利用主机-网络层来传递IP数据包。
IEEE(Institute of Electrical and Electronics Engineers,美国电气及电子工程师学会)制定了IEEE802.3和IEEE802.4协议集,它们位于OSI参考模型的物理层和数据链路层,相当于位于TCP/IP参考模型的主机-网络层。采用IEEE802.3协议集的网络称为以太网,采用IEEE802.4协议集的网称为令牌环网。以太网和令牌环网都向网络互联层提供了访问接口。 (2)网络互联层
网络互联层是整个参考模型的核心。它的功能是把IP数据包发送到目标主机。为了尽快地发送数据,IP协议把原始数据分为多个数据包,然后沿不同的路径同时传递数据包。如图10所示,由主机A发出的原始数据被分为三个数据包,然后沿不同的路径到达主机B,可谓殊途同归。数据包到达的先后顺序和发送的先后顺序可能不同,这就需要上层—传输层对数据包重新排序,还原为原始数据

图10 三个数据包沿不同的路径到达主机B
|