網絡
OSI(國際標準化組織網絡的定義,開放系統互聯) ISO(國際標準化組織)
OSI網絡模型分層
下層爲上層提供服務
7 應用層(application):一系列應用軟件
6 表示層(presention):格式化數據,加密,壓縮等
5 會話層(session):建立、管理和終結會話
4 傳輸層(transport):實現數據的傳輸,鏈路,終端對終端之間的傳輸
鏈路:同一網段互相訪問
終端對終端:跨網絡互相訪問
3 網絡層(network):定義了邏輯地址(IP地址),定義了路由功能,選擇路徑的過程叫做路由
2 數據鏈路層(data link):定義了物理地址,frame幀 有格式的若干個bit的組合,數據檢測
1 物理層(physical):二進制傳輸,bit爲傳輸單位0101
以太網幀2代的組成結構(數據鏈路層):
前導信息SOF
目標物理地址佔6個字節
源物理地址佔6個字節
類型指的是上層協議的類型,佔2個字節
數據包長度56-1500
FCS佔4個字節
以太網幀的最小值爲46+8+6+6+2+4=72字節
以太網幀的最大值爲1526字節
MAC地址一共有45位,前兩位的第一位如果爲1就是廣播,第二位爲1就說明是本地管理地址前22位是國際組織分配的標識符OUI,48位都是1則是廣播,48位的二進制數組成
PDU:協議數據單元(報文)較大的數據拆分的包叫做報文
物理層的PDU是數據位 bit
數據鏈路層的PDU是數據幀frame
網絡層的PDU是數據包packet
傳輸層的PDU是數據段segment
其他更高層次的PDU是消息message
交換機的工作原理
具有安全性,不會將接收包發送到同一衝突域的所有計算機,會拆分包進行分析,並在交換機內部類似於內存的位置儲存源MAC和目標MAC的信息方便下一次兩計算機通信,防止衝突域衝突,每個交換機的接口屬於一個衝突域
vlan
相當於劃分組,1組內部的計算機可以互相通信,但別的組的計算機無法與1組內部計算機互相通信
路由器
擁有路由表,在路由表上面選擇良好路徑進行通信,並且擁有隔離廣播域,設置安全策略的功能,還可以連接廣域網
TCP/IP協議
TCP:傳輸控制協議 IP:因特網互聯協議
TCP/IP是一個協議棧,一個協議集合包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等等
TCP/IP分爲了四層
應用層
【相當於OSI的上三層;常見協議:FTP文件傳輸協議、TFTP輕量級文件傳輸協議、NFS、SMTP簡單郵件傳輸協議、SNMP、DNS等多種協議】
傳輸層
【相當於OSI的傳輸層,終端對終端互相通訊,可能實現數據的可靠傳輸,當需要的時候可靠或者不可靠傳輸,面向連接的前提是要確保有交互有迴應以及非面向連接】
傳輸層協議:TCP:面向連接的,可靠連接,發送的包有編號,擁有確認機制(收到包之後,會迴應"我希望下次發包+1"的包)
UDP:用戶數據包協議;非面向連接,性能好,效率高,但有可能不可靠,可能會丟包,而且收到的包按照先後順序排列,發的包的 順序與收到包的順序可能不同,有可能會導致包混亂,也就是可能會損壞數據
TCP的報文頭部
從0位表示第一位到第32位,一行相當於4個字節
源端口(在外層) 目標端口(在裏層) 一共佔32位4個字節
序號(不同的包的編號)
確認號(確認對方發送給自己的包,寫的值是"包+1",從0開始編號的)
數據偏移(tcp報文頭部的長度,由於tcp長度不確定,所以要在此處進行確定) 保留 標記位URG,ACK,PSH,RST,SYN,FIN 窗口(數據包傳
輸大小,每次傳輸數據最大能傳輸多大)
校驗和(檢查數據包完整性,將上方一系列組合起來做一個計算,對方收到後再做一個計算,查看是否相同) 緊急指針
選項(長度可變,就因爲長度不固定所有數據偏移用來確認長度) 填充
標記位解答:(!!!爲重點!)
URG:緊急指針位,緊急數據,如果爲1則說明下層緊急指針有效,爲0則說明緊急指針無效
!!!ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號字段纔有效。TCP規定,連接建立後, ACK必須爲1,帶ACK標誌的TCP報文段稱爲確認報文段
PSH:當應用程序發來數據到達網卡後網卡會查看數據包是否爲自己的mac的地址,是就接收,不是就丟棄,然後將數據傳送到內核中的 Buffer中,如果PSH爲1,將立即發送到應用中,如果爲0,則會在Buffer中存放到Buffer滿了傳送給應用
RST:當應用程序網絡通訊出現異常,要求對方與主機重新創建連接時,RST爲1
!!!SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方 同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置爲1,帶SYN標誌的TCP 報文段稱爲同步報文段
!!!FIN:表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:“我的數據已經發送完畢,你可以釋放連 接了”,帶FIN標誌的TCP報文段稱爲結束報文段
TCP三次握手:
1 客戶端主動發送請求,服務器被動接受客戶端請求,當客戶端沒有建立連接前,狀態是CLOSED狀態;
2 客戶端會發送SYN=1,seq=x,發 送出去後狀態就會變爲SYN-SENT(同步發送)狀態;
3 對方LISTEN收到請求後,會立即迴應SYN=1,ACK=1,seq=y(服務器端的序號),ack=x+1(確認收到客戶端發送的包,並且希望下一次發送x+1的包),狀態就會變爲SYN-RCVD(同步接收狀態)
4 客戶端收到服務端的迴應後,會立即發送ACK=1,seq=x+1,ack=y+1,狀態就會變爲ESTAB-LISHED(建立連接狀態)
TCP四次揮手(斷開連接)
服務端與客戶端都可以主動發起斷開請求,此處描述客戶端發起斷開請求;
1 客戶端狀態爲ESTAB-LISHED(建立連接),發起斷開連接的請求包爲FIN=1,seq=u,發出後會立刻變爲FIN-WAIT-1(終止等待)狀態
2 服務端收到請求後會立刻迴應ACK=1(確認FIN的標記位收到)seq=v,ack=u+1;會從ESTAB-LISHED變爲CLOSE-WAIT(關閉等待)狀態,並且 還會繼續傳送客戶端數據,客戶端收到後會變爲FIN-WAIT-2(終止等待2)狀態
3 當數據完全傳送完成後,服務器會發送FIN=1,ACK=1,seq=w,ack=u+1;發出後會從CLOSE-WAIT狀態變爲LAST-ACK(最後確認)狀態
4 客戶端收到後會從FIN-WAIT2變爲TIME-WAIT(時間等待)狀態,會等待2MSL時間,繼續等待服務端發送所有的數據
5 客戶端發送ACK=1,seq=u+1,ack=w+1後服務端與客戶端會變爲CLOSED狀態
netstat -ntuap
nt:顯示tcp的協議
nut:顯示udp的協議
a:顯示所有的協議
p:顯示協議對應的應用程序
連接狀態(根據TCP包頭的標記位衍生出以下連接狀態):
CLOSED 關閉狀態,沒有任何狀態
LISTEN 監聽狀態,等待TCP端口的連接請求
SYN_SENT 在發送連接請求後等待確認
SYN_RECEIVED 在收到和發送了一個連接請求後,等待對方確認
ESTABLISHED 表示已建立連接,雙方進入數據傳輸狀態
FIN_WAIT1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN_WAIT2 主動關閉,主機已收到對方關閉確認,等待對方發送斷開連接請求
TIME_WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE_WAIT 被動關閉,收到對方發來的斷開連接請求,並已確認
LAST_ACK 被動關閉,等待最後一個斷開傳輸連接確認,並等待所有分組消失
CLOSING 雙方同時要斷開傳輸連接,等待對方確認
注意:
1 處於FIN_WAIT_2狀態的客戶端(半關閉狀態)如果遲遲收不到服務端發來的FIN=1請求則會成爲孤兒連接
系統的處理方法:
內核中會定義孤兒連接的數量
/proc/sys/net/ipv4/tcp_max_orphans 指定內核能管理的孤兒連接數量
/proc/sys/net/ipv4/tcp_fin_timeout 指定孤兒連接在內核中生存的時間
2 當客戶端發送的請求,服務器端無法接收數據的時候則會出現重傳
/proc/sys/net/ipv4/tcp_retries1 重傳最少次數,默認值爲3
/proc/sys/net/ipv4/tcp_retries2 重傳最多次數,默認值爲15
TCP確認
每收到一個包就會確認一遍,這樣來說雖然安全性有所提高,但是會影響效率,而每次確認的ACK一般都是+1並且是通過TCP頭部中的窗口定義的;
TCP變化窗口,滑動窗口;
每次發送數據包的大小是不確定的,發送包方不知道接收方能接收幾個,會嘗試發送多個包測試,而接收方會告訴發送方窗口大小
UTP包頭
16位源端口 16位目標端口
16位UDP報文長度 16位的UDP校驗位
數據
端口號:表示了上層協議的類型,每個應用都有獨立的端口號,一個應用程序可以使用多個端口號,而一個端口只能給一個應用使用
以下爲常用服務器端端口
http:tcp 80
https:tcp 443
dns:tcp 53、udp 53
ftp:tcp 21
ssh:tcp 22
telnet:tcp 23
/etc/services中儲存了許多常用的一系列端口
而客戶端的端口號是隨機分配的
0-1023:只有管理員纔有資格使用
1024-49151:普通用戶可以使用
49152-65535:隨機匹配給客戶端的端口號
從應用層往下會添加每一層的首部信息,傳輸層如果是TCP則要添加TCP的首部,再往下網絡層的首部,這樣TCP首部就成爲了網絡層的數據繼續向下添加下層的首部
Internet層
(相當於OSI的網絡層)
網絡訪問層(相當於OSI的數據鏈路層以及網絡層)
IP協議
ICMP協議(ping命令)/proc/sys/net/ipv4/icmp_echo_ignore_all(存放0或1就是是否忽略ping的迴應,0是不忽略,1是忽略)
ping -c1(ping一次)
-W1(縮短延遲時間,1秒ping不同就回復結果)
-s 3000(指定發送的數據包大小,包最大65507)
-f (不管對方是否迴應,持續發送數據包,大量發包消耗對方資源)
type爲8是請求包,type爲0是迴應包
Linux默認的ttl爲64
IGMP協議(Internet組管理協議):對於老版windows系統來說,發送IGMP數據包過多就容易死機
ARP協議(地址解析協議):負責把IP地址解析爲MAC地址,也就是利用IP地址查找到對方mac地址,工作在局域網
arp -n(查看arp表)
arp -d "要清除的IP地址"
arping -I ["從某個網卡出"] "目標IP地址"(可發現網絡中是否存在衝突)
ip neigh也可以查看arp表
兩臺主機訪問過程:
當A主機要與B主機建立通訊時,首先發送SYN同步,建立在TCP/IP協議上,然後清楚對方IP但不知道MAC地址,所以使用到ARP協議廣播從而獲得對方mac地址,數據包通過物理層0101的方式發送到B主機,B主機查看到時廣播所以要接收此包,發現對方查找的是自己IP地址對應的mac所以進行迴應,因爲帶有源mac地址,所以也將A主機的IP和MAC添加到arp表中,B主機進行迴應,目標Mac,源Mac,ARP迴應包;經過物理層0101的方式迴應給A主機,A主機收到B主機的Mac地址,ARP工作就完成了,A主機就會記錄B主機的MAC地址與IP地址到ARP表中,然後A主機將數據包補全,當中包括"目標MAC--源MAC--源IP--目標IP--TCP SYN",再次經過物理層010101發送到B主機,B主機依次拆分發現是SYN同步位,B主機回覆ACK1 SYN1,A主機再次依次解封裝,A主機解析後,再次發送ACK1,三次握手建立完成,A主機發送數據,經過每一層都要添加每一層的報頭,之後B主機收到解封裝後再次回覆A主機收到數據包希望下次發送x包
在廣域網發送ARP廣播的步驟
請求主機:A
目標主機:B
當A主機想要與B主機進行通訊的話,清楚了B主機的IP地址,但是ARP廣播是不支持隔段廣播的,所以A主機就要發送廣播在局域網,那麼A主機接口的路由器的網關就會迴應,A主機的ARP表中就會添加目標mac是A主機,將數據包發送給路由器,然後路由器再次將A主機發送來的數據包從另一個口轉發給主機B,B主機的ARP表則記錄的目標MAC則是B主機連接的路由器接口的網關
反向ARP:將MAC地址解析爲IP地址
IP PDU報頭
0-3位:存放版本號(主流ipv4,推廣中ipv6)
4-8位:首部長度決定首部多長,因爲下方有一塊的長度是可變化的
8-16位:區分服務,特定情況下使用
16-31位:總長度是所有數據包加首部加數據總長度
0-8位:生存時間,ttl默認爲64
8-16位:協議,顯示的是上層協議的類型
0-23位:可選字段(長度可變)
24-31位:首部校驗和
0-16位:標識表示數據來自於哪一個包,標識一樣的則說明來自於同一個包
16-19位:標誌,表示包是否爲分片包,只有後兩位有意義,DF,中間的一位,只有當DF=0時才允許分片,不允許分片就說明 數據就來自於一個包;MF,最高位,MF=1表示後方還有分片,MF=0則表示爲最後一個分片
19-31位:片偏移用來表示在大包中的第幾片
0-31位:存放源地址,目標地址,採用32位的二進制數
TCP的協議類型爲6,UDP位17,在/etc/protocols中可以查看
MTU:最大傳輸數據單元
IP地址:
可以手工指定,具備管理性
IP地址由兩部分組成:
網絡ID:
172.18.X.Y(172.18就屬於網絡ID,標識在哪一個網段)
主機ID:
標識單個主機(X.Y代表網絡中的某個單個的主機)
ipv4:32位=前面若干位爲網絡爲+後面的位主機ID位
網絡ID=IP與子網掩碼
IP地址分類
A類
0前8位爲網絡ID.X.Y.Z 剩下的則爲主機ID,24位的主機ID,並且最高位爲0
0-127.X.Y.Z 開頭則爲網絡ID,可用的網絡ID爲1-126也就是126個
1-126.X.Y.Z爲A類地址
一個網段中的主機數=2^主機ID位-2(去掉全位0的和全位1的) 16777214
網段數=2^可變的網絡ID位7位
子網掩碼:255.0.0.0
B類:
一個B類網段中主機數=2^16-2 65534
B類網段數=2^14 16384
10前16位爲網絡ID.Y.Z(10兩位不可變)
128-191.X.Y.Z爲B類地址
255.255.0.0
C類:
一個C類網段中主機數=2^8-2 254
C類網段數=2^21
110前24位是網絡ID.X.Y.Z
192-223.X.Y.Z表示C類地址
255.255.255.0
#D類:表示多播地址
CIDR:無類域間路由,網絡ID不按照整8位劃分,按需求劃分
CIDR表示法:IP/網絡ID位數
子網掩碼:32位二進制數,前面位是1,後面的位爲0,1的位對應表示網絡位,0對應的位表示主機ID位30位的網絡ID,主機數就爲2^2-2=2
網絡ID位以及主機ID位都需要子網掩碼進行判斷
1=2^0=1
10=2^1=2
100=2^2=4
1000=8
10000=16
100000=32
1000000=64
10000000=2^7=128
00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255
公共IP地址(在互聯網上使用,需要申請,分配完成後並且是世界唯一的)
私有IP地址(在互聯網上不會分配,永久保留,內部局域網使用)
A類:10.0.0.1到10.255.255.254
B類:172.16.0.1到172.31.255.255
C類:192.168.0.0到192.168.255.255
特殊地址
0.0.0.0:所有不清楚的主機和目標網絡
255.255.255.255:廣播地址
127.0.0.1-127.255.255.254:本地迴環地址
224.0.0.0-239.255.255.255:多播地址
169.254.x.x(Windows):如果網絡中不存在DHCP服務器,那麼獲取到的就爲169.254.x.x後面是隨機分配的,獲取之後也可以進行訪問
可變長度的子網掩碼
主機ID位多稱爲大網,主機ID位少稱爲小王
子網劃分:將一個大的網絡切割爲多個小的網絡,網絡ID位向主機ID借位,網絡ID位增多,主機ID變少
劃分子網的數量=2^網絡ID向主機ID借位的位數
路由表:
跨網絡通信:路由
路由分類:
主機路由:具體體現出到達某一個IP主機的路徑
網絡路由:到達到一個網段的路徑對應
默認路由:當目標所在位置網段過多或路由表中沒有記錄的時候都會走默認路由,默認路由,0.0.0.0,通常默認路由是配在互聯網的邊界位置
優先級:精確度越高,優先級越高
路由表構成
1 網絡ID netmask:目標主機所在的網段
2 接口interface:發送數據包到目標網段的出口
3 網關gateway:到達非直連網絡時,將數據包發送到下一個路由器鄰近我的接口的IP
動態主機配置協議DHCP:使客戶端可自動獲取IP地址;
客戶端發送通過廣播方式發送discover報文;
DHCP服務器會單播迴應客戶端offer;
客戶端收到offer後會通過廣播再次發送一個request請求;
DHCP服務端會單播發送詳細信息給客戶端ACK,結束交換過程;
DHCP服務端使用的是UDP的67端口;
DHCP客戶端使用的是UDP的68端口;
基本網絡配置
將Linux主機接入到網絡,需要配置網絡
一般包括如下內容:
主機名
ip/netmask
路由:默認網關
DNS服務器:域名解析
能添加多個DNS地址
/etc/hosts中存放的是IP地址與主機名的對應關係
Centos 6網卡名稱
以太網:eth[0,1,2,...]
ppp:ppp[0,1,2,....]
定義了網絡接口的命名方式:/etc/udev/rules.d/70-persistent-net.rules,可在此文件中修改網卡名稱,修改後不會立即生效,使用以下方法生效
ethtool -i "網卡名" (查看網卡對應的驅動是什麼)
modprobe -r e1000(首先卸載網卡驅動)
modprobe e1000(加載網卡驅動)
上述操作完成後就可以更新網卡名稱了
當在圖形界面沒有辦法重新啓動網卡服務的時候將NetworkManager禁用重試
網絡配置方式:
ifconfig命令:
(ifconfig)(ip a)(ip link):默認用來顯示網卡的信息,顯示的是活動網卡的信息,當網卡狀態down的時候則看不到,添加-a選項可以查看所有;
ifconfig "網卡名" down 將網卡徹底down掉
ifconfig "網卡名" up 啓動網卡
ifconfig "網卡名" "IP/netmask":臨時在網卡上添加IP地址,網卡down了後再啓動IP就沒有了
ifconfig "網卡名:數字" "IP/netmask":給網卡起別名,同時給設備配置IP地址,相當於在一個設備上配置多個IP地址,也是臨時性的
ifconfig -s "網卡名" 查看網卡上數據包通訊的統計信息,(MTU:大小;RX-OK:接收成功;RX-ERR:接收錯誤)
當使用ifdown和ifup命令的時候,網卡必須要存在配置文件
ip{a,link,route}
setup 藍色背景字符界面配置
啓用混雜模式(相當於抓包,接收所有的數據包,分析數據包,竊聽使用):[-]promisc
route命令,但現在推薦使用ip route
路由管理命令
查看:route -n
添加:route add
主機路由添加方法:route add -host "目標主機IP地址" gw "網關" dev "接口"
網絡路由添加方法:route add -net "目標網段/子網掩碼" gw "網關" dev "接口"
默認路由添加方法:route add -net 0.0.0.0/0 gw "網關"
刪除:route del
刪除主機路由方法:route del -host "目標主機IP地址"
刪除網絡路由方法:route del -net "目標網段/子網掩碼"
刪除默認路由方法:route del -net 0.0.0.0/0
直連網絡的路由在路由表中默認存在
netstat命令
默認顯示的包括一系列與網絡相關的文件,節點號,類型;DGRAM代表UDP協議;STREAM代表TCP協議
netstat -nltup 這種搭配比較常用,查看當前服務器端上正在使用的應用程序;
netstat -ntu 顯示當前正在建立連接狀態的主機
-n:以數字顯示IP和端口
-l:顯示當前主機監聽哪些端口
-t:顯示tcp協議
-u:顯示udp協議
-p:顯示應用名稱
-a:所有狀態
-e:擴展信息