摘要:KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。Bridge方式的配置原理和步骤。Bridge方式适用于服务器主机的虚拟化。NAT方式适用于桌面主机的虚拟化。

NAT的网络结构图:

Bridge的网络结构见图:

一、Bridge方式

问题

客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。

KVM客户机网络连接有两种方式:

  • 用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。NAT方式。
  • 虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。Bridge方式。

本文主要解释Bridge方式的配置。

Bridge方式原理

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机

桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

Bridge方式的适用范围

服务器主机虚拟化。

网桥方式配置步骤

1、编辑修改网络设备脚本文件,增加网桥设备br0

vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR=10.0.112.39
NETMASK=255.255.255.0
GATEWAY=10.0.112.1
DEFROUTE=yes

上述配置将虚拟网卡配置在了10.0.112.* 网段。如果不需要静态地址,可以把配置地址的相关项屏蔽。如:

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=dhcp

2、编辑修改网络设备脚本文件,修改网卡设备eth0

DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE=Ethernet
BOOTPROTO=none
BRIDGE="br0"
NAME="System eth0"
HWADDR=::E6:4A::AD

NM_CONTROLLED这个属性值,根据RedHat公司的文档是必须设置为“no”的(这个值为“yes”表示可以由服务NetworkManager来管理。NetworkManager服务不支持桥接,所以要设置为“no”。),但实际上发现设置为“yes”没有问题。通讯正常。

3、重启网络服务

service network restart

4、校验桥接接口

#brctl show
bridge name bridge id STP enabled interfaces
br0 .4437e64a62ad no eth0

客户机配置

客户机安装时注意,网络要选择用br0桥接方式。

图形化的方式:

文本方式:

编辑修改虚拟机配置文件/etc/libvirt/qemu/v1.xml,增加如下内容

<interface type='bridge'>
<mac address='52:54:00:da:c3:dc'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

虚拟机启动后,验证网络接口是否正常:

# brctl show
bridge name bridge id STP enabled interfaces
br0 .4437e64a62ad no eth0
vnet0

NAT方式的影响

网桥方式的配置与虚拟机支持模块安装时预置的虚拟网络桥接接口virbr0没有任何关系,配置网桥方式时,可以把virbr0接口(即NAT方式里面的default虚拟网络)删除。

virsh net-destroy default
virsh net-undefine default
service libvirtd restart

二、NAT方式

问题

客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。

KVM 客户机网络连接有两种方式:

  • 用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。NAT方式。
  • 虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。Bridge方式。

本文主要解释NAT方式的配置。

NAT方式原理

NAT方式是KVM安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。

检查当前的网络设置:

#virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes

default是宿主机安装虚拟机支持模块的时候自动安装的。

检查当前的网络接口:

#ifconfig
eth0 Link encap:Ethernet HWaddr ::E6:4A::AD
inet6 addr: fe80:::e6ff:fe4a:62ad/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (104.8 MiB) TX bytes: (12.1 MiB)
Interrupt: lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (240.0 b) TX bytes: (240.0 b) virbr0 Link encap:Ethernet HWaddr :::B9:B0:
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (98.0 KiB) virbr0-nic Link encap:Ethernet HWaddr :::B9:B0:
BROADCAST MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。

几个虚拟机管理模块产生的接口关系如下图:

从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机

virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:

# brctl show
bridge name bridge id STP enabled interfaces
virbr0 .525400b9b096 yes virbr0-nic # route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.122.0 * 255.255.255.0 U virbr0

同时,虚拟机支持模块会修改iptables规则,通过命令可以查看:

# iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT packets, 2759K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT packets, 125K bytes)
pkts bytes target prot opt in out source destination
MASQUERADE all -- * * 192.168.122.0/ !192.168.122.0/ ----------->这条是关键,它配置了NAT功能。
Chain OUTPUT (policy ACCEPT packets, 125K bytes)
pkts bytes target prot opt in out source destination # iptables -t filter -L -nv
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT udp -- virbr0 * 0.0.0.0/ 0.0.0.0/ udp dpt: ---->由libvirt脚本自动写入
ACCEPT tcp -- virbr0 * 0.0.0.0/ 0.0.0.0/ tcp dpt: ---->由libvirt脚本自动写入
ACCEPT udp -- virbr0 * 0.0.0.0/ 0.0.0.0/ udp dpt: ---->由libvirt脚本自动写入
ACCEPT tcp -- virbr0 * 0.0.0.0/ 0.0.0.0/ tcp dpt: ---->由libvirt脚本自动写入
178K 195M ACCEPT all -- * * 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED ---->iptables的系统预设
ACCEPT icmp -- * * 0.0.0.0/ 0.0.0.0/ ---->iptables的系统预设
216K ACCEPT all -- lo * 0.0.0.0/ 0.0.0.0/ ---->iptables的系统预设
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt: ---->iptables的系统预设
2721K REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited ---->iptables的系统预设
Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
3485K ACCEPT all -- * virbr0 0.0.0.0/ 192.168.122.0/ state RELATED,ESTABLISHED ---->由libvirt脚本自动写入
399K ACCEPT all -- virbr0 * 192.168.122.0/ 0.0.0.0/ ---->由libvirt脚本自动写入
ACCEPT all -- virbr0 virbr0 0.0.0.0/ 0.0.0.0/ ---->由libvirt脚本自动写入
REJECT all -- * virbr0 0.0.0.0/ 0.0.0.0/ reject-with icmp-port-unreachable ---->由libvirt脚本自动写入
REJECT all -- virbr0 * 0.0.0.0/ 0.0.0.0/ reject-with icmp-port-unreachable ---->由libvirt脚本自动写入
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited ---->iptables的系统预设
Chain OUTPUT (policy ACCEPT 181K packets, 138M bytes)
pkts bytes target prot opt in out source destination

如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。

NAT方式的适用范围

桌面主机虚拟化。

创建步骤

virsh net-define /usr/share/libvirt/networks/default.xml

此命令定义一个虚拟网络,default.xml的内容:

<network>
<name>default</name>
<bridge name="virbr0" />
<forward/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
</network>

也可以修改xml,创建自己的虚拟网络。

标记为自动启动:

#virsh net-autostart default
Network default marked as autostarted

启动网络:

#virsh net-start default
Network default started

网络启动后可以用命令brctl show查看和验证。

修改/etc/sysctl.conf中参数,允许ip转发:

net.ipv4.ip_forward=

客户机安装

客户机安装时注意,网络要选择用NAT方式。

图形化的方式:

文本方式:

编辑修改虚拟机配置文件/etc/libvirt/qemu/v1.xml,增加如下内容

    <interface type='network'>
<mac address='52:54:00:4f:1b:07'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

虚拟机启动后,验证网络接口是否正常:

# brctl show
bridge name bridge id STP enabled interfaces
virbr0 .525400b9b096 yes virbr0-nic
vnet0

Bridge方式的影响

Bridge方式配置出来的接口对NAT方式没有影响,因为NAT方式并没有使用物理网卡。但作为客户机,只能选择其中的一种。

三、桥接补充

如果我们搭建的环境是必须使用虚拟化的,或者说虚拟化是我们搭建这套环境的主要目的之一,那么我们在进行系统安装的时候将所有的虚拟化组件全部安装上,避免后期出现安装不全或者某些服务依赖关系没有解决好,这样排错的时间远远高于安装时候多装几个包的时间。

在我们安装好虚拟化组件(RHEL6.0之后,系统自带的均是KVM,已经没有XEN虚拟化的支持了),会自动生成一个virbr0这样的桥接设备

[root@clovemzone ~]# brctl  show
bridge name bridge id STP enabled interfaces
virbr0 .5254007543ce yes virbr0-nic

virbr0默认使用的是NAT方式跟虚拟机网卡进行通讯,在实际生产环境中我们多数情况下面使用桥接Bridge的方式进行物理机跟虚拟机的通讯,删除这个virbr0的方法在上面已经说明,这篇文章主要讲述Bridge的简单实现原理以及实际配置方法。

假设我们的物理机上有一块有线网卡,在系统中显示为eth0,我们搭建将其配置成桥接设备br0

我们经常所说的Bridge设备其实就是网桥设备,也就相当于现在的二层交换机,用于连接同一网段内的所有机器,所以我们的目的就是将网络设备eth0配置成br0,此时br0就成为了所谓的交换机设备,我们物理机的eth0也是连接在上面的。

[root@clovemzone ~]# brctl  show
bridge name bridge id STP enabled interfaces
br0 .0025903afe42 no eth0

我们创建两个虚拟机之后,所有的虚拟机网卡均连接br0,此时查看br0上面连接的设备

[root@clovemzone ~]# brctl  show
bridge name bridge id STP enabled interfaces
br0 .0025903afe42 no eth0
vnet0
vnet1

为了让大家了解的更加透彻,可以通过下图并结合实际操作进行简单分析

1、查看物理机网卡设备信息图1所示

[root@master ~]# ip addr show
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
inet 192.168.3.176/ brd 192.168.3.255 scope global eth0
inet6 fe80:::ff:fea7:b756/ scope link
valid_lft forever preferred_lft forever

2、配置桥接设备br0

[root@master ~]# rpm -q bridge-utils    //查看桥接软件是否安装
bridge-utils-1.2-.el6.x86_64
[root@master ~]# brctl show
bridge name bridge id STP enabled interfaces

此时无任何桥接设备,我们可以手动添加也可以在 文件中进行添加生效。

(1)、手动添加

[root@master ~]# brctl  addbr br0
[root@master ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
[root@master ~]# brctl addif br0 eth0
[root@master ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no eth0

删除eth0上面的ip地址,将br0上面添加上固定ip地址

[root@master ~]# ip addr del dev eth0 192.168.3.176/        //删除eth0上的IP地址
[root@master ~]# ifconfig br0 192.168.3.176/ up //配置br0的IP地址并启动设备
[root@master ~]# route add default gw 192.168.3.1 //重新加入默认网关

查看配置是否生效

[root@master ~]# route      //查看默认网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 * 255.255.255.0 U br0
default 192.168.3.1 0.0.0.0 UG br0
[root@master ~]# ip addr show //查看eth0跟br0的IP信息
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
inet6 fe80:::ff:fea7:b756/ scope link
valid_lft forever preferred_lft forever
: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
inet 192.168.3.176/ brd 192.168.3.255 scope global br0
inet6 fe80:::ff:fea7:b756/ scope link
valid_lft forever preferred_lft forever
[root@master ~]# ping 192.168.3.1 -w2 //测试同一网段连接是否成功,判断网卡IP是否绑定正确
PING 192.168.3.1 (192.168.3.1) () bytes of data.
bytes from 192.168.3.1: icmp_seq= ttl= time=3.45 ms
bytes from 192.168.3.1: icmp_seq= ttl= time=4.20 ms
--- 192.168.3.1 ping statistics ---
packets transmitted, received, % packet loss, time 2000ms
rtt min/avg/max/mdev = 3.457/3.832/4.208/0.380 ms
[root@master ~]# ping 192.168.1.1 -w2 //测试不同网段连接是否成功,判断网关是否添加成功
PING 192.168.1.1 (192.168.1.1) () bytes of data.
bytes from 192.168.1.1: icmp_seq= ttl= time=2.38 ms
bytes from 192.168.1.1: icmp_seq= ttl= time=7.64 ms
--- 192.168.1.1 ping statistics ---
packets transmitted, received, % packet loss, time 2000ms
rtt min/avg/max/mdev = 2.381/5.011/7.642/2.631 ms

上面是通过命令进行的手动配置方法,但是大家都清楚,这些命令配置的结果在服务器重启之后就不能生效了,要想使得所有配置永久生效,我们还是需要通过配置文件进行配置,然后重启网卡设备,让系统帮我们配置,然后重启之后也是生效的。

通过上面的手动配置方法,大家可以清楚得看到一个桥接设备的配置流程,这个在你写到配置文件里面,然后让系统帮你配置的时候是看不到的 :) ,那么下面我们将所有的配置还原,通过配置文件进行相关自动化配置吧。

还原原始配置

[root@master ~]# route delete default            //删除默认网关

[root@master ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 0.0.0.0 255.255.255.0 U br0 [root@master ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 .525400a7b756 no eth0
[root@master ~]# brctl delif br0 eth0 //断开/删除br0上的eth0设备
[root@master ~]#ifconfig br0 down //让br0设备停止活动
[root@master ~]#brctl delbr br0 //删除br0
root@master ~]# brctl show //查看br0是否依然存在
bridge name bridge id STP enabled interfaces
[root@master ~]# ifconfig eth0 192.168.3.176/ //重新给eth0分配IP地址
root@master ~]# route add default gw 192.168.3.1 //重新加入默认网关
[root@master ~]# ip addr show
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
inet 192.168.3.176/ brd 192.168.3.255 scope global eth0
inet6 fe80:::ff:fea7:b756/ scope link
valid_lft forever preferred_lft forever

(2)、通过配置文件配置桥接设备

配置文件请自行备份

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.3.176
NETMASK=255.255.255.0
GATEWAY=192.168.3.1 

参数详解:

ifcfg-eth0

      Device              指定网卡设备名

      TYPE                指定网卡的类型为以太网卡

      ONBOOT        指定网卡是否开机启动,切记要设置为yes

      BRIDGE            指定桥接设备,此处指定为br0设备

建议:以上变量(非变量值)均为大写。

ifcfg-br0

      Device              指定网卡设备名
TYPE 指定网卡的类型为桥接
ONBOOT 指定网卡是否开机启动,切记要设置为yes BOOTPROTO 指定网卡启动如何获取IP地址,设置静态
IPADDR 设置br0绑定的IP地址
NETMASK 设置子网掩码地址 GATEWAY 设置网关

建议: TYPE变量的变量值按照第一个字母大写,其余字母小写的原则,如Ethernet,Bridge

配置完成之后,重启网络服务

如担心干扰,建议停止NetworkManager 服务,这个服务挺讨厌

[root@master ~]# service    NetworkManager stop
[root@master ~]#chkconfig NetworkManager off
[root@master ~]# service network restart
[root@master ~]# ip addr show
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/ether :::a7:b7: brd ff:ff:ff:ff:ff:ff
inet 192.168.3.176/ brd 192.168.3.255 scope global br0
inet6 fe80:::ff:fea7:b756/ scope link
valid_lft forever preferred_lft forever

查看桥接设备信息

[root@master ~]# brctl  show
bridge name bridge id STP enabled interfaces
br0 .525400a7b756 no eth0
[root@master ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 * 255.255.255.0 U br0
link-local * 255.255.0.0 U br0
default 192.168.3.1 0.0.0.0 UG br0

由此,桥接设备br0已经配置成功,当创建虚拟机的时候选择虚拟网卡接口的时候选择br0即可

开始安装虚拟机,此时查看桥接设备br0上面的网卡连接情况:

[root@master ~]# brctl  show
bridge name bridge id STP enabled interfaces
br0 .0025903afe42 no eth0
vnet0 

参考:

http://blog.csdn.net/hzhsan/article/details/44098537(以上内容转自此篇文章)

http://blog.csdn.net/hzhsan/article/details/44653403(以上内容转自此篇文章)

http://smilejay.com/2012/08/kvm-bridge-networking/

http://www.linuxidc.com/Linux/2012-12/76883.htm

http://www.linuxidc.com/Linux/2012-12/76883p2.htm

https://www.webmaster.me/server/centos6-4-kvm-centos6-4%E8%99%9A%E6%8B%9F%E6%9C%BAnat%E6%96%B9%E5%BC%8F%E8%BF%9E%E7%BD%91.html

http://www.bkjia.com/yjs/974868.html

CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)的更多相关文章

  1. CentOS 6.9下KVM虚拟机通过virt-clone克隆虚拟机(转)

    一.virt-clone概述 1.virt-clone作用简介 virt-clone主要是用来克隆kvm虚拟机,并且通过Options.General Option.Storage Configura ...

  2. CentOS 6.9下KVM虚拟机快照创建、删除、恢复(转)

    使用文件快照的方式实现文件备份,但单说快照(snapshot)的话,他是某一时间点(版本)你能看到的该时间点备份文件状态的全貌,通过文件的快照(全貌)你能恢复到特定时间点(版本)的文件状态. 创建虚拟 ...

  3. 【转】libvirt kvm 虚拟机上网 – Bridge桥接

    libvirt kvm 虚拟机上网 – Bridge桥接 2013 年 7 月 3 日 / 东东东 / 暂无评论 目录 [hide] 1 Bridge桥接原理 2 在host机器配置桥接网络 2.1  ...

  4. Linux下 ps -ef 和 ps aux 的区别及格式详解

    原文:https://www.cnblogs.com/5201351/p/4206461.html Linux下ps -ef和ps aux的区别及格式详解 Linux下显示系统进程的命令ps,最常用的 ...

  5. Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  6. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  7. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)

    不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...

  8. WiFi无线网络参数 802.11a/b/g/n 详解

    转载自:WiFi无线网络参数 802.11a/b/g/n 详解 如转载侵犯您的版权,请联系:2378264731@qq.com 802.11a/b/g/n,其实指的是无线网络协议,细分为802.11a ...

  9. indows下PHP通过ffmpeg给上传的视频截图详解

    windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家 ...

随机推荐

  1. idea+spring+springmvc+mybatis+mybatis+maven

    使用SSM(Spring,SpringMVC和Mybatis) 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johns ...

  2. Webstorm和Eclipse常用快捷键

    快捷键配置 点击“File”-> “settings” Webstorm预置了其他编辑器的快捷键配置,可以点击 默认配置-Eclipse的常用快捷键对照表 查找/代替 Webstorm快捷键 E ...

  3. java中的构造方法与其作用

    什么是构造方法呢? 方法名和类名相同 没有返回值类型,连void都不能写 没有具体的返回值 构造方法分为无参构造方法与有参构造方法. 先来看一下最简单的无参构造方法: Student.java pac ...

  4. ueditor在QQ浏览器或者IE浏览器中无法加载

    因为IE浏览器有兼容问题,打开网址,浏览器不一定以最新的文档模式加载.按F12查看 在你网址的head标签中加入:<meta http-equiv="x-ua-compatible&q ...

  5. linux命令(43):cal命令

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历.“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. 1.命令格式: cal  ...

  6. linux命令(25):ln命令

    命令格式: ln [参数][源文件或目录][目标文件或目录] 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 ...

  7. Elasticsearch( 插件开发)

    elasticsearch5.2.2 插件开发(一) Scripting plugins:这个插件本质来说,就是会调用用户的脚本,所以可以执行任何的程序,举例的话,可以通过这个插件,支持javascr ...

  8. Django如何使文件在django自动执行

    1. Django admin源码中 admin.py from django.contrib import admin # Register your models here. 在admin源码中 ...

  9. LeetCode解题报告—— Regular Expression Matching

    Given an input string (s) and a pattern (p), implement regular expression matching with support for  ...

  10. 《java并发编程实战》读书笔记1--线程安全性,内置锁,重入,状态

    什么是线程安全? 当多个线程访问某个类时,不管这些的线程的执行顺序如何,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的. 哈哈书上的解释,还是翻译过 ...