传输控制协议(TCP)通常从应用程序中得到大段的信息数据,然后将它分割成若干个数据段。TCP会为这些数据段编号并排序,这样,在目的方的TCP协议栈才可以将这些数据段再重新组成原来应用数据的结构。由于TCP采用的是虚电路连接方式,这些数据段在被发送出去后,发送方的TCP会等待接收方TCP给出一个确认性应答,那些没有收到确认应答的数据段将被重新发送。
当发送方主机开始沿分层模型向下发送数据段时,发送方的TCP协议会通知目的方的TCP协议去建立一个连接,也就是所谓的虚电路。这种通信方式被称为是面向连接
的。在这个初始化的握手协商期间,双方的TCP层需要对接收方在返回确认应答之前,可以连续发送多少数量的信息达成一致。随着协商过程的深人,用于可靠传输的信道就被建立起来。
TCP是一个全双工的、面向连接的、可靠的并且是精确控制的协议,但是要建立所有这些条件和环境并附加差错控制,并不是一件简单的事情。所以,毫无疑问,TCP是复杂的,并在网络开销方面是昂贵的。然而,由于如今的网络传输同以往的网络相比,已经可以提供更高的可靠性,因此,TCP所附加的可靠性就显得不那么必要了。
TCP报头一共24字节:
源端口号(16bit) | 目的端口号(16bit) | ||
序列号(32bit) | |||
确认应答号(32bit) | |||
头长度(4) | 保留(6) | 代码位(6) | 窗口(16) |
校验和(16) | 紧急(16) | ||
选项(0或32,若有的话) | |||
数据(可变) |
目的端口号 在目的主机上请求应用程序的端口号。
序列号 一个由TCP用于将数据编排回原来正确s的顺序或用于对丢失或损坏的数据进行重传的编号,这样的处理过程称为顺序控制(排序)。
确认应答号 用于说明下一个所期望接收的TCP八位组数据。
头长度 在TCP头中包含的32位字的数量。用来指明数据的起始位置。TCP头的长度(即使包含有选项)是一个32位的整数倍。
保留 总是被设置为零。
代码位 用于建立及结束会话的控制功能。
窗口 是发送方将被允许的发送窗口尺寸,用八进制形式表示。
校验和 循环冗余校验(CRC),山于TCP不相信它的低层,因此会检验所有的数据。此CRC用于检验报头和数据字段。
紧急 当紧急指针代码位被设置时为有效字段,如果有效,这个值指明了当前序列号的八位组的偏移值,即第一个非紧急数据的起始位置。
选项 在需要时,可以是0或32位的倍数。也就是说,没有选项存在时,选项的大小为0。然而,如果所使用的选项所占用的字段不是32位的整倍数,则需要填充若干个0来确保数据始于32位的边界上。
数据 指被传送到传输层的TCP协议的数据,它包含有上层数据的报头。