Linux高级路由---策略路由/捆绑/网桥

1.策略路由
    基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址来选择转发路径...         
    #/etc/iproute2/rt_tables 此文件存有linux 系统路由表默认表有255 254 253三张表
      255  local 本地路由表 存有本地接口地址,广播地址,已及NAT地址.
           local表由系统自动维护..管理员不能操作此表...
      254  main 主路由表 传统路由表,ip route若没指定表亦操作表254.一般存所有的路由..
           注:平时用ip ro sh查看的亦是此表设置的路由.
      253  default  默认路由表一般存放默认路由...
           注:rt_tables文件中表以数字来区分表0保留最多支持255张表
    路由表的查看可有以下二种方法:
      #ip route list table table_number

#ip route list table table_name

路由表添加完毕,即可在策略路由表内添加路由例:

#ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4

注:发往子网192.168.1.0/24的数据包通过分类4转发配合tc使用,后文有介绍讲解...

#ip route add default via 192.168.1.1 table int1

#ip route add 192.168.1.0/24 via 192.168.1.1 table int2

#ip route add 172.16.0.2/16 via 172.16.0.1 table int3

注:各路由表中应当指明默认路由,尽量不回查路由表.路由添加完毕,即可在路由规则中应用..
    #ip rule sh 显示路由规则
      0:      from all lookup local
      32766:  from all lookup main
      32767:  from all lookup default
    进行路由时,正是根据路由规则来进行匹配,按优先级(pref后数值)从高到低匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的..     
    策略路由一般手工添加路由表,路由表的添加只需编辑rt_tables文件,规定表序号,表名即可..
    ip rule规则添加示例:
      #ip rule add from 192.168.1.112/32 [tos 0x10] table test2 pref 999 prohibit
      #ip rule add to 192.168.1.2 pref 1000 table test1
      #ip rule add from 192.168.1.0/24 pref 1001 table test1
      #ip rule add [from 0/0] table test1 pref 1003
      #ip rule add fwmark 1 pref 1002 table test2  此句型配合iptables -t mangle应用.如先对数据

包作标记:

#iptables -t mangle -A PREROUTING -p tcp -m multiport

--dports 80,8080,20,21 -s 192.168.1.0/24 -j MARK --set-mark 1    
        注:创建完路由规则若需立即生效须执行#ip route flush cache;刷新路由缓冲
    可参数解析如下:
        From -- 源地址
        To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)
      Tos -- IP包头的TOS(type of sevice)域
      Dev -- 物理接口
      Fwmark -- 防火墙参数
    采取的动作除了指定路由表外,还可以指定下面的动作:
        Table 指明所使用的表
       Nat 透明网关

      Prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
      Reject 单纯丢弃该包
      Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息
    具体格式如下:
        Usage: ip rule [ list | add | del ] SELECTOR ACTION
        SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]
        ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
                  [ flowid CLASSID ]
        TABLE_ID := [ local | main | default | new | NUMBER ]

2.网卡捆绑(网关linux+多网卡)

#modprobe bonding mod=1 miimon=200 primary=eth1 创建bond0,模式为1,主网卡eth1..

#ip addr add dev bond$ 10.0.0.1/24 设置bond0的IP

#ifenslave bond0 eth1 eth2 添加绑定的dev

注:mode=0 轮转均衡(默认模式),此模式MAC频繁切换导致交换机负载大..

mode=1 主备模式 用primary指定网卡

mode=4 常用 802.3ad模式,动态链路采集模式.此模式要求SWITCH捆绑..

miimon=ms 每隔多少毫秒查询链路是否有效.

其它参数如:

arp_interval=ms

arp_ip_target=*.*.*.*

另一种网卡捆绑固化方式:

#vi /etc/modules.conf 加入以下行

  alias bond0 bonding

系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0..

#cd /etc/sysconfig/network-scripts

#vi ifcfg-bond0

DEVICE=bond0
        IPADDR=11.0.0.1
        NETMASK=255.0.0.0
        NETWORK=192.168.1.0
        BROADCAST=192.168.1.255
        ONBOOT=yes
        BOOTPROTO=none
        USERCTL=no

#vi ifcfg-eth0  
        DEVICE=eth0
        USERCTL=no
        ONBOOT=yes
        MASTER=bond0
        SLAVE=yes
        BOOTPROTO=none

#vi ifcfg-eth1
        DEVICE=eth0
        USERCTL=no
        ONBOOT=yes
        MASTER=bond0
        SLAVE=yes
        BOOTPROTO=none

#/etc/init.d/network restart 重启网络服务验证网卡的配置信息备份网卡被加上了NOARP标记

#cat /proc/net/bond0/info 查看bond信息

3.网桥(Linux+多网卡)

配置工具 brctl http://bridge.sourceforge.net/  源码包名:bridge-utils-*形式

安装第一步:autoconf 后类同于源码包安装..

例.linu+二网卡eth0 eth1 配置成网桥

配置前去除加入网桥的eth0 eth1的IP

#ifconfig eth0/eth1 down

#ifconfig eth0/eth1 0.0.0.0 up

#brctl addbr br0

#brctl addif br0 eth0 eth1

#ip li set dev br0 up

#brctl showmacs br0 显示网桥MAC
    撤网桥:

#ip li set dev br0 down

#brctl delif br0 eth0 eth1

#brctl delbr br0

网桥接口处亦可进行流量控制,无Ip的linux网桥可有效防御外界的功击,对linux网桥机的总控安全性高...

贴上一篇网桥应用实例,此实例是网桥的一种扩张应用...

脚本名:start_bridge.sh

#!/bin/sh

brctl addbr net1
      brctl addif net1 eth0
      ifconfig eth0 down
      ifconfig eth0 0.0.0.0 up
      ifconfig net1 192.168.5.1 up
      #ip ro del 192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.28

ip ro del 192.168.1.0/24
      #route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.5.2

ip route add default via 192.168.5.2
      echo "1" > /proc/sys/net/ipv4/ip_forward

Linux高级路由需结合iptables才能充分体现其功能的强大,实际工作中的应用多半基于此,当然要熟练掌握Linux高级路由+iptables还需进一步的加强学习和实践的应用...希望感兴趣的朋友能和我一起学习,在实际工作应用中得到发展...

另推荐一篇透明式防火墙的网络文档: http://liuhongdan.bokee.com/6302917.html

Linux流量控制I---无类算法SFQ/TBF

Linux流量控制---tc

Linux流量控制控发不控收,所以只能对产生瓶颈网卡处的发包速率进行控制..而网络瓶颈分析亦为Linux网络流控的第一步...

Linux流量控制分二种:  队列控制(QOS) 瓶颈处的发送队列的规则控制  SFQ PRIO

流量控制(带宽限制) 队列×××  TBF HTB

二种流控算法上分:  无类算法  用于树叶级无分支的队列  SFQ

分类算法  用于多分支的队列  PRIO TBF HTB

下面以二种算法的不同流控分别介绍:

1.队列控制的无类算法 SFQ

SFQ(Stochastic Fairness Queueing 随机公平队列)是公平队列算法家族中的一个简单实现.它的精确性不如其它的方法,但实现了高度的公平,需要的计算量亦很少.

SFQ算法主要针对一个TCP会话或者UDP流.流量被分成相当多数量的FIFO队列中,每个队列对应一个会话.数据按照简单轮转的方式发送, 每个会话都按顺序得到发送机会. 这种方式非常公平,保证了每一个会话都不会没其它会话所淹没.

SFQ之所以被称为"随机",是因为它并不是真的为每一个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去. 因为使用了散列,所以可能多个会话分配在同一个队列里,从而需要共享发包的机会,也就是共享带宽.为了不让这种效应太明显,SFQ会频繁地改变散列算法,以便把这种效应控制在几秒钟之内(时间由参数设定).

注:SFQ只会发生在数据发生拥堵,产生等待队列的网卡上..出口网卡若无等待队列,SFQ亦不起作用...

以下示例即在网卡上建立SFQ:

#tc qdisc add dev eth0 root handle 1: sfq

SFQ参数有perturb(重新调整算法间隔) quantum  基本上不需要手工调整:

handle 1: 规定算法编号..可以不用设置由系统指定..

#tc qdisc sh dev eth0 显示算法

#tc qd del dev eth0 root 删除  注:默认eht0支持TOS

SFQ队列一般用在树叶级,配合其它流量×××算法一并使用...

2.流量控制的无类算法 TBF

令牌桶过滤器(TBF)是一个简单的队列规定:只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量朝过设定值.
  TBF很精确,对于网络和处理器的影响都很小,实现是针对数据的字节数进行的,而不是针对数据包进行,常用于网关限速.

TBF的实现在于一个缓冲器(桶),不断地被一些叫做"令牌"的虚拟数据以特定速率填充着. (token rate).桶最重要的参数就是它的大小,也就是它能够存储令牌的数量. 每个到来的令牌从数据队列中收集一个数据包,然后从桶中被删除.这个算法关联到两个流上——令牌流和数据流,于是我们得到3种情景:
  A.数据流以等于令牌流的速率到达TBF.这种情况下,每个到来的数据包都能对应一个令牌,然后无延迟地通过队列.
  B.数据流以小于令牌流的速度到达TBF.通过队列的数据包只消耗了一部分令牌,剩下的令牌会在桶里积累下来,直到桶被装满.剩下的令牌可以在需要以高于令牌流速率发送数据流的时候消耗掉,这种情况下会发生突发传输.
  C.数据流以大于令牌流的速率到达TBF.这意味着桶里的令牌很快就会被耗尽.导致TBF中断一段时间,称为"越限".如果数据包持续到来,将发生丢包. 此种情况最重要,因为它可以用来对数据通过过滤器的速率进行×××. 令牌的积累可以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致传输延迟直至丢包.

以下示例是在网卡建立TBF:

#tc qd add dev eth1 root handle 1: tbf rate 256kbit burst 10000 latency 50ms

速率256kbit  突发传输10k  最大延迟50ms

#tc -s qd sh dev eth1 统计

#tc qd del dev eth1 root 删除

rate 限制的传输速率 用位来计算

latency 确定了一个包在TBF中等待传输的最长等待时间.
  burst 桶的大小,以字节计.指定了最多可以有多少个令牌能够即刻被使用.

注:管理的带宽越大,需要的缓冲器就越大.在Intel体系上,10兆bit/s的速率需要至少10k字节的缓冲区

才能达到期望的速率. 缓冲区太小导致潜在的丢包.

无类算法除这二种队列以处,另有pfifo_fast(网卡出口默认根队列规定)..经常使用的也就是SFQ/TBF..这二种用法如下:

单纯地降低出口速率,使用令牌桶过滤器.调整桶的配置后可用于控制很高的带宽. 
    链路已经塞满,保证不会有某一个会话独占出口带宽,使用随机公平队列.

当然最要的还是工作中得来的经验,就其应用方面只要能满足需求即可..要做到灵活应用还得大量的实践..

本文档理论说明部分根据HOWTO中文版整理而得,加以工作实践,仅作学习笔记用..呵呵..

Linux流量控制II---分类算法PRIO/CBQ/HTB

Linux流量控制II---分类算法PRIO/CBQ/HTB

分类算法主要作用是可以对多种数据流区别对待.一旦数据包进入一个分类的队列规定,它就得被送到某一个类中分类,对数据包进行分类的工具是过滤器.过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队.每个子类都可以再次使用它们的过滤器进行进一步的分类.直到不需要进一步分类时,数据包才进入该类包含的队列规定排队. 除了能够包含其它队列规定之外,绝大多数分类的队列规定能够流量×××

注:过滤器对数据包进行分类的工具,是从队列规定内部调用的,而不是从别处.(用在分叉的分支上)

列规定家族:根,句柄,兄弟和父辈
  每块网卡都有一个出口"根队列规定",缺省情况下是前面提到的pfifo_fast队列规定.每个队列规定都指定一个句柄,以便以后的配置语句能够引用这个队列规定.除了出口队列规定之外,每块网卡还有一个入口,以便policies进入的数据流.
  队列规定的句柄有两个部分:一个主号码和一个次号码.习惯上把根队列规定称为"1:",等价于"1:0".队列规定的次号码永远是0.类的主号码必须与它们父辈的主号码一致.

数据包如何出队并交给硬件
  当内核决定把一个数据包发给网卡的时候,根队列规定1:会得到一个出队请求,然后把它传给1:1,然后依次传给10:,12:和13:(子类自定义),然后试图从它们中进行dequeue()操作.也就是说,内核需要遍历整颗树, 换句话说,类及其兄弟仅仅与其"父队列规定"进行交谈,而不会与网卡进行交谈.只有根队列规定才能由内核进行出队操作!更进一步,任何类的出队操作都不会比它们的父类更快.我们可以把SFQ作为一个子类,放到一个可以进行流量×××的父类中,从而能够同时得到SFQ的调度功能和其父类的流量×××功能.

1.队列控制的分类算法 PRIO

PRIO分类优先算法(从左至右优先发包),队列规定并不进行×××,它仅仅根据你配置的过滤器把流量进一步细分.你可以认为PRIO队列规定是pfifo_fast的一种衍生物,区别在每个频道都是一个单独的类,而非简单的FIFO.
  当数据包进入PRIO队列规定后,将根据你给定的过滤器设置选择一个类.缺省情况下有三个类,这些类仅包含纯FIFO队列规定而没有更多的内部结构.你可以把它们替换成你需要的任何队列规定. 每当有一个数据包需要出队时,首先处理:1类.只有当标号更小的类中没有需要处理的包时,才会标号大的类.

PRIO配置范例: 
  root 1: prio
  /   |   \
  1:1 1:2 1:3
  |   |   |
  10: 20: 30:
  sfq tbf sfq
  band 0 1 2
  大批量数据使用30:,交互数据使用20:或10:.
  命令如下:
  #tc qdisc add dev eth0 root handle 1: prio
  #此命令立即创建了类: 1:1, 1:2, 1:3 (缺省三个子类)
  #tc qdisc add dev eth0 parent 1:1 handle 10: sfq
  #tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000

注:此为TBF限速的另一写法,前文有讲解.
  #tc qdisc add dev eth0 parent 1:3 handle 30: sfq

主要参数有:(后续有实例)

bands 创建频道的数目.每个频道实际上就是一个类 跟priomap参数配合使用

注:频道是类,缺省情况下命名为主标号:1到主标号:3.如果你的PRIO队列规定是12:,把数据包过滤到

12:1将得到最高优先级. 0频道的次标号是1!1频道的次标号是2,以此类推. 
    priomap 给tc提供过滤器,如不提供PRIO队列规定将参考TC_PRIO的优先级来决定如何给数据包入队.

2.流量×××的分类算法 CBQ

CBQ的工作机制是确认链路的闲置时间足够长,以达到降低链路实际带宽的目的.为此,它要计算两个数据包的平均发送间隔.操作期间,有效闲置时间的测量使用EWMA(exponential weighted moving average,指数加权移动均值)算法,也就是说最近处理的数据包的权值比以前的数据包按指数增加.UNIX的平均负载也是这样算出来的. 计算出来的平均时间值减去EWMA测量值,得出的结果叫做"avgidle".最佳的链路负载情况下,这个值应当是0:数据包严格按照计算出来的时间间隔到来. 在一个过载的链路上,avgidle值应当是负的.如果这个负值太严重,CBQ就会暂时禁止发包,称为"overlimit"(越限). 相反地,一个闲置的链路应该有很大avgidle值,这样闲置几个小时后,会造成链路允许非常大的带宽通过.为了避免这种局面,我们用maxidle来限avgidle
的值不能太大.
  理论上讲,如果发生越限,CBQ就会禁止发包一段时间(长度就是事先计算出来的传输数据包之间的时间间隔),然后通过一个数据包后再次禁止发包.

配置范例:WEB服务器的流量控制为5Mbps,SMTP流量控制在3Mbps上.而且二者一共不得超过6Mbps,互相之间允许借用带宽

#tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8
  #tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate 6Mbit weight

0.6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

这部分按惯例设置了根为1:0,并且绑定了类1:1.也就是说整个带宽不能超过6Mbps.
  #tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate 5Mbit weight

0.5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000
  #tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit rate 3Mbit weight

0.3Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000
    建立了2个类.注意我们如何根据带宽来调整weight参数的.两个类都没有配置成"bounded",但它们都连

接到了类1:1上,而1:1设置了"bounded".所以两个类的总带宽不会超过6Mbps.别忘了,同一个CBQ下面的子

类的主号码都必须与CBQ自己的号码相一致!
  #tc qdisc add dev eth0 parent 1:3 handle 30: sfq
  #tc qdisc add dev eth0 parent 1:4 handle 40: sfq
    缺省情况下,两个类都有一个FIFO队列规定.但是我们把它换成SFQ队列,以保证每个数据流都公平对待.
  #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid

1:3
  #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 25 0xffff flowid

1:4

CBQ流量×××算法相对比较复杂,工作中还常用...示例中的各参数请参阅:HOWTO中文文档..

3.流量×××的分类算法 HTB

HTB(Hierarchical Token Bucket)分层的令牌桶一个分类的令牌桶过滤器,工作原理和相关配置同于TBF..拥有TBF的各项性能,可参阅TBF的工作细节...

配置范例:环境与要求同上述CBQ的例子
  #tc qdisc add dev eth0 root handle 1: htb default 30
  #tc class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k
  #tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k
  #tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k
  #tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k
  #tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
  #tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
  #tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
  #添加过滤器,直接把流量导向相应的类:
  #U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"
  #$U32 match ip dport 80 0xffff flowid 1:10
  #$U32 match ip sport 25 0xffff flowid 1:20

以下实例是我工作中HTB的应用..

1.网关限速

#!/bin/sh

PWD=/home/huaying/net

TC=/sbin/tc

$TC class ls dev eth0

$TC qdisc del dev eth0 root

$TC qdisc add dev eth0 root handle 1: htb r2q 1

U32="$TC filter add dev eth0 parent 1: protocol ip prio 16 u32"

while read line
    do
            ip=`echo $line | awk '{print $1}'`
            limit=`echo $line | awk '{print $2}'`
            $TC class add dev eth0 parent 1: classid 1:$ip htb rate "$limit"kbit burst 1k
            $U32  match ip dst 192.168.1.$ip/32 flowid 1:$ip
    done < $PWD/ip_limit

注:ip_limit分行记录,第一列为ip,第二列为限制的带宽,二列以tables分开..

2.服务器限速

#!/bin/sh

/sbin/tc qdisc del dev eth0 root
    /sbin/tc qdisc add dev eth0 root handle 1:0 htb r2q 1
    /sbin/tc class add dev eth0 parent 1:0 classid 1:1 htb rate 75mbit burst 10k
    /sbin/tc filter add dev eth0 parent 1: protocol ip prio 16

u32  match ip dst 0.0.0.0/0 flowid 1:1
    /sbin/tc class ls dev eth0

最大限制服务器eth0流量在75Mbit/s

本文档理论说明部分根据HOWTO中文版整理而得,加以工作实践,仅作学习笔记用...呵呵.

转载地址:http://blog.csdn.net/liuzhenhua_andy/article/details/7018462

转载于:https://blog.51cto.com/jk409/1093387

Linux高级路由---策略路由/捆绑/网桥相关推荐

  1. 《Linux 高级路由与流量控制手册(2012)》第九章

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 译者序 本文内容来自 Linux Advanced Routing & Traffic Control HOWT ...

  2. linux禁止系统ip源路由功能,linux 高级路由 ip rule

    linux 高级路由即基于策略的路由比传统路由在功能上更强大,使用也更灵活,它不仅能够根据目的地址来转发路径而且也能够根据报文大小.应用或ip源地址来选择路由转发路径从而让系统管理员能轻松做到: 1. ...

  3. linux ip rule table,Linux 高级路由 ip rule / ip rout

    路由策略数据库的规则用于控制选择路由的算法. Internet上采用的路由算法一般是基于数据包目的地址的.理论上,也可以由TOS域决定,不过这没有实际应用.要了解经典路由算法的详细情况请参考RFC-1 ...

  4. Linux高级路由-QOS

    服务质量:在带宽一定的情况下,提供更好的服务质量 多端口使用宽带,在各种服务抢带宽的时候 以太网模型是慢启动模式 延时ssh 吞吐web 先入先出 快速通道和慢速通道 ++++++++++++++QO ...

  5. linux—高级网络配置:网桥

    一.网桥的作用 在之前的实验中,我们大量的使用了虚拟机来作为操作对象.虚拟机是存在与本台主机的,并且受真机kernel的控制.那么数据的传输也必然不能直接传送到真机之外的主机里,为了解决这一问题,网桥 ...

  6. linux高级路由与流量控制,linux高级路由与流量控制

    zjiel 于 2011-02-11 22:36:25发表: thx a lot. wuzhg 于 2011-01-16 01:50:34发表: 感谢楼主共享资料!!! pallana 于 2011- ...

  7. iproute2;高级路由;ip_route,ip_rule;

    http://linux.cn/article-4326-1.html iproute2 对决 net-tools 如今很多系统管理员依然通过组合使用诸如ifconfig.route.arp和nets ...

  8. 16、基于状态的iptable+高级路由(重点)

    --   基于状态的iptables   如果按照tcp/ip来划分连接状态,有12种之多 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及INVALID   这两个 ...

  9. 开启Linux系统路由转发功能 实现多网段电脑共享上网

    开启Linux系统路由转发功能 实现多网段电脑共享上网 作者:佚名 字体:[增加 减小] 来源:互联网 时间:07-13 13:03:29 我要评论 目前,Linux的主要应用在服务器领域,但是它的许 ...

最新文章

  1. mfc中主窗体显示(任务栏上方显示)
  2. mockjs中的方法(三)
  3. 腾讯智慧交通战略重磅升级 打造以人为中心的未来交通
  4. Python变量 - Python零基础入门教程
  5. ios沙箱模式开启_iOS沙盒篇
  6. Mark:Camel SQL Route
  7. javaee7 中文帮助文档_怎么将阿拉伯语翻译成中文?这里有两种翻译方法
  8. Java 8 新特性(一)lambda表达式
  9. 各个虚拟机之间免密钥登录
  10. java实现生命游戏
  11. 安恒 web类这可不是难题_如何消除您的前5个Web设计难题
  12. 查询最后一次消费记录
  13. 将古典融汇到现代(一) ---皮尔斯逻辑之四
  14. 用Python自动批量提取Tableau报表数据源中用的数据库表
  15. centos安装mysql_centos如何安装mysql
  16. 7.20日 ksjsb上车说明及注意事项
  17. 《陶行知教育文集》读后感
  18. 定制linux版本,定制属于自己的Linux操作系统
  19. SEO究竟是什么?SEO的相关基础概念介绍
  20. 南大计算机跨专业考研,GitHub - weizhang27/NJU-CS-Kaoyan: 南京大学计算机考研相关问题...

热门文章

  1. 209. 长度最小的子数组(中等 数组 滑动窗口)
  2. STL源码剖析(十三)关联式容器之rb_tree
  3. 中国电信北京研究院副院长陈运清:网络云化推进中技术和商业驱动场景探讨...
  4. 淘宝详情接口(稳定版本)
  5. matlab bfs函数,Matlab脚本和函数
  6. 液晶显示c语言程序设计,12864液晶显示屏串行驱动演示C语言程序设计
  7. STM8驱动0.96寸OLED(12864液晶屏)
  8. BLAST原理和用法总结(一)
  9. 设置用户ID位是什么意思
  10. Anaconda安装虚拟环境