我在我的C程序中有两个send()s并查看wireshark,我意识到它们是作为一个TCP/IP消息发送出去的.我假设这是某种TCP/IP优化,确定它们足够小,可以一起发送.但是,我正在从头开始重建一个旧程序,我正在构建我的工具,基于它的TCP/IP流量:MTU限制,内部协议设计等.所以如果旧工具发出两个单独的消息,我需要发送两个单独的消息.
所以有人知道它在后台具体做了什么(除了简单的优化),如果有一个标志或需要启用/禁用的东西,以便我得到1比1的C send()和TCP/IP传输?现在我所能做的就是让它们分开就是在每次send()之后放一个sleep(1).
谢谢.
您可以设置TCP_NODELAY在setsockopt禁用Nagle算法,以避免您的操作系统从小包结合.但是,重要的是要意识到TCP是一种面向流的协议,而且各个"数据包"并不是有意义地分开的.沿途的路由器可以自由组合或拆分TCP数据包(虽然这是不常见的,因为需要额外的处理),并且接收操作系统不一定只能读取每个发送的数据包recv().如果要在TCP中描述信息包,则需要使用标头结构来报告以下字节中有多少属于该数据包.
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |