中定義,并包含很多成員變量供網(wǎng)絡(luò)代碼中的各子系統(tǒng)使用。這個(gè)結(jié)構(gòu)在linux內(nèi)核的發(fā)展過(guò)程屮改">
linux tcpip協(xié)議棧分析.doc

linux tcpip協(xié)議棧分析.doc

ID:49199888

大小:531.50 KB

頁(yè)數(shù):22頁(yè)

時(shí)間:2020-03-01

linux tcpip協(xié)議棧分析.doc_第1頁(yè)
linux tcpip協(xié)議棧分析.doc_第2頁(yè)
linux tcpip協(xié)議棧分析.doc_第3頁(yè)
linux tcpip協(xié)議棧分析.doc_第4頁(yè)
linux tcpip協(xié)議棧分析.doc_第5頁(yè)
資源描述:

《linux tcpip協(xié)議棧分析.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、sk_buff結(jié)構(gòu)可能是linux網(wǎng)絡(luò)代碼中最逍要的數(shù)據(jù)結(jié)構(gòu),它表示接收或發(fā)送數(shù)據(jù)包的包頭信息。它在中定義,并包含很多成員變量供網(wǎng)絡(luò)代碼中的各子系統(tǒng)使用。這個(gè)結(jié)構(gòu)在linux內(nèi)核的發(fā)展過(guò)程屮改動(dòng)過(guò)很多次,或者是增加新的選項(xiàng),或者是乖新組織已存在的成員變最以使得成員變最的布局更加清晰。它的成員變量可以大致分為以下幾類:?Layout布局?General通用?Feature-specific功能相關(guān)?Managementfunctions管理函數(shù)這個(gè)結(jié)構(gòu)被不同的網(wǎng)絡(luò)層(MAC或者其他二層鏈路協(xié)議,三層的IP,四層的TCP或

2、UDP等)使用,并且其中的成員變最在結(jié)構(gòu)從一層向另一層傳遞時(shí)改變。L4向L3傳遞前會(huì)添加一個(gè)L4的頭部,同樣,L3向L2傳遞前,會(huì)添加一個(gè)L3的頭部。添加頭部比在不同層之間拷貝數(shù)據(jù)的效率更高。山于在緩沖區(qū)的頭部添加數(shù)據(jù)意味著要修改指向緩沖區(qū)的指針,這是個(gè)復(fù)雜的操作,所以內(nèi)核提供了一個(gè)函數(shù)skb.reserve(在后面的章節(jié)中描述)來(lái)完成這個(gè)功能。協(xié)議棧中的毎一層在往下一層傳遞緩沖區(qū)前,第一件申就是調(diào)用skb_reserve在緩沖區(qū)的頭部給協(xié)議頭預(yù)留一定的空間。skb_reserve同樣被設(shè)備驅(qū)動(dòng)使用來(lái)對(duì)齊接收到包的包頭。如果緩沖區(qū)向上層協(xié)議傳遞,I口的協(xié)議層的頭部信

3、息就沒什么用了。例如,L2的頭部只有在網(wǎng)絡(luò)驅(qū)動(dòng)處理L2的協(xié)議時(shí)有用,L3是不會(huì)關(guān)心它的信息的。但是,內(nèi)核并沒有把L2的頭部從緩沖區(qū)中刪除,而是把有效荷載的指針指向L3的頭部,這樣做,可以節(jié)省CPU時(shí)間。1.網(wǎng)絡(luò)參數(shù)和內(nèi)核數(shù)據(jù)結(jié)構(gòu)就像你在瀏覽TCP/1P規(guī)范或者配置內(nèi)核時(shí)所看到的一樣,網(wǎng)絡(luò)代碼提供了很多有用的功能,但是這些功能并不是必須的,比如說(shuō),防火墻,多播,還有其他一些功能。大部分的功能都需要在內(nèi)核數(shù)據(jù)結(jié)構(gòu)中添加自己的成員變量。因此,sk.buff里面包含了很多像#ifdef這樣的預(yù)編譯指令。例如,在sk_buff結(jié)構(gòu)的最后,你可以找到:structskbuff{

4、ttifdefCONFIGNETSCHEDu32tcindex;#ifdefC07FIG_NET_CLS_ACTu32tcverd;u32tc_classid;ttendifttendif}sk_buff結(jié)構(gòu)可能是linux網(wǎng)絡(luò)代碼中最逍要的數(shù)據(jù)結(jié)構(gòu),它表示接收或發(fā)送數(shù)據(jù)包的包頭信息。它在中定義,并包含很多成員變量供網(wǎng)絡(luò)代碼中的各子系統(tǒng)使用。這個(gè)結(jié)構(gòu)在linux內(nèi)核的發(fā)展過(guò)程屮改動(dòng)過(guò)很多次,或者是增加新的選項(xiàng),或者是乖新組織已存在的成員變最以使得成員變最的布局更加清晰。它的成員變量可以大致分為以下幾類:?Layout布

5、局?General通用?Feature-specific功能相關(guān)?Managementfunctions管理函數(shù)這個(gè)結(jié)構(gòu)被不同的網(wǎng)絡(luò)層(MAC或者其他二層鏈路協(xié)議,三層的IP,四層的TCP或UDP等)使用,并且其中的成員變最在結(jié)構(gòu)從一層向另一層傳遞時(shí)改變。L4向L3傳遞前會(huì)添加一個(gè)L4的頭部,同樣,L3向L2傳遞前,會(huì)添加一個(gè)L3的頭部。添加頭部比在不同層之間拷貝數(shù)據(jù)的效率更高。山于在緩沖區(qū)的頭部添加數(shù)據(jù)意味著要修改指向緩沖區(qū)的指針,這是個(gè)復(fù)雜的操作,所以內(nèi)核提供了一個(gè)函數(shù)skb.reserve(在后面的章節(jié)中描述)來(lái)完成這個(gè)功能。協(xié)議棧中的毎一層在往下一層傳遞緩沖

6、區(qū)前,第一件申就是調(diào)用skb_reserve在緩沖區(qū)的頭部給協(xié)議頭預(yù)留一定的空間。skb_reserve同樣被設(shè)備驅(qū)動(dòng)使用來(lái)對(duì)齊接收到包的包頭。如果緩沖區(qū)向上層協(xié)議傳遞,I口的協(xié)議層的頭部信息就沒什么用了。例如,L2的頭部只有在網(wǎng)絡(luò)驅(qū)動(dòng)處理L2的協(xié)議時(shí)有用,L3是不會(huì)關(guān)心它的信息的。但是,內(nèi)核并沒有把L2的頭部從緩沖區(qū)中刪除,而是把有效荷載的指針指向L3的頭部,這樣做,可以節(jié)省CPU時(shí)間。1.網(wǎng)絡(luò)參數(shù)和內(nèi)核數(shù)據(jù)結(jié)構(gòu)就像你在瀏覽TCP/1P規(guī)范或者配置內(nèi)核時(shí)所看到的一樣,網(wǎng)絡(luò)代碼提供了很多有用的功能,但是這些功能并不是必須的,比如說(shuō),防火墻,多播,還有其他一些功能。大

7、部分的功能都需要在內(nèi)核數(shù)據(jù)結(jié)構(gòu)中添加自己的成員變量。因此,sk.buff里面包含了很多像#ifdef這樣的預(yù)編譯指令。例如,在sk_buff結(jié)構(gòu)的最后,你可以找到:structskbuff{ttifdefCONFIGNETSCHEDu32tcindex;#ifdefC07FIG_NET_CLS_ACTu32tcverd;u32tc_classid;ttendifttendif}它表明.tcjndex只有在編譯時(shí)定義了CONFIG_NET_SCHED符號(hào)才有效。這個(gè)符號(hào)可以通過(guò)選擇特定的編譯選項(xiàng)來(lái)定義(例如:"DeviceDriversNetworkingsupp

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。