跳转至

笔记

OpenVPN

实验室OpenVPN使用场景

  1. 首先有一个常年挂网络通的,可以校外网IP直连的机器A。
  2. 使用OpenVPN,将对内网机器的ssh请求,通过A机器转发。

所以如果没有可以校外网IP直连的机器A,OpenVPN是没有意义的。

配置OpenVPN服务器端

google openvpn查看 ubuntu https://ywnz.com/linuxyffq/3952.html

  1. 安装OpenVPN服务
  2. 安装easy-rsa,用来制作证书 wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
  3. 生成CA证书(crt=cert) 有ca.crt和ca.key两个文件
  4. 生成server端证书
    1. KEY_NAME = qszyvpn
    2. 应有qszyvpn.crt、qszyvpn.csr、qszyvpn.key三个文件
    3. 为服务器生成加密交换时的秘钥协议,应有dh2018.pem文件
  5. 生成Client端证书
    1. 应有client1.crt、client1.csr、client1.key三个文件
  6. 修改配置文件server.conf
  7. 配置规则
  8. 运行
    /etc/init.d/openvpn start
    
  9. 查看端口占用
    netstat -tunlp |grep 1194
    

具体服务器端文件生成命令

test on snode0

# 安装
sudo apt-get install openvpn
sudo apt-get install easy-rsa
# 配置easy-rsa
cd /etc/openvpn/server
cp -r /usr/share/easy-rsa/ . 
## 拷贝模板并修改vars的参数
cp vars.example vars
vim vars
# 配置Easyrsa及生成公钥
./easyrsa init-pki
    Note: using Easy-RSA configuration from: ./vars
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /etc/openvpn/server/easy-rsa/pki
./easyrsa build-ca nopass
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:acsa
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /etc/openvpn/server/easy-rsa/pki/ca.crt
"nopass"参数是避免每次都要输入密码,可选项 这一步完成后,在pki目录下会生成ca.crt,pki/private目录下生成ca.key
# 生成服务器私钥和请求
./easyrsa gen-req shaojie nopass
    Common Name (eg: your user, host, or server name) [shaojie]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/shaojie.req
    key: /etc/openvpn/server/easy-rsa/pki/private/shaojie.key
# 拷贝服务器私钥文件到openvpn配置文件目录下
cp pki/private/shaojie.key /etc/openvpn/server
因为同一台服务器即做CA服务器又做VPN服务器,自己给自己签发的时候会生成同名文件,先把服务器的请求文件改个名,再导入请求
# 生成服务器证书
mv pki/reqs/shaojie.req pki/reqs/shaojieServer.req
./easyrsa import-req pki/reqs/shaojieServer.req shaojie
    Using SSL: openssl OpenSSL 1.1.1f  31 Mar 2020
    The request has been successfully imported with a short name of: shaojie
    You may now use this name to perform signing operations on this request.
./easyrsa sign-req server shaojie
将两个shaojie.crt文件和ca.crt文件一起复制到openvpn配置文件目录下
cp pki/ca.crt pki/issued/shaojie.crt /etc/openvpn/server
# 生成加密文件(可选,可以提高VPN安全性),这个比较慢,需要稍等几分钟
./easyrsa gen-dh
    DH parameters of size 2048 created at /etc/openvpn/server/easy-rsa/pki/dh.pem
openvpn --genkey --secret ta.key #生成随机密钥(仅适用于非TLS静态密钥加密模式):--genkey : 生成一个随机密钥作为共享密钥
cp ta.key pki/dh.pem /etc/openvpn/server
至此,服务器端文件:ca.crt dh.pem easy-rsa shaojie.crt shaojie.key ta.key准备好了

openvpn配置文件

# 拷贝解压
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server
gzip -d /etc/openvpn/server/server.conf.gz
vim /etc/openvpn/server/server.conf
# 监听的端口号,默认1194,如果要改的话防火墙也要相应修改。(可选)
port 1194

#TCP或UDP,如改成tcp的话,通常端口相应修改成443
;proto tcp
proto udp

# 设置SSL/TLS根证书(ca)、证书(cert)和私钥(key),记得我的服务器名是axvpn,这里也要相应修改 (必选)
ca ca.crt
cert shaojie.crt
key shaojie.key 

# 指定迪菲·赫尔曼参数。
# 默认是dh2048.pem, 记得我们生成了dh.pem,改下 (必选)
dh dh.pem

# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。 (可选)
# 就是允许客户端访问VPN服务器自身所在的其他局域网
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
push "route 10.111.0.0 255.255.0.0"

# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。(可选)
;push "redirect-gateway def1 bypass-dhcp"

# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。(可选)
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 8.8.8.8"

# 如果有注释的话,取消这句的注释,再加一句  (必选)
#防DDOS攻击,openvpn控制通道的tls握手进行保护,服务器端0,客户端1
tls-auth ta.key 0 # 该文件应该保密
key-direction 0

# 选择一个密码加密算法。
# 该配置项也必须复制到每个客户端配置文件中。 
# 添加SHA256算法
cipher AES-256-CBC
auth SHA256

# 在完成初始化工作之后,降低OpenVPN守护进程的权限, (最好取消注释)
# 该指令仅限于非Windows系统中使用。
user nobody
group nobody

# Notify the client that when the server restarts so it
# can automatically reconnect.
# 如果协议改成了TCP,这里数值要改成0
explicit-exit-notify 1

#推送一条路由信息给客户端
#推送路由,若是推送失败,需要检查server 是否设置正常,该故障我遇到过,设置ifconfig-pool了,发现推送失效
push "route 192.168.11.0 255.255.255.0" #(即这个网段的IP的信息都经过VPN)

#记录日志,每次重新启动openvpn后追加原有的log信息
log-append /var/log/openvpn.log

配置OpenVPN客户器端

或者设置isc.ovpn(中间两项是client的)

ca ca.crt
cert ???.crt
key ???.key 
tls-crypt tc.key
OneDrive下有snode6的ovpn文件

具体客户器端文件生成命令

# 生成客户端私钥和请求
./easyrsa gen-req tsjclient nopass
    Common Name (eg: your user, host, or server name) [tsjclient]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/tsjclient.req
    key: /etc/openvpn/server/easy-rsa/pki/private/tsjclient.key
# 同理生成证书
mv pki/reqs/tsjclient.req pki/reqs/tsjclient2.req
./easyrsa import-req pki/reqs/tsjclient2.req tsjclient
./easyrsa sign-req client tsjclient
# 保存所需密钥、证书和之前的ta.key ca.crt
cp pki/private/tsjclient.key pki/issued/tsjclient.crt ta.key pki/ca.crt ../../client

OpenVPN的查看

sudo service openvpn status
 openvpn.service - OpenVPN service
     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2021-04-24 20:40:13 UTC; 2 months 22 days ago
   Main PID: 1691 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 154190)
     Memory: 0B
     CGroup: /system.slice/openvpn.service

Warning: journal has been rotated since unit was started, output may be incomplete.
$ cat server.conf
    local 202.38.73.26
    port 1194
    proto udp
    dev tun #tun路由模式,tap桥模式,据说tun效率高于tap,但是tun只能转发IP数据,tap是二层可以封装任何协议,window下只有tap模式
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    tls-crypt tc.key # 新加入 ,不使用 tls-auth ta.key 0 改用 tls-crypt tc.key openvpn 2.4 版的新參數
    topology subnet # OpenVPN默认的拓扑方式是net30:表示掩码30位,有地址浪费
    server 10.8.0.0 255.255.255.0 #定义分配给客户端的IP段,服务端自己默认使用第一个可用地址
    ifconfig-pool-persist ipp.txt #在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
    # push表示推送,即将配置推送给客户端,让客户端也使用
    push "redirect-gateway def1 bypass-dhcp" #重定向默认网关 此设置将路由/强制所有流量通过VPN。
    push "dhcp-option DNS 202.38.64.56" #指定客户端使用的主DNS
    push "dhcp-option DNS 202.38.64.17" #指定客户端使用的备DNS
    server-ipv6 2001:0db8:ee00:abcd::/64
    push "route-ipv6 2001:da8:d800:811:ae1f:6bff:fe8a:e4ba/64"
    push "route-ipv6 2000::/3"
    keepalive 10 120 #表示每隔10秒ping一下客户端/服务端,若是120秒内无响应,认为down,随即重启openvpn(强烈开启)
    auth SHA512 # 加密算法
    cipher AES-256-CBC
    user nobody # 待openvpn初始化完成后,将其降级为nobody权限运行
    group nogroup
    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
    persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
    status openvpn-status.log #状态文件:定期(默认60s)把状态信息写到该文件,以便自己写程序计费或者进行其他操作(需要关闭selinux)
    verb 3 #日志记录级别,可选0-9,0只记录错误信息,4能记录普通的信息,5和6在连接出现问题时能帮助调试,9显示所有信息,甚至连包头等信息都显示(像tcpdump) 
    crl-verify crl.pem # crl证书 ./easyrsa gen-crl产生,默认180天过期
    explicit-exit-notify # 如果协议改成了TCP,这里数值要改成0
OpenVPN配置文件通常位于/etc/openvpn中,通常命名为*.conf。 server.conf是规范的;客户端配置文件名通常类似于.conf

subnet(子网拓扑)

注意用户ccd文件固定ip时候写法变成了:

ifconfig-push 10.8.0.3 255.255.255.0
10.8.0.3是给VPN用户分配的虚拟IP,其服务端是server 10.8.0.0 255.255.255.0,也就是10.8.0.0/24,用户只能获取到10.8.0.X的虚拟IP,去掉10.8.0.1、10.8.0.255就只剩下253个可分配的IP池了。

重定向默认网关

为什么要重定向网关:vpn客户端是经常出差的,网络环境不安全,希望它将所有流量传到公司,经公司出口

其中包含的flags有"local autolocal def1 bypass-dhcp bypass-dns block-local ipv6 !ipv4"(多个标志之间用空格分隔),

推荐使用def1,它使用0.0.0.0/1和128.0.0.0/1而不是0.0.0.0/0来覆盖默认网关,即有新路由也保留原始默认网关,只是优先匹配而已

block-local 是表示当客户端拨入后,阻断其除与本地网关的访问外,本地的其他IP都不允许访问

PKI

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。

  1. PKI的核心是身份证明书的发行
  2. PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库/证书库”。这三个东西加起来,就是PKI的主要构成要素。
  3. 证明书是被存放在硬盘或者IC卡里面的。证明书的文件构造是一种叫做 X.509 的协议规定的。另一方面,认证机关也其实就是一个网络应用程序。
  4. PKI提供的证明书可以用来 身份确认 和 通信加密。
  5. 用“证明书中的密钥”加密过的内容,只能用自己才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给自己的内容被他人窃取的话,他人也无法解密。
  6. 在PKI机制中,放在“证明书里面的密钥”可以被任意自由分发,这里的“证明书里的密钥”被叫做“公开密钥(Public Key)”。与此相对,本人保管的那个“私人的密钥”就要做“私有密钥(Private Key)”。
  7. 认证机关的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。
  8. 在技术上,伪造证明书是非常简单的。所谓假的证明书,比如说有一个所谓的“比尔的证明书”,但是里面含有的公开密钥是史提芬的公开密钥。那么,别人发给比尔的信息,史蒂芬可以解密,反而比尔自己不能解密。

如何查看OpenVPN已连接的用户

将标志--management IP port [pw-file]添加或将相同的指令添加到您的中server.conf,例如:

management localhost 7505

这将允许您远程登录到该端口,并为您提供要运行的命令列表:

telnet localhost 7505

help

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

5分钟让你知道什么是PKI

https://www.wsfnk.com/archives/698.html

USTC Network Information Center

科大各个校区的IP

  1. 根据中国各地IP分布图
  2. 科大的IP如下,但是我还是不知道是哪个区的
    1. 114.214.160.0 114.214.255.255 我的IP在这,这可能是西区
  3. 西区活动中心机器IP
    1. 210.45.112.144
    2. 202.38.72.23 中国科学技术大学教育网
    3. 222.195.72.118
  4. 瀚海机器
    1. 211.86.151.101
  5. wlt之前有个各网络出口,现在403了

如何根据IP确定地址(比省市更具体)

http://ip.yqie.com/ip.aspx?ip=210.45.112.144

只能查询到都是科大的地址

如何判断IP是动态还是静态

vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=dhcp 说明是DHCP 获得的地址 可是机器上就没有/etc/sysconfig/这个目录???

科大网络提供哪些服务

只有校内教工才可以申请域名。

个人主页ftp系统服务

  1. 教工服务器的域名为 staff.ustc.edu.cn, IP 地址为 202.38.64.11。 个人主页网络地址形式为 http://staff.ustc.edu.cn/~username 。 学生服务器的域名为 home.ustc.edu.cn, IP地址为 202.38.64.10。 个人主页网络地址形式为 http://home.ustc.edu.cn/~username 。
  2. 这两台服务器均支持 IPv6访问,域名分别是 staff6.ustc.edu.cn 和 home6.ustc.edu.cn 。
  3. 出于安全考虑,个人主页不支持 php 等服务器端程序。
  4. 用命令行方式登录 FTP 系统时会提示用户的使用情况(注:有些 ftp客户程序如IE不显示这些消息),如提示“Login OK, used 11M of 200M.”

而且我发现科大的IP都属于"国内免费IP地址"指中国教育和科研网免费地址列表范围内的IP地址。列表

主页代理是什么?

没有主页代理以前,用户的主页放在某台计算机上,可以被访问的范围就取决于这台计算机的IP地址开通的范围。利用主页代理技术,Internet上所有的计算机都可以通过域名访问用户的主页,而且没有流量费。

主页代理要求用户为自己的主页申请一个域名,指向网络中心的主页代理服务器,并把自己的主页放在校园网络上的某台计算机(不含宿舍网络、VPN以及无线上网的计算机 )上。当网络上的某台计算机通过域名访问到网络中心的主页代理服务器时,主页代理服务器就会从用户的计算机上把主页内容取过来,并返回给访问的计算机。

静态IP出校管理

telnet 202.38.64.59 8888
    Your IP is 202.38.73.26:

    Sorry, your IP has no right to go out USTCnet.
    Connection closed by foreign host.

电子邮件

我校邮件系统的主页网址是 http://email.ustc.edu.cn(普通,非SSL加密)和 https://mail.ustc.edu.cn(SSL加密),供用户免费使用,默认,教师用户空间为4GB,学生用户空间为500MB。

另:各有1GB作为“网络存储”(即“网络磁盘”)用于存放用户的个人文件;具有个人主页和FTP服务,详见个人主页/FTP系统。

学生毕业离校或者教工离职半年后,邮箱可以继续使用,但容量将会缩减,个人主页和FTP系统权限也取消。

我校邮件系统支持POP3/IMAP收信协议和SMTP发信协议,IP地址同为202.38.64.8,设置时需要身份验证,用户名和密码同邮件。

电子邮件地址形式为: 教工:@ustc.edu.cn 学生:@mail.ustc.edu.cn

需要进一步的研究学习

linux如何判断IP是动态还是静态

参考文献

https://netfee.ustc.edu.cn/faq/index.html#netacctypes

XeonScalable

Skylake-SP微架構 Mesh Interconnect Architecture

首次嘗試採用了全新網格互連架構(Mesh Interconnect Architecture),以取代前面幾代微架構採用的環狀(Ring)互連設計,可以在增加核心數的同時,也能夠維持很快存取資料,以及支援更高記憶體頻寬的需求。

Caching and Home Agent

The LLC coherence engine and Home agent (CHA) merges the caching agent and home agent (HA) responsibilities of the chip into a single block. In its capacity as a caching agent the CHA manages the interface between the core the IIO devices and the last level cache (LLC).

NUMA架构、非統一記憶體存取架構 (Non-uniform memory access)中最重要的两个部分是:QPI architecture和memory subsystem。

LLC(一般指L3 Cache)是memory subsystem中最为重要的一个组成部分。Sandy Bridge架构之后,每个core都有自己的LLC(last level cache),然后通过一个ring on-die Interconnect来联通。

Snoop Filter

SnoopFilter,探听过滤器是为了在多核心乃至多处理器的协同工作时,保持缓存一致性(CacheCoherent)。

在统一总线架构中,一个处理器的所有操作都可以被其他处理器看到,因此处理器可以利用一种叫做Snoop(侦听)的操作来监视总线上的缓存操作指令,当侦听到其他处理器的操作涉及到本处理器上的共享缓存页面的时候,就可以进行相关的操作来保持缓存一致性(通常,就是使本地的缓存页面变为Invalid无效)。

Skylake-SP core

如图,在Skylake core的基础上加入了AVX和额外的L2 cache

Skylake core

可以看见寄存器都在绿色的Scheduler里

FMA指令集

FMA指令集(英语:Fused-Multiply-Add,即积和熔加运算)是x86架构微处理器上的指令集。FMA指令集是128位和256比特的流式单指令流多资料流扩展集(SSE)指令集,以进行积和熔加运算。[1]FMA指令集允许创建新的指令并有效率地执行各种复杂的运算,可结合乘法与加法运算(即进行积和熔加运算),通过单一指令执行多次重复计算,从而简化程序,从而使系统能快速执行绘图、渲染、照片着色、立体音效,及复杂向量运算等计算量大的工作。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

架构的手册 https://github.com/RRZE-HPC/likwid/wiki/SkylakeSP#fixed-purpose-counters

ServerLogin

ip a输出的含义

ip a = ip address 1. lo是linux中的虚拟网络接口 同一台机器的不同进程进行通信时会用到。实现了同一台机器的进程之间的socket通信。虚拟网络接口不需要驱动程序。 1. link/ether是二层协议 mac地址: ac:1f:6b:8a:e4:ba 广播地址:ff:ff:ff:ff:ff:ff 3. inet(v4)是三层协议 ip地址:202.38.73.26/24 广播地址:202.38.73.255 4. inet6是三层协议 ipv6地址:fe80::ae1f:6bff:fe8a:e4ba/64

名词解释

  1. LOWER_UP 是物理层链路标志(网络层以下的层,IP 一般位于此层)。 LOWER_UP 表示插入了以太网电缆并且设备已连接到网络。
  2. LOOPBACK 接口不与其他主机通信。 通过它发送的所有数据包都将被返回,只能接收被退回的数据包。
  3. BROADCAST——该设备具有向共享同一链路的所有主机发送数据包的功能。一个典型的例子是以太网链路。
  4. POINTOPOINT——链路只有两端,每一端连接一个节点。发送到此链接的所有数据包都将到达对等方,我们收到的所有数据包都来自这个对等方。
  5. NBMA 如果 LOOPBACK、BROADCAST 和 POINTOPOINT 均未设置,则假定接口为 NMBA(非广播多路访问)。这是最通用的设备类型,也是最复杂的设备类型,因为连接到 NBMA 链接的主机无法在没有额外配置信息的情况下发送给任何人。
  6. MULTICAST -- 是一个咨询标志,指示接口知道多播,即将数据包发送到相邻节点的某个子集。广播是多播的一种特殊情况,其中多播组由链路上的所有节点组成。需要强调的是,软件不得将缺少此标志解释为无法在此接口上使用多播。根据定义,任何 POINTOPOINT 和 BROADCAST 链路都是多播的,因为我们可以直接访问所有邻居,因此可以直接访问它们的任何部分。当然,由于费用高,不建议在纯广播链路上使用高带宽组播传输,但并非严格禁止。
  7. the loopback “lo,” the ethernet以太网(以太网是一种计算机局域网技术) “eth0,” and the WiFi “wlan0.”
  8. mtu 1500:``maximal transfer unit''最大传输单位为1500
  9. qdisc :``queuing discipline''显示了接口上使用的排队算法。
  10. noqueue 表示该接口不排队任何东西,
  11. noop 表示该接口处于黑洞模式,即发送给它的所有数据包都被立即丢弃。
  12. mq 调度器做两件事: 将设备 TX 队列作为类,允许将不同的 qdiscs 附加到它们,这些 qdiscs 被嫁接到 TX 队列 当前所有设备队列根 qdiscs 的累积统计信息 它默认用于多队列设备而不是常规的 pfifo_fast qdisc,但也可以手动附加以在附加非多队列(共享)qdisc 后恢复多队列行为。
  13. state UP:网络接口已启动
  14. group default:接口组
  15. qlen 1000:传输队列长度
  16. scope global eth0: 任何地方有效
  17. scope link: 只在这个设备有效
  18. scope global dynamic mngtmpaddr noprefixroute 大概是动态的时刻变化来保证隐私的
  19. valid_lft forever: 有效生命周期
  20. preferred_lft forever: 首选寿命

其他名称解释

接口标志汇总在尖括号中: 1. PROMISC——设备监听链路上的所有流量并将其提供给内核,即使这些流量不是发往我们的,不是广播的,也不是发往我们所属的多播组的。 通常这种模式只存在于广播链路上,用于网桥和网络监控。 2. ALLMULTI -- 设备接收在链路上徘徊的所有多播数据包。 此模式由多播路由器使用。 3. NOARP——这个标志与其他标志不同。 它没有不变的值,其解释取决于所涉及的网络协议。 通常,它表示设备不需要地址解析,并且软件或硬件知道如何在没有协议栈任何帮助的情况下传送数据包。 4. DYNAMIC -- 是一个咨询标志,指示接口是动态创建和销毁的。 5. SLAVE——这个接口绑定到一些其他接口以共享链接容量。

广播地址是什么

网络中的每个机器的网卡都接收所有的包,而网络层以后就只接收两种包了, 一种是目标地址是自己的,另外一种就是目标地址是广播地址的, 广播地址是你的网络号和决定的,除了网络号部分的地方全是1(二进制的 1)即可 举例: 你的ip是192.168.1.1 掩码是255.255.255.0 那么你的网络号是192.168.1 而你的广播地址就是:192.168.1.255 了。 那么你的操作系统会把发向 192.168.1.1 和 192.168.1.255 的包接收下来处理,那么发送 这个广播消息的机器就是利用“广播地址在子网中传播信息”了。

什么情况下能访问私有地址?

处于同一个网关下

怎么判断网络处于同一个网关下

想判断两个ip地址是不是在同一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中。

网关、路由器、三层交换机是什么,区别

网关

网关是一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。

换句话说,路由器可以实现网关的功能,但是路由器功能不仅仅是实现网关;网关可以由路由器实现,但是也不仅仅是由路由器实现

与网桥只是简单地传达信息不同,当信息到达网关以后,网关要对信息重新进行加工,以适应目的系统的需求。

交换机

交换机:工作在数据链路层,原理等同于多端口网桥。作用是连接数个相同网段的不同主机,减少网内冲突,隔离冲突域。利用存储转发和过滤技术来从物理上分割网段。

路由器(Router)

是连接因特网中各局域网、广域网的设备,是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。

当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。

因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。它会根据信道的情况自动选择和设定路由,以***路径,按前后顺序发送信号。

路由器和交换机的区别

路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。

chivier服务器动态公网IP说法存疑

服务器开机的时候也没有连wlt,也有IP

服务器IP到底是不是内网

看ip a可以判断

修改DNS服务器,从外面能不能访问到内网

并不能,DNS服务器只是域名与IP地址的映射,你需要链接到网关才能找到内网ip

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://netbeez.net/blog/linux-interface-information/

http://linux-ip.net/gl/ip-cref/ip-cref-node17.html

网络所属网关判断 https://network.51cto.com/art/201901/591192.htm

https://blog.csdn.net/miracleon/article/details/102250801

IPCC Preliminary SLIC Analysis part3 : Hot spot analysis

vtune hotspots

vtune threading

GUN profile gprof + gprof2dot graphviz

g++ -pg -g -std=c++11 SLIC.cpp -o SLIC
./SLIC # generate gmon.out
less gmon.out
    "gmon.out" may be a binary file.  See it anyway?
gprof ./SLIC
gprof ./SLIC|  /home/shaojiemike/github/isc21-gpaw/LogOrResult/profile/gprof2dot.py -n0 -e0 | dot -Tpng -o output.png
没什么用

接下来

  1. 向量化
  2. 并行化

什么时候OpenMP并行,什么时候MPI并行

根据具体资源情况来,貌似是一个节点,那可以从OpenMP入手

自动并行化

Intel编译器的自动并行化功能可以自动的将串行程序的一部分转换为线程化代码。进行自动向量化主要包括的步骤有,找到有良好的工作共享(worksharing)的候选循环;对循环进行数据流(dataflow)分析,确认并行执行可以得到正确结果;使用OpenMP指令生成线程化代码。

/Qparallel:允许编译器进行自动并行化

/Qpar-reportn:n为0、1、2、3,输出自动并行化的报告

说明:/Qparallel必须在使用O2/3选项下有效

c++向量化怎么实现

什么是向量化

所谓的向量化,简单理解,就是使用高级的向量化SIMD指令(如SSE、SSE2等)优化程序,属于数据并行的范畴。

如何对代码向量化

向量化的目标是生成SIMD指令,那么很显然,要对代码进行向量化,

第一是依靠编译器来生成这些指令;

第二是使用汇编或Intrinsics函数。

自动向量分析器

Intel编译器中,利用其自动向量分析器(auto-vectorizer)对代码进行分析并生成SIMD指令。另外,也会提供一些pragmas等方式使得用户能更好的处理代码来帮助编译器进行向量化。

  1. 基本向量化 /Qvec:开启自动向量化功能,需要在O2以上使用。在O2以上,这是默认的向量化选项,默认开启的。此选项生成的代码能用于Intel处理器和非Intel处理器。向量化还可能受其他选项影响。由于此选项是默认开启的,所以不需要在命令行增加此选项。

  2. 针对指令集(处理器)的向量化 /QxHost:针对当前使用的主机处理器选择最优的指令集优化。

对于双重循环,外层循环被自动并行化了,而内层循环并没有被自动并行化,内层循环被会自动向量化。

影响向量化的因素
  1. 首先当然是指令集是否支持
  2. 内存对齐相关的问题,也是影响向量化的,很多的SSE指令都要求内存是16字节对齐,如果不对齐,向量化会得到错误结果。

如何判断向量化成功

看汇编代码 没成功需要手动内联向量化汇编代码???

Intel 编译器的向量化实现

AMD 编译器向量化实现

AMD 与 Intel 编译器的区别

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://blog.csdn.net/gengshenghong/article/details/7027186

https://blog.csdn.net/gengshenghong/article/details/7034748

https://blog.csdn.net/gengshenghong/article/details/7022459

IPCC Preliminary SLIC Analysis part2 : Run process

VScode Debug Run

Debug Process

  1. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  2. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);
  3. 参数的最后两项是required number of superpixels和weight given to spatial distance(空间距离的权重)也就是K=200
  4. 串行初始化赋值klabels[s] = -1
  5. DoRGBtoLABConversion(ubuff, m_lvec, m_avec, m_bvec);对于整个图像:重载的浮点版本
    1. 提取第一个像素rgb(229,226,218)
    2. 串行RGB2LAB( r, g, b, lvec[j], avec[j], bvec[j] );
    3. int变成double数组
  6. 声明perturbseeds true,edgemag
  7. DetectLabEdges(m_lvec, m_avec, m_bvec, m_width, m_height, edgemag);
    1. 串行对每个像素进行\(\(dx=(l[i-1]-l[i+1])^2+(a[i-1]-a[i+1])^2+(b[i-1]-b[i+1])^2\)\)\(\(dy=(l[i-width]-l[i+width])^2+(a[i-width]-a[i+width])^2+(b[i-width]-b[i+width])^2\)\)\(\(edgemag[i]=dx+dy\)\)为了之后计算6.5-PerturbSeeds
    2. 值得注意的是i的取值说2600 = width+1是第二行第二列,一直到倒数第二行倒数第二列
  8. GetLABXYSeeds_ForGivenK(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, K, perturbseeds, edgemag);
    1. int step = sqrt(double(sz)/double(K)); \(S=\sqrt{N/k}=225\)
    2. xoff 与 yoff 为一半 112
    3. int X = x*step + (xoff<<(r&0x1));六角网格???
    4. 串行对每个绿圈存了颜色坐标五元组在kseedsl/a/b/x/y 有196个中心
    5. PerturbSeeds(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, edgemag);
      1. 串行对这196个中心和周围8个位置进行,最小edgemag值的寻找。
      2. 并更新196个中心的位置
  9. int STEP = sqrt(double(sz)/double(K)) + 2.0;
  10. PerformSuperpixelSegmentation_VariableSandM(kseedsl,kseedsa,kseedsb,kseedsx,kseedsy,klabels,STEP,10);
    1. if(STEP < 10) offset = STEP*1.5;
    2. DBL_MAX ? doubel_max 1.7976931348623157e+308
    3. 变量sigma , distxy, maxxy
    4. double invxywt = 1.0/(STEP*STEP);
    5. 迭代10次
      1. 对中心聚类
        1. 串行对这196个中心首先划出[2S*2S]的区域(上下左右offset或者STEP)
        2. 再串行对这\(4S^2\)的区域的每个像素,计算与其区域中心的距离 \(\(dist = \frac{(l-kl[n])^2+(a-ka[n])^2+(b-kb[n])^2}{maxlab[n]}+\frac{(x-kx[n])^2+(y-ky[n])^2}{S^2}\)\)
        3. 注意maxlab[n]初始值是10*10,根据dist更新该像素的距离中心的最小距离数组distvec,和指向的最近中心klable由于是2S*2S,相邻中心的周围区域是有一部分重叠的(如图中黄色荧光笔区域),相当于聚类到各个中心,注意由于中心对自己dist=0,是不可能某一中心距离其他中心更近。
      2. 串行将maxlab与maxlab更新为该聚类集合里的最大值
        1. 注意maxlab与maxlab都是每个中心维护一个
      3. 质心移动:串行将每个聚类区域的每个点的五元组加到质心上,然后除以聚类区域元素总数来得到新的质心五元组
      4. 迭代10次结束(其实可以判断质心是否不再移动来提前结束)
  11. EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, K);
    1. 串行新数组赋值for( int i = 0; i < sz; i++ ) nlabels[i] = -1;全部标记为未处理
    2. 串行对所有元素进行如下处理
      1. 如果旧index未被处理
        1. 在其左下上右找到已经处理的元素的nlable,将其值保存在adjlable里
        2. 从该元素开始上下左右寻找未处理,而且其klabels值与旧klabels值相同的元素。
          1. 将其nlable值改为lable,应该也达到标记为已处理的效果
          2. 最终效果就是把该元素相邻连接区域klabels值与旧klabels值相同的全部标记
        3. 如果这块相邻区域过小count <= SUPSZ >> 2
          1. 则将其全部元素赋值为adjlable,即并入上块区域
      2. 旧index++。
      3. 最终效果就是所有的元素重新整合聚类,达到消除过小区域与不连续区域的效果
  12. 结果与check.ppm对比
  13. 我以为只要读取lable的分类,大概sz个int
  14. fread(rgb, (w)(h)3, 1, fp);
  15. 作者是傻逼,只用了1/3的空间

skills: size of arrays

a.size()

相关知识

RGB与Lab颜色空间互相转换

Lab颜色空间简介

同RGB颜色空间相比,Lab是一种不常用的色彩空间。1976年,经修改后被正式命名为CIELab。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。

RGB转Lab颜色空间

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

RGB与XYZ颜色空间有如下关系:

LAB与XYZ颜色空间有如下关系: X,Y,Z会分别除以0.950456、1.0、1.088754。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

Deepfake - unravel/Baka Mitai

First way :

https://www.youtube.com/watch?v=_laN9jJO63Q

https://www.youtube.com/watch?v=MXNBtws35WE

Baka Mitai all in one

https://colab.research.google.com/github/AliaksandrSiarohin/first-order-model/blob/master/demo.ipynb#scrollTo=Oxi6-riLOgnm

但是由于上传的文件不能太大,对于unravel可以按照youtube视频的传无声音版本,然后用kapwing在线合成导出。

效果展示1替换

效果展示2替换

效果文件链接

https://raw.githubusercontent.com/Kirrito-k423/Picbed/main/img/final_60eaff63b13be700ab0582c8_20002.mp4

http://pic.shaojiemike.top/PicGo%E4%B8%8B%E8%BD%BD.mp4

PicBed & OSS

PicGo介绍

这是一款图片上传的工具,目前支持微博图床,七牛图床,腾讯云,又拍云,GitHub等图床,未来将支持更多图床。

所以解决问题的思路就是,将本地的文件,或者剪切板上面的截图发送图床,然后生成在线图片的链接,走到哪就可以用到哪。

  1. 创建github仓库
  2. 在设置的最后生成token
  3. 下载PicGo并设置github图床

Cloudflare R2 Storage

对象存储有时也称为 Blob 存储,可以存储任意的大型非结构化文件。我们常用的有 AWS 的 S3、阿里云的 OSS、腾讯云的 COS、华为云的 OBS,都是对象存储,他们都可以为我们提供延迟一致、持久性高和容量无限的服务,免去了我们本地文件系统的共享、备份等痛点。

最为经典的是 AWS 的 S3(Simple Storage Service),刚刚推出的时候是革命性的服务,但也带来了新的痛点,上传、存储的费用还可以,但下载也就是取回的时候会被收取流量费,这个费用随着时间的推移,存储的文件越来越多,流量费也变得越来越高

2022年 5月 Cloudflare 就为我们带来了 R2 Storage,基于带宽联盟,为存储对象提供更低成本的存储服务。在后台,R2 自动智能管理数据分层,以在峰值负载时提高性能,并为不经常请求的对象降低成本。

R2 的革命性

在上面我们了解了 Cloudflare R2 Storage 收费项目,发现了什么?只收取存储费用、操作费用,没有流量费用!是的没有流量费用,这就是 Cloudflare R2 Storage 的革命性,依托带宽联盟,做到了零出口费用!5

picbed / OSS compare

  1. github图床,国内连不上
  2. (推荐)七牛申请了免费的证书证书,由于是海外访问还是慢。

  3. one drive虽然能用也能访问,但是速度慢而且操作麻烦,只能一个个传。而且会失效

  4. OSS charge but easy-to-use.

Pricing

Name Storage request operations newwork flow
Cloudflare R2 10GB/monthfree+$0.015/add-GB/month 1Moperations/monthfree+ $4.50 per additional million operations(2) not charge5
Aliyun OSS 4 0.12元/GB/月(1) 0.01元/万次 0.50元/GB
  1. (6GB内不要买套餐,最低配一年9元40GB)
  2. B 类操作费用:每个月一千万次免费额度,超出后每百万次收取 $0.36 的操作费用
reads per object is Class B operations
  1. Class A operations which are more expensive and tend to mutate state.
  2. Class B operations which tend to read existing state.6

Current picbed usage

timestamp storgy Network flow(per month) request operations
Aliyun 231031 395.13MB 21.41GB 61,490
Cloudflare 231124 490MB xxx 9.11k

I need to pay 10RMB each month and the fee grows fast

My choice

  1. First I am not a cross-platform blog writer(1). So If i have a sever machine, i can save my pic in it and no need for picbed
  2. But I use cloudflare + github solution, It will face 3 potential problem
  3. pic set touch the github repository storagy size limits (maybe no limits just recommend less than 5GB2)
  4. cloudflare pages will clone the whole pic-repo after each git push leading to long blog building latency(2)
  5. And the cloudflare pages maybe have a static webfile limits 25MB.3
  6. So I still recommand to use OSS rather than other tricks like using github.

  7. I use blog as my brain cache

  8. cloudflare pages Builds will timeout after 20 minutes.

Old阿里云图床配置

Please read 1

*设定存储空间名 shaojiemike
*确认存储区域 oss-cn-hangzhou
指定存储路径 img/

参考文献

IPCC Preliminary SLIC Analysis

VScode Debug Run

{
    "name": "(gdb) 启动",
    "type": "cppdbg",
    "request": "launch",
    "program": "/home/shaojiemike/github/IPCC/SLIC/SLIC",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${fileDirname}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "gdb",
    "setupCommands": [
        {
            "description": "为 gdb 启用整齐打印",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        }
    ]
}
g++ -g -std=c++11 SLIC.cpp -o SLIC #把调试信息加到可执行文件中,如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

Debug Process

  1. main
  2. LoadPPM 把数据读入imag
  3. 读类型、像素图片长宽 2599 3898
  4. 读最大像素 255(应该是指rgb颜色,比如red只有256种,也就是8位二进制)
  5. 读长宽的像素的rgb到imag返回,imag是2599*3898大小的unsigned int二维数组,每位存24位数2进制数。
  6. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  7. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);//for a given number K of superpixels
  8. 结果与check.ppm对比

skills: watch arrays

*(int(*)[100])labels
*labels@10000

SourceTrail Analysis

Vtune Analysis

需要进一步的研究学习

遇到的问题

参考文献

IPCC Preliminary SLIC test

test on node5

g++ -std=c++11 SLIC.cpp -o SLIC
time ./SLIC
./SLIC  28.46s user 0.52s system 99% cpu 29.027 total
slic

test on amd_256

gcc 10.2.0
[1]    122955 segmentation fault (core dumped)  ./SLIC
我傻逼了,我把cpp移动了,但是输入文件忘记动了
cat ./log/job_436960_rank0_fb0707_0.out
Computing time=21872 ms
There are 0 points' labels are different from original file.

要求

  1. 对slic.PerformSLICO_ForGivenK 函数运行时间进行通用优化
  2. 首先是并行化处理
  3. 读取时间不在计分范围
  4. 可以优化编译选项
  5. 可以改变数据结构与类型
  6. 需保证结果正确
  7. 之后有多组数据

需要进一步的研究学习

遇到的问题

北京超算的机器传文件只能用wincp,而且有时候不行,需要刷新缓存

参考文献