我的 C 程序中有两个 send(),查看wireshark,我意识到它们是作为一条 TCP/IP 消息发送出去的。我假设这是某种 TCP/IP 优化,确定它们足够小,可以一起发送。然而,我正在从头开始重建一个旧程序,并且我正在基于它的 TCP/IP 流量构建我的工具:MTU 限制、内部协议设计等。因此,如果旧工具发送两条单独的消息,我需要发送两条消息单独的消息。
那么有谁知道它在后台具体做了什么(除了简单的优化之外),以及是否有一个标志或需要启用/禁用的东西,以便我获得 C send() 和 TCP/ 的 1 比 1 比率IP传输?现在我能做的就是在每个 send() 之后放置一个 sleep(1) 来将它们分开。
Thanks.
您可以设置TCP_NODELAY
in setsockopt
禁用 Nagle 算法,以防止您的操作系统合并小数据包。然而,重要的是您要认识到 TCP 是一种面向流的协议,并且各个“数据包”并不是有意分开的。沿途的路由器可以自由地组合或拆分 TCP 数据包(尽管这种情况并不常见,因为需要额外的处理),并且接收操作系统不一定会准确地读取每个发送的数据包recv()
。如果要在 TCP 中描述信息包,则需要使用标头结构来报告以下字节中有多少属于该包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)