TCP标志:PSH和URG

TCP标志:PSH和URGTCP 标头包含几个一位布尔字段 称为标志 用于影响 TCP 连接上的数据流 忽略 RFC3168 为拥塞通知添加的 CWR 和 ECE 标志 有六个 TCP 控制标志 下面列出的其中四个用于控制 TCP 连接的建立 维护和拆除 并且对于甚至进行了基本数据包分析的任何人都应该熟悉 SYN nbsp 启动连接 ACK nbsp 确认收到的数据 FIN nbsp 关闭连接 RST nbsp 中止连接以响应错误其他两个标志 PSH 推 和

TCP标头包含几个一位布尔字段,称为标志,用于影响TCP连接上的数据流。忽略RFC 3168为拥塞通知添加的CWR和ECE标志,有六个TCP控制标志。下面列出的其中四个用于控制TCP连接的建立,维护和拆除,并且对于甚至进行了基本数据包分析的任何人都应该熟悉。

  • SYN – 启动连接
  • ACK – 确认收到的数据
  • FIN – 关闭连接
  • RST – 中止连接以响应错误

其他两个标志,PSH(推)和URG(紧急),并不是众所周知的。它们是今天文章的焦点。

PSH标志

要了解PSH标志的功能,我们首先需要了解TCP如何缓冲数据。TCP在OSI模型的第四层运行; 它向上层提供了一个简单的套接字,可以读取和写入,掩盖了基于分组的通信的复杂性。为了允许应用程序随时读取和写入此套接字,缓冲区在两个方向上都在TCP连接的两端实现。

下图显示了在发送之前发送方如何缓冲数据,以及接收时接收方如何缓冲数据。

TCP标志:PSH和URG

 

当发送多个最大段大小(MSS)的数据(例如,传输大文件)时,缓冲区允许更有效的数据传输。但是,在处理需要尽可能快地传输数据的实时应用程序时,大缓冲区的弊大于利。考虑一下Telnet会话会发生什么,例如,如果TCP在发送数据包之前等待有足够的数据来填充数据包:在第一个数据包进入远程设备之前,您必须键入超过一千个字符。不是很有用。

这是PSH标志进入的地方.TCP在会话级别提供的套接字可由应用程序写入,可选择立即“推送”数据,而不是等待其他数据进入缓冲区。发生这种情况时,传出TCP数据包中的PSH标志设置为1(打开)。在接收到设置了PSH标志的分组时,连接的另一侧知道立即将该分段转发到应用程序。总而言之,TCP的推送功能完成了两件事:

  • 发送应用程序通知TCP应立即发送数据。
  • TCP报头中的PSH标志通知接收主机应立即将数据推送到接收应用程序。

我们可以看到在HTTP GET请求的数据包捕获中使用的PSH标志的示例。在数据包#4中,我们看到初始HTTP请求已设置其PSH标志,表示客户端没有其他数据要添加,并且请求应立即发送到应用程序(在本例中为Web守护程序)。我们还看到服务器在包#36上设置了PSH标志,包含所请求文件的最后字节。同样,PSH标志用于通知接收方发送方没有其他数据要传输(暂时)。

TCP标志:PSH和URG

如上所述,PSH标志还用于促进通过TCP的实时通信。短Telnet会话的数据包捕获表明,所有携带Telnet数据的数据包都设置了PSH标志,以防止TCP按键缓冲。

URG标志

URG标志用于通知接收站段内的某些数据是紧急的并且应该优先。如果设置了URG标志,则接收站将评估紧急指针,即TCP标头中的16位字段。该指针指示从第一个字节开始计算的段中有多少数据是紧急的。

TCP标志:PSH和URG

 

现代协议并未充分利用URG标志,但我们可以在之前引用的Telnet数据包捕获中看到它的一个示例。在包#86中发送的0xFF字符在包#70中的Telnet命令0xF2(242)之前,表示数据标记。根据RFC 854,应该在设置TCP URG标志的情况下发送此命令。分组#68中的紧急指针指示该分段的第一个字节(在这种情况下是整个分段)应该被认为是紧急数据。

不可否认,这可能不是URG旗帜最具说明性的例子,但在真实世界的捕捉中发现它的其他用途却令人惊讶地难以实现。

有关TCP的PSH和URG功能的更多讨论,请在线查看“TCP / IP指南”。

【阿里云】12.12来了!购买云产品即享低至2折,2018最后一波了 https://m.aliyun.com/act/team1212?params=N.4qR9SajEMx

转自:http://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232334.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springEL表达式_Spring详解

    springEL表达式_Spring详解文章目录SpEL表达式SpEL表达式概述1、什么是SpEL表达式2、SpEL表达式的作用SpEL的使用方式1、xml配置的方式2、注解的方式SpEL表达式的调用SpEL表达式SpEL表达式概述1、什么是SpEL表达式SpEL:(springexpressionlanguage)是一种表达式语言,是一种强大,简洁的装配Bean的方式。他可以通过运行期间执行的表达式将值装配到我们的…

    2025年10月25日
    2
  • Java代码生成器[通俗易懂]

    Java代码生成器[通俗易懂]项目说明本项目基于是基于renren-generator定制的代码生成器文章目录**项目说明**不同点:效果原理分析如何定制开发?更多可能存在的坑代码地址不同点:因为本人的公司使用的是tkmyabtis+swagger构建restapi,而renren-generator用的是mybatis-plus,而且不支持swagger,所以有了本项目效果…

    2022年4月27日
    51
  • SQL Like 通配符

    SQL Like 通配符 SQL通配符在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL通配符必须与LIKE运算符一起使用。在SQL中,可使用以下通配符:通配符描述%替代一个或多个字符_仅替代一个字符[charlist]字符列中的任何单一字符[^charlist]或者[!charlist]

    2022年7月15日
    15
  • CSV文件太大打不开进行分割、和打开乱码问题[通俗易懂]

    CSV文件太大打不开进行分割、和打开乱码问题[通俗易懂]CSV文件打开以及乱码问题今天要使用一个csv文件,但是有8个G,excel打不开,用Python的pandas也读不了,可能是我电脑配置太落后,也可能是数据实在太大了。解决办法:首先处理打不开的问题,我们可以把大的csv分割成若干小文件,使用文件分割器,按10000行一个文件分割,分割器在F:\新建文件夹\csv文件分割器\split.exe,稍等一段时间就行。我还试过另一个分割器,但是不行…

    2022年7月21日
    88
  • kibana 模糊匹配_匿名语音匹配app

    kibana 模糊匹配_匿名语音匹配app一.前言现在大多数的公司都会使用ELK组合来对日志数据的收集、存储和提供查询服务。ElasticSearch+Logstash+Kibana。查询数据库,如果是MySQL,那么就需要使用MySQL的语法;同样的,在Kibana上查询数据,也需要使用Kibana的语法,而Kibana的查询语法叫做KibanaQueryLanguage,简称KQL。二.KQL简单介绍KQL(KibanaQueryLanguage),也就是在Kibana上面进行查询时使用的语法。Kibana中也可以使

    2025年6月2日
    10
  • Java调用so文件[通俗易懂]

    Java调用so文件[通俗易懂]公司的硬件让我帮忙调用一个so文件,想着一直都没机会自己写一个jni,于是就答应了,在调用的过程中还踩了不少坑,特地写一篇博客记录一下。一、使用技术原本是想直接用java自带的jni,但是我们硬件只给了一个so文件,而且里面的函数命名等规则不符合java的jni调用标准,于是就打算使用框架jna来调用。JNA就是建立在JNI之上,它简化了Java调用原生函数的过程。JNA提供了一…

    2022年9月19日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号