主要内容
课程: 计算机和互联网 > 单元 3
课程 5: 数据包传输传输控制协议(Transmission Control Protocol,TCP)
传输控制协议(TCP)是一种传输协议,用于在IP之上以确保可靠地传输数据包。
TCP包含一些机制,可以解决由于基于数据包的消息传递而引起的许多问题,例如数据包的丢失,数据包的乱序,数据包的重复和数据包的损坏。
由于TCP是IP上最常用的协议,因此互联网协议栈有时被称为 TCP / IP 。
封包格式
当使用TCP / IP发送数据包时,每个 IP 数据包 的数据部分被格式化为 TCP段。
每个TCP段都包含一个标头和数据。 TCP头部比UDP头部包含更多的字段,其大小范围为 到 字节,具体取决于选项字段的大小。
TCP头部与UDP头部共享一些字段:源端口号,目标端口号和校验和。 要记住它们的用法,请查看 UDP article。
从开始到结束
让我们逐步介绍使用TCP / IP传输数据包的过程。
步骤 1: 建立连接
当两台计算机希望通过TCP相互发送数据时,它们首先需要使用三向握手建立连接。
第一台计算机发送一个SYN位设置为 的数据包(SYN =“ synchronize?”)。 第二台计算机发回一个包,该包的ACK位设置为 (ACK =“ acknowledge!”)加上SYN位设置为 。 第一台计算机以ACK答复。
SYN位和ACK位都是TCP标头的一部分:
实际上,三向握手中涉及的三个数据包通常不包含任何数据。 一旦计算机完成了握手,它们就准备好接收包含实际数据的数据包了。
步骤 2: 发送数据包
通过TCP发送数据包时,接收者必须始终确认接收到的内容。
第一台计算机发送一个包含数据和序列号的数据包。 第二台计算机通过将设置ACK位并依据接收数据的长度增加接收号来对其进行确认。
序列号和确认号是TCP标头的一部分:
这两个数字可帮助计算机跟踪了解成功接收了哪些数据,丢失了哪些数据以及哪些数据意外发送了两次。
步骤 3: 关闭连接
当不需要发送和接收数据时,两台计算机中的任何一台都可以关闭连接。
计算机通过发送FIN位设置为1(FIN =完成)的数据包来启动关闭连接。 另一台计算机答复一个ACK和另一个FIN。 从启动计算机再发出一个ACK后,连接关闭。
检测丢失的数据包
TCP连接可以使用超时来检测丢失的数据包。
发送完数据包后,发送方启动计时器并将数据包放入重传队列中。 如果计时器用尽并且发送方尚未从接收方收到ACK,它将再次发送数据包。
如果数据包实际上并没有丢失,只是到达或确认的速度非常慢,则重传可能导致接收方接收到重复的数据包。 如果这样,接收者可以简单地丢弃重复的数据包。 有两次数据总比没有好!
处理乱序数据包
TCP连接可以使用序列号和确认号来检测乱序的数据包。
当接收端看到的序列号比他们到目前为止所确认的要高时,他们知道他们之间至少丢失了一个数据包。 在上图所示的情况下,接收端看到的序列号为#73,但期望的序列号为#37。 接收端通过发送一个将确认号设置为预期序列号的数据包,使发送端知道有问题。
有时,丢失的数据包只是通过互联网的速度较慢,然后很快就到达了。
其他时候,丢失的数据包实际上就是丢失了,发送方必须重新发送该数据包。
在两种情况下,接收者都必须处理乱序数据包。 幸运的是,接收者可以使用序列号以正确的顺序重组数据包数据。
🙋🏽🙋🏻♀️🙋🏿♂️您对此主题有任何疑问吗? 我们很乐意回答-只需在下面的问题区域中提问即可!