【51CTO活动】8.26 带你深度了解清华大学、搜狗基于算法的IT运维实际与探求
从零构建TCP/IP协议(这次叫PCT协议)
这篇博客是读完《图解TCP/IP协议》和《TCP/IP协议详解卷一:协议》之后的总结
我从0构建了一个牢靠的双工的有序的基于流的协议,叫做PCT协议 :)
OSI七层模型和TCP/IP四层模型
谈到计算机网络,就一定会说起OSI七层模型和TCP/IP四层模型,不过我们先从为何分层 说起。
为什么要分层
软件开发的进程中,我们常常听到的词语是"解耦","高内聚,低耦合"等等诸如此类的 词语,又常听见写Java的同窗念叨着"桥接形式","面向接口"等词语,那么他们说的这些 词语的中心成绩是什么呢?我们先从一个复杂的成绩看起:
如今我们需求做一个推送系统,要对接Android和iOS两个系统,大家都知道,Apple有一致 的推送渠道,APNs,所以我们只需接入这个就好,但是Android的推送在国际是百家争鸣, 就拿之前我为公司接入推送通知来举例,要接入极光,小米,能够要接入华为推送。
那我要怎样从详细的推送里笼统出来呢?运用面向对象的想法,我们很容易就能想到, 我们有一个父类,叫 BasePush ,他的子类就是详细的 MiPush , JPush , HMSPush 。 父类中有 push_by_id 和 push_by_tag 等办法,子类重写。这样我们在详细完成的时分 实例化子类,并且调用对应的办法就好。这种思想其实就是面向接口编程,在Java中我们 可以转变一下编程的写法,把承袭变成接口。在Python中我们就可以直接脑补这种写法。 用图来表示,地道面向对象的时分我们的想法是这样的:
假设我们把下面的图倒过去,就变成了面向接口:
在运用面向接口之后,我们就是做了这样一种假定:
def push(pusher, id):
pusher.push_by_id(id)
即,传给push函数的pusher实例一定存在 push_by_id 办法。正是基于这样一种假定, 我们得以把详细业务代码和详细的推送商划分开来,这就是所谓的笼统,也就是一种分层。
要分层的缘由也就显现出来了,为了把不同的东西扑朔迷离的关系划分开来,也就是古话 说的"快刀斩乱麻"的这种觉得。
两种网络模型
日常编程里我们用的最多的就是TCP了,UDP也是有的,但是很少,举一些常见的例子:
DNS -> UDP
衔接MySQL -> TCP
衔接Redis -> TCP
RPC -> TCP
拜访网站 -> TCP
当然了,这只是常见完成方式如此,其适用UDP也是可以完成的。这篇博客里我们暂时不讨论 UDP。我们先来看TCP/IP四层是怎样分层的:
ascii 表格其实挺美观的,最后渲染的时分由于宽字符的缘由格式有点乱掉了,下同
+------------+-----------------------+
| 层 | 例如 |
+------------+-----------------------+
| 运用层 | HTTP协议 |
+------------+-----------------------+
| 传输层 | TCP |
+------------+-----------------------+
| 网络互连层 | IP |
+------------+-----------------------+
| 网络接口层 | 如网线,双绞线,Wi-Fi |
+------------+-----------------------+
我们直接把 TCP/IP 四层协议 映射到 OSI七层协议 上看:
+--------------+---------------+----------------+
| OSI 七层协议 | 例如 | 对应TCP/IP四层 |
+--------------+---------------+----------------+
| 运用层 | HTTP协议 | |
+--------------+---------------+ |
| 表示层 | | 运用层 |
+--------------+---------------+ |
(责任编辑:admin)