精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊Sockmap與基本原理

存儲 存儲軟件
sockmap是BPF程序的一種map類型,顧名思義,這種map類型中存儲的是對struct sock的引用。熟悉網絡的同學知道struct sock是套接字在網絡層的表示,因此利用sockmap我們可以在網絡層上對TCP套接字進行一些自定義處理和操縱。

 [[381394]]

本文轉載自微信公眾號「云巔論劍」,作者寒蟬。轉載本文請聯系云巔論劍公眾號。  

什么是sockmap

 

sockmap是BPF程序的一種map類型,顧名思義,這種map類型中存儲的是對struct sock的引用。熟悉網絡的同學知道struct sock是套接字在網絡層的表示,因此利用sockmap我們可以在網絡層上對TCP套接字進行一些自定義處理和操縱。

背景

在現實環境中,絕大多數的網絡請求并不會像如下左圖一樣直接從客戶端發送到服務端,而是由于負載均衡、安全性等原因像如下右圖一樣,客戶端發出的請求要經過代理服務器轉發才能到達服務端。

 

 

 

很明顯,代理轉發行為拉長了網絡傳輸路徑,相對于直連增加了2次內核態和用戶態之間的切換、2次內核態和用戶態之間的數據拷貝、2次網絡協議棧的處理以及1次用戶態處理,因此代理轉發相比直連大大的降低了網絡性能(提高了時延,降低了帶寬)。

sockmap就是在這個背景下產生的,其目的就是提供一種加速本機內部TCP socket之間數據轉發的機制。

機制1 socket數據轉發卸載

簡介

 

如圖2.1,通常用戶態程序(如代理程序)需要通過系統調用sys_read從一個socket中讀取數據到用戶態,這個過程涉及到2次上下文切換(用戶態->內核態->用戶態)和1次內核態到用戶態的數據拷貝;用戶態程序對從socket中讀取的數據進行一系列處理后,再通過系統調用sys_write將處理后的數據寫入到另一個socket中去,這個過程涉及到2次上下文切換(用戶態->內核態->用戶態)和1次用戶態到內核態的數據拷貝。

 

sockmap最初的版本提供了一種在本機TCP socket之間直接進行skb(struct sk_buff,其表示一個包含包頭的數據包,后續均簡稱為skb)轉發的機制。如圖2.2,這種機制允許將原先圖2.1中的用戶態處理部分的邏輯卸載到內核BPF程序中進行處理,處理后的數據包skb直接在內核態中轉發到另一個socket中去進行數據包的發送。整個過程無需的用戶態內核態之間上下文切換,也無需任何用戶態內核態之間的數據拷貝,大大縮短了數據轉發路徑。

關聯的BPF程序

針對本機制,sockmap提供了兩種BPF程序類型:

1. BPF_SK_SKB_STREAM_VERDICT

該類型的BPF程序根據用戶的邏輯對數據進行處理和仲裁,其返回值(有如下三種)決定了源sock中數據的具體轉發行為:

1.1 SK_PASS

該行為表示數據將按圖2.1的方式被用戶態程序接收處理并再發送到目的sock中。

1.2 SK_REDIRECT

該行為表示數據將按圖2.2的方式在內核態中直接被BPF程序處理并發送到目的sock中。

1.3 SK_DROP

該行為表示數據將被直接丟棄。

2. BPF_SK_SKB_STREAM_PARSER

該類型的BPF程序不可單獨使用,必須與BPF_SK_SKB_STREAM_VERDICT程序搭配使用,其用于確定一條完整消息的邊界。通常數據流協議,在協議頭中會指定playload有幾個字節,然后通過底層tcp讀取完協議頭header和完整的payload后,才形成一條完整的消息記錄。當BPF_SK_SKB_STREAM_VERDICT程序不能自行確定一條完整的消息長度時,就需要該BPF程序來確定是否讀取到一條完整消息的尾部。

大多數情況下,BPF_SK_SKB_STREAM_VERDICT程序要么是可以自行確定消息的邊界要么只是從skb中獲取一些元數據例如IP地址。這時,該類型的BPF程序一般就直接返回SKB長度即可,如下。在內核5.10版本之后,這種情形的BPF_SK_SKB_STREAM_PARSER程序可以省略,僅使用BPF_SK_SKB_STREAM_VERDICT即可。

  1. SEC("stream_parser"
  2. int parser(struct __sk_buff *skb) 
  3.     return skb->len; 

實現原理

那么現在我們要實現機制一的效果,即從圖2.1到圖2.2,核心是兩點:

1. 用戶態對數據包的處理(圖2.1)-> 內核態對數據包的處理(圖2.2)

2. 用戶態收發網絡數據包(圖2.1)-> 內核態收發網絡包(圖2.2)

用戶態數據包處理轉換到內核態數據包處理

將用戶態數據包的處理卸載到內核態進行處理的方法很簡單,就是將用戶態的處理邏輯用BPF程序在內核態重寫一遍即可。

用戶態收發包轉換到內核態收發包

回想一下用戶態應用是如何從網絡收發數據的。

通常用戶態應用阻塞在系統調用recv/recvfrom/read上或是通過select/poll/epoll等方式監聽socket,當socket接收緩存有數據到達時,內核會通過回調函數sk_data_ready(sk_data_ready是結構體struct sk的一個函數指針成員)喚醒用戶態應用進程從socket中收包并進行用戶態的處理。

相對應的,通常用戶態調用send/sendto/write等系統調用向socket的發送緩存寫入數據時,內核會通過回調函數sk_write_space(sk_write_space也是結構體struct sk的一個函數指針程序)喚醒內核態進程并把數據從用戶態進程轉交到內核協議棧。

sockmap利用了Linux內核的一個名為Stream Parser的框架,該框架提供了在內核中做基于tcp之上的數據流協議解析的能力,其核心原理就是替換了sk_data_ready和sk_write_space的實現。

 

當tcp收到數據后,通過回調函數sk_data_ready進行事件通知,將收到的數據傳遞到Stream Parser中而不是喚醒用戶態程序進行收包處理,接著Stream Parser把數據包交由前述的BPF程序進行處理。如前面所說,類型為BPF_SK_SKB_STREAM_VERDICT的程序會決定SKB的轉發行為,經BPF程序處理后返回值為SK_REDIRECT的SKB會在內核態直接被轉發到目的sock中發送緩存中,最后調用sk_write_space通知目的sock有數據寫入。

機制2數據發送BYPASS協議棧

簡介

 

通常從用戶態空間中創建的TCP socket中發送數據可以使用send/sendto/sendmsg/write等系統調用,而這些系統調用最終都將由tcp_sendmsg和tcp_sendpage來處理,tcp_sendmsg和tcp_sendpage將用戶空間的數據復制到內核SKB中,并將其按照TCP數據段發送出去。

如圖3.1,對于位于同一臺主機的發送端和接收端來說,發送端用戶程序向發送側socket發送的數據經tcp_sendmsg和tcp_sendpage發送后經過網絡協議棧到達虛擬網卡Loopback后再經過一次網絡協議棧到達接收端的接受側socket,最后接收端的用戶程序從接收側socket中收取數據到用戶態空間。

很明顯,在這個過程中,數據經過了兩次網絡協議棧的處理。

 

因此,sockmap中又提供了一種加速機制,當發送端和接收端的socket都位于同一主機時,在發送數據時可以繞過網絡協議棧,直接將數據發送接收端的socket中,如圖3.2。

注:該機制下在Loopback網卡上將無法抓到網絡報文。

關聯的BPF程序

針對本機制,sockmap提供了一種BPF程序類型:

1. BPF_SK_MSG_VERDICT

該類型的BPF程序根據用戶的邏輯對用戶態發送的數據進行仲裁,其返回值(如下)決定了數據的轉發行為。

1.1 SK_PASS

該行為表示數據將重新有如圖3.1的方式發送到網絡協議棧中經Loopback轉發到接收端socket中。

1.2 SK_REDIRECT

該行為表示數據將按照圖3.2的方式直接發送到接收端socket中,不經過網絡協議棧和Loopback。

1.3 SK_DROP

該行為表示數據將被丟棄。

實現原理

為了實現本機制,sockmap直接替換了tcp_sendmsg和tcp_sendpage的實現為tcp_bpf_sendmsg和tcp_bpf_sendpage,如下。

 

在tcp_bpf_sendmsg和tcp_bpf_sendpage中會將數據的控制權交由前面提到的類型為BPF_SK_MSG_VERDICT的BPF程序仲裁決定該數據是否要經過該機制的加速。對于BPF程序返回值為SK_REDIRECT的數據將被直接放入接收側socket的接收緩存中,無需經過協議棧和Loopback。

總結

 

sockmap針對位于同一主機下socket的TCP數據轉發路徑的不同部分提供了兩種機制。

機制一由于BPF自身的限制(如只支持有限的循環)無法重寫較為復雜的用戶態邏輯,因此在實際應用上較為少見。

機制二目前已經可以在一些應用上看到了,比如社區的Cilium,以及我們團隊在service mesh的一些場景做的網絡優化。但是由于其只是BYPASS內核網絡協議棧,網絡轉發加速效果并沒有機制一那么明顯。

參考資料

https://github.com/torvalds/linux

https://lwn.net/Articles/731133/

https://lwn.net/Articles/768371/

https://www.spinics.net/lists/netdev/msg691409.html

責任編輯:武曉燕 來源: 云巔論劍
相關推薦

2012-01-12 14:37:34

jQuery

2020-12-15 11:37:18

語音通話網絡拓撲音頻

2009-02-24 09:43:00

IP電話原理

2011-11-29 12:17:00

2020-11-26 13:54:03

容器LinuxDocker

2019-11-28 10:45:28

ZooKeeper源碼分布式

2016-08-18 00:04:09

網絡爬蟲抓取系統服務器

2010-08-20 13:29:33

OFDM

2013-04-07 14:09:55

Android應用基本

2020-03-21 14:57:14

手機定位智能手機APP

2016-08-17 23:53:29

網絡爬蟲抓取系統

2009-06-11 09:56:09

MySQL Repli原理

2011-07-07 14:10:21

Cocoa 內省 hash

2020-12-29 16:55:44

ZooKeeper運維數據結構

2010-03-17 13:35:02

2010-03-18 20:13:03

Java socket

2011-07-07 14:46:10

Cocoa Xcode

2013-09-22 14:02:09

內存數據庫

2010-06-18 17:28:37

Linux Anacr

2019-04-30 08:15:31

點贊
收藏

51CTO技術棧公眾號

欧美一级黄色片视频| 国产精品视频入口| 中文字幕乱码av| 一区二区在线视频观看| 同产精品九九九| 日韩一本精品| 亚洲精品国产精| 日韩高清不卡一区二区三区| 久久精品国产亚洲| 亚洲中文字幕一区| 国产在线|日韩| 亚洲女女做受ⅹxx高潮| 久久国产精品 国产精品| 真实的国产乱xxxx在线91| 欧美日韩国产探花| 中日韩美女免费视频网址在线观看| 一级黄色大片儿| 欧美freesex| 一级中文字幕一区二区| 日本一区高清不卡| 人人妻人人玩人人澡人人爽| 麻豆精品视频在线观看视频| 26uuu久久噜噜噜噜| 婷婷久久综合网| 国产欧美高清视频在线| 欧美成人福利视频| 午夜两性免费视频| 自拍一区在线观看| 亚洲一区二区三区视频在线播放| 天堂av一区二区| 亚洲欧洲视频在线观看| 国产成人av影院| 成人免费高清完整版在线观看| 黄瓜视频在线免费观看| 亚洲电影av| 欧美福利在线观看| 国产色无码精品视频国产| 国产剧情在线观看一区| 日韩黄在线观看| 丰满岳乱妇一区二区| 日韩一级淫片| 日韩一区二区三区免费看 | 亚洲午夜精品一区二区| 牛牛澡牛牛爽一区二区| 国产成人丝袜美腿| 91视频免费网站| 国产精品久久欧美久久一区| 日韩—二三区免费观看av| 欧美资源在线观看| 欧美精品二区三区| 99热精品在线| 国产69久久精品成人| 日韩污视频在线观看| 亚洲国产二区| 97精品国产97久久久久久免费| 久久久99精品| 精品96久久久久久中文字幕无| 欧美黄网免费在线观看| 欧美黄色免费在线观看| 天天综合一区| 久久成人精品电影| 欧美成人黄色网| 亚洲视频碰碰| 91高潮在线观看| 波多野结衣高清视频| 日精品一区二区三区| 国产精品久久久久久久久久三级 | 国产又黄又粗又猛又爽的| 欧美xxav| 欧美猛少妇色xxxxx| 国产性70yerg老太| 中文欧美日韩| 国产精品高清在线观看| 中文字字幕在线中文乱码| 精久久久久久久久久久| 97中文在线观看| 天天操天天干天天爱| 久久一日本道色综合| 日韩av电影免费播放| 麻豆av在线导航| 亚洲成人中文在线| 久草精品在线播放| 亚洲爽爆av| 亚洲电影天堂av| www色com| 欧美三级免费| 国产精品va在线| 99热这里只有精品在线| 91丝袜国产在线播放| 亚洲午夜精品一区二区三区| 日日夜夜天天综合入口| 欧美性猛xxx| 久久久久久久高清| 日本成人7777| www.欧美三级电影.com| 日韩经典在线观看| 蜜臀va亚洲va欧美va天堂| av一区二区三区在线观看| 日韩一二三四| 一区二区三区中文在线观看| 鲁一鲁一鲁一鲁一色| 日韩专区视频网站| 亚洲精品久久久久| 三级全黄做爰视频| 丝袜亚洲另类欧美综合| 成人免费91在线看| 1024视频在线| 欧美日韩性生活视频| 久久精品亚洲天堂| 国产一区二区三区91| 欧美成人精品xxx| 日韩三级一区二区| 成人av第一页| 国产精品8888| 99久久伊人| 精品无码久久久久久国产| 青娱乐在线视频免费观看| 看片网站欧美日韩| 欧美日韩国产三区| av午夜在线观看| 欧美一区二区三区四区五区| 国产三级短视频| 香蕉精品999视频一区二区| 成人av影视在线| 看黄网站在线| 精品视频在线免费看| 无码人妻精品一区二区三应用大全 | 精品国精品国产| 国产探花在线免费观看| 蜜桃传媒麻豆第一区在线观看| 精品国产免费人成电影在线观...| 岛国中文字幕在线| 欧美日韩免费不卡视频一区二区三区| aa片在线观看视频在线播放| 影音先锋久久资源网| 99理论电影网| 黄色在线免费看| 777久久久精品| 99热6这里只有精品| 热久久国产精品| 欧美在线视频二区| 免费亚洲电影| 亚洲色图偷窥自拍| 男人天堂av在线播放| 久久久精品国产99久久精品芒果 | 欧美13videosex性极品| 精品国产乱码久久久久久免费| 潘金莲一级黄色片| 久久丁香综合五月国产三级网站| 婷婷精品国产一区二区三区日韩| 中文日产幕无线码一区二区| 日韩精品欧美国产精品忘忧草| 日韩精品国产一区二区| av资源站一区| 看av免费毛片手机播放| 亚洲色图美女| 国产精品久久久久久av下载红粉 | 性猛交ⅹ×××乱大交| 国产精品精品国产一区二区| 成人疯狂猛交xxx| 中文字幕在线观看播放| 亚洲精品一区二区精华| 日韩手机在线观看| 久久久一区二区三区捆绑**| www.欧美日本| 国产精品久久观看| 成人动漫在线观看视频| 99爱在线观看| 亚洲日本中文字幕免费在线不卡| 五月天中文字幕| 最新热久久免费视频| 丰满人妻一区二区三区53视频| 激情av一区| 欧美在线一二三区| 亚洲在线资源| 97久久精品人搡人人玩| 国产一级片在线播放| 欧美顶级少妇做爰| 天堂资源在线播放| 国产亚洲福利社区一区| 午夜精品久久久久久久99热影院| 午夜久久黄色| 欧美一级二级三级| 国产亚洲久久| 欧美一级电影在线| 黄网站免费在线播放| 亚洲国产三级网| 中日韩在线观看视频| 一区二区欧美国产| a级大片在线观看| 国产美女精品在线| 97视频在线免费播放| 久久久国产精品| 久久青青草原| 日本精品一区二区三区在线观看视频| 国产91精品青草社区| 免费成人黄色| 亚洲欧洲高清在线| 午夜久久久久久噜噜噜噜| 色视频一区二区| 免费看一级一片| 国产精品视频一二三| 9.1在线观看免费| 琪琪一区二区三区| 亚洲自偷自拍熟女另类| 欧美一区不卡| 色一情一乱一伦一区二区三区丨| 在线播放一区二区精品视频| 国产精品日韩在线播放| av资源中文在线| 久久这里只有精品99| 国产黄在线播放| 亚洲国产成人精品久久久国产成人一区| 中文字幕码精品视频网站| 香蕉成人伊视频在线观看| 99自拍视频在线| 国产亲近乱来精品视频 | 亚洲素人在线| 成人午夜电影在线播放| 日韩欧国产精品一区综合无码| 欧美亚洲日本黄色| 大桥未久在线播放| 麻豆国产精品va在线观看不卡| 国产在线观看免费网站| 日韩精品久久久久| 丰满人妻熟女aⅴ一区| 制服丝袜亚洲精品中文字幕| 免费在线不卡av| 色94色欧美sute亚洲线路二| 国产视频91在线| 亚洲综合一二区| 久久精品这里只有精品| 亚洲欧美一区二区久久| 国产成人免费在线观看视频| 国产精品天美传媒| 亚洲精品成人av久久| 久久久三级国产网站| 波多野结衣先锋影音| 成人v精品蜜桃久久一区| 亚洲在线观看网站| 国产精品一级片| 久久精品无码一区二区三区毛片 | 亚洲影视九九影院在线观看| 巨大黑人极品videos精品| 国产精品扒开腿做爽爽爽的视频| 在线观看爽视频| 日本在线精品视频| 欧美片第一页| 国产精品mp4| 亚洲成人av观看| 国产精品亚洲视频在线观看| 成人自拍视频网| 成人在线观看视频网站| 欧洲大片精品免费永久看nba| 亚洲999一在线观看www| 精品一区二区三区亚洲| 国产高清在线一区二区| 老牛国内精品亚洲成av人片| 精品蜜桃传媒| 国产一区二区精品久| 亚洲国产精品一区在线观看不卡| 全球成人免费直播| 亚洲春色在线视频| 91精品一区二区三区综合| 日韩中文字幕在线不卡| 亚洲第一区色| 黑森林福利视频导航| 强制捆绑调教一区二区| 韩国三级与黑人| av一区二区三区黑人| 黄色aaa视频| 国产精品福利影院| 欧美成人aaa片一区国产精品| 午夜日韩在线观看| 成人免费视频国产免费| 91精品国产综合久久久久久漫画| www.综合色| 亚洲精品视频免费| 日本中文字幕在线视频| 欧美激情免费视频| 老司机2019福利精品视频导航| 国产精品日韩电影| 丁香一区二区| 日韩精品久久一区| 欧美精品99| 国产一级不卡毛片| 国产一区二区精品在线观看| 一区二区视频观看| 国产精品国产馆在线真实露脸 | 亚洲激情午夜| 午夜激情福利在线| 国产成人免费视频一区| 永久免费成人代码| 一区二区三区高清在线| 国产一区免费看| 精品精品欲导航| 日本高清视频在线观看| 97精品视频在线| 99精品视频在线免费播放| 狼狼综合久久久久综合网| 国产高清一区二区| 久久综合久久色| 成人免费av资源| 自拍偷拍第9页| 色综合一个色综合| 亚洲精品国产suv一区| 日韩在线观看成人| 免费成人动漫| 精品国产91亚洲一区二区三区www| 久久国产综合| 男人的天堂99| 不卡一区二区在线| 亚洲不卡在线播放| 欧美视频在线观看一区| 天堂视频中文在线| 久久乐国产精品| 精品999日本久久久影院| 日本视频一区在线观看| 亚洲激情偷拍| 国产a级黄色片| 一区二区三区中文字幕电影| 国产永久免费视频| 这里只有精品在线播放| 欧美日韩免费看片| 精品毛片久久久久久| 亚洲电影成人| 风韵丰满熟妇啪啪区老熟熟女| 中文字幕一区av| 亚洲av无码乱码国产精品fc2| 亚洲摸下面视频| 日本黄色免费在线| 裸模一区二区三区免费| 99精品国产一区二区青青牛奶| 麻豆精品国产传媒| 玉米视频成人免费看| 99热这里只有精品在线观看| 日韩在线不卡视频| 韩国三级大全久久网站| 亚洲欧美日韩不卡一区二区三区| 日韩二区三区在线观看| 精品无码人妻一区二区免费蜜桃 | 五月天婷婷亚洲| 国产精品久久久久影院老司 | 日韩欧美一区二区视频| 菠萝菠萝蜜在线观看| 2014亚洲精品| 欧美私人啪啪vps| 日本精品一二三区| 亚洲国产精品久久人人爱蜜臀| 亚洲男人天堂久久| 91精品国产乱码久久久久久蜜臀 | 中文字幕在线2018| 色老头一区二区三区| 亚洲网站免费| 国产精品无码乱伦| 国产福利91精品一区| 亚洲国产精一区二区三区性色| 亚洲精品国产精品久久清纯直播 | 狠狠爱一区二区三区| 国产欧美一区二区三区国产幕精品| 在线天堂www在线国语对白| 激情久久av一区av二区av三区| 色中色在线视频| 国产精品成人免费电影| 99久久婷婷| 好吊操视频这里只有精品| 婷婷综合五月天| 黄色网址在线播放| 91精品久久久久久久久久久久久| 最新国产精品| 9.1成人看片免费版| 欧美日韩国产bt| 日本aa在线| 欧美成人综合一区| 久久精品国产成人一区二区三区 | www.狠狠爱| 欧美另类变人与禽xxxxx| 视频在线观看入口黄最新永久免费国产| 粉嫩高清一区二区三区精品视频| 国产欧美丝祙| 三上悠亚作品在线观看| 日韩av综合网站| 欧美美女福利视频| 2022中文字幕| 久久婷婷成人综合色| 国产精品亚洲欧美在线播放| 高清在线视频日韩欧美| 成人羞羞网站入口免费| 女人扒开腿免费视频app| 日本高清不卡视频| 污污影院在线观看| 日韩欧美视频一区二区| 国产xxx精品视频大全| 国产午夜麻豆影院在线观看| 久久精品色欧美aⅴ一区二区| 久久精品亚洲成在人线av网址| 青青草久久伊人| 欧美特级www| 日本三级在线观看网站| 亚洲成人精品电影在线观看|