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.