余利区

 找回密码
 立即注册
查看: 63|回复: 1

多方计算实验中不同网络环境的模拟方法

[复制链接]

2

主题

3

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-1-7 21:10:05 | 显示全部楼层 |阅读模式
前言

研究安全多方计算时通常需要进行实验模拟, 理想情况下通过多台服务器进行相关实验, 但在现实情况下, 不一定每个人都能有这样的条件. 当只有一台服务器进行安全多方计算实验时, 通常使用多开终端来模拟不同的参与方, 而模拟LAN/WAN通常使用Linux流量控制工具命令tc来实现分别控制带宽(bandwidth)和网络延迟(latency/RTT), 本文简单介绍了模拟LAN/WAN环境的方法, 以供初学者食用.
准备工作

在Ubuntu下, 打开终端运行如下命令以安装相关工具包:
sudo apt-get update && sudo apt-get install -y iproute2 iperf3 iputils-ping
其中iproute2为tc命令软件包, iperf3为检查带宽的工具包, iputils-ping为检查网络延迟命令ping的工具包.
流量控制脚本

如下throttle.sh脚本出自Cheetah, 可用于模拟LAN和WAN的网络环境, 改变本地网络的带宽和网络延迟, 但需要管理员权限才能运行. 实际使用时, 可根据脚本中的提示修改相关参数.
#!/bin/bash
######
# Taken from https://github.com/emp-toolkit/emp-readme/blob/master/scripts/throttle.sh
######

## replace DEV=lo with your card (e.g., eth0)
DEV=lo
if [ "$1" == "del" ]
then
        sudo tc qdisc del dev $DEV root
fi

if [ "$1" == "lan" ]
then
sudo tc qdisc del dev $DEV root
## about 3Gbps
sudo tc qdisc add dev $DEV root handle 1: tbf rate 3000mbit burst 100000 limit 10000
## about 0.3ms ping latency
sudo tc qdisc add dev $DEV parent 1:1 handle 10: netem delay 0.15msec
fi
if [ "$1" == "wan" ]
then
sudo tc qdisc del dev $DEV root
## about 400Mbps
sudo tc qdisc add dev $DEV root handle 1: tbf rate 400mbit burst 100000 limit 10000
## about 40ms ping latency
sudo tc qdisc add dev $DEV parent 1:1 handle 10: netem delay 20msec
fi
脚本使用方法:
# 授权, 只需执行一次
chmod 755 throttle.sh

# 模拟LAN
./throttle.sh lan

# 模拟WAN
./throttle.sh wan

# 删除配置
./throttle.sh del
为了检查带宽限制是否有效, 打开两个终端, 分别运行如下命令, 然后观察终端2最后产生的统计信息, 网络延迟则可以通过运行ping 127.0.0.1, 几秒后按Ctrl+C终止运行来查看效果.
# 终端1
iperf3 -s -i 1

# 终端2
iperf3 -c 127.0.0.1 -i 1 -t 10
在不设置任何限制时, 可能的输出情况如下:
# 终端1
root@0cc092f52a00:~# iperf3 -s -i 1
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 127.0.0.1, port 53288
[  5] local 127.0.0.1 port 5201 connected to 127.0.0.1 port 53292
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  4.26 GBytes  36.6 Gbits/sec                  
[  5]   1.00-2.00   sec  4.46 GBytes  38.3 Gbits/sec                  
[  5]   2.00-3.00   sec  4.49 GBytes  38.6 Gbits/sec                  
[  5]   3.00-4.00   sec  4.42 GBytes  38.0 Gbits/sec                  
[  5]   4.00-5.00   sec  4.48 GBytes  38.5 Gbits/sec                  
[  5]   5.00-6.00   sec  4.55 GBytes  39.1 Gbits/sec                  
[  5]   6.00-7.00   sec  4.56 GBytes  39.1 Gbits/sec                  
[  5]   7.00-8.00   sec  4.46 GBytes  38.3 Gbits/sec                  
[  5]   8.00-9.00   sec  4.53 GBytes  38.9 Gbits/sec                  
[  5]   9.00-10.00  sec  4.53 GBytes  38.9 Gbits/sec                  
[  5]  10.00-10.04  sec   182 MBytes  37.3 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.04  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.04  sec  44.9 GBytes  38.4 Gbits/sec                  receiver

# 终端2
root@0cc092f52a00:~# iperf3 -c 127.0.0.1 -i 1 -t 10
Connecting to host 127.0.0.1, port 5201
[  4] local 127.0.0.1 port 42508 connected to 127.0.0.1 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  4.13 GBytes  35.5 Gbits/sec    0   1.44 MBytes      
[  4]   1.00-2.00   sec  4.49 GBytes  38.6 Gbits/sec    0   1.44 MBytes      
[  4]   2.00-3.00   sec  4.41 GBytes  37.9 Gbits/sec    0   1.44 MBytes      
[  4]   3.00-4.00   sec  4.56 GBytes  39.2 Gbits/sec    0   1.44 MBytes      
[  4]   4.00-5.00   sec  4.44 GBytes  38.2 Gbits/sec    0   1.44 MBytes      
[  4]   5.00-6.00   sec  4.45 GBytes  38.2 Gbits/sec    0   1.44 MBytes      
[  4]   6.00-7.00   sec  4.54 GBytes  39.0 Gbits/sec    0   1.44 MBytes      
[  4]   7.00-8.00   sec  4.42 GBytes  38.0 Gbits/sec    0   1.44 MBytes      
[  4]   8.00-9.00   sec  4.29 GBytes  36.9 Gbits/sec    0   1.44 MBytes      
[  4]   9.00-10.00  sec  4.30 GBytes  36.9 Gbits/sec    0   1.44 MBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  44.0 GBytes  37.8 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  44.0 GBytes  37.8 Gbits/sec                  receiver

iperf Done.

# 查看网络延迟
root@0cc092f52a00:~# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.043 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.044 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.047 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.047 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.044 ms
^C
--- 127.0.0.1 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6122ms
rtt min/avg/max/mdev = 0.040/0.044/0.047/0.002 ms
可以看出本地带宽在不受限制时大约为37.8GB/s, 而网络延迟的平均值为0.044ms. 受限情况自测, 这里不再展示.
注意事项


  • 在Docker中使用: Docker容器(Ubuntu)默认root用户, 因此使用脚本时需要去掉脚本中的sudo, 此时仍可能提示RTNETLINK answers: Operation not permitted, 这是因为容器没有网络管理权限, 需要在docker run镜像生成容器时加入额外的参数--cap-add=NET_ADMIN 开启权限, 例如:
docker run --cap-add=NET_ADMIN -it --rm imagename bash

  • 在WSL中使用: 由于Windows的原因, WSL中无法使用上述脚本进行网络限制.
参考资料

STACK OVERFLOW
本文使用 Zhihu On VSCode 创作并发布
回复

使用道具 举报

3

主题

7

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-1-7 21:10:52 | 显示全部楼层
6
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表