这就是为什么链接跟踪很重要的缘由了. 没有链接跟踪,防火墙将没法判断收到的ACK包是否属于一个已经创建的链接.通常的包过滤(Ipchains)收到ACK包时,会让它经过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在链接表中查找是否属于哪一个已建链接,不然丢弃该包 服务器
在TCP层,有个FLAGS字段,这个字段有如下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于咱们平常的分析有用的就是前面的五个字段。spa
它们的含义是:指针
URG:Urget pointer is valid (紧急指针字段值有效)接口
SYN: 表示创建链接,携带此标志位的包表示正在发起链接请求get
FIN: 表示关闭链接,携带此标志位的包表示正在请求终止链接服务器端
ACK: 表示响应,确认号请求
PSH: 表示有 DATA数据传输防火墙
RST: 表示链接重置,或者拒绝一个无效的请求总结
其中,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数据包内容被传递。通信
Client --> 置SYN标志 序列号 = J,确认号 = 0 ----> Server
Client <-- 置SYN标志 置ACK标志 序列号 = K, 确认号 = J + 1 <-- Server
Client --> 置PSH标志,置ACK标志 序列号 = 55555, 确认号 = 22222,数据包长度 = 11 ---> Server
Client <-- 置ACK标志,序列号 = 22222, 确认号 = 55566 (=55555 + 11),数据包长度 = 0 <--- Server
Client <-- 置PSH标志,置ACK标志 序列号 = 22223, 确认号 = 55566,数据包长度 = 22 <--- Server