Linux网络:网络基础
文章目录
- 1. 协议分层
- 1.1 OSI七层模型
- 1.2 TCP/IP五层(或四层)模型
- 2. 操作系统与网络技术栈
- 3.网络传输基本流程
- 序:在上一章中,我们了解了网络的发展以及协议的概念,本篇博客我们将深入了解协议分层以及网络与系统的关系来加深对网络的理解,同时也了解网络传输的基本流程
1. 协议分层
问题一:为什么一般的软件要分层?
1.层与层之间的耦合度是降低的,更重要的是一但分层,就相当于一个非常大的项目被肢解成了多个子项目,这样的话,在后期的维护上成本会非常低,所以第一点就是为了方便维护
2.凡是划分到同一层的内部,其中的代码和逻辑必须是强相关的—高内聚(层内部),低耦合(层与层之间)
3.问题是层状的!!!为了解决相应的问题,所以设计的时候也是按分层来设计的
在现实生活中,我们打电话给别人,看似是人与人之间直接进行交流,但是在实际上,是我们载荷电话沟通,然后电话将信息传输到另一台电话上,然后才让别人给听到,但是在逻辑上,人与人是在同一层的,所以我们会认为是人与人在沟通,同层内部高内聚,层与层之间低耦合。
这样的好处就在于,某一层出问题,只需要处理某一层的问题就行了,其它层不用变,即使某一层的协议发生了变化,比如,如图的第一层的语言变成了英语协议,但是其下面的电话协议根本不用变,也无法被影响,依然能够正常交流,同理如果其电话机协议变成了无线电协议,其上层的汉语协议也无需变化,只需要处理无线电这一层的协议就行!!!
1.1 OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.
1.2 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
2. 操作系统与网络技术栈
问题一:网络协议栈和我们之前学的操作系统有什么关系?
数据链路层是软件,是在各种软件内部驱动实现的,其中的传输层和网络层是要在Linux内核中实现的
在我们日常的生活中,我们也会刷视频来获取信息,这些信息是怎么来的?就是通过物理层中的网卡获取的!!!所以网络通信的本质也是在访问硬件!!!
如果用户想要获取到视频资源,就需要去访问硬件,但是用户并没有资格去直接访问硬件,因为操作系统是硬件的管理者,操作系统不允许用户来访问底层硬件,操作系统并不信任用户,所以用户想要访问到硬件资源就必须要贯穿操作系统!!!用户层、传输层、网络层、数据链路层和物理层,从上往下,依次贯穿!!!
网络通信的本质:就是贯穿协议栈的过程
此时问题又来了,如果用户层要访问硬件资源,不能直接访问,要依次贯穿网络技术栈,但是操作系统可能让用户去访问、去贯穿网络技术栈吗?这显然不可能,那用户又是如何获取到硬件资源的呢?— ==系统调用接口!!!==通过系统调用接口,用户就可以获取到硬件资源,既然用户无法直接获取,但能让操作系统去获取,并给用户层提供一个接口,让用户层能拿到硬件资源。所以就有了利用系统调用来写出各种协议来供用户层使用!!!
大部分操作系统的内容和系统调用接口都是不一样的,但是网络协议栈是一样的!!!这是因为想要用使用网络,就必须按照网络制定的协议栈,又因为网络通信是要贯穿网络协议栈的(向上贯穿或者向下贯穿),主机1有用户层,主机2也一定会有用户层,同理任意两台主机的网络协议栈一定是是一样的!!!所以同层协议在逻辑上,就是在和对方的同层直接沟通!!!
3.网络传输基本流程
网络协议栈的层状结构中,由于每一层都有协议,所以每一层都要添加报头(报文 == 报头 + 有效载荷),才会将信息送到下一层。
数据的自顶向下的封装的过程:
1. 应用层定的协议,要在发送的信息前加一个报头(里面会有版本信息…),消息往下传递给传输层。(将要传输的内容叫做有效载荷)
2. 传输层定的协议,再加入一个报头(里面会有信息的序号、源端口号和目的端口号…),消息往下传递给网络层。
3. 网络层定的协议,再加入一个报头(里面会有该信息是谁发的(主机),要发生到哪里(主机)…),消息再往下传递给链路层。
4. 链路层定的协议,再加入一个报头(里面的信息是从哪里发的(网卡),发送给谁的(网卡)…)
接着,报文就会交给网卡,网卡就会通过以太网,将报文发送给对方的主机的网卡上
问题一:为什么远端机器拿到这个数据(报文)的时候一定是网卡先拿到数据?
那是因为计算机里面只有一个网络通信的设备就叫做网卡!网卡拿到这个数据(报文)后,肯定要将数据交给操作系统,从硬件外设交到内存里。
问题二:为什么网卡拿到数据后一定要将数据(报文)从硬件设备交到内存里?
因为这是冯诺依曼体系规定!冯诺依曼体系规定网卡中的数据一定要从硬件设备交给内存里面
当对方拿到报头后,是有办法区分报头和有效载荷的,这时候,只需要将报头取出来,就可以将剩下的有效载荷送给上层,同理,由于同层协议既然能给有效载荷添加报头,所以也能获取报头,每一层拿到报文后,都会将报头和有效载荷分离开来,层层传递,直到到了用户层,将信息传递成功。
通信的过程:本质就是在不断的封装和解包的过程!
除了上述的知识,不同层其实不止一种协议,从上往下其实可以看成是一个倒着的多叉树结构,每一层的协议都要考虑到底是传输给上层的哪种协议
封装和解包中的问题(大部分协议的共性,未来学习具体协议的时候,都是这两个问题!!!)
1. 几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
2. 几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议
只有知道了两个问题,再面对封装和解包的问题就不会困惑,因为这就是大部分协议的共性
总结:
本文浅谈了OSI七层网络模型和TCP/IP网络模型,主要对操作系统与网络技术栈的关系进行的探讨,并且对网络传输的基本流程进行了深刻的讲解