三次握手Three-way Handshake 一个虚拟连接的建立是通过三次握手来实现的 1
(B) --> [SYN] --> (A) 假如服务器A 和客户机B 通讯
当A 要和B 通信时,B 首先向A 发一个SYN (Synchronize) 标记的包,告诉A 请求建立连接
注意: 一个 SYN 包就是仅SYN 标记设为1 的TCP 包(参见TCP 包头Resources)
认识到这点很重要,只有当A 受到B 发来的SYN 包,才可建立连接,除此之外别无他法
因此,如果你的防火墙丢弃所有的发往外网接口的SYN 包,那么你将不能让外部任何主机主动建立连接
(B) (A) B 收到SYN/ACK 包,B 发一个确认包(ACK),通知A 连接已建立
至此,三次握手完成,一个TCP 连接完成 Note: ACK 包就是仅ACK 标记设为1 的TCP 包
需要注意的是当三此握手完成、连接建立以后,TCP 连接的每个包都会设置 ACK 位 这就是为何连接跟踪很重要的原因了
没有连接跟踪,防火墙将无法判断收到的ACK 包是否属于一个已经建立的连接
一般的包过滤(Ipchains)收到ACK 包时,会让它通过(这绝对不是个好主意)
而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包 四次握手Four-way Handshake 四次握手用来关闭已建立的TCP 连接 1
(B) --> ACK/FIN --> (A) 2