久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

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

1. 概述

TCP/IP協(xie)(xie)議(yi)(yi)(yi)棧可以實現不(bu)同型號、不(bu)同操作系(xi)統的(de)計算機之間的(de)通信,它并不(bu)是某(mou)個具(ju)體的(de)協(xie)(xie)議(yi)(yi)(yi),而(er)是一組(zu)協(xie)(xie)議(yi)(yi)(yi)。我們(men)都知道OSI七層模型中有物理層、數據鏈路層、網(wang)(wang)絡層、傳輸層、會話層、表示(shi)層、應用(yong)層共(gong)七層,每(mei)一層都對應多個相關的(de)協(xie)(xie)議(yi)(yi)(yi)。同樣,TCP/IP網(wang)(wang)絡協(xie)(xie)議(yi)(yi)(yi)也進行(xing)了(le)(le)層次(ci)的(de)劃(hua)分(fen),分(fen)為四層,分(fen)別規定了(le)(le)每(mei)層的(de)作用(yong)以及它們(men)的(de)協(xie)(xie)議(yi)(yi)(yi)。

嵌入式linux tcpip協議棧

網(wang)絡接(jie)口(kou)層:通常包(bao)括操(cao)作(zuo)系統中(zhong)的設備驅動(dong)程序和計(ji)算機中(zhong)對(dui)應(ying)的網(wang)卡,它們一起處理與電纜(lan)的物理接(jie)口(kou)細節(jie)。

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

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

運(yun)(yun)輸(shu)(shu)層:主(zhu)(zhu)(zhu)要為(wei)兩(liang)(liang)臺主(zhu)(zhu)(zhu)機(ji)上的(de)(de)(de)(de)應(ying)(ying)用程序提(ti)供(gong)(gong)端(duan)(duan)到(dao)(dao)端(duan)(duan)的(de)(de)(de)(de)通(tong)信(xin)。在TCP/IP協(xie)(xie)議族中,有兩(liang)(liang)個互不相同的(de)(de)(de)(de)傳輸(shu)(shu)協(xie)(xie)議:TCP(傳輸(shu)(shu)控制協(xie)(xie)議)和UDP(用戶數據(ju)(ju)(ju)報(bao)協(xie)(xie)議)。TCP為(wei)兩(liang)(liang)臺主(zhu)(zhu)(zhu)機(ji)提(ti)供(gong)(gong)高可靠性的(de)(de)(de)(de)數據(ju)(ju)(ju)通(tong)信(xin)。它(ta)所做的(de)(de)(de)(de)工作包括把(ba)應(ying)(ying)用程序交(jiao)給它(ta)的(de)(de)(de)(de)數據(ju)(ju)(ju)分成合適的(de)(de)(de)(de)小(xiao)塊交(jiao)給下(xia)面的(de)(de)(de)(de)網(wang)絡層,確認(ren)接收到(dao)(dao)的(de)(de)(de)(de)分組,設置發(fa)送后確認(ren)分組的(de)(de)(de)(de)超時(shi)時(shi)鐘等。由于(yu)運(yun)(yun)輸(shu)(shu)層提(ti)供(gong)(gong)了(le)高可靠性的(de)(de)(de)(de)端(duan)(duan)到(dao)(dao)端(duan)(duan)的(de)(de)(de)(de)通(tong)信(xin),因(yin)此應(ying)(ying)用層可以(yi)忽略所有這些細(xi)節。而(er)另一(yi)(yi)(yi)(yi)方面,UDP則為(wei)應(ying)(ying)用層提(ti)供(gong)(gong)一(yi)(yi)(yi)(yi)種(zhong)非常簡(jian)單(dan)的(de)(de)(de)(de)服務。它(ta)只是把(ba)稱作數據(ju)(ju)(ju)報(bao)的(de)(de)(de)(de)分組從一(yi)(yi)(yi)(yi)臺主(zhu)(zhu)(zhu)機(ji)發(fa)送到(dao)(dao)另一(yi)(yi)(yi)(yi)臺主(zhu)(zhu)(zhu)機(ji),但并不保(bao)證該數據(ju)(ju)(ju)報(bao)能到(dao)(dao)達另一(yi)(yi)(yi)(yi)端(duan)(duan)。任何必(bi)需(xu)的(de)(de)(de)(de)可靠性必(bi)須由應(ying)(ying)用層來提(ti)供(gong)(gong)。這兩(liang)(liang)種(zhong)運(yun)(yun)輸(shu)(shu)層協(xie)(xie)議分別在不同的(de)(de)(de)(de)應(ying)(ying)用程序中有不同的(de)(de)(de)(de)用途,這一(yi)(yi)(yi)(yi)點將在后面看到(dao)(dao)。

應用(yong)(yong)層:負(fu)責處(chu)理特定的(de)應用(yong)(yong)程序(xu)細(xi)節

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

嵌入式linux tcpip協議棧

這里(li),我們(men)列舉了一(yi)(yi)(yi)個(ge)FTP客(ke)戶(hu)(hu)(hu)程(cheng)(cheng)(cheng)序(xu)(xu)和(he)另一(yi)(yi)(yi)個(ge)FTP服(fu)(fu)(fu)務(wu)(wu)器程(cheng)(cheng)(cheng)序(xu)(xu)。大多(duo)數的(de)(de)(de)(de)(de)網(wang)絡應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)都被設計(ji)成客(ke)戶(hu)(hu)(hu)-服(fu)(fu)(fu)務(wu)(wu)器模式。服(fu)(fu)(fu)務(wu)(wu)器為(wei)客(ke)戶(hu)(hu)(hu)提供(gong)某(mou)種(zhong)(zhong)(zhong)服(fu)(fu)(fu)務(wu)(wu),在(zai)該圖中就是(shi)訪問服(fu)(fu)(fu)務(wu)(wu)器所在(zai)主(zhu)機上(shang)(shang)的(de)(de)(de)(de)(de)文件。在(zai)遠程(cheng)(cheng)(cheng)登錄應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)Telnet中,為(wei)客(ke)戶(hu)(hu)(hu)提供(gong)的(de)(de)(de)(de)(de)服(fu)(fu)(fu)務(wu)(wu)是(shi)登錄到服(fu)(fu)(fu)務(wu)(wu)器主(zhu)機上(shang)(shang)。在(zai)同(tong)(tong)(tong)一(yi)(yi)(yi)層(ceng)(ceng)(ceng)(ceng)上(shang)(shang),雙方都有(you)對應的(de)(de)(de)(de)(de)一(yi)(yi)(yi)個(ge)或多(duo)個(ge)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)進行通(tong)(tong)信(xin)(xin)。例(li)如,某(mou)個(ge)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)允(yun)許TCP層(ceng)(ceng)(ceng)(ceng)進行通(tong)(tong)信(xin)(xin),而(er)另一(yi)(yi)(yi)個(ge)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)則允(yun)許兩(liang)個(ge)IP層(ceng)(ceng)(ceng)(ceng)進行通(tong)(tong)信(xin)(xin)。在(zai)圖的(de)(de)(de)(de)(de)右邊,我們(men)可以看出(chu)應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)通(tong)(tong)常(chang)是(shi)一(yi)(yi)(yi)個(ge)用(yong)(yong)戶(hu)(hu)(hu)進程(cheng)(cheng)(cheng),而(er)下三(san)層(ceng)(ceng)(ceng)(ceng)則一(yi)(yi)(yi)般在(zai)linux操作系(xi)統內核中執(zhi)行。頂(ding)層(ceng)(ceng)(ceng)(ceng)與下三(san)層(ceng)(ceng)(ceng)(ceng)之(zhi)間(jian)還(huan)有(you)另一(yi)(yi)(yi)個(ge)關鍵(jian)的(de)(de)(de)(de)(de)不同(tong)(tong)(tong)之(zhi)處(chu)。應用(yong)(yong)層(ceng)(ceng)(ceng)(ceng)關心(xin)的(de)(de)(de)(de)(de)是(shi)應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)的(de)(de)(de)(de)(de)細節,而(er)不是(shi)數據在(zai)網(wang)絡中的(de)(de)(de)(de)(de)傳(chuan)輸活動(dong)。下三(san)層(ceng)(ceng)(ceng)(ceng)對應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)一(yi)(yi)(yi)無(wu)所知,但它們(men)要處(chu)理所有(you)的(de)(de)(de)(de)(de)通(tong)(tong)信(xin)(xin)細節。在(zai)圖中列舉了四種(zhong)(zhong)(zhong)不同(tong)(tong)(tong)層(ceng)(ceng)(ceng)(ceng)次上(shang)(shang)的(de)(de)(de)(de)(de)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)。FTP是(shi)一(yi)(yi)(yi)種(zhong)(zhong)(zhong)應用(yong)(yong)層(ceng)(ceng)(ceng)(ceng)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi), TCP是(shi)一(yi)(yi)(yi)種(zhong)(zhong)(zhong)運(yun)(yun)輸層(ceng)(ceng)(ceng)(ceng)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi),IP是(shi)一(yi)(yi)(yi)種(zhong)(zhong)(zhong)網(wang)絡層(ceng)(ceng)(ceng)(ceng)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi),而(er)以太網(wang)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)則應用(yong)(yong)于鏈(lian)路層(ceng)(ceng)(ceng)(ceng)上(shang)(shang)。TCP/IP協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)族(zu)是(shi)一(yi)(yi)(yi)組(zu)不同(tong)(tong)(tong)的(de)(de)(de)(de)(de)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)組(zu)合在(zai)一(yi)(yi)(yi)起(qi)構成的(de)(de)(de)(de)(de)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)族(zu)。盡管通(tong)(tong)常(chang)稱該協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)族(zu)為(wei)TCP/IP,但TCP和(he)IP只是(shi)其中的(de)(de)(de)(de)(de)兩(liang)種(zhong)(zhong)(zhong)協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)而(er)已(該協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)族(zu)的(de)(de)(de)(de)(de)另一(yi)(yi)(yi)個(ge)名字是(shi)I n t e r n e t協(xie)(xie)(xie)(xie)(xie)議(yi)(yi)(yi)(yi)族(zu)(Internet Protocol Suite))。網(wang)絡接口層(ceng)(ceng)(ceng)(ceng)和(he)應用(yong)(yong)層(ceng)(ceng)(ceng)(ceng)的(de)(de)(de)(de)(de)目的(de)(de)(de)(de)(de)是(shi)很(hen)顯(xian)然的(de)(de)(de)(de)(de)—前者(zhe)(zhe)處(chu)理有(you)關通(tong)(tong)信(xin)(xin)媒介(jie)的(de)(de)(de)(de)(de)細節(以太網(wang)、令牌環網(wang)等),而(er)后者(zhe)(zhe)處(chu)理某(mou)個(ge)特定的(de)(de)(de)(de)(de)用(yong)(yong)戶(hu)(hu)(hu)應用(yong)(yong)程(cheng)(cheng)(cheng)序(xu)(xu)( FT P、Telnet等)。但是(shi),從表面上(shang)(shang)看,網(wang)絡層(ceng)(ceng)(ceng)(ceng)和(he)運(yun)(yun)輸層(ceng)(ceng)(ceng)(ceng)之(zhi)間(jian)的(de)(de)(de)(de)(de)區(qu)別(bie)不那(nei)么(me)明顯(xian)。

2.數據封裝(zhuang)

嵌入式linux tcpip協議棧

數據(ju)從應(ying)(ying)用層(ceng)到(dao)物理層(ceng)要經過一系列(lie)的(de)加(jia)包(bao)頭過程,反之(zhi),從物理層(ceng)到(dao)應(ying)(ying)用層(ceng)要進行拆包(bao),每經過一層(ceng)就(jiu)要進行相(xiang)應(ying)(ying)的(de)去數據(ju)包(bao)包(bao)頭。

3. 數據傳輸

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

struct sk_buff {

struct sk_buff *next;

struct sk_buff *prev;

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

unsigned int len, //有效數據長度(du)

data_len; //分片數(shu)據段的長度

__u16 mac_len,

hdr_len;

sk_buff_data_t tail;

sk_buff_data_t end;

unsigned char *head, //緩(huan)存區的頭指(zhi)針

*data; //有效數據頭指(zhi)針(zhen)

...

};

嵌入式linux tcpip協議棧

sk_buff相(xiang)關操作函(han)數:

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

*功能:分配sk_buff結構(gou)體

*參數:size :緩存區大小

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

*返(fan)回(hui)值:成功返(fan)回(hui)skb指針

* 失敗返回NULL

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

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

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

*功(gong)能:釋放(fang)sk_buff

*參數(shu):skb:skb指針

*返(fan)回(hui)值:void

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

void kfree_skb(struct sk_buff *skb)

/*tail下移(yi),有效數據區(qu)增(zeng)大*/

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

/*data上移,有效(xiao)數據區(qu)增大*/

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

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

void skb_reserve(struct sk_buff *skb, int len)

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

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

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

回到頂部