OVS 非VXLAN的收發包呼叫棧(二十二)

2021-10-06 20:12:03 字數 2697 閱讀 3447

netdev_frame_hook()

netdev_port_receive()

ovs_vport_receive()

ovs_dp_process_packet()

(在查表失敗後,對於帶gso標記的大包,會分片進行upcall)

ovs_dp_upcall()

ovs_execute_actions()

output:

do_output()

(通常情況下ovs_cb

(skb)

->mru為0,直接傳送)

ovs_vport_send()

(在ovs_cb

(skb)

->mru不為0,(即在output之前還經歷了ct,且ct流程進行了分片重組。)且小於出埠的mtu的情況下,進入分片流程)

ovs_fragment()

(執行分片)

ip_do_fragment

(net, skb->sk, skb, ovs_vport_output)

;(發包,這裡**寫的比較繞)

ovs_vport_output()

ovs_vport_send()

ct :

ovs_ct_execute()

(在進行conntrack的commit或lookup之前,會對分片進行重組,並會設定ovs_cb

(skb)

->mru的值不為0,為分片中最大的分片的尺寸)

handle_fragments()

ovs_ct_commit()

/ovs_ct_lookup()

ovs_vport_send()

vport->ops->

send

(skb)

==dev_queue_xmit

(skb)

==rpl_dev_queue_xmit

(skb)

(檢查包的gso標記,需要分片的情況下進行分片,然後再遞迴呼叫dev_queue_xmit

()傳送分片)

skb_gso_segment

非vxlan組網,邏輯基本如下:

1. 收到多個分片

1.1. datapath查表失敗

分片各自上送至使用者態,走upcall流程

1.2. datapath查表成功,或從upcall流程下來

開始執行actions

while(1

) ct 會對分片進行重組,重組後的大包的ovs_cb

(skb)

->mru會被設定成乙個非0值

ovs_vport_send()

output 如果沒有經過ct,則分片直接被**,如果經過了ct,則大包還要進行分片操作

ovs_fragment()

->

ip_do_fragment()

->

ovs_vport_output()

->

ovs_vport_send()

2. 收到帶gso標記的大包

2.1. datapath查表失敗

先進行分片,然後把分片各自upcall

2.2. datapath查表成功

開始執行actions

while(1

) ct 直接ct,沒有額外操作

output 由於ovs_cb

(skb)

->mru為0,所以直接進入ovs_vport_send()

ovs_vport_send()

在這裡檢查包的gso標記,然後進行分片,再對各個分片遞迴呼叫dev_queue_xmit

()傳送分片

vport->ops->send ==

dev_queue_xmit()

==rpl_dev_queue_xmit

()

vxlan組網,邏輯基本如下:

1:首先是kernel收到udp報文,走以下流程解封裝

udp_rcv -> __udp4_lib_rcv -> udp_queue_rcv_skb -> encap_rcv -> vxlan_rcv

2:最終呼叫 netdev_port_receive -> ovs_vport_receive -> ovs_dp_process_packet

也就是說,vxlan收包終結之後,不存在分片與重組,而在終結之前的ip報文是否需要重組,則是由kernel負責,不是ovs的責任

接下來的處理流程都與非vxlan組網一致了,直至發包

在vxlan組網中,發包最終調到 ovs_vport_send

() 函式時,vport->ops->send 指標實際呼叫的函式是 vxlan_xmit

vxlan_xmit -> rpl_vxlan_xmit -> vxlan_xmit_one -> udp_tunnel_xmit_skb -> iptunnel_xmit == rpl_iptunnel_xmit -> ip_local_out == rpl_ip_local_out

在 rpl_ip_local_out 中,類似於 rpl_dev_queue_xmit

(),會檢查gso標記,如果有gso標記,會將這個ip報文分片然後各片各自傳送

tcp udp收發包的機制

tcpudp 傳送安全送達 只管傳送 接收與建立連線 是 三次握手 否 有資料報,無需連線 資料大小 無限制每個資料報64k 可靠性可靠 不可靠速度 慢 三次握手才能完成連線 快 無需連線 應用流 qq 握手次數 具體情況 1建立連線時,客戶端傳送同步序列編號到伺服器,並進入傳送狀態,等待伺服器確認...

網絡卡收發包的offload總結

網絡卡的offload是指將cpu對資料報的一些處理操作轉到硬體網絡卡上進行,由此釋放出cpu的計算資源。offload也被稱為硬體解除安裝。從2012年起,offload技術開始在網絡卡上使用。發展至今,網絡卡上已經支援多種形式的offload。目前,在收發方向上,網絡卡各自支援不同的offloa...

盒子裝置介面收發包的思考1

目前在處理盒子產品時,發現wan口和lan口收發報文時還在走核心路由邏輯,因為從wan口進來的包如果 只能從lan口 出去,所以此時路由查詢是個多餘動作!此處應該是乙個可以優化點,來試一試吧!mark,也不想不通為啥乙個產品這麼多年都沒有人去思考這些!工作中還是要多想一想為什麼?不要隨波逐流的接受!...