标签:
TCP通过下列方式来提供可靠性:
? 应用数据被分割成 TCP认为最适合发送的数据块。这和 UDP完全不同,应用程序产生的数据报长度将保持不变。由 TCP传递给 IP的信息单位称为报文段或段( segment)。
? 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能 及时收到一个确认,将重发这个报文段。
? 当TCP收到发自 TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
? TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输 过程中的任何变化。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到 此报文段(希望发端超时并重发)。
? 既然 TCP报文段作为 IP数据报来传输,而 IP数据报的到达可能会失序,因此 TCP报文段 的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以 正确的顺序交给应用层。
? 既然IP数据报会发生重复, TCP的接收端必须丢弃重复的数据。
? TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。 TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
两个应用程序通过 TCP连接交换 8 bit字节构成的字节流。 TCP不在字节流中插入记录标识符。我们将这称为字节流服务( byte stream service)。另外,TCP对字节流的内容不作任何解释。 TCP不知道传输的数据字节流是二进制数据, 还是ASCII字符、 EBCDIC字符或者其他类型数据。对字节流的解释由 TCP连接双方的应用层解释。
每个 TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加 上IP首部中的源端 IP地址和目的端 IP地址唯一确定一个 TCP连接。
有时,一个 IP地址和一个端口号也称为一个插口( socket)。这个术语出现在最早的 TCP 规范( RFC793)中,后来它也作为表示伯克利版的编程接口(参见 1.15节)。插口对( socket pair)(包含客户 IP地址、客户端口号、服务器 IP地址和服务器端口号的四元组 )可唯一确定互 联网络中每个 TCP连接的双方。
序号用来标识从 TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一 个数据字节。如果将字节流看作在两个应用程序间的单向流动,则 TCP用序号对每个字节进 行计数。序号是 32 bit的无符号数,序号到达 232-1后又从0开始。
当建立一个新的连接时, SYN标志变 1。序号字段包含由这个主机选择的该连接的初始序 号ISN(Initial Sequence Number)。该主机要发送数据的第一个字节序号为这个 ISN加1,因为 SYN标志消耗了一个序号(将在下章详细介绍如何建立和终止连接,届时我们将看到 FIN标志 也要占用一个序号)。
既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。 因此,确认序号应当是上次已成功收到数据字节序号加 1。只有 ACK标志(下面介绍)为 1时 确认序号字段才有效。
发送ACK无需任何代价,因为 32 bit 的确认序号字段和 ACK标志一样,总是 TCP首部的一 部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置, ACK标志也总是被设 置为1。
TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连 接的每一端必须保持每个方向上的传输数据序号。
TCP可以表述为一个没有选择确认或否认的滑动窗口协议(滑动窗口协议用于数据传输 将在 20.3节介绍)。我们说 TCP缺少选择确认是因为 TCP首部中的确认序号表示发方已成功收 到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。例 如,如果 1~1024字节已经成功收到,下一报文段中包含序号从 2049~3072的字节,收端并不 能确认这个新的报文段。它所能做的就是发回一个确认序号为 1025的ACK。它也无法对一个 报文段进行否认。例如,如果收到包含 1025~2048字节的报文段,但它的检验和错, TCP接收端所能做的就是发回一个确认序号为 1025的ACK。在21.7节我们将看到重复的确认如何帮 助确定分组已经丢失。
首部长度给出首部中 32 bit字的数目。需要这个值是因为任选字段的长度是可变的。这个 字段占4 bit ,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是 20字节。
在TCP首部中有 6个标志比特。它们中的多个可同时被设置为 1。我们在这儿简单介绍它 们的用法,在随后的章节中有更详细的介绍。
? URG 紧急指针( urgent pointer)有效(见 20.8节)。
? ACK 确认序号有效。
? PSH 接收方应该尽快将这个报文段交给应用层。
? RST 重建连接。
? SYN 同步序号用来发起一个连接。这个标志和下一个标志将在第 18章介绍。 FIN 发端完成发送任务。
TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始 于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个 16 bit 字段, 因而窗口大小最大为 65535字节。在 24.4节我们将看到新的窗口刻度选项,它允许这个值按比例变化以提供更大的窗口。
检验和覆盖了整个的 TCP报文段: TCP首部和 TCP数据。这是一个强制性的字段,一定是 由发端计算和存储,并由收端进行验证。 TCP检验和的计算和 UDP检验和的计算相似,使用 如11.3节所述的一个伪首部。
只有当URG标志置 1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值 相加表示紧急数据最后一个字节的序号。 TCP的紧急方式是发送端向另一端发送紧急数据的 一种方式。我们将在 20.8节介绍它。
最常见的可选字段是最长报文大小,又称为 MSS (Maximum Segment Size) 。每个连接方 通常都在通信的第一个报文段(为建立连接而设置 SYN标志的那个段)中指明这个选项。它 指明本端所能接收的最大长度的报文段。
TCP提供了一种可靠的面向连接的字节流运输层服务。TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据 进行确认,对失序的数据重新排序,丢弃重复数据; TCP提供端到端的流量控制,并计算和 验证一个强制性的端到端检验和。
许多流行的应用程序如 Telnet、Rlogin、FTP和SMTP都使用TCP。
标签:
原文地址:http://my.oschina.net/bjyb/blog/388273