Chapter 6——Linux网络基础

一、简述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:  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:  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:  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:  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:  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:  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:  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:  mtu 65536 qdisc noop state DOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: eth1:  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:  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:  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:  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  [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   partition specific statistics
   -S, --unit       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: [email protected]|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网络基础)