您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    从零构建TCP/IP协议(2)
    时间:2017-08-16 12:49 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    | 会话层       |               |                | 

    +--------------+---------------+----------------+ 

    | 传输层       | TCP           | 传输层         | 

    +--------------+---------------+----------------+ 

    | 网络层       | IP            | 网际层         | 

    +--------------+---------------+----------------+ 

    | 数据链路层   | 因特网,Wi-Fi |                | 

    +--------------+---------------+ 网络接口层     | 

    | 物理层       | 双绞线,光缆  |                | 

    +--------------+---------------+----------------+ 

    接上去我们将从底层逐层向下去解析网络,最后我们将复杂的引见TCP(TCP的知识足够 写好几本书,一篇博客里远远引见不完。不信可以看看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"的话,那么就发送这样一串二进制(用换行联系,这样更容易看清楚):

    这样表示看起来可行,不过遇到一个成绩,就是假设这一串二进制中间就出现了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地址,那么,比如这样一种衔接方式:

    A - B - C - E 

     \     / 

      - D - 

    A向E发送音讯,就可以这样:

    A向B和D发音讯:给我发到E去

    B和D接到之后发现来源是A,所以就只给C发音讯:给我发到E去

    C接到音讯之后发现来源是B和D,所以就给E发音讯:给我发到E去

    E接到音讯之后发现接纳方是本人,所以就把音讯吞了

    你别说,这种方式似乎真的行得通呢,除了有一个清楚的成绩,A向E发送一份音讯, 最后E收到了两份,这个我们需求到前面停止去重。我们先打上一个TODO的标签吧。

    (责任编辑:admin)