五层网络通信模型

作者: | 更新日期:

聊聊网络相关的话题。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

大家好,这里是tiankonguse的公众号(tiankonguse-code)。
tiankonguse曾是一名ACMer,现在是鹅厂视频部门的后台开发。
这里主要记录算法,数学,计算机技术等好玩的东西。

这篇文章从公众号tiankonguse-code自动同步过来。
如果转载请加上署名:公众号tiankonguse-code,并附上公众号二维码,谢谢。

零、背景

之前分享过什么是协议,说的比较抽象。
最近组内有人分享怎么使用tcpcopy,但是没有深入了解ip层和tcp层怎么实现的,这里尝试分几篇文章来梳理一下。
计划分四篇文章来介绍:五层网络通信模型、TCP通信,TCP网络流量控制,TCPCOPY原理。
这是第一篇五层网络通信模型。

一、应用层

应用层跑着应用程序。
现在你手机上的QQ,微信都是应用层的应用程序。

QQ好友之间聊天,或者微信好友之间聊天都是应用之间的通信。
但是QQ之间的通信协议与微信之间的通信协议是不一样的。
每个应用程序自己的通信协议。
常见的通信协议是HTTP协议,平常访问网站什么的走的都是HTTP协议。

应用程序有了协议就可以根据协议组织数据了。
有了数据后怎么将数据发送给目的地呢?

我们知道这些应用程序都会和中心服务器通信,所以应用程序的目的是把组织好的数据发送给中心服务器。
假设我们知道了中心服务器的ip地址,理想情况下我们的应用程序调用一下发送命令,数据嗖的一下就去中心服务器了。

但是细想一下,有点不对。
中心服务器上边那么多服务,它怎么知道我给他发数据了?
所以中心服务器还需要一个特征来区分,即满足这个特征的数据才是中心服务器需要接收的数据。
这个特征就是中心服务器的端口,而且这个端口必须是固定的,这样我们才能发给它数据。

看完中心服务器,再来看看我们的应用程序所在的机器(手机也是一台微型机器)。
中心服务器回数据时我们怎么来区分这台机器的数据呢?
所以我们这个应用程序机器也需要有一个端口。这个端口可以是随机的,因为我们主动找中心服务器的,找它的时候带上了这个端口,它回数据的时候也能找到我们了。

这个可以使用寄快递的方式来理解。
ip就是发送地址和邮寄地址,端口就是寄信人和收信人,数据就是邮件内的东西。

好了,看到这个我们知道了应用程序和中心服务器通信需要四个特征和一个数据。
四个特征:应用程序ip、应用程序端口、中心服务器ip、中心服务器端口。
一个数据;应用程序与中心服务器约定好的协议数据。

至于这个数据具体怎么通信,且看下一小节传输层。

二、传输层

上面提到我们已经有四个特征和一个数据了,其中两个特征是应用程序端口和中心服务器端口。
需要这两个特征的原因是依靠这个才能在单机中找到对应的程序。
这个找的过程就是传输层做的事情。

我们可以理解为每台机器上都有一个传输层机器人,收到底层来的数据后分析数据找到端口,然后把数据丢给端口对应的应用层的程序了。
还是以快递为例,假设科技很发达了,家里收到信后有机器人会把信送到对应的收信人手里,这里机器人就是传输层机器人。

这里涉及一个问题:机器人怎么识别收信人呢?也就是传输层怎么识别端口呢?
所以这一层也有一个约定好的协议。
比如左上角第一个位置标示什么机器人的协议,发送人和收信人根据这个协议在对应的位置可以找到寄信人和收信人。
然后机器人就可以知道信应给送到谁手里了。

目前处于科技发展初期,有两种机器人。
第一种机器人功能最低,每次只能收发一个包裹,包裹大了还搬不动,包裹丢了还不告诉你。好处时这种机器人功耗低。
第二种机器人功能强大自带魔法,邮寄包裹的时候太大了还可以使用魔法拆分成几个小包裹,收到包裹后可以再还原为原来的包裹。更重要的时它可以保证包裹不丢。代价自然是功耗较高。

大部分都是使用第二种机器人。
因为我们不需要关心包裹大小以及是否丢失的问题了,我们的爸爸有钱,不怕那点功耗,是不是?

这里怎么保证包裹不丢失呢?
这时候魔法表演有需要上场了。

我们来看看下面这场对话吧。 这是正常情况下的对话。

寄包裹机器人:在家吗?有你的快递?
收包裹机器人:老铁,我一直都在呢,送来吧。
寄包裹机器人:好的,准备接单了。

寄包裹机器人:给,包裹!
收包裹机器人:收到了。

那丢包裹的时候呢,是这个样子。

寄包裹机器人:在家吗?有你的快递?
收包裹机器人:老铁,我一直都在呢,送来吧。
寄包裹机器人:好的,准备接单了。

寄包裹机器人:给,包裹!

寄包裹机器人:老哥还在吗?收到包裹回一声。幸亏我魔法克隆出了一个包裹。我再发给你一次。
收包裹机器人: 在了,刚才拉肚子去厕所了,收到了。咦,怎么又来一个?算了丢了吧。

有时候包裹太大,机器人一次搬不动,所以会使用魔法拆分为几个小包裹。
但是这里有个问题:小包裹合并成大包裹需要按顺序来,所以小包裹都分配了魔法编号。
比如上面例子中,也分配了一个魔法编号,收包裹老哥就是靠这个编号来识别重复包裹的。

在传输层中,第一类机器人可以理解为UDP协议,第二类机器人可以理解为TCP协议。
在这个协议中,包裹里面的内容实际上是包裹数据和端口了,邮寄地址在外面,下个小节我们来看看这个寄送地址吧。

三、网络IP层

平常我们常见的邮件地址即IP地址,真实传输数据的机器人可不认识。
他们只识别周围机器人的小名,即每个机器人唯一编号MAC地址。

所以IP层需要做的事情是将应用层的包裹包装成一个大包裹,里面装的有传输层的包裹和邮寄的地址信息。

机器人只识别周围的人的小名,有时候目标的机器人不在周围怎么办?这时候六度理论就出来了。

有个人说,在社交网络里面,你只需要通过六个人帮你传递信息,你就能把信息传给世界上的任何一个人。
这里虽然说得夸张了点,但是我们通过若干次,确实可以找到对应的人的。
毕竟整个世界就是一张互相关联的大网络。

对于机器IP同样如此,一台机器不知道目标的IP的MAC地址不要紧,可以让周围的人帮忙把包裹传递给目标IP。

四、数据链路层与物理层

上面机器人可以通过附近的机器人来帮忙转发包裹,这样转发若干次目标机器人就可以收到了。
那机器人之间传递包裹存在什么问题呢?

不兼容问题。
你周围的机器人可能是各个牌子的机器人,需要两层来处理这个传输问题转换问题。
不然其他机器人识别不了你的包裹。

五、总结

好了,这里简单的介绍一下网络五层通信模型,由于时间关系,后三层三言两语就带过了,就这样吧。
好久没写文章了,欠下不少文章,下周再写吧,写篇好好写。

对了现在开通了博客、公众号、算法小密圈、IT技术交流微信群。
要加微信群的可以加我微信,我拉大家进群。
比较好玩的算法放在小密圈发布。
欢迎大家加入看各种算法的思路。

长按图片关注公众号,阅读不一样的技术文章。

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越