用wireshark软件抓MQTT心跳包,发现客户端发送心跳时长度为56字节,而Response包长度为60字节。对比两者后发现Response包多出的是4个字节的padding字段。这4个字节从何而来?
经过查资料得知以太网帧基于CSMA/CD技术(载波监听多点接入/碰撞检测),并且IEEE规定了这个碰撞域最小直径为64字节。所以在网路中传输时,以太网帧字节数小于64帧,将由padding段填充。
抓包中看到接收包比发送包分别是60字节和56字节的原因,是因为wireshark抓取的发送包截获在发送之前,该数据包发送时才会由网卡驱动负责填充到64字节,我们只能看到原始的56字节长数据。
而Response包,抓取时已经被网卡填充到了64字节,同时wireshark抓包是不显示4字节的校验字段的,再减去之,为60字节长。
从服务器端抓包进行验证,可以发现从客户端过来的包长度也显示为60字节。