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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • stc12c5a60s2功能说明(STC12C5A60S2默认触发)

    最近学习一下SD卡的驱动,网上程序的版本很多,使用的MCU和SD卡的型号千奇百怪,学起来反而没有方向,感觉上乱七八糟的,直到现在,才直到我们平常说的SD卡实际上有很多中类别。0到2G的SD卡,最普通的卡;2G到32G的SDHC卡,也就是现在最常用的大容量SD卡;还有我没有见过的SDXC卡,容量好像在32G以上。同时还有手机上的TF卡,实际上也是SD卡只不过做工不同而已,MMC卡。学习的时候走了很

    2022年4月12日
    56
  • 怎么删除pycharm的项目_怎样删除pycharm创建的项目

    怎么删除pycharm的项目_怎样删除pycharm创建的项目前言os模块和shutil模块是Python处理文件/目录的主要方式。os模块提供了一种使用操作系统相关功能的便捷方式,shutil模块是一种高级的文件/目录操作工具。文件的处理os模块提供了一些便捷功能来使用操作系统资源,比如读取资源目录下的文件、在命令行查看某路径下文件的所有内容等。获取系统类型对代码进行兼容性开发以适应不同操作系统时通过操作系统类型进行判断就可以轻松解决。importosimportsysprint(os.name)#返回nt代表Windows,posix代表L

    2022年8月25日
    5
  • 常量表达式是什么_const常量

    常量表达式是什么_const常量常量表达式值(constant-expressionvalue)。通常情况下,常量表达式值必须被一个常量表达式赋值,而跟常量表达式函数一样,常量表达式值在使用前必须被初始化。一、常量表达式1.1运行时常量性与编译时常量性在C++中,我们常常会遇到常量的概念。常量表示该值不可修改,通常是通过const关键字来修饰的。比如:constinti=3;const还可以修饰函数参数、函数返回值、函数本身、类等。在不同的使用条件下,const有不同的意义,不过大多数情况下,const描述的都

    2022年9月27日
    3
  • web服务器双机热备方案解析「建议收藏」

    (1)、假设外网虚拟IP72.249.146.214上,内网hosts设置db10对应内网虚拟IP192.168.146.214  (2)、默认情况下,由主机绑定内、外网虚拟IP,备机作为备份,当主机的MySQL、Nginx或服务器出现故障无法访问时,备机会自动接管内、外网虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup/bi

    2022年4月7日
    87
  • Python基本特殊方法之__format__

    __format__()方法__format__()传参方法:someobject.__format__(specification)specification为指定格式,当应用程序中出现&quo

    2021年12月19日
    46
  • JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]

    JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]在这篇文章中,我们将向您展示如何使用java8 Stream Collectors 对列表分组,计数,求和和排序。1.GroupBy,CountandSort1.1Groupbya List anddisplaythetotalcountofit.(按列表分组,并显示其总数)Java8Example1.javapackagecom.mkyong.java8;i…

    2022年8月20日
    18

发表回复

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

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