【问题标题】:How much data it cost to set up a TCP connection?建立一个 TCP 连接需要多少数据?
【发布时间】:2015-10-01 10:11:03
【问题描述】:

我正在构建一个应用程序,我的手机经常将数据发送到我的服务器。由于我将使用我的移动数据,我想知道建立(和拆除?)到我的服务器的 TCP 连接需要多少数据。

【问题讨论】:

  • 计费数据可能不等于握手的大小,因为您可能会发现您按 1kb 块计费,并且 TCP 数据包通常较大 (1500) 并包含内部握手。

标签: tcp handshake


【解决方案1】:

TCP 三路握手

设备 1 将其 TCP 序列号和最大分段大小发送给设备 2。

设备 2 通过向设备 1 发送其序列号和最大分段大小来响应。

设备 1 确认收到序列号和段大小信息。

每个数据包都由一个 IP 标头和数据(有效负载)组成。在这种情况下,数据部分包含 TCP。 TCP 标头包含各种字段,包括源端口和目标端口、序列号和确认号、窗口大小、TCP 标志、紧急指针和保留位。

与 IP 标头一样,TCP 标头也可能包含选项。 (注意 TCP 选项和 IP 选项是两个不同的东西。)因为 TCP 选项改变了 TCP 头的长度,所以长度是在头中设置的。

IPv4 标头是五个 4 字节块,或总共 20 个字节。

TCP 通常使用 24 字节 的标头进行握手(前两个数据包),大约 20 用于正常数据包传输。

最大段大小 (MSS):4 个字节

窗口比例(WSCALE):3 个字节

时间戳 (TS):10 个字节

无操作(NOP):1 字节

允许选择性确认 (SackOK):2 个字节

选择性确认数据:10 个字节(每附加一对序列号加上 8 个字节)

终止连接

虽然使用 3 次握手建立连接只需要传输 3 个数据包,但拆除一个需要 4 个!

  • 在第一帧中,客户端发送一个伴随着 ACK 的 FIN。设置了 FIN 参数,它会通知服务器它没有更多数据要发送。
  • 响应(第 2 帧)只是服务器确认从客户端发送的 FIN。
  • 尽管 TCP 已在两台计算机之间建立连接,但这些连接仍然相互独立。因此,服务器也会向客户端发送一个 FIN。
  • 你猜对了……客户端会在最后一个数据包中确认服务器的 FIN。

每个帧的偏移量通常为 20 字节。

总结一下。

建立连接:~ 128-136 字节

断开连接:~ 160 字节

如果你打算使用 TLS/SSL 握手,这个估计在 4.5k-6.5k 之间。

注意:也请看TCP/IP Header Compression

来源:

Inside the TCP Handshake

Explanation of the Three-Way Handshake via TCP/IP

Studying Normal Traffic, Part Three: TCP Headers | Symantec Connect

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2012-11-11
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多