Linux 網絡基礎及條件語句
1、 簡述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)
TCP/IP 五層模型
TCP/IP協議體系結構(又稱TCP/IP協議參考模型)是專門針對使用TCP/IP協議簇的廣域計算機網絡而開發的,可以說是OSI的改進版本。但絕不能簡單地認為是改進版,因為它與OSI參考模型所針對的網絡類型存在較大區別,所以這兩種體系結構中各層所采用的通信協議,以及功能實現原理上都存在非常大的差異。
-
2、簡述iproute家族命令
iproute家族:
-
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
-
2、 詳細說明進行管理工具htop、vmstat等相關命令,並舉例
htop命令:
選項:
-d #:指定延遲時間間隔;
-u UserName:僅顯示指定用戶的進程;
-s COLUME:以指定字段進行排序;
子命令:
l:顯示選定的進程打開的文件列表;
s:跟蹤選定的進程的系統調用;
t:以層級關系顯示各進程狀態;
a:將選定的進程綁定至某指定的CPU核心;vmstat命令:
- 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
- Report virtual memory statistics
選項:
-s:顯示內存統計數據;
示例:
[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:顯示詳細格式的信息;另一種查看方式: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
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命令:
- kill processes by name
killall [-SIGNAL] program
-
4、使用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.
Linux 網絡基礎及條件語句