0%

tcp push ack 的意思

push ack 是什么意思?

这里面的 P. 代表 push ack 的数据包,那 push ack 具体是什么意思呢?

1
11:53:56.748105 IP 40.100.29.194.https > 10.79.98.55.62947: Flags [P.], seq 5758:5814, ack 6948, win 2052, length 56

在这里有详细的说明

Understanding Push ACK TCP Flags

  • PSH(push) flag indicates that the incoming data should be passed on directly to the application instead of getting buffered.
  • ACK(acknowledgment) flag is used to confirm that the data packets have been received, also used to confirm the initiation request and tear down requests. Once a TCP session has been created, every packet contains an ACK flag.

push 和 ack 是常用的两种 tcp flag。tcp 协议中有六种 tcp flag。下面的文章会讲解的非常的详细。

Understanding TCP Flags

用 tcpdump 命令可以非常方便的查看每个 packet 的 tcp flag 状态。

Tcpdump: Filter Packets with Tcp Flags

tcp flag 详解

我们通常用的 tcp flag 有六种。

在 TCP 层,有个 FLAGS 字段,这个字段有以下几个标识:SYN,FIN,ACK,PSH,RST,URG。

其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

  • SYN 表示建立连接
  • FIN 表示关闭连接
  • ACK 表示响应
  • PSH 表示有 DATA 数据传输
  • RST 表示连接重置

push ack 是通用的组合。

其中,ACK 是可能与 SYN,FIN 等同时使用的,比如 SYN 和 ACK 可能同时为 1,它表示的就是建立连接之后的响应(响应建立连接的那一个包)。

如果只是单个的一个 SYN,它表示的只是建立连接(连接发起的第一个包)。

TCP 的几次握手就是通过这样的 ACK 表现出来的。

但 SYN 与 FIN 是不会同时为 1 的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST 一般是在 FIN 之后才会出现为 1 的情况,表示的是连接重置。

一般地,当出现 FIN 包或 RST 包时,我们便认为客户端与服务器端断开了连接;而当出现 SYN 和 SYN+ACK 包时,我们认为客户端与服务器建立了一个连接。

PSH 为 1 的情况,一般只出现在 DATA 内容不为 0 的包中,也就是说 PSH 为 1 表示的是有真正的 TCP 数据包内容被传递。

TCP 的连接建立和连接关闭,都是通过请求-响应的模式完成的。

TCP三次握手

第一次握手:主机 A 发送 SYN=1,随机产生 seq number 的数据包到服务器,主机 B 由 SYN=1 知道,A 要求建立连接。

第二次握手:主机 B 收到请求后要确认连接信息,向 A 发送 ack number=(主机 A 的 seq+1),SYN=1,ACK=1,随机产生 seq 的包

第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number + 1,以及 ACK 是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),主机 B 收到后确认 seq 值与 ack = 1 则连接建立成功。

完成三次握手,主机 A 与主机 B 开始传送数据。

可以通过 tcpdump 来查看每个数据包的状态位。

tcpdump capture tcp flags