在Java编程中,网络知识是必不可少的,了解基础的网络知识,对于了解整个系统架构是非常有帮助的。我们都知道,传统的OSI七层网络模型由下往上分为
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
http://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B
当然,这些也都有不同的分法,只是为了对于网络结构的理解方便而制定,都是可以对应起来的。每一层都有自己独特的作用,也规定了适用于本层的协议和标准,以便更好的解决本层的问题。
由以下对工作在每层的协议的描述,可以看到一个由上到下的依赖关系,例如“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”,由TCP/IP协议 定义了包的具体结构,源地址、数据、目的地址等。这个数据包里面包含了上次的内容,列入HTTP请求所发送的数据。而数据包到达数据链路层后,被增加了帧头和帧尾 继续传输,实际传输的过程是由物理层的电路实现的,电路的高电平和低电平表示了数据里的bit位1或0。如下图所示:
我们在开发中主要关注的是,网络层以上的协议。例如IP协议就位于网络层,它主要解决主机的寻址问题;TCP协议和UDP协议都是工作在传输层, 主要解决数据如何在网络中传输的问题,以下是对OSI七层网络模型对应的协议或者标准的概括:
物理层协议:是对硬件的规范,例如网线的连接使用RJ-45水晶头等等。
数据链路层:HDLC、PPP/MP、X.25、FR、POS和 ATM等,这些规定了最基本的二进制数据包的组成结构。
网络层协议:IP协议、ARP地址解析协议、RARP反向地址转换协议、DHCP动态主机配置协议ICMP,主要都与网络寻址相关。
传输层协议:TCP协议、UDP协议。
表示层协议:保证源端数据能够被目的端表示层理解和识别,对应用程序透明。表示层提供数据格式转换服务,数据加密、数据表示标准等服务。 表示层确定了数据传输时数据的组织方式。常见的表示层协议(也可以说是标准)有:
数据结构标准,EBCDIC(extended binary coded decimal interchange code)、
ASCII(Amercia Standard Code for Information Interchange);
图像标准:JPEG(Joint Photographic Experts Group)、TIFF(Tagged Image File Format)、GIF;
视频标准:MIDI(Musical Instrument Digital Interface)、MPEG(Motion Picture Experts Group)、QuickTime等。
会话层协议:RPC, 远程过程调用,RTCP, 实时传输控制协议,SCP, Secure Copy Protocol,SSH, Secure Shell http://zh.wikipedia.org/wiki/%E4%BC%9A%E8%AF%9D%E5%B1%82
应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS等。与Java相关的还有RMI技术,基于JRMP(Java Remote Messaging Protocol)协议。而WebService 是一种技术,基于SOAP(Simple Object Access Protocol)协议,以http的形式封包,构建于tcp之上的应用层协议。是异构系统或异构语言应用程序之间通讯的首选。JMS(Java Message Service),是一种java 程序的API规范,原理上可以用任何协议通讯。常用的还是TCP。仅仅适用于java语言编写的应用程序之间通讯。同样的EJB也是一种技术,它主要还是基于RMI方式传递数据。