【发布时间】:2013-04-16 18:35:48
【问题描述】:
是否可以使用 TUN/TAP 接口测试 TCP 堆栈? 我正在考虑这样的机制:
+--------------------------------+
| TCP Client / Server |
| socket(AF_INET, SOCK_STREAM) |
| e.g. HTTP Server / Client |
+----------+---------------------+
|
| +---------------------+
| | TUN Device |
| | ( kernel does TCP ) |
| +---------------------+
|
+------------+----------------------+
| Linux Kernel + Forwarding Magic |
+-----------------------------------+
|
| +---------------------+
| |TAP Device |
| |Raw ethernet frames |
| +---------------------+
|
+----------+----------------------+
| Raw Socket API |
| socket(AF_PACKET, SOCK_RAW) |
| User mode TCP Stack over raw API|
| a HTTP client/server over it |
+---------------------------------+
顶盒是(比如说)一个标准的未修改的 HTTP 服务器,监听 IP 地址, 已路由到 TUN 设备。 底部框是一个自定义 TCP/IP 堆栈,它适用于原始以太网帧。
问题:
- 是否可以像这样背靠背连接两个 TAP/TUN 设备 ?
- 这里需要“桥”吗?他们怎么说话 背靠背?
- 最后:有没有更好的方法来做到这一点?
提前感谢。
PS:我将在同一台机器上运行所有这些。这里的“盒子”更像是过程或集合或过程。
【问题讨论】:
-
事实证明,我实际上并不需要创建两个设备。这是可以演示获取原始数据包的命令集: # socat STDOUT TUN:10.0.0.1/24,up ; # ping 10.0.0.2
标签: networking tcp ethernet tcp-ip raw-ethernet