C# 如何通过TCP从接收的数据中获取CRC?

C# 如何通过TCP从接收的数据中获取CRC?,c#,tcp,ethernet,C#,Tcp,Ethernet,我需要通过以太网协议将以太网数据包从一个设备发送到另一个设备。经过一些研究,我决定使用TCP\IP协议。我创建了相互通信的TCP服务器和TCP客户端。为此,我使用了TcpClient和TcpListener类。它工作正常,但我有一些问题: 我需要从接收到的消息中检查CRC,并将其与侦听器端手动计算的结果进行比较。我该怎么做?如何从收到的消息中获取此CRC?我所得到的只是我从客户那里发来的确切信息 以这种数据包格式查看我的邮件有什么共同之处?我在监听器端看到的都是“数据”字段,但我想看到带有标题的

我需要通过以太网协议将以太网数据包从一个设备发送到另一个设备。经过一些研究,我决定使用TCP\IP协议。我创建了相互通信的TCP服务器和TCP客户端。为此,我使用了TcpClient和TcpListener类。它工作正常,但我有一些问题:

  • 我需要从接收到的消息中检查CRC,并将其与侦听器端手动计算的结果进行比较。我该怎么做?如何从收到的消息中获取此CRC?我所得到的只是我从客户那里发来的确切信息
  • 以这种数据包格式查看我的邮件有什么共同之处?我在监听器端看到的都是“数据”字段,但我想看到带有标题的“原始”,CRC(FCS)等,
  • Svemir,您可以使用C#中的套接字检查原始通信

    。若您使用原始套接字方法,那个么您将面临一些困难时期

    如果以这种方式实现套接字,则必须处理TCP的细节

    来自SocketType.Raw上的Microsoft文档

    支持对基础传输协议的访问。使用Raw,您可以使用诸如Internet控制消息协议(ProtocolType.Icmp)和Internet组管理协议(ProtocolType.Igmp)之类的协议进行通信。发送时,应用程序必须提供完整的IP头。接收到的数据报返回时IP报头和选项保持不变

    来自SocketType.Stream上的Microsoft文档

    支持可靠的、双向的、基于连接的字节流,无需重复数据,无需保留边界。这种类型的套接字与单个对等方通信,并且需要远程主机连接才能开始通信。流使用传输控制协议(ProtocolType.Tcp)和AddressFamily.InterNetwork地址族

    这基本上意味着一切都由您处理,您只能访问超级用户链接所指的信件内容。

    Svemir,您可以使用C#中的套接字检查原始通信

    。若您使用原始套接字方法,那个么您将面临一些困难时期

    如果以这种方式实现套接字,则必须处理TCP的细节

    来自SocketType.Raw上的Microsoft文档

    支持对基础传输协议的访问。使用Raw,您可以使用诸如Internet控制消息协议(ProtocolType.Icmp)和Internet组管理协议(ProtocolType.Igmp)之类的协议进行通信。发送时,应用程序必须提供完整的IP头。接收到的数据报返回时IP报头和选项保持不变

    来自SocketType.Stream上的Microsoft文档

    支持可靠的、双向的、基于连接的字节流,无需重复数据,无需保留边界。这种类型的套接字与单个对等方通信,并且需要远程主机连接才能开始通信。流使用传输控制协议(ProtocolType.Tcp)和AddressFamily.InterNetwork地址族


    这基本上意味着一切都是为您处理的,您只能访问超级用户链接所指的信件内容。

    “我需要从一个设备向另一个设备发送以太网数据包”和“我决定使用TCP\IP”这两个词加起来并不正确。协议在不同的层上。(以太网PDU最好称为帧,而不是数据包。)您可以使用数据包分析器工具,例如tcpdump或Wireshark@stickybit对不起,我还是个新手。事实上,这是真的,我完全混淆了这个层次。你能推荐一些书来澄清这一点吗?不像书,而是像快速阅读。在这种情况下,你能给我推荐什么?我怎样才能发送这种原始形式的以太网帧并读取它们?@mangusta谢谢!我将尝试搜索它。但这意味着我无法通过本机的.NET工具在TCP/IP协议上获取CRC?我认为这些都嵌入在TCP客户端中,不可见。它使用此选项来确保正确接收数据(无错误)。如果您关心的是安全性(例如有人截取和更改数据),而不是错误检查,那么您需要将自己的校验和与传输的数据一起发送。“我需要将以太网数据包从一个设备发送到另一个设备”和“我决定使用TCP\IP”这两个词不符合逻辑。协议在不同的层上。(以太网PDU最好称为帧,而不是数据包。)您可以使用数据包分析器工具,例如tcpdump或Wireshark@stickybit对不起,我还是个新手。事实上,这是真的,我完全混淆了这个层次。你能推荐一些书来澄清这一点吗?不像书,而是像快速阅读。在这种情况下,你能给我推荐什么?我怎样才能发送这种原始形式的以太网帧并读取它们?@mangusta谢谢!我将尝试搜索它。但这意味着我无法通过本机的.NET工具在TCP/IP协议上获取CRC?我认为这些都嵌入在TCP客户端中,不可见。它使用此选项来确保正确接收数据(无错误)。如果您关心的是安全性(例如有人截取和更改数据),而不是错误检查,那么您需要将自己的校验和与传输的数据一起发送。非常感谢您,Athanasios!你的回答很有帮助,现在我对这个协议了解得更多,也知道它是如何工作的。但我认为,就目前而言,我将选择@TroyMac1ure建议的道路。因为这对我来说很难。但对于未来,我知道如何应对。非常感谢。非常感谢你,阿萨那西奥斯!你的回答很有帮助,现在我对这个协议了解得更多,也知道它是如何工作的。但我认为,就目前而言,我将选择@TroyMac1ure建议的道路。因为这个原始的套接字看起来像是