作家
登录

从零构建TCP/IP协议

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

  • | 传输层       | TCP           | 传输层         | 
  • +--------------+---------------+----------------+ 
  • | 收集层       | IP            | 网际层         | 
  • +--------------+---------------+----------------+ 
  • | 数据链路层   | 因特网,Wi-Fi |                | 
  • +--------------+---------------+ 收集接口层     | 
  • | 物理层       | 双绞线,光缆  |                | 
  • +--------------+---------------+----------------+ 
  • 接下来我们将大年夜底层逐层向上来解析收集,最后我们将简单的介绍TCP(TCP的常识足够 写好几本书,一篇博客里远远介绍不完。不信可以看看TCP/IP协定详解那三卷书加起来 有多厚)。

    物理层

    大年夜零构建 TCP/IP 协定

    物理层,顾名思义,就是物理的,可见的器械。也就是日常平凡我们所说的光纤,Wi-Fi(无线电波) 等,我们知道计算机是用0和1来表示的,对应到不合的介质里是不合的表示情势, 是以为了把物理层的实现樊篱掉落,我们把这些都分到一层里,例如Wi-Fi经由过程波的 波峰与波谷可以表示出0和1的状况(我们日常平凡会说成1和-1,对应计算机里其实就是1和0)。 对应到电里,我们可以用高电压和低电压来表示出1和0。如同最开端讲的例子一样, 我们不管具体的介质是什么,肮脏道,我们用的┞封个介质有办法表示1和0。

    数据链路层

    如不雅我们却竽暌故局写一封信,填完收件人之后,邮局派发的次序可能是,先送达到指定的 国度,然后送达到具体的省,然后市。。。逐次送达下去。那么我们玩电脑的时刻,计算机 要怎么把A发给B的信息精确送达呢?

    肯定大年夜家都要有一个地址,上一节我们知道了,不合的介质都有他的方法表示1和0,那么 我们给介质的两端加上地址,我们叫做MAC地址,若何?就拿路由器来说吧,路由器的 MAC地址叫做 router 棘手机的MAC地址叫做 phoner ,为了表示成0和1,我们分别取 字符串的ASCII的二进制来表示,路由器叫做 1110010 1101111 1110101 1110100 1100101 1110010 , 而手机则叫做: 1110000 1101000 1101111 1101110 1100101 1110010 ,如今我们终于可以发信息 了,起码是相邻的两个器械可以经由过程氖刂鹃质来发信息,所以我们定下如许的协定:

    协定,其实就是一种商定 :)

    • 最开端我们发送111表示信息开端
    • 然后,我们先有48个bit表示发送者的MAC地址,再有48个bit表示接收者的MAC地址
    • 之后,就是我们要发送的信息
    • 最后我们发送000表示停止,如不雅开首和结尾不是如许的,那么解释这是假的信息。

    知道膳绫擎为啥手机叫 phoner 而不叫 phone 了嘛 :) 就是为了包管地指名长度一样

    "hello" 的二进制表示是 "1101000 1100101 1101100 1101100 1101111",如不雅路由器要向 手机发送 "hello"的话,那么就发送如许一串二进制(用换行瓜分,如许更轻易看清跋扈):

    所以我们在协定里如许写:

    • 起首是来源地址的端标语,8个bit来表示,因为ip琅绫擎已经待了ip地址,我这里就不反复带了
    • 然后是目标地址的端标语,8个bit来表示
    • 然后是这个包的序号,8个bit来表示

    如许表示看起来可行,不过碰到一个问题,就是如不雅这一串二进制中心就出现了000怎么办? 因为计算机攫取的时刻是大年夜头开端读的,如许子计算机就会乱掉落。

    为懂得决这个问题,我们修改一下协定,在111之后加上发送者地址+接收者地址+所要发送的 信息的长度。我们用 16个字节来表示,也就是嗣魅这中心不克不及发送多于 2 ** 16 个bit。

    所以协定变成了:

    • 最开端我们发送111表示信息开端
    • 随后我们用16个bit表示包的长度
    • 然后,我们先有48个bit表示发送者的MAC地址,再有48个bit表示接收者的MAC地址
    • 之后,就是我们要发送的信息
    • 最后我们发送000表示停止,如不雅开首和结尾不是如许的,那么解释这是假的信息。

    发送者地址+接收者地址+hello的bit长度是 6 * 8 + 6 * 8 + 5 * 8 = 136,二进制表示 为: 00000000 10001000

    所以发送的┞符个信息变成了:

    收集层

    如今我们终于可以发送信息了。不过有个缺点,我们只能在相邻的时刻才可以发送信息, 那有没有办法可以借助两两传递,在不合的处所也发送信息呢?有,那就是我们的收集层 也就是ip(我们能碰到的最通俗易懂的一个名词了,临时把它算作收集层的代名词也不为过)。

    方才我们已经学会了一种技巧,就是分派一个地址,方才的叫做MAC地址,我们用来做 相邻两个节点的定位。其拭魅这个地址也可以用来在多个节点之寄┞芬人,基于如许一种 技巧:每个节点都知道和本身相邻的节点的MAC地址,那么,比如如许一种连接方法:


      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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