Linux網絡技術管理及進程管理

OSI七層模型和TCP/IP四層模型

 

OSI七層模型:OSI(Open System Interconnection)開放系統互連參考模型是國際標準化組織(ISO)制定的一個用於計算機或通訊系統間互聯的標準體系。css

TCP/IP四層模型:TCP/IP參考模型是計算機網絡的祖父ARPANET和其後繼的因特網使用的參考模型。linux

分層做用:方便管理web

 

七層模型優勢:sql

一、把複雜的網絡劃分紅爲更容易管理的層(將整個龐大而複雜的問題劃分爲若干個容易處理的小問題)vim

二、沒有一個廠家能完整的提供整套解決方案和全部的設備,協議.centos

三、獨立完成各自該作的任務,互不影響,分工明確,上層不關心下層具體細節,分層一樣有益於網絡排錯瀏覽器

功能與表明設備緩存

分層 名字 功能 工做在該層的設備
7 應用層 提供用戶界面 QQ,IE 。應用程序
6 表示層 表示數據,進行加密等處理
5 會話層 將不一樣應用程序的數據分離
4 傳輸層 提供可靠或不可靠的傳輸,在重傳前執行糾錯 防火牆
3 網絡層 提供邏輯地址,路由器使用它們來選擇路徑 三層交換機、路由器
2 數據鏈路層 將分組拆分爲字節,並講字節組合成幀,使用MAC地址提供介質訪問,執行錯誤檢測,但不糾錯 二層交換機,網卡
1 物理層 在設備之間傳輸比特,指定電平,電纜速度和電纜針腳 集線器

 

互動:爲何現代網絡通訊過程當中用TCP/IP四層模型,而不是用OSI七層模型呢?安全

OSI七層模型是理論模型,通常用於理論研究,他的分層有些冗餘,實際應用,選擇TCP/IP的四層模型。並且 OSI 自身也有缺陷,大多數人都認爲 OSI 模型的層次數量與內容多是最佳的選擇,其實並不是如此,其中會話層和表示層幾乎是空的,而數據鏈路層和網絡層包含內容太多,有不少的子層插入,每一個子層都有不一樣的功能。ruby

 

常見網絡相關的協議

 

DNS:域名解析協議 www.baidu.com

SNMP(Simple Network Management Protocol)網絡管理協議

DHCP(Dynamic Host Configuration Protocol)動態主機配置協議,它是在TCP/IP網絡上使客戶機得到配置信息的協議

FTP(File Transfer Protocol)文件傳輸協議,它是一個標準協議,是在計算機和網絡之間交換文件的最簡單的方法。

TFTP(Trivial File Transfer Protocol):小文件傳輸協議

HTTP(Hypertext Transfer Protocol ):超文本傳輸協議

HTTPS(Secure Hypertext Transfer Protocol):安全超文本傳輸協議,它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操做.

ICMP(Internet Control Message Protocol):Internet控制信息協議,互聯網控制報文協議

ping  ip定義消息類型有:TTL超時、地址的請求與應答、信息的請求與應答、目的地不可到達

SMTP(Simple Mail Transfer Protocol):簡單郵件傳送協議

TELNET Protocol:虛擬終端協議

UDP(User Datagram Protocol):用戶數據報協議,它是定義用來在互連網絡環境中提供包交換的計算機通訊的協議

TCP(Transmission Control Protocol):傳輸控制協議,是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議  log轉發:開啓一個協議:tcp(三次握手和四次揮手)

 

TCP協議和UDP協議的區別

(1)TCP協議:TCP(Transmission Control Protocol,傳輸控制協議)是面向鏈接的協議,在收發數據前,必須和對方創建可靠的鏈接。

(2)UDP協議:UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務

總結:TCP與UDP的區別:
1.基於鏈接與無鏈接;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程序結構較簡單;UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。因此傳輸速度可更快
4.TCP保證數據正確性,UDP可能丟包;TCP保證數據順序,UDP不保證。

場景:視頻,語音通信使用udp,或網絡環境很好,好比局域網中通信可使用udp。  udp數據傳輸完整性,能夠經過應用層的軟件來校對就能夠了。

tcp傳文件,數據完整性要求高。

 

TCP和UDP 經常使用端口號名稱

 

(1)TCP 端口分配

21 ftp 文件傳輸服務
22 ssh 安全遠程鏈接服務
23 telnet 遠程鏈接服務
25 smtp 電子郵件服務
53 DNS 域名解析服務,有tcp53也有用udp53端口傳輸
80 http web服務
443 https 安全web服務

 

互動:若是你不知道哪一個端口對應哪一個服務怎麼辦?如873端口是哪一個服務的?

[root@ken~]#  vim /etc/services    #此文件中,包含全部常見端口號及服務名稱

 

三次握手和四次揮手

 

三次握手

 

首先Client端發送鏈接請求報文,Server段接受鏈接後回覆ACK報文,併爲此次鏈接分配資源。Client端接收到ACK報文後也向Server段發生ACK報文,並分配資源,這樣TCP鏈接就創建了。

 

最初兩端的TCP進程都處於CLOSED關閉狀態,A主動打開鏈接,而B被動打開鏈接。(A、B關閉狀態CLOSED——B收聽狀態LISTEN——A同步已發送狀態SYN-SENT——B同步收到狀態SYN-RCVD——A、B鏈接已創建狀態ESTABLISHED

  • B的TCP服務器進程先建立傳輸控制塊TCB,準備接受客戶進程的鏈接請求。而後服務器進程就處於LISTEN(收聽)狀態,等待客戶的鏈接請求。如有,則做出響應。
  • 1)第一次握手:A的TCP客戶進程也是首先建立傳輸控制塊TCB,而後向B發出鏈接請求報文段,(首部的同步位SYN=1初始序號seq=x),(SYN=1的報文段不能攜帶數據)但要消耗掉一個序號,此時TCP客戶進程進入SYN-SENT(同步已發送)狀態。
  • 2)第二次握手:B收到鏈接請求報文段後,如贊成創建鏈接,則向A發送確認,在確認報文段中(SYN=1,ACK=1,確認號ack=x+1,初始序號seq=y),測試TCP服務器進程進入SYN-RCVD(同步收到)狀態;
  • 3)第三次握手:TCP客戶進程收到B的確認後,要向B給出確認報文段(ACK=1,確認號ack=y+1,序號seq=x+1)(初始爲seq=x,第二個報文段因此要+1),ACK報文段能夠攜帶數據,不攜帶數據則不消耗序號。TCP鏈接已經創建,A進入ESTABLISHED(已創建鏈接)。
  • 當B收到A的確認後,也進入ESTABLISHED狀態。

 

四次揮手

 

 

假設Client端發起中斷鏈接請求,也就是發送FIN報文。Server端接到FIN報文後,意思是說」我Client端沒有數據要發給你了」,可是若是你還有數據沒有發送完成,則沒必要急着關閉Socket,能夠繼續發送數據。因此你先發送ACK,」告訴Client端,你的請求我收到了,可是我還沒準備好,請繼續你等個人消息」。這個時候Client端就進入FIN_WAIT狀態,繼續等待Server端的FIN報文。當Server端肯定數據已發送完成,則向Client端發送FIN報文,」告訴Client端,好了,我這邊數據發完了,準備好關閉鏈接了」。Client端收到FIN報文後,」就知道能夠關閉鏈接了,可是他仍是不相信網絡,怕Server端不知道要關閉,因此發送ACK後進入TIME_WAIT狀態,若是Server端沒有收到ACK則能夠重傳。「,Server端收到ACK後,」就知道能夠斷開鏈接了」。Client端等待了2MSL後依然沒有收到回覆,則證實Server端已正常關閉,那好,我Client端也能夠關閉鏈接了。Ok,TCP鏈接就這樣關閉了!

 

linux網絡相關的調試命令

 

1、橋接模式:配置橋接模式的虛擬機做爲獨立計算機存在

 

  1. 虛擬機能夠上外網
    2. 能夠和局域網內任意一臺電腦通訊
    3. 能夠和宿主機通訊
    4. 局域網內任意一臺主機均可以和此虛擬機通訊

 

2、nat模式:配置nat模式的虛擬機使用本機IP地址(地址轉化)


  1. 物理機vmnet8這個網卡必須開啓
    2. 能夠上外網
    3. 能夠宿主機通訊
    4. 局域網內不能夠訪問此虛擬機


3、僅主機模式


  1. 能夠和宿主機通訊
    2. 同一臺宿主機上的僅主機模式下的虛擬機之間能夠互相通訊
    3. 不能夠上外網
    4. 局域網內不能夠相互訪問



1.修改IP相關信息

[root@ken ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:93:4b brd ff:ff:ff:ff:ff:ff inet 192.168.64.4/24 brd 192.168.64.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.4.191/32 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee3:934b/64 scope link valid_lft forever preferred_lft forever 

 

 

  1. 修改網卡信息

修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0


DEVICE=eth0 #指出設備名稱
NM_CONTROLLED=yes #network mamager的參數,實時生效,不須要重啓
ONBOOT=yes #設置爲yes,開機自動啓用網絡鏈接
IPADDR=192.168.21.129 #IP地址
BOOTPROTO=none #設置爲none禁止DHCP,設置爲static啓用靜態IP地址,設置爲dhcp開啓DHCP服務
NETMASK=255.255.255.0 #子網掩碼
DNS1=8.8.8.8 #第一個dns服務器
TYPE=Ethernet #網絡類型爲:Ethernet
GATEWAY=192.168.21.2 #設置網關
DNS2=8.8.4.4 #第二個dns服務器
IPV6INIT=no #禁止IPV6
USERCTL=no #是否容許非root用戶控制該設備,設置爲no,只能用root用戶更改
HWADDR=00:0C:29:2C:E1:0F #網卡的Mac地址
PREFIX=24
NAME=」System eth0″ #定義設備名稱

 

3.臨時添加IP地址

[root@ken ~]# ip a a 192.168.4.191 dev eth0 [root@ken ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e3:93:4b brd ff:ff:ff:ff:ff:ff inet 192.168.64.4/24 brd 192.168.64.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.4.191/32 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee3:934b/64 scope link valid_lft forever preferred_lft forever 

 

 

 

4.查看端口監聽狀態

ss 命令

經常使用選項:

-t: 顯示tcp連接

-n: 以數字形式顯示當前連接的端口

-l: 只顯示監聽的

-a:顯示所有

-p: 顯示PID

經常使用組合:ss -tnl

[root@ken ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::80 :::* 

 

 

 進程管理

 

程序:二進制文件,靜態 /bin/date,/usr/sbin/sshd 
進程:是程序運行的過程,動態,有生命週期及運行狀態。

 

下圖所示的是進程的生命週期:

 

描述以下:

父進程複製本身的地址空間(fork  [fɔ:k] 分叉)建立一個新的(子)進程結構。每一個新進程分配一個惟一的進程 ID (PID),知足跟蹤安全性之需。PID 和父進程 ID (PPID)是子進程環境的元素,任何進程均可以建立子進程,全部進程都是第一個系統進程的後代。

centos5或6PID爲1的進程是: init

centos7 PID爲1的進程是:     systemd

殭屍進程:一個進程使用fork建立子進程,若是子進程退出,而父進程並無調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之爲殭屍進程。

 

 

進程的屬性

 

進程ID(PID):是惟一的數值,用來區分進程

進程狀態:狀態分爲運行R、休眠S、殭屍Z

 

使用ps查看進程工具

 

一、ps查看進程工具

例1:經常使用的參數:

a: 顯示跟當前終端關聯的全部進程

u: 基於用戶的格式顯示(U: 顯示某用戶ID全部的進程)

x: 顯示全部進程,不以終端機來區分

[root@ken ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125356 3876 ? Ss 15:43 0:02 /usr/lib/systemd/systemd --switched-root --system -- root 2 0.0 0.0 0 0 ? S 15:43 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 15:43 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 15:43 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 15:43 0:00 [migration/0] 

 

注:最後一列[xxxx] 使用方括號括起來的進程是內核態的進程。沒有括起來的是用戶態進程。

上面的參數輸出每列含意:

USER: 啓動這些進程的用戶

PID: 進程的ID

%CPU 進程佔用的CPU百分比; 
%MEM 佔用內存的百分比;

VSZ:進程佔用的虛擬內存大小(單位:KB) 
RSS:進程佔用的物理內存大小(單位:KB)

STAT:該程序目前的狀態,Linux進程有5種基本狀態:

R :該程序目前正在運做,或者是可被運做;

S :該程序目前正在睡眠當中,但可被某些訊號(signal) 喚醒。

T :該程序目前正在偵測或者是中止了;

Z :該程序應該已經終止,可是其父程序卻沒法正常的終止他,形成 zombie (疆屍) 程序的狀態

D  不可中斷狀態.

5個基本狀態後,還能夠加一些字母,好比:Ss、R+,以下圖:

 

它們含意以下::

<: 表示進程運行在高優先級上

N: 表示進程運行在低優先級上

L: 表示進程有頁面鎖定在內存中

s: 表示進程是控制進程

l: 表示進程是多線程的

+: 表示當前進程運行在前臺

START:該 process 被觸發啓動的時間;

TIME :該 process 實際使用 CPU 運做的時間。

COMMAND:該程序的實際指令

 

uptime查看系統負載

 

[root@ken ~]# uptime 22:14:16 up 1:33, 2 users, load average: 0.00, 0.01, 0.04

 

彈出消息含意以下:

當前時間 系統運行時間 當前登陸用戶 系統負載1分鐘,5分鐘,15分鐘的平均負載

那麼什麼是系統平均負載呢? 系統平均負載是指在特定時間間隔內運行隊列中的平均進程數。

若是每一個CPU內核的當前活動進程數不大於3的話,那麼系統的性能是良好的。若是每一個CPU內核的任務數大於5,那麼這臺機器的性能有嚴重問題。

若是你的linux主機是1個雙核CPU的話,當Load Average 爲6的時候說明機器已經被充分使用了。

 

top命令

 

top - 17:23:00 up  1:39,  4 users,  load average: 0.00, 0.01, 0.05 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 997956 total, 69908 free, 98116 used, 829932 buff/cache KiB Swap: 4194296 total, 4194296 free, 0 used. 712740 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 125356 3876 2596 S 0.0 0.4 0:02.67 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.18 ksoftirqd/0 

 

第1行:系統時間、運行時間、登陸終端數、系統負載(三個數值分別爲1分鐘、5分鐘、15分鐘內的平均值,數值越小意味着負載越低)。

第2行:進程總數、運行中的進程數、睡眠中的進程數、中止的進程數、僵死的進程數。

第3行:用戶佔用資源百分比、系統內核佔用資源百分比、改變過優先級的進程資源百分比、空閒的資源百分比等。其中數據均爲CPU數據並以百分比格式顯示,例如「97.1 id」意味着有97.1%的CPU處理器資源處於空閒。

第4行:物理內存總量、內存使用量、內存空閒量、做爲內核緩存的內存量。

第5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閒量、已被提早加載的內存量。

第6行:

PID — 進程id
USER — 進程全部者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/中止 Z=殭屍進程
%CPU — 上次更新到如今的CPU時間佔用百分比
%MEM — 進程使用的物理內存百分比
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)

 

lsof命令

 

lsof命令用於查看你進程打開的文件,打開文件的進程,進程打開的端口(TCP、UDP)

-i<條件>:列出符合條件的進程。(四、六、協議、:端口、 @ip )

[root@ken ~]# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 849 root 3u IPv4 19245 0t0 TCP *:ssh (LISTEN) sshd 849 root 4u IPv6 19254 0t0 TCP *:ssh (LISTEN) 
相關文章
相關標籤/搜索