网络(组)

回顾:算法

网络的结构:数据库

硬件:计算机、互连设备、网络设备服务器

软件:操做系统、协议、应用程序、数据库网络


网络的功能:负载均衡

资源共享:目的less

数据通讯:手段socket


网络通讯模型:tcp

ISO/OSI:ibbide

应用层工具

表示层

会话层

传输层

网络层

数据链路层

物理层


TCP/IP:

应用层

传输层

互联网层

网络访问层


数据报文封装格式:

对等通讯:

应用层:数据流进行封装;

传输层:数据段(TCP segment)或数据报(UDP Data-prog)

最大的报文不能超过65535字节;

互联网层:数据包或IP数据报(IP package);

最大的报文不能超过65535字节;

网络访问层:数据帧(Ether Frame);

最大的报文使用MTU定义,MTU=1500+首部+尾部

流式数据,0,1二进制的顺序序列;


通讯界定地址:

物理地址:

在以太网中,物理地址被定义为MAC(Media Access Control)地址;

实现真正的本地通讯;

使用范围:本地局域网而且不跨路由;


逻辑地址:

在TCP/IP协议栈中,逻辑地址被定义为IP地址;

界定主机到主机的通讯;点对点通讯

使用范围:全球互联网

注意:逻辑地址仅仅只用做主机定位,不用于真正的通讯;


逻辑端口号:

界定进程到进程的通讯;

1-1023:固定                                                                                      bbb

1024-45000+:半固定

其余:可自由分配


逻辑地址:逻辑端口号 —— 套接字(Socket)

可以界定特定主机上的特定进程;


如何让主机加入到网络中并可以正常访问网络资源:

配置IP+NETMASK:当前广播域内的通讯;

网关(路由):跨广播域通讯;

DNS服务器地址:实现基于主机名的通讯;


注意:IP地址必须和网关在同一逻辑网段中;


CentOS中的网络管理:

1.为网卡设置网络属性:

自动获取:

在主机所在的网络中,至少有一台DHCP服务器;


手动配置(静态指定):

a.使用命令:

net-tools家族(ifcfg家族):

ifconfig(ipconfig)

查看网络接口的配置信息;

配置网络属性;

管理接口状态;

route:

查看路由信息;

配置路由信息(网关,静态路由,静态默认路由);

netstat:

状态及统计数据的查看;


iproute家族:

ip OBJECT

其中OBJECT能够是:

addr:IP地址和掩码的管理

link:物理接口的管理

route:路由管理

ss:

状态及统计数据的查看;


注意:以上命令,在任何的Linux发行版中都适用;


nm家族:Network Manager

nmcli:命令行工具

nmtui:text-window的工具


nm家族只在CentOS7中可以使用;


system-config-network

system-config-network-cmd

system-config-network-tui


上述三个工具都是setup的子命令;在CentOS6中可使用上述命令;


b.修改配置文件:


2.网络接口的命名方式:

思科的交换机:FastEthernet0/1, GigabitEthernet0/1

思科的路由器:Ethernet0/0, FastEthernet0/0


Linux的接口命名的方式:

a.传统的命名方式:

以太网:ethX,X从0开始的整数;如:eth0,eth1,...

PPP网络:PPPoE,PPP over Ethernet

pppX,X从0开始的整数;如:ppp0,ppp1,...

环回接口:lo,loopback;


在CentOS6及以前的发行版本中使用;


b.可预测的命名方案(CentOS7开始)

能够支持不少种命名机制:

1) 根据Firmware进行命名:

每一台计算机的网卡在其计算机的硬件固件中都有惟一的标识符,好比:MAC地址,厂商标识,电器编号等;

2) 根据物理拓扑结构:

每一台计算机的主板上都有固定数量的插槽或接口,如主板上第二个插槽链接的网卡的第一个物理接口等;


根据不一样的命名机制,能够有以下的命名标准:

1) 若是Firmware或BIOS是主板上集成的设备提供的索引信息而且该信息可用,则根据此索引信息进行设备命名,如:enoX, eno1,eno167777736,...


2) 若是Firmware或BIOS是主板上扩展插槽所提供的索引信息而且该信息可用,则根据此索引信息进行设备命名,如:ensX, ens0,ens2,...


3) 若是硬件接口的物理拓扑的位置信息存在并可用,则能够根据此信息进行设备命名,如:enp1s0


4) 若是用户显式的定义,能够根据诸如MAC地址进行命名;如:enx000c290045b3


5) 若是上述可预测命名皆不可用,则延用传统命名方式对网络设备进行命名;


命名的格式组成:

en:ethernet

wl:wlan

ww:wwan


名称的类型:

o<index>:集成设备的索引编号;

s<slot_num>:扩展插槽的索引编号;

x<MAC>:基于MAC地址进行命名;

p<bus>s<slot>:基于总线+扩展插槽的索引联合索引编号;


net-tools家族(ifcfg家族):

1.ifconfig命令

ifconfig - configure a network interface


ifconfig [interface] :用于查看网络接口的配置信息;

若是执行ifconfig命令,不带任何接口作参数,则显示全部处于激活状态的网络接口信息;

若是执行ifconfig命名,带有特定接口名称做为参数,则不管接口是否处于激活状态,都显示该网络接口的信息;


ifconfig interface address:用于配置指定接口的网络参数;

ifconfig interface IP[/PREFIX_LEN] [up|down]

ifconfig interface IP netmask SUBNET_MASK [up|down]


示例:

# ifconfig eth1 172.16.100.105

# ifconfig eth1 172.16.100.105/24 

# ifconfig eth1 172.16.100.105 netmask 255.255.255.192

# ifconfig eth1 up|down


经常使用选项:

-a:显示全部的网络接口,不管其是否处于激活状态;


示例:

# ifconfig -a


route命令:查看和管理路由信息;

路由表中的路由条目,可能包括下列几种类型:

1.主机路由:目标地址是特定的单个IP地址;

2.网络路由:子网路由;主网路由,超网路由(CIDR);

10.10.10.0/24

192.168.1.0/24

192.168.0.0/16

3.默认路由:目标地址为0.0.0.0/0的路由条目;到达任意地址的路由;


经常使用选项:

-n:以数字化显示主机名(IP地址)和端口


设置路由信息:

route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]


设置默认网关的方法:default === -net 0.0.0.0 netmask 0.0.0.0

route add default gw 192.168.100.1

route add default gw 192.168.220.1 dev eth2


删除默认网关的方法:

route del default

route del default gw 172.16.0.1


添加静态路由的方法:

route add -net 10.0.0.0/8 gw 192.168.220.100 [dev eth2]


删除静态路由的方法:

route del -net 10.0.0.0/8

route del -net 10.0.0.0/8 gw 192.168.220.100


回顾:

使主机连入网络而且可使用各类资源:

IP Address/Subnet_mask

Gateway

DNS Server


设置网络接口的上述属性:

自动得到:

DHCP


手动配置(静态配置):

命令行工具:

net-tools家族(ifcfg家族)

ifconfig

1.查看网络接口的信息

2.配置网络接口的基本配置信息(IP/MASK)

3.管理网络接口

route

1.查看当前Linux内核路由表  -n选项

2.配置默认网关及静态路由


netstat


iproute家族

ip

ss


nm家族(只是在CentOS7中才能使用)

nmcli

nmtui


配置文件:


netstat命令:

Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships


Print network connections

[--tcp|-t]:只显示与TCP协议相关的网络链接

[--udp|-u]:只显示与UDP协议相关的网络链接

[--udplite|-U]:只显示udplite协议相关的网络链接

[--sctp|-S]:

[--raw|-w]:显示与裸套接字相关的网络链接

[--listening|-l]:显示处于LISTEN状态的TCP链接

[--all|-a]:查看全部状态的任意链接

[--numeric|-n]:数字化显示结果中的主机名、端口号、用户ID等信息;

      [--numeric-hosts]

      [--numeric-ports]

      [--numeric-users]

    [--extend|-e[--extend|-e]]:以扩展格式显示结果

    [--program|-p]:显示与该网络链接相关的应用程序及进程ID


  TCP的有限状态机(TCP FSM):

State

      The  state  of  the socket. Since there are no states in raw mode and usually no states used in UDP and UDPLite, this column may be left blank. Normally this can be one of several values:


       ESTABLISHED

              The socket has an established connection.


       SYN_SENT

              The socket is actively attempting to establish a connection.


       SYN_REC V

              A connection request has been received from the network.


       FIN_WAIT1

              The socket is closed, and the connection is shutting down.


       FIN_WAIT2

              Connection  is  closed, and the socket is waiting for a shutdown from the

              remote end.


       TIME_WAIT

              The socket is waiting after close to handle packets still in the network.


       CLOSE  The socket is not being used.


       CLOSE_WAIT

              The remote end has shut down, waiting for the socket to close.


       LAST_ACK

              The remote end has shut down, and  the  socket  is  closed.  Waiting  for

              acknowledgement.


       LISTEN The  socket  is listening for incoming connections.  Such sockets are not

              included in the output unless you specify the --listening (-l)  or  --all

              (-a) option.


       CLOSING

              Both sockets are shut down but we still don't have all our data sent.


       UNKNOWN

              The state of the socket is unknown.



  经常使用的选项组合:

  -tan, -uan, -tnl, -unl, -tnlp, -unlp, -tunlp


  Print routing tables

  {--route|-r}:显示路由表信息

  [--numeric|-n]:数字化信息

  [--extend|-e]:显示扩展信息


经常使用的选项组合:

-rn, -rne


Print interface statistics:

{--interfaces|-I|-i}

[--all|-a]

[--extend|-e]

[--verbose|-v]

[--program|-p]

[--numeric|-n]


Print Protocol statistics:

{--statistics|-s}:显示详细的各个协议的统计信息;

[--tcp|-t]

[--udp|-u]

[--udplite|-U]

[--sctp|-S]

[--raw|-w]


iproute家族:

ip:show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help }


OBJECT := { link | addr | route | netns }



ip link COMMAND

COMMAND: add, delete, set, show, help


ip link set - 修改网络设备的配置参数

ip link set [dev] IFACE_NAME { up | down }:激活或禁用网络接口;

ip link set [dev] IFACE_NAME [ arp { on | off } ]:是否容许此网络接口使用ARP协议;

ip link set [dev] IFACE_NAME name IFACE_NEW_NAME:更改网络接口名称,须要将设备先down掉;

ip link set [dev] IFACE_NAME [ mtu MTU ]:修改网络接口的MTU数值;

ip link set [dev] IFACE_NAME [ netns PID ]:

    ip link set [dev] IFACE_NAME [ netns NAME ]:将指定的网络接口加入到指定的网络名称空间中;


   ip link { show | list }:列表显示全部的链路接口;只显示链路层信息;

   ip link help:得到简短的帮助信息


 ip netns COMMAND - 设置内核中的网络名称空间;

  ip netns list:列表显示全部的自定义的名称空间;

  ip netns add NS_NAME:建立名称空间;

  ip netns exec NS_NAME cmd:在指定的名称空间中使用命令;

  ip netns delete NS_NAME:删除指定的名称空间;

 

 ip addr COMMAND - 查看和设置三层逻辑网络地址;

  ip addr add IFADDR dev IFACE_NAME:为指定的网络接口添加IP地址;

  ip addr del IFADDR dev IFACE_NAME:将IP地址从指定的网络接口上删除;

  ip addr flush dev IFACE_NAME:将指定接口上配置的全部IP地址所有清除;

  ip addr { show | list } [dev IFACE_NAME]:显示网络接口上配置的IP地址;


  为网络接口增长多个IP地址,并可以使用ifconfig查看;

  ip addr add IFADDR dev IFACE_NAME label IFACE_NAME_LABEL


  ifconfig IFACE_NAME_LABEL IFADDR


  IFACE_NAME_LABEL : IFACE_NAME:#


 ip route COMMAND - 查看和设置路由表信息

  ip route { add | del } TARGET/PREFIX via NEXT_HOP [dev IFACE_NAME]

  ip route list



回顾:

netstat

-t, -u, -l, -e, -p, -n, -a, -s, -I|-i, ...


ip link|addr|route|netns


ss - another utility to investigate sockets

ss [options] [ FILTER ]


经常使用选项:

-t:TCP协议相关的链接状态

-u:UDP协议相关的链接

-w:raw socket相关的链接

-l:处于监听状态的链接

-a:全部的状态的套接字链接

-n:数字化显示结果

-p:显示相关的应用程序及PID

-e:显示详细的扩展信息

-m:显示内存使用量

-o:计时器信息


经常使用的选项组合:

-tan, -uan, -tnl, -unl, -tulp, -unlp


FILTER := [ state TCP-STATE ] [ EXPRESSION ]


TCP-STATE:TCP协议有限状态机中的全部可用状态;


EXPRESSION:

源端口:dport= :port

目的端口:sport= :port


EXPRESSION示例:

'( dport = :22 or sport = :22 )'


net-tools

iproute

特色:使用命令配置网络参数之后,网络参数会当即生效;可是,只要从新启动或从新激活网络接口,其配置的网络参数当即丢失;


上述命令的配置结果,并无影响或修改网络设备的配置文件;


配置文件:

CentOS6中:

跟IP、MASK、GATEWAY、DNS Server相关的配置文件:

/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME

DEVICE:此网络接口的名称

TYPE:此网络接口的类型,比较常见的是Ethernet,Bridge,Token Ring,...

HWADDR:此设备的物理地址,在以太网中是MAC地址;

ONBOOT:在系统引导的过程当中,是否激活此设备;

NETBOOT:是否可使用此设备进行网络引导;

BOOTPROTO:激活此接口时使用何种协议来配置此接口的属性;

动态配置:dhcp,bootp

静态配置:static,none

IPV6INIT:是否在此接口上初始化(支持)IPV6协议;

USERCTL:是否容许普通用户可以管理此接口;推荐取值为no;

IPADDR:指定此接口的固定IP地址,前提是BOOTPROTO应该是static或none;

NETMASK:设置IP地址对应的子网掩码;如:255.255.255.0

PREFIX:设置IP地址的网络前缀的位数;如:24

GATEWAY:设置默认网关

DNS1:首选DNS服务器的地址指向;

DNS2:备用DNS服务器的地址指向;

DNS3:第三DNS服务器的地址指向;

PEERDNS:是否容许从DHCP服务器得到的DNS服务器的地址指向替代此配置文件中的DNS服务器的地址指向;默认值为容许;

NM_CONTROLLED:是否容许NetworkManager服务管理网络接口;此服务在CentOS6中很是不完善,因此建议不使用此服务进行网络接口的管理;并且最好将此服务永久关闭,执行下列两条命令便可;

# service NetworkManager stop

# chkconfig NetworkManager off


主机名称的配置文件:/etc/sysconfig/network

HOSTNAME:当前Linux系统使用的主机名称


# hostname 查看当前系统的FQDN

# hostname NEW_HOSTNAME

注销后从新登陆,便可生效


CentOS7中:

跟IP、MASK、GATEWAY、DNS Server相关的配置文件:

/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME

多数的配置语句与Center6相同,多出了下列几项:

UUID:全局惟一标识符,用来惟一标识此网络接口;

NAME:此网络接口的显示名称;

DEFROUTE:是否容许此网络接口运行默认路由;


主机名称的配置文件:/etc/sysconfig/network


# hostnamectl set-hostname NEW_HOSTNAME


本地解析配置文件:/etc/hosts

格式为: IP地址 主机名(多个主机名之间使用空白字符隔开)


解析器文件:/etc/resolv.conf

search DOMAIN_NAME

nameserver DNS_SERVER_IP_ADDRESS


静态路由的配置文件:/etc/sysconfig/network-scripts/route-IFACE_NAME


IFACE_NAME:必须为这次路由出站接口的名称;

两种风格的写法:

1.每条路由信息占用一行;

TARGET via NEXT_HOP [dev IFACE_NAME]


示例:

10.0.0.0/8 via 192.168.100.254


2.每条路由信息占用多行;

ADDRESS#=TARGET

NETMASK#=MASK

GATEWAY#=NEXT_HOP


示例:

ADDRESS0=172.16.0.0

NETMASK0=255.255.0.0

GATEWAY0=192.168.10.254


Bonding —— 绑定

就是将多块网卡(多个网络接口设备)绑定同一IP地址,对外提供网络服务;这些网卡之间能够实现负载均衡或高可用技术;


经过bonding,虚拟一个网卡对外提供服务及网络链接,全部的物理网卡都被修改成相同的MAC地址;


Bonding的工做模式:

Mode 0——负载均衡解决方案,其负载均衡的算法为balance-rr(round robin, 轮询);轮询策略意味着:从头至尾顺序的在每一个slave接口上面发送数据包;该模式能够提供负载均衡以及容错的能力;


Mode 1——主备解决方案,(active-backup, master-backup),在此模式中,只有一个slave被激活,用于正常数据传输;而其余的接口都监视此接口的工做状态;当且仅当活动的slave接口失败的时候,才会从其余备份的接口中选择一个用于激活;该模式只能实现容错,没法进行负载均衡;


Mode 3——全广播解决方案,在全部的slave接口上传输所有报文;


miimon用来进行链路监测。若是miimon=100,则系统每100ms监测一次链路链接的状态;若是某个网络接口在miimon监测的结果为不连通,则进行故障倒换;


使用Bonding的时候,咱们须要配置:

1.建立虚拟接口

2.选择miimon的监测时间及Bonding的工做模式;

3.选择用于这次Bonding的物理接口;


在/etc/sysconfig/network-scripts/ifcfg-bond0文件中指定Bonding的特性便可:

DEVICE=bond0

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

BONDING_OPTS="miimon=100 mode=0"

IPADDR=172.16.100.135

PREFIX=16


修改物理网卡的配置文件:/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no


修改物理网卡的配置文件:/etc/sysconfig/network-scripts/ifcfg-eth2

DEVICE=eth2

BOOTROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no


重启网络设备:service network restart

查看绑定状态:cat /proc/net/bonding/bondX


Bonding最好在CentOS6中实现。


在CentOS7中使用网络组来实现更增强大的容错;

nmcli












回顾:

1.netstat

2.iproute家族

ip {link|addr|netns|route} COMMAND

ss

3.配置文件:

网络接口的配置文件:/etc/sysconfig/network-scripts/ifcfg-IF_NAME

静态路由配置文件:/etc/sysconfig/network-scripts/route-IF_NAME

本地解析文件:/etc/hosts

解析顺序文件:/etc/nsswitch.conf

主机名的配置文件:/etc/sysconfig/network

本地解析器文件:/etc/resolv.conf

4.在一个网络接口上配置多个IP地址:

# ifconfig IF_NAME:# IP_ADDR/PREFIX

# ip addr add IF_NAME IP_ADDR/PREFIX label


配置文件:/etc/sysconfig/network-scripts/ifcfg-IF_NAME:#

BOOTPROTO=none|static

5.Bonding

提高网络接口的可用性和可靠性;



nmcli命令:

command‐line tool for controlling NetworkManager


nmcli  [ OPTIONS ] OBJECT { COMMAND | help }

OBJECT:connection | device 


device - show and manage network interfaces

COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }


connection - start, stop, and manage network connections

COMMAND := { show | up | down | add | edit | modify | delete | reload | load

              }


          show:显示全部网络链接的属性信息;


          up|down:启用或禁用指定的网络链接;


          add:添加新的网络链接的;

          autoconnect yes|no:是否自动启动此链接,在配置文件中添加ONBOOT=yes|no;

          ifname IF_NAME:指定要建立链接的目标网络接口设备名称;

          con-name CON_NAME:为指定的网络接口设备建立一个链接名称;

          type TYPE:指定网络设备的接口类型


          示例:

          # nmcli connection add autoconnect yes ifname eno67109432 con-name eno666 type ethernet


          delete:删除指定的网络链接

          # nmcli connection delete CON_NAME


          示例:

          # nmcli connection delete eno666



          reload:不重启网络接口,但从新加载其配置文件中的配置信息;


          modify:

          modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>

          <setting>:

          802-3-ethernet.mtu

          connection.autoconnect

          ipv4.addresses

          ipv4.dns

          ipv4.gateway

          ipv4.method


          示例:

          # nmcli connection modify "系统\ eno50332208" ipv4.addresses 1.2.3.4/8 ipv4.dns 202.202.222.222 ipv4.gateway 1.1.1.1


nmtui:

nmtui - Text User Interface for controlling NetworkManager


CentOS6:

system-config-network[-tui]

setup --> 网络配置


注意:上述命令虽然可使用简单的图形界面,但都是修改了配置文件,因此须要重启网络接口才能使配置生效;


网络组(Network Teaming)

网络组:是将多个网络接口设备聚合在一块儿的方法,其目的是实现冗余容错以及提升可用性和吞吐量;


网络组与以往的Bonding技术相比,具备更好的性能以及更好的扩展性;


在CentOS7中,网络组是由内核中的一个内核驱动和一个名为teamd的守护进程来实现的;


网络组能够实现多个工做模式,被称为“运行器(runner)”:

broadcast

roundrobin

activebackup

loadbalance

lacp(IEEE 802.3ad, Link Aggregation Control Protocol, 链路聚合控制协议)


网络组接口的特色:

1.启动网络组接口并不会自动启动网络组中的其余port接口;

2.启动网络组终端port接口,也不会自动启动网络组接口;

3.禁用网络组接口,则会当即禁用网络组中的port接口;

4.对于没有port接口的网络组接口而言,只能配置静态IP地址,不能设置从DHCP获取;若是设置了,网络组接口就会一直等待port接口的加入;


建立网络组接口的方法:

nmcli connection add type team con-name TEAM_CON_NAME ifname IF_NAME config JSON

JSON是用来指定runner的方式,其格式:

'{"runner": {"name": "METHOD"}}'


示例:

# nmcli connection add type team con-name class17 ifname class17 config '{"runner": {"name": "loadbalance"}}'


# nmcli connection modify class17 ipv4.addresses 172.16.203.205/16

# nmcli connection modify class17 ipv4.method manual


建立port接口

nmcli connection add type team-slave [con-name CON_NAME] ifname IF_NAME master TEAM_NAME


注意:若是不指定con-name,则默认的con-name为team-slave-IF_NAME


示例:

# nmcli connection add type team-slave con-name eno67109432 ifname eno67109432 master class17


# nmcli connection up class17

# nmcli connection up eno67109432

# nmcli device disconnect eno67109432


建立网络组也能够直接修改对应的链接的配置文件;

网络组接口:

DEVICE=class17

TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}"

DEVICETYPE=Team

BOOTPROTO=none

NAME=class17

ONBOOT=yes

IPADDR=172.16.203.205

PREFIX=16


port接口:

NAME=team-slave-eno33554984

DEVICE=eno33554984

ONBOOT=yes

TEAM_MASTER=class17

DEVICETYPE=TeamPort

相关文章
相关标签/搜索