下面我来说解一些关于网络的基础知识,这些知识有利于帮助咱们从此学习TCP/IP协议相关知识打好基础。前端
首先从网络的诞生背景讲起。一开始计算机的运做是独立存在的(独立模式),每一个计算机有各自的业务,用户须要在不一样的计算机上执行特定的业务逻辑。用户采用卡带的方式将程序和数据输入计算机让计算机进行运算。以后出现了分时系统,分时系统具备“多终端,一主机 ”的特色,因为分时系统CPU时间片轮转的特性让用户有了“一人一机”的错觉。70年代后计算机日渐小型化,慢慢的出现了多台主机链接通讯的技术,紧接着到80年代,互连多种计算机(包括超级计算机、PC等)的网络诞生。90年代后提出“瘦身”和“多供应商链接”的口号,电子邮件和万维网技术取得长足的发展。现在的社会已然是互联网的时代,甚至于一切皆“TCP/IP”链接。计算机在规模上从WAN(广域网)到LAN(局域网)。缓存
下面说一下协议相关的东西。
协议简单来讲就是通讯事物之间进行沟通的规则。因为计算机不具有人类的认知能力,因此要想实现计算机之间的通讯,制定通讯规则而后通讯双方共同遵照该规则是通讯的前提。这里提一下分组交换协议,后面要用到。分组交换是指将大数据切割成一个个包(Packet)进行传输的方法。注意切成包以后必定要在包上加上数据的源主机地址和目标地址、分组序号这些信息,即报文首部。注意必定要贴上这些东西,否则你怎么把数据发送出去,怎么让数据在目标地址那边把大数据凑出来?穿插了一下分组交换,下面继续前面刚刚提到的协议。协议开始是由各个厂家各自制定的,这样的结果就是用户只能使用同一个厂家的设备进行通讯……后来ISO看不下去了,就制定了OSI标准协议(顺便给出了OSI参考模型)。虽然ISO给出的OSI协议最后并不流行,可是它提出了这种思想。今天TCP/IP协议正在一统天下。(注:TCP/IP不是ISO制定的,它是IETF制定的)安全
既然说到了分组交换,就把现代网络通讯方式分组交换说一下吧。在这以前先说一下更加悠久的电路交换技术。先看一下下面这个图:服务器
在电路交换技术中,计算机先经过电路交换机链接,此外还有另一批计算机也经过电路交换机链接。若是计算机A与计算机F想要创建链接,怎么办呢?A与F经过中间的电路链接在一块儿。这样的方式不用多想存在许多弊端:不能同时并发通讯,由于中间的电路每次只能给两台计算机通讯用!因而人们想出了更加优秀的分组交换技术,看上图,就是将左侧的计算机须要发送的数据所有送到路由器里面切割成一个个的包(Packet)而后缓存在路由内部,路由按照队列的方式将这些包发送出去。这样就解决了电路交换技术中的一些问题。可是它也有些毛病,好比当路由缓存满时可能溢出致使数据丢失或者没法发送的状况。网络
上面说到了ISO的OSI协议,后来它并无被大量采用,不过ISO的OSI参考模型却成为今天网络体系结构的标准模型。让咱们来看看这个是什么东东,为何能影响力这么大?其实OSI参考模型就是将网络通讯原本复杂无厘头的过程分红了7层(见下面),每一层都有它们各自管理的事情,相同层次之间可使用协议通讯,而不一样层次之间又能够经过接口来通讯。这个分层是如此的美妙,好比在这个系统内某一个层次发生更改或者拓展并不会影响到整个系统的特色,因此到今天它也一直在使用着。不过它也有一些劣势,像过度分层致使有些功能实现逻辑不得不重复实现。并发
下面咱们一块儿来看看协议中7层各自的功能。博主以一个场景为例来介绍7层功能,欢迎吐槽。以小明向小红发送电子邮件为例。小明写好了一封邮件“早上好”,填好了小红的Email地址,而后点击“发送 ”按钮,应用层就开始摩拳擦掌了。应用层利用协议先在数据的前端附加一个首部(标签)信息,包括邮件内容“早上好”和收件人小红的信息。这些信息会在小红的应用层中被分析保存,此外还存在异常处理。小明的应用层把数据处理后传到下面的表示层去。为何要有表示层捏?试想一下,小明的电脑他使用Outlook来发邮件,小红的电脑使用网页版来收文件,假设这两个软件的编码格式不一样,若是直接进行收发会出现怎样的状况?固然是乱码咯。因此就要有表示层来解决这种状况,在发送方将数据转换成网络通用的标准数据格式,而后在接收方将这些特定格式的数据再次解码为本地的编码格式,这样就没有乱码问题了。注意表示层也会附加首部信息。好了,如今通过两层的处理,数据传到了会话层。这一层又是干吗的呢?一封邮件看不出来它的做用,我就再举例吧。小明发完“早上好”又发了一封“吃了没”,会话层的做用就是解决创建链接,按照什么顺序发送的问题的,可是它不发送。好比说,创建一次链接发送“早上好”而后断开,再创建一次链接发送“吃了没”再断开;或者创建一次链接同时发送“早上好”“吃了没”。肯定怎么创建链接,怎么发送是这一层的问题,这是链接管理层。接下来会话层会把数据继续传递至下一层,传输层如下就是真正发挥网络传输的地方了。上面的数据传到传输层,传输层就肯定小明的主机与小红的主机是否链接了,没有链接就创建链接,通讯完毕就断开链接。此外传输层会判断数据是否完整地到达了小红的主机,若是没有就从新发一遍。能够看出传输层具备保障数据可靠性的功能。通过了传输层,咱们的链接就创建了。然而它并不会真的把数据发送出去,这就要下面的网络层和数据链路层来处理了。网络层是指从原地址到目标地址数据通讯的过程,是整个通讯的过程。而数据链路层是指传递过程当中的中转站传递(见下面)。就比如小明的邮件要传到一个个别的设备最终才能到达小红的主机上。学习
最后一层是物理层,顾名思义,就是经过物理介质来实现数据传递的层级。这是通讯的根本,没有物理介质通讯不可能实现。在这一层里数据从0,1转换为电压或者脉冲光传递,经过MAC地址来实现传递。大数据
通过这么漫长的步骤,小明终于把数据发送了出去。那么小红是怎么接收数据的呢?其实就是上面过程倒叙一遍啦。小红的主机从物理层开始不断将小明发送来的数据进行反向解码,从而一层层剥离最终获得想要的数据。关于OSI参考模型须要在从此的学习中不断更新理解,这里可能存在误差。编码
上面列举了小明和小红的通讯过程,咱们称之为面向有链接型链接,由于双方都创建了链接后才进行的通讯。此外还有面向无链接型通讯,UDP你们都知道吧,发送方就是一个劲地发,无论别人是否接收。这种方式有什么好处呢?它可让处理变得简单,你发就行,我接收就行,不用去执行创建通讯那一套东西。
其实上面的两种传输方式是一种分类,此外还有根据接收端数量来分类的方式,分为单播、广播、多播和任播*。这不难理解(见下图)spa
注意:多播和任播的客户端全体拥有同一个地址。
说了这么多终于说到地址了。上面的通讯过程必须有地址才能实现。地址具备两个重要的特性:惟一性和层次性。惟一性很少说了,在同一个通讯网络中地址必须惟一指定,否则怎么通讯……说说层次性,层次性是指地址中可以实现快速定位的能力。好比从一个电话号码能够看出用户的国家、省市、区名。IP地址因为其拥有网络号和主机号而拥有层次性。两个相同网络号的IP地址的主机的组织结构、提供商类型和地狱分布集中。而MAC地址不具备层次性。
下面说说寻址的问题。
网络传输过程当中的节点会根据分组数据的地址判断是从哪一个网卡发出来的,MAC寻址会参考地址转发表,IP寻址会参考路由控制表,具体寻址参考下面这张图,一目了然。
上面讲了这么多,最后从宏观上,从现实中来感知一下网络的存在吧。网络的物理设备组成包括:网卡、中继器、网桥/2层交换机、路由/3层交换机、4-7层交换机、网关还有电缆。计算机通讯是经过线缆来完成的,线缆的传输速率(又称带宽)指单位时间传输的数据量的多少。网络接口卡(NIC)有时也被称为网络适配器、网卡、LAN卡,是计算机连网的设备,具备独一无二的MAC地址。中继器处于物理层,是对电缆信号进行波形调整和放大而后继续传输的设备。能够认为集线器每一个端口都是中继器。网桥(又称二层交换机)负责在数据链路层中的数据帧的重构、错误数据帧丢弃和传输数据帧。(维基百科上解释为> “橋接器将网络的多个网段在数据链路层(OSI模型第2层)链接起来(即桥接)。”)路由(又称三层交换机) 处于网络层,根据IP地址链接两个网络对分组报文进行转发,此外还有网络安全和分担网络负荷的功能。网关负责从传输层到应用层的数据进行转换和转发的设备。互联网邮件与手机邮件之间的转换服务。互联网与手机之间设置了一道网关,网关负责读取完各类不一样的协议后,对它们逐一进行合理的转换,再将相应的数据转发出去。代理服务器也是网关的一种,称为应用网关。我的对于中继器、网桥、路由的理解就是数据传输从底层硬件逐渐往上层的管理设备。