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協議的區別
總結:TCP與UDP的區別:
1.基於鏈接與無鏈接;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程序結構較簡單;UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。因此傳輸速度可更快
4.TCP保證數據正確性,UDP可能丟包;TCP保證數據順序,UDP不保證。
場景:視頻,語音通信使用udp,或網絡環境很好,好比局域網中通信可使用udp。 udp數據傳輸完整性,能夠經過應用層的軟件來校對就能夠了。
tcp傳文件,數據完整性要求高。
(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)
假設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鏈接就這樣關閉了!
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
修改配置文件 /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查看進程工具
例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:該程序的實際指令
[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 - 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命令用於查看你進程打開的文件,打開文件的進程,進程打開的端口(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)