zoukankan      html  css  js  c++  java
  • 为什么抓包工具所抓包最小是54字节而不是60字节

    摘自:https://blog.csdn.net/shenwansangz/article/details/52858897
    根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS。
        按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?
        原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和出错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交给“设备驱动程序”做进一步处理。这时我们抓包的软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6 + 6 + 2 + 1500 = 1514。
        以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是 6 + 6 + 2 + 46 + 4 = 64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64 字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节帧的时候,已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同。(比如,wireshark抓到的可能没有填充数据段,而sniffer抓到的就有填充数据段),(不过 根据我的观察wireshark不同的版本抓获的最小数据包的大小好像有60字节也有54字节的情况.....)
     

    以太网 为什么取51.2微秒做争用期

    按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,
    因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒(这个51.2的计算方法应该是这样的:
    (51.2/1000000)*2/3c=10000米,不对劲吧?应该是2*2500=5000才符合实际。
    按算式算的话,最短帧应该是250bit左右才是。我在另外一个帖子中看到,考虑到网络介质本身的延迟,为了确保CD能够正常运行,
    所以把结果放大了一倍,取了512bit,这个解释还算合理,采纳!)。这段时间所能传输的数据为512位,因此也称该时间为512位时。
    这个时间定义为以太网时隙,或冲突时槽。512位=64字节,这就是以太网帧最小64字节的原因。
  • 相关阅读:
    软件概要设计
    项目文件-搭建工程
    select标签中设置只读几种解决方案
    PHP ob缓冲区函数的使用
    laravel笔记
    ubuntu系统更新命令
    RBAC权限控制系统
    laravel 数据库获取值的常用方法
    php中获取数据 php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
    php 文件上传 $_FILES 错误码
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/13543800.html
Copyright © 2011-2022 走看看