作家
登录

从零构建TCP/IP协议

作者: 来源: 2017-08-16 14:03:39 阅读 我要评论

【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中我们就可以直接脑补这种写法。 用图来表示,纯粹面向对象的时刻我们的设法主意是如许的:

如不雅我们把膳绫擎的图倒过来,就变成了面向接口:

大年夜零构建 TCP/IP 协定

在应用面向接口之后,我们就是做了如许一种假设:

  1. def push(pusher, id): 
  2.     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协定)

  1. +--------------+---------------+----------------+ 
  2. | OSI 七层协定 | 例如          | 对应TCP/IP四层 | 
  3. +--------------+---------------+----------------+ 
  4. | 应用层       | HTTP协定      |                | 
  5. +--------------+---------------+                | 
  6. | 表示层       |               | 应用层         | 
  7. +--------------+---------------+                | 
  8. | 会话层       |               |                | 
  9. +--------------+---------------+----------------+ 
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      移动H5首屏秒开优化方案探讨

    【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索为什么打开一个 H5 页面会有一长段白屏时光?因为它做了很多工作,大年夜概是: 初始化 webview -> 请求页面 -> 下载数>>>详细阅读


    本文标题:从零构建TCP/IP协议

    地址:http://www.17bianji.com/lsqh/36746.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)