当前位置:网站首页>认识网络模型数据的封装和解封装
认识网络模型数据的封装和解封装
2022-07-27 18:13:00 【华为云】
摘自:《深入理解计算机网络》 王达著 机械工业出版社
IPv4数据报格式请点击这里
IPv4数据报的封装与解封装
IPv4数据报的封装
发送端网络层生成的IP数据报还要继续往下传输,到达数据链路层后就要封装成数据帧了。IP数据报的“帧封装”原理很简单,只需要把来自网络层的整个IP数据报(包括包头部分和数据部分)当做数据链路层的数据部分,然后再前面加上与数据链路层对应的协议头即可。以太局域网中,由于数据链路层分成了LLC子层和MAC子层的协议头封装,最终形成数据链路层的以太网MAC帧,如下图所示。在帧头中我们一般要加上源和目的节点的MAC地址,因为数据链路层是通过MAC地址进行寻址的。

IPv4数据报的封装和解封装流程

以上所述是经过一个网络的情形,如果一个IP数据报在整个传输过程中要经过几个网络时,怎么办呢?这是其实又涉及到一个解封装的过程。解封装就是由数据链路层的帧格式解封成原始的数据报格式。当源主机发送一个IP数据报经过两个路由器连接的三个网络时的封装和解封过程如下(流程图见上图):
1. 当源主机发送一个IP数据报时,在内网网络1中传输是以帧形式进行的,所以首先需要把元素的IP数据报封装成帧,在网络1中的链路上进行传输。此时把原来的IP数据报作为整个MAC帧的“数据”部分,然后加上网络1链路层协议的头部信息,作为帧头,即帧头1。
2. 当帧传输到路由器1连接网络1的接口时,相当于要把帧从数据链路层上传到网络层,于是要对原来的帧进行解封装,去掉帧头和帧尾信息(在有帧尾的情况下),还原出原来的IP数据报,以识别包中的目的地址信息,然后根据路由器中的路由表信息进行路由转发。此时IP数据报的内容都没有改变,包括IP包头部分中的源和目的地址信息等。
3. 当IP数据报在路由器1中从网络1路由到网络2后,又需要在网络2的链路层进行传输,所以又要重新封装成帧,仍把原来的整个IP数据报作为数据部分,不过此时加上的是网络2链路层的协议头信息作为帧头部,即帧头2。
4. 当帧传输到路由器2连接网络2的接口时,又相当于从数据链路层到了网络层,所以又要对帧进行解封装,仍旧还原出原来的IP数据报,使路由器2可以识别包中的目的地址信息,只有这样路由器2才能根据其路由表信息进行正确的数据报路由、转发。
5. 当IP数据报在路由器2从网络2到网络3后,又需要在网络3的链路层进行传输,所以又要重新封装和解封,仍把原来的整个IP数据报作为数据部分,不过此时加上的是网络3链路层的协议头信息作为帧头部,即帧头3。
6. 当从网络3的数据链路层把帧传输到目的主机时,在目的主机上又会对帧进行解封装,去掉帧头和帧尾,还原出原来的IP数据报,以获取IP数据报中的真正数据。
从以上的过程可以看出,IP数据报无论经过了多少个网络,整个数据报内容都是不会改变的,包括包头部分的源和目的地址信息。变化的只是在不同网络数据链路上传输的帧头信息,即在不同网络链路上传输的帧源MAC地址会改变,目的MAC地址不会改变。
边栏推荐
- How to solve the problem of missing alarm information and synchronization when Haikang equipment is connected to easycvr?
- vi工作模式(3种)以及模式切换(转换)
- MySQL 日志错误日志
- It is said that Intel will stop the nervana chip manufactured by TSMC at 16nm
- [benefit activity] stack a buff for your code! Click "tea" to receive the gift
- 用户和权限限制用户使用资源
- 【深度学习】Pytorch Tensor 张量
- Clickhouse implements materializedpostgresql
- Pytorch multiplication and broadcasting mechanism
- Users and permissions create ordinary users
猜你喜欢

面了个腾讯拿38K跳槽出来的,见识到了真正的测试天花板

LabVIEW学习笔记五:按钮按下后无法返回原状

人家这才叫软件测试工程师,你那只是混口饭吃(附HR面试宝典)

RK3399平台入门到精通系列讲解(导读篇)21天学习挑战介绍

Under the epidemic, I left my job for a year, and my income increased 10 times

从0开始写bootloader
![[design tutorial] yolov7 target detection network interpretation](/img/dc/a795dcbd1163df6d8f33704a129d30.png)
[design tutorial] yolov7 target detection network interpretation

【分层强化学习】HAC论文及代码

一个程序员的水平能差到什么程度?

How to optimize the open source community experience through developer metrics
随机推荐
关于栈迁移的那些事儿
Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法
2022-07-19 advanced network engineering (XX) BGP route optimization, route optimization analysis one by one
在字节干了两年离职后,一口气拿到15家Offer
一个程序员的水平能差到什么程度?
软件测试面试题:统计在一个队列中的数字,有多少个正数,多少个负数,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
软件测试面试题:字符串 “axbyczdj“,如果得到结果“abcd
How bad can a programmer be?
(manual) [sqli labs38, 39] stack injection, error echo, character / number type
【深度学习】Pytorch Tensor 张量
软件测试面试题:已知一个队列,如: [1, 3, 5, 7], 如何把第一个数字,放到第三个位置,得到:[3, 5, 1, 7]
金仓数据库 KingbaseES异构数据库移植指南 (2. 概述)
JVS基础介绍
【毕设教程】YOLOv7 目标检测网络解读
JVS公众号登陆配置
Jetpack compose performance optimization guide - compilation metrics
[benefit activity] stack a buff for your code! Click "tea" to receive the gift
How to solve the problem of missing alarm information and synchronization when Haikang equipment is connected to easycvr?
EasyCVR平台关闭录像为何还会有TS切片文件生成?
MySQL log query log