网卡接收到错误的帧会直接放弃吗

对于检查出的无效 MAC 帧就简单地丢棄以太网不负责重传丢弃的帧。 ( )

业余时间拿学历:子女入学、升职加薪、积分落户、考研、公务员考试


在网卡驱动里写入数据是否要修改以太网帧头?

我用单片机控制ENC28J60来实现网络的通信我在PC机的TCP客户端发送数据到单片机TCP服务器,当TCP服务器接到数据后再发回去。就是 PC機发送“123”到单片机单片机接受到后,就将这串数据修改后发回去

    只是这个数据的修改不是在上层改动的,是在网卡驱动里面改的峩修改好数据后,需要重新构建IP、TCP的头以及校验和的计算;一开始TCP客户端发送“123456”然后服务器接收到后,进行处理将修改数据的值但昰数据的

的。这样可以实现通信没有卡住的现象。

当我修改了数据改变了数据的长度后(比如说一开始是 data[6],改后变为data[7],就是在后面加了一位数),同样进行了IP、TCP头构建以及校验和计算,虽然可以实现通信但是只能实现一次(比如:PC机TCP客户端发送“123”,然后单片机接受到後就返回了“1234”可以实现一次通信,第二次TCP客户端发送数据就出现了未知错误了如下图:)

不知道哪里出错了不知道要不要修改以太網帧头啊?

我试过修改就是把 以太网帧头的那个 数据类型长度 加1,但是结果第一次都发送不了·请高手指点啊~


一般都有长度控制字节這样才能帮助达到不粘包之类的功能啊。不然你怎么知道这帧数据有多长呢这和变长不变长没关系的。

CRC怎么计算都有直接的函数的就昰验证是否通信帧是否由于通信问题导致错误。解释原理也很简单的

------解决方案--------------------我觉得你说的什么以太网帧的前导码属于物理层的概念了,你应该不用理会现在你的问题应该是tcp封包的问题,tcp各个分包之间不是要有序的吗你封包出问题了,我估计

你自定义的协议每个通信帧竟然没有长度?

一般都有长度控制字节这样才能帮助达到不粘包之类的功能啊。不然你怎么知道这帧数据有多长呢这和变长不变長没关系的。

CRC怎么计算都有直接的函数的就是验证是否通信帧是否由于通信问题导致错误。解释原理也很简单的

他那个图是以太网的幀格式,以太网的帧是没有长度的是通过以太网物理层的方式分帧的

很多抓包工具都是抓不到这些前导码的,网卡在物理层过滤掉了

你没有指定的操作系统但我至尐可以为Linux说话:

它可以在你的内核,网卡和驱动程序以及ethtool的版本。

我们需要告诉驱动程序/硬件做两件它通常不会做的事情: 1)将FCS字段传遞给网络堆栈 (通常,这被传递之前截断) 2)不丢弃数据包坏FCS域而不是将它们传递了原样

有两个的ethtool选项来实现每一项:

有了这些,我鈳以使用wireshark或tcpdump来查看FCS字段即使它们不正确。 (在我的情况下我有一些网络设备,用一个准确的时间戳即时替换校验和 - 这会导致数据包出現“不良”并且我使用上述恢复)

并非所有卡都会执行这个!他们可能会将上述ethtool选项“固定”掉或不对其做出回应。

在1G的速度下我看箌e1000卡工作良好。在10G的时候我还没有找到一个可以完成这个任务的网卡,并且必须依赖更复杂的数据采集卡

同样,我不知道最低内核/ ethtool版夲要求是什么但我记得要升级CentOS服务器才能使其工作。

我也知道r8169和e1000驱动程序/卡可以做到这一点,但不能说任何其他组合

另请注意,您將无法在发送它们的计算机上捕获传出的FCS值因为它们在进程中添加得相当晚(可能已卸载到卡本身),因此pcap无法看到

我要回帖

 

随机推荐