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,也不想不通為啥乙個產品這麼多年都沒有人去思考這些!工作中還是要多想一想為什麼?不要隨波逐流的接受!...