网络配置对于Linux学习也是不可或缺的一部分,网络基础少不了,了解基本概念


    MAC:Media Access Conctrol
     网卡设备的固定且唯一的硬件地址,用于局域网通讯主机识别
        
    IP:Internet Protocol
     由网络号和主机号组成的通讯地址标识,用于界定源和目标主机

    DNS:Domain Name System
     1.DNS服务器是域名系统,用于解析主机名,实现基于主机名的通讯

     2.全球的DNS服务器的域名数据都是相同的,备用DNS的作用是主DNS不可用时(挂掉)顶上,并非在主DNS上查找不到的域名就会使用备用DNS,linux上可配置三个DNS

    路由器:router
     规划主机通讯之间的最佳路径,保存于路由表中,主机的通讯路径可通过静态指定,也可以动态学习,路由器的动态学习基于路由的协议rip2(快作废)、ospf完成

    进程地址:
      进程的数字表示就是端口,端口用于区分不同的进程
      端口port:16bit
        0-1023作为保留端口,固定分配给一些服务,且只有管理员才能启用
        其余的端口1024-65535动态分配

        进程的地址是由IP+port组成,进程地址就是一个套接字(socket)

        主机之间的网络通讯其实就是进程之间的通讯


    TCP/IP协议栈:用与网络通讯的协议栈
     TCP/IP分层机制:
       物理层、网络层、传输层、应用层
    

    OSI网络七层:
       物理层、数据链路层、网络层、传输层、会话层、表达层、应用层
    一般OSI分层作为学习使用,TCP/IP作为实际使用
   

    网络分层的作用
        物理层:用于界定网络设备接口标准,电器特性等硬件标准
        数据链路层:识别网络设备,数据校验,帧的开始和结束
        网络层:IP通讯的最佳路径选择
        传输层:三次握手,流量控制,丢包重传,传输协议TCP/UDP
        会话层:客户端与服务端建立会话
        表示层:数据传输的加密、压缩、编码等
        应用层:计算机通讯之间的应用


Linux的网络配置:

    计算机连入网络配置:
    配置IP
    配置子网掩码NETMASK
    配置网关GATEWAY
    配置DNS服务器

    在配置好ip和netmask即可进行本地通讯,要想通过互联网通讯,就必须配置网关



(1)基于配置文件实现配置:(以CentOS 6为例)


    网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE(接口)
       
    配置项目:
      DEVICE= 设备名称   
      BOOTPROTO= 激活接口时使用的配置的协议属性,有dhcp,static,none   
      HWADDR= 网卡的硬件地址MAC
      ONBOOT= 是否开机启动,yes或no
      TYPE= 接口的类型,常见有Ethernet、Bridge
      IPADDR= IP地址
      NETMASK= 子网掩码
      GATEWAY= 网关
      DNS1= DNS服务器
      DNS2= 备用DNS服务器
      UUID= 设备的唯一标识
      USERCTL= 是否允许普通用户控制此设备
      PEERDNS= 如果BOOTPROTO=dhcp,是否允许shcp server分配的DNS服务器覆盖本地手动指定DNS服务器,默认为允许
      NM_CONTROLLED= 是否启用NetworkManager服务控制接口,在centos6中,一般选择禁用,在centos7中可以选择启用


    DNS服务器配置文件:/etc/resolv.conf
    配置格式:
      nameserver DNS服务器地址
      如:nameserver 114.114.114.114


    网络服务管理:
        CentOS 6:  service  SERVICE  { start | stop | restart | status }
        CentOS 7:systemctl  { start | stop | restart | status }  SERVICE[.service]


    修改配置文件后不能立即生效,需要重启服务

    
    主机名配置:
    # hostname HOSTNAME
      配置文件:
      /etc/sysconfig/network
    


(2)使用命令配置
    
    iproute家族

    ip命令:
     ip [options] OBJECT { COMMAND | help }
      OBJECT:{link|addr|route|netns}
                
      OBJECT可简写,OBJECT子命令也可简写

       接口属性修改:
       ip link set [dev] DEVICE <device attributes设备属性>
                   
        { up | down }:开启或关闭的设备
         multicast { on | off }:开启或关闭多播功能
         mtu NUM:指定传输数据帧的最大值,默认为1500
         name NMAE:修改设备名称
         netns PID:

        ip link show:display device attributes显示设备属性

        ip link help:查看简要帮助

示例:  

    显示设备属性

[root@johnson's linux ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
[root@johnson's linux ~]#

    

    修改接口数据帧大小

[root@johnson's linux ~]# ip link set mtu 3000 dev eth0
[root@johnson's linux ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff




     接口IP管理:
      ip addr { show | add | delete | flush } [IFADDR] dev IFACE

      ip addr show:显示接口的ip地址
      ip addr add:给接口添加ip地址
      label NAME:给指定的ip设置别名(ethx:y)
      scope {global|link|host}:设置接口的作用域
       global:全局可用
       link:接口可用
       host:本机可用

       IP设置格式:172.168.0.0/16(之网码的位数)
        ip addr del:删除接口的ip地址
        ip addr flush:清空接口的所有ip地址
        ip addr flush to [网络地址]:清除指定的地址
         如要清掉192.168.16.1/16=flush 192.16.0.0/16

       注意:单个接口添加多个IP地址使用命令实现,可指定别名,也可以编辑配置文件,文件命名要使用接口别名ethx:y


示例:

    显示接口IP地址

[root@johnson's linux ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0
    inet6 fe80::20c:29ff:fe7b:7963/64 scope link 
       valid_lft forever preferred_lft forever

    

    在指定接口添加IP

[root@johnson's linux ~]# ip addr add 192.168.0.10/24 dev eth0
[root@johnson's linux ~]# ip addr show

2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0
    inet 192.168.0.10/24 scope global eth0
    inet6 fe80::20c:29ff:fe7b:7963/64 scope link 
       valid_lft forever preferred_lft forever


    给添加的IP地址指定标签

[root@johnson's linux ~]# ip addr add 192.168.10.100/32 label eth0:1 dev eth0
[root@johnson's linux ~]# ip addr show

2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0
    inet 192.168.0.10/24 scope global eth0
    inet 192.168.10.100/32 scope global eth0:1 (别名添加)
    inet6 fe80::20c:29ff:fe7b:7963/64 scope link 
       valid_lft forever preferred_lft forever


    清除指定IP

[root@johnson's linux ~]# ip addr show

2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0
    inet 192.168.0.10/24 scope global eth0
    inet 192.168.10.100/32 scope global eth0:1
    inet6 fe80::20c:29ff:fe7b:7963/64 scope link 
       valid_lft forever preferred_lft forever
[root@johnson's linux ~]# ip addr flush to 192.168.0.0/24 eth0 (执行flush操作)
[root@johnson's linux ~]# ip addr show

       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,UP,LOWER_UP> mtu 3000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7b:79:63 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.144/16 brd 172.18.255.255 scope global eth0
    inet 192.168.10.100/32 scope global eth0:1
    inet6 fe80::20c:29ff:fe7b:7963/64 scope link 
       valid_lft forever preferred_lft forever



    路由表配置:

    ip route:routing table management路由表管理

     ip route add:添加路由
     ip route delete:删除路由
     ip route change:修改路由
     ip route replace:修改或新增新路由(替换)
     ip route flush:清除路由表
     ip route add default via GW:添加默认路由

      路由添加:
      ip route add 目标网络 via GW网关 [dev IFACE] [src SOURCE_IP]
       例:ip route add 192.168.0.0  via  172.18.0.1 dev eth0

            解释:添加路由,即建立一个路由条目,记录访问目标网络下一跳(nexthop)的地址(网关),注意!是目标网络,不是目标ip地址,如IP:192.168.0.12/24,我们添加路由时目标网络应该是192.168.0.0/24,192.168.0.0/24代表了此网段的所有IP地址

   

    注意:
     添加路由时填写的网关必须是与本地接口中的某一IP相同网段的地址
   

示例:

    添加路由

[root@johnson's linux ~]# ip route add 192.168.0.0/24 via 172.18.0.1
[root@johnson's linux ~]# ip route show
192.168.0.0/24 via 172.18.0.1 dev eth0 (添加的路由)
172.18.0.0/16 dev eth0  proto kernel  scope link  src 172.18.0.144  metric 1 
default via 172.18.0.1 dev eth0  proto static (默认网关)
[root@johnson's linux ~]#

   

    删除路由

[root@johnson's linux ~]# ip route show
192.168.0.0/24 via 172.18.0.1 dev eth0 
172.18.0.0/16 dev eth0  proto kernel  scope link  src 172.18.0.144  metric 1 
default via 172.18.0.1 dev eth0  proto static 
[root@johnson's linux ~]# ip route delete 192.168.0.0/24 (删除)
[root@johnson's linux ~]# ip route show
172.18.0.0/16 dev eth0  proto kernel  scope link  src 172.18.0.144  metric 1 
default via 172.18.0.1 dev eth0  proto static 
[root@johnson's linux ~]#




    网络名称空间管理:
    ip netns:manage network namesapce管理网络名称空间
     ip netns list:列出所有的netns
     ip netns add NAME:创建netns
     ip netns del NAME :删除指定netns
     ip netns exec NAME COMMAND:在指定的netns中运行命令

      注意:centos6中可能没有netns命令,centos7中可以使用

示例:

    创建一个名称空间

[root@johnson's linux ~]# ip netns add new_network
[root@johnson's linux ~]# ip netns list
new_network
newnet
[root@johnson's linux ~]#

   

    在指定名称空间运行命令

[root@johnson's linux ~]# ip netns exec new_network ip link show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@johnson's linux ~]#




     ss命令:用于显示套接字(socket)状态     

      ss [option...] [FLITER]
      option:
       -t:查看tcl协议相关的连接
       -u:查看udp协议相关的连接
       -n:以数字形式查看
       -l:查看处于监听状态的连接
       -a:查看所有状态的连接
       -p:显示连接的相关进程
       -m:显示连接的内存使用情况
       -e:显示扩展信息
       -w:显示raw socket相关连接

      FILTER := [ state TCP-STATE ]  [ EXPRESSION ]
                
        如:ss -o state established '( dport = :22 or sport = :22 )'
                           
    
示例:

  查看处于监听状态TCP连接

[root@johnson's linux ~]# ss -tnl 
State       Recv-Q Send-Q   Local Address:Port     Peer Address:Port 
LISTEN      0      128                 :::22                 :::*     
LISTEN      0      128                  *:22                  *:*     
LISTEN      0      128          127.0.0.1:631                 *:*     
LISTEN      0      128                ::1:631                :::*     
[root@johnson's linux ~]#

    

    查看UDP连接

[root@johnson's linux ~]# ss -unl 
State       Recv-Q Send-Q   Local Address:Port     Peer Address:Port 
UNCONN      0      0                    *:631                 *:*     
[root@johnson's linux ~]# 
UDP协议是不建立会话的


    显示所有状态连接的启动程序

[root@johnson's linux ~]# ss -anp
State       Recv-Q Send-Q   Local Address:Port     Peer Address:Port 
LISTEN      0      128                 :::22                 :::*      users:(("sshd",2201,4))
LISTEN      0      128                  *:22                  *:*      users:(("sshd",2201,3))
LISTEN      0      128          127.0.0.1:631                 *:*      users:(("cupsd",1996,7))
LISTEN      0      128                ::1:631                :::*      users:(("cupsd",1996,6))
ESTAB       0      52        172.18.0.144:22        172.18.17.1:14239  users:(("sshd",33586,3))
[root@johnson's linux ~]#


    查看所有22号端口建立的连接

[root@johnson's linux ~]# ss -o state established '( dport = :22 or sport = :22 )'
Recv-Q Send-Q    Local Address:Port        Peer Address:Port   
0      52         172.18.0.144:ssh          172.18.17.1:9039     timer:(on,319ms,0)
[root@johnson's linux ~]#