admin管理员组文章数量:1638753
引言
就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从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
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
模型中,是四层网络模型。
当然,在计算机网络教学中,也提出了五层网络模型。
但无论多少层网络模型,其实本质上都是在叙述相同的内容,只不过拆分的精细度不同而已,三种网络模型对应如下:
2.1、OSI七层网络模型
OSI七层网络模型中,每层的功能如下:
- 应用层:人与计算机网络交互的窗口。
- 表示层:负责数据格式的封装,如加密、压缩、编解码等。
- 会话层:建立、终止、管理不同端间的会话连接。
- 传输层:提供端到端(两台机器)之间的传输机制,以及提供流量控制、出错效验。
- 网络层:逻辑寻址,IP地址,在下两层的基础上向资源子网提供服务。
- 数据链路层:负责建立和管理节点间的链路,将数据封装成帧,进行可靠传输。
- 物理层:在介质媒体上传输比特流。
在 TCP/IP
体系中,将原本 OSI
体系中的应用层、表示层、会话层合并为了应用层,将数据链路层和物理层合并为了数据链路层,因此 TCP/IP
体系中只存在四层结构。
注意点:在最初因为技术问题,因此数据传输必须建立在物理实体介质的基础之上,但如今无线电的电磁波技术也可以做到利用空气作为介质,从而达到传输数据的目的。
在 OSI
分层体系中,上三层:应用层、表示层、会话层组成资源子网,下三层:网络层、数据链路层、物理层组成通信子网。
2.1.1、OSI模型的通信的封装与解析过程
在网络通信中,通信双方都必须是对等的,并且双方都遵守相同协议的,这样才可通信。好比举个例子:
竹子想发微信信息给熊猫,喊熊猫出来玩,但双方之间的通信基础必须对等,也就是说,熊猫的手机上也必须要安装了微信,否则竹子无法通过微信与熊猫出来玩。
但如果竹子说的是汉语,熊猫只能懂汉语,双方并未遵守相同的“协议”,那两者之间自然也无法进行通信。因此,通信的另一要素则是:通信双方都必须遵守相同的协议。
而在计算机网络中,当两台机器进行通信时,其过程主要包含数据的封装与解封:
如上图,左侧是发送端,右侧是接收端,当发送端的应用尝试传输一条数据时,数据会根据网络分层结构,从上至下依次封装,每层都对数据做一定的处理,最后在物理层转换为比特流(二进制数据),然后传输至接收端。
因为双方之间遵守的都是相同的协议体系(网络模型),因此接收端会首先接收到比特流数据,然后从下至上依次解封数据,最终在应用层还原数据,从而达到通信的目的。
2.2、TCP/IP协议簇
TCP/IP
应该是计算机网络中听的次数最多的词汇,但它并非单纯的指 TCP
和 IP
两个协议,而是一组协议的代名词,指由许许多多的网络协议一同组成的“协议簇”, TCP/IP
协议簇主要组成如下:
上面列出了一些 TCP/IP
协议簇中常用的一些协议,但整个协议簇是由大大小小上百个协议一同组成的(对于 TCP/IP
协议簇中的一些常用协议可参考:百度百科)。
在计算机网络体系中,每层都会存在多个协议,但一个协议只会隶属于一层。同时,协议也可以由软件、硬件两个维度来实现。
除开最常见的TCP/IP协议簇外,还有一些其他的协议组,如 IPX/SPX、NetBEUI、AppleTalk
等协议组。
2.2.1、通信协议的基本概念
前面的叙述中,更偏向于“空中楼阁”般的理论概念,比较生涩难懂,接下来我们以实际的 TCP/IP
协议出发,再对计算机网络更进一步阐述。
TCP/IP通信协议是最完整、使用最广泛的网络协议体系,它的魅力在于可使不同硬件结构,不同操作系统的计算机相互通信,通信协议中定义多方之间发送/接收的报文格式、顺序以及规则,其中语法定义了传输的报文格式,语义定义了报文传输规则,时序定义了报文传输顺序, 计算机通信的本质就在于信息报文的相互交换 。
2.2.2、协议数据单元(PDU)
计算机网络体系中,不同节点通信时交换的信息报文被称为 协议数据单元(PDU) , PDU
主要由协议头信息+数据( SDU
)组成,数据是指发送端需要传输给接收端的信息,而协议头信息中,则包含了完成传输所需的控制信息,如地址、长度、序号、分段标识、差错控制信息等。
基于 TCP/IP
体系而言, PDU
在不同层存在不同的称呼,如下图:
2.3、计算机网络体系中各层综述
就目前而言,前面的阐述中已经将计算机网络中最常见的 OSI、TCP/IP
体系简单介绍明白了,但对于这些体系中,不同层的具体作用却并没有进行探讨。因此,接下来我们从自己设计一个计算机网络体系的角度出发,分别来探讨网络分层的必要性与每个分层的具体含义。
2.3.1、物理层
先来看最简单的通信模型:
如上图,两台电脑之间通物理媒体连接,互相传递信息,从而达到通信的目的。
在这种最简单的直连通信模型中,想要实现双方之间的通信,那应该考虑如下几个问题:
- ①连接两台电脑之间的传输媒体可以采用哪些介质类型。
- ②连接两台电脑时,两台电脑应该存在怎样的物理接口。
- ③传输数据时,使用何种信号表达比特流中的
0
和1
。 - ④双方之间通信时,不同的传输介质,数据传输的速度标准又该是多少。
对于如上问题,我们可以将其全部归纳到“物理层”来解决,在该层中定义标准规范。
简单来说,物理层主要任务是 负责在介质上正确的传送比特流 ,并 规定物理接口的各种特性和物理设备的标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率 等。
2.3.2、数据链路层
但一般现在不会存在直连型网络,常用的计算机网络都是由多台机器共同组成的,如下:
在这种总线连接的通信模型中,当一台主机,比如 A
向 D
发送数据时,数据会通过总线传输至总线上的所有主机,此时 D
如何知道该条数据是发给自己的呢?其他主机又如何区分数据不是发给自己的呢?因此,对于这种多台机器组成的网络模型而言,我们也需要解决一系列问题,如:
MAC
对于上述中的这些问题,可以全部划归到链路层处理。
因此可以得出,数据链路层主要任务是 实现数据在不可靠的物理线路上的可靠传递<
版权声明:本文标题:(一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729272945a1193311.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论