网络协议栈和os的关系(网络协议栈和计算机体系结构图相结合),用户如何从网络获取数据+本质,网络字节序(介绍+4个接口),简述网络通信的本质

目录

网络协议栈和os的关系

思考联系

实际

用户从网络获取数据的过程

本质

如何获取 -- 系统调用

图示 

不同的os

网络字节序 

引入

介绍

网络数据流的地址

接口

网络通信的本质

两台主机通信流程


网络协议栈和os的关系

思考联系

网络协议栈涵盖了硬件和软件,而os正是管理软硬件资源的中枢

os是计算机体系结构的一部分,计算机体系结构中也囊括了软硬件:

如果我们将网络协议栈和体系结构图对比着一起看

  • 硬件层正好和底层硬件中的网卡相匹配
  • 而数据链路层正好是软硬件的分界线,它必然和驱动程序有着异曲同工之妙
  • 恰好,再上两层(运输层,网络层)被写在了os中,是os的一部分
  • 到了最上层的应用层,也与用户部分匹配,用户看到的正是经过应用层处理过的数据

实际

而实际上的情况也和我们的想法一致

  • 用户从网络上获取数据,都是通过网卡这个硬件设备得到的
  • 数据链路层属于网卡驱动的一部分
  • 传输层和网络层是真正在os中实现的模块,是os的一部分(所以学习了文件管理/进程管理,其实也就学习了这两层是如何运作的,原理都大差不差)

当然,网络协议栈里不只有这些与计算机体系结构相对应 

用户从网络获取数据的过程

本质

用户从网络上获取数据,都通过网卡这个硬件设备 (网卡将用户请求传输给远端服务器,再将返回的数据上传到本地主机)

  • 所以,[用户从网络上获取数据]的过程,本质就是在访问硬件(是一种基于网络的输入/输出操作)
  • 之前我们梳理过的,使用printf函数实际是在访问显示器,使用文件操作接口实际是访问硬盘,这些操作本质上都是一样的

如何获取 -- 系统调用

由于用户无法直接操作硬件,硬件是由os管理的,但os不允许用户直接访问其内部(安全性问题)

  • 所以需要让用户给os发送请求,然后os进行相应操作
  • 既然用户有了需求,那么os自然要为我们提供服务
  • 用户需要向os发送请求,怎么发送呢? -- 也就是os为我们提供系统调用接口
  • (这是不是就和之前学其他硬件是一样的?都需要系统调用这个中间介质)
  • 所以,网络协议栈中也会使用系统调用接口

然后开发者会基于这些系统调用,制定出非常多的应用层协议供用户使用

图示 

可以看出来,网络协议栈和操作系统密切相关

  • 网络协议栈是一组协议的层次结构,用于在计算机网络中进行通信
  • 而操作系统提供了网络协议栈的实现和支持

不同的os

从图中我们也可以看出来,两者虽然互相协作,但网络功能的实现并不关心实际计算机的结构如何实现

  • 比如,是否有独立线程结构/是否有图形界面
  • osi模型是一个标准,它既然已经定下了,肯定不是只适用于一种操作系统,对linux/windows等os都是一视同仁的
  • 无论他们内部是如何实现的,网络协议栈都必须是相同的,否则该操作系统无法联网

网络字节序 

虽然网络功能对计算机类型不做要求,但在网络中传输的数据是需要规定的

引入

还记得吗,内存中的多字节数据相对于内存地址有大端和小端之分:
  • 小端 -- 把高权值的数字放在高地址处,低权值的数字放在低地址处
  • 大端 -- 把高权值的数字放在低地址处,低权值的数字放在高地址处
  • 所以有"小小小"的口诀

因为大小端没有明显的优劣差异,所以一直到现在,字节序列都没有统一

一旦不同主机之间要通信,就势必需要考虑一些问题 -- 会出现 大端机向小端机发送数据 -> 小端机会以小端的形式读取以大端发送的数据 -> 导致 数据错误

介绍

所以就需要做出约定 -- tcp/ip协议规定,网络数据流均采用大端形式

这样就保证了在网络中的统一 : 如果你是小端机,发送和接收都需要做转换,而大端机不需要

网络数据流的地址

  • 发送主机 通常将发送缓冲区中的数据按内存地址从低到高的顺序发出
  • 接收主机 把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
  • 所以,网络数据流的地址是 -- 先发出的数据是低地址,后发出的数据是高地址

接口

如果让我们自己转换,就有点麻烦,所以,系统为我们提供了一些函数,帮助我们完成通信

乍看很复杂,实际上函数名字都是有含义的:

  • h表示host(主机字节序)
  • n表示network(网络字节序)
  • l表示32位长整数(4字节)
  • s表示16位短整数(2字节)
  • eg:htonl 指将4字节的整数从主机字节序转换为网络字节序,以便在网络中传输

网络通信的本质

两台主机通信流程

基于上面的图,我们可以简述一下两台主机是如何通信的:

  • 两台主机在通信时,从一方主机的用户层开始向下传输数据,一直到网卡,然后网卡间通信,对方的网卡再将接收到的数据向上传输到用户层
  • 和打电话的例子相同 -- 在逻辑上,相同层之间都认为是在互相直接通信(因为相同层使用的协议是一样的,同层间可以正常通信,在逻辑上,不同层无法交流)
  • 而两台主机上遵守相同的网络协议栈,所以每一层都可以完美匹配
  • 所以,上面那一系列过程,都是可以正常完成的
  • 总结 -- 网络通信的本质就是贯穿协议栈的过程(只是方向有两个而已)

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值