欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

sk_buff整理筆記(兩、操作函數(shù))

系統(tǒng) 1999 0

? ? ? ? 承接上一: sk_buff 整理筆記(一、數(shù)據(jù)結(jié)構(gòu)) 這一篇要講的是內(nèi)核為sk_buff結(jié)構(gòu)提供的一些操作函數(shù)。

? ? ? ? 第一、首先要講的是sk_buff中的四大指針:

? ? ? ? 四大指針各自是:head、data、tail、end;這四個(gè)指針都是指向了數(shù)據(jù)區(qū)的。數(shù)據(jù)區(qū)中存放的是協(xié)議頭和數(shù)據(jù)。head和end指針是每一個(gè)數(shù)據(jù)包一樣的,也是有這兩個(gè)指針來確定數(shù)據(jù)區(qū)的大小的。最開始的時(shí)候head、data、tail三個(gè)指針都是指向一起的,當(dāng)有協(xié)議數(shù)據(jù)加進(jìn)來時(shí)才更改。

? ? ? ? 再來說下包的形成。首先是應(yīng)用層的數(shù)據(jù)。然后到四層加上四層的TCP協(xié)議頭(如果為TCP包),然后發(fā)往三層。在三層時(shí)把四層發(fā)來的數(shù)據(jù)都當(dāng)作是負(fù)載,然后再往負(fù)載前加上一個(gè)三層IP協(xié)議頭。發(fā)往二層。最后二層加上個(gè)幀頭就能夠發(fā)送了。所以在包形成時(shí),這幾個(gè)指針起到了很關(guān)鍵的作用。以下來看下四個(gè)指針的指向地址大小,這也有利于對以下要講到一些操作函數(shù)的理解。

? ? ? ?? sk_buff整理筆記(兩、操作函數(shù))

? ? ? ? 最后一句的意思是:當(dāng)數(shù)據(jù)包在二層(即data指針指向二層協(xié)議頭)時(shí)。獲取到三層協(xié)議頭指針的一種方法。當(dāng)然也能夠直接用自帶的獲取三層協(xié)議頭指針的函數(shù)(事實(shí)上函數(shù)里面也是用上面這句代碼實(shí)現(xiàn)的),這里僅僅是為了顯示data添加時(shí),是往下移動的。

方便后面的幾個(gè)函數(shù)理解。

? ? ? ? 第二、幾個(gè)操作sk_buff指針的函數(shù):

? ? ? ? 首先來說下三個(gè)空間。方便以下介紹函數(shù)時(shí)理解。第一個(gè)是:headroom,就是skb->head和skb->data之間的空間。第二個(gè)是:data。就是skb->data和skb->tail之間的空間。第三個(gè)是:tailroom,就是skb->tail和skb->end之間的空間。例如以下圖:

? ? ? ? ? sk_buff整理筆記(兩、操作函數(shù))

? ? ? ? 接下來說下四個(gè)操作sk_buff結(jié)構(gòu)中指針的函數(shù):(a) skb_put(), (b)skb_push(), (c)skb_pull(), and (d)skb_reserve();這四個(gè)函數(shù)在數(shù)據(jù)包在各層之間傳輸時(shí)。起到了至關(guān)

重要。

? ? ? ?? sk_buff整理筆記(兩、操作函數(shù))

? ? ? ? (a)skb_put():向后擴(kuò)大數(shù)據(jù)區(qū)空間。headroom空間不變,tailroom空間降低,skb->data指針不變,skb->tail指針下移;

? ? ? ? (b)skb_push():向前擴(kuò)大數(shù)據(jù)區(qū)空間。headroom空間降低,tailroom空間不變。skb->tail指針不變,skb->data指針上移;
? ? ? ? (c)skb_pull():縮小數(shù)據(jù)區(qū)空間,headroom空間增大。tailroom空間不變,skb->data指針下移,skb->tail指針不變;

? ? ? ? (d)skb_reserve():數(shù)據(jù)區(qū)不變,headroom空間增大,tailroom空間降低,skb->data和skb->tail同一時(shí)候下移;

? ? ? ? 大家也能夠照著源代碼來分析,還有個(gè)當(dāng)大家看源代碼時(shí)。會發(fā)現(xiàn)好多函數(shù)都有個(gè)同名的,比方:skb_push()函數(shù),就有兩個(gè):static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len);和unsigned char *skb_push(struct sk_buff *skb, unsigned int len);第一個(gè)函數(shù)是詳細(xì)內(nèi)容的實(shí)現(xiàn)(關(guān)鍵函數(shù)),第二個(gè)函數(shù)僅僅是在第一個(gè)函數(shù)的基礎(chǔ)上進(jìn)行一些合法性檢查。

? ? ? ? 第三、其它簡單的操作函數(shù):

? ? ? ? 獲取/設(shè)置協(xié)議頭指針等一系列函數(shù)。如:獲取IP頭指針,unsigned char *skb_network_header(const struct sk_buff *skb);還有其它些函數(shù)(skb內(nèi)存申請、skb克隆和復(fù)制、skb隊(duì)列操作)將到后面做具體分析。

? ? ? ? 敬請觀看下一篇 sk_buff整理筆記(三、內(nèi)存分配和釋放)


sk_buff整理筆記(兩、操作函數(shù))


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久综合综合久久 | 色男天堂| 欧美日韩一区二区在线 | 激情综合激情五月 | 欧美国产高清 | 日韩色在线 | 国产在线午夜 | 日本黄色大片免费 | 久久综合九九 | 国产 麻豆 | 一级免费视频 | 欧美一级艳片视频免费观看 | 亚洲电影一区二区 | 午夜宫电影 | 狠狠色欧美亚洲狠狠色五 | 国产精品毛片一区二区三区 | 久久综合九色综合国产 | 午夜影院在线播放 | 色片免费网站 | 91短视频免费版 | 91.com在线观看 | 一级片视频免费观看 | 国产欧美日韩亚洲精品区2345 | 久久免费精品视频在线观看 | 偷偷狠狠的日日2020 | 婷婷在线网站 | www午夜视频 | 精品视频久久 | 久久久久国产精品 | 亚洲区在线 | 玖草在线播放 | 精品国产自在2o18 | 国产日韩欧美视频在线观看 | 久久亚洲美女久久久久 | 亚洲成人精品 | 污视频免费观看网站 | 亚洲最色| 加勒比精品久久一区二区三区 | 欧美伊人久久综合网 | 国产精品久久福利新婚之夜 | 精品麻豆cm视频在线看 |