繁体   English   中英

python 2.7 socket.send()总协定

[英]python 2.7 socket.send() general contract

有人可以向我解释python的socket.send()方法的一般约定吗? 作为教育项目的一部分,我正在制作某种流量生成器。

每当执行socket.send()方法时,我都会进行简单的日志记录,我会发送一些流量,并在方法完成时记下文件的时间(除其他事项外,我还会记录日志)。 这些日志显示,我发送的消息多于wireshark显示的消息,这是在我的传出流量变得相对较高时发生的。

我已阅读: https : //docs.python.org/2/howto/sockets.html#socket-howto

正如我在链接中提到的那样:'它们不一定要处理您交给它们(或期望它们)的所有字节,因为它们的主要重点是处理网络缓冲区。 通常,它们在关联的网络缓冲区已满(发送)时返回。

如果我理解正确,则不能保证我的信息会正确发送。 我可以读取socket.send() 处理了多少字节,但是我想知道“处理”的含义是什么。

有人可以向我解释:

  • 我提供的链接中的网络缓冲区是什么(TCP窗口,网卡上的某种队列,还有其他?)
  • 外行的术语,如何在python中实现socket.send()以便我可以更好地利用它。 它如何与我的硬件/操作系统交互?

当您使用TCP时,网络层确保您传递给send()所有字节实际上都将被发送(如果未发送,套接字将被关闭)。 但是,听起来您是在计算数据包而不是字节。

调用send()的次数与发送的数据包的数目之间并不总是存在关系。 网络层可以自由地将传递给send()的数据合并或拆分为不同大小的数据包,只要它们都以与发送的顺序相同的方式到达远端。

如果要进一步控制发送的数据包数量 ,请使用UDP而不是TCP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM