博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译] Foo over UDP
阅读量:5260 次
发布时间:2019-06-14

本文共 1440 字,大约阅读时间需要 4 分钟。

Foo over UDP

译文作者:zhangzl2013

译文链接:
原文作者:Jonathan Corbet
原文链接:
本文有可能会被转载,从而导致评论留言的碎片化。想参与评论和探讨的同学,请找到原文或译文的原始地址,与原文或译文作者互动讨论。 

隧道技术在现代网络应用中变得越来越重要了。通过把不同的网络连接在一起,隧道技术可以创建虚拟私有网络,访问被防火墙拦住的端口等等。隧道技术可以在网络堆栈的不同层实现;SSH隧道在TCP层,而GRE和IPIP这种隧道协议则直接在IP层上。非但如此,还有越来越多的关注集中在UDP协议上。Tom Herbert发布的“foo over UDP”(FOU)补丁集,以一种通用的方式实现了UDP层的隧道技术,而且已经进入了3.18的net-next tree了。

为啥选则了UDP呢?目前几乎所有的网络接口都对UDP有硬件支持,并实现了检验校验和等细节操作。UDP刚好提供了足够的信息(确切的说,就是端口)来轻松的路由数据报文封包。UDP也可以用于接收端缩放技术(Receive Side Scaling,RSS)和等价多路径协议(ECMP),来提升性能。UDP隧道的优越之处使很多开发者认为未来几年它将大规模普及。

数据报文封包和UDP隧道相对来说还是比较容易理解的概念。试想一个进入隧道的TCP数据包:

这个数据报有正常的IP和TCP头,后面是用户要发送的数据。封包的过程如下:

这样,这个数据包就是一个UDP数据包,里面装的是TCP数据包。系统可以将他想普通的UDP数据包一样发送;在接收端,额外的UDP头部被去掉后,原始的TCP数据包继续进入网络堆栈进行处理。

配置一个FOU隧道需要两步。发送端和接收端分别设置,这样能允许人们随意配置它们。在接收端,只要设置一个端口用于接收封装好的数据报文就行了。有个新的“fou”子命令可用于此:

ip fou add port 5555 ipproto 4

此命令设置了5555端口,指明此端口接收到的数据报的协议号是4,也就是IP封包。此端口接收到的数据包会被拆解掉外面的封装;然后再放入到网络堆栈中,从而发往它的实际目的地址。

在发送端就稍复杂了点,因为必须制定目的地址,还要能够与已有的封装协议共存。典型的命令如下:

ip link add name tun1 type ipip \        remote 192.168.1.1 local 192.168.1.2 ttl 225 \        encap fou encap-sport auto encap-dport 5555

此命令设置一个新的虚拟接口(tun1),用于IPIP封装。数据包的源端口有网络栈决定,而目的端口设置为5555。当然要使用这个网络接口还要选择封装协议。目前支持的协议有IPIP,SIT(IPv4-IPv6隧道协议)和GRE(用于虚拟专用网)。

这个补丁集的一些数字表明SIT和IPIP的性能有了很大提升;而GRE的性能则跟没有用FOU的情况差不多。所以,利用已有的对UDP收发的优化,这个特性显然能够提升速度。它不需要专门的硬件支持;当前能处理UDP协议的硬件就足够了。所以说这是个能工作于当前任何系统的非常简单的解决方案——而且3.18发布时就可以使用了。

扩展阅读

 

转载于:https://www.cnblogs.com/zhangzl2013/p/foo_over_udp.html

你可能感兴趣的文章
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>