计算机网络 - 传输控制协议 (TCP)
-
简述
传输控制协议 (TCP) 是 Internet 协议套件中最重要的协议之一。它是互联网等通信网络中使用最广泛的数据传输协议。 -
特征
-
TCP是可靠的协议。也就是说,接收方总是向发送方发送关于数据包的肯定或否定确认,以便发送方始终清楚地知道数据包是到达目的地还是需要重新发送。
-
TCP 确保数据按照发送顺序到达预期目的地。
-
TCP是面向连接的。TCP 要求在发送实际数据之前建立两个远程点之间的连接。
-
TCP 提供错误检查和恢复机制。
-
TCP 提供端到端的通信。
-
TCP 提供流量控制和服务质量。
-
TCP 在客户端/服务器点对点模式下运行。
-
TCP 提供全双工服务器,即它可以同时扮演接收者和发送者的角色。
-
-
Header
TCP 标头的长度最小为 20 字节,最大为 60 字节。-
Source Port (16-bits) - 它识别发送设备上应用程序进程的源端口。
-
Destination Port (16-bits) - 它识别接收设备上应用程序进程的目标端口。
-
Sequence Number (32-bits) - 会话中段的数据字节的序列号。
-
Acknowledgement Number (32-bits) - 当 ACK 标志被设置时,该数字包含预期数据字节的下一个序列号,并用作对先前接收到的数据的确认。
-
Data Offset (4-bits) - 该字段包含 TCP 标头(32 位字)的大小和当前数据包中数据在整个 TCP 段中的偏移量。
-
Reserved (3-bits) - 保留供将来使用,默认情况下全部设置为零。
-
Flags (1-bit each)
-
NS- 显式拥塞通知信令过程使用现时和位。
-
CWR- 当主机接收到设置了 ECE 位的数据包时,它会设置 Congestion Windows Reduced 以确认 ECE 已接收。
-
ECE- 它有两个含义:
-
如果 SYN 位清为 0,则 ECE 表示 IP 数据包已设置其 CE(拥塞体验)位。
-
如果 SYN 位设置为 1,则 ECE 表示设备支持 ECT。
-
-
URG- 表示紧急指针字段有重要数据,应进行处理。
-
ACK- 表示Acknowledgement 字段有意义。如果 ACK 清为 0,则表明该数据包不包含任何确认。
-
PSH- 设置时,它是对接收站的请求,将数据(一旦到达)推送到接收应用程序而不缓冲它。
-
RST- 复位标志具有以下特点:
-
它用于拒绝传入连接。
-
它用于拒绝一个段。
-
它用于重新启动连接。
-
-
SYN- 此标志用于在主机之间建立连接。
-
FIN- 该标志用于释放连接,此后不再交换数据。因为带有 SYN 和 FIN 标志的数据包具有序列号,所以它们会以正确的顺序进行处理。
-
-
Windows Size - 该字段用于两个站之间的流量控制,并指示接收方为段分配的缓冲区量(以字节为单位),即接收方期望的数据量。
-
Checksum - 此字段包含 Header、Data 和 Pseudo Headers 的校验和。
-
Urgent Pointer - 如果 URG 标志设置为 1,则它指向紧急数据字节。
-
Options - 它促进了常规Header未涵盖的其他选项。选项字段总是以 32 位字描述。如果该字段包含小于 32 位的数据,则使用填充来覆盖剩余的位以达到 32 位边界。
-
-
寻址
两个远程主机之间的 TCP 通信是通过端口号 (TSAP) 完成的。端口号范围为 0 – 65535,分为:- 系统端口 (0 – 1023)
- 用户端口 (1024 – 49151)
- 专用/动态端口 (49152 – 65535)
-
连接管理
TCP 通信在服务器/客户端模型中工作。客户端启动连接,服务器接受或拒绝它。三向握手用于连接管理。设立
客户端启动连接并发送带有序列号的段。服务器用自己的序列号和客户端段的 ACK 确认它,该段比客户端的序列号多一个。客户端在收到其段的 ACK 后发送一个服务器响应的确认。发布
服务器和客户端都可以发送 FIN 标志设置为 1 的 TCP 报文段。当接收端通过 ACK 确认 FIN 回复它时,该 TCP 通信方向关闭并释放连接。 -
带宽管理
TCP 使用窗口大小的概念来适应带宽管理的需要。窗口大小告诉远端的发送方,本端接收方可以接收的数据字节段数。TCP 通过使用窗口大小 1 来使用慢启动阶段,并在每次成功通信后以指数方式增加窗口大小。例如,客户端使用大小为 2 的 windows 并发送 2 个字节的数据。当收到此段的确认时,窗口大小加倍为 4,下一次发送时,发送的段将是 4 个数据字节长。当收到 4 字节数据段的确认时,客户端将窗口大小设置为 8,依此类推。如果确认丢失,即数据在传输网络中丢失或收到 NACK,则窗口大小减半并重新开始慢启动阶段。 -
错误控制∧流控制
TCP 使用端口号来了解它需要哪个应用程序进程来切换数据段。除此之外,它还使用序列号与远程主机同步。所有数据段都使用序列号发送和接收。当 Sender 收到 ACK 时,Sender 知道 Receiver 收到了最后一个数据段。Receiver通过参考最近接收到的数据包的序号知道Sender发送的最后一个段。如果最近接收到的段的序列号与接收方期望的序列号不匹配,则将其丢弃并发回 NACK。如果两个段以相同的序列号到达,则比较 TCP 时间戳值以做出决定。 -
多路复用
在一个会话中组合两个或多个数据流的技术称为多路复用。当 TCP 客户端初始化与服务器的连接时,它总是引用一个明确定义的端口号,该端口号指示应用程序进程。客户端本身使用从私有端口号池中随机生成的端口号。使用 TCP 多路复用,客户端可以在单个会话中与多个不同的应用程序进程进行通信。例如,客户端请求一个网页,该网页又包含不同类型的数据(HTTP、SMTP、FTP 等),TCP 会话超时增加,会话保持打开更长时间,因此三次握手开销可以避免。这使客户端系统能够通过单个虚拟连接接收多个连接。如果超时时间过长,这些虚拟连接对服务器不利。 -
拥塞控制
当大量数据被馈送到无法处理的系统时,就会发生拥塞。TCP通过Window机制控制拥塞。TCP 设置一个窗口大小,告诉另一端要发送多少数据段。TCP 可以使用三种算法进行拥塞控制:-
加法增加,乘法减少
-
慢启动
-
超时反应
-
-
定时器管理
TCP 使用不同类型的定时器来控制和管理各种任务:保活定时器:
-
此计时器用于检查连接的完整性和有效性。
-
当keep-alive时间到期时,主机发送一个探测来检查连接是否仍然存在。
重传定时器:
-
此计时器维护已发送数据的有状态会话。
-
如果在Retransmission时间内没有收到发送数据的确认,则重新发送数据段。
持续计时器:
-
任一主机都可以通过发送 Window Size 0 来暂停 TCP 会话。
-
要恢复会话,主机需要发送具有较大值的 Window Size。
-
如果该段从未到达另一端,则两端可能会无限期地等待对方。
-
当 Persist 计时器到期时,主机重新发送其窗口大小以让另一端知道。
-
Persist Timer 有助于避免通信中的死锁。
定时等待:
-
释放连接后,任何一个主机都会等待 Timed-Wait 时间以完全终止连接。
-
这是为了确保另一端已收到其连接终止请求的确认。
-
超时最长可达 240 秒(4 分钟)。
-
-
崩溃恢复
TCP是非常可靠的协议。它为分段发送的每个字节提供序列号。它提供了反馈机制,即当主机接收到一个数据包时,它必须确认该数据包具有预期的下一个序列号(如果它不是最后一个段)。当 TCP 服务器在通信中途崩溃并重新启动其进程时,它会向其所有主机发送 TPDU 广播。然后主机可以发送最后一个从未被确认的数据段并继续。