• 链路层的简介和MTU


    链路层杂谈(凭个人理解瞎说的,欢迎拍砖)

        链路层,说白了就是把网络层的IP数据处理一下,加点东西,放到物理层上去。
        加的东西:源、目的地址和CRC校验值,有的还有类型这个字段,用来区分协议。
        处理的部分:就是数据,就是把IP数据报,用指定的方法打个包;


    打包的方法有以下几种:
        尾部封装:把变长字段都放到最后(CRC之前),主要是为了前面的512整字节的数据整体直接复制到内核中而减小复制次数。
        SLIP协议:串行线路IP,就是用END字符作为分隔符,分割数据报。为了防止干扰,数据报的开头也一定保证有一个END标识符。
        压缩的SLIP:也就是CSLIP,相对于SLIP,只存储修改的控制信息。就是为了防止发送一个字节也要加40个字节头的情况。
        PPP:点对点协议,增加了“协议”这个字段,可以支持更多的协议,更多的业务。

    MTU(最大传输单元)

    定义:各种为网络对数据帧都有一个大小限制,这个值就是MTU。

    一般的我们常用的是以太网和IEEE 802.3的限制分别为1500和1492字节。如下图:

    路径MTU
    从A到B可能经过不同的网络,其中最小的MTU就是路径MTU;
    另外,从A到B,与B到A的寻路结果可能不同,所以它们的路径MTU也有可能不同。

    MTU的吞吐量
    如果线路速率是9600 b/s,一字节等于8bit,加上开始停止两个bit,那么线路的速率就是960B/s,传输一个1024B的分节需要1066ms。
    从一般的经验上看,一个交互应用,在本机有另一个应用发送1024B数据到网络的情况下,它大约要等待一般的时间533ms。这个时间对于交互应用来说体验很不好。
    SLIP用减小MTU值的方法解决:MTU=256,那么传输需要266ms,它的一半就是133ms。但是这样减小了带宽的利用率(因为数据报占用的比例小了)

  • 相关阅读:
    【C++】对象模型
    【C++多线程】读写锁shared_lock/shared_mutex
    【C++多线程】共享数据的初始化保护
    【C++多线程】共享数据保护
    【C++多线程】lock_guard<T>类和unique_lock<T>类
    【C++多线程】转移线程所有权
    【C++ 】std::ref()和std::cref()
    【C++多线程】传递参数
    【C++多线程】detach()及注意
    linux 打开CHM文件
  • 原文地址:https://www.cnblogs.com/bugutian/p/5103591.html
Copyright © 2020-2023  润新知