一.网络的重要性
对于程序员而言,几乎所程序都依赖于网络,对于公司来说,几乎所有产品也是依赖于网络,这些产品不仅包括面向用户的产品,公司内部的一些服务也是基于公司内网来进行相互调用的。
二.组网方式
①基于网线直连
受限范围大,通信能力弱,现在没有人使用
②通过集线器的设备进行组网
通过集线器进行数据的转发,但是只能一路转发(同时只能向一台计算机设备转发数据),相对比较落后,目前也没有人用了
③通过交换机进行组网
通过交换机进行组网,能够对所有的组网设备进行数据的转发,也就是说,它将若干台设备组成了一个局域网,目前主要在公司内网中使用
④通过路由器进行组网
通过路由器进行组网能够连接外网,路由器下能够连接多个交换机,也就是说通过路由器进行组网能够连接多个局域网。
三.局域网和广域网
局域网和广域网是按照组网规模和计算机实现的功能来划分的
局域网:包括校园网,公司内网和我国特色的局域网,是一种私有网络
广域网:国际互联网,全球范围内不受限制的任务资源
四.IP地址和端口号
IP地址:描述了网络上的一个主机位置(相当于收货地址)
IP地址本质上是一个32位的整数(四个八位二进制数),但是为了方便人们记忆,一般会把这32位的整数按照每个字节(0-255)分成四个部分,中间用 . 分割,称为“点分十进制”例如:130.1.2.3
127.0.0.1是一个特殊的IP地址,叫做环回IP,表示自己这个主机
端口号:程序运行时会在系统层面申请很多资源,对于网络通信需要的程序,端口号就是其中之一:描述计算机中的一个正在运行的应用程序。
端口号的范围:1-65535
其中:1-1024是比较有名的程序,行业中对比较有名的服务默认了一些常用的端口
1025-65535:一般情况下没有服务占用,一般自己指定
五.认识协议
有了IP地址(快递地点)和端口号(手机号)之后,我们还要指定采用哪种快递,这便是认识协议(采用哪种方式传输数据)
在网络通信中有这样几个重要信息:
①IP地址:标识源主机(收件人地址)
②端口号:标识源主机该次通信发送数据的进程(收件人手机号)
③目的IP地址:标识目标主机(发件人地址)
④目的端口号:标识目标主机中该次通信接收数据的进程(发件人手机号)
⑤认识协议:标识发送进程和接收进程双方规定的数据格式(采用哪种快递)
四.协议分层
协议分层类似于我们接收快递时,定义不同层次的协议:从快递单号的生成到开始从总部运输,再到地方运输,再到用户去取快递,分成了很多的层次:对于用户而言,我们不需要关注快递是如何运输和其他环节,我们只需要负责取快递即可。
为什么需要网络协议的分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类
(使用方,使用服务):
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
互联网中的协议是如何分层的呢?
在教科书中,存在的是OSI七层网络模型
但是这种模型麻烦且使用不方便,在实际应用中,我们更常用的是TCP/IP五层模型。
应用层:负责和用户(程序)的交互,负责接收和展示用户信息(比如我们收到快递时,只关注物品本身)
传输层:,端到端的传输,负责数据的传输,保证数据能从源主机发送到目标主机(类似于确定收件人和发件人的地址)(只关注传输的起始点和最终点,不关注过程)
网络层:负责地址管理和路由选择,规划出一条两台主机之间数据传输的路线,包括数据传输过程中经过其他的网络设备(相当于快递运送时途径的快递站点)(关注数据传输的每个过程,不关注结果)
数据链路层:负责点到点之间的传输,每个网站设备的传输
物理层:负责光/电信号的传输方式,比如以太网通用的网线
五.封装和分用
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
我们用生活中的例子进行举例说明:
我们使用qq给好友发了一条消息,那么这条消息中至少应该包含哪些信息呢?
①应用层
在应用层中,假设我们定义以下规范:
至少应该包含三个信息:发送者的qq号,接受者的qq号,以及我们发送的信息内容,之后调用系统层面的API,将数据传输给传输层。
②传输层
在传输层中,存在着很多协议,其中最典型的是TCP和UDP协议,我们以TCP协议进行讲解:
③网络层
网络层主要负责规划整个路径
④链路层
数据以二进制流的方式传输给物理层,在链路层使用的协议是以太协议
⑤物理层
在物理层将具体的数据转为光电信号,由源主机传输到目标主机
到达目标主机之后,则进行分用操作:
分用是封装的逆操作,将数据头一步一步的剥离
①物理层
在应用层将光电信号转化为二进制数据,将数据传输给链路层
②链路层
当链路层获取到数据之后,将数据进行校验和,确定数据正确之后,将帧头和帧尾去除
③网络层
根据IP协议解析,将TCP头去除
④传输层
根据TCP协议解析,去除TCP头
⑤应用层
最后将数据在应用层进行解析,获取真实的用户消息,展示在用户界面。