Linux 網絡基礎及條件語句

  • 一、 簡述osi七層模型和TCP/IP五層模型

OSI 七層模型
OSI(Open System Interconnection Reference Model,開放系統互連參考模型)體系結構是第一個標準化的計算機網絡體系,它是針對廣域網(也就是不一樣網絡之間的通訊)進行設計的,將整個網絡通訊的功能劃分爲七個層次,由低到高分別爲物理層(Physical Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)
OSI七層模型中低四層(從物理層到傳輸層)定義瞭如何進行端到端的數據傳輸,也就是定義瞭如何經過網卡、物理電纜、交換機和路由器進行數據傳輸;而高三層(從會話層到應用層)定義了終端系統的應用程序和用戶如何彼此通訊,也即定義瞭如何重建從發送方到目的方的應用程序數據流。更多的是把OSI的七層結構分爲低三層和高三層的,低三層負責建立網絡通訊所需的網絡鏈接(面向網絡),屬於「通訊子網」部分,高四層具體負責端到端的用戶數據通訊(面向用戶),屬於「資源子網」部分。OSI結構中各層功能以下圖:node

Linux 網絡基礎及條件語句

TCP/IP 五層模型
TCP/IP協議體系結構(又稱TCP/IP協議參考模型)是專門針對使用TCP/IP協議簇的廣域計算機網絡而開發的,能夠說是OSI的改進版本。但毫不能簡單地認爲是改進版,由於它與OSI參考模型所針對的網絡類型存在較大區別,因此這兩種體系結構中各層所採用的通訊協議,以及功能實現原理上都存在很是大的差別。
TCP/IP協議體系結構只劃分了四層,從高到低分別是:應用層(Apllication Layer)、傳輸層(Transport Layer)、網際互連層(Internet Layer,又稱互聯網層)和網絡訪問層(Network Access Layer,又稱網絡接入層、網絡接口層或者主機-網絡層)。整體而言,TCP/IP協議體系結構更加精簡,更有利於網絡系統的設計,可是其中網絡訪問層自己並非實際的一層,包括了OSI的物理層和數據鏈路層這兩層的功能,把它們合併其實並不合理,因此推出TCP/IP五層網絡體系結構,它是最爲科學以及合理的,它綜合了OSI七層模型和TCP/IP四層模型這兩種體系結構的優勢,同時克服了這兩種體系結構的不足,以下圖所示:vim

Linux 網絡基礎及條件語句

  • 二、簡述iproute家族命令

iproute家族: bash

  • ip命令:

    show / manipulate routing, devices, policy routing and tunnels
    ip [ OPTIONS ] OBJECT { COMMAND | help }
        OBJECT := { link | addr | route | netns  }
        注意: OBJECT可簡寫,各OBJECT的子命令也可簡寫;
        ```
        ip  OBJECT:
            ip link: network device configuration
                ip  link  set - change device attributes
                    dev NAME (default):指明要管理的設備,dev關鍵字可省略;
                    up和down:
                    multicast on或multicast off:啓用或禁用多播功能;
                    name NAME:重命名接口
                    mtu NUMBER:設置MTU的大小,默認爲1500;
                    netns PID:ns爲namespace,用於將接口移動到指定的網絡名稱空間;
            ip  link  show  - display device attributes
            ip  link  help -  顯示簡要使用幫助;
            ip netns:  - manage network namespaces.
            ip  netns  list:列出全部的netns
            ip  netns  add  NAME:建立指定的netns
            ip  netns  del  NAME:刪除指定的netns
            ip  netns   exec  NAME  COMMAND:在指定的netns中運行命令
            ip address - protocol address management.
                ip address add - add new protocol address
                    ip  addr  add  IFADDR  dev  IFACE
                        [label NAME]:爲額外添加的地址指明接口別名;
                        [broadcast ADDRESS]:廣播地址;會根據IP和NETMASK自動計算獲得;
                        [scope SCOPE_VALUE]:
                            global:全局可用;
                            link:接口可用;
                            host:僅本機可用;                                         
                ip address delete - delete protocol address
                    ip addr  delete  IFADDR  dev  IFACE         
                ip address show - look at protocol addresses
                    ip  addr   list  [IFACE]:顯示接口的地址;
                ip address flush - flush protocol addresses
                    ip  addr  flush  dev  IFACE
            ip route - routing table management
                ip route add - add new route
                ip route change - change route
                ip route replace - change or add new one
                    ip  route   add  TYPE PREFIX  via GW  [dev  IFACE]  [src SOURCE_IP] 
                ip route delete - delete route
                    ip  route  del  TYPE PRIFIX 
                ip route show - list routes
                    TYPE PRIFIX  
                ip route flush - flush routing tables
                    TYPE  PRIFIX
                ip route get - get a single route
                    ip  route  get  TYPE PRIFIX
  • ss命令:

    ss  [options]  [ FILTER ]
            選項:
                -t:TCP協議的相關鏈接
                -u:UDP相關的鏈接
                -w:raw socket相關的鏈接
                -l:監聽狀態的鏈接
                -a:全部狀態的鏈接
                -n:數字格式
                -p:相關的程序及其PID
                -e:擴展格式信息
                -m:內存用量
                -o:計時器信息
    
            FILTER := [ state TCP-STATE ]  [ EXPRESSION ]

示例:服務器

[root@node1 ~]# ss -tan '( dport = :22 or sport = :22 )'
State      Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN     0      128                      *:22                                   *:*                  
ESTAB      0      0            192.168.10.10:22                        192.168.10.1:50779              
ESTAB      0      0            192.168.10.10:22                        192.168.10.1:54761              
LISTEN     0      128                     :::22                                  :::*              
                            [root@node1 ~]# ss  -tan  state  ESTABLISHED
Recv-Q Send-Q            Local Address:Port                           Peer Address:Port              
0      52                192.168.10.10:22                             192.168.10.1:50779              
0      0                 192.168.10.10:22                             192.168.10.1:54761
配置文件:
    IP/NETMASK/GW/DNS等屬性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
        IFACE:接口名稱;
    路由的相關配置文件:/etc/sysconfig/networkj-scripts/route-IFACE

    配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE經過大量參數來定義接口的屬性;其可經過vim等文本編輯器直接修改,也可使用專用的命令的進行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)

        ifcfg-IFACE配置文件參數:
            DEVICE:此配置文件對應的設備的名稱;
            ONBOOT:在系統引導過程當中,是否激活此接口;
            UUID:此設備的唯一標識;
            IPV6INIT:是否初始化IPv6;
            BOOTPROTO:激活此接口時使用什麼協議來配置接口屬性,經常使用的有dhcp、bootp、static、none;
            TYPE:接口類型,常見的有Ethernet, Bridge;
            DNS1:第一DNS服務器指向;
            DNS2:備用DNS服務器指向;
            DOMAIN:DNS搜索域;
            IPADDR: IP地址;
            NETMASK:子網掩碼;CentOS 7支持使用PREFIX以長度方式指明子網掩碼;
            GATEWAY:默認網關;
            USERCTL:是否容許普通用戶控制此設備;
            PEERDNS:若是BOOTPROTO的值爲「dhcp」,是否容許dhcp server分配的dns服務器指向覆蓋本地手動指定的DNS服務器指向;默認爲容許;
            HWADDR:設備的MAC地址;
            NM_CONTROLLED:是否使用NetworkManager服務來控制接口;

        網絡服務:
            network
            NetworkManager 

            管理網絡服務:
                CentOS 6:  service  SERVICE  {start|stop|restart|status}
                CentOS 7:systemctl  {start|stop|restart|status}  SERVICE[.service]

            配置文件修改以後,若是要生效,須要重啓網絡服務;
                CentOS 6:# service  network  restart
                CentOS 7:# systemctl  restart  network.service

    用到非默認網關路由:/etc/sysconfig/network-scripts/route-IFACE
        支持兩種配置方式,但不可混用;
            (1) 每行一個路由條目:
                TARGET  via  GW

            (2) 每三行一個路由條目:
                ADDRESS#=TARGET
                NETMASK#=MASK
                GATEWAY#=NEXTHOP

給接口配置多個地址:
    ip addr以外,ifconfig或配置文件均可以;
    (1) ifconfig  IFACE_LABEL  IPADDR/NETMASK
        IFACE_LABEL: eth0:0, eth0:1, ...
    (2) 爲別名添加配置文件;
        DEVICE=IFACE_LABEL
        BOOTPROTO:網上別名不支持動態獲取地址;
            static, none
nmcli命令:
    nmcli  [ OPTIONS ] OBJECT { COMMAND | help }
        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 }
            modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
            如何修改IP地址等屬性:
                # nmcli  conn  modify  IFACE  [+|-]setting.property  value
                    ipv4.address
                    ipv4.gateway
                    ipv4.dns1
                    ipv4.method
  • 二、 詳細說明進行管理工具htop、vmstat等相關命令,並舉例

    htop命令:
    選項:
    -d #:指定延遲時間間隔;
    -u UserName:僅顯示指定用戶的進程;
    -s COLUME:以指定字段進行排序;
    子命令:
    l:顯示選定的進程打開的文件列表;
    s:跟蹤選定的進程的系統調用;
    t:以層級關係顯示各進程狀態;
    a:將選定的進程綁定至某指定的CPU核心;網絡

    Linux 網絡基礎及條件語句

    vmstat命令:app

    • Report virtual memory statistics
      vmstat [options] [delay [count]]
      procs:
      r:等待運行的進程的個數;CPU上等待運行的任務的隊列長度;
      b:處於不可中斷睡眠態的進程個數;被阻塞的任務隊列的長度;
      memory:
      swpd:交換內存使用總量;
      free:空閒的物理內存總量;
      buffer:用於buffer的內存總量;
      cache:用於cache的內存總量;
      swap
      si:數據進入swap中的數據速率(kb/s)
      so:數據離開swap的速率(kb/s)
      io
      bi:從塊設備讀入數據到系統的速度(kb/s)
      bo:保存數據至塊設備的速率(kb/s)
      system
      in:interrupts,中斷速率;
      cs:context switch, 上下文 切換的速率;
      cpu
      us: user space
      sy:system
      id:idle
      wa:wait
      st: stolen

選項:
-s:顯示內存統計數據;socket

示例:tcp

[root@node1 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 855264   2108 257940    0    0    80    17   66   67  0  0 99  1  0
[root@node1 ~]# vmstat -s
      1237288 K total memory
       122208 K used memory
       161724 K active memory
       101396 K inactive memory
       855000 K free memory
         2108 K buffer memory
       257972 K swap cache
      2097148 K total swap
            0 K used swap
      2097148 K free swap
          280 non-nice user cpu ticks
            0 nice user cpu ticks
          633 system cpu ticks
       239275 idle cpu ticks
         1606 IO-wait cpu ticks
            0 IRQ cpu ticks
           38 softirq cpu ticks
            0 stolen cpu ticks
       190868 pages paged in
        40644 pages paged out
            0 pages swapped in
            0 pages swapped out
       156772 interrupts
       161220 CPU context switches
   1537771118 boot time
         2113 forks

pmap命令:編輯器

  • report memory map of a process
    pmap [options] pid [...]
    -x:顯示詳細格式的信息;ide

    另外一種查看方式:cat  /proc/PID/maps

glances命令:

  • A cross-platform curses-based monitoring tool
    內建命令:
    經常使用選項:
    -b:以Byte爲單位顯示網上數據速率;
    -d:關閉磁盤I/O模塊;
    -m:關閉mount模塊;
    -n:關閉network模塊;
    -t #:刷新時間間隔;
    -1:每一個cpu的相關數據單獨顯示;
    -o {HTML|CSV}:輸出格式;
    -f /PATH/TO/SOMEDIR:設定輸出文件的位置;
    示例:
    glances –b
    Linux 網絡基礎及條件語句

glances –1

Linux 網絡基礎及條件語句

dstat命令:

- versatile tool for generating system resource statistics
        dstat [-afv] [options..] [delay [count]]
        經常使用選項:
            -c, --cpu:顯示cpu相關信息;
                -C #,#,...,total
            -d, --disk:顯示磁盤的相關信息
                -D sda,sdb,...,tobal
            -g:顯示page相關的速率數據;
            -m:Memory的相關統計數據
            -n:Interface的相關統計數據;
            -p:顯示process的相關統計數據;
            -r:顯示io請求的相關的統計數據;
            -s:顯示swapped的相關統計數據;
            --tcp 
            --udp
            --raw 
            --socket    
            --ipc 
            --top-cpu:顯示最佔用CPU的進程;
            --top-io:最佔用io的進程;
            --top-mem:最佔用內存的進程;
            --top-lantency:延遲最大的進程;

示例:

[root@node1 ~]# dstat 
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0  99   0   0   0|  70k  202k|   0     0 |   0     0 | 116   104 
  0   0 100   0   0   0|   0     0 |  60B  890B|   0     0 |  98    90 
  1   0 100   0   0   0|   0     0 | 120B  422B|   0     0 |  86    75 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 | 106    97 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  92    85 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 | 100    95 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  85    78 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  86    83 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  81    73 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  97    90 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  83    75 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  85    80 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  85    77 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  97    91 
  0   0 100   0   0   0|   0  1488k|  60B  362B|   0     0 | 109    83 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  85    78 
  0   0 100   0   0   0|   0     0

kill命令:

  • terminate a process
    用於向進程發送信號,以實現對進程的管理;
    顯示當前系統可用信號:
    kill -l [signal]
    每一個信號的標識方法有三種:
    1) 信號的數字標識;
    2) 信號的完整名稱;
    3) 信號的簡寫名稱;

    向進程發信號:
            kill  [-s signal|-SIGNAL]  pid...
            經常使用信號:
                1) SIGHUP:無須關閉進程而讓其重讀配置文件;
                2)SIGINT:終止正在運行的進程,至關於Ctrl+c
                9)SIGKILL:殺死運行中的進程;
                15)SIGTERM:終止運行中的進程;
                18)SIGCONT:
                19)SIGSTOP:
    
    killall命令:
  • kill processes by name
    killall [-SIGNAL] program
  • 四、使用until和while分別實現192.168.0.0/24 網段內,地址是否可以ping通,弱ping通則輸出"success!",若ping不通則輸出"fail!"

While 語句

[root@node1 ~]# cat while.sh 
#!/bin/bash
#
declare -i i=1

while [ $i -le 254 ];do
         if ping -W 1 -c 1 192.168.0.$1 &> /dev/null;then
                 echo "host 192.168.0.$1 is alive."
         else
                 echo "host 192.168.0.$1 is down."
         fi
         let i++
done
[root@node1 ~]# bash while.sh 
host 192.168.0. is down.
host 192.168.0. is down.
host 192.168.0. is down.
host 192.168.0. is down.
host 192.168.0. is down.

Until 語句

[root@node1 ~]# cat until.sh 
#!/bin/bash
#
declare -i i=1

until [ $i -gt 254 ];do
         if ping -W 1 -c 1 192.168.0.$1 &> /dev/null;then
                 echo "host 192.168.0.$1 is alive."
         else
                 echo "host 192.168.0.$1 is down."
         fi
         let i++
done
[root@node1 ~]# bash until.sh 
host 192.168.0. is down.
host 192.168.0. is down.
host 192.168.0. is down.
相關文章
相關標籤/搜索