- 博客(123)
- 收藏
- 关注
原创 cilium ebpf helper函数bpf_redirect/peer/neigh
设置接口索引和flags,如果flags为BPF_F_INGRESS,则将skb->dev设置为ifindex指定的dev,并将报文enqueue_to_backlog到cpu队列,下次软中断再处理报文,就像报文从ifindex指定的接口接收。如果不指定BPF_F_INGRESS,则执行dev_queue_xmit将报文从ifindex指定的接口发送出去。上面三个bpf helper函数实现很简单,只是设置flag和接口索引,并没有真正执行报文重定向的处理,但都会返回 TC_ACT_REDIRECT。
2023-08-12 15:20:19 776
原创 cilium host-routing模式流程分析
本文分析cilium host routing模式下的报文路径和涉及到的ebpf源码分析。
2023-08-12 09:47:58 651 1
原创 cilium native-routing模式流程分析
本文分析cilium native routing模式下的报文路径和涉及到的ebpf源码分析。实验环境在vxlan模式下修改参数后而来。native routing和vxlan模式的区别主要是跨节点通信时,vxlan模式需要封装,native routing模式需要根据目的ip查找路由表转发到其他节点。
2023-08-06 11:10:11 485
原创 cilium vxlan模式流程分析
本文分析cilium vxlan模式下的报文路径和涉及到的ebpf源码分析。实验环境先通过kubeadm安装k8s,再通过cilium binary安装cilium cni,默认是vxlan模式的。
2023-08-02 19:52:02 461
原创 cilium ipam机制源码分析
cilium作为k8s cni插件,提供了ipam的机制,可用来给pod分配ip地址,具体配置可参考,其中Kubernetes Host Scope表示每个node的cidr由k8s来分配,node上每个pod的ip由cilium-agent来分配;Cluster Scope为默认的ipam方式,每个node的cidr由cilium-operator来分配,并更新到ciliumnode crd中,node上每个pod的ip仍然由cilium-agent来分配,其他几种模式为云厂商提供的。
2023-04-16 18:15:37 597 1
原创 kubelet PLEG实现分析
kubelet的主要作用是确保pod状态和podspec保持一致,这里的pod状态包括pod中的container状态,个数等,为了达到这个目的,kubelet需要从多个来源watch pod spec的变化,并周期从container runtime获取最新的container状态。比如创建了包括三个container的pod,当其中一个container异常退出时,kubelet能通过PLEG及时发现此事件并重建container。
2023-01-20 21:00:00 1040
原创 reuseaddr和reuseport
方案1: 如果socketA调用bind后,又调用了listen,则fastreuse 会恢复为0(即使socketA在bind前设置了SO_REUSEADDR),此时即使socketB在bind前设置了SO_REUSEADDR也不管用。三个匹配条件:sk_family ,socket绑定的本地ip rcv_saddr,socket绑定的本地接口sk_bound_dev_if。同一条tcp流的前两个建立连接的请求syn和响应ack报文需要走上面流程,连接建立后,后续报文到来后,可直接在已建立连接表查找到。.
2022-08-27 23:28:29 985
原创 tcp三次握手的一些疑问
server收到client发送的syn报文后,为了防止syn攻击,会首先创建request_sock结构,保存到hash表中(半连接队列),而不是直接分配sock结构。接下来回答上面的两个问题,对于问题a,server从收到syn到再次收到ack的这段时间内,因为还没有分配sock结构,所以从代码看,是在收到ack后,分配sock才设置TCP_SYN_RECV。对于问题b,server sock一直是处于listen状态的,收到新连接后,会分配新的sock,改变新sock的状态。...
2022-08-27 23:26:55 181
原创 网络编程“惊群“问题
惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。...
2022-08-27 23:25:49 459
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人