當前位置:首頁 » 操作系統 » linux網路棧

linux網路棧

發布時間: 2022-05-11 21:39:25

linux內核網路棧源代碼在哪個文件夾

drivers/net 下

⑵ linux 網路路徑中網路協議棧有幾種

1.總述
Linux中用戶空間的網路編程,是以socket為介面,一般創建一個sockfd = socket(family,type,protocol),之後以該sockfd為參數,進行各種系統調用來實現網路通信功能。其中family指明使用哪種協議域(如INET、UNIX等),protocol指明該協議域中具體哪種協議(如INET中的TCP、UDP等),type表明該介面的類型(如STREAM、DGRAM等),一般設protocol=0,那麼就會用該family中該type類型的默認協議(如INET中的STREAM默認就是TCP協議)。
Linux中利用mole機制,層次分明地實現了這套協議體系,並具有很好的擴展性,其基本模塊構成如下:
先看右邊,頂層的socket模塊提供一個sock_register()函數,供各個協議域模塊使用,在全局的net_family[]數組中增加一項;各個協議域模塊也提供一個類似的register_xx_proto()函數,供各個具體的協議使用,在該協議域私有的xx_proto[]數組中增加一項。這兩個數組中的存放的都是指針,指向的數據結構如下圖所示:

很明顯它們是用來創建不同類型的socket介面的,且是一種分層次的創建過程,可想而知,頂層socket_create()完成一些共有的操作,如分配內存等,然後調用下一層create;協議域內的create()完成一些該協議域內共有的初始化工作;最後具體協議中的create()完成協議特有的初始化。具體的下一節講。
再來看上圖右邊的,也是頂層socket模塊提供的4個函數,前兩個一般由具體協議模塊調用,由於協議棧與應用層的交互,具體的後面會講到。後兩個一般有協議域模塊調用,用於底層設備與協議棧間的交互。但這也不絕對,如在PPPOE協議中,這4個函數都由具體協議模塊調用,這是因為PPPOX協議域內的共有部分不多,各個協議間幾乎獨立。這4個函數的功能及所用到的數據結構,在後面具體用到時會詳細說明。
2.socket插口創建
首先來看一下最終創建好的socket插口由哪些部分組成,該結構是相當龐大的,這里只給出框架:

基本屬性有state(listen、accept等),flags標志(blocked等),type類型,這里family和protocol都沒有了,因為它們再創建時使用過了,已經被融入到socket結構中。
File指針指向一個file結構,在Linux中一個socket也被抽象為一個文件,所以在應用層一般通過標準的文件操作來操作它。
Ops指向一個struct proto_ops結構,它是每種協議特有的,應用層的系統調用,最終映射到網路棧中具體協議的操作方法。
Sk指向一個struct sock結構,而該結構在分配空間時,多分配了一點以作為該協議的私有部分,這里包含了該協議的具體信息,內容相當多。首先是一個struct sock_common結構,包含了協議的基本信息;然後是一個sk_prot_create指針,指向一個struct proto結構體,該結構體就是第一節中所述的,用proto_regsiter()注冊到內核中的,它包含應用層到協議棧的交互操作和信息(也可以說成是Appà transport layer的交互信息);然後還有一個sk_backlog_rcv函數指針,所指函數在協議棧處理完接收到的包之後調用,一般僅是把數據包放到該socket的接收隊列中,等待APP讀取;最後協議的私有部分里存放該協議的私有信息,如pppoe的sessionID、daddr,tcp的連接4元組等,這些信息很重要,利用它們來區分同一個協議中的多個socket。

附上出處鏈接:http://blog.csdn.net/vfatfish/article/details/9296885

⑶ 為什麼 Linux 不將網路協議棧在用戶態實現

Linux其實有用戶態的協議棧.像Intel的dpdk和另外一個開源項目netmap,都可以把本來在內核態實現的協議棧,放到用戶態來實現.
不過他們的主要用途不是實現一個用戶態的協議棧,主要用來做包處理.

⑷ linux內核配置哪些是必須的

內核配置注意事項

如果打算自己編譯內核的話(內核源代碼可以到ftp://ftp.kernel.org/pub/kernel/ 下載,國內下載可以到ftp://ftp.cn.kernel.org/pub/kernel/ 這樣下載速度更快),在編譯之前一般都要先用make menuconfig或make xconfig配置內核。我的系統中沒有xconfig,所以只能用menuconfig。在我的Compaq Presario V3414TX laptop上編譯2.6.23.x內核時,以下選項是必須要注意的:

1、Networking -->

Wireless LAN -->

[M]Generic IEEE 802.11 Networking Stack (mac80211)

這是Linux當前使用的網路棧模塊。如果想要使用無線網卡(我的是Intel PRO/3945 ABG),就要將此選項編為模塊(或者編入內核也可以,那樣啟動時就會自動載入mac80211模塊)。否則到時候就要自己去intellinuxwireless.org下載該模塊進行安裝。

2、Device Drivers -->

Network Drivers -->

Wireless LAN-->

[M]Intel PRO/Wireless 3945ABG Network Connection

Intel PRO/Wireless 3945ABG Network Connection這一項可以換成你的任何無線網卡。同樣,如果你想使用無線網卡的話,這一項也是要編為模塊的。但是我最後編譯的2.6.23.14內核中沒有這一項,因此就必須到intellinuxwireless.org下載3495ABG的驅動了。

3、File System -->

DOS/FAT/NT Filesystems -->

<*> VFAT (Windows-95) fs support

(437) Default codepage for FAT (NEW)

(utf8) Default iocharset for FAT (NEW)

將 VFAT (Windows-95) fs support 選為y是為了讓內核能支持FAT格式硬碟的掛載。這里codepage要用437;在網上很多文章都說要用936,這樣才能讓FAT硬碟的文件名顯示支持中文,但事實上我這么做之後,在掛載FAT分區時卻被新內核提示無法掛載,系統日誌顯示找不到codepage 936——可是我已經將codepage 936編進內核了啊(下文會說明),因此在這一點上我相當困惑。後來發現FAT分區的中文文件名能否正確顯示是取決於 Default iocharset for FAT 這一項,其字元編碼要使用utf8才行。原因上,也許是因為Windows的FAT分區默認的字元編碼是ascii或gb2312,而Linux默認的是utf8編碼,認不得gb2312……這個地方我也不太明白。

4、File System -->

Native Language Support -->

[M]Simplified Chinese charset (CP936, GB2312)

想要中文支持的話,當然要選上這一項(事實上Native Language Support 這一欄我就沒動,默認是全部選上的,其中ASCII一項默認被編進內核)。

5、Kernel hacking -->

[ ]Use 4Kb for kernel stacks instead of 8Kb

如果想要使用ndiswrapper作為無線網卡驅動的話,這一項就要選為n。因為據說Windows和Linux的棧結構是不一樣的。

⑸ 請問linux內核的netfilter與內核的網路協議棧(我們網路編程經常用到的sock_packet)有什麼區別何聯系

看看相關書籍,查一下用戶手冊就行了。

⑹ Linux網路協議棧中怎樣傳輸數據包,想先通過例子學習,剛看了sk_buf結構體,怎樣復制一個s

內核有專門的sk_buff考唄函數:
struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)

示例:
skb_clone(skb, GFP_ATOMIC);

⑺ linux內核網路棧源代碼情景分析 怎麼樣

如果你有一定的c語言基礎並且對linux的文件系統比較了解的話,可以直接看linux的內核源碼分析

⑻ 如何學習linux 網路協議棧 書網路通信

應用編程一般不涉及網路協議棧,我指的的是tcp/udp應用開發

你要學習網路協議棧,推薦libpcap這個庫(c庫,但是也有其他語言的封裝),通過這個庫你可以把一整個乙太網幀都抓下來,對於學習網路協議棧是很有用的
如果你不是一個開發者,只是想學習一下網路協議棧,可以使用tcpmp/Wireshark 這樣的抓包進行抓包分析 Wireshark 提供了很有好的界面,讓你在看網路包的時候不會很累
或者你可以看看 TCP/IP 協議那幾卷,什麼卷一卷二的,不過那幾本書太厚了,我沒看完過,除非你是專業的協議棧開發人員,不推薦看,太累了

⑼ 嵌入式Linux內核和網路協議棧的特點,和代表性產品有哪些

首先,嵌入Linux內核是可定製的內核:
1 Linux內核的配置系統
2 Linux內核的模塊機制
3 Linux內核的源代碼開放
4 經裁減的 Linux內核最小可達到 150KB以下,尤其適合嵌入式領域中資源受限的實際情況。
其次,它的性能優越:Linux 系統內核精簡、高效和穩定,能夠充分發揮硬體的功能,因此它比其他操作系統的運行效率更高。
再者,它有良好的網路支持:
1 支持 TCP/IP 協議棧
2 提供對包括十兆位、百兆位及千兆位的乙太網,還有無線網路、Tokenring(令牌環)和光纖甚至衛星的支持
3 對現在依賴於網路的嵌入式設備來說是很好的選擇。

至於網路協議的話,有很多種,就目前主流的3種網路協議是:NetBEUI、IPX/SPX及其兼容協議、TCP/IP,而其他的像Lwip、ZigBee、Sip等很多。
1 NetBEUI的前身是NetBIOS,這一協議是IBM1983年開發完成的,早期的微軟OS產品中都選擇該協議作為通信協議。它是一套用於實現僅僅在小型區域網上PC見相互通信的標准。該網路最大用戶數不能超過30個,1985年,微軟對其改進,增加了SMB(Server Message Blocks,伺服器消息塊)的組成部分,以降低網路的通信阻塞,形成了現在的NetBEUI通信協議。
特點:體積小、效率高、速度快、佔用內存少。
2 IPX/SPX及其兼容協議:它的全稱是「Internwork Packet Exchange/Sequence Packet Exchange」即網際包交換/順序包交換。
特點:體積較大、能夠連接多種網路、具有強大的路由功能,適合大型網路的使用。windows網路中無法直接使用該協議。
3 TCP/IP是國際互聯網Internet採用的協議標准,早期用於ARPANet網路,後來開放用於民間。
特點:靈活性,支持任意規模的網路,可以連接所有的計算機,具有路由功能,且TCP/IP的地址是分級的,容易確定並找到網上的用戶,提高了網路代換的利用率。

而其他的像Lwip協議棧的特點:
(1)支持多網路介面的IP轉發
(2)支持ICMP協議
(3)包括實驗性擴展的UDP
(4)包括阻塞控制,RTT估算和快速恢復和快速轉發的TCP
(5)提供專門的內部回調介面用於提高應用程序性能
(6)可選擇的Berkeley介面API
(7)在最新的版本中支持ppp

不知道這些是不是你想要的。

熱點內容
android音源 發布:2024-10-09 14:55:19 瀏覽:118
預編譯sql怎麼模糊查詢 發布:2024-10-09 14:31:24 瀏覽:217
我的世界伺服器被占違法嗎 發布:2024-10-09 14:27:50 瀏覽:390
資源配置如何發生作用 發布:2024-10-09 14:27:48 瀏覽:685
next數組演算法 發布:2024-10-09 14:25:38 瀏覽:138
存儲錄制視頻失敗 發布:2024-10-09 14:24:12 瀏覽:87
演算法結合硬體 發布:2024-10-09 14:11:37 瀏覽:997
安卓驅動編譯進內核 發布:2024-10-09 13:59:30 瀏覽:604
ubuntunginx編譯 發布:2024-10-09 13:27:36 瀏覽:725
怎麼查伺服器ip段 發布:2024-10-09 13:08:04 瀏覽:152