【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索
这篇博客是读完《图解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 办法。恰是基于如许一种假设, 我们得以把具体营业代码和具体的推送商划分开来,这就是所谓的抽象,也就是一种分层。
要分层的原因也就浮现出来了,为了把不合的器械错综复杂的关系划分开来,也就是古话 说的"快刀斩乱麻"的┞封种感到。
你别说,这种方法似乎真的行得通呢,除了有一个明显的问题,A向E发送一份消息, 最后E收到了两份,这个我们须要到后面进行去重。我们先打上一个TODO的标签吧。
两种收集模型
日常编程里我们用的最多的就是TCP了,UDP也是有的,然则很少,举一些常见的例子:
- DNS -> UDP
- 连接MySQL -> TCP
- 连接Redis -> TCP
- RPC -> TCP
- 拜访网站 -> TCP
当然了,这只是常见实现方法如斯,其实用UDP也是可以实现的。这篇博客里我们临时不评论辩论 UDP。我们先来看TCP/IP四层是怎么分层的:
ascii 表格其实挺好看标,最后衬着的时刻因为宽字符的原因格局有点乱掉落了,下同
我们直接把 TCP/IP 四层协定 映射到 OSI七层协定 上看:
我们持续造协定,不过这一次我们想要这个协定贼靠得住,所以要多做一些工作。其实如果 按照七层协定来实现的话,完全不必在这一层干这么多工作,不合的层干不合的工作嘛, 对纰谬。不过畏敲?解TCP协定,我们呀,也跟着来本身假造一个协定,不如叫PCT好了。
大年夜零构建TCP/IP协定(此次叫PCT协定)
- +--------------+---------------+----------------+
- | OSI 七层协定 | 例如 | 对应TCP/IP四层 |
- +--------------+---------------+----------------+
- | 应用层 | HTTP协定 | |
- +--------------+---------------+ |
- | 表示层 | | 应用层 |
- +--------------+---------------+ |
- | 会话层 | | |
- +--------------+---------------+----------------+
推荐阅读
【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索为什么打开一个 H5 页面会有一长段白屏时光?因为它做了很多工作,大年夜概是: 初始化 webview -> 请求页面 -> 下载数>>>详细阅读
本文标题:从零构建TCP/IP协议
地址:http://www.17bianji.com/lsqh/36746.html
1/2 1