【问题标题】:Websocket frame size specificationWebsocket 帧大小规范
【发布时间】:2020-12-30 10:19:06
【问题描述】:

这更像是一个兴趣问题而不是必要性问题;

我正在为嵌入式系统编写 websocket 通信的一个小含义,并发现单个帧的理论大小限制指定为 2^64 字节。

我决定只实现对 2^16 的较短规范的支持,但我开始想知道,当规范声明您必须使用 TCP 连接时,为什么他们决定将最大帧大小设置得如此之大,并且TCP 最大有效载荷大小为 65535 字节?

【问题讨论】:

    标签: websocket


    【解决方案1】:

    WebSocket 协议允许将每条消息分割成多个 TCP/IP 数据包。这允许在传输过程中将 4Gb 消息拆分为数千个 TCP/IP 数据包。

    请注意,WebSockets 在 TCP/IP stream 上实现了一个基于 message 的协议...WebSockets is not a streaming protocol。

    因此,TCP/IP 数据包大小限制无关紧要。唯一实际的限制是系统的限制和安全问题 - 系统可以处理 64 位消息大小吗?它仅限于 32 位吗?是否应该允许用户发送大量消息?为了防止用户攻击系统,系统应该对传入的消息施加什么限制? ...等等'。

    【讨论】:

    • 我明白了,原来是应用层和传输层之间有什么东西,把大于65535字节的数据分割合并成多个帧?
    • @NicklasNielsen - 是的,有。 WebSocket 实现是 TCP/IP 层和应用层之间的一层。它将 TCP/IP 流连接并划分为 WebSocket 消息,将不完整的消息存储在缓冲区中(必要时)。
    • 您在谈论用于分割和连接帧的 Websocket 实现,在哪里使用完成帧位?但是仍然不需要 64 位大小,因为每个 websocket 帧仍然是一个最大 65535 字节。在 websocket 层下面必须有一些可以分割和连接的东西。根据我的测试,例如,当从 chrome 发送 100Kb 时,我会将其作为两个 websocket 帧接收,一个 ~75Kb 和一个 ~25Kb,75Kb 帧必须在某个时候自动分成两个较小的 TCP 帧。
    • @NicklasNielsen - 当我写“WebSocket 实现”时,我指的是 WebSocket 库的实现。它从 TCP/IP 流中读取数据并将数据分割/连接成 WebSocket 帧和消息负载,然后将事件/消息转发到 WebSocket 应用程序。
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多