传输控制协议是最常见的传输层协议。它与IP一起工作,并使用IP协议提供的网络层服务在进程之间提供可靠的传输服务。 各种各样的 服务 TCP向应用层提供的信息如下:
null
- 过程间沟通—— TCP提供进程间通信,即在终端系统上执行的各个进程之间进行的数据传输。这是使用端口号或端口地址完成的。端口号的长度为16位,有助于识别主机上哪个进程正在发送或接收数据。
- 面向流– 这意味着数据以字节流的形式发送和接收(不同于UDP或IP将比特划分为数据报或数据包)。然而,为TCP提供服务的网络层发送的是信息包,而不是字节流。因此,TCP将多个字节组合成一组 段 并为每个段添加一个标头,然后将这些段发送到网络层。在网络层,这些段中的每一个都被封装在一个IP包中进行传输。TCP报头包含控制所需的信息,这些信息将与段结构一起讨论。
- 全双工服务- 这意味着通信可以同时在两个方向上进行。
- 面向连接的服务- 与UDP不同,TCP提供面向连接的服务。它定义了三个不同的阶段:
- 连接建立
- 数据传输
- 连接终止
- 可靠性—— 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:紧急指针有效
- 确认:确认号有效(用于累计确认)
- PSH:推送请求
- RST:重置连接
- 同步序列号
- 终止连接
- 窗口大小- 此字段以字节为单位说明发送TCP的窗口大小。
- 校验和- 此字段保存错误控制的校验和。它在TCP中是强制性的,而不是UDP。
- 紧急指针- 此字段(仅在设置URG控制标志时有效)用于指向急需的数据,这些数据需要尽早到达接收过程。将此字段的值添加到序列号中,以获得最后一个紧急字节的字节号。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END