数据的发送和接收其实就是封装及解封装的过程。
协议栈逐层向下传递数据,并添加报文头部和报文尾部的过程称为封装。反过来就是解封装。
封装过程
封装过程:上层原始数据→数据段(segment)→数据包(packet)→数据帧(frame)→比特流(bit)
- 应用层:原始数据被转换成二进制数据。
- 传输层:数据加上TCP头部,封装成Segment 数据段。关键信息是源port和目的port。
- 网络层:会给数据打上IP头部,封装成Packet数据包,关键信息是源ip和目的ip地址。
- 数据链路层 :会给数据打上帧头部,封装成Frame数据帧,关键信息是源MAC地址和目的MAC地址。
- 物理层:在网线或者光纤上将二进制数据封装成高低电频信号或者光信号。
- 数据最终在物理层上(双绞线、光纤跳线)上以电信号或光信号进行传播转发。
解封装过程
解封装过程:比特流(bit)→数据帧(frame)→数据包(packet)→数据段(segment)→上层原始数据
- 物理层:将光信号/电信号转换成二进制数据,然后送到数据链路层。
- 数据链路层:查看MAC地址,与自己的MAC地址相符就保留,不符合就丢弃。然后将数据帧的MAC头去掉,校验LLC头type字段,查看网络层(上层)协议。再将数据发送到网络层。
- 网络层: 先查看IP地址,是自己的ip地址就保留,不是就丢弃。然后再去掉ip头部,校验协议号TCP头的Portocol,查看传输层(上层)协议,再将数据发送到传输层。
- 传输层:校验端口号,然后再给到应用层。
- 应用层:将二进制数据转换为原始上层数据。
TCP数据报文和IP数据报文
LLC(Logical Link Control):逻辑链路控制子层。
LLC负责识别网络层协议,然后对它们进行封装。LLC报头告诉数据链路层一旦帧被接收到时,应当如何处理。
LLC提供了两种无连接和一种面向连接的三种操作方式:
无连接:
方式一:无回复的无连接方式。发送帧时:
给单一的目的地址(点到点协议或单点传输);
给相同网络中的多个目的地址(多点传输);
给网络中的所有地址(广播传输)。
多点和广播传输在同一信息需要发送到整个网络的情况下可以减少网络流量。
单点传输不能保证接收端收到帧次序以及是否收到。
方式二:有回复的无连接方式。仅限点到点通信。
方式三:面向连接方式。
给每个帧进行编号,接收端就能保证它们按发送的次序接收,并且没有帧丢失。利用滑动窗口流控制协议控制网络拥堵。