python 2.7 socket.send()通用合同

python 2.7 socket.send()通用合同,python,sockets,networking,tcp,Python,Sockets,Networking,Tcp,有人能给我解释一下python的socket.send()方法的一般约定吗? 作为教育项目的一部分,我正在制作某种流量发生器 每当执行socket.send()方法时,我都会进行简单的日志记录,我会发送一些通信量,并记录该方法完成的时间(以及我记录的其他内容)。这些日志显示我发送的消息比wireshark显示的要多,当我的传出流量相对较高时就会发生这种情况 我读过: 正如我提供的链接中所提到的:“它们不一定处理您交给它们(或期望从它们那里得到)的所有字节,因为它们主要关注的是处理网络缓冲区。通

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

每当执行socket.send()方法时,我都会进行简单的日志记录,我会发送一些通信量,并记录该方法完成的时间(以及我记录的其他内容)。这些日志显示我发送的消息比wireshark显示的要多,当我的传出流量相对较高时就会发生这种情况

我读过:

正如我提供的链接中所提到的:“它们不一定处理您交给它们(或期望从它们那里得到)的所有字节,因为它们主要关注的是处理网络缓冲区。通常,当相关的网络缓冲区已填满(发送)时,它们返回

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

谁能给我解释一下:

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

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

调用
send()
的次数与发送的数据包数并不总是有关系的。网络层可以自由地将传递到
send()
的数据合并或拆分为不同大小的数据包,只要数据都按照发送顺序到达远程端


如果您想更多地控制发送的数据包数量,请使用UDP而不是TCP。

我确实在统计数据包。我提到字节是因为文档提到字节,所以我试图理解这些字节代表什么。然后方法send()能转换成比send调用更少的数据包吗?如果你说的是碎片化,那不是网站吗?wireshark中的数据包将比调用方法send()时的数据包多?另外,我必须在传输层使用TCP。我不知道这些数据包可以被整合,因为碎片化是一种更低级的东西。对于TCP,请签出(TCP层为您执行此操作)。您可以关闭唠叨,但这仍然不能保证您的数据包不会被拆分或合并。TCP是一种基于流的服务,网络数据包与其用户无关。这是非常有用的信息。但是,我发送的包大小不小于200B,根据您的参考,我的包不应属于该类别?我有Diameter协议包,我在传输层使用TCP发送。同样,TCP不能保证数据如何组合成数据包。关闭唠叨会给TCP一个提示,表明您希望得到更好的交互响应,但只要接收端的结果流与您发送的流相同,TCP层仍然可以做它想要做的事情。