就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从Java程序员的角度出发,详细解读Java的网络编程核心内容。
一、计算机网络的“前世今生”与基础概念
先来看看维基百科对于 计算机网络 这个名词的解释:
计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。
简单来说,计算机网络就是用于满足不同机器之间通信、共享的一种系统。
其实一开始计算机网络是用于军事化目的的,因美国军方需要一种多节点的通信技术,确保在其一部分节点被摧毁后,也能够确保通信依旧正常,因此组建了一个部门ARPA
并在1966年完成了ARPANET
(阿帕网)项目,该项目也是最早的计算机网络之一。
当然,后续随着科技不断进步,各种网络相关的技术百家争鸣,出现了各式各样的网络技术,但同时也带来了很大的局限性,例如:不同的计算机网络之间并不能相互通信、不同操作系统之间无法通信、覆盖范围及其有限等。因此,ARPA
需要一种技术将不同的计算机局域网互联,最终ARPA
组织创建了一个新的项目被称为internetwork
因特网,也被称为“互联网”。
在internetwork
项目的研发过程中,1974年,Robert E. Kahn
以及Vinton G. Cerf
两位教授正式提出了新的传输协议:TCP/IP
协议,用于满足不同计算机网络之间的互联通信,ARPA
到1982
年接受TCP/IP
选定为Internet
主要的计算机通信系统,作为因特网通信的“基石”。
1.1、计算机网络的组成
从组成上而言,计算机网络主要由主机、协议、传输介质以及软件四部分组成。
- 主机:可以是手机、电脑、服务器、电子手表等任意计算机硬件。
- 协议:各类定义归法的网络通信协议,如
TCP/IP、IPX/SPX、AppleTalk
等。 - 传输介质:传输数据的通道,可以是实体铜线、电缆、光纤,也可以是无形的电磁波空间介质。
- 软件:涵盖所有联网的应用,如QQ、微信、支付宝、淘宝、京东等各类软件。
1.2、计算机网络的功能组成
计算机网络体系主要提供的两个核心功能就在于:
- 资源共享:资源子网实现。
- 数据通信:通信子网实现。
资源子网以及通信子网也对应着OSI
中的上三层和下三层。
不过如果学习过计算机网络课程的小伙伴应该都知道,其实计算机网络是一个复杂而庞大的系统,由软件、驱动、硬件、线路等多部门共同组成,但对于这些理论性内容不再阐述,有兴趣的可以自行了解。
1.3、网络分层与OSI七层模型的由来
计算机网络是个非常复杂的系统,由于最初各个计算机网络体系结构不同,导致双方网络之间无法互通,因此,20世纪90年代,ISO
国际标准化推出了OSI
模型打算制定计算机网络体系标准。
简单来说就类似于国内的普通话,因为不同省份的方言不同,导致不同地方的人交流起来并不方便,因此定义了“普通话”这一标准,所有人都遵循该标准进行交流沟通。
但由ISO
组织制定的OSI
网络七层模型结构并没有得到广泛应用,实际中应用最广泛的是TCP/IP
体系结构。换句话说,OSI
七层模型只是理论上官方制定的国际标准,而TCP/IP
体系结构才是事实上的国际标准。
PS:国际标准化组织提出的
OSI
模型未得到广泛应用的原因:
①制定时太过理想化,未考虑实际的应用场景。
②拆分过于精细化,实现起来过于复杂,运行效率并不高。
③OSI
体系的制定周期过长,导致按其标准生产的设备无法及时投入市场抢占份额。
④OSI
体系因为分层过多,设计也不合理,有些相同的功能在多个层次重复出现。
但因为TCP/IP
体系中的最后一层没有制定规范的标准,所以对于学习计算机网络完善体系时会缺失一部分,所以又提出了一种折中方案,也就是综合OSI
以及TCP/IP
两个体系的优缺点,提出了一种五层结构的原理体系,因此在接触计算机网络体系时,通常都会存在三种分层结构:
- 法定标准体系:
OSI
七层结构。 - 实际应用体系:
TCP/IP
四层结构。 - 原理教学体系:五层结构。
二、OSI七层网络模型与TCP/IP协议簇
计算机网络体系采用的是分层结构,每个层次之间互不干扰,上层不需要关心下层的具体实现,下层只需要为上层提供服务即可。
在
ISO
组织定义的国际标准OSI
模型中,是七层网络模型。
在实际应用最广泛的TCP/IP
模型中,是四层网络模型。
当然,在计算机网络教学中,也提出了五层网络模型。
但无论多少层网络模型,其实本质上都是在叙述相同的内容,只不过拆分的精细度不同而已,三种网络模型对应如下: