GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。

在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即为发送协议。当 IPv4 被作为 GRE 有效载荷传输时,协议类型字段必须被设置为 0x800 。当一个隧道终点拆封此含有 IPv4 包作为有效载荷的 GRE 包时, IPv4 包头中的目的地址必须用来转发包,并且需要减少有效载荷包的 TTL 。值得注意的是,在转发这样一个包时,如果有效载荷包的目的地址就是包的封装器(也就是隧道另一端),就会出现回路现象。在此情形下,必须丢弃该包。当 GRE 包被封装在 IPv4 中时,需要使用 IPv4 协议 47 。

GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。

GRE包发送过程:

发送过程是很简单的,因为 router A 上配置了一条路由规则,凡是发往 10.0.2.0 网络的包都要经过 netb 这个 tunnel 设备,在内核中经过 forward 之后就最终到达这个 GRE tunnel 设备的 ndo_start_xmit(),也就是 ipgre_tunnel_xmit() 函数。这个函数所做的事情无非就是通过 tunnel 的 header_ops 构造一个新的头,并把对应的外部 IP 地址填进去,最后发送出去。

Linux kernel函数调用分析:

GRE tunnel源码分析之发送流程相关推荐

  1. gre tunnel源码分析之接收流程

    GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中 ...

  2. openxr runtime Monado 源码解析 源码分析:CreateInstance流程(设备系统和合成器系统)Compositor comp_main client compositor

    monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码 ...

  3. Nginx源码分析:启动流程

    nginx源码分析 nginx-1.11.1 参考书籍<深入理解nginx模块开发与架构解析> nginx简介 Nginx的作为服务端软件,表现的主要特点是更快.高扩展.高可靠性.低内存消 ...

  4. Android 音频源码分析——音量调节流程

    源码分析基于android9.0 一.声音类型 对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体.铃声.闹钟.通话,但是其系统内部则分为十几种类型. 声⾳类型用来区分不同播放用 ...

  5. Kubelet源码分析(一):启动流程分析

    源码版本 kubernetes version: v1.3.0 简介 在Kubernetes急群众,在每个Node节点上都会启动一个kubelet服务进程.该进程用于处理Master节点下发到本节点的 ...

  6. Android进阶——Small源码分析之启动流程详解

    前言 插件化现在已经是Android工程师必备的技能之一,只是学会怎么使用是不行的,所以蹭有时间研究一下Small的源码.对于插件化主要解决的问题是四大组件的加载和资源的加载,读懂所有Small源码需 ...

  7. kubernetes源码分析-pod创建流程

    前言 首先放一张kubernetes的架构图.其中apiserver是整个架构的信息交互中心.所有组件都会与apisever交互. kubernetes中,每个node都部署了一个kubelet,通过 ...

  8. MMKV_微信MMKV源码分析(一) | 整体流程

    在使用MMKV框架前,需调用以下方法进行初始化 MMKV.initialize(context); 复制代码 这里的 Java 层主要是获取到保存文件的路径,传入Native层,这里默认的路径是APP ...

  9. 以太坊Go-ethereum源码分析之启动流程

    以太坊源码编译需要gov1.7以上,及C编译器,执行make geth 即可编译项目,编译后可执行的geth文件. Makefile文件: geth:build/env.sh go run build ...

最新文章

  1. ttf能改成gfont吗_粉丝喊话岳云鹏改回本名 小岳岳在线蒙圈:我还能改成岳云啥...
  2. shllter自动和手动实例
  3. (传送门)android绘图canvas.clipRect()方法的作用
  4. 003_SQL语言简介
  5. 调研机构称明年全球数据中心基础设施支出将增长6%
  6. 我去,还在这样读写 excel 这也太低效了吧,好办法来了
  7. (未写)tyvj-1333- Coder Space的邀请
  8. tp5 修改配置参数 view_replace_str 无效
  9. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?
  10. 吴恩达机器学习课程笔记章节二单变量线性回归
  11. 多iframe下的html同名id,获得同级iframe页面的指定ID元素的几种实现方法
  12. Smack 3.3.1 发布,Java 的 XMPP 开发包
  13. linux分屏显示文件行数,linux常用命令集合1
  14. 【贪心】LeetCode 55. Jump Game
  15. matlab用ezplot绘制参数方程,MATLAB学习1 之画图函数
  16. mro python_python中的MRO算法[转]
  17. 2.1微信小程序简介
  18. pc构件生产线及设备_PC构件生产线全套设备清单
  19. TabLayout+ViewPager+Fragment实现切页展示
  20. 推荐一个免费7天天气预报API服务:和风天气

热门文章

  1. java读取resouces目录下文件
  2. loadrunner-3-3场景计划方式与运行模式
  3. 《数据整理实践指南》一第1章 从头说起:什么是噪音数据
  4. elasticsearch的update_by_query
  5. 基于DirectShow的局域网内音视频流的多机共享
  6. Windows7虚拟化体验之一:Windows7部署
  7. 快速的CSV文件生成器
  8. html5能实现网络游戏吗,kbengine + cocos2d_js实现html5网络游戏mmorpg(全套代码+资源)...
  9. odbc spoon连接postgre_ado、odbc连接Postgre SQL
  10. 统计问题:找链环数字对的出现频率