【程序员笔试面试复习】之一 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构

9.1网络模型

9.1.1. OSI七层模型

OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式网络互联参考模型。其为国际标准组织指定的一个指导信息互联、互通和协作的网络规范。

开放是指只要遵循OSI标准,位于世界上任何地方的任何系统之间都可以进行通信,开放系统是指遵循互联协议的实际系统,如电话系统。

从逻辑上可以将OSI开放系统互联分为七层模型,由下至上分别为物理层、数据链路层。网络层、传输层、会话层、表示层和应用层。

其中,上三层称为高层,用于定义应用程序之间的通信和人机界面:下四层称为底层,用于定义数据如何进行端到端的传输(end to end),物理规范以及数据与光电信号间的转换。

七层如下:

(1)    应用层。应用层也称为应用实体,一般是指应用程序,该层主要负责确定通信对象,并确保有足够的资源用于通信,常见的应用层协议有FTP、HTTP、SNMP等。

(2)    表示层。表示层一般负责数据的编码以及转化,确保应用层能够正常工作,该层是界面与二进制代码间相互转化的地方,公式改层负责进行数据的压缩,解压,加密解密等,该层也可以根据不同的应用目的将数据处理为不同的格式,表现出来就是各种各样的文件扩展名。

(3)    会话层。会话层主要负责在网络中的两个结点之间建立、维护、控制会话,区分不同的会话,以及提供单工(Simplex)、半双工(half duplex)、全双工(Full duplex)3种通信模式的服务。NFS、RPC、X Windows等都工作在该层。

(4)    传输层。传输层是OSI模型中最重要的一层,它主要负责分割,组合数据,实现端到端的逻辑连接。数据在上三层是整体的,到了这一层开始被分割,这一层分割后的数据被称为段(Segment)。三次握手(Three-way handshake)、面向连接(Connnection-Oriented)或非面向对象(Connectionless-Oriented)的服务、流量控制(Flow control)等都发生在这一层。工作在传输层的一种服务是TCP/IP中的TCP(传输控制协议),另一项传输层服务是IPX/SPX协议集的SPX(序列包交换)。常见的传输层协议有TCP、UDP、SPX等。

(5)    网络层。网络层是将网络地址翻译为物理地址,并决定将数据从发送方路由到接收方的,主要负责管理网络地址、定位设备、决定路由,路由器就是工作在该层,上层的数据段在这一层被分割。封装后叫做包(Packer)。包有两种,一种为用户数据包(Data packets)。是上层传下来的用户数据;另一种为路由更新包(Route update o packets),是直接由路由器发出来的,用来和其他路由器进行路由信息的交换。常见的网络协议有IP、RIP、OSPF等。

(6)    数据链路层。数据链路层为OSI模型的第二层,控制物理层和网络层之间的通信,主要负责物理传输的准备,包括物理地址寻址、CRC校验、错误通知、网络拓扑、流量控制、重发等。MAC地址和交换机都工作在这一层。上层传下来的包在这一层被分割封装后叫做帧(Frame)。常见的数据链路层协议有SDLC、STP、帧中继、HDLC等。

(7)    物理层。物理层是实实在在的物理链路,它规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。它为上层协议提供了一个传输数据的物理媒介,负责将数据以比特流的方式发送、接收。常见的物理媒介有双绞线、同轴电缆等。属于物理层相关的规范有EIA/TIA RS-232、EIA/TIA RS-449、RJ-45等。

9.1.2 TCP/IP模型

TCP/IP(TransmissionControl Prorocol/Internet Protool传输控制协议,英特网互联协议)是最基本的Internet协议。由网络层的IP与传输层的TCP构成。现在人们常提到的TCP/IP并不是指TCP和IP两个具体的协议,而是指的TCP/IP协议簇。

TCP/IP定义了电子设备如何连入Internet,以及数据如何在它们之间传输的标准。它基于四层参考模型,分别是网络接口层、网际层、传输层、应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

其中网络接口层负责底层的传输,常见的协议有Ethernet 802.3、Token Ring 802.5、X.25、HDLC、PPP ATM等。网络层负责不同计算机之间的通信,一般包括IP/ICMP等内容。传输层提供应用程序间的通信,主要包括格式化信息流、提供可靠传输等。应用层用于向用户提供应用服务,如电子邮件、远程登录等。应用层协议一般有FTP、TELNET、SMTP等。属于TCP/IP协议簇的所有协议都位于该模型的上面三层。

TCP/IP并不是完全符合OSI七层模型,它的每一层都对应于OSI七层模型中的一层或者多层,图下所示的是TCP/IP四层模型和OSI七层模型对应图:

9.1.3 B/S 与C/S的区别

C/S是Client/Server(客户端/服务器端)的缩写,在C/S架构中,服务器通常采用高性能的PC、工作站或者小型机,而且采用大型数据库系统,比如SQL Server、DB2、Oracle或Sybase等。客户端需要安装专用的客户端软件。

B/S是Brower/Server(浏览器/服务器)的缩写,客户端通常只需要安装一个浏览器(Browser),如FireFox、IE、Chrome等即可,服务器安装SQL Server、DB2、Oracle或Sybase等数据库。在B/S架构中,用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,主要事务逻辑在服务器端实现。浏览器通过Web服务器同数据库进行数据交互。

具体而言,两种设计结构存在以下几个方面的区别:

(1)    硬件要求不同。C/S一般建立在专用的网络上。是小范围的网络环境:而B/S一般构建于局域网之上,不需要专门的网络硬件环境。只要能接入网络即可。在B/S架构的应用中,客户端只需要能够运行浏览器就可以了。

(2)    架构要求不同。C/S程序更加注重流程,需要对权限多次校验,对系统运行速度可以较少考虑。而B/S对安全以及访问速度需要多重的考虑,建立在需要更加优化的基础之上,比C/S有更高的要求。

(3)    安全要求不同。C/S一般面向相对固定的用户群,对系统安全的控制能力较强。一般高度机密的信息系统适宜采用C/S结构,可以通过B/S发布部分可以公开的信息。B/S构建在局域网之上,对安全的控制能力相对弱,可能面向不可知的用户。

(4)    系统维护不同。C/S程序由于整体性导致升级比较困难,可能需要重做一个全新的系统,而B/S基于构建组成,只需要进行构建局部的更换就可以实现系统的无缝升级,将系统维护的开销减小到最小,用户从网上自己下载安装就可以实现升级。

(5)    软件的重用性不同。因为整体性考虑,C/S程序中构件的重用性不如在B/S架构下的构件的重用性好。因为B/S的多重用结构,要求构件相对独立的功能,能够相对较好的重用,而C/S则很难做到这一点。

(6)    用户接口不同。C/S多是建立在操作系统平台上的,表现方法有限,而B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流,并且大部分难度较小,成本低。

9.1.4 MVC结构

MVC是模型(Model)、视图(View)和控制(Controller)这三个词的第一个字母。它是一种目前广泛流行的应用模型。它的目的是实现Web系统的职能分工。图9-3所示为MVC模型关系图。其中,模型层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现:视图层则用于与用户的交互,通常用JSP来实现:控制层则是模型与视图View之间沟通的桥梁,它可以把用户的请求分派并选择恰当的视图来显示它们,同时他也可以解释用户的输入并将其映射为模型层能够执行的操作。

MVC强制性地分离Web应用的输入、处理和输出,设计的MVC应用程序能被分成3个核心部件:模型、视图、控制器。它们各自处理自己的任务。

(1)模型(业务逻辑层)

模型表示企业数据和业务逻辑,它是应用程序的主体部分。业务流程的处理过程相对于其它层来说是黑箱操作,模型接受视图请求数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子。它从应用技术实现的角度对模型做了进一步的划分,以便充利用现有的组件,但它不能作为应用设计模型的框架,它仅仅告诉设计人员按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难,可以专注于业务模型的设计。

MVC把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断设计人员是否优秀的主要依据,抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉设计人员应该如何组织管理这些模型,以便于模型的重构和提高重用性。

业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据持续化。例如,将一张订单保存到数据库,从数据库获取订单,将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

(2)视图(表示层)

视图是用户看到并与之交互的界面,对早期的Web应用来说。,视图就是由HTML元素组成的界面。在新式的Web应用中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已经层出不穷,它们包括abibeFlash和XHTML,XML/XSL等一些标识语言和Web服务等。

随着Web应用开发技术的发展,用户要求的日益提高,如何处理应用程序的界面以及变得越来越有挑战性。MVC架构一个大的好处是它能为Web应用处理很多不同的视图。在视图中其实没有真正的业务出处理发生,不管这些数据是联机存储的还算一个雇员列表,作为视图来讲,他只是作为一种输出数据并且允许用户操纵的方式。

视图功能强大,主要表现在以下几个方面:

1) 根据客户类型显示信息。

2) 显示商业逻辑(模型)的结构,而不关心信息如何获得何时获得

(3)控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求。所以,当用户单击Web页面中的超链接和发送HTML表单的时候呢,控制器(比如Servlet)本就并不输出任何东西和执行任何处理,他只是接受请求并决定调用哪个模型构建去处理请求,然后确定用哪个视图来显示模型处理的返回的数据。

MVC的优点

MVC的这种特殊的设计结构,给我们带来了很多的便捷,通过MVC架构的使用,大大地提高了Web应用的开发效率。具体来说,MVC设计架构主要由以下几个方面的优点:

1) 低耦合性(关联性不足,喜欢散架)。由于视图层和业务层分离,使得修改视图层代码时不需要重新编译模型和控制器的代码,同样的一个应用的业务流程或者业务规则的改变,只需要改动,MVC的模型层即可。因为模型与控制器的视图相分离,所以很容易改变应用程序的数据层和业务规则。

2) 高重用性和可适用性。由于技术都是在不断进步的,现在访问应用程序可以有越来越多的方式。MVC模式允许使用不同样式的视图来访问同一个服务器的代码。 包括任何Web(HTTP)浏览器或者无线浏览器(WAP)。例如,用户可以通过计算机也可以通过手机来在淘宝上购买某样爆款,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能够被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而平这些表示所需要的命令【仅是改变视图层的实现方式】,而控制层和模型层无需做任何改变。

3) 较低的声明周期成本。MVC使得开发和维护用户接口的技术含量降低。

4) 部署快速。使用MVC模型可以相当大地缩减开发时间,它使得程序员(开发人员)集中精力于逻辑业务,而界面程序员(HTML和JSP开发人员)集中精力于表现形式。

5) 可维护性。分离视图层和业务逻辑层也使得Web0应用更易维护和修改。

6) 有利于软件工程化管理。由于采用了分层思想,每一层不用的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。

时间: 2024-10-14 15:00:49

【程序员笔试面试复习】之一 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构的相关文章

【程序猿笔试面试复习】之中的一个 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构

9.1网络模型 9.1.1. OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式网络互联參考模型.其为国际标准组织指定的一个指导信息互联.互通和协作的网络规范. 开放是指仅仅要遵循OSI标准,位于世界上不论什么地方的不论什么系统之间都能够进行通信,开放系统是指遵循互联协议的实际系统,如电话系统. 从逻辑上能够将OSI开放系统互联分为七层模型,由下至上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 当中.上三层称

Java程序员笔试面试之Java基础

1.==与equals与hashcode的区别作用 ①==是用来比较数值是否相等,也可以用来比较引用是否相等,也就是比较是否指向同一个对象. ②equals方法是Object提供的方法,因此每一个对象都有equals方法,他的实现也是通过==运算符实现的,所以在没有覆盖equals()方法的前提下,equals方法跟==是完全一样的 ③相比==运算符equals方法特殊之处就是他可以被覆盖,例如String,他可以比较2个独立对象的内容是否相等,例如: String s1=new String(

Java程序员笔试面试之java基础知识

1.finalize()方法的使用 2.Java程序初始化的顺序 3.Java中变量的类型 4.构造函数 5.为什么java中有些interface没有任何方法 6.java中的反射机制是什么 7.java中创建对象的方式有多少种 8.多态实现的机制是什么,编译时多态,运行时多态, 9.overload和override区别,以及各自的注意事项 10.abstract class和interface有什么区别

Java程序员笔试面试之String2

2.如何判断2个字符串是否有相同的字符组成 例如"aaaabbc"跟"abcbaaa" 2种思想 import java.lang.reflect.Array; import java.util.Arrays; //思想一:先将2个String排序,在比较,所谓2个字符串相等指的是构成string的字母以及个数一样,顺序可以不一样 public class TheSameString { public static void compare(String s1,St

Java程序员笔试面试之String5

.如何统计String中有多少个单词? public class CountWord { public static int countWord(String s){ int count=0; int word=0; for(int i=0;i<s.length();i++){ if("".equals(s.charAt(i))) word=0; else if(word==0) { word=1; count++; } } return count; } public stat

Java程序员笔试面试之String3

public class SameString { //思想二:每一个字符都对应着自己的ASC码,第一个思想的算法复杂度为O(nlogn),一般可以利用空间来降低时间复杂度 //可以开辟一个大小为256的数组空间,并且将256个数组元素都置为0,然后遍历第一个字符串把字符的ASC作为数组下标,数组元素都加1, //然后遍历第二个字符串将数组元素的各个值都减1,如果最后数组元素的值为0的话说明就是相同的字符串.此算法的时间复杂度为O(n) public static void compare(St

Java程序员笔试面试之String1

1.如何实现字符串的反转例如:"how are you"--->"you are how" public class InverseString { public void swap(char[] arr,int front,int end){//将char[]反转 while(front<end){ char temp=arr[end]; arr[end]=arr[front]; arr[front]=temp; front++; end--; } }

Java程序员笔试面试之String

1.如何实现字符串的反转例如:"how are you"--->"you are how" 2.如何判断2个字符串是否有相同的字符组成 例如"aaaabbc"跟"abcbaaa" 3.如何删除String中重复的字符good 4.如何统计String中有多少个单词 5.如何输出String的所有组合

Java程序员笔试面试之String4

如何删除String中重复的字符good? 思想一:蛮力法,进行双重循环,此算法的复杂度为O(n^2),n是指字符串的长度 public class RemoveSameChar { public static String removeDuplicate(String s){ char[] c=s.toCharArray(); for(int i=0;i<c.length;i++){ if(c[i]=='\0'){ continue; } for(int j=i+1;j<c.length;j