为什么我们的防火墙(Ubuntu 8.04)拒绝带有RST的最终数据包(FIN,ACK,PSH)
背景技术长期以来,我们的防火墙一直存在问题,有时防火墙会将HTTP请求的部分挂起挂起,直到TCP超时为止。 在防火墙上跟踪流量之后,我注意到它仅在某些定时条件下发生,例如,当Web服务器在客户端已在有效负载上发送其第二个ACK之前发送了整个响应时。[SYN,SYN / ACK,ACK]已被交换,REQUEST已发送并被ACK',并且第一个RESPONSE数据包已被接收并ACK',然后网络服务器将其余的响应主体发送到一个镜头中(8个数据包)包括最后一个FIN,PSH),并且在客户端对其中任何一个进行确认之前,带有RST的Firewall REJECTS指向Web服务器,并保持客户端无限挂起。 这是整个wireshark跟踪以及来自防火墙双方的数据包。192.168.126.161是客户端的专用NAT'et IP地址。172.16.1.2是Web服务器IP(未显示真实的公共IP),而10.1.1.1是防火墙外部IP(未显示真实的公共IP) 2105 0.086275 192.168.126.161 172.16.1.2 TCP 37854 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=89375083 TSER=0 2106 0.000066 10.1.1.1 172.16.1.2 TCP 37854 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=89375083 TSER=0 2107 0.002643 172.16.1.2 10.1.1.1 TCP http > 37854 [SYN, ACK] Seq=0 …