计算机刚出现的时候,各个计算机之间还是相互独立的,业务的完成需要人力手动完成。随着时代的发展,越来越多的计算机之间需要通信,多个计算机之间需要协同完成工作,有了网络互连。小部分的、局部组建的称为局域网。大部分的、使用路由器把多个局域网连接起来,在物理上组成很大范围的网络,形成了广域网。实际上,局域网和广域网的界限不是那么的明显。继续发展到现在,就是移动互联网的时代。
基础概念
局域网
局域网,即 Local Area Network,简称LAN。局域网是本地,局部组建的一种私有网络。把多个机器,连在一起,构成了一个局域网。
局域网组建网络的方式有很多,比如基于网线的两两直连,但是这样的话需要很多的网线和接口,所以就发展出了交换机和路由器;基于交换机的组建和基于交换机和路由器的组建,交换机是把多个机器连接到同一个局域网中,而路由器是连接了多个局域网。在交换机和路由器的反复连接之下,可以把很多很多的设备连接到一起,使他们可以直接进行通信,当机器足够多的时候,可以称为广域网。
广域网
广域网,即 Wide Area Network,简称WAN。 通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
协议
协议是网络中最重要的概念。
“协议”,很简单的理解就是一种约定。通过一些约定来表达一定的含义。比如特工之间的见面暗号。
网络上传输的数据,本质上是光信号/电信号。通过这些信号来传输二进制的数据。对于光信号来说,通过光的频率等特征,高频表示1,低频表示0;对于电信号来说,高电平表示1,低电平表示0。不同的0和1表示什么样的信息,需要通过“协议”来约定。
网络通信是一个非常复杂的问题,需要处理很多的细节。而使用一个协议又太复杂,这就需要使用不止一个协议。所以需要把协议进行拆分,把一个协议拆成多个协议,处理不同的情况。实际中,有一些拆出来的协议需要处理的问题是差不多的,所以就将协议分成很多的类,称为协议分层(每一层都有很多的协议,做的工作差不多)。当前看到的网络结构是协议分层之后的产物。
协议分层
当前有两种分层方式,OSI七层网络模型和TCP/IP五层网络模型。主要使用TCP/IP五层网络模型。
分层之后的好处:
(1)下层协议给上层提供服务,上层调用下层协议,实现了封装。实现上层协议的人,不必考虑下层协议的细节。
(2)解耦合。可以将同一层的在使用的协议换成其他的协议,对于其他层次的协议来说,基本是感知不到的。
TCP/IP五层协议模型
(1)物理层,硬件,网络通信的基础设施。
(2)数据链路层,表示两个相邻的节点之间如何传输,使用什么方法来进程传输。交换机就工作在数据链路层。
(3)网络层,表示两个点之间的路径规划。按照哪条路径来发送,路由器就在这个层面工作。
(4)传输层,表示两个点之间的通信(不考虑路径规划)。相当于发送的起点和终点。
(5)应用层,数据传输过去后,具体怎么使用。
封装和分用
封装和分用描述了网络是如何传输数据的。和Java中的封装是不一样的概念。下面的加上报头,就是在进行字符串的拼接。
(1)在应用层,把用户输入的数据,整理成应用层数据报(类似于“字符串拼接”的方式,构成更完整,信息更多的数据后,在传输)。
接下来,就交给传输层。
(2)传输层,根据当前使用的传输层协议,给应用层数据报,进行进一步的组装。使用UDP协议(传输层的协议)。
(3)网络层,主要使用IP协议,再进行进一步的组装。
组合好后,交给数据链路层。
(4)数据链路层,比如使用以太网协议,再进行进一步的组装。之后交给物理层。
(5)物理层,拿到数据后把这些二进制序列,转换成光信号/电信号。把光电信号发送出去。
整个过程,就是从上到下完成整个的添加报头的封装过程。类似于发快递的时候,套了很多的包装。分用则是封装的逆过程,每一层协议把对应的报头协议给解析出来,并且去掉报头。把包装的快递依次拆解。
(1)物理层,把光电信号,转换回二进制的数据,得到以太网数据帧,交给数据链路层。
(2)数据链路层,去掉以太网数据帧的帧头帧尾,把载荷部分取出来,交给网络层。
(3)网络层,IP协议解析出IP报头并且去掉,把载荷取出来,交给传输层。
(4)传输层,UDP协议在进行解析,解析出UDP报头,取出载荷,交给应用程序。
(5)应用层,应用程序,解析信息,显示在应用的页面上。
网络编程中的相关概念
网络编程
网络编程是程序猿在应用层通过编写代码来实现两个或多个进程之间,通过网络来进行相互之间的通信。进程是具有隔离性的,每一个进程都有自己独立的虚拟地址空间。要进行进程之间的通信,需要借组每一个进程都能访问到的公共区域,完成数据交换。网络编程也是一种进程间通信的一种方式,借助网卡来实现的,是当下最主流的方式。既能够让同一个主机的多个进程间通信,也能让不同主机之间的多个进程间通信。
客户端和服务器
客户端就是主动发送网络数据的一方,服务器是被动接收网络数据的一方。主要的区别是看谁是主动谁是被动。服务器不知道客户端什么时候发送来数据,就需要长时间进行运行。有可能7*24小时运行。
请求和响应
请求是客户端给服务器发送的数据,响应是服务器给客户端返回的数据。
客户端和服务器之间的交互方式
(1)一问一答。客户端给服务器发送一个请求,服务器给客户端返回一个响应。这种方式是最常见的方式。
(2)多问一答。客户端给服务器发送多个请求,服务器返回一个响应。这种方式比较少见,比如上传文件。
(3)一问多答。客户端发送一个请求,服务器返回多个响应。比如下载文件。
(4)多问多答。客户端发送多个请求,服务器返回多个响应。比如远程控制等。
IP地址
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。和我们发快递类似,需要知道接收方的地址,才能送到地方上。
IP地址是一个32位的二进制的数字,通常使用“点分十进制”的方式来表示,比如a.b.c.d的形式,这些范围都是在0-255之间的整数。一个特殊的IP地址,以127开头,表示本机。
端口号
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。