數據封裝與解封裝

封裝(encapsulate/encapsulation):數據要通過網絡進行傳輸,要從高層壹層壹層的向下傳送,如果壹個主機要傳送數據到別的主機,先把數據裝到壹個特殊協議報頭中,這個過程叫-封裝。

封裝分為:切片和加控制信息

解封裝:上述的逆向過程

現在簡單的說下封裝

比如現在,我用QQ和 Reborn 聊天,這個模型,首先我要在QQ上發了壹條“hello,Reborn”這個在QQ的應用程序做的這個“hello,Reborn”的動作,就是在應用層上完成的,但是怎麽才能把“hello,Reborn”這幾個字發給在網絡另壹端的Reborn呢?假設QQ這個應用程序在傳輸層上是用的TCP做協議的,那麽在傳輸層,就用TCP做報頭,在“hello,Reborn”等高層數據的前面進行封裝。並且這個時候進行數據的分段,和標記上順序號,當然這些都是在TCP報頭上完成的,到了傳輸層,目前的狀況是TCP報頭+hello,Reborn等高層數據,大家看到,TCP報頭被加在了高層數據前面,這個就封裝了壹次,因為TCP被加在了前面。這個就是傳輸層的PDU(數據協議單元),這個傳輸層的PDU就叫做段(segment)。網絡層,在網絡層所有來自網絡層的以上數據,也就是TCP+hello,Reborn等高層數據,再次被封裝在其前面加上IP報頭,IP用與尋址,這樣才能找到Reborn那臺PC的IP地址。到了網絡層,現在數據變成了IP報頭+TCP+hello,Reborn等高層數據 ,在網絡層的PDU叫做數據包,packet,又會來到下面的壹層,叫做數據鏈路層(data-link layer),現在的數據是這樣的了以太幀+IP報頭+TCP報頭+hello,Reborn等高層數據,這個時候的PDU叫做幀,以太幀+IP報頭+TCP報頭+hello,Reborn等高層數據,這些在第2層的frame再次進入最低層,也就是物理層,進行信號等等的編碼,以0101010010這樣的bits流進行在網絡介質上傳輸給Reborn。

解封裝
以太幀+IP報頭+TCP報頭+hello,Rebron等高層數據,這些數據在Rebron這邊開始解封裝 這是個第2層的frame,首先在Rebron這邊去掉以太幀 IP報頭+TCP報頭+hello,Rebron等高層數據,到了網絡層,然後再去掉 IP報頭,TCP報頭+hello,Rebron等高層數據到了傳輸層,再去掉TCP報頭,最後,在應用層的QQ程序裏,Reborn終於收到了我發的 “hello,Rebron”的消息。 當然在業界都是用TCP/IP模型,沒用OSI模型,但是封裝解封裝都是壹個原理。

大家都知道了封裝與解封裝,那麽具體是怎麽操作的呢?上層和下層是怎麽配合工作的呢?我怎麽知道封裝給下壹層的哪壹個報頭呢?hello,Rebron等高層數據,這高層的數據流在進入傳輸層時,假設QQ聊天是用的TCP ,那麽QQ這個應用程序本身已經對下層,也就是傳輸層做了映射,或有壹個字段指向了傳輸層,通知它,請把我的數據封裝到妳的TCP協議裏,傳輸層這個時候,在TCP裏也有壹個目的端口號,指向QQ應用程序,QQ的端口好像是4000,這樣,在接受方,也就是Rebron,解封裝的時候,傳輸層才知道把封裝了的數據交給上層的哪個程序

下面分析傳輸層的TCP報頭 ,我講幾個TCP報頭裏主要的結果字段,TCP報頭首先是源端口,目的端口,然後有序列,檢驗和,等等 .當我們發消息或進行HTTP協議上網的時候,遠端口是1024以上的壹個隨機端口 ,這樣在傳輸層接封裝的時候在傳輸層,才知道把我的數據交遞給上層的http程序,通過什麽知道的呢?正是通過這個在TCP報頭裏的目的端口號這樣實現上下層配合工作。

下面講述網絡層,IP報頭的封裝

首先看看IP報頭裏有哪些字段,我只講幾個,如果講完,時間不夠,而且講多了,有些人也茫然,IP報頭裏有源IP地址,目的IP地址,協議,等等等字段, 首先源地址當然就是我這臺的外網地址了,那麽在網絡層進行封裝的時候,用高層已經知道了Reborn的IP地址,所以加上這個IP地址, TCP報頭裏的協議,這個東西重要 ,協議字段,這正是指向(映射)到上層,也就是傳輸層的協議 ,在接封裝的時候,網絡層才知道我把我的數據交給傳輸層的哪個協議,這樣也完成了上下兩層的配合。

下面馬上要進行數據鏈路層的封裝,也就是剛才說的封裝壹個以太幀以太幀這個報頭比較簡單了,字段也少 有目的MAC地址,源MAC地址,還有協議或字段,以太網幀有幾種就講帶協議的以太網幀,先講以太網幀報頭的協議字段,這個協議也是映射到上層的,也就是網絡層的協議,是交給IP協議?還是ICMP?還是ARP?還是IPX?就是靠這個識別 在解封裝的時候,也就是靠這個知道到底是交給上層的哪個協議 ,達到和上層的配合。

下面講MAC地址,

那麽我們怎麽知道dailyMM的MAC地址呢??在網絡層把自己的數據包交給下層數據鏈路層的時候,通過ARP找到daily的MAC地址 當然如果ARP表裏已經存在了daily的MAC,那麽就不用發ARP了 ,這個就是上層和下層是怎麽相互配合工作的,都是壹層映射壹層~這樣正確的封裝。
arrow
arrow
    全站熱搜

    wesker 發表在 痞客邦 留言(0) 人氣()