目录
网络协议栈和os的关系
思考联系
实际
用户从网络获取数据的过程
本质
如何获取 -- 系统调用
图示
不同的os
网络通信的本质
两台主机通信流程
网络协议栈和os的关系
思考联系
网络协议栈涵盖了硬件和软件,而os正是管理软硬件资源的中枢
os是计算机体系结构的一部分,计算机体系结构中也囊括了软硬件:
如果我们将网络协议栈和体系结构图对比着一起看
- 硬件层正好和底层硬件中的网卡相匹配
- 而数据链路层正好是软硬件的分界线,它必然和驱动程序有着异曲同工之妙
- 恰好,再上两层(运输层,网络层)被写在了os中,是os的一部分
- 到了最上层的应用层,也与用户部分匹配,用户看到的正是经过应用层处理过的数据
实际
而实际上的情况也和我们的想法一致
- 用户从网络上获取数据,都是通过网卡这个硬件设备得到的
- 数据链路层属于网卡驱动的一部分
- 传输层和网络层是真正在os中实现的模块,是os的一部分(所以学习了文件管理/进程管理,其实也就学习了这两层是如何运作的,原理都大差不差)
当然,网络协议栈里不只有这些与计算机体系结构相对应
用户从网络获取数据的过程
本质
用户从网络上获取数据,都通过网卡这个硬件设备 (网卡将用户请求传输给远端服务器,再将返回的数据上传到本地主机)
- 所以,[用户从网络上获取数据]的过程,本质就是在访问硬件(是一种基于网络的输入/输出操作)
- 之前我们梳理过的,使用printf函数实际是在访问显示器,使用文件操作接口实际是访问硬盘,这些操作本质上都是一样的
如何获取 -- 系统调用
由于用户无法直接操作硬件,硬件是由os管理的,但os不允许用户直接访问其内部(安全性问题)
- 所以需要让用户给os发送请求,然后os进行相应操作
- 既然用户有了需求,那么os自然要为我们提供服务
- 用户需要向os发送请求,怎么发送呢? -- 也就是os为我们提供系统调用接口
- (这是不是就和之前学其他硬件是一样的?都需要系统调用这个中间介质)
- 所以,网络协议栈中也会使用系统调用接口
然后开发者会基于这些系统调用,制定出非常多的应用层协议供用户使用
图示
可以看出来,网络协议栈和操作系统密切相关
- 网络协议栈是一组协议的层次结构,用于在计算机网络中进行通信
- 而操作系统提供了网络协议栈的实现和支持
不同的os
从图中我们也可以看出来,两者虽然互相协作,但网络功能的实现并不关心实际计算机的结构如何实现
- 比如,是否有独立线程结构/是否有图形界面
- osi模型是一个标准,它既然已经定下了,肯定不是只适用于一种操作系统,对linux/windows等os都是一视同仁的
- 无论他们内部是如何实现的,网络协议栈都必须是相同的,否则该操作系统无法联网
网络通信的本质
两台主机通信流程
基于上面的图,我们可以简述一下两台主机是如何通信的:
- 两台主机在通信时,从一方主机的用户层开始向下传输数据,一直到网卡,然后网卡间通信,对方的网卡再将接收到的数据向上传输到用户层
- 和打电话的例子相同 -- 在逻辑上,相同层之间都认为是在互相直接通信(因为相同层使用的协议是一样的,同层间可以正常通信,在逻辑上,不同层无法交流)
- 而两台主机上遵守相同的网络协议栈,所以每一层都可以完美匹配
- 所以,上面那一系列过程,都是可以正常完成的
- 总结 -- 网络通信的本质就是贯穿协议栈的过程(只是方向有两个而已)