如何从TCP接收的数据中获取CRC?

时间:2019-12-18 06:54:42

标签: c# tcp ethernet

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

  1. 我需要从接收到的消息中检查CRC,并将其与在侦听器端以手动方式计算出的值进行比较。我怎样才能做到这一点?如何从收到的消息中获取此CRC?我所得到的只是我从客户端发送的准确消息。
  2. 如何以这种数据包格式查看我的消息?我在侦听器端看到的全部是“数据”字段,但我想看到带有标题,CRC(FCS)等的“原始” like at that picture.

1 个答案:

答案 0 :(得分:0)

Svemir,您可以检查SO question here有关使用C#中的套接字进行原始通信的信息。

Here is a good SuperUser explanation of the various layers。如果您使用Sockets的raw方法,那么您会遇到一些困难

  

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

来自SocketType.Raw上的Microsoft文档

  

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

来自Microsoft文档SocketType.Stream

  

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

从根本上讲,这意味着一切已为您处理,并且您只能访问SuperUser链接所指的字母内容。