TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中个字段的作用。因此,只有弄清TCP首部个字段的作用才能掌握TCP的工作原理。

TCP前20个字节使固定的,后边有4n个字节使根据需要而增加的选项。因此TCP的最小长度是20字节

源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号。TCP的分用功能也是通过端口实现的。

序号:占四个字节(32位)。TCP是面向节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,序号范围是是[0,2^32-1],序号使用mod2^32,整个要传送的字节流的其实序号必须建立时设置,首部中的序号字段值则是指的是本报文段所发出的数据的第一个字节的序号。例如:一报文段的序号字段值是301,而携带的数据公有100字节,那么本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400,下一数据报文段数据序号应当从401开始,即下一个报文段的序号字段值应为401。这个字段的名称也叫作“报文段序号”

确认号:占四个字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如:B收到A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节,这表明B正确收到了A发送的到序号为700的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

数据偏移:占四位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。其实这个字段就是TCP报文段的首部距离。它的最大数据偏移的最大值是60字节(四位二进制位表示的最大数为15,而数据偏移的单位是4字节),又因为TCP的头部有20字节是固定的,所以选项长度不能超过40字节。

保留:占6位,保留为今后使用,目前位置为0.

URG:当URG=1时,表明紧急指针字段有效。他告诉我们系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送,直接与首部中的紧急指针配合将紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。例如:一个正在主机上运行的数据,出现了一些问题,需要立即停止运行,因此用户从键盘输入发出中断命令Control+c。如果不适用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾,只能在所有的数据被处理完毕之后这两个字符才能被交付给接收方的应用进程,这就不能及时停止程序。

确认ACK:仅当ACK=1,时确认号字段才有效,当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

推送PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的回应。在这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快的交付接收应用进程,而不再等到整个缓存满了再向上交付

复位RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。

同步SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

终止FIN:用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

窗口:占两字节。窗口指的是发送本报文段的一方的接收窗口(不是自己的发送窗口,不是对方的接收窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,允许对方发送的数据量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

例如:发送方发送了一个报文段,其确认号是701,窗口字段是1000.这就是告诉对方,从701号算起,我的接收缓存空间还可接受·1000个字节数据,你在给我发送数据时,必须大于这个数据量。(窗口值常根据网络的好坏变化着)

检验和:占两字节,校验和字段检验的范围包括首部和数据这两部分。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部,接收方在收到报文段后,要加上伪首部来计算校验和。计算方法是:发送方将整个报文段分为16位的段,然后将所有段进行相加求反,将结果存放在检验和字段中,接收方用相同的方法对伪头部和数据进行计算,如最终结果与检验和相加后全部位都是1,则说明数据传输正确,否则,则传输出现差错。

如图:

 

紧急指针:占两字节。紧急指针仅在URG=1时才有意义,紧急指针指出了紧急数据的末尾在报文段的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。需要注意的是,即使窗口为0时也可发送紧急数据。

选项:长度可变,最长可达40字节。当没有使用选项是,TCP的首部长度为20字节。TCP最初只规定了一种选项,即最大报文段长度MSS,后边又加了时间戳选项、窗口扩大选项、选择确认选项。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐