Q1:請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。
網橋:網橋(Bridge)是早期的兩端口二層網絡設備,用來連接不同網段。網橋的兩個端口分別有一條獨立的交換信道,不是共享一條背板總線,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條背板總線的。后來,網橋被具有更多端口、同時也可隔離沖突域的交換機(Switch)所取代。 集線器:集線器的英文稱為“Hub”?!癏ub”是“中心”的意思,集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。它工作于OSI(開放系統互聯參考模型)參考模型第一層,即“物理層”。集線器與網卡、網線等傳輸介質一樣,屬于局域網中的基礎設備,采用CSMA/CD(即帶沖突檢測的載波監聽多路訪問技術)介質訪問控制機制。集線器每個接口簡單的收發比特,收到1就轉發1,收到0就轉發0,不進行碰撞檢測。 二層交換機:二層交換機工作于OSI模型的第2層(數據鏈路層),故而稱為二層交換機。二層交換技術的發展已經比較成熟,二層交換機屬數據鏈路層設備,可以識別數據包中的MAC地址信息,根據MAC地址進行轉發,并將這些MAC地址與對應的端口記錄在自己內部的一個地址表中。 三層交換機:三層交換機就是具有部分路由器功能的交換機,三層交換機的最重要目的是加快大型局域網內部的數據交換,所具有的路由功能也是為這目的服務的,能夠做到一次路由,多次轉發。對于數據包轉發等規律性的過程由硬件高速實現,而像路由信息更新、路由表維護、路由計算、路由確定等功能,由軟件實現。三層交換技術就是二層交換技術+三層轉發技術。傳統交換技術是在OSI網絡標準模型第二層——數據鏈路層進行操作的,而三層交換技術是在網絡模型中的第三層實現了數據包的高速轉發,既可實現網絡路由功能,又可根據不同網絡狀況做到最優網絡性能。 路由器:路由器(Router),是連接因特網中各局域網、廣域網的設備,它會根據信道的情況自動選擇和設定路由,以最佳路徑,按前后順序發送信號。 路由器是互聯網絡的樞紐,"交通警察"。目前路由器已經廣泛應用于各行各業,各種不同檔次的產品已成為實現各種骨干網內部連接、骨干網間互聯和骨干網與互聯網互聯互通業務的主力軍。路由和交換機之間的主要區別就是交換機發生在OSI參考模型第二層(數據鏈路層),而路由發生在第三層,即網絡層。這一區別決定了路由和交換機在移動信息的過程中需使用不同的控制信息,所以說兩者實現各自功能的方式是不同的。
Q2:IP地址的分類有哪些?子網掩碼的表示形式及其作用;
IP地址分類
A類IP地址:地址范圍0.0.0.0 -- 127.0.0.0,默認子網掩碼255.0.0.0 B類IP地址:地址范圍128.0.0.0 -- 191.255.0.0,默認子網掩碼255.255.0.0 C類IP地址:地址范圍192.0.0.0 -- 223.255.255.0,默認子網掩碼255.255.255.0 D類是組播地址:地址范圍224.0.0.0 -- 239.255.255.255 E類作為保留研究:地址范圍240.0.0.0 -- 255.255.255.255 保留私網地址: A類:10.0.0.0 -- 10.255.255.255 B類:172.16.0.0 -- 172.31.255.255 C類:192.168.0.0 -- 192.168.255.255 特殊地址: 本地還回地址:127.0.0.1 -- 127.0.0.255 主機請求無法被分配時候,自己生成的地址:169.254.0.0
子網掩碼的表示形式及其作用
子網掩碼用二進制方式表示地話,也是一個32位的數字。它對應IP地址網絡標識部分的位全部為“1”,對應IP地址主機標識的部分則全部為“0”。由此,一個IP地址可以不再受限于自己的類別,而是可以用這樣的子網掩碼自由地定位自己的網絡標識長度。當然,子網掩碼必須是IP地址的首位連續的“1”。對于子網掩碼,目前有兩種表示方式:一種是用32位數字表示;另一種,則是在每個IP地址后面追加網絡地址的位數,用“/”隔開。 子網掩碼作用:用來區分IP地址的網絡號與主機號;當TCP/IP網絡上的主機相互通信時,就可以利用子網掩碼得知這些主機是否在相同的網絡區段內;用來將網絡分割為多個子網。
Q3:計算機網絡的分成模型有哪些(OSI模型和TCP/IP模型),每一層的功能及涉及到的物理設備有哪些。
Q4:如何將Linux主機接入到TCP/IP網絡,請描述詳細的步驟。(手動指定的方式)
-
輸入命令
ifconfig -a
查看設備名稱; -
輸入命令
ifconfig DEVICENAME IP
進行IP地址設定; -
輸入命令
vim /etc/sysconfig/network-script/DEVICENAME
修改腳本;BOOTPROTO=static ONBOOT=yes IPADDR NETMASK GATEWAY DNS1
-
輸入命令
systemctl restart network.service
進行服務重載;
Q5:為Linux主機配置網絡信息的方式有哪些,請描述各個過程。
臨時有效:使用命令ip或者ifconfig進行修改,立即生效; 永久生效:修改網卡配置腳本文件,需要重啟服務或者ifdown/ifup對網卡單獨操作; 使用圖形界面setup--網絡配置,需要重啟服務生效;
Q6:寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;在線的主機使用綠色顯示;不在線的主使用紅色顯示;
#!/bin/bash # trap 'exit 1' INT declare -i i=1 for i in(seq 254);do if ping 172.16.250.$i -c 1 -W 1 &> /dev/null;then echo -e "\033[0;32;1m 172.16.250.$i is up! \033[0m" else echo -e "\033[0;31;1m 172.16.250.$i is down! \033[0m" fi let i++ done
Q7:詳細描述每個網絡接口的配置文件中各個參數的含義和其所對應的值;
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服務來控制接口; #在CentOS 6及以前不啟用,一般用network)
Q8:如何給網絡接口配置多個地址,有哪些方式?
#臨時生效: 使用ip / ifconfig輸入命令: ~]# ip addr add IP/mask dev eth0:0 ~]# ifconfig IFACE_LABEL IPADDR/NETMASK #其中IFACE_LABEL:eth0:0, eth0:1; #修改配置文件: DEVICE=IFACE_LABEL BOOTPROTO:網上別名不支持動態獲取地址, static, none;
Q9:常用的網絡管理類工具有哪些,并用示例形式描述他們的使用方法。
ifconfig命令:接口及地址查看和管理 ifconfig [INTERFACE] # ifconfig -a:顯示所有接口,包括inactive狀態的接口; ifconfig interface [aftype] options | address ... # ifconfig IFACE IP/MASK [up|down] # ifconfig IFACE IP netmask NETMASK options: [-]promisc 混雜模式; ~]# ifconfig eth1 promisc 打開混雜模式; ~]# ifconfig eth1 -promisc 關閉混雜模式; route命令:路由查看及管理 查看: # route -n 添加: route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If] 網絡路由/主機路由 示例:route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1 route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 route add default gw 192.168.10.1 表示為默認網關 【配置單個主機】options改為 -host即可 刪除: route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] 示例:route del -net 10.0.0.0/8 gw 192.168.10.1 route del default netstat命令: 顯示路由表:netstat -rn -r:顯示內核路由表 -n:數字格式 顯示網絡連接: netstat [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p] -t:TCP協議的相關連接,連接均有其狀態;FSM(Finate State Machine); -u:UDP相關的連接 -w:raw socket相關的連接 -l:處于監聽狀態的連接 -a:所有狀態 -n:以數字格式顯示IP和Port; -e:擴展格式 -p:顯示相關的進程及PID; 常用組合: -tan, -uan, -tnl, -unl, -tunlp 顯示接口的統計數據: netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n] 所有接口: netstat -i 指定接口: netstat -I<IFace> ifup/ifdown命令: 注意:通過配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE來識別接口并完成配置; ip命令: 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 與ifconfig很相似,用于設置某屬性屬于什么狀態; <[dev] NAME (default)>:指明要管理的設備,dev關鍵字可省略; up和down:啟用或禁用接口; ~]# ip link set [dev] eth1 up 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地址; ip address add - add new protocol address 添加新IP地址; ip addr add IFADDR dev IFACE [label NAME]:為額外添加的地址(主地址以外)指明接口別名; [broadcast ADDRESS]:廣播地址;會根據IP和NETMASK自動計算得到; [scope SCOPE_VALUE]:(了解,不記也沒關系)scope表示作用域; global:全局可用;(大多數情況下,就使用這個) link:接口可用; host:僅本機可用; ip address delete - delete protocol address 刪除IP地址; ip addr delete IFADDR dev IFACE ip address show - look at protocol addresses 查看IP地址; ip addr list [IFACE]:顯示接口的地址; ip address flush - flush protocol addresses 刪除IP地址,清空所有的IP地址; 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] #PREFIX指的是長度的掩碼; 示例: # ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100 # ip route add default via GW ip route delete - delete route #刪除路由; ip route del TYPE PRIFIX 示例: # ip route delete 192.168.1.0/24 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 示例:ip route get 192.168.0.0/24 ss命令: ss [options] [ FILTER ] 選項: -t:TCP協議的相關連接 -u:UDP相關的連接 -w:raw socket相關的連接 -l:監聽狀態的連接 -a:所有狀態的連接 -n:數字格式 -p:相關的程序及其PID -e:擴展格式信息 -m:內存用量 -o:計時器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ] TCP的常見狀態: TCP FSM: LISTEN:監聽 ESTABLISEHD:建立的連接 FIN_WAIT_1: FIN_WAIT_2: SYN_SENT: SYN_RECV: CLOSED: EXPRESSION: dport = sport = 示例:'( dport = :22 or sport = :22)' ~]# ss -tan '( dport = :22 or sport = :22 )' ~]# ss -tan state ESTABLISHED
Q10:Linux系統軟件包管理方法(安裝、升級、卸載等操作)有哪些,以及如何管理的。
rpm命令:rpm [OPTIONS] [PACKAGE_FILE] 安裝: rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm -ivh PACKAGE_FILE ... GENERAL OPTIONS: -v:verbose,詳細信息 -vv:更詳細的輸出 [install-options]: -h:hash marks輸出進度條;每個#表示2%的進度; --test:測試安裝,檢查并報告依賴關系及沖突消息等; --nodeps:忽略依賴關系;不建議; --replacepkgs:重新安裝 注意:rpm可以自帶腳本; 四類:--noscripts preinstall:安裝過程開始之前運行的腳本,%pre , --nopre postinstall:安裝過程完成之后運行的腳本,%post , --nopost preuninstall:卸載過程真正開始執行之前運行的腳本,%preun, --nopreun postuninstall:卸載過程完成之后運行的腳本,%postun , --nopostun --nosignature:不檢查包簽名信息,不檢查來源合法性; --nodigest:不檢查包完整性信息; 升級: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升級或安裝; -F:升級 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... 純粹的升級操作; --oldpackage:降級; --force:強制升級; 注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核; (2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供; 卸載: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ... 卸載時是PACKAGE_NAME,包名即可; --allmatches:卸載所有匹配指定名稱的程序包的各版本; --nodeps:忽略依賴關系 --test:測試卸載,dry run模式 查詢: rpm {-q|--query} [select-options] [query-options] [select-options] PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本; -a, --all:查詢所有已經安裝過的包; -f FILE:查詢指定的文件FILE由哪個程序包安裝生成; -p, --package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作; --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供; --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴; e.g. ~]# rpm -q --whatprovides bash 查詢bash安裝時的包的名稱; bash-4.2.46-19.el7.x86_64 ~]# rpm -q --whatrequires bash 查詢bash被哪些程序包所依賴; dracut-033-359.el7.x86_64 initscripts-9.49.30-1.el7.x86_64 rsyslog-7.4.7-12.el7.x86_64 lvm2-2.02.130-5.el7.x86_64 [query-options] --changelog:查詢rpm包的changlog; -l, --list:程序安裝生成的所有文件列表; -i, --info:程序包相關的信息,版本號、大小、所屬的包組,等; -c, --configfiles:查詢指定的程序包提供的配置文件; -d, --docfiles:查詢指定的程序包提供的文檔; --provides:列出指定的程序包提供的所有的CAPABILITY; -R, --requires:查詢指定的程序包的依賴關系; --scripts:查看程序包自帶的腳本片斷;(四個腳本:安裝前、安裝、卸載、卸載后,其中安裝前和卸載后可以沒有) 用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ... 校驗: rpm {-V|--verify} [select-options] [verify-options] 防止安裝包在發布的時候,被做了修改,開啟后門程序之類的; S file Size differs 文件大小發生改變; M Mode differs (includes permissions and file type) 權限發生改變; 5 digest (formerly MD5 sum) differs MD5碼發生改變,文件的內容完整性發生改變; D Device major/minor number mismatch 主次設備號不匹配; L readLink(2) path mismatch readLink的路徑不匹配; U User ownership differs 屬主修改了; G Group ownership differs 屬組修改了; T mTime differs 最近一次的時間戳修改了; P caPabilities differ caPabilities發生改變; yum命令的用法:yum [options] [command] [package ...] 顯示倉庫列表: repolist [all|enabled|disabled] 顯示程序包: list # yum list [all | glob_exp1] [glob_exp2] [...] # yum list {available|installed|updates} [glob_exp1] [...] 安裝程序包: install package1 [package2] [...] reinstall package1 [package2] [...] (重新安裝) 升級程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降級) 檢查可用升級: check-update 卸載程序包: 依賴于次程序包的也都會被卸載; remove | erase package1 [package2] [...] 查看程序包information: 顯示出類似于rpm -qi的結果; info [...] 查看指定的特性(可以是某文件)是由哪個程序包所提供: 顯示出類似于rpm -qf的結果; provides | whatprovides feature1 [feature2] [...] 清理本地緩存: 因為yum下載之后,程序包會自動刪除,元數據不會被刪除,用這個命令手動刪除; clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 構建緩存:從各倉庫下載創建,無需自己去做,每次使用yum命令的時候會自動做的; makecache 搜索: search string1 [string2] [...] 以指定的關鍵字搜索程序包名及summary信息; 查看指定包所依賴的capabilities: deplist package1 [package2] [...] 查看yum事務歷史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 安裝及升級本地程序包: yum localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) yum localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) 包組管理的相關命令: yum groupinstall group1 [group2] [...] 安裝指定包組;組名可能要加“”; yum groupupdate group1 [group2] [...] yum grouplist [hidden] [groupwildcard] [...] 顯示指定包組; yum groupremove group1 [group2] [...] yum groupinfo group1 [...]
Q11:如何使用發行版光盤作為yum repository,請描述該過程。
(1)掛載光盤至某目錄 ~]# mount -r /dev/cdrom /media/cdrom (2)創建配置文件 ~]# vim /etc/yum.repos.d/local.repo [CentOS7] name=CentOS7 baseurl=file:///media/cdrom enable=1 gpgcheck=0
Q12:寫一個腳本,完成以下功能
-
(1) 假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干;
-
(2) 顯示所有以K開頭的文件的文件名,并且給其附加一個stop字符串;
-
(3) 顯示所有以S開頭的文件的文件名,并且給其附加一個start字符串;
-
(4) 分別統計S開頭和K開頭的文件各有多少;
#!/bin/bash # declare -i s=0 declare -i k=0 for i in $(ls /etc/rc.d/rc3.d/);do if [[ $i == S* ]];then echo $i.start s+=1 fi if [[ $i == K* ]];then echo $i.stop k+=1 fi done echo -e "S start:$s\nK start:$k"
Q13:寫一個腳本,完成以下功能
-
(1) 腳本能接受用戶名作為參數;
-
(2) 計算此些用戶的ID之和;
#!/bin/bash # [ $# -eq 0 ] && echo -e "User name(s) needed!\nPlease try again!" && exit 1 declare -i sum=0 for i in $@;do if id $i &> /dev/null;then sum+=$(id -u $i) else echo "$i not exits!" fi done echo "Exiting users' ID sum:$sum"
Q14:寫一個腳本
-
(1) 傳遞一些目錄給此腳本;
-
(2) 逐個顯示每個目錄的所有一級文件或子目錄的內容類型;
-
(3) 統計一共有多少個目錄;且一共顯示了多少個文件的內容類型;
#!/bin/bash # if [ $# -lt 1 ];then echo -e "At least one arg!\nPlease try again!" exit 1 fi declare -i dir=0 declare -i file=0 for i in $@;do if ls $i &> /dev/null;then for j in $(ls $i);do if [ -d $i/$j ];then let dir++ else [ -f $i/$j ] let file++ fi done else echo "$i not exits!" fi done echo "directory number:$dir,file number:$file"
Q15:寫一個腳本:通過命令行傳遞一個參數給腳本,參數為用戶名,如果用戶的id號大于等于500,則顯示此用戶為普通用戶;
#!/bin/bash # if [ $# -lt 1 ];then echo "One arg is needed!" exit 1 fi if id $1 &> /dev/null;then if [ `id -u $1` -ge 500 ];then echo "$1 is a nomal user." elif [ `id -u $1` -ge 1 ];then echo "$1 is a system user." else echo "$1 is a root user." fi else echo "$1 not exits." fi
Q16:寫一個腳本
-
(1) 添加10用戶user1-user10;密碼同用戶名;
-
(2) 用戶不存在時才添加;存在時則跳過;
-
(3) 最后顯示本次共添加了多少用戶;
#!/bin/bash # declare -i sum=0 for i in {1..10};do id user$i &> /dev/null && continue || useradd user$i && echo "user$i" | passwd --stdin $user$i sum+=1 done echo "$sum users were added this time."
Q17:寫一腳本,用ping命令測試172.16.250.20-172.16.250.100以內有哪些主機在線,將在線的顯示出來;
#!/bin/bash # trap 'exit 1' INT for ((i=20;i<=100;i++));do if ping 172.16.250.$i -c 1 -W 1 &> /dev/null;then echo -e "172.16.250.$i is up!" fi done
Q18:打印九九乘法表;
#!/bin/bash # for j in {1..9}; do for i in $(seq 1 $j); do echo -n -e "${i}X${j}=$[${i}*${j}]\t" done echo done
原創文章,作者:N24_VC,如若轉載,請注明出處:http://www.www58058.com/64663