亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 嵌入式linux tcpip協議棧概述

嵌入式linux tcpip協議棧概述 時間:2018-01-23      來源:未知

1. 概述

TCP/IP協議棧可以實現不同型號、不同操作系統的計算機之間的通信,它并不是某個具體的協議,而是一組協議。我們都知道OSI七層模型中有物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層共七層,每一層都對應多個相關的協議。同樣,TCP/IP網絡協議也進行了層次的劃分,分為四層,分別規定了每層的作用以及它們的協議。

嵌入式linux tcpip協議棧

網絡接口層:通常包括操作系統中的設備驅動程序和計算機中對應的網卡,它們一起處理與電纜的物理接口細節。

網絡層:有時也稱作網際層或互聯網層,處理分組在網絡中的活動,例如分組的選路。在

T C P / I P協議族中,網絡層協議包括I P協議(網際協議),ICMP協議(I n t e r n e t互聯網控制報文協議),以及IGMP協議(I n t e r n e t組管理協議)。

運輸層:主要為兩臺主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。TCP為兩臺主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網絡層,確認接收到的分組,設置發送后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一臺主機發送到另一臺主機,但并不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。這兩種運輸層協議分別在不同的應用程序中有不同的用途,這一點將在后面看到。

應用層:負責處理特定的應用程序細節

假設在一個局域網(LAN)如以太網中有兩臺主機,二者都運行FTP協議,如圖列出了該過程所涉及到的所有協議。

嵌入式linux tcpip協議棧

這里,我們列舉了一個FTP客戶程序和另一個FTP服務器程序。大多數的網絡應用程序都被設計成客戶-服務器模式。服務器為客戶提供某種服務,在該圖中就是訪問服務器所在主機上的文件。在遠程登錄應用程序Telnet中,為客戶提供的服務是登錄到服務器主機上。在同一層上,雙方都有對應的一個或多個協議進行通信。例如,某個協議允許TCP層進行通信,而另一個協議則允許兩個IP層進行通信。在圖的右邊,我們可以看出應用程序通常是一個用戶進程,而下三層則一般在linux操作系統內核中執行。頂層與下三層之間還有另一個關鍵的不同之處。應用層關心的是應用程序的細節,而不是數據在網絡中的傳輸活動。下三層對應用程序一無所知,但它們要處理所有的通信細節。在圖中列舉了四種不同層次上的協議。FTP是一種應用層協議, TCP是一種運輸層協議,IP是一種網絡層協議,而以太網協議則應用于鏈路層上。TCP/IP協議族是一組不同的協議組合在一起構成的協議族。盡管通常稱該協議族為TCP/IP,但TCP和IP只是其中的兩種協議而已(該協議族的另一個名字是I n t e r n e t協議族(Internet Protocol Suite))。網絡接口層和應用層的目的是很顯然的—前者處理有關通信媒介的細節(以太網、令牌環網等),而后者處理某個特定的用戶應用程序( FT P、Telnet等)。但是,從表面上看,網絡層和運輸層之間的區別不那么明顯。

2.數據封裝

嵌入式linux tcpip協議棧

數據從應用層到物理層要經過一系列的加包頭過程,反之,從物理層到應用層要進行拆包,每經過一層就要進行相應的去數據包包頭。

3. 數據傳輸

數據的傳輸使用了一個非常重要的結構體sk_buff,該結構體用來實現數據在各個層次的數據傳輸。該數據結構在linux內核源碼的頭文件中進行的聲明,結構體主要成員變量如下:

struct sk_buff {

struct sk_buff *next;

struct sk_buff *prev;

struct net_device *dev; //數據包屬于哪個網卡

unsigned int len, //有效數據長度

data_len; //分片數據段的長度

__u16 mac_len,

hdr_len;

sk_buff_data_t tail;

sk_buff_data_t end;

unsigned char *head, //緩存區的頭指針

*data; //有效數據頭指針

...

};

嵌入式linux tcpip協議棧

sk_buff相關操作函數:

/*********************************************************

*功能:分配sk_buff結構體

*參數:size :緩存區大小

* priority:分配標志GFP_KERNEL,GFP_ATOMIC...

*返回值:成功返回skb指針

* 失敗返回NULL

********************************************************/

struct sk_buff *alloc_skb(unsigned int size,gfp_t priority)

/**********************************************************

*功能:釋放sk_buff

*參數:skb:skb指針

*返回值:void

**********************************************************/

void kfree_skb(struct sk_buff *skb)

/*tail下移,有效數據區增大*/

unsigned char *skb_put(struct sk_buff *skb, unsigned int len);

/*data上移,有效數據區增大*/

unsigned char *skb_push(struct sk_buff *skb, unsigned int len);

/*data tail下移,有效數據區不變*/

void skb_reserve(struct sk_buff *skb, int len)

上一篇:數據結構樹應用在哪兒比較多

下一篇:ubuntu新版本安裝全攻略教程

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 欧美一区二区在线 | 日本激情在线 | 久久热精品在线观看 | 日韩a在线观看免费观看 | 久久青视频 | 中文字幕日韩三级 | 一级毛片看真人在线视频 | 国产成人精品美女在线 | 久久久一本波多野结衣 | 日本黄色短视频 | 日本久久中文字幕精品 | 激情五月五月婷婷 | 成人图片网站 | 欧美日韩国产一区二区三区播放 | 性做久久久久免费看 | 黑人精品videos亚洲人 | 欧美成人黄色 | a天堂在线视频 | 国产成人综合视频 | 欧美一区二区三区在线可观看 | 久久精品香蕉 | 免费观看国产一区二区三区 | 免费欧美日韩 | 日本成人在线免费观看 | 欧洲亚洲综合一区二区三区 | 日本xxx 高清 | 免费高清特级毛片 | 亚洲第一免费视频 | 欧美成人影院免费观 | 国产一区二区视频在线 | 视频在线a | 欧美另类69xxxxx视频 | 日本精品久久久久久久 | 欧美一级日韩一级亚洲一级va | 亚洲视频免费在线看 | 国产成人精品日本亚洲麻豆 | 亚洲综合网在线观看首页 | 日韩久久精品 | 国产精品专区第二 | 日本a∨在线 | xxxx日本视频|