本文目标: 

①了解网络发展背景, 对局域网/广域网的概念有基本认识;

②了解网络协议的意义, 重点理解TCP/IP五层结构模型;

③学习网络传输的基本流程, 理解封装和分用;

④电路交换和分组交换的认识

⑤IP地址和MAC地址的简单了解

1.计算机网络背景

OS与网络

在整个计算机体系中,是先由操作系统,再有网络的!网络离不开OS,OS和网络是一体的。

网络发展

网络的起源是什么?

在计算机出现后,那时还没有网络,美国一些高校就已经引入了作为世界上先进的设备之一的计算机作为教学和研究设备,供给学生和教授使用。当时,计算机与计算机之间的数据传输是很不方便的,在计算机A处理完的数据,需要交给计算机B去处理,只能用一些存储数据的硬件存储起来,拿到计算机B中去,于是,为了计算机通信方便,为了满足高校内部的数据研究的需求和沟通,网络诞生!这就是网络的起源。

网络的发展过程。

独立模式:每台计算机都是相互独立的。在处理一批任务的时候,需要等待前面的计算机处理完毕才能运行起来。

网络互联: 多台计算机连接在一起, 完成数据共享。

局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起。


广域网WAN: 将远隔千里的计算机都连在一起。

所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。

那么网络是在哪里的呢?

首先,我们需要知道一个概念:软件是可以分层的!举一个例子:当我们在使用C++写代码,用到STL库的时候,STL底层源码是一层,上层接口是一层!也就是说STL库分层了,作为用户的我们,一般在使用的时候(并不是说在学习的时候)并不关心它的底层。

而网络其实也是一个软件。这里的网络,其实指的是网络协议栈,它是一个软件,贯穿了体系结构的tcp/ip,属于OS的一部分。我们学习网络,最重要的是要学习网路协议的四层:应用层,传输层,网络层和数据链路层。本文先简单说明一下每一层的主要作用。请继续往下看吧!

认识协议

协议,其实是一种约定。下面举个例子感性地对协议的认知。在网络不发达的年代,还在用座机打电话的时候,由于花费很贵,那么在远方读大学的我们就跟家里人约定好:

我给家里打电话,响一声就挂掉,那么代表我是给家里面报平安的。响两声就挂掉,那么代表我生活费没了。响三声而不挂掉,那么说明我有事情要跟家里人商量。

那么所谓的协议,就是约定,在计算机的协议中,是由程序员根据标准文档定义出来的协议。

由于计算机生产厂商有很多,计算机操作系统,也有很多,计算机网络硬件设备,还是有很多。如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是网络协议。

初始网络协议

协议分层

网络协议是分层的,从上面对网络协议栈的简单描述和图中也可以看出这一点。其中,应用层是位于用户进程中的,传输层和网络层是位于操作系统内核中的,数据链路层是位于硬件中的。这是四个重要层次的分布。

分层的最大好处是“封装”,我们可以类比面向对象,分层之后,作为用户的我们,并不需要关系传输层网络层数据链路层怎么样的。

OSI七层模型

一些概念

①OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;所谓逻辑上,就是在硬件上不实现,而在软件上实现这种功能。

 
②把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;

 
③OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;

 
④它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;但是, 它既复杂又不实用; 所以我们重点学习TCP/IP四层模型就可以了。

TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。而物理层一般很少考虑,因此只需四层模型。

简单介绍它们的主要功能:

我们先来说一个小例子,然后通过例子映射相关概念。

住在广东的二肥想要买一些猫条,于是在网上订购后,位于山东的商家给二肥发货了。那么商家肯定要给猫条进行打包封装,然后交给顺丰快递,顺丰快递经过比如江苏、安徽江西等等地区,最终到达广东,到达了二肥的手中。

数据链路层:通信传输实际上是通过物理的传输介质实现的。数据链路层的作用就是负责设备之间的数据帧的传送和识别.。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。

通俗地来说,例子中的顺丰快递路线,便是数据链路层。

网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。

通俗地说,例子中,决策顺丰快递路线,就是网络层做的。总不能先到北京,再到美国这样,然后绕地球一圈再来到广东这样吧?肯定得有人负责路线的决策。

⭐网络层和数据链路层的关系:都是基于目标地址将数据发送给接收端。而网络层负责将整个数据发送给最终目标地址,即唐僧师徒最终目的是到西天取经。而数据链路层则是只负责发送一个分段内的数据,即唐僧师徒每到达的一个地方。

传输层: 负责两台主机之间的数据传输,具体是:①进行建立连接或断开连接的处理。②保证数据传输的可靠性。如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。

通俗地说,在例子中,如果我们的快递发生了意味,比如丢失,损坏等,那么就需要补发或者其它的处理方案。于是,传输层就在数据传输当中如果发生了意味,就重新从起始点发送书。

⭐传输层和网络层的关系:由于在不同的网络体系结构下,网络层有时也不能保证数据的可达性,因此在TCP/IP中,网络层与传输层相互协作以确保数据包能够传送到世界各地。

应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

通俗地说,就是二肥拿到猫条之后是如何分析数据和使用等,便是应用层的作用。

⭐当接收方的应用层接收到了来自发送方的数据后,会对其数据首部和数据正文进行分析,并且会将数据存储到硬盘或者其它非易失性存储器以用于未来的处理,如果接收方用于保存此类数据的空间满了,会返回一个错误给发送方。

一般而言:对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容。对于一台路由器, 它实现了从网络层到物理层。对于一台交换机, 它实现了从数据链路层到物理层。对于集线器, 它只实现了物理层。但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。

简单提及一下其他层的作用:

表示层:进行“某个计算机特定的数据格式”与“网络通用的标准数据格式”相互转换。

会话层:在通信前的创建连接时,可以选择每发一次数据,建立一次连接,然后断开。也可以选择一次性建立多个连接,同时将需要发的多个数据发送。会话层就负责决定采用哪种连接方法。

物理层:将数据的0,1转换为电压和脉冲光传输给物理的传输介质,而相互直连的设备之间使用地址实现传输。

网络传输基本流程

简单认识了TCP/IP四层模型后,我们来看看网络是如何通过这四层模型进行传输的。

两台计算机通过TCP/IP协议通讯的过程如下:

用户在计算机A的用户层输入"你好"这个数据后,用户层就会对这个数据进行封装,封装后的数据往下走,进入传输层,传输层TCP再次对传进来的数据进行再次封装,加上传输层给的报头一起,然后继续往下走,走到网络层IP,继续加上报头封装,最后走到数据链路层,进行最后一次封装。然后交给计算机B的数据链路层,计算机B的数据链路层对来自计算机A的数据进行解包和分用,一层一层往上走,从数据链路层到应用层,每走一层就解包一次。这时候我们就会发现,计算机A和计算机B被封装或解包的数据,看起来是一样的。

报头

先举一个例子:我们都有过接受快递的经历,那么在快递盒子上的信息,比如寄出的地址以及目的地,以及其它的数据信息。其实报头就是类似这样的东西,报头记录着数据在每一层之间经过需要的起始地址和最终地址,以及其它的信息。

那么报头的作用就是指导当前的层来进行某种协同的决策。

在计算机OS的角度来看,报头和数据的意思便是:报头是一种结构化的数据,数据是一种有效载荷。

数据的封装,解包和分用

 报头跟“你好”就是一种封装,而解包,就是在接收方从数据链路层开始对发送方传来的封装好的数据进行解包。

几乎每一层的报头中,都要包含两种字段:

①当前报文的有效载荷要交付给上层的哪一个协议,是作为接收方的计算机B来讲的,这就是分用。

②需要明确报头和有效载荷的边界。

这两种字段是协议的共性。

网络通信传输的方式

通过网络发送数据的类型

通过网络发送数据可以有两种类型:面向有连接型和面向无连接型。

面向有链接型:在通信前,通信双方需要建立连接。在通信后,通信双方需要断开连接。其好处是如果无法建立连接,就可以避免发送无意义的数据。

面向无连接型:无需建立建立,自然也不存在断开连接。发送方可以在任何时候自由向接收方发送数据。

电路交换和分组交换

什么是电路交换?

先是计算机被连接到交换机上,然后交换机会与另外的交换机通过通信线路连接起来。

电路交换流程

需要网络通信的计算机中,发送方需要先通过交换机与目标计算机建立通信电路,称之为建立连接。建立连接后,就可以通过这条电路进行通信了。

电路交换的弊端

要是一条电路上,只有两台计算机还好,这两台计算机可以占据这条电路进行网络通信。但是如果这条电路上有许多台计算机,那就麻烦了!

麻烦在于当一台计算机在收发信息时会占据整条电路,其它的计算机只能等这台计算机处理完数据之后才能有机会去使用这条电路。这样很明显效率会非常低下!因此如果并发用户数量超过交换机的之间的通信线数量,就意味着不能实现网络通信了!

分组交换是什么?

为了解决电路交换的问题,有人想出了一个新的办法,人们让发送数据的计算机将需要发送的数据分成多个数据包,然后按照一定的顺序排序之后再发送,这就是分组交换。

分组交换的具体流程

发送方计算机将要发送的数据分组发给交换机(在分组交换中,路由器就是交换机),路由器收到这些数据后,先存起来,存到自己的缓冲区中,最后再发送给目标主机。

为什么分组交换能够在一条线路上同时为多个用户提供服务?即能够识别到是哪两台计算机在通信?那是因为每个数据的分组都带着自己的发送端地址和接收方地址。

IP和MAC

认识IP地址和MAC地址

IP地址是在IP协议中, 用来标识网络中不同主机的地址,对于IPv4来说, IP地址是一个4字节, 32位的整数,我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255。

MAC地址用来识别数据链路层中相连的节点,长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19),在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。

 地址的层次性

在网络中,地址总数会达到上亿个,那么在如此的多的地址中,该如何找到通信双方的地址?这就是地址层次性的作用了,比如我们要找到广州塔这个地址,将整个世界看作是一个网络世界,那么先是中国,然后是广东省,再然后是广州市,最后定位到广州塔。这样就是层次性了!

需要特别注意的是,虽然IP地址和MAC地址在标识通信的主体时都具有唯一性,但是只有IP有层次性。

总结一下:

IP地址就是记录着从哪里来,到哪里去的地址,不会变的,就好像唐僧要从东土大唐到西天,这个就是IP。而MAC是上一站从哪来,下一站要到哪去?就好像唐僧上一站是从女儿国来的,下一站要去哪哪一样。

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐