【发布时间】:2015-10-01 10:11:03
【问题描述】:
我正在构建一个应用程序,我的手机经常将数据发送到我的服务器。由于我将使用我的移动数据,我想知道建立(和拆除?)到我的服务器的 TCP 连接需要多少数据。
【问题讨论】:
-
计费数据可能不等于握手的大小,因为您可能会发现您按 1kb 块计费,并且 TCP 数据包通常较大 (1500) 并包含内部握手。
我正在构建一个应用程序,我的手机经常将数据发送到我的服务器。由于我将使用我的移动数据,我想知道建立(和拆除?)到我的服务器的 TCP 连接需要多少数据。
【问题讨论】:
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 个!
每个帧的偏移量通常为 20 字节。
建立连接:~ 128-136 字节
断开连接:~ 160 字节
如果你打算使用 TLS/SSL 握手,这个估计在 4.5k-6.5k 之间。
注意:也请看TCP/IP Header Compression
来源:
Explanation of the Three-Way Handshake via TCP/IP
Studying Normal Traffic, Part Three: TCP Headers | Symantec Connect
【讨论】: