• 计算机网络(第二弹) --- 网络传输的基本流程最容易理解的讲述


     上篇文章主要介绍了协议的概念以及网络(协议)分层的概念, 那么实际情况下网络传输的基本流程是怎么个情况呢? 各个层次的协议之间是如何协同工作的? 其实关于网络传输的基本流程知道两个核心的操作即可 ⇒ 封装和分用, 主要以例子的形式进行通俗明了的介绍和解释.

    封装和分用

    1 封装

      在解释封装和分用之前, 先介绍几个常用的概念:

    • 不同的协议层对数据包有不同的称谓, 在传输层叫做段(segment), 在网络层叫做数据报(datagram), 在链路层叫做帧(frame);
    • 封装: 应用层数据通过协议栈发到网络上时, 每层协议都要加上一个数据首部(header), 这就是封装的概念;
    • 首部信息中包含了一些类似于首部有多长, 载荷有多长, 上层协议是什么等信息;
    • 数据封装成帧后发到传输介质上, 到达目的主机后每层协议再剥掉相应的首部, 根据首部中的上层协议字段将数据交给对应的上层协议处理.

    🌰  例如今天小李要给小万发一个电子邮箱, 各个层级之间都是怎么操作的?
    (1) 应用层也就是QQ邮箱需要根据用户输入的数据, 将这个数据构造成一个应用层数据报, 应用层协议做的事情实际上可能非常复杂, 这个构造数据报的过程就可以想象成是一个字符串的拼接或者说是字符串的序列化.
    在这里插入图片描述
    (2) 应用层协议将数据交给传输层协议, 进一步进行封装, 也就是在刚才数据的基础上加上一个传输层的协议报头, 也是字符串的拼接或者说是字符串的序列化, 这里可以想象成发快递的时候, 需要加上包装, 包装上要贴上标签, 而这个协议报头就相当于这个标签.
    在这里插入图片描述
    (3) 传输层需要把数据进一步交给网络层, 此时就得到了一个网络层数据报, 网络层协议再加上一个网络层协议报头, 这里还是字符串的拼接或者说是字符串的序列化.
    在这里插入图片描述
    (4) 网络层还需要进一步把数据交给数据链路层, 数据链路层再加上一个数据链路层的协议帧头+帧尾.
    在这里插入图片描述

    (5) 数据链路层得到数据帧, 交给物理层, 物理层将会把这个数据转换为光电信号, 通过硬件设备(网线 / 光纤等)传输出去, 至此为止, 网络传输的封装过程就结束了.
    注意: 关于 IP 地址 和 MAC 地址, 我们以上篇文章的例子进行解释上篇文章

    • 网络层的源 IP 始终是 济南, 目的 IP 始终是北京;
    • 数据链路层的 MAC 地址则是不断变化的, 例如从济南到沧州, 源 MAC 就是济南, 目的 MAC 就是沧州; 再从沧州到天津, 源 MAC 就是沧州, 目的 MAC 就是天津; 最后从天津到北京, 源 MAC 就是天津, 目的 MAC 就成了北京.

    总的流程:
    在这里插入图片描述

    2 分用

    🌰 关于分用的过程, 还是用上面这个例子进行解释.
    (1) 物理层接收到对方发来的光电信号, 解析成二进制的 bit 流, 进一步得到了数据链路层数据帧, 把数据帧交给数据链路层来处理.
    (2) 数据链路层解析数据帧, 剥离帧头和帧尾, 取出 IP 数据报, 并交给网络层.
    在这里插入图片描述
    (3) 网络层拿到刚才的网络层数据报, 再进行解析, 去掉网络层协议报头, 将数据传给传输层.
    在这里插入图片描述
    (4) 传输层协议拿到传输层数据包, 再进行解析, 去掉传输层报头, 将数据报交给应用层.
    在这里插入图片描述
    (5) 应用层也就是 QQ 邮箱解析应用层数据包, 分析出数据内容是什么, 发送者是谁, 显示到界面上, 到这时候, 小万就能看到我给他发的消息是什么了!!!
    在这里插入图片描述
    总的流程:
    在这里插入图片描述

     关于上面的流程, 其实是简化版的流程, 毕竟忽略掉了网络传输的一些中间过程, 只考虑了发送和接收罢了, 实际上的过程比上面的要复杂很多, 如下所示, 可以参考一下:

    在这里插入图片描述

    3 总结

    • 传输层数据包: 段(segment);
    • 网络层数据包: 数据报(datagram);
    • 数据链路层数据报: 帧(frame);
    • 封装: 上层协议把数据交给下层协议, 下层协议包装上自己的协议报头或者报尾;
    • 分用: 下层协议对数据进行解析, 剥离出自己协议报头, 把数据交给上层协议.
  • 相关阅读:
    找游戏外包开发游戏,有哪些好处呢?
    【C++】命名空间namespace,cin,cout,函数重载
    8个独立站海外营销工具
    vxe-table添加排序
    嵌入式行业工作毕业生起薪多少?
    linux系统编程3—文件存储函数
    C++ 信奥编程 1132:石头剪子布
    XMLHttpRequest的五种状态描述——常见的请求头和相应头都有什么——reflow(回流)repaint(重绘)引起变换的原因
    pytorch初学笔记(十四):损失函数
    python getopt模块的使用
  • 原文地址:https://blog.csdn.net/Onion_521257/article/details/127704821