独立阶段:
早期计算机是独立工作的,各个主机存储着各自独有的数据。
由于各个计算机之间是相互独立的,因此要利用多台计算机共同完成同一份工作,需要计算机的使用者将计算机的数据拷贝到可移动的存储介质中,然后利用可移动的存储介质将数据传输到其他计算机上,实现数据的共享,以达到多态主机共同完成同一工作的目的。
网络互联阶段:
为了各独立的计算机之间能够协同工作,使用特定的线路将各计算机连接起来,计算机将数据交于服务器,再让服务器将数据传给其他计算机完成数据的共享。网络就是在这个时候出现的。
网络的定义: 网络是由若干结点和连接这些结点的链路组成。网络中的结点可以是计算机、集线器、交换机、路由器。
互联网的定义:将不同的网络连接在一起形成的规模庞大的网络互联网中的计算机称为主机。
局域网LAN阶段:
由于网络中连接的计算机数量变多, 通过交换机和路由器将网络中的计算机连接在一起,形成局域网。计算机传输的数据经过链路到达交换机或路由器,交换机或路由器会根据一定策略将数据转发出去,使得其他计算机收到数据,完成资源的共享。
由交换机连接各计算机形成的网络称为局域网,由路由器将不同网络连接起来形成的网络也是局域网。
广域网WAN阶段:
为了让更多远距离计算机之间进行协同工作,将不同的局域网连接在一起,形成一个更大网络,这个网络称为广域网。各局域网内的计算机通过链路将数据传输出去,经过交换机或路由器时,会根据一定策略将数据转发出去,使得其他局域网中的计算机收到数据,完成资源的共享。
所谓 “局域网” 和 “广域网” 只是一个相对的概念。可以称由一个路由器连接的两个网络为局域网,也可以称为广域网(并将被连接的两个网络称为局域网)。
协议是指在特定情境下,各方之间达成的一种行为规范或约定它规定了参与方在特定场景中应如何进行交流、互动和合作,以达到共同的目标。 比如使用摩斯密码进行通信的的双方,发送方根据摩斯密码进行编码发送信息,接收方根据摩斯密码进行解码获取数据,双方就通过遵守摩斯密码的这一协议让发送方根据特定规定有办法发送数据,让接收方通过规定能够读懂数据,进行正确的发送数据和接收数据。
计算机生产厂商有很多、计算机操作系统,也有很多、 计算机网络硬件设备 还是有很多。为了让这些不同厂商之间生产的计算机能够相互顺畅的通信,就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议。
互联网是由若干网络连接形成的巨大的网络,因此将一条主机上的数据传输到另一台主机上可能需要讲过许多中间结点。
由于数据传输需要经过许多中间结点,就会产生如下的问题:
首先,网络产生的问题可以被分类为不同性质的问题,其次,网络产生的问题具有一定的上下关系(比如先要能够定义目标主机进行传输才会有路径选择的问题,有了根据选择的路径进行数据传输才会有数据丢失的问题),因此网络被设计成层状结构。各层之间定义相同性质的问题的实现方案,层与层之间具有一定的上下关系,这是一种"高内聚,低耦合"的模型。
为了理解层状结构,我们举一个打电话的例子,打电话的双方将双方电话机连接起来,然后通过电话机进行交流。在这个情境下,可以将打电话的双方看作语言层,使用的是汉语协议,电话机看作是通信设备层,使用的电话机协议,逻辑上打电话双方都认为在和对方直接通信,因为双方所作的都是听和说的都是遵守汉语协议的数据,但是物理上,打电话双方是通过电话机提供的听筒和话筒进行听和说。
通过打电话的例子,可以看出层状结构的特点:
关于打电话的例子,还可以做一定的延伸,比如将电话机换成无线电,将打电话的人遵守的协议换成英语协议。
将电话机换成无线电不影响语言层双方通信,语言层依旧是使用通信设备层提供的功能,然后通过通信设备层进行数据的发送和接收。将打电话的人遵守的协议换成英语协议不影响通信设备层,通信设备层只会将语言层传入的数据按自身协议编码发送,按自身协议解码接收。至于语言层要发送什么,和语言层接收到数据后如何处理,通信设备层不关心也无需关心。
因此可以看出层状结构的优点: 分层之后,每一层都只关注自己同层的功能,只使用下层的接口,任何一层出现问题,都不会直接影响另一层,减少后期开发者的维护成本。
OSI七层模型如下:
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。 TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
与OSI七层模型各层的对应关系:
TCP/IP模型描述的是一种网络协议栈,该网络协议栈的实现存在于计算机软硬体系结构中的每一个层次结构中:
在计算机软硬体系结构中,操作系统层的实现最为重要,由于操作系统层中的传输层使用的是TCP协议,网络层采用的是IP协议,因此该模型被称之为TCP/IP模型。
由于网络使用的在使用的网卡等设备属于计算机软硬体系结构中的硬件层次,而Linux操作系统中硬件的管理数据文件管理的范畴,因此在Linux操作系统中,网络的管理也属于文件管理的范围。因此,操作系统提供的大量系统接口中,一定是有与文件相关的。
比起OSI模型,TCP/IP模型中的各层可以更好地实现在计算机软硬体系结构中,因此TCP/IP模型能够成为网络实现的实际模型。大部分计算机都要网络层、传输层都要采用TCP/IP协议,以保证这些计算机之间都可以正确交换数据,由于物理层、数据链路层只需要提供接口,在不同计算机上实现可以不同。
我们这里以两台主机进行文件传输为例,此时各层对应的协议如下:
同局域网的两台主机通信
首先需要明确的是,同一个局域网内的主机是能够直接进行通信的,因为最初局域网设计的目的,就是为了让局域网内的主机能够进行通信。其次,要明确的是,两个主机进行网络通信的本质是两台主机的协议栈在进行通信。
发送方主机会的协议栈会在数据(这个数据称为有效载荷)发送前对数据进行封装:
数据封装完成后,就会根据物理层的传输,将数据传输到对应的主机中,接收方主机需要对收到的数据进行解包和分用,最终得到有效载荷:
任何一台主机在发送数据之前,数据都要自顶向下的经过网络协议栈,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,数据都要自底向上的经过网络协议栈,在这个过程中,每一层协议都会将对应的报头信息提取出来。
可以看出,每种协议都至少具备以下两个功能:
补充知识
下图为数据封装的过程:
下图为数据分用的过程:
如下是由一个路由器连接的两个不同局域网的示意图,其中一个局域网以太网,另一个是令牌环局域网:
有效载荷产生自FTP客户,自顶向下经过网络协议栈,每层协议都给其添加报头,其中网络层的报头中存储的目的主机的IP地址,在网络层添加报头前会查阅路由表,验证目的主机是否为本局域网的主机,在数据链路层根据以太网协议,添加报头,报头内存储的是数据下一步传送的主机的MAC地址。
根据数据链路层添加的报文,数据会被传输到路由器中,路由器虽然作为网络层硬件,但是也有自己物理层和数据链路层,因此数据到了路由器会自底向上经过路由器的网络协议栈(只有物理层、数据链路层、网络层),由于路由器网络层也采用的IP协议,因此能够读懂数据的IP地址,然后路由器进行路由选择,将数据再交给其数据链路层,路由器的数据链路层会根据目的主机所处局域网使用的协议添加报头,也就是遵守令牌环协议的报头,然后发送给对应的局域网。
目的主机接收到地址后,数据到自底向上经过路由器的网络协议栈,进行解包和分用,最终得到数据的有效载荷。
可以看出,路由器和IP协议共同作用,屏蔽了底层子网的差异,无论底层子网使用何种方式实现,路由器会根据发送方协议解包数据,然后查看目的主机IP地址,根据接收方协议封装封装数据,使得接收方的网络层收到的数据和发送方网络层发送的数据一样。
IP协议有两个版本, IPv4和IPv6。没有特殊说明的, 默认都是指IPv4。