【网络1】协议及相关命令

news2025/1/18 8:38:22

文章目录

  • 1.局域网:CSMA/CD
  • 2.互联网:ARP,DHCP,NAT
  • 3.TCP协议:telnet,tcpdump,syn/accept队列
  • 4.HTTPS协议:摘要(sha、md5、crc)。win对文件MD5校验:certutil -hashfile a.tar.gz MD5。linux:md5sum a.tar.gz
  • 5.linux的route指令:route add
    • 5.1 案例:从ubuntu机器ping 199.199.199.199,配置路由使能通
  • 6.防火墙iptables:(ip+tables)对网络上数据包通过表的形式进行规则的修改
    • 6.1 filter表:3个链
    • 6.2 nat表:4个链
  • 7.BMC虚拟多网口:macvlan是kernel提供的一种网卡虚拟化技术,可将网卡(不一定是真实的物理网卡)虚拟出多个接口,这网卡称为master或父接口,这些虚拟接口和外面环境通信都是通过父接口
    • 7.1 bridge:ip netns add ns001 / ns002
    • 7.2 private:FbOpenbmc和OcpOpenBMC和X86的Ubuntu上验证过, Kernel版本均5.0+
      • 编译Kernel:BMC/CPU OS的Linux Kernel Config里面加CONFIG_MACVLAN=m/y
      • 创建/启动网卡/获取DHCP地址:创建网卡以eth0为目标物理网口,虚拟网口的MAC地址自定义,mode可以选择private不能互通,bridge内部互通等
      • 配置路由表:由于5个网口都被分配在一个网段如10.75.159.0/24(掩码一样),导致linux内部路由会以高优先级的网口如eth0来响应外部的arp/icmp/tcp等各种网络请求(如ping 10.75.159.x都走eth0网卡)。为了达到5个虚拟网口能在同网段以5个独立网口的形式工作需配置路由表
      • 远端服务器检查:ping 10.75.159.117/120/121/125/132
      • 案例:iproute2,设置路由重启后不丢失/etc/network/interfaces:up route add -host 10.1.1.2 dev eth1
    • 7.3 creat_macvlan.sh:macvlan文件夹里file文件夹里有.sh和.service,file文件夹同级有.bb文件


1.局域网:CSMA/CD

1.早期通过双绞线(只能有一台设备进行数据发送),通过10100…高低电平就能表示数据信号。标识:1–>3,3需要表明自己身份是3。

2.通过集线器广播给所有设备,2345自己分辨是我的消费了,不是我的数据包丢弃。如果1,2同时广播,4收到2个消息混合解析不出,导致1,2这两个数据包全没法用。针对上面问题提出CSMA/CD协议:发送前进行载波侦听,检测这链路上有没有其他人正在发送数据,没有的话再进行数据发送防冲突。

hub集线器缺点:1.进行数据的广播会导致带宽利用率较低。2.在链路上同时只能有一个设备发送数据,链路利用率低。3.没有标识,只是广播出去,让设备自己判断是不是自己的,工作效率低。
在这里插入图片描述
3.如下机器1想发到机器3,通过SW寻址到3号口。SW记录了地址(mac地址)和端口(此处端口不是电脑端口而是交换机端口)的映射关系不用广播(集线器),SW用的是网线,里面有8根线,正常情况至少4根线是在工作的,所以实现全双工。

买来交换机里是张空表,怎么建立映射关系?如下机器A插上来后要向B发送数据,发现是空表,确定A是1号口,B找不到就往每个端口发,4号口对B做出了回应,表记录B对应4号口。桥接(如没有映射关系,C和D都对应5,5口转到另一个SW,量大之后不断桥接引起消息洪泛)实现几千条存储,几千条不够至少几十亿。如下mac和端口的映射表不是路由表,局域网(家庭网,校园网等)使用交换机效率高。
在这里插入图片描述
win下ipconfig /all查看无线或有线网的mac地址。
在这里插入图片描述

2.互联网:ARP,DHCP,NAT

SW交换机的映射表只能实现几千存储,如果表中记录满了,新的来会把旧的替代,所以跨网用路由器(也称网关)。如下家庭网是整个网络2,每台机器都有自己的路由表如ubuntu有路由表,路由器也是linux系统也有路由表。

本台电脑的路由表会写默认网关是192.168.0.1(这个点在路由器上),本台电脑就会把数据包发到路由器上,这个路由器自己也有路由表路由到1.52这个网卡,1.52和1.254和1.1在同一个网段下很容易找到。路由器的路由表SW交换机的映射表复杂用到了很多路由算法。
在这里插入图片描述
ping 192.168.1.254可通,那么网络内传输如1.52—>1.254即网络内怎么传数据的呢?同一网段一找就找到这样的说法是错的,若是这样为什么有了IP地址还要mac地址呢?ip地址(抽象地址)不能直接通信,只能用mac地址(真实地址)通信,ARP协议广播询问谁的ip是1.254,1.254收到这询问就会回复一下,说我的地址是1.254,我的mac地址是。。。1.52知道了1.254对应的mac地址就会在mac层进行传输。
在这里插入图片描述
ip的数据就是mac的数据部分,越往上层(往里)ip层包着还有tcp层,ip数据包里数据部分还会有tcp的头,再往上层(往里)还可能有http的头,最后的数据才是我们要传的数据。
在这里插入图片描述
获取mac地址都是通过ARP协议(cat /proc/net/arp),如下ip的源目地址是不变的,一直为0.102和1.254,只有mac地址一直在切换(竖着对比)。有个特例NAT(网络地址转换协议):源地址ip也会进行切换。
在这里插入图片描述
如下手动修改eeprom中mac,和eth无关。

# config_mac
. /usr/local/bin/openbmc-utils.sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

prog=$(basename "$0")
usage()
{
    echo "Usage: $prog <mac>"
    echo
    echo "Examples:"
    echo "  $prog XX:XX:XX:XX:XX:XX"
    echo
    exit 1
}

check_parameter()
{
    mac=$1
    strlen=${#mac}
    if [ $# -ne 1 ] ;then
        usage
    fi
    if [ "$strlen" -ne 17 ] ;then
        usage
    fi
}

set_mac()
{
    mac=$(echo "$mac" | sed 's/://g'| tr '[:a-z:]' '[:A-Z:]')
   /usr/local/bin/fruid-util base --dump /tmp/base_fru.bin
   /usr/local/bin/fruid-util base --modify --PCD2 "$mac" /tmp/base_fru.bin > /dev/null 2>&1
   set_mac_eeprom_wp
   /usr/local/bin/fruid-util base --write /tmp/base_fru.bin > /dev/null 2>&1
   reset_mac_eeprom_wp
}

check_mac(){
    fru_mac=$(/usr/local/bin/fruid-util base |grep "Product Custom Data 2" | awk -F ': ' '{print $2}')
    if [ "$mac" != "$fru_mac" ] ;then
        echo "Set mac fail"
    fi
}

check_parameter "$@"
set_mac
check_mac

root@bmc:~# fruid-util base
Product Custom Data 2     : 78D4F15F171D
root@bmc:~# ./config_mac 78:D4:F1:5F:17:1a
root@bmc:~# fruid-util base
Product Custom Data 2     : 78D4F15F171A

如下上电启动,从eeprom读出mac并写进eth。

# /recipes-plats/network/files/eth1_mac_fixup.sh  
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

count=0
while [ $count -lt 3 ]
do
    str=$(fruid-util cmm | grep "BMC Base Mac address" | awk -F ":" '{print $2}')
    str=$(echo $str |sed 's/ //g')
    if [ ${#str} -ne 12 ];then   # 获取字符串长度
        logger "Loop $count failed to read BMC FRU:$str"
        count=$(($count + 1))
        sleep 1
        continue
    fi
    mac="${str:0:2}:${str:2:2}:${str:4:2}:${str:6:2}:${str:8:2}:${str:10:2}" #中间有冒号

    if [ -n "$mac" -a "${mac/X/}" = "${mac}" ]; then   # mac有值返回true,不用管X
        logger "Loop $count success to configure BMC MAC: $mac"
        #ip link set dev eth1 address "$mac"  
        #在/etc/rc.d/rc.local里加上如下三句,reboot后就不怕MAC复原了
        /sbin/ifdown eth1
        /sbin/ifconfig eth1 hw ether $mac  # modprobe -r e1000  , modprobe e1000 , ethtool -i eth0
        /sbin/ifup eth1  # ifconfig eth0 up , dhclient eth0
        sleep 1
        exit 0
    fi
    count=$(($count + 1))
    sleep 1
done

if [ $count -ge 3 ]; then
    echo "Cannot find out the BMC MAC" 1>&2
    logger "Error: cannot configure the BMC MAC"
    exit -1
fi

vi /etc/sysconfig/network-scripts/ifcfg-eth0 。MACADDR=00:11:22:33:44:55 。改好执行/etc/init.d/network stop ,/etc/init.d/network start。ifconfig eth0 down ,dhclient eth0,ifconfig eth0 up。

# vi /etc/network/interfaces  重启ip不丢失,改完后systemctl restart network
auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
address 10.75.159.201
netmask 255.255.255.0
gateway 10.75.159.1

在这里插入图片描述
如下TCP/IP架构:以太网协议mac:把cpu想要发送的数据封装为以太网协议(网卡完成这功能)。ip协议:实现路径的管理,传输过程中根据想要发送的目标地址,帮我们的报文在网络中选择一条传输路径(路由器完成这功能)。ip协议针对目标是机器与机器之间通信,平时利用网络过程中需要进程与进程的通信,所以传输层(tcp/udp协议)这层封装有必要。

udp:实验室内部交流终端,发信息时效性要高如语音、视频、直播等,丢个一帧两帧影响不大,数据是不停的过来,在ip协议基础上增加了很少一部分功能同时它不是面向连接的,不需要对方给我一个反馈,减少了传输的成本,相对来说时延也小得多。

tcp:传一些重要内容,如发一个公告或给谁发一个文件,这个过程对时效性没那么强,传文件稍微等一会也没事但要求传输的准确不能出错,TCP复杂面向连接
在这里插入图片描述
如下拆包和粘包,Client和Server间的Packet1被拆包,与Packet2粘包:
在这里插入图片描述
如下解决粘包拆包:头/定长/分隔符。
在这里插入图片描述
如下是第一种方法,粘包还是会出现,但可以区分开。
在这里插入图片描述
如下是第三种方法,自定义分隔符。
在这里插入图片描述
交换机 ,二层交换机 ,多接口网桥是一个东西。路由器 ,三层交换机 ,网关是一个东西。
在这里插入图片描述
从一个HTTP请求来看网络分层原理:内网里通过网线进行传输,连接到公网的话会通过光纤进行连接。要实现不同介质间信号的转换,还有从光纤到路由器无线脉冲转换,距离远的话还有信号衰减问题。如下把问题分层,不同层间定义标准化接口让它们间可进行数据通信。
在这里插入图片描述
1.如下右边一个服务器部署了一个静态页面,通过nginx部署在公网上,看下浏览器里有没有域名对应DNS的缓存,有的话直接拿到服务端的ip地址,没有的话去浏览器本地的host文件看有没有配置,没有配置的话才会发起一个DNS请求用来获取服务器ip地址。

2.DNS也是台服务器也有自己的ip地址通常配在自己的操作系统上,这时应用层会构造一个DNS请求报文:应用层会去调用传输层socket的API。传输层会在DNS请求报文基础上加一个UDP的请求头。网络层同样在UDP请求报文基础上加IP的请求头,网络层会将IP请求报文交给数据链路层。数据链路层会将自己的mac头加上去并把对应的请求报文交给下一个机器的mac地址也会加上去。下一个机器的mac地址通过网络层ARP协议找到,ARP会发送一些请求看下你对应的ip地址的mac地址是多少,最后通过物理层物理介质传出去,通常传到路由器上。

3.路由器是三层设备(网络/数据链路/物理)从物理层开始连接,物理层交给数据链路层,数据链路层看下地址是不是给我的,是给我的进行解析,不是给我的就丢弃,报文再传给上面一层网络层,网络层把数据传到下一个路由器的地址是多少,会通过运营商的网络接口传到运营商的路由器上。运营商有自己的DNS服务器,如果配的是运营商自己的DNS服务器的话会直接在这个DNS服务器里找自己对应的域名拿到对应的ip地址,也就是刚请求DNS报文地址,然后原路返回解析直到应用层拿到刚域名对应得ip地址,这样就可以进行HTTP请求报文的发送。再调用传输层协议是TCP参数,同样每到一层加头。
在这里插入图片描述
主机名(hostname)和域名(domain)的区别在于,主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip。域名通常在internet上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析。
在这里插入图片描述

3.TCP协议:telnet,tcpdump,syn/accept队列

如下是TCP报文,Source port源端口如果是发送端的话是随机生成的,tcp三次握手之前要知道对方端口目的Dest port,和服务器建立连接web服务一般80端口如nginx。unused保留字段,CWR到FIN是报文标识flag,标识报文什么类型的,如果把syn的bit位设为1的话,当前报文是同步序列号即建立连接的报文,ack的bit为1代表响应报文。Receive window是当前服务器可接受数据大小窗口的值。
在这里插入图片描述
如下加上TCP协议头就是五元组,基于TCP的基础上就是四元组。如下三次握手主要做了a和b两件事。
在这里插入图片描述
如下服务端先进入listen状态,如nginx的话会监听某个端口(如web服务就是80端口),客户端发送请求前会创建一个数据结构(下面黄色)用来存储要发送的端口号等,客户端报文一发出去,客户端立马进入syn-sent状态,服务端收到syn(Synchronous number,同步序列号)报文时也会在本地创建一个对应的数据结构

客户端可以发送很多TCP报文,每个报文都有自己的随机生成算法生成自己的序列号,所以x+1是对x这个报文的响应。建立连接会消耗非常多系统资源(create tcb…),所以不用时要关闭(四次挥手)。中间SYN和ACK可以合在一起节省流量,也可以拆分开。
在这里插入图片描述
下面通过实验看三次握手怎么进行的:
在这里插入图片描述
如下nc命令会发一个TCP三次握手请求,输入服务器地址和端口。
在这里插入图片描述
在这里插入图片描述
如下查看tcp连接状态,-t参数查看当前tcp连接状态,-p显示进程,-n数字型显示ip和端口。如下就是win系统和linux系统建立的连接。
在这里插入图片描述
如下是tcp四次挥手,关闭连接(客户端或服务端都可以直接关,全双工),主动方会进入time_wait状态,没有2MSL(报文一个来回时间)立马关闭会造成第一(服)个问题:ACK j+1这个报文丢失,服务端没收到ACK会不断重发FIN报文,服务端资源没法释放。第二(客)个问题:关闭连接意味着资源被释放了,那么端口号被其他进程使用,报文到来时根据tcp的四元组恰好碰到刚释放掉那个连接,造成混乱。
在这里插入图片描述

4.HTTPS协议:摘要(sha、md5、crc)。win对文件MD5校验:certutil -hashfile a.tar.gz MD5。linux:md5sum a.tar.gz

Hash散列算法(应用于哈希表和摘要密码学),是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是hash值。这个特定的算法就叫hash算法,hash算法并不是一个固定不变的算法。只要是能达到这个目的的算法都可以说hash算法。例如MD5,SHA,String.hashcode()都是hash算法。

不同的输入可能会得出相同的hash值,那么这种现象称为hash碰撞,无论是采用那种hash算法,hash碰撞都是不可避免的,我们只能通过改进hash算法,把出现碰撞的概率降低。hash英语中的意思是剁碎的食物,反应在计算机领域大概就是把任意数据切割打碎,输出固定长度的数据。
在这里插入图片描述
先解AES,再用AES解image。
在这里插入图片描述
在这里插入图片描述
HTTPS利用摘要(也叫hash散列,用于校验信息完整性,确保文件没被修改)加密(对称【一个密钥】和非对称【2个密钥】)算法完成加密通道。
在这里插入图片描述
如下用到的公私钥都存在Server端。
在这里插入图片描述

5.linux的route指令:route add

如下Gateway指定网关,要访问172.17.0.3这ip,就会根据Destination和Genmask计算出来满足docker0这一行条件。Flags是标识(不重要),U表示正在使用中,G表示第二列Gateway(不是Genmask)不为*即空)H表示指定具体ip(32位掩码,4个255,全掩)而不是网段。default是指访问一个ip都不满足下面两个路由信息条件,走default这条。255.255.0.0掩了16位即172.17开头的会走第二条,255.255.255.0掩了24位。
在这里插入图片描述
PandoraBox.lan其实是个ip,因为在局域网下,默认配置成了域名。172.17.0.7只1跳(直接跳脸上),因为Gateway为*空且都在docker0交换机下。如下命令都是在ubuntu机器上执行,路由信息看该章节最后一张图。
在这里插入图片描述
下面用route add指令添加自己的路由表:两种类型: -net x.x.x.x/xx指定网络/网段,-host x.x.x.x指定具体ip。两种指向:-dev网卡名(指定通过哪个网卡),-gw网关ip(指定通过哪个网关)。
在这里插入图片描述

5.1 案例:从ubuntu机器ping 199.199.199.199,配置路由使能通

先给win机器添加ip,点高级弹出如下最后一张图,填199.199.199.199,255.0.0.0,最后全点击确定。
在这里插入图片描述
未添加路由表时199.199.199.199不属于172.或192.两个网络,所以走了default,到了PandoraBox.lan即路由器网关,继续往上找,光猫也没发现继续往上找,传到了联通,199.199.199.199还没被用或不能被ping。
在这里插入图片描述
在这里插入图片描述

6.防火墙iptables:(ip+tables)对网络上数据包通过表的形式进行规则的修改

6.1 filter表:3个链

man iptables查看有哪些表(table)。filter(过滤器)表【不转发】会将进入当前机器数据包进行过滤,以及从机器出去的数据包,不符合条件不给发出去。nat表【转发】改变目的或源地址和端口。
在这里插入图片描述
上面的表是由链构成,进入和出去配置规则放在链中:filter表自带的三个链:FORWARD链:和nat表相关,路由转发的作用,如下第一行-L(list)。INPUT和OUTPUT链:默认(policy)没有一条规则即都能进来和出去。
在这里插入图片描述
如下在192.168.0.12本机器8081端口上启动服务。
在这里插入图片描述
如下本机器(192.168.0.12)收到一个包,这个包目的地址是8081且是tcp包的话丢弃,tproxy是8081一个别称。
在这里插入图片描述
如下在其他机器访问0.12的8081端口。
在这里插入图片描述
如下删除后又能访问了。
在这里插入图片描述
如上是在input链上进行的防火墙的设置,如下也可以设置output链,将发往0.144包丢弃,如下没有配置端口,所以ssh连接也断了,因为我在0.144win上ssh双向连接到0.12即如下窗口,可修改0.144win的ip地址,再进行ssh连接。
在这里插入图片描述
上面通过-A添加规则,先后顺序是第一条成功了按第一条来,不成功第二条,一直往下匹配,最终也没找到匹配就按照policy。想要当前规则最高优先级用-I(insert),不用-A(append),-I INPUT 5会插在第5条。
在这里插入图片描述

6.2 nat表:4个链

在这里插入图片描述
如下在0.11机器上。
在这里插入图片描述
如下在0.144 win机器上。
在这里插入图片描述
把0.12(本机)的7788端口转发到0.11的7799端口,实现反向代理。这件事分为下面两步:虽然第一条是请求转发过去了,但是响应(第二条)要改为本机,才能发回来。
在这里插入图片描述
如下是在0.12机器shell上,第一行对应上面第一条,第二行对应上面第二条。
在这里插入图片描述
如下是上一行命令执行结果,查看一下FOREARD有没有过滤掉。
在这里插入图片描述
如下重写FORWARD链为ACCEPT即在上面DOCKER-USER规则前面添加一个ACCEPT规则。
在这里插入图片描述
如上不是配置xx.conf的服务不需要重启,随时生效,如下两个都能访问了。
在这里插入图片描述
如下蓝色filter表,橙色nat表。
在这里插入图片描述
在这里插入图片描述

7.BMC虚拟多网口:macvlan是kernel提供的一种网卡虚拟化技术,可将网卡(不一定是真实的物理网卡)虚拟出多个接口,这网卡称为master或父接口,这些虚拟接口和外面环境通信都是通过父接口

7.1 bridge:ip netns add ns001 / ns002

在这里插入图片描述
macvlan模拟的mac不同,如下第一行和第二行创建两个以ens32为父接口的macvlan1和macvlan2虚拟网口。
在这里插入图片描述
如下添加ip,不通原因是bridge模式和父接口(.138)是不通的。
在这里插入图片描述

7.2 private:FbOpenbmc和OcpOpenBMC和X86的Ubuntu上验证过, Kernel版本均5.0+

在这里插入图片描述

编译Kernel:BMC/CPU OS的Linux Kernel Config里面加CONFIG_MACVLAN=m/y

如下在编译的服务器上编译完后,如果找不到就删除build目录重新编译。
在这里插入图片描述
如下在烧录的机器上烧录镜像后,vi第一行.dep文件。
在这里插入图片描述
如下不用insmod kernel/drivers/net/maclan.ko。
在这里插入图片描述

创建/启动网卡/获取DHCP地址:创建网卡以eth0为目标物理网口,虚拟网口的MAC地址自定义,mode可以选择private不能互通,bridge内部互通等

假设生成5个虚拟网口eth0.1-eth0.5命令如下,ifconfig检查5个虚拟网口的IP地址和MAC地址(都不一样):

ip link add link eth0 dev eth0.1 address D6:D2:52:A8:28:28 type macvlan  mode private   
ip link add link eth0 dev eth0.2 address D6:D2:52:A8:28:29 type macvlan  mode private   
ip link add link eth0 dev eth0.3 address D6:D2:52:A8:28:2a type macvlan  mode private   
ip link add link eth0 dev eth0.4 address D6:D2:52:A8:28:2b type macvlan  mode private   
ip link add link eth0 dev eth0.5 address D6:D2:52:A8:28:2c type macvlan  mode private   
ifconfig eth0.1 up
ifconfig eth0.2 up
ifconfig eth0.3 up
ifconfig eth0.4 up
ifconfig eth0.5 up
dhclient eth0.1
dhclient eth0.2
dhclient eth0.3
dhclient eth0.4
dhclient eth0.5

配置路由表:由于5个网口都被分配在一个网段如10.75.159.0/24(掩码一样),导致linux内部路由会以高优先级的网口如eth0来响应外部的arp/icmp/tcp等各种网络请求(如ping 10.75.159.x都走eth0网卡)。为了达到5个虚拟网口能在同网段以5个独立网口的形式工作需配置路由表

在这里插入图片描述

echo "210 eth0table" >> /etc/iproute2/rt_tables    # 210越大优先级越低
echo "220 eth1table" >> /etc/iproute2/rt_tables
echo "230 eth2table" >> /etc/iproute2/rt_tables
echo "240 eth3table" >> /etc/iproute2/rt_tables
echo "250 eth4table" >> /etc/iproute2/rt_tables

ip route add 10.75.159.0/24 dev eth0.1 src 10.75.159.117 table eth0table  # 网段(掩码),ip 
ip route add 10.75.159.0/24 dev eth0.2 src 10.75.159.120  table eth1table
ip route add 10.75.159.0/24 dev eth0.3 src 10.75.159.121 table eth2table
ip route add 10.75.159.0/24 dev eth0.4 src 10.75.159.125  table eth3table
ip route add 10.75.159.0/24 dev eth0.5 src 10.75.159.132 table eth4table

ip route add default dev eth0.1 via 10.75.159.1 table eth0table  # via 网关
ip route add default dev eth0.2 via 10.75.159.1 table eth1table
ip route add default dev eth0.3 via 10.75.159.1 table eth2table
ip route add default dev eth0.4 via 10.75.159.1 table eth3table
ip route add default dev eth0.5 via 10.75.159.1 table eth4table

ip rule add from 10.75.159.117 table eth0table
ip rule add from 10.75.159.120 table eth1table
ip rule add from 10.75.159.121 table eth2table
ip rule add from 10.75.159.125 table eth3table
ip rule add from 10.75.159.132 table eth4table

远端服务器检查:ping 10.75.159.117/120/121/125/132

如下只有发起ping 117才能看到117这个ip,BMC侧IP的MAC地址与远端服务器获取的一致,符合预期。使用tcp方式测试:BMC端(服务端)iperf -s -p port,远端(客户端)iperf -c BMCIP -t 1000 -i 3 -p port。
在这里插入图片描述

案例:iproute2,设置路由重启后不丢失/etc/network/interfaces:up route add -host 10.1.1.2 dev eth1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
hping3 -I eth0 -a 10.75.159.37 -S 10.75.159.138 -p 8080 -i u100 发起攻击,iptables限制端口,限制连接数防止攻击。
在这里插入图片描述

7.3 creat_macvlan.sh:macvlan文件夹里file文件夹里有.sh和.service,file文件夹同级有.bb文件

#!/bin/sh
IP_ROUTEFILE_PATH="/etc/iproute2/rt_tables"
priority_arry=(210 220 230 240)
tablename_arry=(eth0table eth1table eth2table eth3table)

#dynamic routing configuration for macvlan
dynamic_routing()
{
    #Initialize basic network information
    index=0
    for i in $(ifconfig | grep -o ^[a-z0-9.]* | grep -v lo); do
        ipaddr_array[$index]=$(ifconfig "$i" | sed -n 2p | awk '{ print $2 }' | tr -d 'addr:')
        devname_array[$index]=$i
        gateway_array[$index]=$(route | grep "${devname_array[$index]}" | grep 'default' | awk '{print $2}')
        iprange_array[$index]="${ipaddr_array[$index]%[^0-9]*}.0/24"
        index=$((index + 1))
    done

    #Create the table and initialize it
    index=0
    for i in "${tablename_arry[@]}"; do
        tablename=$(cat $IP_ROUTEFILE_PATH | grep "${devname_array[$index]}" | sed -n 1p | awk -F ' ' '{print$2}')
        if [ "$tablename" != "${tablename_arry[$index]}" ]; then
            echo "${priority_arry[$index]} ${tablename_arry[$index]}" >> $IP_ROUTEFILE_PATH
        fi
        ip route flush table "${tablename_arry[$index]}"
        index=$((index + 1))
    done

    #Configure dynamic routing for the table
    index=0
    for i in "${tablename_arry[@]}"; do
        ip route add "${iprange_array[$index]}" dev "${devname_array[$index]}" src "${ipaddr_array[$index]}" table "${tablename_arry[$index]}"
        ip route add default dev "${devname_array[$index]}" via "${gateway_array[$index]}" table "${tablename_arry[$index]}"
        ip rule add from "${ipaddr_array[$index]}" table "${tablename_arry[$index]}"
        index=$((index + 1))
    done
}

###Creat MAC Vlan
ip link add link eth0 dev eth1 type macvlan
ip link add link eth0 dev eth2 type macvlan
ip link add link eth0 dev eth3 type macvlan
ip link set eth1 up
ip link set eth2 up
ip link set eth3 up
sleep 2
#dhclient eth0.01
#dhclient eth0.02
#dhclient eth0.03
dynamic_routing
# macvlan.service
[Unit]
Description=Mac Vlan Server
After=-xyz.openbmc_project.Network.service

[Service]
ExecStart=/usr/bin/creat_macvlan.sh
Type=oneshot

[Install]
WantedBy=multi-user.target
# macvlan.bb
SUMMARY = "Phosphor BMC Macvlan"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"

inherit pkgconfig
inherit obmc-phosphor-systemd

SYSTEMD_SERVICE:${PN} += "macvlan.service"

DEPENDS += "systemd"

SRC_URI += "file://macvlan.service \
            file://creat_macvlan.sh \
            "

do_install() {
    install -d ${D}${bindir}

    install -m 0755 ${WORKDIR}/creat_macvlan.sh ${D}${bindir}/creat_macvlan.sh
}

S = "${WORKDIR}"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【博弈论笔记】第三章 完全且完美信息动态博弈

文章目录 第三章 完全且完美信息动态博弈3.1 动态博弈的表示法和特点3.2 策略的可信性和纳什均衡的不稳定问题3.2.1 相机选择和策略的可信性问题3.2.2 纳什均衡的不稳定问题3.2.3 逆推归纳法 3.3 子博弈和子博弈完美纳什均衡3.3.1 子博弈3.3.2 子博弈完美纳什均衡 3.4 四个经典…

规则引擎--函数式编程和and/or操作符的设计

目录 Java函数编程的一些基础知识BiFunctionBinaryOperatorstream reduce And, Or操作符and 逻辑 的 Combiner 如下:or 逻辑 的 Combiner 如下:and, or的执行 接上一篇博文&#xff1a;规则引擎–规则逻辑形如“1 & (2 | 3)“的抽象&#xff0c; 重点分析一下And, Or操作符…

反射(reflection)详细讲解

反射(reflection) 反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息&#xff08;比如成员变量&#xff0c;构造器&#xff0c;成员方法等等&#xff09;&#xff0c;并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类之后&#xff0c;在堆…

【博弈论笔记】第四章 重复博弈

文章目录 第四章 重复博弈4.1 重复博弈引论4.1.1 重复博弈定义和意义4.1.2 重复博弈的基本概念 4.2 有限次重复博弈4.2.1 两人零和博弈的有限次重复博弈4.2.2 唯一纯策略纳什均衡博弈的有限次重复博弈4.2.3 多个纯策略纳什均衡博弈的有限次重复博弈4.2.4 有限次重复博弈的民间定…

Python学习笔记(3)--字符串定义、拼接、格式化,表达式格式化,数据输入,布尔数据类型,比较运算符

传送门>B站黑马python入门教程 目录 1.字符串定义方式2.字符串拼接3.字符串格式化3.1 常用占位符3.2 格式化时的数字精度控制3.3 快速格式化字符串 4. 表达式格式化5. 数据输入-input语句6.布尔数据类型、比较运算符 1.字符串定义方式 在 python 语法中,字符串有三种定义方式…

Python爬虫 从小白到高手 Urllib

Urllib 1.什么是互联网爬虫&#xff1f; 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那一台计算机上的数据便是蜘蛛网上的一个猎物&#xff0c;而爬虫程序就是一只小蜘蛛&#xff0c;沿着蜘蛛网抓取自己想要的数据 解释1&#xff1a;通过一个程序&#xff0c;根据Url(http…

行为型模式--访问者模式

目录 概述 结构 案例实现 优缺点 优点&#xff1a; 缺点&#xff1a; 使用场景 概述 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这 些元素的新的操作。 结构 访问者模式包含以下主要角色: 抽象访问者&am…

采用SpringBoot+Tinymce实现文章的在线预览和上传

采用SpringBootTinymce实现文章的在线预览和上传 资源在gitee中 输入信息 预览

canvas详解09-像素操作

到目前为止,我们尚未深入了解 Canvas 画布真实像素的原理,事实上,你可以直接通过 ImageData 对象操纵像素数据,直接读取或将数据数组写入该对象中。稍后我们也将深入了解如何控制图像使其平滑(反锯齿)以及如何从 Canvas 画布中保存图像。 #ImageData 对象 ImageData对象…

el-table渲染二级对象数组

1、序言 项目地址如下&#xff1a;https://gitee.com/liu-wenxin/complexELTable.git 想要渲染这样的数据&#xff1a; el-table官网给的例子都是一级对象数组&#xff0c;如果想要渲染二级对象数组&#xff0c;直接 :table tableData 这样el-table渲染是不成功的&am…

RadEx Pro处理电火花数据操作步骤(下)

RadEx Pro处理电火花数据操作步骤&#xff08;上&#xff09;主要讲述RadEx Pro读取电火花数据&#xff0c;查看数据的质量&#xff0c;以及简单的滤波和振幅纠正。 6、海底拾取&#xff0c;建立流程060 seafloor pick Trace Input加载stack数据集 Trace Header Math&#x…

【人工智能】— 维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析

【人工智能】— 维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析 高维数据与维度灾难维度灾难降维为什么需要降维&#xff1f;PRINCIPLE COMPONENT ANALYSIS主成分的几何图像最小化到直线距离的平方和举例主成分的代数推导优化问题计算主成分&#xff08;Princip…

【Pandas】pandas用法解析(上)

目录 一、生成数据表 1.导入pandas库 2.导入CSV或者xlsx文件 3.用pandas创建数据表 二、数据表信息查看 1.维度查看 2.数据表基本信息&#xff08;维度、列名称、数据格式、所占空间等&#xff09; 3.每一列数据的格式 4.某一列格式 5.空值判断 6.查看某一列空值 7…

黑马程序员前端 Vue3 小兔鲜电商项目——(七)详情页

文章目录 路由配置模板代码配置路由链接跳转 渲染基础数据封装接口渲染数据 热榜区域模板代码封装接口渲染数据 图片预览组件封装小图切换大图显示模版代码绑定事件 放大镜效果图片优化 SKU组件熟悉全局组件统一插件化插件化开发插件注册 路由配置 模板代码 创建 src\views\D…

快速排序-详解附Python代码

排序思路 取一个元素P&#xff08;第一个元素&#xff09;&#xff0c;目标是使得元素P归位&#xff1b;列表被元素P分成了两个部分&#xff0c;左边的比P小&#xff0c;右边的比P大&#xff1b;分别再对左右两个部分的列表重复1&#xff0c;2步骤&#xff0c;递归完成排序 评…

7Z010 引脚功能详解

本文针对7Z010芯片&#xff0c;详细讲解硬件设计需要注意的技术点&#xff0c;可以作为设计和检查时候的参考文件。问了方便实用&#xff0c;按照Bank顺序排列&#xff0c;包含配置Bank、HR Bank、HP Bank、GTX Bank、供电引脚等。 参考文档包括&#xff1a; ds187-XC7Z010-X…

前端编写贪吃蛇游戏-附详细代码

当我们在前端编写贪吃蛇游戏时&#xff0c;可以按照以下步骤进行&#xff1a; 先看截图&#xff1a; 设置游戏板&#xff1a;创建一个HTML元素作为游戏板&#xff0c;可以使用<div>元素&#xff0c;并为其设置合适的样式。 绘制蛇和食物&#xff1a;使用JavaScript代码…

【Linux 基础入门 + Java项目部署】

文章目录 Linux 基础入门1 Linux 简介1.1不同应用领域的主流操作系统1.2 Linux发展历史与 Linux系统版本 2 Linux 安装2.1 安装方式介绍2.2 安装Linux2.3 网卡设置2.4 安装SSH连接工具 Linux和Windows目录结构对比3 Linux 常用命令3.1 Linux命令初体验3.2 文件目录操作命令lscd…

7A50T 引脚功能详解

本文针对7A50T芯片&#xff0c;详细讲解硬件设计需要注意的技术点&#xff0c;可以作为设计和检查时候的参考文件。问了方便实用&#xff0c;按照Bank顺序排列&#xff0c;包含配置Bank、HR Bank、HP Bank、GTP Bank、供电引脚等。 参考文档包括&#xff1a; ds181_Artix_7_D…

day59_layuimini_crud

今日内容 一、Layui Mini 零、 复习昨日 写在前面的前面 项目开发模式 前端后端数据怎么传输?前端发数据到后台 from,a,ajax, 后端发数据到前端 以前是使用servlet技术,将数据存入请求域/会话域,后台跳转页面到前端,前端jsp页面展现数据现在使用前后分离技术,后端将数据封装成…