局域网和广域网
局域网LAN
局域网是什么,就是将局部的电脑通过网络连接起来。就是局域网。 关键是要通过一定的连接方式可以达到网络通讯的效果。 下面我们就来介绍一下如何进行连接
网线
基于网线进行直接连接: 就是通过网线将几台电脑全部都连成一串
交换机
交换机上面有很多个接口,不同的主机接到交换机的接口上面就可以连成局域网了
由交换机组成的电脑是一个局域网
路由器
下面我们来简要的介绍一下路由器的结构: WAN 口:wan 口是和上一层的(更高一层的网络)连接的一个口。 比如说我们家里的路由器,如果想要接上网,就需要将家里墙壁上的那一个网络接口和路由器上面的wan接口连上。这样我们的路由器就连上了公网的网络了。 LAN口:LAN口是和具体的机器,主机,电脑,手机,相连的口。
下面,我们就来看一看,如何通过路由器来构成一个局域网,甚至是一个广域网。 可以形成一个多层的路由器。最下一层的路由器的WAN口连的是上一层路由器的LAN口,依次上去道最顶层的结构
广域网WAN
其实通过上面的路由器,多个路由器相互连接,形成一种层次结构,就可以由一个个的局域网形成一个大的广域网。 广域网中的每一个子网都是局域网。 其实,广域网和局域网都是相对的,没有一定的概念说超过了一定的范围就是局域网了,都是相对于一个小的局域网来说,这个大一点就是一个广域网了
当然了,世界上面最大的广域网就是Internet,也就是因特网。
IP地址
有了网络之间的通信之后,那么我们需要两个主机通过网络进行通信的时候。 怎么将要发送的内容成功的发给我们想要发送的主机呢? 这样,我们就需要给每一个连接上网络的电脑指定一个地址。通过ip地址对相应的主机进行访问。 这个ip地址就像我们的电话号码一样,只有有了电话号码我们才可以进行拨号。只有有了ip地址,我们才可以进行上网。
ip地址的格式
ip地址是一串32位的二进制数字,为了简化观看,通常将32位的ip地址分为4个部分,也就是四个字节。 如下面: 01100100.00000100.00000101.00000110 为了方便我们进行表示: 我们使用“点分十进制”来进行表示,也就是每个字节都用十进制来进行表示,之间使用.来进行分隔。 a.b.c.d 四个值的范围都是0~255
特殊的ip地址
在ip地址中,有一个特殊的地址,一个表示自身的环回地址
127.0.0.1
这个具体就是表示我们自己的电脑的地址,相当于类里面的this,英语中的my 这个地址有什么用呢?
当我们进行网络编程的时候,大部分都是在同一个电脑中进行操作的.所以,为了方便我们进行编程,所以就让127.0.0.1来表示我们自己的主机.
端口号
先前我们介绍了ip地址,有了ip地址,就可以在网络通信的时候定位道自己的主机了,但是我们也只是知道了主机的位置,要对哪一个程序做出什么我们是不知道的. 所以,为了具体的描述对计算机的哪一个应用程序进行通信,我们就为每一个应用程序(进程)分配一个端口号, 指定这个端口号就可以说明对这个应用程序进行访问.
端口号的格式
端口号是一个16个二进制位的数字串.(2个字节) 所以取值范围就是0~65535
协议
好了,现在我们知道了相应的ip地址和端口号,可以进行网络之间的通信了,但是我们我们的网络的通信都是通过二进制来进行交流的,我们如何才能够让两个互相通信的双方都知道这一个二进制串到底是什么呢? 是一张图片,还是一篇文章,一个符号. 所以,为了解决这个问题.我们就采用协议来对这些内容来进行描述和约束
协议的概念
计算机之间通信是通过光信号和电信号来进行传播的.发出的各种0和1的各种二进制串. 要是想要各各计算机之间进行一个良好的通信,就需要指定一个相同的规定来确保每一个组件之间都是通过相同的方式来进行沟通的. 这就是我们要求的协议
协议分层
什么是协议分层呢?
因为对于网络的协议来说,会设计到方方面面的问题,从硬件到软件. 所以,我们就要对于描述不同层面的协议,将这些协议分开,各自和各自分离,自己只管自己的事情,不去管别的地方的事情.这样就可以使耦合性降低.
协议分层的好处
如上图:
更好的封装
语言层的协议只需要关注语言方面的问题,不需要关注硬件层面的问题. 同理通信设备层也不需要语言层的相关的问题, 所以每层协议只需要关注自身,而不需要关注其他层的协议
更好的解耦合
对于每一层协议来说,如果想要更改每一层的协议的细节了,比如说从中文协议变为了英文协议,那么只需要更改语言协议就好了,不需要更改其他层面的事情. 如果不分层的话,就会涉及到大篇幅的更改.
具体的分层协议
OSI七层协议
OSI:即Open System Interconnection,开放系统互连 和它相对应的还有TCP/IP(四层/五层)协议:
下面我们就来具体的来看一下OSI都有哪些层面:
物理层
硬件方面的内容,如网线,网卡.
当然了,对于这种硬件层面的问题,也是有着很严格的标准的, 比如说:网线的那个头的尺寸,网线的内部线,等都是要按照物理层的相关协议去制作的,因为这个是行业的相关标准. 但是,千万不要小看物理层,这个是一切的基础
数据链路层
是对相邻的设备之间进行通信的. 这里的相邻的是指使用同一根网线进行相连的设备. 比如说连接在同一个路由器上面的两个主机就是相邻的设备.
所以,数据链路层就是只复责相邻的设备之间进行通信. 同样的,无论是多么远的设备之间的连接,最后都是要到一些相邻的设备之间进行通信的 数据链路层也是负责较为底层的传输.
网络层
网络层是点和点之间的通信 和数据链路层是对立的,这个网络层就是处理不相邻的设备之间的通信. 网络层,网络层,说明处理的问题可能会是很分散的东西. 所以,这个网络层所干的事情就是找到两个相邻很远的点之间的最优的策略.会考虑用户的需求 就和我们的高德地图一样.
比如说;从A市到B市,网络层负责找到一条最佳的出行路线.当然会参考用户对各方面的要求. 但是对于路途中的较近的一些距离,比如说从火车站到飞机场之间怎么走,就是数据链路层需要考虑的了
传输层
传输层是两个端和端之间的通信 也就是只看开端和终端之间的通信. 只看结果有没有成功的进行通信,不看过程是什么样子的
应用层
上面我们提到的都是一些网络传输之间的一些底层的逻辑, 对于任意的一个数据的传输都是经历上面的经过, 就和买快递一样的过程:
传输层是商家保证的是快递可不可以到达我的手上 网络层是顺丰快递,保证从商家的地点到我家的地点的运输路线 数据链路层是每个城市的分发中心,从沈阳的分发中心到长春的分发中心 物理层是运输快递的大货车,司机,公路等等
上面的过程对于任意一个快递来说,都是相同的流程.只是关心运输过程,而不关心其他的过程 对于我们的网络传输来说,不管是什么样子的消息也都是必不可少的.
那我们这个应用层就是对于不同类型的数据,我们会有不同类型的解决方法.
不同的设备实现的协议
对于我们的主机来说:物理层,数据链路层,网络层,运输层.,应用层 对于路由器来说,物理层,数据链路层,网络层 对于交换机来说:物理层,数据链路层
每层协议的具体过程
我们现在就以QQ发送消息这个过程来看一下每一层的都是怎么进行工作的。 假如说现在小明使用QQ发了一条消息:你好呀给小红,下面我们就揭开到底是怎么神奇的将这个消息发送的
发送消息:
发送消息的过程就是一个封装的过程,在每一层协议的时候都加上该层的协议报头,然后将它们封装打包好之后,然后再传送的下一层的相关协议.就像快递被一层一层的被打包一样
应用层(应用程序)
最开始的是应用层,也就是QQ这个应用。当小明按下发送这个按钮的时候。 QQ这个软件的应用层就会按照QQ的应用层协议,生成一个应用层的协议报文。 这个协议报文中包含关于消息的发送和接收的相关信息。
注意,这个应用层的报文不是一成不变的,而是要让程序员自己写的,自己指定的 并且每一个软件的应用层报文都是不一样的,都是每一个公司的程序员写的
所以,这个应用层的消息可能会是下面这样:
传输层(操作系统内核)
应用层的报文就接着就到了传输层,传输层同样的也是有它的相关的协议的. 传输层的协议就是TCP和UDP. 所以传输层的相关协议就是在已经有的协议报文的头前面加上TCP和UCP协议的相关信息.
传输层报文就是TCP协议+应用层(数据) TCP协议中有很多重要的内容,比如说源端口和目的端口号
网络层(操作系统内核)
网络层拿到了传输层的报文之后,也是根据它自己的协议报文,进行下一步的封装.
网络层会在报文的前面加上IP地址, 这个IP地址中保存着源地址和目标地址
数据链路层(驱动设备)
数据链路层接到Ip报文之后,根据自己的数据链路层的协议,就会生成相关的报文:
数据链路层的报文就是在原有的报文的头和尾增加两个数据帧,也叫做以太网数据帧 帧头里面保存的信息是当前所在的位置和下一步要去的位置,帧尾负责校验 另外,随着数据的传送,信息所在的位置会发生变化,所以帧头的信息也会发生变化.
物理层(硬件)
最后我们就到达了物理层,数据链路层的协议报文传输到物理层后,通过物理层的协议的解析, 就将相关的信息通过电信号或者电磁波的方式传送给指定的路由器或者交换机.
中间传输
上面就是发送消息的全过程,从软件到硬件,但是我们这一步还只是第一步,只是发送了消息, 接着,这些消息可能会经过一个又一个的交换机或者是路由器,进行分用和封装的过程
路由器
路由器只有三层,一个是物理层,一个是数据链路层,一个是网络层: 路由器的网络层负责找到最优的传输路径和数据链路层负责在传输的过程中更该帧头的ip地址
交换机
交换机是数据链路层和物理层. 也是在信号的传递过程中,不断的更改现在传输到了那里的,就不断的更改ip地址
经过了无数的路由器和交换机,相关的信息最终到了小红家的路由器, 下面我们就看看小红如何接收消息.
接收消息:
接收消息的过程就是解析传过来的各种协议,然后将协议报头分用的情况. 也就是我们熟悉的拆掉一层一层的快递的包装的过程
物理层(硬件,网卡)
小红家的电脑的网卡察觉到发送过来的电磁波之后,就采用物理层的相关协议,将这样的电磁波转化为0 1二进制串. 接着就将这个二进制的串传给了数据链路层
数据链路层(驱动)
数据链路层接到这个0 1 二进制串之后,就根据数据链路层的协议将相关的以太网数据帧解析出来了, 进行相关的解析之后,就将报文的剩余部分传送给了网络层
网络层(操作系统内核)
网络层拿到了这个报文之后,也是根据网络层的协议,将该报文的IP地址解析出来, 进行相关的分析之后,也是将剩余的报文部分传送给传输层
传输层(操作系统)
传输层拿到这个报文之后,根据传输层的协议,将这个报文的TCP协议解析出来 进行相关的分析之后,也是将剩余的报文给应用层
应用层(应用程序)
应用层就会调用Socket api拿到这个报文,在应用层协议解析之后,就会将相关的信息先是到应用程序上面了
|