文章目录
- 网络的认知
- 如何理解协议
本篇将会引入到网络的话题
网络的认知
第一个问题是,网卡是文件吗?答案是显然的,在Linux下一切皆文件,基于这个原理对于网卡依然是文件,所以第一个建立起的初步认识是,不管是在网络中有各种各样的协议,其实都是向文件当中去写,这其实可以理解很多内容
下图展示了早年的时候数据的基本原理,在最初想要进行协作的过程中,一定是要进行对于数据的拷贝的,那因此就诞生了对于光驱软盘的概念,把数据写到软盘上,再换一台电脑继续进行读取操作,但这样的方法还是太慢了
为了解决这样的问题,于是有了一个新的思路,能不能把这些计算机连接在一起进行相互协作,这样就可以提高一些效率,实现了数据的共享和交互呢?答案是肯定的,于是有了下面的另外一种基本的结构:
上图的结构是一个基本的逻辑结构,所有的电脑就被用线连接在了一起,此时这就已经有了一个计算机的基本雏形,那随着互联网那个的发展,可能会出现有两个很远距离的实验室想要进行数据的通信,能不能产生一种方式,使得一个区域的子网和另外一个区域的子网也能相互连接在一起呢?于是就推动了这样子网之间进行联系的效果:
上图所示的两种结构就是局域网和广域网的概念,当然这两种方式是一种抽象出来的表达方式,但不管怎么说,这两种都可以体现网络的概念,以实现了数据的交互功能
如何理解协议
这里只使用最朴素的方式,协议就是双方约定好的一种通信方式,比如约定两短一长表示某种信息,两长一短表示另外一种信息,这都是协议的体现,而如果想要理解计算机协议,就必须要先理解计算机通信当中会产生什么问题,进而去引到协议的概念中去
下面展示几个基本的问题:
- 如何处理发送来的数据
- 长距离传输的数据丢失问题
- 如何定位主机的问题
- 如何保证数据可以准确到达另外一个设备
上图所示的是四种基本的网络问题,那为了解决这样的问题,就需要在每一层都设置一些相应的协议来通过数据交互解决对应的问题,比如在协议中有各种各样的字段,表示这个数据就是发送给某人的,比如说把主机的ip地址写进去,表示就是给某个特定的ip地址写的,所以每台机器都有对应的ip地址,可以对应到远端主机上,那其他的问题也有对应的协议方法,例如有https,http,ftp等等协议,这些协议都可以来解决对应产生的问题和方法
所以在日常的网络通信当中,单纯传递一个字符串是不可以的,它通常需要伴随一些包裹的信息,比如这是谁发的,这是谁写的,什么时候发的,这些管理数据是一定要有的,而这些多出来的部分就叫做协议,依据这些协议可以更好地进行通信,每次发送信息多出来的那一部分就是协议的内容
那在内核的实现是如何实现的呢?其实很简单,把对应的内容放到一个结构体当中,再把结构体传递出去就可以