網絡概念
-
網絡應用程序
-
Web 瀏覽器(Chrome、IE、Firefox等)
即時消息(QQ、微信、釘釘等)
電子郵件(Outlook、foxmail 等)
協作(視頻會議、VNC、Netmeeting、WebEx 等)
web網絡服務(apache,nginx,IIS)
文件網絡服務(ftp,nfs,samba)
數據庫服務( MySQL,MariaDB, MongoDB)
中間件服務(Tomcat,JBoss)
安全服務( Netfilter)
-
Web 瀏覽器(Chrome、IE、Firefox等)
-
用戶應用程序對網絡的影響
-
批處理應用程序
-
FTP、TFTP、庫存更新
無需直接人工交互
帶寬很重要,但并非關鍵性因素
-
FTP、TFTP、庫存更新
-
交互式應用程序
-
庫存查詢、數據庫更新。
人機交互。
因為用戶需等待響應,所以響應時間很重要,但并非關鍵性因素,除非要等待很長時間。
-
庫存查詢、數據庫更新。
-
實時應用程序
-
VoIP、視頻
人與人的交互
端到端的延時至關重要
-
VoIP、視頻
-
批處理應用程序
-
網絡的特征
- 速度、成本、安全性、可用性、可擴展性、可靠性、拓撲
-
拓撲結構
-
物理拓撲分類:總線拓撲、環狀拓撲、雙環拓撲、星型拓撲、擴展星型拓撲、全網拓撲、部分全網拓撲
-
邏輯拓撲
-
網絡設備
-
Hub集線器
-
基于CSMA/CD;
共享帶寬、半雙工
Hub并不記憶該信息包是由哪個MAC地址發出,哪個MAC地址在Hub的哪個端口
-
基于CSMA/CD;
-
以太網橋
-
交換式以太網的優勢
- 擴展了網絡帶寬
- 分割了網絡沖突域,使網絡沖突被限制在最小的范圍內
- 交換機作為更加智能的交換設備,能夠提供更多用戶所要求的功能:優先級、虛擬網、遠程檢測……
-
以太網橋的工作原理:
-
以太網橋監聽數據幀中源MAC地址,學習MAC,建立MAC表
-
對于未知MAC地址,網橋將轉發到除接收該幀的端口之外的所有端口
-
當網橋接到一個數據幀時,如果該幀的目的位于接收端口所在網段上,它就過濾掉該數據幀;如果目的MAC地址在位于外一個端口,網橋就將該幀轉發到該端口
-
當網橋接到廣播幀時候,它立即轉發到除接收端口之外的所有其他端口
-
-
Hub和交換機比較
- 集線器屬于OSI的第一層物理層設備,而網橋屬于OSI的第二層數據鏈路層設備
- 從工作方式來看,集線器是一種廣播模式,所有端口在一個沖突域里面。網橋的可以通過端口隔離沖突
- Hub是所有共享總線和共享帶寬。網橋每個端口占一個帶寬
-
-
路由器:
-
路由:把一個數據包從一個設備發送到不同網絡里的另一個設
備上去。這些工作依靠路由器來完成。路由器只關心網絡的狀態和決定網絡中的最佳路徑。路由的實現依靠路由器中的
路由表來完成- 查看路由表:route -n
-
路徑選擇的算法(路由協議):rip(路由器最少為標準)、ospf(根據速度)、eigrp、igrp、isis、bgp
-
實現路由功能,需要路由器:
-
分隔廣播域
選擇路由表中到達目標最好的路徑
維護和檢查路由信息
連接廣域網
-
分隔廣播域
-
路由:把一個數據包從一個設備發送到不同網絡里的另一個設
-
網絡線纜和接口
-
Twisted-Pair(雙絞線)
-
基帶:數字
寬帶:模擬
-
基帶:數字
-
同軸電纜:
-
兩個設備之間的距離最大185m
10Base2:最大距離200m,實際185m
10Base5:最大距離500m
-
兩個設備之間的距離最大185m
- Fiber-Optic:
-
Twisted-Pair(雙絞線)
-
UTP:
-
T568B:直通線
T568A:交叉線,13對調,26對調; -
交換機已經做完交叉線了;
橙白、橙、綠白、藍、藍白、綠、棕白、棕 ,橙藍綠棕,3、5對調
-
T568B:直通線
OSI模型的七層結構
資源子網
-
應用層
-
網絡進程訪問應用層
- 為應用程序進程(如:電子郵件、文件傳輸和終端仿真)提供網絡服務
- 提供用戶身份驗證
-
網絡進程訪問應用層
-
表示層
-
數據表示
- 確保接收系統可以讀出該數據
- 格式化數據
- 構建數據
- 協商用于應用層的數據傳輸語法
- 提供加密
-
數據表示
-
會話層
-
主機間通信
- 建立、管理和終止在應用程序之間的會話
-
主機間通信
-
傳輸層
- 負責向兩個主機中進程之間的通信提供服務
-
傳輸問題
- 確保數據傳輸的可靠性
- 建立、維護和終止虛擬電路
- 通過錯誤檢測和恢復
- 信息流控制來保障可靠性
通信子網
-
網絡層
-
數據傳輸
- 路由數據包
- 選擇傳遞數據的最佳路徑
- 支持邏輯尋址和路徑選擇
-
數據傳輸
-
數據鏈路層
-
訪問介質
- 定義如何格式化數據以便進行傳輸以及如何控制對網絡的訪問
- 支持錯誤檢測
-
訪問介質
-
物理層
-
二進制傳輸
- 為啟動、維護以及關閉物理鏈路定義另外電氣規范、機械規范、過程規范和功能規范
-
二進制傳輸
TCP/IP協議棧
-
TCP/IP協議體系結構是專門針對于使用TCP/IP協議簇的廣域計算機網絡而開發的;
-
應用層(會話層、表示層、應用層):以具體的數據報文為單位進行傳輸
傳輸層:在TCP/IP協議體系中,TCP是以數據段為單位進行傳輸,UDP是以數據報為單位進行傳輸
internet層:傳輸的單位是分組(或者是包),一個分組可以包含多個幀,分組的大小也要根據不同協議而定
網絡訪問層
數據鏈路層:傳輸的單位是幀,一個幀包括多個比特,但一個幀的大小必須是一個整數字節。不同協議的幀大小不一樣
物理層:以最原始的比特流格式傳輸,bit
傳輸層
TCP包頭
- 源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口各用16位表示的,可推算計算機的端口個數為2^16個
-
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由于序列號由32位表示,所以每2^32個字節,就會出現序列號回繞,再次從 0 開始
-
確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號。也就是告訴發送方:我希望你(指發送方)下次發送給我的TCP報文段的序列號字段的值是這個確認號
-
數據偏移:由于TCP首部包含一個長度可變的選項部分,所以需要這么一個值來指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠,即TCP報文段的首部長度。該字段的單位是32位字,即:4個字節
-
URG:表示本報文段中發送的數據是否包含緊急數據。后面的緊急指針字段(urgent pointer)只有當URG=1時才有效
-
ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有ACK=1時,前面的確認號字段才有效。TCP規定,連接建立后,ACK必須為1,帶ACK標志的TCP報文段稱為確認報文段
-
PSH:提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間。如果為1,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留在TCP接收緩沖區中
-
RST:如果收到一個RST=1的報文,說明與主機的連接出現了嚴重錯(如主機崩潰),必須釋放連接,然后再重新建立連接?;蛘哒f明上次發送給主機的數據有問題,主機拒絕響應,帶RST標志的TCP報文段稱為復位報文段
-
SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN標志的TCP報文段稱為同步報文段
-
FIN:表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:“我的數據已經發送完畢,你可以釋放連接了”,帶FIN標志的TCP報文段稱為結束報文段
-
窗口大?。罕硎粳F在運行對方發送的數據量,也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量
-
校驗和:提供額外的可靠性
-
緊急指針:標記緊急數據在數據字段中的位置。
-
選項部分:其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位表示,選項部分最長為:(2^4-1)*4-20=40字節
有限狀態機FSM:Finite State Machiine
-
CLOSED 沒有任何連接狀態
-
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
-
SYN-SENT 在發送連接請求后,等待對方確認
-
SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
-
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
-
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
-
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
-
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
-
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
-
LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失
-
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認
客戶端的典型狀態轉移
-
客戶端通過connect系統調用主動與服務器建立連接connect系統調用首先給服務器發送一個同步報文段,使連接轉移到SYN_SENT狀態。
-
此后connect系統調用可能因為如下兩個原因失敗返回:
-
1、如果connect連接的目標端口不存在(未被任何進程監聽),或者該端口仍被處于TIME_WAIT狀態的連接所占用(見后文),則服務器將給客戶端發送一個復位報文段,connect調用失敗。
-
2、如果目標端口存在,但connect在超時時間內未收到服務器的確認報文段,則connect調用失敗。
-
-
connect調用失敗將使連接立即返回到初始的CLOSED狀態。如果客戶端成功收到服務器的同步報文段和確認,則connect調用成功返回,連接轉移至ESTABLISHED狀態
-
當客戶端執行主動關閉時,它將向服務器發送一個結束報文段,同時連接進入FIN_WAIT_1狀態。若此時客戶端收到服務器專門用于確認目的的確認報文段,則連接轉移至FIN_WAIT_2狀態。當客戶端處于FIN_WAIT_2狀態時,服務器處于CLOSE_WAIT狀態,這一對狀態是可能發生半關閉的狀態。此時如果服務器也關閉連接(發送結束報文段),則客戶端將給予確認并進入TIME_WAIT狀態
-
客戶端從FIN_WAIT_1狀態可能直接進入TIME_WAIT狀態(不經過FIN_WAIT_2狀態),前提是處于FIN_WAIT_1狀態的服務器直接收到帶確認信息的結束報文段(而不是先收到確認報文段,再收到結束報文段)
-
處于FIN_WAIT_2狀態的客戶端需要等待服務器發送結束報文段,才能轉移至TIME_WAIT狀態,否則它將一直停留在這個狀態。如果不是為了在半關閉狀態下繼續接收數據,連接長時間地停留在FIN_WAIT_2狀態并無益處。連接停留在FIN_WAIT_2狀態的情況可能發生在:客戶端執行半關閉后,未等服務器關閉連接就強行退出了。此時客戶端連接由內核來接管,可稱之為孤兒連接(和孤兒進程類似)。
-
Linux為了防止孤兒連接長時間存留在內核中,定義了兩個內核參數:
-
/proc/sys/net/ipv4/tcp_max_orphans 指定內核能接管的孤兒連接數目
-
/proc/sys/net/ipv4/tcp_fin_timeout。,指定孤兒連接在內核中生存的時間
-
有限狀態機
-
客戶端先發送一個FIN給服務端,自己進入了FIN_WAIT_1狀態,這時他等待接收服務端的報文,該報文會有三種可能:
-
只有服務端的ACK
只有服務端的FIN
基于服務端的ACK,又有FIN
-
只收到服務器的ACK,客戶端會進入FIN_WAIT_2狀態,后續當收到服務端的FIN時,回應發送一個ACK,會進入到TIME_WAIT狀態,這個狀態會持續2MSL(TCP報文段在網絡中的最大生存時間,RFC 1122標準的建議值是2min).客戶端等待2MSL,是為了當最后一個ACK丟失時,可以再發送一次。因為服務端在等待超時后會再發送一個FIN給客戶端,進而客戶端知道ACK已丟失
-
只有服務端的FIN時,回應一個ACK給服務端,進入CLOSING狀態,然后接收到服務端的ACK時,進入TIME_WAIT狀態
-
同時收到服務端的ACK和FIN,直接進入TIME_WAIT狀態
-
只有服務端的ACK
TCP超時重傳
-
異常網絡狀況下(開始出現超時或丟包),TCP控制數據傳輸以保證其承諾的可靠服務
-
TCP服務必須能夠重傳超時時間內未收到確認的TCP報文段。為此,TCP模塊為每個TCP報文段都維護一個重傳定時器,該定時器在TCP報文段第一次被發送時啟動。如果超時時間內未收到接收方的應答,TCP模塊將重傳TCP報文段并重置定時器。至于下次重傳的超時時間如何選擇,以及最多執行多少次重傳,就是TCP的重傳策略
-
與TCP超時重傳相關的兩個內核參數:
-
/proc/sys/net/ipv4/tcp_retries1,指定在底層IP接管之前TCP最少執行的重傳次數,默認值是3
-
/proc/sys/net/ipv4/tcp_retries2,指定連接放棄前TCP最多可以執行的重傳次數,默認值是15(一般對應13~30min)
-
擁塞控制
-
TCP為提高網絡利用率,降低丟包率,并保證網絡資源對每條數據流的公平性。即所謂的擁塞控制
-
TCP擁塞控制的標準文檔是RFC 5681,其中詳細介紹了擁塞控制的四個部分:慢啟動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fast retransmit)和快速恢復(fast recovery)。擁塞控制算法在Linux下有多種實現,比如reno算法、vegas算法和cubic算法等。它們或者部分或者全部實現了上述四個部分
-
當前所使用的擁塞控制算法
- /proc/sys/net/ipv4/tcp_congestion_control
TCP協議
- 傳輸層通過port號,確定應用層協議
-
Port number:
-
tcp:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路;結束后拆除鏈路
0-65535 -
udp:User Datagram Protocol,無連接的協議
0-65535 -
IANA:互聯網數字分配機構(負責域名,數字資源,協議分配)
-
0-1023:系統端口或特權端口(僅管理員可用) ,眾所周知,永久的分配給固定的系統應用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
-
1024-49151:用戶端口或注冊端口,但要求并不嚴格,分配給程序注冊為某應用使用,1433/tcp(SqlServer),1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
-
49152-65535:動態端口或私有端口,客戶端程序隨機使用的端口
-
其范圍的定義:/proc/sys/net/ipv4/ip_local_port_range
-
-
Internet
-
運行于 OSI 網絡層
面向無連接的協議
獨立處理數據包
分層編址
盡力而為傳輸
無數據恢復功能
IP報頭
-
版本:占4位,指 IP 協議的版本目前的IP協議版本號為4
-
首部長度:占4位,可表示的最大數值是15個單位,一個單位為4字節,因此IP 的首部長度的最大值是60字節
-
區分服務:占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.后改名為區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用
-
總長度:占16位,指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535(2^16-1) 字節.總長度必須不超過(對應層的傳輸介質的)最大傳送單元 MTU
-
標識:占16位,它是一個計數器,通常,每發送一個報文,改值會加1, 也用于數據包分片,在同一個包的若干分片中,該值是相同的
-
標志(flag):占3位,目前只有前兩位有意義。
-
MF:標志字段的最低位是MF(More Fragment),MF=1表示后面還有分片,MF=0 表示最后一個分片
-
DF:標志字段中間的一位是DF(Don’t Fragment),只有當 DF=0時才允許分片
-
-
片偏移:占13位,指較長的分組在分片后,某片在原分組中的相對位置.片偏移以8個字節為偏移單位,
-
生存時間:占8位,記為TTL (Time To Live) 數據報在網絡中可通過的路由器數的最大值,TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為64.發送 ICMP 回顯應答時經常把 TTL 設為最大值 255
-
協議:占8位,指出此數據報攜帶的數據使用何種協議以便目的主機的IP層將數據部分上交給哪個處理過程, 1表示為 ICMP協議, 2表示為 IGMP 協議, 6表示為 TCP 協議, 17表示為UDP 協議
-
首部檢驗和:占16位,只檢驗數據報的首部不檢驗數據部分.這里不采用 CRC 檢驗碼而采用簡單的計算方法
-
源地址和目的地址:都各占 4 字節,分別記錄源地址和目的地址
-
可變部分:必須是4字節的整數倍,當可選字段不夠時,由填充部分補齊;
IP地址
-
它們可唯一標識 IP 網絡中的每臺設備
-
每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址
-
IP地址由兩部分組成:
-
網絡ID:
-
標識網絡
每個網段分配一個網絡ID
-
標識網絡
-
主機 ID:
-
標識單個主機
由組織分配給各設備
-
標識單個主機
-
-
IP(internet protocol)地址:網絡號+主機號
-
IPv4:32bits
IPv6:128bits-
IPv4地址分類:
-
公式1:一個網絡中IP數量=2^主機ID位-2
公式2:多少個網絡=2^可變的網絡ID位
公式3:網絡ID值=IP和子網掩碼相“與”
公式4:CIDR 無類域間路由
IP/網絡ID位數=IP/(32-主機ID位數)
公式5:劃分子網
劃分子網的數=2^借位數(網絡ID位向主機ID位借位)
-
公式1:一個網絡中IP數量=2^主機ID位-2
-
A類:
前8位為網絡號,后24位為主機號
網絡號:(第1位為0)
0 000 0000 – 0 111 1111 :0-127
網絡數量:126(1-126)
每個網絡中的主機數量:2^24-2(16777214)(排除全0、全1)
默認子網掩碼:255.0.0.0/8
私網地址:只能在本地進行通訊;10.0.0.0/255.0.0.0 -
B類:
前16位為網絡號,后16位為主機號
網絡號:(前2位為10)
10 00 0000-10 11 1111 :128-191
網絡數:2^14
每個網絡中的主機數量:2^16-2
默認子網掩碼:255.255.0.0/16
私網地址:172.16.0.0-172.31.0.0 -
C類:
前24位為網絡號,后8位為主機號
網絡號:(前3位為110)
110 0 0000-110 1 1111 :192-223
網絡數:2^21
每個網絡中的主機數量:2^8-2
默認子網掩碼:255.255.255.0 , /24 -
D類:組播通訊
1110 0000-1110 1111 :224-239 -
E類:科研通訊
240-254 -
無類:網絡ID和主機ID根據情況來指定
- 子網掩碼:32位二進制,和IP配合使用,高位全為1對應網絡ID位,低位全為0對應主機ID位
- 網絡ID值=子網掩碼與IP地址按位進行“與”運算,從而取出其網絡地址;(1和#相“與”是#,0和#相“與”是0)
- CIDR(無類域間路由):IP/網絡ID位數
-
-
公共IP地址
-
A類:
1.0.0.0 – 9.255.255.255
11.0.0.0 – 126.255.255.255 -
B類:
128.0.0.0 – 172.15.255.255
172.32.0.0 – 191.255.255.255 -
C類:
192.0.0.0 – 192.167.255.255
192.169.0.0 – 223.255.255.255
-
A類:
-
私有IP地址
- A類:10.0.0. – 10.255.255.255
- B類:172.16.0.0 – 172.31.255.255
- C類:192.168.0.0 – 192.168.255.255
-
特殊地址
-
0.0.0.0
0.0.0.0不是一個真正意義上的IP地址。它表示一個集合:所有不清楚的主機和目的網絡。 -
255.255.255.255
限制廣播地址。對本機來說,這個地址指本網段內(同一廣播域)的所有主機 -
127.0.0.1~127.255.255.254
本機回環地址,主要用于測試。在傳輸介質上永遠不應該出現目的地址為“127.0.0.1”的 數據包。 -
224.0.0.0到239.255.255.255
組播地址,224.0.0.1特指所有主機,224.0.0.2特指所有路由器。
224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒體程序 -
169.254.x.x
如果Windows主機使用了DHCP自動分配IP地址,而又無法從DHCP服務器獲取地址,系統會為主機分配這樣地址。
-
-
網絡地址、主機地址、廣播地址
-
網絡地址:用來標識一個有類或無類網絡的地址,是對應網絡或子網的第一個IPv4地址,即“主機ID”部分全為0的IPv4地址。
-
主機地址:除了網絡地址和廣播地址這兩個一頭一尾的地址外,中間的其他所有地址都是主機地址,可以直接分配給主機使用
-
廣播地址:是一個有類或無類網絡中的最后一個IPv4地址,即“主機ID”部分全為1的IPv4地址
-
-
網絡配置
跨網絡通信:路由
-
路由分類:
-
主機路由
網絡路由
默認路由
優先級:精度越高,優先級越高
-
主機路由
-
路由表的構成:
Destination Gateway Genmask Flags Metric Ref Use Iface link-local * 255.255.0.0 U 1002 0 0 eth0
-
目標網絡(Destination):網絡ID、子網掩碼
接口(IFace):到達目標網絡,從哪個接口出來
網關(gateway):下一個鄰近路由器的鄰近接口的IP地址,如果目標網絡和本路由器直接連接,網關為本路由的相對應接口的IP地址
-
目標網絡(Destination):網絡ID、子網掩碼
基本網絡配置
-
將Linux主機接入到網絡,需要配置網絡相關設置。
-
一般包括如下內容:
主機名
IP/netmask
路由:默認網關
DNS服務器-
主DNS服務器
次DNS服務器
第三DNS服務器
-
主DNS服務器
-
一般包括如下內容:
網絡配置方式
-
靜態指定:
-
ifcfg: ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui (setup)
配置文件
CentOS 7:網絡配置工具:nmcli, nmtui, nm-connection-editor
-
ifcfg: ifconfig, route, netstat
-
動態分配:
-
DHCP: Dynamic Host Configuration Protocol
-
動態主機配置協議DHCP
源MAC 、目標MAC(FF.FF.FF.FF.FF.FF)、源IP0.0.0.0 、目標IP 255.255.255.255
-
-
配置網絡接口
-
接口命名方式:CentOS 6:
-
以太網:eth[0,1,2,…]
ppp:ppp[0,1,2,…]
-
-
-
配置動態路由
-
通過守護進程獲取動態路由
- 安裝quagga包,支持多種格式的RIP、OSPF和BGP
- 命令vtysh配置
-
-
ifconfig命令
-
ifconfig [interface]
-
ifconfig -a
ifconfig IFACE [up|down]
-
ifconfig -a
-
ifconfig interface [aftype] options | address …
-
ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
-
ifconfig IFACE IP/netmask [up]
-
啟用混雜模式:[-]promisc
-
ifconfig [interface]
-
route命令
路由管理命令-
查看:route -n
-
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]-
目標:192.168.1.3 網關:172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0 -
目標:192.168.0.0 網關:172.16.0.1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
-
目標:192.168.1.3 網關:172.16.0.1
-
默認路由,網關:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1 -
刪除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]-
目標:192.168.1.3 網關:172.16.0.1
route del -host 192.168.1.3 -
目標:192.168.0.0 網關:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0
-
目標:192.168.1.3 網關:172.16.0.1
-
-
netstat命令
netstat – Print network connections, routing tables,interface statistics, masquerade connections, and multicast memberships-
顯示網絡連接:
netstat [–tcp|-t] [–udp|-u] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]-
-t: tcp協議相關
-u: udp協議相關
-w: raw socket相關
-l: 處于監聽狀態
-a: 所有狀態
-n: 以數字顯示IP和端口;
-e:擴展格式
-p: 顯示相關進程及PID
-
-t: tcp協議相關
-
常用組合:
-tan, -uan, -tnl, -unl -
顯示路由表:
netstat {–route|-r} [–numeric|-n]-
-r: 顯示內核路由表
-n: 數字格式
-
-r: 顯示內核路由表
-
顯示接口統計數據:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]-
netstat -i
netstat –I=IFACE
ifconfig -s eno16777736
-
netstat -i
-
-
ifstat命令
ifstat:統計網絡接口活動狀態的工具-
選項:
-
-l 監測環路網絡接口(lo)。缺省情況下,ifstat監測活動的所有非環路網絡接口。經使用發現,加上-l參數能監測所有的網絡接口的信息,而不是只監測 lo的接口信息,也就是說,加上-l參數比不加-l參數會多一個lo接口的狀態信息。
-a 監測能檢測到的所有網絡接口的狀態信息。使用發現,比加上-l參數還多一個plip0的接口信息,搜索一下發現這是并口(網絡設備中有一 個叫PLIP (Parallel Line Internet Protocol).它提供了并口…)
-z 隱藏流量是無的接口,例如那些接口雖然啟動了但是未用的
-i 指定要監測的接口,后面跟網絡接口名
-s 等于加-d snmp:[comm@][#]host[/nn]] 參數,通過SNMP查詢一個遠程主機
-h 顯示簡短的幫助信息
-n 關閉顯示周期性出現的頭部信息(也就是說,不加-n參數運行ifstat時最頂部會出現網絡接口的名稱,當一屏顯示不下時,會再一次出現接口的名稱,提示我們顯示的流量信息具體是哪個網絡接口的。加上-n參數把周期性的顯示接口名稱關閉,只顯示一次) -t 在每一行的開頭加一個時間戳(能告訴我們具體的時間)
-T 報告所有監測接口的全部帶寬(最后一列有個total,顯示所有的接口的in流量和所有接口的out流量,簡單的把所有接口的in流量相加,out流量相加)
-w 用指定的列寬,而不是為了適應接口名稱的長度而去自動放大列寬
-W 如果內容比終端窗口的寬度還要寬就自動換行
-S 在同一行保持狀態更新(不滾動不換行)注:如果不喜歡屏幕滾動則此項非常方便,與bmon的顯示方式類似
-b 用kbits/s顯示帶寬而不是kbytes/s
-q 安靜模式,警告信息不出現
-v 顯示版本信息
-d 指定一個驅動來收集狀態信息
-
-
-
ip
配置Linux網絡屬性:ip命令
ip – show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }-
ip link – network device configuration
-
set dev IFACE
-
可設置屬性:
up and down:激活或禁用指定接口
ifup/ifdown
-
可設置屬性:
-
show [dev IFACE]:指定接口
[up]:僅顯示處于激活狀態的接口
-
-
ip addr { add | del } IFADDR dev STRING
-
[label LABEL]:添加地址時指明網卡別名
[scope {global|link|host}]:指明作用域-
global: 全局可用
link: 僅鏈接可用
host: 本機可用
-
global: 全局可用
-
[broadcast ADDRESS]:指明廣播地址
-
ip address show – look at protocol addresses
-
[dev DEVICE]
[label PATTERN]
[primary and secondary] -
ip address flush – 使用格式同show
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0
-
-
ip route – routing table management
-
添加路由:ip route add
ip route add TARGET via GW dev IFACE src SOURCE_IP-
TARGET:
主機路由:IP
網絡路由:NETWORK/MASKip route add 192.168.0.0/24 via 172.16.0.1
ip route add 192.168.1.13 via 172.16.0.1 -
添加網關:ip route add default via GW dev IFACE
ip route add default via 172.16.0.1
-
-
刪除路由:ip route delete
ip route del TARGET -
顯示路由:ip route show|list
-
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0
-
-
-
ss
格式:ss [OPTION]… [FILTER]
netstat通過遍歷proc來獲取socket信息,ss使用netlink與內核tcp_diag模塊通信獲取socket信息。-
[OPTION]:
-
-t: tcp協議相關
-u: udp協議相關
-w: 裸套接字相關
-x:unix sock相關
-l: listen狀態的連接
-a: 所有
-n: 數字格式
-p: 相關的程序及PID
-e: 擴展的信息
-m:內存用量
-o:計時器信息
-
-t: tcp協議相關
-
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
-
TCP的常見狀態:
-
tcp finite state machine:
LISTEN: 監聽
ESTABLISHED:已建立的連接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
-
tcp finite state machine:
-
EXPRESSION:
dport =
sport =示例:’( dport = :ssh or sport = :ssh )’
-
常用組合:-tan, -tanl, -tanlp, -uan
ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established ‘( dport = :ssh or sport = :ssh)’ 顯示所有已建立的ssh連接
ss -o state established ‘( dport = :http or sport = :http )’ 顯示所有已建立的HTTP連接
ss -s 列出當前socket詳細信息 -
-
網絡配置文件
-
IP、MASK、GW、DNS相關配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE -
路由相關的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
-
/etc/sysconfig/network-scripts/ifcfg-IFACE:
說明參考:/usr/share/doc/initscripts-9.49.30/sysconfig.txt-
DEVICE:此配置文件應用到的設備
HWADDR:對應的設備的MAC地址
BOOTPROTO:激活此設備時使用的地址配置協議,常用的dhcp, static, none, bootp
NM_CONTROLLED:NM是NetworkManager的簡寫,此網卡是否接受NM控制;建議CentOS6為“no”
ONBOOT:在系統引導時是否激活此設備
TYPE:接口類型;常見有的Ethernet, Bridge
UUID:設備的惟一標識
IPADDR:指明IP地址
NETMASK:子網掩碼
GATEWAY: 默認網關
DNS1:第一個DNS服務器指向
DNS2:第二個DNS服務器指向
USERCTL:普通用戶是否可控制此設備
PEERDNS:如果BOOTPROTO的值為“dhcp”,是否允許
dhcp server分配的dns服務器指向信息直接覆蓋至/etc/resolv.conf文件中
-
DEVICE:此配置文件應用到的設備
`配置網關:` `/etc/sysconfig/network ` `如果配置文件和network中都設置網關,則配置文件的網關優先`
-
centos6 關閉NetworkManager服務
chkconfig NetworkManager
重啟NetworkManager:service NetworkManager restart
service NetworkManager stop -
本地解析器:
解析器執行正向和逆向查詢
/etc/hosts
本地主機名數據庫和IP地址的映像
對小型獨立網絡有用
通常,在使用DNS前檢查
getent hosts 查看/etc/hosts 內容 -
DNS名字解析:
-
查看dns,/etc/resolv.conf
NetworkManager與DNS的關系:- NetworkManager啟動、peerdns=yes:/etc/resolv.conf中的地址會重新生成,dhcp分配ip和網卡配置文件中的dns也會有效,支持3個
-
NetworkManager啟動、peerdns=no:會重新生成 /etc/resolv.conf,dhcp不在分配dns,使用的dns是本機的網卡配置文件中的dns,支持3個
-
NetworkManager不啟動、peerdns=yes:/etc/resolv.conf文件會自動生成,地址從網卡配置文件中來,并且/etc/resolv.conf中的地址,只是獲取前兩個
-
NetworkManager不啟動、peerdns=no:dns地址就沒了,配置文件中的dns地址也不會讀取,/etc/resolv.conf中沒有地址;如果/etc/resolv.conf不存在時,此文件也不會自動生成,如需使用必須手寫
-
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search magedu.com
DNS:只有當第一個dns網絡不通時才會啟用第二個
如果第一個不能夠解析,也不會啟用第二個-
DNS默認/etc/hosts的優先級高于/etc/resolv.conf;
在 /etc/nsswitch.conf 中可修改優先級 -
正向解析:FQDN–>IP
dig -t A FQDN
host -t A FQDN -
反向解析:IP–>FQDN
dig -x IP
host -t PTR IP
-
-
/etc/sysconfig/network-scripts/route-IFACE
注意:需service network restart生效
兩種風格:-
(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1
(2) 每三行定義一條路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
-
(1) TARGET via GW
-
IP、MASK、GW、DNS相關配置文件:
-
網卡別名
對虛擬主機有用
將多個IP地址綁定到一個NIC上
eth0:1 、eth0:2、 eth0:3-
ifconfig命令:
ifconfig eth0:0 192.168.1.100/24 up
ifconfig eth0:0 down -
ip命令:
ip addr add 172.16.1.2/16 dev eth0
ip addr add 172.16.1.1/16 dev eth0 label eth0:0
ip addr add 172.16.1.2/16 dev eth0 label eth0:0
ip addr del 172.16.1.1/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0
-
-
設備別名
-
為每個設備別名生成獨立的接口配置文件
-
關閉NetworkManager服務
ifcfg-ethX:xxx
必須使用靜態聯網-
DEVICE=eth0:0
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONPARENT=yes
-
DEVICE=eth0:0
注意:service network restart 生效
參考/usr/share/doc/initscripts-*/sysconfig.txt -
關閉NetworkManager服務
-
-
網絡配置
-
Linux網絡屬性配置的tui(text user interface):
system-config-network-tui
setup
注意:記得重啟網絡服務方能生效 -
配置當前主機的主機名:
第一步:改文件/etc/sysconfig/network
第二步: hostname [HOSTNAME]
第三步:/etc/hosts中添加新的主機名;
-
-
CentOS 6網卡名稱
-
網絡接口識別并命名相關的udev配置文件
/etc/udev/rules.d/70-persistent-net.rules -
查看網卡
dmesg | grep -i eth
ethtool -i eth0 -
卸載網卡驅動
modprobe -r e1000
rmmod e1000 -
裝載網卡驅動
modprobe e1000
-
網絡接口識別并命名相關的udev配置文件
網絡接口配置-bonding
- Bonding:就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。
-
bonding的工作模式
-
Mode 0 (balance-rr)
輪轉(Round-robin)策略:從頭到尾順序的在每一個slave接口上面發送數據包。本模式提供負載均衡和容錯的能力 -
Mode 1 (active-backup)
活動-備份(主備)策略:在綁定中,只有一個slave被激活。當且僅當活動的slave接口失敗時才會激活其他slave。為了避免交換機發生混亂此時綁定的MAC地址只有一個外部端口上可見 -
Mode 3 (broadcast)
廣播策略:在所有的slave接口上傳送所有的報文。本模式提供容錯能力。
-
-
bonding配置
-
創建bonding設備的配置文件
-
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0” -
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no -
查看bond0狀態:/proc/net/bonding/bond0
-
miimon 是用來進行鏈路監測的。如果miimon=100,那么系統每100ms 監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路
-
刪除bond0
ifconfig bond0 down
rmmod bonding -
詳細幫助:
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
-
-
CentOS 7網絡屬性配置
-
CentOS 6之前,網絡接口使用連續號碼命名:eth0、eth1等,當增加或刪除網卡時,名稱可能會發生變化
-
CentOS 7使用基于硬件,設備拓撲和設置類型命名:
-
網卡命名機制
systemd對網絡設備的命名方式
(a) 如果Firmware或BIOS為主板上集成的設備提供的索引信息可用,且可預測則根據此索引進行命名,例如eno1
(b) 如果Firmware或BIOS為PCI-E擴展槽所提供的索引信息可用,且可預測,則根據此索引進行命名,例如ens1
(c) 如果硬件接口的物理位置信息可用,則根據此信息進行命名,例如enp2s0
(d) 如果用戶顯式啟動,也可根據MAC地址進行命名,enx2387a1dc56
(e) 上述均不可用時,則使用傳統命名機制 -
網卡名稱
基于BIOS支持啟用biosdevname軟件
內置網卡:em1,em2
pci卡:pYpX Y:slot ,X:port -
名稱組成格式
en: Ethernet 有線局域網
wl: wlan 無線局域網
ww: wwan無線廣域網
-
名稱類型:
o: 集成設備的設備索引號
s: 擴展槽的索引號
x: 基于MAC地址的命名
ps: enp2s1
-
-
網卡設備的命名過程:
-
第一步:
udev, 輔助工具程序/lib/udev/rename_device
/usr/lib/udev/rules.d/60-net.rules -
第二步:
biosdevname 會根據/usr/lib/udev/rules.d/71-biosdevname.rules -
第三步:
通過檢測網絡接口設備,根據/usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD
ID_NET_NAME_SLOT
ID_NET_NAME_PATH
-
-
使用傳統命名方式:
-
編輯/etc/default/grub配置文件
GRUB_CMDLINE_LINUX=”rhgb quiet net.ifnames=0″
為grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
/etc/grub2.cfg是/boot/grub2/grub.cfg的軟鏈接或:直接修改修改/boot/grub2/grub.cfg
-
重啟系統
-
nmcli
-
地址配置工具:nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }-
device – show and manage network interfaces
nmcli device help -
connection – start, stop, and manage network connections
nmcli connection helpip link == nmcli device 數據鏈路層的設置
ip addr == nmcli connection 網絡層的設置
-
-
修改IP地址等屬性:
-
nmcli connection modify IFACE [+|-]setting.property value
-
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
-
setting.property:
-
-
修改配置文件執行生效:
-
systemctl restart network
nmcli con reload
-
-
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
-
網絡接口配置tui工具:nmtui
-
主機名稱配置工具:hostnamectl
status
set-hostname
使用nmcli配置主機名
-
CentOS6之前主機名配置文件:/etc/sysconfig/network
-
CentOS7主機名配置文件:/etc/hostname ,默認沒有這個文件,通過DNS反向解析獲取主機名,主機名默認為:localhost.localdomain
-
顯示主機名信息
hostname
hostnamectl status -
創建并修改文件并生效
hostnamectl set-hostname desktopX.example.com -
刪除文件,恢復主機名localhost.localdomain
使用nmcli配置網絡
NeworkManager是管理和監控網絡設置的守護進程
設備即網絡接口,連接是對網絡接口的配置。一個網絡接口可有多個連接配置,但同時只有一個連接配置生效
-
顯示所有包括不活動連接
nmcli con show -
顯示所有活動連接
nmcli con show –active -
顯示網絡連接配置
nmcli con show “System eth0“ -
顯示設備狀態
nmcli dev status -
顯示網絡接口屬性
nmcli dev show eno16777736 -
創建新連接default,IP自動通過dhcp獲取
nmcli con add con-name default type Ethernet ifname eth0 -
刪除連接
nmcli con del default -
創建新連接static ,指定靜態IP,不自動連接
nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ip4 172.25.X.10/24 gw4 172.25.X.254 -
啟用static連接配置
nmcli con up static -
啟用default連接配置
nmcli con up default -
查看幫助
nmcli con add help -
修改連接設置
nmcli con mod“static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16 -
DNS設置,存放在/etc/resolv.conf文件中PEERDNS=no 表示當IP通過dhcp自動獲取時,dns仍是手動設置,不自動獲取。等價于下面命令:
nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
網絡配置文件
-
設備配置被保存在文本文件中
/etc/sysconfig/network-scripts/ifcfg-
幫助文檔列出完整選項列表:/usr/share/doc/initscripts-*/sysconfig.txt-
動態配置
DEVICE=ethX HWADDR=0:02:8A:A6:30:45 BOOTPROTO=dhcp ONBOOT=yes Type=Ethernet
-
靜態配置
DEVICE=ethX HWADDR=0:02:8A:A6:30:45 IPADDR=192.168.0.123 NETMASK=255.255.255.0 GATEWAY=192.168.0.254 ONBOOT=yes Type=Ethernet
-
動態配置
-
修改連接配置后,需要重新加載配置
-
nmcli con reload
nmcli con down “system eth0” 可被自動激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用網卡,訪止被自動激活
-
nmcli con reload
-
圖形工具
- nm-connection-editor
-
字符工具
-
nmtui
nmtui-connect
nmtui-edit
nmtui-hostname
-
nmtui
nmcli實現bonding
-
添加bonding接口(邏輯接口):
nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup -
添加從屬接口(物理接口):
nmcli con add type bond-slave ifname ens7 master mybond0
nmcli con add type bond-slave ifname ens3 master mybond0
注:如無為從屬接口提供連接名,則該名稱是接口名稱加類型構成 -
要啟動綁定,則必須首先啟動從屬接口:
nmcli con up bond-slave-ens7
nmcli con up bond-slave-ens3 -
現在可使用以下方法啟動綁定:
nmcli con up mybond0
網絡組Network Teaming
-
網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量
-
網絡組不同于舊版中bonding技術,提供更好的性能和擴展性
-
網絡組由內核驅動和teamd守護進程實現.
-
多種方式runner
-
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol)
-
broadcast
-
啟動網絡組接口不會自動啟動網絡組中的port接口
啟動網絡組接口中的port接口總會自動啟動網絡組接口
禁用網絡組接口會自動禁用網絡組中的port接口
沒有port接口的網絡組接口可以啟動靜態IP連接
啟用DHCP連接時,沒有port接口的網絡組會等待port接口的加入 -
創建網絡組接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]-
CNAME 連接名
INAME 接口名
JSON 指定runner方式-
格式:'{“runner”: {“name”: “METHOD”}}’
- METHOD 可以是broadcast, roundrobin,activebackup, loadbalance, lacp
-
格式:'{“runner”: {“name”: “METHOD”}}’
-
CNAME 連接名
-
創建port接口
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM-
CNAME 連接名
INAME 網絡接口名
TEAM 網絡組接口名 -
連接名若不指定,默認為team-slave-IFACE
nmcli dev dis INAME
nmcli con up CNAME
INAME 設備名 CNAME 網絡組接口名或port接口
-
-
刪除網絡組
-
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection show
-
nmcli connection down team0
測試網絡工具
-
在命令行下測試網絡的連通性
-
顯示主機名
hostname -
測試網絡連通性
ping
mtr -
顯示正確的路由表
ip route -
確定名稱服務器使用:
nslookup
host
dig -
跟蹤路由
traceroute
tracepath
-
網絡客戶端工具
交互式
-
ftp,lftp是明文的
-
子命令:
-
單個文件
get(下載單個文件) -
多個文件
mget(可下載多個文件)
mput(上傳多個文件)
lftp [-p port] [-u user[,password]] SERVER
-
-
非交互式
-
lftpget URL 非交互式
-
wget [option]… [URL]…
-
-q: 靜默模式
-c: 斷點續傳
-O: 保存位置
–limit-rates=: 指定傳輸速率
-
-q: 靜默模式
-
links URL :字符界面瀏覽器
-
–dump
–source
-
–dump
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/74859