1、簡述osi七層模型和TCP/IP五層模型
- OSI七層模型為:從上至下為應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。
- OSI七層參考模型的各個層次的劃分遵循下列原則:
a、同一層中的各網絡節點都有相同的層次結構,具有同樣的功能。
b、同一節點內相鄰層之間通過接口(可以是邏輯接口)進行通信。
c、七層結構中的每一層使用下一層提供的服務,并且向其上層提供服務。
d、不同節點的同等層按照協議實現對等層之間的通信。
- 各層功能
應用層:文件傳輸,電子郵件,文件服務,虛擬終端。協議有:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示層:數據格式化,代碼轉換,數據加密
會話層:解除或建立與別的接點的聯系
傳輸層:提供端對端的接口。協議有:TCP,UDP
網絡層:為數據包選擇路由。協議有:IP,ICMP,RIP,OSPF,BGP,IGMP
數據鏈路層:傳輸有地址的幀以及錯誤檢測功能。協議有:SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層:以二進制數據形式在物理媒體上傳輸數據。協議有:ISO2110,IEEE802,IEEE802.2
TCP/IP五層模型
TCP/IP五層模型為:應用層、傳輸層、網絡層、數據鏈路層、物理層
2、簡述iproute家族命令
iproute家族命令眾多,這里只介紹ip與ss命令
ip命令
這里主要介紹如何通過ip命令的link、route、addr分別設置查看主機的IP地址,路由等信息
- ip link
set:修改設備屬性
show:顯示設備屬性的,state是狀態。顯示的是二層設備屬性的,與IP無關
ip link set eht1 down/up
//關閉或開啟網卡
ip link set eth1 multicast off/on
//關閉或開啟多播功能
ip link set eth2 down
ip link set eth1 name eno6668889999
//先down掉網卡再改名
ip link add mynet
//添加一個叫mynet的網絡空間
ip link set eno16777736 netns mynet
//將16777736放入mynet空間
- 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 netns list
//查看網絡空間名稱
ip netns exec mynet ip link show
//這時用普通的命令是查看不到16777736網卡的,用此命令才能查看到此網卡,這像是一個虛擬機一樣。這是用來創建虛擬網絡的
ip netns del mynet
//刪除網絡空間 - ip address:IP地址管理
ip address delete:刪除地址
ip address show:查看地址
ip address flush:清空所有地址
ip addr show
//顯示所有IP地址
ip addr list
ifconfig eth1 0
//刪除eth1上的地址
ip addr add 192.168.1.22/24 dev eno16777736
//添加地址,可以在一塊網卡上添加多個地址,只有在一個網段的地址上才會有secondary,不同網段不會有。添加的地址用ifconfig是顯示不了的,如果要顯示需要加接口別名
ip addr add 192.168.1.43/24 dev eno16777736 lable eno16777736:0
//這樣用ifconfig就能顯示了
ip link show
//這樣可以查看到地址
ip addr del 192.168.1.43/24 dev eno16777736
//刪除地址
ip addr flush dev eth1
//清空eth1上的所有地址 - ip route:路由表管理
ip route add – add new route:添加路由
ip route change – change route:修改路由
ip route replace – change or add new one:替換路由,有老的就改老的,沒有就加新的
ip route list
顯示路由
ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.20.0.1
要到達192的網絡,要經由10網絡,via是指明下一跳地址的,下一跳地址應該是本地同一網段內的地址。還可以配置源地址,源地址應該是本地網卡上的地址中的一個
ip route add default via 172.16.0.1 dev eno16777736
//添加默認網關
ip route delete 192.168.1.0/24
刪除到192網絡的路由
ip route show src 172.16.100.6
只顯示源地址是172的路由條目
ip route get 192.168.0.0/24
顯示到192網絡的路由
ip route flush 10/8
清除10開頭的網絡路由,如果刪除不了,就要將地址寫的再詳細些
ss命令
選項:
-t:TCP協議的相關連接
-u:UDP相關的連接
-w:raw socket(裸套接字)相關的連接
-l:監聽狀態的連接
-a:所有狀態的連接
-n:數字格式
-p:相關的程序及其PID
-e:擴展格式信息
-m:內存用量
-o:計時器信息
3、詳細說明進行管理工具htop、vmstat等相關命令,并舉例
htop是比top命令更強大的監控命令
運行htop命令后會有如下顯示
- 最上方顯示信息為:左邊為:cpu、內存、交換分區的使用情況,右邊為:Tasks為進程總數,當前運行的進程數、Load average為系統1分鐘,5分鐘,10分鐘的平均負載情況、Uptime為系統運行的時間。
- 下方信息為:
PID:進行的標識號
USER:運行此進程的用戶
PRI:進程的優先級
NI:進程的優先級別值,默認的為0,可以進行調整
VIRT:進程占用的虛擬內存值
RES:進程占用的物理內存值
SHR:進程占用的共享內存值
S:進程的運行狀況,R表示正在運行、S表示休眠,等待喚醒、Z表示僵死狀態
%CPU:該進程占用的CPU使用率
%MEM:該進程占用的物理內存和總內存的百分比
TIME+:該進程啟動后占用的總的CPU時間
COMMAND:進程啟動的啟動命令名稱 - 最下方信息為:
F1:查看htop使用說明
F2:htop 設定
F3:搜索進程
F4:增量進程過濾器
F5:顯示樹形結構
F6:選擇排序方式
F7:可減少nice值可以提高對應進程的優先級
F8:可增加nice值,降低對應進程的優先級
F9:可對進程傳遞信號
F10:結束htop
vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值
一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數,如:vmstat 2 1
,其中2表示每個兩秒采集一次服務器狀態,1表示只采集一次。一般只需要輸入多久采集一次就可以了。
下面解釋一下顯示的內容:
- r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什么程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
- b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
- swpd 虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。
- free 空閑的物理內存的大小,我的機器內存總共8G,剩余3415M。
- buff Linux/Unix系統是用來存儲,目錄里面有什么內容,權限等的緩存,我本機大概占用300多M
- cache cache直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)
- si 每秒從磁盤讀入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。
- so 每秒虛擬內存寫入磁盤的大小,如果這個值大于0,同上。
- bi 塊設備每秒接收的塊數量,這里的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什么IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒
- bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調整。
- in 每秒CPU的中斷次數,包括時間中斷
- cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。
- us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。
- sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
- id 空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
- wt 等待IO CPU時間。
4、使用until和while分別實現192.168.0.0/24網段內,地址是否能夠ping通,弱ping通則輸出”success!”,若ping不通則輸出”fail!”#!/bin/bash
#
NET=192.168.1.
NET1=0
trap 'echo "exit..." && exit 1' INT
while [ $NET1 -lt 255 ];do
let NET1++
if ping -c 1 -W 1 $$NET$NET1 &> /dev/null;then
echo -e "\033[31m$NET$NET1 is success!\033[0m"
else
echo -e "\033[32m$NET$NET1 is fail!\033[0m"
fi
done
#!/bin/bash
#
NET=192.168.1.
NET1=0
trap 'echo "exit!!!" && exit 1' INT
until [ $NET1 -ge 255 ];do
let NET1++
if ping -W 1 -c 1 $$NET$NET1 &> /dev/null;then
echo -e "\033[31m$NET$NET1 is success!\033[0m"
else
echo -e "\033[32m$NET$NET1 is fail!\033[0m"
fi
done
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90908