C#本地TCP / IP堆栈访问

| 我有一个Visual C ++程序,该程序具有在TCP / IP套接字之上构建的专有点对点协议,该协议允许一组消息在第三方软件之间流动。 该协议的文档中有一条注释: IP逻辑数据包不一定直接映射到基础网络套接字上的物理数据包,它们可能会被TCP / IP堆栈分解或聚合。 这是什么意思? 我已经编写了我的C#应用​​程序进行连接,由于技术限制,它只能在本地运行和通信。再加上每毫秒都是至关重要的。 似乎这与命名管道无关:pipelist.exe没有显示任何特定条目。     
已邀请:
如果您仅使用环回,则可能根本没有IP数据包,并且在任何情况下(a)协议的实施者都应该已经考虑了所有这些信息,并且(b)TCP也对您隐藏了所有信息-它只是提供了字节流接口。     
当TCP / IP数据包通过以太网发出时,这些数据包将重新打包为以太网帧。这可能包括分解原始数据包。 当帧到达其目的地时,将删除以太网报头信息,并将原始数据包(如有必要进行重组)呈现给目标计算机上的TCP / IP层。 但是这种重新打包也可能在TCP / IP堆栈内发生。 TCP和IP实际上是独立的协议。 IP负责路由,TCP负责“握手”(保持会话状态,保证传递(或尝试传递)等)。 命名管道是一种完全不同的进程间通信机制。我认为,通常速度比TCP / IP更快,但通常仅限于在单台计算机上使用。     
  IP逻辑数据包不一定直接映射到基础网络套接字上的物理数据包,它们可能会被TCP / IP堆栈分解或聚合。 TCP / IP不是存在的最低级别的网络协议。还有其他一些:连接以太网设备的以太网协议,802.11x无线协议等。这句话的全部意思是,单个IP数据包可能对应于较低级别协议中的多个数据包,并且IP网络层负责缓冲或加入这些数据包。 您的应用程序完全不需要为此担心。所有现代OS内核都可以非常高效地处理TCP / IP网络,除非您的要求非常特殊,否则您不必担心应用程序协议被TCP / IP或低级协议分解为数据包的方式。     

要回复问题请先登录注册