美文网首页
Chapter 6——Linux网络基础

Chapter 6——Linux网络基础

作者: xlong1121 | 来源:发表于2018-10-04 18:33 被阅读0次

    一、简述osi七层模型和TCP/IP五层模型

    OSI七层模型:

    (图摘自华为官网HCNA教材)


    image.png

    简述:(从下往上)
    物理层:在设备之间传输比特流,规定了电平、速度和电缆针脚。————(数据形式:比特流)
    数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。————(数据形式:数据帧)
    网络层:提供逻辑地址,供路由器确定路径。 ————(数据形式:数据包)
    传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。————(数据形式:数据段)
    会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
    表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
    应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

    TCP/IP五层模型:

    image.png

    数据的封装过程:
    应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交换信息。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。
    上层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段 );
    数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包);
    数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧);
    最后,帧被转换为比特,通过网络介质传输。

    OSI七层模型和TCP/IP五层模型的对应关系

    image.png

    二、简述iproute家族命令

    ip命令

    ip [ OPTIONS ] OBJECT { COMMAND | help }
        OBJECT = { link | addr | route | netns }
        注:OBJECT的命令可简写,其子命令也可简写。
    

    OBJECT = { link | addr | route | netns }

    ip link

    ip link show - display device attributes
    ip link help - 显示简要使用帮助;
    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,用于将接口移动到指定的网络名称空间;
    

    示例:
    1、查看当前所有网络连接属性

    [root@centos7u2 ~]# ip link show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
        link/ether 00:0c:29:d6:cb:13 brd ff:ff:ff:ff:ff:ff
    3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
    

    2、禁用网络连接及重命名连接:

    [root@centos7u2 ~]# ip link set dev eno33554960 name eth1
    RTNETLINK answers: Device or resource busy
    [root@centos7u2 ~]# ip link set down dev eno33554960
    [root@centos7u2 ~]# ip link set dev eno33554960 name eth1
    [root@centos7u2 ~]# ip link show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
        link/ether 00:0c:29:d6:cb:13 brd ff:ff:ff:ff:ff:ff
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
    

    ip netns

    ip netns:ip - manage network namespaces
        ip netns list:列出所有的netns
        ip netns add NAME:创建指定的netns
        ip netns del NAME:删除指定的netns
        ip netns exec NAME COMMAND:在指定的netns中运行命令
    

    示例:
    1、添加并查看网络名称空间

    [root@centos7u2 ~]# ip netns add ns1
    [root@centos7u2 ~]# ip netns add ns2
    [root@centos7u2 ~]# ip netns list
    ns2
    ns1
    

    2、管理指定网络名称空间中的网络连接

    [root@centos7u2 ~]# ip netns exec ns1 ip a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    [root@centos7u2 ~]# ip link set eth1 netns ns2
    [root@centos7u2 ~]# ip netns exec ns2 ip link set up eth1
    [root@centos7u2 ~]# ip netns exec ns2 ip addr
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
        inet6 fe80::20c:29ff:fed6:cb1d/64 scope link 
           valid_lft forever preferred_lft forever
    

    ip addr

    ip address - protocol address management
        ip address add IP/MASK dev IFACE
            [label NAME]:为额外添加的地址指明接口别名;
            [broadcast ADDRESS]:广播地址;会根据IP和netmask自动计算得到;
            [scope SCORE_VALUE]:
                global:全局可用;
                link:接口可用;
                host:仅本机可用;
        ip address delete IP/MASK dev IFACE
        ip address list [IFACE]:显示接口的地址;
        ip address flush dev IFACE
    

    示例:
    1、查看指定的网络连接的信息

    [root@centos7u2 ~]# ip addr list eno33554960
    3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.142/24 brd 192.168.200.255 scope global dynamic eno33554960
           valid_lft 1714sec preferred_lft 1714sec
        inet6 fe80::20c:29ff:fed6:cb1d/64 scope link 
           valid_lft forever preferred_lft forever
    

    2、修改指定网络连接的IP地址

    [root@centos7u2 ~]# ip addr delete 192.168.200.142/24 dev eno33554960
    [root@centos7u2 ~]# ip addr list eno33554960
    3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
        inet6 fe80::20c:29ff:fed6:cb1d/64 scope link 
           valid_lft forever preferred_lft forever
    [root@centos7u2 ~]# ip addr add 192.168.200.200/24 dev eno33554960
    [root@centos7u2 ~]# ip addr list eno33554960
    3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.200/24 scope global eno33554960
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fed6:cb1d/64 scope link 
           valid_lft forever preferred_lft forever
    

    ip route

    ip route - routing tables management
        ip route add - add new route
            ip route add TYPE/PREFIX via <NEXTHOP> [dev IFACE] [src SOURCE_IP]
        ip route change - change route
        ip route replace - change or add new one
        ip route delete - delete route
        ip route show - list routes
        ip route flush - flush routing tables
        ip route get - get a single route
    

    示例:
    1、添加一条路由条目

    [root@centos7u2 ~]# ip route add 192.168.100.0/24 via 192.168.200.2 dev eno33554960 src 192.168.200.200
    [root@centos7u2 ~]# ip route show
    default via 192.168.2.1 dev eno16777736  proto static  metric 100 
    192.168.2.0/24 dev eno16777736  proto kernel  scope link  src 192.168.2.104  metric 100 
    192.168.100.0/24 via 192.168.200.2 dev eno33554960  src 192.168.200.200 
    192.168.200.0/24 dev eno33554960  proto kernel  scope link  src 192.168.200.200 
    

    ss命令

    同netstat作用相同,但功能更为强大和高效,故可用来替换netstat

    ss [options] [ FILTER ]
        options:
            -t:TCP协议的相关连接
            -u:UDP协议的相关连接
            -w:raw socket相关的连接
            -l:监听的连接
            -a:所有状态
            -n:以数字格式显示IP和Port
            -e:扩展格式
            -p:显示相关的进程及PID
            -m:内存用量
            -o:计时器信息
        FILTER:= [state TCP-STATE] [EXPRESSION]
            TCP的常见状态:
                TCP FSM:
                    LISTEN:监听
                    ESTABLISHED:建立的连接
                    FIN_WAIT_1:
                    FIN_WAIT_2:
                    SYN_SENT:
                    SYN_RECV:
                    CLOSED:
                EXPRESSION:
                    dport=
                    sport=
    

    示例:
    1、查看当前系统侦听了哪些端口

    [root@centos7u2 ~]# ss -tunlp
    Netid State      Recv-Q Send-Q                                                         Local Address:Port                                                                        Peer Address:Port              
    udp   UNCONN     0      0                                                                          *:59355                                                                                  *:*                   users:(("dhclient",pid=5047,fd=20))
    udp   UNCONN     0      0                                                                          *:68                                                                                     *:*                   users:(("dhclient",pid=5047,fd=6))
    udp   UNCONN     0      0                                                                          *:68                                                                                     *:*                   users:(("dhclient",pid=4162,fd=6))
    udp   UNCONN     0      0                                                                          *:37808                                                                                  *:*                   users:(("dhclient",pid=4162,fd=20))
    udp   UNCONN     0      0                                                                         :::26566                                                                                 :::*                   users:(("dhclient",pid=4162,fd=21))
    udp   UNCONN     0      0                                                                         :::30106                                                                                 :::*                   users:(("dhclient",pid=5047,fd=21))
    tcp   LISTEN     0      128                                                                        *:22                                                                                     *:*                   users:(("sshd",pid=1791,fd=3))
    tcp   LISTEN     0      100                                                                127.0.0.1:25                                                                                     *:*                   users:(("master",pid=2940,fd=13))
    tcp   LISTEN     0      128                                                                       :::80                                                                                    :::*                   users:(("httpd",pid=2958,fd=4),("httpd",pid=2957,fd=4),("httpd",pid=2956,fd=4),("httpd",pid=2955,fd=4),("httpd",pid=2954,fd=4),("httpd",pid=1792,fd=4))
    tcp   LISTEN     0      128                                                                       :::22                                                                                    :::*                   users:(("sshd",pid=1791,fd=4))
    tcp   LISTEN     0      100                                                                      ::1:25                                                                                    :::*                   users:(("master",pid=2940,fd=14))
    tcp   LISTEN     0      128                                                                       :::9090                                                                                  :::*                   users:(("systemd",pid=1,fd=36))
    

    2、查看指定的源端口或目的端口的侦听状态

    [root@centos7u2 ~]# ss -tan '( dport = :22 or sport = :22 )'
    State       Recv-Q Send-Q                                                           Local Address:Port                                                                          Peer Address:Port              
    LISTEN      0      128                                                                          *:22                                                                                       *:*                  
    ESTAB       0      52                                                               192.168.2.104:22                                                                           192.168.2.103:49368              
    ESTAB       0      136                                                              192.168.2.104:22                                                                           192.168.2.103:65250              
    LISTEN      0      128                                                                         :::22                                                                                      :::*
    

    3、查看处于指定的TCP协议状态的端口的相关信息

    [root@centos7u2 ~]# ss -tan state ESTABLISHED
    Recv-Q Send-Q                                                                Local Address:Port                                                                               Peer Address:Port              
    0      52                                                                    192.168.2.104:22                                                                                192.168.2.103:49368              
    0      136                                                                   192.168.2.104:22                                                                                192.168.2.103:65250 
    

    三、详细说明进程管理工具htop、vmstat等相关命令,并举例

    htop命令

    选项:
        -d #:指定延迟时间间隔;
        -u UserName:仅显示指定用户的进程;
        -s COLUME:以指定字段进行排序;
    子命令:
        l:列出选定的进程所占用的文件列表;(需要lsof命令)
        s:跟踪选定的进程的系统调用;(需要trace命令)
        t:以层级关系显示各进程状态;
        a:将选定的进程绑定至指定的CPU核心;
    [root@centos7u2 ~]# htop
    

    直接使用htop命令,进入进程管理视图,可动态展示当前系统的进程及资源状态;该界面可使用鼠标点击操作:


    image.png

    按F1可获取相关操作的帮助


    image.png

    常用子命令:
    l:列出选定的进程所打开的文件列表


    image.png

    s:跟踪选定的进程的系统调用


    image.png

    t:以层级关系显示各进程状态


    image.png

    a:将选定的进程绑定至指定的CPU核心


    image.png

    vmstat命令

    vmstat - Report virtual memory statistics

    vmstat [options] [delay [count]]
    Options:
       -a, --active           active/inactive memory
       -f, --forks            number of forks since boot
       -m, --slabs            slabinfo
       -n, --one-header       do not redisplay header
       -s, --stats            event counter statistics
       -d, --disk             disk statistics
       -D, --disk-sum         summarize disk statistics
       -p, --partition <dev>  partition specific statistics
       -S, --unit <char>      define display unit
       -w, --wide             wide output
       -t, --timestamp        show timestamp
    状态信息说明:
        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 space
            id:idle
            wa:wait
            st:stolen
    

    示例:
    1、每隔2s读取一次系统状态,总共读取3次

    [root@centos7u2 ~]# vmstat 2 3
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 3293188   3160 363404    0    0    11    13   36   57  0  0 99  1  0
     1  0      0 3293296   3160 363404    0    0     0     7  105  174  0  0 97  3  0
     0  0      0 3293296   3160 363404    0    0     0     7   94  145  0  0 100  0  0
    [root@centos7u2 ~]# 
    

    2、查看当前磁盘IO状态

    [root@centos7u2 ~]# vmstat -d 
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda     5750     15  440346   89485  28752    911  529907  221277      0    176
    sr0       41      0    1848     952      0      0       0       0      0      0
    dm-0    4651      0  380269   87044  29154      0  525787  233259      0    175
    dm-1     184      0    3040     120      0      0       0       0      0      0
    loop0      0      0       0       0      0      0       0       0      0      0
    

    3、查看内存统计数据

    [root@centos7u2 ~]# vmstat -s
          3866948 K total memory
           207236 K used memory
           250156 K active memory
           152388 K inactive memory
          3293044 K free memory
             3160 K buffer memory
           363508 K swap cache
          2097148 K total swap
                0 K used swap
          2097148 K free swap
              807 non-nice user cpu ticks
                2 nice user cpu ticks
             4831 system cpu ticks
          2172135 idle cpu ticks
            13302 IO-wait cpu ticks
                0 IRQ cpu ticks
               70 softirq cpu ticks
                0 stolen cpu ticks
           221602 pages paged in
           279446 pages paged out
                0 pages swapped in
                0 pages swapped out
           787861 interrupts
          1241506 CPU context switches
       1538640948 boot time
             6771 forks
    

    glances命令

    glances - A cross-platform curses-based system monitoring tool
    常用选项:
        -b:以Byte为单位显示网上数据速率;
        -d:关闭磁盘I/O模块;
        -m:关闭mount模块;
        -n:关闭network模块;
        -t #:刷新时间间隔;
        -1:每个cpu的相关数据单独显示;
        -o {HTML|CSV}:输出格式;
        -f /PATH/TO/SOMEDIR:设定输出文件的位置;
    
    image.png

    此时,键入子命令h即可进入帮助界面:


    image.png

    除以上使用外,glances还支持C/S模式,即可获取远端服务器的状态信息,使用方法如下:

    C/S模式下运行glances命令:
        服务模式:
            glances -s -B IPADDR
            IPADDR:本机的某地址,用于监听;
        客户端模式:
            glances -c IPADDR
            IPADDR:远程服务器的IP地址
    

    dstat命令

    融合了以上所有工具的特点

    dstat - versatile tool for generating system resource statistics
    
    dstat [-afv] [options..] [delay [count]]
    选项:
        -c,--cpu:显示cpu相关信息;
            -C#,#,...,total
        -d,--disk:显示磁盘的相关信息;
            -D sda,sdb,...,total
        -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-latency:显示延迟最高的进程;
    

    示例:
    1、动态展示当前系统状态信息,默认选项:-cdngy

    [root@centos7u2 ~]# 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   1   0   0|  37k   48k|   0     0 |   0     0 | 148   229 
      0   0 100   0   0   0|   0     0 | 162B  948B|   0     0 |  77   128 
      0   0 100   0   0   0|   0    26k| 162B  420B|   0     0 | 119   186 
      0   0 100   0   0   0|   0     0 | 162B  420B|   0     0 |  74   128 
      0   1  99   0   0   0|   0    26k| 162B  420B|   0     0 | 196   297 
      0   0  96   3   0   0|   0    34k| 530B  494B|   0     0 | 215   336 
      0   0 100   0   0   0|   0    26k| 346B  420B|   0     0 | 136   216 ^C
    [root@centos7u2 ~]# 
    

    2、动态展示当前系统的各协议等状态

    [root@centos7u2 ~]# dstat --tcp --udp --raw --socket
    ----tcp-sockets---- --udp-- raw ------sockets------
    lis act syn tim clo|lis act|raw|tot tcp udp raw frg
      6   1   1   0   1|  6   0|  0|578   5   4   0   0
      6   1   2   0   1|  6   0|  0|579   6   4   0   0
      6   1   2   0   1|  6   0|  0|579   6   4   0   0
      6   1   2   0   1|  6   0|  0|579   6   4   0   0
      6   1   2   0   1|  6   0|  0|579   6   4   0   0
      6   1   2   0   1|  6   0|  0|579   6   4   0   0^C
    

    3、动态展示当前系统最占用相关资源的进程

    [root@centos7u2 ~]# dstat --top-cpu --top-io --top-mem
    -most-expensive- ----most-expensive---- --most-expensive-
      cpu process   |     i/o process      |  memory process 
    360entclient 0.1|360entclien  74k   31k|360entclient32.0M
    360entclient 0.2|360entclien  85k  128k|360entclient32.0M
    rcuos/0      0.2|irqbalance 7362B    0 |360entclient32.0M
                    |360entclien7400B 6692B|360entclient32.0M
    rcu_sched    0.2|sshd: root@ 155B  196B|360entclient32.0M
    360entclient 0.2|360entclien7400B 7070B|360entclient32.0M
                    |sshd: root@ 162B  212B|360entclient32.0M
                    |360entclien7400B 6692B|360entclient32.0M
    sshd: root@pt0.2|360entclien  62k   74B|360entclient32.0M
    kworker/2:0  0.2|360entclien  19k 6692B|360entclient32.0Mq
                    |360entclien  39k   24k|360entclient32.0M
    360entclient 0.2|360entclien7400B 6692B|360entclient32.0M
    xfsaild/dm-0 0.2|irqbalance 7362B    0 |360entclient32.0M^C
    

    四、使用until和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

    while方式:

    [root@centos7u2 ~]# cat while.sh 
    #!/bin/bash
    #
    
    i=1
    while [ $i -le 254 ];do
        ping -c 2 192.168.0.$i &> /dev/null
        if [ $? -eq 0 ];then
            echo "success!"
        else
            echo "fail!"
        fi
        let i++
    done
    

    until方式:

    [root@centos7u2 ~]# cat until.sh 
    #!/bin/bash
    #
    
    i=1
    until [ $i -gt 254 ];do
        ping -c 2 192.168.0.$i &> /dev/null
        if [ $? -eq 0 ];then
            echo "success!"
        else
            echo "fail!"
        fi
        let i++
    done
    

    相关文章

      网友评论

          本文标题:Chapter 6——Linux网络基础

          本文链接:https://www.haomeiwen.com/subject/ifpxaftx.html