目录
1.数据封装的过程
2.数据分用的过程
PS:网络数据传输的基本流程(以QQ为例,A给B发送一个hello):
一、发送方:
二、接收方:
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中 的 "上层协议字段" 将数据交给对应的上层协议处理。
1.数据封装的过程
2.数据分用的过程
PS:网络数据传输的基本流程(以QQ为例,A给B发送一个hello):
一、发送方:
用户A在输入框中输入hello这个字符串,qq这个应用程序,就把这个字符串构造成一个应用层数据报。
- ①应用层:
所谓的应用层数据报,本质上就是一个遵守了约定格式的字符串。
应用层数据报具体的数据格式,咱们不清楚,每个应用程序都不一定一样,只有开发qq的程序员才知道。
一个假设的应用层协议格式:"发送方qq号;发送时间;接收方qq号;消息内容"
程序要调用操作系统的API,把这个应用层数据,交给传输层。
- ②传输层(进入系统内核了):
在传输层中,要把上述应用层数据,构造成传输层数据。
传输层最知名的协议就是UDP协议和TCP协议。
此处是使用UDP,就需要构造出UDP数据报(在应用层数据基础上,加个UDP报头)。
这是另外一个特定格式的字符串(这里涉及到源端口和目的端口),此处就像字符串拼接一样,把这个报头和后面的数据拼到一起。
所谓的报头就是一个标签,通过标签表示出当前要把这个消息怎样进行传输。
为啥要往上拼报头?就像商家发货,要套上包装,不止一层。
- 防止里边的货物损坏。
- 可以在包装上贴上标签,用来写一些信息,如:发件人地址、发件人姓名、收件人地址、收件人姓名、货物名称等。
传输层把这个UDP数据报,交给网络层。
- ③网络层:
网络层最知名的协议就是IP协议。
IP协议要基于上述数据,打包成一个IP数据报。
IP报头也相当于是一个字符串,包含了另外一组信息(最核心的信息:源IP和目的IP)
网络层数据报准备好,还需要进一步交给数据链路层。
- ④数据链路层:
数据链路层最知名的协议是以太网。
基于上述数据,还要打包成一个"以太网数据帧"。
接下来这个数据继续往下传输,交给物理层。
- ⑤物理层:
物理层把上述二进制数据转换成电信号/光信号,此时就真正把数据给发出去了。
上述过程,从应用层到物理层,层层加码,这个过程称为"封装"。
此处省略中间的转发过程,只考虑B的接收。
二、接收方:
- ①物理层:
网卡接收到的是光信号和电信号,是在物理层,把这个光电信号转换回二进制的数据。
转换回的数据,其实是一个以太网数据帧。
- ②数据链路层:
数据链路层需要去掉帧头帧尾,取出中间的载荷,交给上层的网络层IP协议。
以太网数据帧帧头里也会记录这个载荷是不是一个IP数据报。
- ③网络层:
IP协议针对这里进行解析,解析出IP报头,取出IP协议的载荷,把这里得到的传输层数据报交给上层传输。
IP报头里会记录,载荷是UDP还是TCP。
- ④传输层:
UDP再进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用层程序。
UDP报头里有一个重要的字段,"目的端口",目的端口是一个具体的应用程序,关联在一起的,因此就可以根据这个端口来把数据交给应用程序了。
- ⑤应用层:
qq应用程序,qq就会针对应用层协议进行解析,显示到界面上。
上述,从下到上层层解析,就是"分用"。
表示一个网络传输的数据单位:
- 包(package)
- 报(datagram)
- 帧(frame)
- 段(segment)