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。下面的文章会讲解的非常的详细。
用 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 来查看每个数据包的状态位。