本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式。
TCP 最重要的特性:reliable.
17.1 引言
本章介绍的是 TCP为应用层提供的服务。
17.2 TCP的服务
TCP 提供一种 面向连接的,可靠的字节流服务。面向连接 意味着两个使用的TCP应用(eg. client-server)在彼此交换数据之前必须先建立一个TCP连接。
在一个 TCP 连接中,仅有两方进行彼此通信。
TCP 提供以下方式来提供可靠性:
(1) 由上一层发送的应用数据 被分割成 TCP 认为最合适发送的数据块。注意与UDP区别:UDP 甚至连 数据分片 都不放在心上。由 TCP 传递给 IP层的信息单位称作 段 或者 报文段(segment),因此,TCP 分割数据 的这一过程又称作:TCP分段。
(2) 当 TCP 发出一个段之后,启动一个定时器,等待目的端确认(返回ACK)收到这个报文段,如果不能及时收到一个确认,将重新发送这个报文段。
(3) 当 TCP 收到来自连接另外一端的数据,它将发送一个确认(ACK),这个确认会推迟一点点时间发送。
(4) TCP 将保持它首部的 检验和,这是一个 端到端 的检验和,必须由 发送端计算,接收端验证 来实现。如果收到的检验和有差错,TCP 将丢弃这个报文,并发送不确认的应答,希望重新发送此报文段。
(5) TCP 报文段 选择 IP报文段 来传输,而 IP报文段 有可能在传输的过程中 失序,那么 TCP 会对接收的报文 利用序列号 进行重新排序,将正确的顺序交给应用层。
(6) TCP 提供流量控制 - 窗口机制。防止较快主机使得较慢主机的缓冲区溢出。
字节流服务
字节流服务:两个应用程序 提供TCP连接 交换 8 bit字节构成的字节流。TCP 不在字节中插入记录标识码。
一端将字节流放到 TCP连接 上,同样的字节流将出现在 TCP连接 的另外一端。
TCP 对字节流的内容 不做任何解释。字节流的内容可以是 ASCLL码 或者其他数据。对字节流的解释 交给 TCP连接双方的应用 解释。
17.3 TCP的首部
每个TCP段都包含 目的端口号和源端口号,用于寻找 发端和接收端应用程序。这两个值加上 IP数据报首部中的 源IP地址和目的端IP地址 唯一确定一个 TCP连接。
- 有时,一个IP地址和一个端口号 也称为一个 插口(socket)。插口对(socket pair) 包含 目的端IP地址,源端IP地址,目的端端口号,源端端口号。插口对可以唯一确定每个TCP连接的双方。
序号用于标识从 TCP发送端 发往 TCP接收端 的数据字节流,表示在这个报文段的第一个数据字节。如果将字节流看做在两个应用程序之间的单向流动,则TCP用序号对每一个字节进行计数。序号是 32bit 的无序号数,序号到达 2^32-1 之后 又从0开始。
当建立一个新的连接的时候,SYN 标志变成1。序号字段包含 这个主机选择的 该连接的初始序号:ISN。该主机要发送数据的 第一个字节序号 为这个 ISN 加1(SYN标志消耗了一个序号)。
确认序号 包含 发送确认端 所期望收到的下一个序号。因此,确认序号 应该是上次成功接收到的数据字节的 序号+1。只有ACK标志为1时,确认序号字段才有用。
发送ACK 无需任何代价。
TCP为应用层提供:全双工服务。这意味着 数据能在两个方向上 独立的进行传输。因此在连接的每一端 都必须保持每个方向上的传输数据序号。
TCP 可以表述为 一个没有选择 确认或者否认 的滑动窗口协议。
- 缺少选择确认 是因为 TCP 首部中的确认序号 表示发送方已成功收到数据,但是不能确认序号所指的字节。
在 TCP首部 中有6个标志比特。
- URG 紧急指针有效
- ACK 确认序号有效
- PSH 接收方应该尽快把这个报文段交给应用层
- PST 重新建立连接
- SYN 同步序号 用来发起一个连接
- FIN 发送端完成发送任务
TCP 流量控制 是通过连接的每一端通过声明的 窗口大小 来提供。窗口大小是字节数,起始于确认序号字段指明的值(接收端希望接收的字节)。
检验和 覆盖了TCP的首部和数据。
只有当 URG 为1时,紧急指针才有效:紧急指针是一个正的漂移量,和序号字段中的值相加 表示紧急数据最后一个字节的序号。
最常见的可选字段 是最长报文大小(MSS)。
TCP报文 的 数据部分 是可选的。
2016/8/8