数据包的封装和分用
封装
eg:假设使用QQ,给另一个好友发送消息
发送方发生的事情,数据从上到下依次进行封装
1.QQ程序,接受用户的输入 “hello” QQ程序就把“hello”包装成一个人应用层数据包(此处应用的应用层协议咱也不知道,是QQ的开发人员确定的) 应用层数据报:
from :me to he msg:hello
2.然后应用层就把这个应用层协议的数据报就交给了传输层,传输层的TCP协议就把这个应用层数据包打包成了TCP数据包。
源端口 目的端口 from :me to he msg:hello
源端口 目的端口 就是 :TCP报头
3.然后传输层就把这个应用层协议的数据报就交给了网络层协议(IP协议),IP协议就把这个传输层打包成一个网络层的数据包
源IP 目的IP 源端口 目的端口 from :me to he msg:hello
源IP 目的IP 就是 : IP报头
4.然后网络层再把这个数据交给数据链路层,数据链路层的主要协议“以太网”把网络层的数据包打包成一个数据链路层的数据包
源mac 目的mac 源IP 目的IP 源端口 目的端口 from :me to he msg:hello
以太网数据帧头 IP报头 TCP报头 应用层数据包 以太网数据帧尾
5.最后,数据链路层把这个数据交给物理层。物理层把这一整串数据转换成光信号/电信号,进行传输。
分用
接收方做的事情就是数据从下到上一次进行“分用” 1.物理层收到光电信号的数据,把数据进行解析。还原成二进制的bit流,再把这个二进制的数据交给数据链路层。 2.数据链路层就拿到了一个 以太网数据帧。 以太网数据帧头:
源mac 目的mac 源IP 目的IP 源端口 目的端口 from :me to he msg:hello
以太网数据帧头 IP报头 TCP报头 应用层数据包 以太网数据帧尾
3.以太网协议解析这个数据帧,去掉帧头和帧尾。把中间的部分交给网络层。网络层拿到了一个IP协议数据报。
源IP 目的IP 源端口 目的端口 from :me to he msg:hello
源IP 目的IP 就是 : IP报头
4.再解析IP数据报,把IP报头取出来,去掉,将剩下的部分交给传输层。
源端口 目的端口 from :me to he msg:hello
源端口 目的端口 就是 :TCP报头
5.传输层TCP协议拿到这个数据之后,在进行解析,取出TCP报头,在将剩下的应用层数据交给应用程序。 6.QQ应用程序拿到这个数据之后,按照应用层协议解析,得到msg为“hello”。
from :me to he msg:hello
|