连接跟踪(conntrack)
-
机器访问外部 HTTP 服务的连接(目的端口 80) -
外部访问机器内 FTP 服务的连接(目的端口 21) -
机器访问外部 DNS 服务的连接(目的端口 53)
-
从数据包中提取元组(tuple)信息,辨别数据流(flow)和对应的连接(connection)。 -
为所有连接维护一个状态数据库(conntrack table),例如连接的创建时间、发送 包数、发送字节数等等。 -
回收过期的连接(GC)。 -
为更上层的功能(例如 NAT)提供服务。
-
TCP/IP 协议中,连接是一个四层(Layer 4)的概念。TCP 是有连接的,或称面向连接的(connection oriented),发送出去的包都要求对端应答(ACK),并且有重传机制。UDP 是无连接的,发送的包无需对端应答,也没有重传机制。 -
conntrack(CT) 中,一个元组(tuple)定义的一条数据流(flow )就表示一条连接(connection)。后面会看到 UDP 甚至是 ICMP 这种三层协议在 CT 中也都是有连接记录的,但不是所有协议都会被连接跟踪。
Netfilter
-
基于 BPF hook 实现数据包的拦截功能(等价于 netfilter 里面的 hook 机制) -
在 BPF hook 的基础上,实现一套全新的 conntrack 和 NAT 因此,即便卸载掉 Netfilter ,也不会影响 Cilium 对 Kubernetes ClusterIP、NodePort、ExternalIPs 和 LoadBalancer 等功能的支持。由于这套连接跟踪机制是独立于 Netfilter 的,因此它的 conntrack 和 NAT 信息也没有 存储在内核的(也就是 Netfilter 的)conntrack table 和 NAT table。所以常规的 conntrack/netstats/ss/lsof 等工具是看不到的,要使用 Cilium 的命令,例如:
$ cilium bpf nat list$ cilium bpf ct list global
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。