到底什么是网络模型中的“层”?
常听说什么7层网络模型,4层网络模型,层与层之间通信,上层调用下层,这个“层”到底是个什么鬼?是个什么东西?能不能给我一个看的见摸的着的东西?
如果抛开技术层面,层还是很好理解的。比如说到公司高层,脑海里会浮现出什么画面?一群围着董事长、CEO开会决策、拍马屁的人。但是一个公司也不可能就这十几个高层。总不能让京东老总亲自送快递吧?
公司还需要十几万基层(底层)送快递,脑海里肯定浮现出骑着助动车在大街小巷穿梭的人群。十几个高层能不能有效管理十几万基层工作人员?
可能会很难。
自然就会产生中层管理人员,如事业部总裁、总监、经理,通过多层级的划分,公司就这么管理起来了。
层,一个群体抽象。每个层都有其明确的职能划分。高层负责决策、中层负责监督、基层执行。行业分工、职业分工,将复杂问题通过流水线化,变得易于执行与实现。
计算机网络的层级划分,是将计算机之间非常复杂的通信过程,细分成多个模块(流水线化),每个模块完成的功能,通过其模块的字面意义,就可以顾名思义。如果你喜欢,你可以一直称之为模块。但是业界更喜欢称之为层。
以手机为例,就是一个层级划分的典型代表。芯片商研发芯片,主要负责物理层、部分链路层。其中包括,0、1调制成信号、信号解调成0、1、信号编码、信号解码、信号同步、信号均衡、信号滤波、信号放大、信号扰码、信号上射频,信号下射频等。
芯片的0、1数据从哪里来?
当然从物理层直属上层,链路层,芯片要传输的0、1数据难道不是来自于用户吗?
是的,数据的源头确确实实是用户点击菜单、键盘输入产生的。是通过流水线(层级)一层层流转到芯片的物理层。由于这个流水线很漫长,咱们还是耐心从物理层一层层向上演绎。
物理层芯片大佬看似很牛逼啊,可是再牛逼也得提供接口为上层服务啊,否则用户的0、1数据如何进入芯片
至少要提供发送、接收接口,这是数据层面的接口,保证数据的发送和接收。芯片大佬说,这个好说,我可以提供primitive命令给你们,只要按照primitve要求,输入参数即可。
还得提供如何配置信道、速率、调制模式、信道带宽、编码类型、扰码类型、长短训练符、Guard Interval,这是管理层面的接口。当然还有很多很多类似的管理状态接口,信道的强度、信噪比、切换信道等等。
这是物理层提供给其直属上层的接口。所谓接口就是函数。这些函数谁提供谁才能理解并执行,而上层不需要理解这些接口函数,只要提供函数的合法输入参数即可。这些函数由N行代码组成,在物理层芯片CPU上执行。不在手机主CPU上执行。
物理层做完以上就OK了吗?
不ok啊,还有很多事要做呢!
信号发送出去了,接收方如何知道信号的发送速率,信号的频宽,接收方如何让自己tune到与接收信号同步的频率?
物理层在要发送的数据的首部位置添加了Preamble、Signal、Service、CRC,这些头部可以回答以上的问题。在QAM调制时,还会在子信道中用N个Pilot信道,用于接收方对信号对齐做插值运算。如果接收信号CRC错误,直接丢,数据根本到不了上层。
物理层直属上层是链路层的MAC层,MAC层通常也在芯片里实现。其作为流水线的一道工序,从其直属上层获得数据,一转手扔给下层(发送)。或者从下层获得数据,一转手扔给其上层(接收)。
MAC层做的事仿佛很easy,为何要存在呢?
哈哈,如果没有MAC层,如何将不属于自己的数据过滤掉呢?
很难吧?
有了MAC层, 很简单,只要检查MAC层的接收地址,是否等于自己的MAC地址。
手机不是有IP地址的吗,用IP地址判断不是也可以的吗?
MAC层,咱就想保持独立自主,不需要依赖于上层的地址,就可以决定接收与拒绝。MAC层如果有识别客户名单的字段,比如ether-type,那么就不必有LLC了。但是如果没有,那么就需要LLC。LLC工作很简单,就是为了告诉接收方,是哪个客户的数据,IPv4的还是IPv6的。
LLC层的直属上层就是大名鼎鼎的TCP/IP了,TCP/IP跑在手机主CPU内。没有这两层的存在,手机流量到不了互联网。如果想自己开发一个协议连入互联网,可能协议的名字不叫TCP/IP,那么协议的功能就是TCP/IP,即网络层、传输层。
接下来数据到最高层,应用层。应用层通常指与用户直接打交道的,通常使用http来实现。http将用户的请求,用黑暗料理打包成0、1数据,通过接口发给TCP/IP(发送),或者将从TCP/IP收到的数据(接收),按照http协议格式显示在页面上。
上文既可以正着看(用户数据接收),也可以倒着看(用户数据发送),效果是一样的。
如果不想使用TCP/IP,想把http使用一个管子(接口),套接在数据链路层的MAC/LLC上运输,可以吗?
可以的!只要接收方也是一样的实现方式。
如果只想利用IP网络层,不想使用TCP传输层,想把http使用一个管子(接口)套接在IP层上运输,可以吗?
也是可以的,只要接收方也是一样的实现方式。
分层还是非常灵活的,但是需要理解以上两种方式的局限性。前者是无法和互联网上的主机通信,后者需要自己实现http的可靠传输。
直接使用TCP/IP运输http,躺赢!不会有乱七八糟的烦心事!使用流水线化的分层操作,通信成为一件很easy的事!
