网络入门基础
文章目录
网络的发展
独立阶段:
早期计算机是独立工作的,各个主机存储着各自独有的数据。
由于各个计算机之间是相互独立的,因此要利用多台计算机共同完成同一份工作,需要计算机的使用者将计算机的数据拷贝到可移动的存储介质中,然后利用可移动的存储介质将数据传输到其他计算机上,实现数据的共享,以达到多态主机共同完成同一工作的目的。
网络互联阶段:
为了各独立的计算机之间能够协同工作,使用特定的线路将各计算机连接起来,计算机将数据交于服务器,再让服务器将数据传给其他计算机完成数据的共享。网络就是在这个时候出现的。
网络的定义: 网络是由若干结点和连接这些结点的链路组成。网络中的结点可以是计算机、集线器、交换机、路由器。
互联网的定义:将不同的网络连接在一起形成的规模庞大的网络互联网中的计算机称为主机。
局域网LAN阶段:
由于网络中连接的计算机数量变多, 通过交换机和路由器将网络中的计算机连接在一起,形成局域网。计算机传输的数据经过链路到达交换机或路由器,交换机或路由器会根据一定策略将数据转发出去,使得其他计算机收到数据,完成资源的共享。
由交换机连接各计算机形成的网络称为局域网,由路由器将不同网络连接起来形成的网络也是局域网。
广域网WAN阶段:
为了让更多远距离计算机之间进行协同工作,将不同的局域网连接在一起,形成一个更大网络,这个网络称为广域网。各局域网内的计算机通过链路将数据传输出去,经过交换机或路由器时,会根据一定策略将数据转发出去,使得其他局域网中的计算机收到数据,完成资源的共享。
所谓 “局域网” 和 “广域网” 只是一个相对的概念。可以称由一个路由器连接的两个网络为局域网,也可以称为广域网(并将被连接的两个网络称为局域网)。
协议的概念
-
协议是指在特定情境下,各方之间达成的一种行为规范或约定它规定了参与方在特定场景中应如何进行交流、互动和合作,以达到共同的目标。 比如使用摩斯密码进行通信的的双方,发送方根据摩斯密码进行编码发送信息,接收方根据摩斯密码进行解码获取数据,双方就通过遵守摩斯密码的这一协议让发送方根据特定规定有办法发送数据,让接收方通过规定能够读懂数据,进行正确的发送数据和接收数据。
-
计算机生产厂商有很多、计算机操作系统,也有很多、 计算机网络硬件设备 还是有很多。为了让这些不同厂商之间生产的计算机能够相互顺畅的通信,就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议。
网络协议初识
协议分层
互联网是由若干网络连接形成的巨大的网络,因此将一条主机上的数据传输到另一台主机上可能需要讲过许多中间结点。
由于数据传输需要经过许多中间结点,就会产生如下的问题:
- 定位目标主机的问题。
- 数据传输时,路径选择的问题。
- 长距离传输,数据丢失的问题。
- 硬件级别定义的问题。
首先,网络产生的问题可以被分类为不同性质的问题,其次,网络产生的问题具有一定的上下关系(比如先要能够定义目标主机进行传输才会有路径选择的问题,有了根据选择的路径进行数据传输才会有数据丢失的问题),因此网络被设计成层状结构。各层之间定义相同性质的问题的实现方案,层与层之间具有一定的上下关系,这是一种"高内聚,低耦合"的模型。
层状结构
为了理解层状结构,我们举一个打电话的例子,打电话的双方将双方电话机连接起来,然后通过电话机进行交流。在这个情境下,可以将打电话的双方看作语言层,使用的是汉语协议,电话机看作是通信设备层,使用的电话机协议,逻辑上打电话双方都认为在和对方直接通信,因为双方所作的都是听和说的都是遵守汉语协议的数据,但是物理上,打电话双方是通过电话机提供的听筒和话筒进行听和说。
通过打电话的例子,可以看出层状结构的特点:
- 同层的实体通信时认为,自身和对方在直接进行通信。(双方发送和接收的数据遵守相同的协议)
- 上层的实体是需要调用下层实体提供的接口,然后将数据交给下层,下层就会完成数据的发送和接收。
关于打电话的例子,还可以做一定的延伸,比如将电话机换成无线电,将打电话的人遵守的协议换成英语协议。
将电话机换成无线电不影响语言层双方通信,语言层依旧是使用通信设备层提供的功能,然后通过通信设备层进行数据的发送和接收。将打电话的人遵守的协议换成英语协议不影响通信设备层,通信设备层只会将语言层传入的数据按自身协议编码发送,按自身协议解码接收。至于语言层要发送什么,和语言层接收到数据后如何处理,通信设备层不关心也无需关心。
因此可以看出层状结构的优点: 分层之后,每一层都只关注自己同层的功能,只使用下层的接口,任何一层出现问题,都不会直接影响另一层,减少后期开发者的维护成本。
OSI七层模型
- OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范。
- OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,比如路由器,交换机。
- OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,比如手机和电视之间数据的传输。
- OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
- OSI七层模型是一种理想模型,既复杂又不实用,所以后来在具体实现的时候就对其进行了调整,于是就有了我们现在看到的TCP/IP四层协议。
OSI七层模型如下:
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。 TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责光/电信号的传递方式。 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等。 集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别。 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网, 无线LAN等标准。 交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择。 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由)。 路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输。 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机。
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等。 我们的网络编程主要就是针对应用层。
与OSI七层模型各层的对应关系:
TCP/IP模型和计算机软硬体系结构的关系
TCP/IP模型描述的是一种网络协议栈,该网络协议栈的实现存在于计算机软硬体系结构中的每一个层次结构中:
在计算机软硬体系结构中,操作系统层的实现最为重要,由于操作系统层中的传输层使用的是TCP协议,网络层采用的是IP协议,因此该模型被称之为TCP/IP模型。
由于网络使用的在使用的网卡等设备属于计算机软硬体系结构中的硬件层次,而Linux操作系统中硬件的管理数据文件管理的范畴,因此在Linux操作系统中,网络的管理也属于文件管理的范围。因此,操作系统提供的大量系统接口中,一定是有与文件相关的。
比起OSI模型,TCP/IP模型中的各层可以更好地实现在计算机软硬体系结构中,因此TCP/IP模型能够成为网络实现的实际模型。大部分计算机都要网络层、传输层都要采用TCP/IP协议,以保证这些计算机之间都可以正确交换数据,由于物理层、数据链路层只需要提供接口,在不同计算机上实现可以不同。
网络传输基本流程
我们这里以两台主机进行文件传输为例,此时各层对应的协议如下:
同局域网的两台主机通信
同局域网的两台主机通信
首先需要明确的是,同一个局域网内的主机是能够直接进行通信的,因为最初局域网设计的目的,就是为了让局域网内的主机能够进行通信。其次,要明确的是,两个主机进行网络通信的本质是两台主机的协议栈在进行通信。
发送方主机会的协议栈会在数据(这个数据称为有效载荷)发送前对数据进行封装:
- 有效载荷先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
- 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
- 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
- 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
数据封装完成后,就会根据物理层的传输,将数据传输到对应的主机中,接收方主机需要对收到的数据进行解包和分用,最终得到有效载荷:
- 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层。
- 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付。
- 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层。
- 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用。
任何一台主机在发送数据之前,数据都要自顶向下的经过网络协议栈,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,数据都要自底向上的经过网络协议栈,在这个过程中,每一层协议都会将对应的报头信息提取出来。
可以看出,每种协议都至少具备以下两个功能:
- 报头必须能够和有效载荷分离
- 必须支持将有效载荷传输给上层
补充知识
- 报头(Header):是数据通信中用于携带控制信息和描述性信息的一部分。
- 有效载荷(Payload):是指在通信中实际承载传输的有用数据部分,不包括任何协议头、尾部或其他控制信息。
- 分用(Multiplexing)是指将多个数据流或信号合并在一条通信链路上进行传输的技术或方法。
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
下图为数据封装的过程:
下图为数据分用的过程:
不同局域网的两台主机通信
如下是由一个路由器连接的两个不同局域网的示意图,其中一个局域网以太网,另一个是令牌环局域网:
有效载荷产生自FTP客户,自顶向下经过网络协议栈,每层协议都给其添加报头,其中网络层的报头中存储的目的主机的IP地址,在网络层添加报头前会查阅路由表,验证目的主机是否为本局域网的主机,在数据链路层根据以太网协议,添加报头,报头内存储的是数据下一步传送的主机的MAC地址。
根据数据链路层添加的报文,数据会被传输到路由器中,路由器虽然作为网络层硬件,但是也有自己物理层和数据链路层,因此数据到了路由器会自底向上经过路由器的网络协议栈(只有物理层、数据链路层、网络层),由于路由器网络层也采用的IP协议,因此能够读懂数据的IP地址,然后路由器进行路由选择,将数据再交给其数据链路层,路由器的数据链路层会根据目的主机所处局域网使用的协议添加报头,也就是遵守令牌环协议的报头,然后发送给对应的局域网。
目的主机接收到地址后,数据到自底向上经过路由器的网络协议栈,进行解包和分用,最终得到数据的有效载荷。
可以看出,路由器和IP协议共同作用,屏蔽了底层子网的差异,无论底层子网使用何种方式实现,路由器会根据发送方协议解包数据,然后查看目的主机IP地址,根据接收方协议封装封装数据,使得接收方的网络层收到的数据和发送方网络层发送的数据一样。
网络中的地址管理
认识IP地址
IP协议有两个版本, IPv4和IPv6。没有特殊说明的, 默认都是指IPv4。
- IP地址是在IP协议中, 用来标识网络中不同主机的地址。
- 对于IPv4来说, IP地址是一个4字节, 32位的整数; 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1。
- 用点分割的每一个数字表示一个 字节, 范围是 0 - 255。
认识MAC地址
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位, 及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。