第二章

osi模型的七層結構
ISO:國際標準化組織
OSI:開放系統互聯/參考模型
IOS:蘋果公司的移動操作系統
應用層 application
網絡進程訪問應用層
爲應用程序進程(例如:電子郵件、文件傳輸)提供網絡服務
提供用戶身份驗證
表示層 presentation
數據表示
確保接受系統可以讀出該數據
格式化數據
構建數據
協商用於應用層的數據傳輸語法
提供加密
ANSI用7位二進制表示,0-127表示。
會話層 session
主機間通信
建立、管理和終止在應用程序之間的會話
傳輸層 transport
傳輸問題
確保數據傳輸的可靠性
建立、維護和終止虛擬電路
通過錯誤檢測和恢復
信息流控制來保障可靠性
終端對終端的傳輸是跨了網絡,通過了路由器。
網絡層 network
數據傳輸
路由數據包
選擇傳遞數據的最佳路徑
支持邏輯尋址和路徑選擇
定義了邏輯地址(ip)和路由功能(選擇路徑)
可以實現跨網絡通信,僅僅是主機到主機
數據鏈路層 date link
訪問介質
定義如何格式化數據以便進行傳輸以及如何控制對網絡訪問
支持錯誤檢測
定義了物理地址(MAC)
僅僅是解決的是本地通信,不能跨網絡通信。即一個網段通信(一個鏈路),提供點到點通信。
物理層 physical
二進制傳輸
爲啓動、維護以及關閉物理鏈路定義了電氣規範、機械規範、過程規範和功能規範
ios七層模型

數據封裝

fcs校驗位,用來檢查數據包是否有破壞的,把fcs前面的做一個計算得出一個數值放在fcs中,最終變成高低電平進行傳輸,到另一邊進行解封,計算和fcs的值是否相同。相同則接受,不同則丟棄。
數據解封

下層爲上層服務主要體現在下層協議的報文中有上層協議的標識信息。
對等通信

PDU
PDU: Protocol Data Unit,協議數據單元是指對等層次之間傳遞的數據單位
物理層的 PDU是數據位 bit
數據鏈路層的 PDU是數據幀 frame
網絡層的PDU是數據包 packet
傳輸層的 PDU是數據段 segment
其他更高層次的PDU是消息 message

三種通訊模式
單播、廣播、組播或多播
單播:unicast數據發送的時候,目標是一個主機(但是別人也可能收到)
廣播:broadcast數據發送的時候,目標是所有主機
組播:multicast數據發送的時候,目標是一部分主機
局域網 Local Area Network(基本上以太網是局域網標準了,廣播機制)

LAN 組成
Computers
PCs
Servers
Interconnections
NICs
Media
Network devices
Hubs
Switches
Routers
Protocols
Ethernet
IP
ARP
DHCP
網絡線纜和接口

基帶:傳輸數字信號
寬帶:傳輸模擬信號
非屏蔽式雙絞線UTP

UTP

標準568A線序爲綠白、綠、橙白、藍、藍白、橙、棕白、棕;標準568B線序爲橙白、橙、綠白、藍、藍白、綠、棕白、棕。在實際應用中,大多數使用568B的標準,通常認爲該標準對電磁甘榮的屏蔽更好。
RJ-45 Connector和Jack

UTP直通線(Straight-Through)

直通線是指兩端都是568A或568B標準的雙絞線
UTP交叉線(Crossover)

交叉線是指一端是568A標準,另一端是568B標準的雙絞線
UTP 直通線和交叉線

上圖總結的是什麼時候用直連線什麼時候用交叉線。計算機和交換機是直連線,只是交換機內部做了交叉。集線器和計算機也是直連線。
1000BASE-T GBIC
GBIC是Giga Bitrate Interface Converter的縮寫,是將千兆位電信號轉換爲光信號的接口器件。

Fiber-Optic GBICs
Short wavelength (1000BASE-SX)
Long wavelength/long haul (1000BASE-LX/LH)
Extended distance (1000BASE-ZX)

光纖是光導纖維的簡稱,光纖傳輸介質由可以傳送光波的玻璃纖維或透明塑料製成,外包一層比玻璃折射率低的材料。進入光纖的光波在兩種材料的介面上形成全反射,從而不斷地向前播。光纖可以分爲單模光纖和多模光纖。
網絡適配器

Ethernet Evolution

LAN標準

Ethernet Frame結構

其中Type:上層協議的類型,FCS:校驗位,data:包含網絡層首部傳輸層首部應用層首部和數據
以太網最小:46+8+6+6+2+4=72,最大:1526即以太網幀的變化範圍:72-1526
數據鏈路層

前24位IEEE分配,後24位廠家分配。
MAC地址

b1是0是單播,b1是1是多播,全1是廣播
衝突檢測的載波偵聽多路訪問CSMA/CD

Hub集線器
 Hub:多端口中繼器
 Hub並不記憶該信息包是由哪個MAC地址發
出,哪個MAC地址在Hub的哪個端口,直接把信息廣播出去,集線器上的所有機器都可以收到信息。
 Hub的特點:
 共享帶寬
 半雙工

以太網橋
 交換式以太網的優勢
•擴展了網絡帶寬
•分割了網絡衝突域,使網絡衝突被限制在最小的範圍內
•交換機作爲更加智能的交換設備,能夠提供更多用戶所要求的功能:優先級、虛擬網、遠程檢測……
以太網橋的工作原理
以太網橋監聽數據幀中源MAC地址,學習MAC,建立MAC表
對於未知MAC地址,網橋將轉發到除接收該幀的端口之外的所有端口
當網橋接到一個數據幀時,如果該幀的目的位於接收端口所在網段上,它就過濾掉該數據幀;如果目的MAC地址在位於另外一個端口,網橋就將該幀轉發到該端口
當網橋接到廣播幀時候,它立即轉發到除接收端口之外的所有其他端口

其中A和B中間有個hub,C和D中間有個hub。

Hub和交換機比較
 集線器屬於OSI的第一層物理層設備,而網橋屬於OSI的第二
層數據鏈路層設備,路由器工作在三層。
 從工作方式來看,集線器是一種廣播模式,所有端口在一個衝
突域裏面。網橋的可以通過端口隔離衝突
 Hub是所有共享總線和共享帶寬。網橋每個端口占一個帶寬
交換機是 不能處理廣播的,只能泛洪發送。ffffffffffff不回出現在原地址中。
主機發送廣播,所有能收到的主機在一個廣播中。
交換機是不能隔斷廣播的,交換機連起來大家都在一個廣播域中。交換機中每一個主機就是一個衝突域,交換機可以隔斷衝突域但不能隔斷廣播域,路由器可以隔斷廣播域,路由器收到廣播直接丟棄。

路由器

爲了實現路由,路由器需要做下列事情
分隔廣播域
選擇路由表中到達目標最好的路徑
維護和檢查路由信息
連接廣域網
路由

路由:把一個數據包從一個設備發送到不同網絡裏的另一個設備上去。這些工作依靠路由器來完成。路由器只關心網絡的狀態和決定網絡中的最佳路徑。路由的實現依靠路由器中的路由表來完成
VLAN
分離廣播域
安全
靈活管理

VLAN=廣播域=邏輯網絡(Subnet)
一個VLAN相當於一個廣播域,兩個VLAN是不能通信的,除非中間用路由器連接。網卡是數據鏈路層。
分層的網絡架構

TCP/IP協議棧
 Transmission Control Protocol
/Internet Protocol
傳輸控制協議/因特網互聯協議
 TCP/IP是一個Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等許多協議
 最早發源於美國國防部(縮寫爲DoD)的因特網的前身ARPA網項目,1983年1月1日,TCP/IP取代了舊的網絡控制協議NCP,成爲今天的互聯網和局域網的基石和標準,由互聯網工程任務組負責維護
 共定義了四層
 和ISO參考模型的分層有對應關係

TCP/IP 應用層

傳輸層

可靠性vs高效性

TCP特性
工作在傳輸層
面向連接協議
全雙工協議
半關閉(允許一方直接斷開)
錯誤檢查
將數據打包成段,排序
確認機制(發100,回覆我希望下次發101)
數據恢復,重傳
流量控制,滑動窗口
擁塞控制,慢啓動和擁塞避免算法
wireshark(抓包)
TCP包頭

TCP包頭
源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程佔用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用16位表示的,可推算計算機的端口個數爲2^16個。其中下層爲上層提供服務,通過端口號可以知道應用層使用的是什麼協議。(關於端口的解釋可以看視頻2.25)
cat /etc/services 查看常見服務的端口。
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由於序列號由32位表示,所以每2^32個字節,就會出現序列號迴繞,再次從 0 開始
確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號
數據偏移:表示TCP報文段的首部長度,共4位,由於TCP首部包含一個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字段的單位是32位(即4個字節爲計算單位),4位二進制最大表示15,所以數據偏移也就是TCP首部最大60字節
URG:表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針字段(urgent pointer)只有當URG=1時纔有效
ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號字段纔有效。TCP規定,連接建立後,ACK必須爲1,帶ACK標誌的TCP報文段稱爲確認報文段
PSH:提示接收端應用程序應該立即從TCP接收緩衝區中讀走數據,爲接收後續數據騰出空間。如果爲1,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留在TCP接收緩衝區中
RST:如果收到一個RST=1的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然後再重新建立連接。或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST標誌的TCP報文段稱爲復位報文段
SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置爲1,帶SYN標誌的TCP報文段稱爲同步報文段
FIN:表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:“我的數據已經發送完畢,你可以釋放連接了”,帶FIN標誌的TCP報文段稱爲結束報文段
窗口大小:表示現在允許對方發送的數據量,也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量
校驗和:提供額外的可靠性
緊急指針:標記緊急數據在數據字段中的位置
選項部分:其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位表示,選項部分最長爲:(2^4-1)*4-20=40字節
常見選項:
最大報文段長度:Maxium Segment Size,MSS
窗口擴大:Windows Scaling
時間戳: Timestamps
TCP包頭選項
1 最大報文段長度
指明自己期望對方發送TCP報文段時那個數據字段的長度。默認是536字節。數據字段的長度加上TCP首部的長度纔等於整個TCP報文段的長度。MSS不宜設的太大也不宜設的太小。若選擇太小,極端情況下,TCP報文段只含有1字節數據,在IP層傳輸的數據報的開銷至少有40字節(包括TCP報文段的首部和IP數據報的首部)。這樣,網絡的利用率就不會超過1/41。若TCP報文段非常長,那麼在IP層傳輸時就有可能要分解成多個短數據報片。在終點要把收到的各個短數據報片裝配成原來的TCP報文段。當傳輸出錯時還要進行重傳,這些也都會使開銷增大。因此MSS應儘可能大,只要在IP層傳輸時不需要再分片就行。在連接建立過程中,雙方都把自己能夠支持的MSS寫入這一字段。 MSS只出現在SYN報文中。即:MSS出現在SYN=1的報文段中
2 窗口擴大
爲了擴大窗口,由於TCP首部的窗口大小字段長度是16位,所以其表示的最大數是65535。但是隨着時延和帶寬比較大的通信產生(如衛星通信),需要更大的窗口來滿足性能和吞吐率,所以產生了這個窗口擴大選項
3 時間戳
可以用來計算RTT(往返時間),發送方發送TCP報文時,把當前的時間值放入時間戳字段,接收方收到後發送確認報文時,把這個時間戳字段的值複製到確認報文中,當發送方收到確認報文後即可計算出RTT。也可以用來防止迴繞序號PAWS,也可以說可以用來區分相同序列號的不同報文。因爲序列號用32爲表示,每2^32個序列號就會產生迴繞,那麼使用時間戳字段就很容易區分相同序列號的不同報文
映射第四層到應用程序

TCP協議PORT
傳輸層通過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,其中的範圍可以更改
建立連接

TCP三次握手

TCP四次揮手

有限狀態機FSM:Finite State Machine
CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
SYN-SENT 在發送連接請求後,等待對方確認
SYN-RECEIVED 在收到和發送一個連接請求後,等待對方確認
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,並已確認
LAST-ACK 被動關閉,等待最後一個關閉傳輸連接確認,並等待所有分組消失
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認
有限狀態機
客戶端先發送一個FIN給服務端,自己進入了FIN_WAIT_1狀態,這時等待接收服務端的報文,該報文會有三種可能:
只有服務端的ACK
只有服務端的FIN
基於服務端的ACK,又有FIN
1、只收到服務器的ACK,客戶端會進入FIN_WAIT_2狀態,後續當收到服務端的FIN時,迴應發送一個ACK,會進入到TIME_WAIT狀態,這個狀態會持續2MSL(TCP報文段在網絡中的最大生存時間, RFC 1122標準的建議值是2min).客戶端等待2MSL,是爲了當最後一個ACK丟失時,可以再發送一次。因爲服務端在等待超時後會再發送一個FIN給客戶端,進而客戶端知道ACK已丟失
2、只有服務端的FIN時,迴應一個ACK給服務端,進入CLOSING狀態,然後接收到服務端的ACK時,進入TIME_WAIT狀態
3、同時收到服務端的ACK和FIN,直接進入TIME_WAIT狀態
客戶端的典型狀態轉移
客戶端通過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 指定孤兒連接在內核中生存的時間
有限狀態機

虛線代表服務器,實線代表客戶端。
TCP協議中的三次握手和四次握手

客戶端的三次握手和四次揮手

服務器端的三次握手和四次揮手

TCP端口號

TCP序列和確認號

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滑動窗口

擁塞控制
網絡中的帶寬、交換結點中的緩存和處理機等,都是網絡的資源。在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可承受的能力,網絡的性能就會變壞。這種情況就叫做擁塞
TCP爲提高網絡利用率,降低丟包率,並保證網絡資源對每條數據流的公平性。即所謂的擁塞控制
TCP擁塞控制的標準文檔是RFC 5681,其中詳細介紹了擁塞控制的四個部分:慢啓動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fast retransmit)和快速恢復(fast recovery)。擁塞控制算法在Linux下有多種實現,比如reno算法、vegas算法和cubic算法等。它們或者部分或者全部實現了上述四個部分
當前所使用的擁塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control
UDP特性
工作在傳輸層
提供不可靠的網絡訪問
非面向連接協議
有限的錯誤檢查
傳輸性能高
無數據恢復特性
UDP包頭

Internet層

Internet Control Message Protocol

Address Resolution Protocol

ARP

ARP表
[root@centos7 ~]#ip neigh
192.168.74.1 dev eth0 lladdr 00:50:56:c0:00:01 REACHABLE
192.168.74.254 dev eth0 lladdr 00:50:56:e3:29:de STALE
192.168.199.1 dev eth1 lladdr d4:ee:07:52:3a:46 STALE
192.168.199.207 dev eth1 lladdr ac:c1:ee:7b:a3:5b STALE
[root@centos7 ~]#arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.74.1 ether 00:50:56:c0:00:01 C eth0
192.168.74.254 ether 00:50:56:e3:29:de C eth0
192.168.199.1 ether d4:ee:07:52:3a:46 C eth1
192.168.199.207 ether ac:c1:ee:7b:a3:5b C eth1
主機到主機的包傳遞

默認網關

反向ARP

Internet 協議特徵
運行於 OSI 網絡層
面向無連接的協議
獨立處理數據包
分層編址
盡力而爲傳輸
無數據恢復功能
IP PDU報頭

IP PDU 報頭
版本:佔4位,指 IP 協議的版本目前的IP協議版本號爲4
首部長度:佔4位,可表示的最大數值是15個單位,一個單位爲4字節,因此IP 的首部長度的最大值是60字節
區分服務:佔8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.後改名爲區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用
總長度:佔16位,指首部和數據之和的長度,單位爲字節,因此數據報的最大長度爲 65535 字節.總長度必須不超過最大傳送單元 MTU
標識:佔16位,它是一個計數器,通常,每發送一個報文,該值會加1, 也用於數據包分片,在同一個包的若干分片中,該值是相同的
標誌(flag):佔3位,目前只有後兩位有意義
DF: Don‘t Fragment,中間的一位,只有當 DF=0 時才允許分片
MF: More Fragment,最高位,MF=1表示後面還有分片。MF=0 表示最後一個分片
片偏移:佔12位,指較長的分組在分片後,該分片在原分組中的相對位置.片偏移以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字節,分別記錄源地址和目的地址
IP PDU 報頭示例
片偏移以8個字節爲偏移單位
假定MTU=1400,三個包id=100相同, 前兩個 mf=1,最後一個mf=0

協議域

IP地址
它們可唯一標識 IP 網絡中的每臺設備
每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址
IP地址由兩部分組成:
•網絡ID:
•標識網絡
•每個網段分配一個網絡ID
•主機 ID:
•標識單個主機
•由組織分配給各設備
IPv4地址格式:點分十進制記法

IP地址分類

IP地址分類
A類:
0 000 0000 - 0 111 1111: 1-127
網絡數:126, 127
每個網絡中的主機數:2^24-2
默認子網掩碼:255.0.0.0
私網地址:10.0.0.0
B類:
10 00 0000 - 10 11 1111:128-191
網絡數:2^14
每個網絡中的主機數:2^16-2
默認子網掩碼:255.255.0.0
私網地址:172.16.0.0-172.31.0.0
C類:
110 0 0000 - 110 1 1111: 192-223
網絡數:2^21
每個網絡中的主機數:2^8-2
默認子網掩碼:255.255.255.0
私網地址:192.168.0.0-192.168.255.0
D類:組播
1110 0000 - 1110 1111: 224-239
E類:
240-255
公共IP地址

私有IP地址

特殊地址
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服務器獲取地址,系統會爲主機分配這樣地址。
保留地址

子網掩碼

有子網的子網掩碼

子網掩碼的八位

可變長度子網掩碼

Subnet地址

優化IP地址分配

跨網絡通信
跨網絡通信:路由
路由分類:
主機路由(具體到每一臺主機)
網絡路由(到達網段的路由)
默認路由(除了上面的路由)
優先級:精度越高,優先級越高
動態主機配置協議DHCP

基本網絡配置
將Linux主機接入到網絡,需要配置網絡相關設置。
一般包括如下內容:
主機名
IP/netmask
路由:默認網關
DNS服務器
主DNS服務器
次DNS服務器
第三DNS服務器
CentOS 6網卡名稱
接口命名方式:CentOS 6
以太網:eth[0,1,2,...]
ppp:ppp[0,1,2,...]
網絡接口識別並命名相關的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
查看網卡:
dmesg |grep –i eth
ethtool -i eth0
卸載網卡驅動:
modprobe -r e1000
rmmod e1000
裝載網卡驅動:
modprobe e1000
網絡配置方式
靜態指定:
ifconfig, route, netstat
ip: object {link, addr, route}, ss, tc
system-config-network-tui,setup
配置文件
動態分配:
DHCP: Dynamic Host Configuration Protocol
配置網絡接口
ifconfig命令
ifconfig [interface]
ifconfig -a
ifconfig IFACE [up|down]
ifconfig interface [aftype] options | address ...
ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
啓用混雜模式:[-]promisc
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
默認路由,網關: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
配置動態路由
通過守護進程獲取動態路由
•安裝quagga包
•支持多種路由協議:RIP、OSPF和BGP
•命令vtysh配置
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
常用組合:
-tan, -uan, -tnl, -unl
顯示路由表:
netstat {--route|-r} [--numeric|-n]
-r: 顯示內核路由表
-n: 數字格式
顯示接口統計數據:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
netstat -i
netstat –I=IFACE
ifconfig -s eth0
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: 本機可用
[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/MASK
ip 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信息。
選項:
-t: tcp協議相關
-u: udp協議相關
-w: 裸套接字相關
-x:unix sock相關
-l: listen狀態的連接
-a: 所有
-n: 數字格式
-p: 相關的程序及PID
-e: 擴展的信息
-m:內存用量
-o:計時器信息
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常見狀態:
tcp finite state machine:
LISTEN: 監聽
ESTABLISHED:已建立的連接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
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文件中
主機名和本地解析器
配置當前主機的主機名:
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
解析器執行正向和逆向查詢
/etc/hosts
•本地主機名數據庫和IP地址的映像
•對小型獨立網絡有用
•通常,在使用DNS前檢查
•getent hosts 查看/etc/hosts 內容
dns名字解析
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search magedu.com
/etc/nsswitch.conf
與/etc/hosts相比優先於DNS
正向解析: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
網卡別名
對虛擬主機有用
將多個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
注意:service network restart 生效
參考/usr/share/doc/initscripts-*/sysconfig.txt
網絡接口配置-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接口上傳送所有的報文,提供容錯能力
active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要配置交換機以便整合鏈接。如:Cisco 交換機需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel
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
https://www.kernel.org/doc/Documentation/networking/bonding.txt
CentOS 7網絡屬性配置
CentOS 6之前,網絡接口使用連續號碼命名:eth0、eth1等,當增加或刪除網卡時,名稱可能會發生變化
CentOS 7使用基於硬件,設備拓撲和設置類型命名:
(1) 網卡命名機制
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
(2) 名稱組成格式
en: Ethernet 有線局域網
wl: wlan 無線局域網
ww: wwan無線廣域網
名稱類型:
o<index>: 集成設備的設備索引號
s<slot>: 擴展槽的索引號
x<MAC>: 基於MAC地址的命名
p<bus>s<slot>: 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
採用傳統命名方式
使用傳統命名方式:
(1) 編輯/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
或:修改/boot/grub2/grub.cfg
(2) 爲grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
(3) 重啓系統
CentOS 7網絡配置工具
CentOS7主機名
配置文件:/etc/hostname ,默認沒有此文件,通過DNS反向解析獲取主機名,主機名默認爲:localhost.localdomain
顯示主機名信息
hostname
hostnamectl status
設置主機名
hostnamectl set-hostname centos7.magedu.com
刪除文件/etc/hostname,恢復主機名localhost.localdomain
CentOS 7網絡配置工具
圖形工具:nm-connection-editor
字符配置tui工具:nmtui
命令行工具:nmcli
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 help
修改IP地址等屬性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
修改配置文件執行生效:systemctl restart network
nmcli con reload
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
使用nmcli配置網絡
NeworkManager是管理和監控網絡設置的守護進程
設備即網絡接口,連接是對網絡接口的配置。一個網絡接口可有多個連接配置,但同時只有一個連接配置生效
顯示所有包括不活動連接
nmcli con show
顯示所有活動連接
nmcli con show --active
顯示網絡連接配置
nmcli con show "System eth0“
顯示設備狀態
nmcli dev status
顯示網絡接口屬性
nmcli dev show eth0
創建新連接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 ipv4.addresses 172.25.X.10/24 ipv4.gateway 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
nmcli命令

網絡配置文件
設備配置被保存在文本文件中
•/etc/sysconfig/network-scripts/ifcfg-<name>
•幫助文檔列出完整選項列表:/usr/share/doc/initcripts-*/sysconfig.txt

nmcli命令
修改連接配置後,需要重新加載配置
nmcli con reload
nmcli con down “system eth0” 可被自動激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用網卡,訪止被自動激活
圖形工具
nm-connection-editor
字符工具
nmtui
nmtui-connect
nmtui-edit
nmtui-hostname
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-eth0
nmcli con up bond-slave-eth1
啓動綁定
nmcli con up mybond0
網絡組Network Teaming
網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量
網絡組不同於舊版中bonding技術,提供更好的性能和擴展性
網絡組由內核驅動和teamd守護進程實現.
多種方式runner
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol)
網絡組
啓動網絡組接口不會自動啓動網絡組中的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
創建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 con add type team con-name team0 ifname team0 config ‘{"runner": {"name": "loadbalance"}}'
nmcli con mod team0 ipv4.addresses 192.168.1.100/24
nmcli con mod team0 ipv4.method manual
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
nmcli con up team0
nmcli con up team0-eth1
nmcli con up team0-eth2
teamdctl team0 state; nmcli dev dis eth1
實驗:創建網絡組
ip link
nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'
nmcli con mod team0 ipv4.addresses '192.168.0.100/24'
nmcli con mod team0 ipv4.method manual
nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0
teamdctl team0 state
ping -I team0 192.168.0.254
nmcli dev dis eno1
teamdctl team0 state
nmcli con up team0-port1
nmcli dev dis eno2
teamdctl team0 state
nmcli con up team0-port2
teamdctl team0 state
管理網絡組配置文件
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.25.5.100
PREFIX0=24
NAME=team0
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes
刪除網絡組
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection show
網橋
橋接:把一臺機器上的若干個網絡接口“連接”起來。其結果是,其中一個網口收到的報文會被複制給其他網口併發送出去。以使得網口之間的報文能夠互相轉發。網橋就是這樣一個設備,它有若干個網口,並且這些網口是橋接起來的。與網橋相連的主機就能通過交換機的報文轉發而互相通信。
主機A發送的報文被送到交換機S1的eth0口,由於eth0與eth1、eth2橋接在一起,故而報文被複制到eth1和eth2,並且發送出去,然後被主機B和交換機S2接收到。而S2又會將報文轉發給主機C、D。

配置實現網橋
創建軟件網橋
nmcli con add type bridge con-name br0 ifname br0
nmcli connection modify br0 ipv4.addresses 192.168.74.100/24 ipv4.method manuall
nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0
查看網橋
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
brctl show
刪除網橋 brctl delbr br0
刪除網橋中網卡 brctl delif eth0
注意:NetworkManager只支持以太網接口接口連接到網橋,不支持聚合接口
測試網絡工具
在命令行下測試網絡的連通性
顯示主機名
hostname
測試網絡連通性
ping
mtr
顯示正確的路由表
ip route
確定名稱服務器使用:
nslookup
host
dig
跟蹤路由
•traceroute
•tracepath
網絡客戶端工具
ftp,lftp:子命令:get、mget、ls、help
lftp [-p port] [-u user[,password]] SERVER
lftpget URL
wget [option]... [URL]...
-q: 靜默模式
-c: 斷點續傳
-P:保存在指定目錄
-O: 保存爲指定的文件名
--limit-rate=: 指定傳輸速率,單位K,M等
links URL
--dump
--source

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章