TCP标志位详解(TCP Flag)

每个TCP段都有一个目的,这是借助于TCP标志选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。

我们来看看TCP标志字段来开始我们的分析:


您可以看到在3次握手(SYN,ACK)和数据传输期间使用的2个标志。

与所有标志一样,值“1”表示特定标志为“设置”,或者如果您喜欢,则为“开”。在此示例中,只有“SYN”标志被设置,表示这是新的TCP连接的第一个段。

除此之外,每个标志长一位,由于有6个标志,所以标志部分总共6位。

 

 您必须同意最流行的标志是“SYN”,“ACK”和“FIN”,用于建立连接,确认成功的段传输,最后终止连接。虽然其余的标志帜不是众所周知的,但它们的作用和目的在某些情况下也同样重要。

我们将开始分析,检查从顶部开始的所有六个标志:

 

1 FLAG - 紧急指针(URGENT POINTER)

第一个标志是紧急指针标志,如上一屏幕截图所示。此标志用于将输入数据标识为“紧急”。这样的进入段不必等待直到先前段被接收端消耗,而是直接发送并立即处理

在数据传输流中,主机正在向远程机器上运行的应用程序发送数据,可以使用紧急指针。如果出现问题,主机需要中止数据传输,并在另一端停止数据处理。在正常情况下,中止信号将在远程机器发送和排队,直到所有先前发送的数据都被处理,但是在这种情况下,我们需要立即处理中止信号。

通过将中止信号的段紧急指针标志设置为“1”,远程机器将不会等待所有排队的数据被处理,然后执行中止。相反,它会给出特定的段优先级,立即处理它,并停止进一步的数据处理。

如果您发现很难理解,请考虑这个现实生活中的例子:

在当地的邮局,数以百计的卡车正在卸载来自世界各地的信件。因为进入邮局大楼的卡车数量很多,他们排队一个,等待轮到他们卸下行李。

结果,队列结束了很久。然而,一辆大红标志的卡车突然加入队伍,安全人员的工作是确保没有卡车跳过排队,看到红标志,并且知道它载有非常重要的信件,需要紧急到达目的地。按照正常程序,安全人员向卡车发出信号,跳过队列,一路向前,优先于其他卡车。

在这个例子中,卡车表示到达其目的地并在等待处理的缓冲器中排队的段,而具有红标志的卡车是设置了紧急指针标志的段。

另外要注意的是存在指针指针字段。这个字段在第5节中有所描述,但是我们可以简单地提到,当紧急指针标志设置为'1'(这是我们在这里分析的那个)时,紧急指针字段指定紧急数据结束的段中的位置。

 

第二标记- 确认(ACKNOWLEDGEMENT)

确认标志用于确认数据包的成功接收

如果在使用TCP传输数据的同时运行数据包嗅探器,您会注意到,在大多数情况下,对于发送或接收的每个数据包,都会进行确认。因此,如果您从远程主机收到数据包,那么您的工作站最有可能将ACK字段设置为“1”。

在发送方每发送一个数据包需要一个确认的情况下,接收端将发送一次预期的ACK(接收到第三个连续的数据包)。这也称为窗口化,并在以下页面中广泛介绍。

 

第三标志 - PUSH

存在推送标志,如紧急标志,以确保数据被给予优先级(它应得的),并在发送或接收端处理。这个特定的标志在数据传输的开始和结束时被非常频繁地使用,影响数据在两端处理的方式。

当开发人员创建新的应用程序时,他们必须确保它们遵循RFC的特定指导,以确保其应用程序正常工作,并且无缺陷地管理进出OSI模型的应用程序层的数据流。使用时,推送位确保数据段被正确处理,并在虚拟连接的两端给出适当的优先级。

当主机发送其数据时,它将暂时排队在TCP缓冲区中,即存储器中的一个特殊区域,直到该段达到一定大小,然后发送到接收器。这种设计保证数据传输尽可能高效,而不需要通过创建多个片段而不需要花费时间和带宽,而是将它们组合成一个或多个较大的片段。

当段到达接收端时,它被传递到应用层之前被放置在TCP传入缓冲器中。在进入缓冲区中排队的数据将保留在那里,直到其他段到达,并且一旦完成,数据就被传递到等待它的应用层。

虽然这个过程在大多数情况下运行良好,但是有很多情况下这种“排队”的数据是不期望的,因为排队期间的任何延迟都可能导致等待应用程序出现问题。一个简单的例子将是一个TCP流,例如真正的播放器,其中数据必须立即发送和处理(由接收器),以确保平滑的流,没有任何切断。

这里提到的最后一点是,Push标志通常设置在文件的最后一段,以防止缓冲区死锁。当用于通过代理发送HTTP或其他类型的请求时也可以看到,确保请求得到适当和有效的处理。

 

第4标志 - 复位(RST)标志

段到达不用于当前连接时,使用复位标志。换句话说,如果要向主机发送数据包以建立连接,并且没有这样的服务等待在远程主机上回答,则主机将自动拒绝您的请求,然后向您发送回复RST标志置1。这表示远程主机已重置连接

虽然这可能是非常简单和合乎逻辑的,但事实是在大多数情况下,这个“特征”被大多数黑客使用,以便扫描“打开”端口的主机。所有现代端口扫描仪都能够通过“复位”功能检测“打开”或“收听”端口。

用于检测这些端口的方法非常简单:当尝试扫描远程主机时,将使用SYN标志位(1)构建有效的TCP段,并将其发送到目标主机。如果没有服务监听特定端口上的入站连接,则远程主机将回复ACK和RST标志设置(1)。另一方面,如果端口上有服务监听,则远程主机将构造一个具有ACK标志位的TCP段(1)。这当然是我们已经涵盖的标准三次握手的一部分。

一旦主机扫描开放端口接收到该段,它将完成三次握手,然后使用FIN(见下文)标志终止它,并将特定端口标记为“活动”。

 

第5标志 - 同步标志(SYNCHRONISATION FLAG)

TCP标志选项中包含的第五个标志可能是TCP通信中使用最知名的标志。您可能会注意到,在建立两台主机之间的经典3次握手时,SYN标志是初始化的:


在上图中,主机A需要使用TCP作为其传输协议从主机B下载数据。协议需要进行三次握手,以便双方建立虚拟连接才能交换数据。

在三次握手期间,我们可以统计每个主机发送的SYN标志总数为2个。随着文件的交换和新连接的创建,我们将看到更多的SYN标志被发送和接收。

 

第六标志- FIN 标志

可用的最后一个标志是FIN标志,代表“完成”一词。该标志用于拆除使用上一个标志(SYN)创建的虚拟连接,因此,由于这个原因,当连接之间交换最后一个数据包时,总是出现FIN标志。

重要的是要注意,当主机发送FIN标志来关闭连接时,它可能会继续接收数据,直到远程主机也关闭了连接,尽管这仅在特定情况下发生。一旦连接被双方削减,则释放用于连接的每端的缓冲区。

正常的拆卸过程如下所示:


上图显示了主机A和B之间的现有连接,两个主机正在交换数据。一旦数据传输完成,主机A发送一个包含FIN,ACK标志的数据包(步骤1)。

使用此数据包,主机A确认先前的流,同时启动TCP关闭过程以终止此连接。此时,Host A的应用程序将停止接收任何数据,并将关闭此端的连接。

为了响应主机A关闭连接的请求,主机B将发送确认(STEP 2),并通知其应用程序连接不再可用。一旦完成,主机(B)将发送自己的FIN,ACK标志(步骤3)以关闭其部分连接。

如果您想知道为什么需要执行此过程,则可能需要记住,TCP是一个全双工连接,这意味着有两个方向的数据流。在我们的示例中,这是从主机A到主机B的连接流,反之亦然。另外,它需要两个主机关闭它们的连接,因此两个主机必须发送一个FIN标志并且另一个主机必须确认它的原因。

最后,在步骤4,主机A将确认在步骤3发送的主机B的请求,并且双方的已关闭程序现在已经完成!


原文地址:http://www.firewall.cx/networking-topics/protocols/tcp/136-tcp-flag-options.html

展开阅读全文

没有更多推荐了,返回首页