C#本地TCP / IP堆栈访问

时间:2011-04-16 01:46:15

标签: c# performance sockets tcp tcpclient

我有一个Visual C ++程序,它具有基于TCP / IP套接字构建的专有点对点协议,允许一组消息在第三方软件之间流动。

该协议的文档中有一个注释:

IP逻辑数据包不一定直接映射到底层网络套接字上的物理数据包,它们可能被TCP / IP堆栈拆分或聚合。

这是什么意思?

我已编写C#应用程序进行连接,由于技术限制,它只能在本地运行和通信。每毫秒都是至关重要的。

似乎这与命名管道无关:pipelist.exe不显示任何特定条目。

3 个答案:

答案 0 :(得分:1)

如果您只是使用环回,则可能根本没有IP数据包,并且在任何情况下(a)您的协议的实现者应该已经考虑了所有这些并且(b)TCP也隐藏了您的所有内容 - 它只提供一个字节流接口。

答案 1 :(得分:1)

当TCP / IP数据包通过以太网传输时,数据包将重新打包为以太网帧。这可能包括分解原始数据包。

当帧到达目的地时,将删除以太网头信息,并将原始数据包(必要时重新组合)呈现给目标计算机上的TCP / IP层。

但是这种重新打包也可以在TCP / IP堆栈中发生。 TCP和IP实际上是单独的协议; IP负责路由,TCP执行“握手”(维护会话状态,保证传递[或尝试]等)。

命名管道是一种完全不同的进程间通信机制。我相信通常比TCP / IP更快,但通常仅限于在一台机器上使用。

答案 2 :(得分:1)

  

IP逻辑数据包不一定直接映射到底层网络套接字上的物理数据包,它们可能被TCP / IP堆栈拆分或聚合。

TCP / IP不是存在的最低级别网络协议。还有其他:连接以太网设备的以太网协议,802.11x无线协议等。所有这些声明都表明,单个IP数据包可能对应于较低级别协议中的多个数据包,并且IP网络层负责缓冲或加入这些数据包。

您的应用程序根本不需要担心这一点。所有现代操作系统内核都可以非常有效地处理TCP / IP网络,除非您的要求非常不寻常,否则您不必担心应用程序协议被TCP / IP或低级协议分解为数据包的方式。 / p>