计算机网络背景与发展
独立模式:计算机之间相互独立。
就像一个个独立的进程,各自拥有自己的数据,想要获取其他进程的数据,就得等待该进程将数据处理完毕,放回到系统中,这样就造成了效率很低的问题。在利用多台独立的计算机完成某项业务时,也会有效率低的问题。为了解决进程间效率低的问题,我们想到了进程间通信,同样的,如果我们可以实现多台计算机之间的数据共享,这个问题不也就解决了么?
网络互联:多台计算机连接在一起,完成数据共享。
实现进程间的通信,那是因为他们属于同一主机,他们可以都是有一个操作系统来控制的。多台计算机, 他们是不同的主机,不由一个操作系统控制,怎么实现他们之间的数据共享呢?我们都知道,就算在同一台主机内,数据也是各种线路来传输的,那么,只要在几台主机之间添加一些可用于传输数据的线路,不就可以实现多台主机之间的数据共享了么。
局域网:计算机数量比刚刚更多了,通过交换机和路由器连接在一起。
如果计算机很多,我们也使用一条条的线路将各台计算机连接起来的话,那估计连的线路都成蜘蛛网了,所以,为了简化线路,使用交换机和路由器来完成多态计算器之间的数据共享。
广域网:将远隔千里的计算机连接在一起。
网络协议初识
什么是协议?为什么要有协议?
在我国,每个省都有属于自己的方言,可能是一种,也可能是很多种。某种方言,对于当地人,听懂是没有问题的,但是,如果需要和外地人沟通,使用方言,就无法沟通了,为了解决这个问题,国家就出了这样一个规定,人人都学会说普通话,不同地方的人可以通过使用普通话来进行沟通了。其实,要求说普通话,这就是一种协议。
一台电脑拥有很多个部件,每个部件的产商可能不同,将各部件组合起来的产商也可能不同,计算机操作系统也有很多,不同产商、不同操作系统,就可能会出现“语言不通”的问题。那么,就算把所有的计算机连接到一起了,也是没有办法进行通信的。所以,计算机与计算机之间通过网络实现通信时需要事先达成一种“约定”,这种“约定”使那些由不同产商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。协议分为很多种,每一种协议都明确的地界定了它的行为规范。
协议由谁来制定呢?
ISO(国际标准化组织),ISO制定了OSI参考模型,该模型将通信协议中的必要的功能分成了7层,每个分层负责接收由它下一层所提供的服务,并且负责向它的上一层提供服务。上下层之间进行交互是所遵循的约定叫做“接口”。同一层之间的交互所遵循的叫做“协议”。
OSI七层模型
虽然给出了OSI七层模型,但是在实际应用中更多的是按照以下5层结构来使用的。
TCP/IP五层模型(或者四层)
物理层:负责光、电信号的传递方式。
比如现在的以太网通用的网线(双绞线),以前以太网采用的同轴电缆,光纤,现在的WiFi无线网使用的电磁波等都是属于物理层的概念。物理层的能力决定了最大传输速率、传输距离,抗干扰性等。集线器(Hub)工作在物理层。
数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测、数据差错校验等工作。交换机工作在数据链路层。
网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划处两台主机之间的数据传输的线路(路由)。路由器工作在网络层。
传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层:负责应用程序沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
网络传输基本流程
先通过一个简单的例子来简单理解一下网络传输的流程
同一网段内的两台主机进行文件传输的过程是怎样的?
首先来举一个例子,我们在网上买东西,比如说买了一只电动牙刷,我们下单之后就是静静地(焦急地)等待牙刷的到来。其他的我们就关心了。同时,卖家在收到订单后,就会为我们发货,在发货的时候,卖家不会说是他自己拿着牙刷亲自送到我们跟前。而是选择将牙刷打包,然后会写一个单子,在上边填上买家的地址信息之类的,保证快递员能牙刷送到我们的手里,然后选择一家快递公司(中通还是韵达或者邮政?),将包裹交由他们。然后自己也就不管了,运输的过程也不关心。快递公司将我们的快递接收了,然后就是一步一步地运输到我们的手里,在运输过程中,它的路线选择,运输方式的选择,我们都是不关心的。经过一番周折,牙刷终于到达我们的手里,此时,我们要做的第一件事是什么?确认快递发给我们的,没有发错,然后就是拆快递了,看看我们买的牙刷是不是自己想要的,虽然我们只关心牙刷,但是,有可能这个电动牙刷很高级,我们还不会使用,那么,我们还需要看一下说明书之类的。最后我们将那些没用了的,比如包装盒啊,用于防止牙刷收到冲击损坏的一些填充物,拿着真正想要的牙刷美美地拿去使用了。了解上边的这个流程,那么,网络传输的基本流程也就理解的差不多了。
想要通过一个主机向另一个主机发送文件,首先肯定是通过我们客户自己发起文件的这次传送,那么首先就是通过应用层,(相当于我们买牙刷下单)根据上边的TCP/IP分层,应用层下边就是传输层,发起了传输任务,具体以什么方式传输出去呢?(接下来就是卖家发货了,选择中通快递还是韵达?)传输层是有很多协议的,每种协议都代表着一种传输方式,根据传输的内容选择不同的传输方式,使用UDP或者TCP等来传输。传输的方式选择好就要确定传到哪和传输的具体过程了,这就是网络层要干的事了。(网络层就有点像是一家快递公司)虽然此时两台主机位于同一个局域网,但是网络层在传输数据的时候肯定不能像我们同处于一块空间的人一样传输数据可以直接靠喊,就算我们靠喊也是建立在空气可以传播声音的基础之上的。计算及之间想要实现信息交流可比这个难度要高很多了。需要依靠一大堆的硬件条件才能实现,不同的产商生产的硬件性能有差别,每台计算机中组装的硬件也不近相同,传输内容的不同,传输的方式也就不同,需要的硬件支持也可能不同了。所以在信息的传输过程中是需要各层之间相互配合,相互协调实现的。(就相当于说在传输过程中,需要用到的交通工具,乃至集装箱之类的东西)。到这里,已经将信息传送至另一个主机了,相当于是快递送到我们身边了。和上边的例子稍微不同的是,快递是一次性就将武平包装好,快递单填好,而,网络传输在由上到下交互的时候,将需要的信息一层一层地添加进入数据的头部的,头部和数据一起才构成一个完整的报文。我们将这样一层一层包装的过程称为封装。所以,在对方主机在收到数据包的时候,也是要经过由下到上一层一层的解包。不仅要进行解包,还要从报头中获取到一些有用的信息,明确自己的下一步该做出怎样的选择。这个过程叫做解包与分用。
这是以TCP/IP协算作四层来划分的。(将数据链路层和物理层合并了)