TCP首部中的编码位定义了6个标志位,如表6-2所示。
表6-2 编码位各标志位含义
TCP把上层来的数据看做流,URG位的作用是允许发送方把紧急数据插入到流中,表明接收程序应尽可能快地通知紧急数据的到达,而不管紧急数据处在流中的什么位置。当发现紧急数据时,接收方的TCP便通知与连接有关的应用程序进入紧急方式。在所有紧急数据都处理完成后,TCP又通知应用程序返回正常运行方式。当URG位置1时,16位的紧急指针字段有效,它是一个偏移量,它与序号相加就能得到最后一个紧急数据字节的编号,表示紧急数据结束的位置。
ACK位指示该报文段中捎带有确认信息。当ACK置1时,表示确认序号字段是有效的。如果置0,则表示报文段不包含确认信息,确认序号字段被无视。
PSH位的作用是迫使TCP发送方尽快将数据发送出去。因为通常情况下,TCP发送方会判断是否累计了足够的数据以形成传输报文段(比如之前例子中200数据字节的报文段就是发送方每次判断数据累计200字节后发送)。而如果PSH位置1,那么TCP发送方不再判断是否累计了足够的数据,就会立即将其发送队列中的数据全部发送出去。而在接收方也是一样,当它发现PSH标志位置位后,就不会再等待后续数据,而是立即将接收缓冲区的数据交由TCP实体处理。当用户浏览网页按下回车或点击鼠标请求网上数据时,就会把PSH置位,通知TCP程序立即发送用户的动作所产生的数据。
RST位为重新连接位。无论何时报文段发生套接字错误,TCP都会发出一个复位报文段。序号不同步也会发送RST报文,如前面的图6-2所示。下面看一下套接字出错的实例。使用telnet命令指向一个没有在使用的端口:telnetbbs.nankai.edu.cn6000(端口6000未被使用,telnet的熟知端口为23),得到如图6-12所示的抓包结果,图中是捕获的两个TCP报文段实例。第一个报文段是大家熟悉的TCP连接请求报文段,SYN标志置位,初始序列号为135826174,窗口Win为65535字节,数据长度Len为0,最大报文段长度MSS为1460字节,窗口比例因子WS为2(即乘以22)。正常情况下该请求包会引起三次握手的响应报文段,但是由于指向了一个没有在使用的端口号,第二个报文段,即试图在不存在的端口上打开连接而产生的复位报文段,RST、ACK标志置位。值得注意的是该复位报文段的序号被置为0,而确认序号为请求序号+1。(www.daowen.com)
SYN位用于TCP建立连接时序号的同步。前面的介绍中已经提到过。
FIN位表明发送方已经没有数据发送了,在介绍TCP连接终止时使用过这个标识。
以上是TCP6个编码标志位的含义和功能。在这里,看到了TCP两个新的传输服务——“紧急”和“推送”。除此以外,另外4个编码位的功能,都可以在前面的介绍中找到它们的用法。
图6-12 使用RST位的例子
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。