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

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

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

PSH标志

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

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

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

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

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

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

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

URG标志

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

现代协议并未充分利用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/

TCP标志:PSH和URG相关推荐

  1. TCP协议中的PSH和URG标志位

    TCP段格式 源端口 数据发送方的端口号,2个字节 目的端口 数据接受方的端口,2个字节 序号 报文段序号,数据报文中第一个字节的序号.4个字节,共2的32次方个序列号. 确认序号 也是4个字节,是期 ...

  2. java tcp fin_TCP报文中的SYN,FIN,ACK,PSH,RST,URG

    TCP的三次握手是怎么进行的:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发 ...

  3. TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...

  4. TCP的连接状态标识 (SYN, FIN, ACK, PSH, RST, URG)

    TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段.它们的含义是: (1)SYN表示建立 ...

  5. TCP包的类型 (SYN, FIN, ACK, PSH, RST, URG)

    http://blog.csdn.net/season_hangzhou/article/details/9161969 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, A ...

  6. tcp linux 报文内容,【Linux】TCP报文中的PSH和URG字段的介绍

    TCP协议 TCP报文格式 源端口和目的端口 各自占用两个字节,用来表示主机中的通信进程.端口号和IP组合即为套接字 序号 也叫发送序号,TCP将发送的每一个数据流都进行了编号,整个数据的起始序号在开 ...

  7. TCP的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK确认机制

    1.TCP的状态FLAGS字段状态 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 对于我们日常的分析有用的就是前面的五个字段:它们 ...

  8. TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...

  9. TCP的状态(SYN,FIN,ACK,PSH,RST,URG)

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN表示建立连 ...

最新文章

  1. mysql双主同步一个库,CNESA
  2. 1165: 零起点学算法72——首字母变大写
  3. JAVA基础:Hibernate外键关联与HQL语法
  4. HTML5 Canvans 常用API整理
  5. 2021新媒体内容生态数据报告
  6. MySQL 日期时间类型
  7. Objective-C基础笔记(7)Foundation中的常用结构体
  8. EAC3 mantissa quantization(VQ GAQ)
  9. 关于QComboBox
  10. Error querying database. Cause: java.sql.SQLException: ORA-01008: 并非所有变量都已绑定
  11. MacBook重装系统
  12. 续费Enom域名的三种办法
  13. 数据密集型系统设计:索引及存储(B树、LSM树、OLTP及OLAP)
  14. 网络安全面试、实习、校招经验打包分享
  15. C语言/C++【switch语句详解(用法、规则、流程图、实例)】
  16. 快速排序,归并排序的递归实现(c++)
  17. 中国计算机协会(CCF)
  18. LINUX-S3C2440-SJA1000驱动程序-笔记
  19. Java中new的作用
  20. pythoninstaller打包_最详细的Python打包工具:Pyinstaller实战指南,如丝滑般体验!-installer文件夹...

热门文章

  1. CentOS_7虚拟机搭建L2TP和PPTP服务器
  2. CSGO游戏搬砖项目线上直播课来啦
  3. Java判断json对象的某个属性是否为空
  4. 涂鸦二次开发BK7231S烧录文档说明
  5. php 方差函数,excel中方差的函数是什么,方差的简单计算公式
  6. php如何获取cookie,怎么获取cookie的值
  7. [230601]托福听力精听|TPO66L1|Sleep
  8. python手绘教学_Python实现手绘图效果实例分享
  9. 出局者高调给小程序泼冷水 为什么说2019年的小程序仍是大有可为?
  10. 什么是面向对象编程?面向对象和面向过程有什么区别?