首先,我们先简单地分析一下数据包的组成结构:
如图
数据包简略地分为以下几层:
二层:封装MAC地址(数据链路层)
三层:封装IP地址 — 表明源IP和目标IP,主要用于路由器之间的信息转发(网络层)
四层:封装TCP、UDP端口号,通过端口号表示访问的服务(传输层)
五层:封装DATA数据,即要传输的数据信息(应用层)
跨层封装
接下来就开始讲跨层封装
跨层封装— 应用层数据直接封装于3层报头或者2层报头;
数据包的5层应用层包含了数据包要传输的信息所以一定有,后面的可以跳,例如跨过4层,只有2,3,5层,或者跨过3,4层,只有2,5层
首先,我们要知道的是,并不是所有的协议都可以进行跨层封装的,正常应用程序封装的数据流量不做跨层处理
因此跨层封装的意义在于更快的完成服务型协议间的沟通计算
那么有哪些协议可以跨层封装呢?
封装3层报头:同一广播域内的服务型协议 — ARP/OSPF… 使用的设备均为3层设备
封装2层报头:同一交换网络内的二层设备服务型协议 — STP
还有一个可以跨越网段的协议 — ICMP
这些都不是实际传输的应用,而是辅助型的协议,只是为了让网络可以通,不需要实质性的信息
可以封装的原因:
1、OSPF是路由间建邻用的,而路由器是三层设备,三层通讯设备如果携带4层,封装和解封装会变慢,且路由器是三层设备,本身就只识别三层报头
2、ARP是广播域里面获取对方MAC的,而这个行为仅限于在同一个广播域
3、ICMP的ping虽然可以跨网段,但是只是个测试型协议,不需要携带图或表等信息
那么3层或者4层都被跳过了,数据包缺少了一两层,该怎么解决?
这个简单,我们只要将该层主要的信息分片然后放入报头中就行了
跨层封装到3层报头时,IPV4报头可以对数据进行分片,之后每片内容填充于报头中,携带到目的地;
3层报头中还存在协议号,用于对标后方所封装的协议0-255,6代表TCP/17代表UDP;
其余数字每一个皆对应一个固定的跨层封装协议