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
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
iproute家族: bash
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 [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命令:
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;网络
vmstat命令:app
选项:
-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命令:
glances –1
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命令:
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.