linux協議棧分析
⑴ 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網路協議棧進行優化,應該從哪些方面著手
shell主要是你在終端輸入命令後與kernel(內核)進行溝通和交互,從而告訴掌管硬體的kernel干什麼,說白了就是解釋器,把你的命令解釋給kernel聽
⑶ Linux TCP/IP協議棧數據包處理流程及代碼實現分析
好吧,我來回答吧,首先是網卡驅動程序捕獲到數據包,做檢驗無誤後,和DMA以及CPU交互,然後由DMA和驅動程序創建BD表,然後分配skbuf(LINUX下)數據結構保存獲得的數據幀,內核通過協議棧處理這個skbuf,通常是層層剝離每個層的首部,然後傳到上一層,細節就是一個變數做偏移量,每次做一個首部偏移讀取首部數據,識別本層協議類型以及下一層協議類型,具體過程就是這個網路原理的過程,請參考《TCP/IP詳解卷一》《linux設備驅動程序》《understanding linux network internals》《Unix網路編程卷一》等。
⑷ 求介紹linux內核中802.11 MAC協議棧的詳細資料
有滴,看這本書《802.11權威指南》,網上容易下載
⑸ 深入淺出linux tcp /ip協議棧這書怎麼樣
爛。大部分「深入淺出」的書,多是作者對自己掌握的知識沒有信心的表現。同時也迎合了讀者,投機取巧、想走捷徑的心理。想學tcp/ip,直接看計算機網路的教材就可以了。
⑹ linux socket在協議棧中是怎樣的
增加對Linux socket連接 最近的一個項目的最大連接數是模擬多個套接字的客戶端和伺服器之間的通信。 Linux系統由於Linux的限制,/在include / linux / posix_types.h文件中有如下的宏定義: #UNDEF __FD_SETSIZE 的#define __FD_SETSIZE 1024 這個宏是當你需要超過1024個FD,如select()函數將監聽錯誤定義的最大文件描述符1024。所以,你需要改變1024所需要的數量,但不超過65,535。但這是不夠的僅僅。 第二步你需要的文件的進程打開的最大數量。具體的步驟是: 1,CD /usr/src/linux-2.4/include/linux 2,六limits.h中編輯文件: 的#define NR_OPEN 90240原1024 1024 的#define OPEN_MAX 10240原值 3值,六fs.h文件 的#define INR_OPEN 10240原值1024 的#define NR_FILE 65536 8192原始值,內存64 / 1M比例計算的值,1G內存的計算公式為:64 * 10. 4 1024 的#define NR_RESERVED_FILES 128原值,CD /usr/src/linux-2.4/include/net BR>五,六tcp.h中 的#define TCP_LHTABLE_SIZE的32 128原值易聽聽隊列,建立大。 - 設為與內存相關的打開文件的最大數量,系統會減慢太多。 第三步是編譯內核,具體步驟是: 1.使清潔 2.化妝 3. make dep的 4.做的bzImage 將導入的bzImage /啟動重新啟動系統! wc命令,以目前在建立套接字連接數統計| 與超過1024個客戶端和伺服器到伺服器的終端使用netstat的連接。
⑺ 嵌入式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
不知道這些是不是你想要的。
⑻ 為什麼 Linux 不將網路協議棧在用戶態實現
之前因項目需要在用戶態實現過tcp協議棧,不難的,看懂tcp ip協議詳解就可以了,如果要深入,繼續看unix網路編程,深入理解linux網路技術內幕,分析linux內核協議棧,會對tcp ip協議有較大幫助
⑼ 如何學習linux 網路協議棧 書網路通信
應用編程一般不涉及網路協議棧,我指的的是tcp/udp應用開發
你要學習網路協議棧,推薦libpcap這個庫(c庫,但是也有其他語言的封裝),通過這個庫你可以把一整個乙太網幀都抓下來,對於學習網路協議棧是很有用的
如果你不是一個開發者,只是想學習一下網路協議棧,可以使用tcpmp/Wireshark 這樣的抓包進行抓包分析 Wireshark 提供了很有好的界面,讓你在看網路包的時候不會很累
或者你可以看看 TCP/IP 協議那幾卷,什麼卷一卷二的,不過那幾本書太厚了,我沒看完過,除非你是專業的協議棧開發人員,不推薦看,太累了