运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

两个TCP / IP套接字send()请求实际上是在一个TCP消息中处理的

运维开发网 https://www.qedev.com 2020-07-15 08:43 出处:网络 作者:运维开发网整理
我在我的C程序中有两个send()s并查看wireshark,我意识到它们是作为一个TCP / IP消息发送出去的.我假设这是某种TCP / IP优化,确定它们足够小,可以一起发送.但是,我正在从头开始重建一个旧程序,我正在构建我的工具,基于它的TCP / IP流量:MTU限制,内部协议设计等.所以如果旧工具发出两个单独的消息,我需要发送两个单独的消息. 所以有人知道它在后台具体做了什么(除了简单
我在我的C程序中有两个send()s并查看wireshark,我意识到它们是作为一个TCP / IP消息发送出去的.我假设这是某种TCP / IP优化,确定它们足够小,可以一起发送.但是,我正在从头开始重建一个旧程序,我正在构建我的工具,基于它的TCP / IP流量:MTU限制,内部协议设计等.所以如果旧工具发出两个单独的消息,我需要发送两个单独的消息.

所以有人知道它在后台具体做了什么(除了简单的优化),如果有一个标志或需要启用/禁用的东西,以便我得到1比1的C send()和TCP / IP传输?现在我所能做的就是让它们分开就是在每次send()之后放一个sleep(1).

谢谢.

您可以在setsockopt中设置TCP_NODELAY以禁用Nagle的算法,以防止您的操作系统组合小数据包.但是,重要的是要意识到TCP是一种面向流的协议,而且各个“数据包”并不是有意义地分开的.沿途的路由器可以自由组合或拆分TCP数据包(虽然这是不常见的,因为需要额外的处理),并且接收操作系统不一定每个recv()读取一个发送的数据包.如果要在TCP中描述信息包,则需要使用标头结构来报告以下字节中有多少属于该数据包.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消