原创 【Linux4.1.12源碼分析】二層報文發送之GSO條件判斷

4.1.12內核中,GSO報文的判斷和分段的入口函數是validate_xmit_skb,其中使用netif_needs_gso用來判斷軟件是否要進行GSO分段,skb_gso_segment實現報文的GSO分段,本篇重點講述GSO分段的

原创 【Linux4.1.12源碼分析】協議棧報文接收之netif_receive_skb函數分析

netif_receive_skb函數是協議棧報文接收的入口,一般由驅動調用,把報文送入協議棧,4.1.12內核做了對sk的封裝,目的是什麼沒還未搞清楚。 1、netif_receive_skb函數 static inline int n

原创 【容器網絡】Calico容器網絡方案

Calico容器網絡方案 Calico共有兩個容器網絡方案:Calico BGP和Calico IPIP。 Calico BGP方案 Calico BGP數據面如下: 同節點容器通信 容器A訪問容器B,數據面流程如下: 容器A

原创 【Linux4.1.12源碼分析】二層報文發送之報文GSO分段(skb_segment)

skg_segment是實現封裝報文GSO分段的基礎,直接拋代碼。 /** * skb_segment - Perform protocol segmentation on skb. * @head_skb: buffer to se

原创 【Linux4.1.12源碼分析】IP層報文發送之ip_local_out

IP層本地報文發送有兩個函數ip_local_out和ip_local_out_sk,實際實現兩者是等同的,因爲本地發送的報文,skb必然關聯着一個sock對象。 1、ip_local_out函數 static inline int ip

原创 【OVS2.5.0源碼分析】vxlan發包流程分析

發包處理函數最終會調用到ovs_vport_send函數,該函數最終會調用vport_ops的send函數。 1、ovs_vport_send函數 void ovs_vport_send(struct vport *vport, str

原创 【Linux4.1.12源碼分析】AF_PACKET raw socket實現原理分析

raw socket按照檢測到的報文主要可以分兩類:mac報文、IP報文、傳輸層報文。本文分析二層報文,例如:socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)方式創建的socket,可以檢測到所有的二層報文。r

原创 【Linux4.1.12源碼分析】IP層報文發送之ip_output

上一篇提到ip_local_out函數最終會調用ip_output完成報文發送,本篇分析ip_output的處理過程。 1、ip_output函數 int ip_output(struct sock *sk, struct sk_buf

原创 【Linux4.1.12源碼分析】二層報文發送之報文GSO分段(IP層)

IP層的GSO/GRO定義在ip_packet_offload結構體中。 static struct packet_offload ip_packet_offload __read_mostly = { .type = cpu_to_b

原创 【Linux4.1.12源碼分析】二層報文發送之net_tx_action

net_tx_action函數報文發送軟中斷處理函數,本篇不分析軟中斷註冊過程,只分析該函數的處理過程。 產生髮包軟中斷最常見的場景是:1)報文發送PPS很高;2)網絡qos限制。 1、net_tx_action函數 static voi

原创 【傳統網絡】以太網發包原理

以太網 以太網(Ethernet)是一種計算機局域網技術,是目前應用最普遍的局域網技術,取代了其他局域網標準如令牌環、FDDI和ARCNET。 以太網拓撲 以太網的標準拓撲結構爲總線型拓撲,當今快速以太網使用交換機來進行網絡連接和

原创 【容器網絡】Flannel容器網絡方案

Flannel容器網絡方案 Flannel共有三個容器網絡方案:Flannel UDP、Flannel VXLAN舊和Flannel VXLAN新。 Flannel UDP方案 Flannel UDP數據面如下: 同節點容器通信

原创 【容器網絡】MACVLAN容器網絡方案

macvlan容器網絡方案 macvlan是Linux自帶的虛擬網卡,基於同一個底層網卡的macvlan設備會形成一個邏輯的交換機,提供交換能力,性能優化linux bridge。 macvlan方案 macvlan數據面如下:

原创 【Linux4.1.12源碼分析】vxlan報文發送之iptunnel_xmit

iptunnel_xmit函數是發送vxlan報文時,封裝UDP報文頭之後被調用的,主要作用是封裝IP頭,並調用三層發包函數,完成報文的發送,該函數相對比較簡單。 1、iptunnel_xmit函數 int iptunnel_xmit(s

原创 【Linux4.1.12源碼分析】二層報文發送之報文GSO分段(TCP)

TCP報文GSO分段的入口函數是tcp4_gso_segment,在tcpv4_offload對象中定義。 1、tcp4_gso_segment函數 static struct sk_buff *tcp4_gso_segment(stru