【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封
搭配這篇博文服用,效果更好:以太網(wǎng)數(shù)據(jù)包、IP數(shù)據(jù)包、UDP數(shù)據(jù)包:https://blog.csdn.net/u011754972/article/details/116030526
1.數(shù)據(jù)封裝:是指將協(xié)議數(shù)據(jù)單元封裝在一組協(xié)議頭和協(xié)議尾中的過程。
由于用戶傳輸?shù)臄?shù)據(jù)一般比較大,一次性發(fā)送出去十分困難,于是需要把數(shù)據(jù)分成多段,再按照一定的次序發(fā)送出去,這個過程就需要對數(shù)據(jù)進(jìn)行封裝:
-
⑴ 1.應(yīng)用層準(zhǔn)備數(shù)據(jù)–>
-
⑵ 傳輸層接受應(yīng)用層數(shù)據(jù)添加上TCP的控制信息(稱為TCP頭部),這個數(shù)據(jù)單元叫段(segment),將段交給網(wǎng)絡(luò)層–>
-
⑶ 網(wǎng)絡(luò)層接收到段,再添加上IP頭部,這個數(shù)據(jù)單元叫包(packet),將包交給數(shù)據(jù)鏈路層–>
-
⑷ 數(shù)據(jù)鏈路層將包再添加上MAC頭部和尾部,這個數(shù)據(jù)單元叫幀(frame),交給物理層–>
-
⑸ 物理層將收到的數(shù)據(jù)轉(zhuǎn)化為比特流(就是二進(jìn)制,0101),在網(wǎng)線中傳送。
數(shù)據(jù)封裝是從高層到底層,逐層封裝。
2.數(shù)據(jù)拆封:是指將接收到的數(shù)據(jù)進(jìn)行拆包,每一層只把對該層有意義的數(shù)據(jù)拿走。
-
⑴ 物理層接收到比特流,經(jīng)處理后將數(shù)據(jù)交給數(shù)據(jù)鏈路層–>
-
⑵ 數(shù)據(jù)鏈路層收到數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)幀,去掉MAC頭尾部(這個是解封),將包交給網(wǎng)絡(luò)層–>
-
⑶ 網(wǎng)絡(luò)層收到包,去掉IP頭,將段交給傳輸層–>
-
⑷ 傳輸層收到段,去掉TCP頭部,將數(shù)據(jù)交給應(yīng)用層–>
-
⑸ 應(yīng)用層處理數(shù)據(jù)。
數(shù)據(jù)拆封是從低層到高層,逐層拆裝。
可以看到底層有這么復(fù)雜,但是我們不需要管,Java的JDK都已經(jīng)封裝好了。
總結(jié)
以上是生活随笔為你收集整理的【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++】19. 深入 char * ,
- 下一篇: 【Socket网络编程】12. send