2011-04-16 61 views
0

我有一个Visual C++程序与一个专用的点对点协议构建在TCP/IP套接字之上,允许一组消息在第三方软件之间流动。C#本地TCP/IP堆栈访问

有在文档的注释,该协议:

IP逻辑分组不必直接映射到对基础网络套接字物理数据包,它们可以被分裂开或由TCP/IP栈聚集。

这是什么意思?

我写了我的C#应用​​程序来连接,由于技术限制,它只能在本地运行和通信。再加上每毫秒是至关重要的。

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

+0

你的问题是错误的。它涉及关于您的协议的声明。与本地访问无关。 – EJP 2011-04-16 01:59:44

回答

1

如果你只是用回送可能根本没有IP数据包,并且在任何情况下,(一)对协议的实现者应该已经采取了所有的考虑及(b)TCP隐藏所有从你太 - 它只是提供一个字节流接口。

1

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

当帧到达其目的地时,以太网报头信息将被删除,并且原始数据包(如果需要,重新组合)会呈现给目标机器上的TCP/IP层。

但是这个重新包装也可能发生在TCP/IP堆栈中。 TCP和IP实际上是分开的协议; IP负责路由,TCP,那么“握手”(维护会话状态,保证递送[或试图]等)

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

1

IP逻辑分组不必直接映射到物理数据包上的底层网络插座,它们可以被分裂开或由TCP/IP栈聚集。

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

你的应用程序根本就不用担心这个问题。所有现代操作系统内核都可以非常高效地处理TCP/IP网络,除非您的要求非常不寻常,否则您绝不应该担心应用程序协议通过TCP/IP或较低级协议分解为数据包的方式。