搭配这篇博文服用,效果更好:以太网数据包、IP数据包、UDP数据包:https://blog.youkuaiyun.com/u011754972/article/details/116030526
1.数据封装:是指将协议数据单元封装在一组协议头和协议尾中的过程。
由于用户传输的数据一般比较大,一次性发送出去十分困难,于是需要把数据分成多段,再按照一定的次序发送出去,这个过程就需要对数据进行封装
:
-
⑴ 1.应用层准备数据–>
-
⑵ 传输层接受应用层数据添加上TCP的控制信息(称为
TCP头部
),这个数据单元叫段(segment)
,将段
交给网络层–> -
⑶ 网络层接收到
段
,再添加上IP头部
,这个数据单元叫包(packet)
,将包
交给数据链路层–> -
⑷ 数据链路层将
包
再添加上MAC头部
和尾部
,这个数据单元叫帧(frame)
,交给物理层–> -
⑸ 物理层将收到的数据转化为
比特流
(就是二进制,0101),在网线中传送。
数据封装是从高层到底层,逐层封装。
2.数据拆封:是指将接收到的数据进行拆包,每一层只把对该层有意义的数据拿走。
-
⑴ 物理层接收到
比特流
,经处理后将数据交给数据链路层–> -
⑵ 数据链路层收到数据转化为
数据帧
,去掉MAC头尾部
(这个是解封
),将包
交给网络层–> -
⑶ 网络层收到
包
,去掉IP头
,将段交给传输层–> -
⑷ 传输层收到
段
,去掉TCP头部
,将数据交给应用层–> -
⑸ 应用层处理数据。
数据拆封是从低层到高层,逐层拆装。
可以看到底层有这么复杂,但是我们不需要管,Java的JDK都已经封装好了。