网络编程(一)

前言

什么是网络编程?

1、宏观上,比较笼统的定义:

百度百科:

网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。

网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。

中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,网页设计、开发工具、服务器架设、

代码、数据库这5部分你都要接触。

比较官方,难以理解。

涉及的方面:前端编程,后端代码开发、数据包(数据传输的方式,以约定好的协议进行打包、解压数据)、协议(TCP/IP协议);至于数据如何在网线等物理组件或无线网络中传播,就更不是我需要明白的了。所有的这一切都是为实现数据传输服务的。

以我的理解,之所以有网络编程,是互联网的产生,催生了网络编程。如果机器(一台主机)只是自己工作(就好比是单机游戏),不需要与外界的机器进行数据交互,网络编程自然也就不会出现。不同的机器需要进行数据交互,只有约定好数据传输的格式,双方才能听得懂。而作为一名程序开发人员,我需要知道的阶段就是应用层的信息交互如何实现。

2、微观上,来说下自己查阅资料及自己的理解:

网络编程的本质是实现两个设备之间的数据交换。

当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据,难的是在庞杂的设备中,如何以一种大家都遵守的约定,来安全的传输数据(TCP/IP协议,当然这都不需要我们关心,已经有大佬约定好了,基本上程序员都只需要会用就可以)

现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。

在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。

网络编程就是使用IP地址或域名,和端口连接到另一台计算机上对应的程序,按照规定的协议(数据格式)来交换数据,实际编程中建立连接、发送、接收数据在语言级已经实现,做的更多的工作是设计协议,以及编写生成和解析数据的代码罢了,然后把数据转换成逻辑的结构显示或控制逻辑即可。

上述只是说明了一件事:网络编程是用来进行数据交换的。

上述都是对门外汉解释,都能听懂的,下面进入java开发且切实用到的正题。

一、概念

1、涉及到网络上信息的传输,平常所写的项目中,都可以说是网络编程。

2、网络编程就是利用一门编程语言结合相应的网络接口(如在Windows或XP环境下, 利用C++语言,根据Microsoft提供的Winsock2网络编程接口,编写相关的网络程序), 进行编写关于网络方面(互联网上的数据交互)的程序,这个过程就叫做网络编程。

二、三要素

知道了什么是网路编程,那么怎么实现网络编程?这才是要掌握的重点。

三要素:IP,端口号,协议。

1、IP地址和域名

  在现实生活中,如果要打电话则需要知道对应人的电话号码,如果要寄信则需要知道收信人的地址。在网络中也是这样,需要知道一个设备的位置,则需要使用该设备的IP地址,具体的连接过程由硬件实现,程序员不需要过多的关心。

  IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只需要4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。

  由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。

  其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。

  所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。

2、端口的概念

  为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。

  规定一个设备有2的16次方个,也就是65536个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。

  使用端口号,可以找到一台设备上唯一的一个程序。

  所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。

3、协议的概念

  协议(Protocol)是网络编程中一个非常重要的概念,指的是传输数据的格式。因为大家在网络中需要传输各种各样的信息,在程序中获得到的都是一组数值,如何阅读这些数值呢,就需要提前规定好这组数据的格式,在客户端按照该格式生成发送数据,服务器端按照该格式阅读该数据,然后在按照一定的格式生成数据反馈给客户端,客户端再按照该格式阅读数据。现实中类似的例子就是电报编码,每个数字都是用特定的数据表达。

  一般程序的协议都分成客户端发送的数据格式,以及服务器端反馈的数据格式,客户端和服务器端都遵循该格式生成或处理数据,实现两者之间的复杂数据交换。

4、小结

理解了网络编程的概念及宏观的实现原理,需要掌握的是:

  • TCP/IP协议的简单工作原理
  • 在开发中怎么使用

下面对网络编程中的数据传输协议和java开发中如何使用做详细说明。

三、TCP/IP协议

TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换。所谓“协议”可以理解成机器之间交谈的语言,每一种协议都有自己的目的。TCP/IP模型一共包括几百种协议,对互联网上交换信息的各个方面都做了规定。

这些协议可以大致分成四个层次,上一层的协议都以下一层的协议为基础,从上到下的四层,应用层(Application Layer)、传输层(Transport Layer)、网络层(Internet Layer)、网络接口层(Link Layer)。

可以这样理解它们的作用:

1)应用层负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP、FTP等;

2)传输层负责传送文本数据,主要协议是TCP协议;

3)网络层负责分配地址和传送二进制数据,主要协议是IP协议;

4)网络接口层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等等;

现在通用的就是CP/IP四层结构的协议。

1、TCP/IP模型:

【1】应用层:http协议

【2】传输层:TCP协议,UDP协议

【3】网络层:IP协议

【4】链路层:PPP协议

2、OSI模型:

【1】应用层

【2】表示层

【3】会话层

【4】传输层

【5】网络层

【6】数据链路层

【7】物理层

3、OSI七层模型和TCP/IP四层模型详解

OSI七层模型:

①物理层:

包括物理传输介质,任何网络都必须使用传输介质来发送和接收信号,这些信号构成了网络通信的物理表示。物理层的任务就是建立、维持和断开网络连接。发送方发起一个通过网络介质传输数据的连接,接收方响应建立连接的请求,接收或拒绝连接请求。物理层一个简单概貌就是,它关注网络硬件以及支持硬件访问某种网络介质的连接。

物理层管理网络介质到协议栈的通信,把计算机的出栈数据转换为网络所用的信号,对于入栈消息来说,把来自网络介质的信号转换为计算机网卡接受的比特位。

物理层的PDU成为比特位。

②数据链路层:

它的任务是,确保在发送方实现物理层数据的可靠传输,在接收方检验所收到数据的可靠性,数据链路层也管理跨网络介质的、从一台计算机到另一台计算机上、在单个逻辑或物理电缆段上的点对点传输。它通过唯一标识每一块网卡的专用地址,识别本地介质上的每个设备。由于数据链路层管理网卡之间的点对点通信,所以,它也处理这些网卡所插入的计算机之间的局域网连接。同时,它也处理从发送方到接收方的数据串行化,原因在于,比特位必须映射为相应的信号,一边从发送方传输到接收方,而在接收方执相反的过程。

数据链路层还能控制从发送方到接收方数据传输的节奏----这个过程称为介质流控制,当发生本地阻塞时进行响应,避免网络介质被数据流淹没,当出栈PDU可以传输时,数据链路层请求开始传输数据,并处理接收和构造入栈数据的入栈PDU。

数据链路层的PDU成为帧或数据帧。

eg: ATM  FDDI....

③网络层

处理网络位置标记的地方,也是处理PDU从发送方发往接收方所蕴含的复杂性的地方。所以,网络层处理网络上与每个机器相关的逻辑寻址问题。当数据流的源地址和目标地址不在网络上的同一个物理段时,网络层也使用寻址信息来确定如何把PDU从发送方传递到接收方。网络层的主要功能是对Internet上的每一台主机提供一个全球唯一的地址,并提供主机之间的通信路径。

网络层也具体化了不同IP地址之间多个并发连接的表示方法,因此,多个应用程序能够同时保持网络连接。网络层能够识别一个网络连接属于计算机上的哪一个进程或应用程序,不仅可以把数据流从发送方正确的传递到接收方,还可以把能够入栈的数据传递给接收方计算机上的特定进程或应用程序。

使用一个或多个路由,把单个PDU从发送方转发或中继给接收方的技术成为分组交换,这也正是网络层以每个PDU为基础进行转发和中继的原因。事实上,网络层对于与路由相关的延迟也是敏感的,在从发送方往接收方转发数据的同时,能够管理通过这些路由的数据流,这个过程称为阻塞控制,它用于当网络上发生大量活动时避免过载。

网络层的PDU成为数据包。

eg: IP  IPX.....

④传输层:

它的任务就是确保从发送方到接收方PUD可靠的端到端传输,所以,传输层通常包含了端到端的错误检测和错误恢复数据。这些数据通常作为传输层PDU尾部的一部分进行打包,在数据传输之前和传输之后计算一个成为校验和的特殊值,之后进行对比,如果发送的校验和与本地计算的校验和一致,那么可以认为成功传输,否则,当检测到错误时,传输层的某个协议将请求PDU重新传输。

从发送方到接收方可以发送的数据量在长度上不受限制,但是,从端到端能够传输数据的容器具有固定的最大长度(最大传输单元),因此,传输层也必须处理分段和重组操作。分段就是把很长的消息分为一连串的数据块,称为数据段,其中每一个数据块都表示为在发送方与接收方之间网络介质能够传送的最大数据载荷。重组就是将发送的数据块按照其原始顺序重新组织在一起,把传输的消息构成分段前的样子。

传输层具有在重组过程中请求重传所有出错PDU或丢失PDU的功能,实现可靠传递,传输层的PDU称为分段或数据段。

eg: TCP  UDP....

⑤会话层:

是在发送方和接收方之间进行通信时创建、维持、之后终止或断开连接的地方,所以,会话层允许发送方和接收方启动或停止请求回话,以及当双方之间发生拥塞时仍然能保持对话。会话层包含了一种称为检查点的机制来维持可靠会话。

检查点定义了一个最接近成功通信的点,并且定义了当发生内容丢失或损坏时需要回滚以便恢复丢失或损坏数据的点。同样,会话层还定义了当会话出现不同步时,需要重新同步化的机制。

会话层的主要任务是负责两个网络参与者之间进行的通信,这两者在通信过程中通常交换一些列的消息或PDU。会话层的PDU有各种类型,统称为会话PDU或SPDU。

eg: RPC  SQL....

⑥表示层:

管理在网络上(从其往下到协议栈)以及在特定机器或应用程序上(从其往上到协议栈)的数据的表示方式。这使得完全不同类型的计算机(它们可能是用不同的方式表示数值和字符)能够跨网络进行相互通信。

在表示层还有一种特殊的操作系统驱动程序,有的称为重定向器,有的称为网络外壳,不管是什么,它的作用就是把对网络资源的请求和对本地资源的请求区分开来,并把这样的请求重定向到恰当的本地子系统或远程子系统上。这样,计算机无需辨别要访问资源的类型,就能够使用单个子系统访问各种资源,不管这些资源是在本地计算机上还是在跨网络的远程计算机上。

表示层也能够为应用程序提供特殊的数据处理工能,包括协议转换、数据加密、解密、数据压缩或解压缩。对于这类型的服务,无论发送方的表示层做了什么,接收方的表示层都必须予以复原,从而使连接的双方在某个时刻分享相似的数据视图。表示层的PDU也有各种类型,统称为PDU。

eg: 加密  SACll.....

⑦应用层:

应用层定义的是应用程序用于请求网络服务的接口,而不是直接指向应用程序本身。因此,应用层主要定义了应用程序能够从网络上请求使用的几种类型的服务,并且规定了从应用程序接收消息或向应用程序发送消息时,数据所必须采用的格式。应用层的PDU也统称为PDU。

eg: HTTP FTP SNMP.....

TCP/IP四层模型

①网络接口层:

它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。

网络接口层最重要的协议是PPP协议(点对点协议),PPP用于在两个网络设备之间创建一个直接的连接。PPP可以提供连接认证以识别双方的身份,应用加密技术进行传输以实现保密,应用压缩技术以减少传输的数据量(在接收端都必须进行解码和解压缩),PPP只提供检错而不纠错。

②互联网层:TCP/IP互联网层协议处理跨越多个网络的机器之间的路由问题,它也管理网络名称和地址,以利于解决路由问题。更具体地说,互联网层处理TCP/IP有以下三个基本任务:

(1)MTU分块:当路由将数据从一种类型的网络运送到另一种类型的网络时,网络能够承载的最大数据块(MTU)就可能发生变化,当数据从支持较大MTU的介质移动到支持较小MTU的介质时,这一数据就必须被缩小,以便匹配这个较小的MTU。这个任务仅仅需要一次单向转换,但它必须在数据传输的过程中完成。

(2)寻址:寻址定义了一种机制,即TCP/IP网络中的所有网卡都必须与标识没一个网卡的专用的、唯一的比特位模式相对应,这个比特位模式也标识了网卡所属的网络。

(3)路由:路由定义了将数据从发送方转发给接收方的机制,在从发送方到接收方的转发过程中,可能需要数个中间中继过程。这一功能不仅包含在成功传递的过程中,而且还提供了跟踪传递性能的方法,以及在发生传递失效时报告错误的方法,否则就会发生障碍

互联网层的协议:IP ICMP ARPRARP RIP OSPF BGP...

 IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。

IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。

③传输层:这一层提供了从一台主机到另一台主机的数据移动。传输层协议提供的基本功能包括从发送方到接收方数据的可靠传输,还提供传输前必要的出战消息分段,以及在把数据交付给应用层之前重组分段的功能。

传输层的协议:TCP  UDP

④应用层:对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等

模型比较:

相同点:

(1)OSI参考模型和TCP/IP参考模型都采用了层次结构的概念;(2)都能够提供面向连接和无连接两种通信服务机制;

不同点:

(1)前者是七层模型,后者是四层结构;

(2)对可靠性要求不同(后者更高);

(3) OSI模型是在协议开发前设计的, 具有通用性.TCP/IP是先有协议集然后建立模型, 不适用于非TCP/IP网络;

(4)实际市场应用不同(OSI模型只是理论上的模型,并没有成熟的产品,而TCP/IP已经成为“实际上的国际标准”)。

详见链接:https://www.cnblogs.com/vole/p/12118767.html

四、分层与分类

1、分类

传输层以下的编程技术,一般来说是用汇编、C语言这一类与底层结合很紧密的编程语言。比如,基本的路由器编程、网络层数据交换技术编程等。

传输层以上的编程技术,基本是在应用级别,几乎可以使用现代所有高级编程语言和高级编程脚本中涉及网络通信的部分来实现。

从机制上来说,可以分为socket编程、XML-RPC编程、REST编程等;

从架构上来说,可以分为BS(Browser/Server)编程、CS(Client/Server)编程等。

各种编程语言对这些分类几乎都是支持的。但是不同的编程语言在不同的方面有自己的优势,比如C语言在Socket编程上有最直接的实现;Java和.NET等对XML-RPC编程封装的很好;PHP、Python、Perl等高级脚本语言在实现REST编程上较为简便;HTML/CSS/Javascript的组合是Browser端编程最常用的方式等。

C/S模式和B/S各有其有点也各有其缺点,B/S模式在开发中需要考虑数据如何从客户端提交到服务器端,数据又如何返回到客户端,这些是B/S模式所特有的。

五、Socket

1、详细定义参看链接:

https://www.cnblogs.com/vole/p/12119718.html;从广义上介绍了Socket。本文只说TCP/IP协议中对socket应用。

实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。

2、概念

      套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。就相当于电话机,是客户端与服务器建立连接用的。

      应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。(有IP与端口)

3、建立socket连接

 建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

六、BS编程与CS编程(与Socket相关)

1、概述

C/S架构中,是需要安装客户端的,必要得到一对对客户与服务器端的socket连接。而B/S架构,基于浏览器访问,通过放松请求来访问服务器。遵从http协议,有页面,中间层和数据访问层。

C/S架构与B/S架构都是通过socket来建立客户端与服务器端的连接,但是,在C/S架构中,没有封装。通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。是两层架构。客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。

B/S架构中把socket对象封装了,通过请求来访问服务器,是三层架构。相对于二层体系结构(Client/Server构架)是由逻辑上相互分离的表示层、业务层和数据层构成。表示层向客户提供数据,业务层实施业务和数据规则,数据层定义数据访问标准。三层体系结构中的核心是组件对象模型。

在网络连接模式中,除对等网外,还有另一种形式的网络,即服务器/客户机网,Client/Server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。

B/S架构基于Http协议来进行数据的交互,而Http协议是无信任的短链接,建立连接,传输数据,断开连接,这种做法极大的提高了网络的服务效率,通常情况下,一次请求就完成了一次数据交互,对应一个业务逻辑,然后连接就断开了。这样,就能服务更多的用户,不至于请求响应等待太多时间。基于以上,互联网的架构就要满足支持海量用户的请求以及快速响应,所以互联网的架构很复杂。

B/S架构(b/s结构)即浏览器和服务器结构,是随着Internet技术的发展,对C/S结构进行改进的一种网络结构模式。WEB浏览器是客户端安装的应用软件,而服务器是安装了一些处理数据或具有某些功能的服务应用程序的计算机。B/S架构统一了客户端,将要处理数据的任务和功能集中到服务器端,简化了系统的开发、维护以及使用。我们只要在客户机上安装一个浏览器,就可以轻松的与服务器进行数据交互。B/S架构需要web服务器。通过浏览器解析等,与服务器建立连接。然后通过发送请求,与服务器进行数据的交互。

B/S架构(运行在web服务器上,学的是tomcat服务器),通过web服务器,将socket(即客户端与服务器的连接)封装了,客户端(浏览器)通过发送请求和后台(服务器)进行数据的交流,而浏览器作为客户端,遵循的是http协议。

B/S是不直接使用socket对象的,我们的servlet所跑的web服务器(servlet是运行在web服务器(容器)上的)对客户端与服务器端的连接进行了封装,在C/S的基础上,建立了统一的客户端--->浏览器,我们通过发送请求,来与服务器进行数据的交互,而大量的处理都是在服务器进行的,大大减少了对客户端的操作。

2、B/S架构

为什么要说B/S架构呢,因为现在的项目大多采用了这种编程方式,就拿准备金系统来说,就是典型的B/S架构的数据处理系统。项目采用的是SSM框架,该框架对Servlet进行了托管。这里因为是web编程,顺带简单复习了Servlet与web容器。

而我需要做的开发涉及到了信息的交互,故做了网络编程这一模块的博客整理。可以说,整块知识的整理,均是由此而来。信息交互分为两个模块:

(1)系统内部:即前台页面与后台;这里用到的就是Http协议(Http协议是建立在TCP协议的基础上的)

(2)系统间:两个系统间的信息交互。(HttpClient或直接创建Socket连接)现在终于搞清楚Socket与TCP是什么关系,什么鬼了,整个网络编程与TCP/IP协议模块其实起因都是为了搞清楚这个,结果越看不懂的越多。。。TCP协议是传输层的数据传输的协议,而Socket是对TCP/IP协议的封装。

代码的具体实现方式会在七中进行详细说明。

web服务器:如Tomcat。

Tomacat是由Apache推出的一款免费开源的Servlet容器,可实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。

Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,在处理静态Html上的能力略逊一筹。

Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能,因而深受java爱好者的喜爱,并得到了部分软件开发商的认可,和Apache一样,早已成为主流Web服务器的一种。

Tomcat VS Apache

不过在实际使用过程中,Apache和Tomcat的侧重各有不同:Apache是Web服务器,侧重于HTTP Server,但本身只支持Html静态网页,对ASP、PHP、JSP等动态网页就不行。Tomcat是应用(Java)服务器,可以认为是Apache的扩展,但它可以独立于Apache运行,支持JSP和Servlet。Apache可以单向连接Tomcat,访问Tomcat资源,反之则不行,但它们可在一台服务器上进行集成。打个比方:Apache是一辆卡车,上面可以装一些东西如html,但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。

作为小型轻量级应用服务器,Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用,但它不像Apache一样可配置,而Apache只支持静态网页,像ASP、PHP、JS等动态网页也需要Tomcat来处理。因此,人们通常将Apache和Tomcat集成到一起:如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求;因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。

在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,
那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,
servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建? 这时候tomcat用到了,
它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。相对应的web容器有很多,
比如JBOSS,WEBLOGIC等。
Tomcat是一个应用服务器。他可以运行你按照J2EE中的Servlet规范编写好的Java程序。
简单的说它是一个Web网站的运行容器,把你写好的网站放进去就可以运行。
Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,处理动态网页部分。

Servlet

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

是一种Web服务器端编程技术。
是实现了特殊接口的Java类。
由支持Servlet的Web服务器调用和启动运行。
一个Servlet负责对应的一个或一组URL访问请求,并返回相应的响应内容。

此处不再做过多的介绍,在Servlet与框架这两个模块会对这一块的知识进行详细的整理回顾。

下面进入正题,介绍B/S架构。

 B/S架构即浏览器和服务器架构模式,是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构。在这种架构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

简介

随着网络技术的发展,特别随着Web技术的不断成熟,B/S 这种软件体系结构出现了。B/S(Browser/Server)架构也被称为浏览器/服务器体系结构,这种体系结构可以理解为是对 C/S 体系结构的改变和促进。由于网络的快速发展,B/S 结构的功能越来越强大。这种结构可以进行信息分布式处理,可以有效降低资源成本,提高设计的系统性能。B/S 架构是有更广的应用范围,在处理模式上大大简化了客户端,用户只需安装浏览器即可,而将应用逻辑集中在服务器和中间件上,可以提高数据处理性能。在软件的通用性上,B/S 架构的客户端具有更好的通用性,对应用环境的依赖性较小,同时因为客户端使用浏览器,在开发维护上更加便利,可以减少系统开发和维护的成本。面向未来,连排级单位可通过掌上电脑(安卓系统),在训练场、演习场等环境下访问并使用该系统。

B/S 的特征和基本结构:

在 B/S 结构中,每个节点都分布在网络上,这些网络节点可以分为浏览器端、服务器端和中间件,通过它们之间的链接和交互来完成系统的功能任务。三个层次的划分是从逻辑上分的,在实际应用中多根据实际物理网络进行不同的物理划分。
浏览器端:即用户使用的浏览器,是用户操作系统的接口,用户通过浏览器界面向服务器端提出请求,并对服务器端返回的结果进行处理并展示,通过界面可以将系统的逻辑功能更好的表现出来。
服务器端:提供数据服务,操作数据,然后把结果返回中间层,结果显示在系统界面上。
中间件:这是运行在浏览器和服务器之间的。这层主要完成系统逻辑,实现具体的功能,接受用户的请求并把这些请求传送给服务器,然后将服务器的结果返回给用户,浏览器端和服务器端需要交互的信息是通过中间件完成的。

这里的三层架构:就是指浏览器端(前端),服务器端(其实指的是数据库服务器)(数据库),中间件(后台程序)指的是应用程序这一层,负责处理逻辑。

优势与劣势

维护和升级
软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。
成本与选择
大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置。但在服务器操作系统上,windows并不是处于绝对的统治地位。软件的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使得最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。
负荷比
由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一。

C/S特点

C/S架构是常用的两层架构,通常也称之为客户端/服务器架构。服务器运行服务端程序,客户端安装客户端软件。在此架构里服务端和客户端分别完成不同的任务,客户端处理用户的前端界面和交互操作,服务端处理后台业务逻辑和请求数据,这使得两端的通讯速度和通讯的效率大大的提高 [2] 。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:

客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。对客户端的操作系统一般也会有限制。可能适应于Win98,但不能用于win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。

区别

Client/Server是建立在局域网的基础上的。Browser/Server是建立在广域网的基础上的。
1.硬件环境不同:C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。B/S 建立在广域网之上的, 不必是专门的网络硬件环境。例如电话上网,租用设备,信息管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
2.对安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强, 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。B/S 建立在广域网之上, 对安全的控制能力相对弱,面向是不可知的用户群。
3.对程序架构不同:C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。B/S 对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上,比C/S有更高的要求。 B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统.。SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟。
4.软件重用不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 对的多重结构,要求构件相对独立的功能,能够相对较好的重用。
5.系统维护不同:系统维护在是软件生存周期中,开销大。重要C/S 程序由于整体性,必须整体考察, 处理出现的问题以及系统升级。升级难,可能是再做一个全新的系统。B/S程序由构件组成,方便构件个别的更换,实现系统的无缝升级,系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
6.处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的,与操作系统平台关系最小。
7.用户接口不同:C/S 多是建立的Window平台上,表现方法有限。对程序员普遍要求较高。B/S 建立在浏览器上,,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,减低开发成本。
8.信息流不同:C/S 程序一般是典型的中央集权的机械式处理,交互性相对低。B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化,更象交易中心。

技术比较

C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。国内现阶段的大部分ERP(财务)软件产品即属于此类结构。
B/S(浏览器/服务器模式)是随着Internet技术的兴起,对C/S结构的一种改进。在这种结构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只需要浏览器即可进行业务处理,是一种全新的软件系统构造技术。这种结构更成为当今应用软件的首选体系结构。e通管理系列产品即属于此类结构。
1,数据安全性比较。由于C/S结构软件的数据分布特性,客户端所发生的火灾、盗抢、地震、病毒、黑客等都成了可怕的数据杀手。另外,对于集团级的异地软件应用,C/S结构的软件必须在各地安装多个服务器,并在多个服务器之间进行数据同步。如此一来,每个数据点上的数据安全都影响了整个应用的数据安全。所以,对于集团级的大型应用来讲,C/S结构软件的安全性是令人无法接受的。对于B/S结构的软件来讲,由于其数据集中存放于总部的数据库服务器,客户端不保存任何业务数据和数据库连接信息,也无需进行什么数据同步,所以这些安全问题也就自然不存在了。
2,数据一致性比较。在C/S结构软件的解决方案里,对于异地经营的大型集团都采用各地安装区域级服务器,然后再进行数据同步的模式。这些服务器每天必须同步完毕之后,总部才可得到最终的数据。由于局部网络故障造成个别数据库不能同步不说,即使同步上来,各服务器也不是一个时点上的数据,数据永远无法一致,不能用于决策。对于B/S结构的软件来讲,其数据是集中存放的,客户端发生的每一笔业务单据都直接进入到中央数据库,不存在数据一致性的问题。
3,数据实时性比较。在集团级应用里,C/S结构不可能随时随地看到当前业务的发生情况,看到的都是事后数据;而B/S结构则不同,它可以实时看到当前发生的所有业务,方便了快速决策,有效地避免了企业损失。
4,数据溯源性比较。由于B/S结构的数据是集中存放的,所以总公司可以直接追溯到各级分支机构(分公司、门店)的原始业务单据,也就是说看到的结果可溯源。大部分C/S结构的软件则不同,为了减少数据通信量,仅仅上传中间报表数据,在总部不可能查到各分支机构(分公司、门店)的原始单据。
5,服务响应及时性比较。企业的业务流程、业务模式不是一成不变的,随着企业不断发展,必然会不断调整。软件供应商提供的软件也不是没有缺陷,所以,对已经部署的软件产品进行维护、升级是正常的。C/S结构软件,由于其应用是分布的,需要对每一个使用节点进行程序安装,所以,即使非常小的程序缺陷都需要很长的重新部署时间,重新部署时,为了保证各程序版本的一致性,必须暂停一切业务进行更新(即“休克更新”),其服务响应时间基本不可忍受。而B/S结构的软件不同,其应用都集中于总部服务器上,各应用结点并没有任何程序,一个地方更新则全部应用程序更新,可以做到快速服务响应。
6,网络应用限制比较。C/S结构软件仅适用于局域网内部用户或宽带用户(1兆以上);而我们的B/S结构软件可以适用于任何网络结构(包括33.6K拨号入网方式),特别适于宽带不能到达的地方(例如迪信通集团的某些分公司,仅靠电话上网即可正常使用软件系统)。
7,存储模式比较。B/S结构相应数据完全来自于后台数据库,而C/S结构部分数据来源于存储在本地的临时文件,剩余的部分来源于数据库,因此C/S结构响应时间会更快。

商业比较

1,投入成本比较。B/S结构软件一般只有初期一次性投入成本。对于集团来讲,有利于软件项目控制和避免IT黑洞,而C/S结构的软件则不同,随着应用范围的扩大,投资会连绵不绝。
2,硬件投资保护比较。在对已有硬件投资的保护方面,两种结构也是完全不同的。当应用范围扩大,系统负载上升时,C/S结构软件的一般解决方案是购买更高性能的服务器;而B/S架构则是通过增加服务器的数量来承担更大的负载。

发展前景

C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更重要的是它不能跨平台,用c++在windows下写的程序肯定是不能在linux下跑的。而B/S模式就不同了,它不需要专门的客户端,只要浏览器,而浏览器是随操作系统就有的,方便就是他的优势了。而且,B/S是基于网页语言的、与操作系统无关,所以跨平台也是它的优势,而且以后随着网页语言以及浏览器的进步,B/S在表现能力上的处理以及运行的速度上会越来越快,它的缺点将会越来越少。比如,未来的HTML5,在图形的渲染方面以及音频、文件的处理上已经非常强大了。不过,C/S架构也有着不可替代的作用。

上述内容参考百度百科。

七、应用

进行数据的交互,正是用到了这一块的东西。

现在用到有三种方式:

程序内部:B/S架构。前台页面与后台的信息交互,用到了应用层的Http协议。需要整理的包括Http协议,请求方式,前台页面的请求方式,Servlet、JSP相关知识。

系统间:HttpClient与Scoket与利用同义词进行数据交互。同义词进行数据是直接在数据库中访问其他数据库的数据。

在网络编程的其他博客中详细介绍。

posted @ 2019-12-30 18:02  慎终若始  阅读(276)  评论(0编辑  收藏  举报