【问题标题】:How does TCP handle a file with large size?TCP如何处理大文件?
【发布时间】:2021-06-25 16:15:04
【问题描述】:

我有两个关于 TCP 协议的问题:

  1. TCP 对发送它们的每个数据包的大小有限制吗?如果是,每个要发送的数据包的最大尺寸是多少?

  2. TCP 如何处理大尺寸文件?它发送到 一次(1 个数据包)或 TCP 将其转换为更小的数据包?

我使用 python 和 socket 库。

【问题讨论】:

  • 这能回答你的问题吗? Maximum packet size for a TCP connection
  • TCP(以及所有基于数据包的网络)将大数据分解为多个数据包,以便每个单独的数据包可以是一个小/合理的长度。接收方在进程结束时将数据包的数据重新组合到一个文件中。

标签: python sockets websocket tcp


【解决方案1】:

TCP 是一种流协议。这意味着您作为发送者无法控制内核中实际进行了多少发送操作。 这里有几种机制在起作用。客户端可以只用一个字节多次调用发送。 TCP 将尝试累积这些字节,直到 L2 的 MTU 被填满,然后才发送它,或者如果达到超时则更快。 在一次发送操作中,您可以发送大约 64K。 要发送一个文件,您需要多次发送操作,直到整个文件都发送完。

在 TCP 的接收端,发送操作的次数和接收操作的次数没有关系。如果发送方连续快速发送 5 次 10 字节,很可能会在一次接收操作中收到 50 字节。

实际上对于 TCP,没有数据包这样的东西。它被称为框架。 数据包用于 UDP,因为 UDP 不是流协议。 在 UDP 中,如果您发送 5 个字节,则接收者将收到 5 个字节或什么也不接收,因为 UDP 不是面向连接的。而 TCP 是。 对于 UDP,最大大小约为 64k。这 64k 将被 IP 切碎以通过网络发送,IP 将在接收时将其重新组合在一起。这都是因为 L2 MTU。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 2017-12-16
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2015-10-10
    • 2013-08-13
    相关资源
    最近更新 更多