我有一个Visual C ++程序,它具有基于TCP / IP套接字构建的专有点对点协议,允许一组消息在第三方软件之间流动。
该协议的文档中有一个注释:
IP逻辑数据包不一定直接映射到底层网络套接字上的物理数据包,它们可能被TCP / IP堆栈拆分或聚合。
这是什么意思?
我已编写C#应用程序进行连接,由于技术限制,它只能在本地运行和通信。每毫秒都是至关重要的。
似乎这与命名管道无关:pipelist.exe不显示任何特定条目。
答案 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>