传输控制协议是最常见的传输层协议。它与IP一起工作,并使用IP协议提供的网络层服务在进程之间提供可靠的传输服务。
TCP向应用层提供的各种服务如下:
- 流程间通信-
TCP提供了一种进程到进程的通信,即在终端系统上执行的各个进程之间发生的数据传输。这是使用端口号或端口地址完成的。端口号为16位长,有助于识别主机上哪个进程正在发送或接收数据。
- 流导向-
这意味着数据以字节流的形式发送和接收(不像UDP或IP将位划分为数据报或数据包)。然而,为TCP提供服务的网络层发送的是信息包而不是字节流。因此,TCP将多个字节一起分组为一个段,并将报头添加到这些段中的每一个,然后将这些段传递到网络层。在网络层,这些数据段中的每一个都封装在IP数据包中进行传输。TCP报头具有控制目的所需的信息,这些信息将与段结构沿着讨论。
- 全双工服务-
这意味着通信可以同时在两个方向上进行。
- 面向连接的服务-
与UDP不同,TCP提供面向连接的服务。它定义了3个不同的阶段:- 连接建立
- 数据传输
- 连接终止
- 可靠性-
TCP是可靠的,因为它使用校验和进行错误检测,尝试通过重传、确认策略和计时器来恢复丢失或损坏的数据包。它使用字节号、序列号和确认号等特征,以确保可靠性。此外,它使用拥塞控制机制。
- 复用-
TCP分别在发送端和接收端进行复用和解复用,因为可以通过物理连接在端口号之间建立多个逻辑连接。
字节号、序列号和确认号:
要传输的所有数据字节都被编号,并且该编号的开始是任意的。序列号被赋予段,以便在接收器端重新组装字节,即使它们以不同的顺序到达。段的序列号是发送的第一个字节的字节号。由于TCP提供全双工服务,因此需要确认号。确认号是接收器期望接收的下一个字节号,其还提供用于接收先前字节的确认。
范例:
在这个例子中,我们看到A发送了确认号1001,这意味着它已经接收到数据字节,直到字节号1000,并期望接下来接收1001,因此B接下来从1001开始发送数据字节。类似地,由于B在从A到B的第一次数据传输之后已经接收到数据字节直到字节号13001,因此B发送确认号13002,即它期望接下来从A接收的字节号。
TCP段结构-
TCP数据段由要发送的数据字节和TCP添加到数据的报头组成,如图所示:
TCP数据段的报头可以是20-60字节。40字节用于选项。如果没有选项,则头是20字节,否则它最多可以是60字节。
标题字段:
- 源端口地址-
一个16位字段,保存发送数据段的应用程序的端口地址。
- 目标端口地址-
一个16位字段,用于保存接收数据段的主机中应用程序的端口地址。
- 序号-
一种32位字段,保存序列号,即在该特定数据段中发送的第一个字节的字节号。它用于在接收端重新组装乱序接收的段的消息。
- 确认编号-
一个32位的字段,它保存确认号,即接收方希望下一次接收的字节号。它是对成功接收到先前字节的确认。
- 报头长度(HLEN)-
这是一个4位字段,通过报头中的4字节字的数量来指示TCP报头的长度,即如果报头是20字节(TCP报头的最小长度),则该字段将保存5(因为5 X 4 = 20)和最大长度:60字节,那么它将保存值15(因为15 x 4 = 60)。因此,该字段的值始终在5和15之间。
- 控制标志-
这些是6个1位控制位,它们控制连接建立、连接终止、连接中止、流控制、传输模式等。它们的功能是:- URG:紧急指针有效
- ACK:确认号有效(在累积确认的情况下使用)
- PSH:请求推送
- RST:重置连接
- 同步序列号
- FIN:终止连接
- 窗口大小-
此字段以字节为单位告知发送TCP的窗口大小。
- 校验和-
此字段保存用于错误控制的校验和。它在TCP中是强制性的,而不是UDP。
- 紧急指示-
该字段(仅在URG控制标志被设置时有效)用于指向迫切需要的、需要最早到达接收过程的数据。此字段的值与序列号相加,以获得最后一个紧急字节的字节号。
THE END
暂无评论内容