本文目标:
①了解网络发展背景, 对局域网/广域网的概念有基本认识;
②了解网络协议的意义, 重点理解TCP/IP五层结构模型;
③学习网络传输的基本流程, 理解封装和分用;
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), 能够确保数据可靠的从源主机发送到目标主机。
通俗地说,在例子中,如果我们的快递发生了意味,比如丢失,损坏等,那么就需要补发或者其它的处理方案。于是,传输层就在数据传输当中如果发生了意味,就重新从起始点发送书。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
通俗地说,就是二肥拿到猫条之后是如何分析数据和使用等,便是应用层的作用。
一般而言:对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容。对于一台路由器, 它实现了从网络层到物理层。对于一台交换机, 它实现了从数据链路层到物理层。对于集线器, 它只实现了物理层。但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。
网络传输基本流程
简单认识了TCP/IP四层模型后,我们来看看网络是如何通过这四层模型进行传输的。
两台计算机通过TCP/IP协议通讯的过程如下:
用户在计算机A的用户层输入"你好"这个数据后,用户层就会对这个数据进行封装,封装后的数据往下走,进入传输层,传输层TCP再次对传进来的数据进行再次封装,加上传输层给的报头一起,然后继续往下走,走到网络层IP,继续加上报头封装,最后走到数据链路层,进行最后一次封装。然后交给计算机B的数据链路层,计算机B的数据链路层对来自计算机A的数据进行解包和分用,一层一层往上走,从数据链路层到应用层,每走一层就解包一次。这时候我们就会发现,计算机A和计算机B被封装或解包的数据,看起来是一样的。
报头
先举一个例子:我们都有过接受快递的经历,那么在快递盒子上的信息,比如寄出的地址以及目的地,以及其它的数据信息。其实报头就是类似这样的东西,报头记录着数据在每一层之间经过需要的起始地址和最终地址,以及其它的信息。
那么报头的作用就是指导当前的层来进行某种协同的决策。
在计算机OS的角度来看,报头和数据的意思便是:报头是一种结构化的数据,数据是一种有效载荷。
数据的封装,解包和分用
报头跟“你好”就是一种封装,而解包,就是在接收方从数据链路层开始对发送方传来的封装好的数据进行解包。
几乎每一层的报头中,都要包含两种字段:
①当前报文的有效载荷要交付给上层的哪一个协议,是作为接收方的计算机B来讲的,这就是分用。
②需要明确报头和有效载荷的边界。
这两种字段是协议的共性。
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地址就是记录着从哪里来,到哪里去的地址,不会变的,就好像唐僧要从东土大唐到西天,这个就是IP。而MAC是上一站从哪来,下一站要到哪去?就好像唐僧上一站是从女儿国来的,下一站要去哪哪一样。