網路基礎和 TCP、IP 協議

1、網路基本概念

1.1 什麼是網路:一些網路設備按照一定的通訊規則(網路協議)進行通訊的系統。

1.2 VPN(虛擬私有網路)加密,相當於專線,從分支機構到總部。

1.3 資源共享的功能和特點:

  數據和應用程式
  資源
  網路存儲
  備份設備

1.4 常見的網路物理組件:

1.5 用戶應用程式對網路的影響:

  批處理應用程式:

    FTP、TFTP、庫存更新
    無需直接人工交互
    頻寬很重要,但並非關鍵性因素

  互動式應用程式:

    庫存查詢、資料庫更新
    人機交互
    因為用戶需等待響應,所以響應時間很重要,但並非關鍵性因素,除非要等待很長時間

  實時應用程式:

    VoIP、影片
    人與人的交互
    端到端的延時至關重要

1.6 網路的特徵:

  速度、成本、安全性、可擴展性、可用性、可靠性、拓撲
  物理拓撲描述了物理設備的布線方式:匯流排拓撲(wall)、環裝拓撲、星型拓撲、雙環狀拓撲、全網狀拓撲、部分狀拓撲
  邏輯拓撲描述了資訊在網路中流動的方式
    邏輯組件:交換機(switch)、路由器(router)集線器(hub)、網橋(bridge)

1.7 了解主機到主機通訊:

  舊模型:

    專有

  基於標準的模型:

    多廠家軟體
    分層方法

1.8 OSI 模型(Open System Interconnection)

  物理層(physical):定義了物理連接設備的規範(有形:網線、無形:無線電)

  數據鏈路層(data link):格式化數據、鏈路連接、定義物理地址(定義網路設備的唯一標誌)、錯誤校驗

  網路層(network):路由功能,選擇路徑,支援邏輯定址(名字、id)和路徑選擇

  傳輸層(transport):確保數據傳輸的可靠性;利用埠號定義應用程式

  會話層(session):會話管理

  表示層(presention):確保系統可以讀出數據、格式化數據、構建數據、提供加密、壓縮

  應用層(application):為應用程式進程提供網路服務

  PDU:協議數據單元是指對等層次之間傳遞的數據單位:

    物理層:bit(位)
    數據鏈路層:frame(幀)
    網路層:packet(數據包)
    傳輸層:segment(數據段)
    其他更高層:message(消息)

1.9 網路設備

  三種通訊模式:

    單工:單向傳輸
    半雙工 Half Duplex:輪流雙向傳輸
    全雙工 Full Duplex:同時雙向傳輸

  網路中:

    單播 running:目標主機一台(通過目標地址傳輸)
    廣播 broadcast:目標所有主機(所有主機都能發廣播:存在干擾可能性)
    組播 multicast:即多播,目標一些主機(小組)

  區域網 Local Area Network

  非屏蔽式雙絞線 UTP

  GBIC:轉換光訊號和電訊號

  Ethernet Evolution(乙太網):數據鏈路層

  MAC 地址

  Hub 集線器(物理層):物理連接,頻寬共享,半雙工

  衝突域:一個主機發其他人不能發,集線器越多衝突域越大

  廣播域:當一個電腦發廣播,只要電腦收到 就算在該廣播域中

  wlan:wifi,wapi

  乙太網橋或交換機 Switch 工作原理:

  乙太網橋監聽數據幀中源 MAC 地址,學習 MAC,建立 MAC 表;
  對於未知 MAC 地址,當網橋接到廣播幀時候,它立即轉發到除接收埠之外的所有其他埠;
  當網橋接到一個數據幀時,如果該幀的目的位於接收埠所在網段上,它就過濾掉該數據幀;如果目的 MAC 地址在位於另外一個埠,網橋就將該幀轉發到該埠;
  乙太網或交換機工作於數據鏈路層。

  集線器屬於 OSI 模型的第一層物理層設備,而網橋屬於 OSI 的第二層數據鏈路層設備。

  從工作方式來看,集線器是一種廣 播模式,所有埠在一個衝突域裡面。網橋可以通過埠隔離衝突域。
  Hub 是所有共享匯流排和共享頻寬。網橋每個埠佔一個頻寬。

  路由器 Router:

  路由器隔開算一個網段,路由器上有路由表(路徑),任何主機都有路由表;
  連接區域網和廣域網,工作於網路層;

# route -n     # linux 中查看路由表

  路由器的功能:把一個數據報文從一個網段轉發到另一個網段(靠路由表完成)

  VLAN(虛擬區域網)

    分隔廣播域
    安全
    靈活管理
    兩個 VLAN 之間通訊靠路由器(路由器連接交換機),有的交換機具有路由功能(連接多個交換機)
    VLAN = 廣播域 = 邏輯網路

  分層的網路架構:

  

  交換機:生成樹協議(stp)自動啟用網卡,避免迴環

 

2、TCP/IP 協議棧

傳輸控制協議/網際網路互聯協議

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

TCP 協議:要先建立連接,在進行通訊(可靠、序列號)

UDP 協議:不需要建立連接,直接通訊(效率高、無序列號)

可靠性 VS 高效性:

2.1 TCP 協議

  工作在傳輸層
  面向連接協議
  全雙工協議
  半關閉
  錯誤檢查
  將數據打包成段,排序
  確認機制
  數據恢復,重傳
  流量控制,滑動窗口
  擁塞控制,慢啟動和擁塞避免演算法
  更多關於 tcp 的內核參數,可參看 man 7 tcp

  2.1.1 TCP 協議

  傳輸層通過 port 號,確定應用層協議

  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/dup(memcached)

    49152-65535:動態埠或私有埠,客戶端程式隨機使用的埠。

    其範圍定義:/proc/sys/net/ipv4/ip_local_port_range

# cat /etc/services    # 常見服務埠號
#ss -ntul              # 查看我機器上跑的埠號
#ss -ntulp             # 查看我機器上跑的埠號對應應用
lsof -i :6010          # 查看埠號 6010 是哪個服務再使用

  2.1.2 TCP 包頭

  窗口的大小:表示現在允許對方發送的數據量,也是告訴對方,從本報文段的確認號開始允許對方發送的數據量,達到此值,需要 ACK 確認後才能再繼續傳輸後面的數據,由 Window size value * Window size scaling factor(此值在三次握手階段 TCP 選項 Window scale 協商得到)得出此值(固定窗口 → 滑動窗口)

  校驗和:提供額外的可靠性

  緊急指針:標記緊急數據在數據欄位中的位置

  選項部分:其最大長度可根據 TCP 首部長度進行推算。TCP 首部用 4 位表示,選項部分最長為:(2^4-1)*4-20=40 位元組

    常見選項:

    最大報文段長度:Maxium Segment Size,MSS,通常 1460 位元組

    窗口擴大:Window Scale

    時間戳:Timestamps

  URG:表示本報文段中發送的數據是否包含緊急數據。後面的緊急指針欄位(urgentpointer)只有當 URG=1 時才有效。

  ACK:確認報文段,表示是否前面確認號欄位是否有效。只有當 ACK=1 時,前面的確認號欄位才有效。TCP 規定,連接建立後,ACK 必須為 1,帶 ACK 標誌的 TCP 報文段稱為確認報文段。

  PSH:如果為 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 報文段稱為結束報文段。

  2.1.3 TCP 的三次握手

  第一次握手:建立連接時,客戶端發送 SYN 包(SYN=1,seq=x)到伺服器,並進入 SYN_SENT(SYN 已發送)狀態,等待伺服器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

  第二次握手:伺服器收到 SYN 包,必須確認客戶的 SYN(ack=x+1),同時自己也發送一個 SYN 包(SYN=1,seq=y),和 ACK 包,此時伺服器進入 SYN_RECV 狀態。

  第三次握手:客戶端收到伺服器的 SYN+ACK 包,向伺服器發送確認包 ACK(ack=y+1),此包發送完畢,客戶端和伺服器進入 ESTABLISHED(TCP連接成功)狀態,完成三次握手。

  2.1.4 sync 半連接和 accept 全連接隊列

  server 端的半連接隊列(syn 隊列):

  在三次握手協議中,伺服器維護一個半連接隊列,該隊列為每個客戶端的 SYN 包開設一個條目,該條目表明伺服器已收到 SYN 包並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於 Syn_RECV 狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入 ESTABLISHED 狀態。

  server 端的完全連接隊列(accpet 隊列):

  當第三次握手時,當 server 接收到 ACK 報文之後, 會進入一個新的叫 accept 的隊列,該隊列的長度為 min(backlog, somaxconn),默認情況下,somaxconn 的值為 128,表示最多有 129 的 ESTAB 的連接等待 accept(),而 backlog 的值則應該是由 int listen(int sockfd, int backlog) 中的第二個參數指定,listen 裡面的 backlog 可以有我們的應用程式去定義的。

  2.1.5 TCP 的四次揮手

  第一次揮手:A 數據傳輸完畢需要斷開連接,A 的應用進程向其 TCP 發出連接釋放報文段(FIN=1,序號 seq=u),並停止再發送數據,主動關閉 TCP 連接,進入 FIN-WAIT-1 狀態,等待 B 的確認

  第二次揮手:B 收到連接釋放報文段後即發出確認報文段(ACK=1,確認號 ack=u+1,序號 seq=v),B 進入 CLOSE-WAIT 關閉等待狀態,此時的 TCP 處於半關閉狀態,A 到 B 的連接釋放。而 A 收到 B 的確認後,進入 FIN-WAIT-2 狀態,等待 B 發出的連接釋放報文段。

  第三次揮手:當 B 數據傳輸完畢後,B發出連接釋放報文段(FIN = 1,ACK = 1,序號seq=w,確認號 ack=u+1),B進入 LAST-ACK(最後確認)狀態,等待 A 的最後確認。

  第四次揮手:A 收到 B 的連接釋放報文段後,對此發出確認報文段(ACK = 1,seq=u+1,ack=w+1),A 進入TIME-WAIT(時間等待)狀態。此時 TCP 未釋放掉,需要經過時間等待計時器設置的時間 2MSL 後,A 才進入 CLOSE 狀態。

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 狀態。

  TCP 狀態轉換圖:

  2.1.6 客戶端的典型狀態轉移

  客戶端通過 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     # 指定孤兒連接在內核中生存的時間

  2.1.7 三次握手和四次揮手的狀態切換

  2.1.8 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)

tcpdump -i eth0 -nn 80 # 抓包,指定網卡 以數字方式抓包

  2.1.9 擁塞控制:根據網路狀況自動調整傳輸速度

  網路中的頻寬、交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可承受的能力,網路的性能就會變壞,此情況稱為擁塞。

  TCP為提高網路利用率,降低丟包率,並保證網路資源對每條數據流的公平性,即所謂的擁塞控制。

  TCP 擁塞控制的標準文檔是 RFC 5681,其中詳細介紹了擁塞控制的四個部分:
  慢啟動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fast retransmit)和快速恢復(fast recovery)

  擁塞控制演算法在 Linux 下有多種實現,比如 reno 演算法、vegas 演算法和 cubic 演算法等。它們或者部分或者全部實現了上述四個部分。

# 當前所使用的擁塞控制演算法:
/proc/sys/net/ipv4/tcp_congestion_control

 

2.2 UDP 協議(用戶數據報協議)

  工作在傳輸層
  提供不可靠的網路訪問
  非面向連接協議
  有限的錯誤檢查
  傳輸性能高
  無數據恢復特性
  更多關於 udp 的內核參數,可看 man 7 udp

  2.2.1 報文頭部

 

  2.2.2 Internet 層

 

2.3 ICMP 協議

  ICMP(Internet Control Message Protocol)Internet 控制報文協議。它是 TCP/IP 協議簇的一個子協議,用於在 IP 主機、路由器之間傳遞控制消息。控制消息是指網路通不通、主機是否可達、路由是否可用等網路本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。

# cat /proc/sys/net/ipv4/ip_default_ttl
64
# ping 192.168.129.142
PING 192.168.129.142 (192.168.129.142) 56(84) bytes of data.
64 bytes from 192.168.129.142: icmp_seq=1 ttl=64 time=4.85 ms

# ttl=64
# 距離目標的路由器數量,每經過一個路由器 64-1;作業系統不同 ttl 不同
ping www.baidu.com PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data. 64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=55 time=43.0 ms

 

2.4 Address Resolution Protocol(ARP 協議:地址解析協議)

  作用:把 Ip 地址轉換為 mac 地址

  ARP 第一次通訊要通過廣播,所以只在一個網段通訊。跨網段通訊需要路由器

  看地址明顯不在同一網段,所以要通過路由器介面的 IP 地址(網關),進而通訊。

  網關和你的地址一定在一個網段

route -n     # 或 ip neigh 查看網關

  ARP 允許手工綁定:防止廣播欺騙冒充網關

  反向 ARP:我的 MAC 是這個,誰能給我一個 IP

  Internet 層:
    IP PDU 報頭

 

 3、IP 地址

  它們可唯一標識 IP 網路中的每台設備
  每台主機(電腦、網路設備、外圍設備)必須具有唯一的地址
  IP 地址由兩部分組成:
    網路 ID:
      標識網路
      每個網段分配一個網路 ID
    主機 ID:
      標識單個主機
      由組織分配給各設備

  IP 地址分類:

 

  同一個網段:網路 ID 相同

  A 類:前 8 位網路 ID,後 24 位主機 ID

0-127.X.X.Z 1-126.X.X.Z
網路數=2^可變的網路 ID 位
主機數=2^主機 ID 位-2=2^24-210.0.0.0,表示 10 網路 和 10.255.255.255,表示廣播 除外)

  B 類:前 16 位網路 ID,後 16 位是主機 ID

128-191.X.Y.Z
網路數=2^14=16384
主機數=2^16-2=65534

  C 類:前 24 位網路 ID,後 8 位是主機 ID

192-223.X.Y.Z
網路數=2^21=2097152
主機數=2^8-2=254

  D 類:多播,組播

224-239.X.Y.Z

  E 類:保留

240-254.X.Y.Z

  後期不分類(五類):網路 ID,主機 ID 任意位
  表示主機 IP:CIDR 表示法(無類域間路由)
  IP/網路 ID 位數

  netmask:子網掩碼
  功能:確定網路 ID 位數
  32 位二進位,對應 IP 網路 ID 位為 1,對應 IP 中主機 ID 為 0

10.0.0.0/8      255.0.0.0
172.16.0.100/16 255.255.0.0
192,168,37,7/24 255.255.255.0

 

  判斷主機是否在同一網段:判斷網路 ID 是否相同,用自己的 IP 和自己的 netmask 相與,在用自己的 netmask 和對方 IP 相與,比較結果:
  網路 ID=IP 與運算 netmask

# 例:
A:10.0.0.123/24
B:10.0.1.200/24

10.0.0.123
255.255.255.0

00001010.00000000.00000000.01111011
11111111.11111111.11111111.00000000

與運算結果:00001010.00000000.00000000.00000000 即 10.0.0.0


10.0.1.200
255.255.255.0

00001010.00000000.00000001.00001000
11111111.11111111.11111111.00000000

與運算結果:00001010.00000000.00000001.00000000 即 10.0.1.0

所以,不在同一個網段

  公共地址:

 

  私有地址:

 

  特殊地址:

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.0239.255.255.255
組播地址,224.0.0.1 特指所有主機,224.0.0.2 特指所有路由器。224.0.0.5 指 OSPF路由器,地址多用於一些特定的程式以及多媒體程式

169.254.<.x
如果 Windows 主機使用了 DHCP 自動分配 IP 地址,而又無法從 DHCP 伺服器獲取地址,系統會為主機分配這樣地址

  可變長度子網掩碼:

  劃分子網:將大網路(主機多,主機 ID 多)分隔成多個小網路(主機少,主機 ID 少)
  原有的網路 ID 位變多,原有的主機 ID 變少,網路 ID 向主機 ID 借位

172.16.0 0000000.00000000/16
借一位變成兩個網路:
172.16.0 0000000.00000000/16  即:172.16.0.1~172.16.127.254
172.16.1 0000000.00000000/16  即:172.16.128.1~172.16.255.254

子網數
=2^網路ID向主機ID借的位數
例:中國移動:10.0.0.0/832 省,每個省分配獨立網路
1、每個省的子網路對應 netmask?
255.11111 000.0.0255.248.0.0/13

2、 每個省的子網路主機多少?
2^(32-13)-2=524286

3、 最小的子網路的網路 ID?
10.00000 000.010.0.0.0/13

4、 最大的子網路的 IP 範圍?
10.11111 000.0→IP 10.11111 000.0.1~10.11111 111.255.25410.248.0.1~10.255.255.2545、將第十個子網分配給河南省,再分 18 個子網給各個地級市使用
10.01001 000.00 000000.0

  合併子網:將多個子網合併成一個大網,也成超網,主機 ID 向網路 ID 借位

220.78.168.0   220.78.10101 000.0   220.78.10101 000.0
220.78.169.0   220.78.10101 001.0   220.78.168.0/21
220.78.170.0   220.78.10101 010.0
220.78.171.0   220.78.10101 011.0
220.78.172.0   220.78.10101 100.0
220.78.173.0   220.78.10101 101.0
220.78.174.0   220.78.10101 110.0
220.78.175.0   220.78.10101 111.0

 

4、配置網路

  跨網路通訊:路由

  路由分類:

    主機路由
    網路路由
    默認路由

  優先順序:精度越高,優先順序越高

  動態主機配置協議 DHCP

 

4.1 基本網路配置

  將 Linux 主機接入到網路,需要配置網路相關設置,一般包括如下內容:

  主機名
  IP/netmask(子網掩碼)
  路由:默認網關
  DNS 伺服器:
    主 DNS 伺服器
    次 DNS 伺服器
     第三 DNS 伺服器

  網路配置方式:

    靜態指定:

ifconfig,route,netstat
ip:object {link,addr,route},ss,tc
system-config-network-tui,setup    # 進入圖形修改網路設置配置文件

    動態分配:

DHCP:Dynamic Host Configuration Protocol
# ifconfig 命令
ifconfig                      # 默認顯示啟用網卡資訊
ifconfig eth1 down            # 禁用 eth1 網卡;up 啟用網卡,相當於數據鏈路層的 downifconfig -a     # 查看所有網卡
ifdown eth1                   # 相當於網路層的 down,ifconfig 能看到卻看不到地址,數據鏈路層通著,只是網路層地址丟了
ifconfig eth1 1.1.1.1/24      # 臨時配地址
ifconfig eth1:123 1.1.1.1/24  # 在原有地址臨時虛擬添加地址

  route 路由管理命令:

查看 route -n
添加 route add
刪除 route del … 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 182.168.0.0/24 gw 172.16.0.1 dev eth0

  網關:下一個路由器臨近我的介面的 ip,下一跳(next hop)

  路由表:

默認路由,網關: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
cat /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=eth0             # 設備名
NAME=eth0               # 標識
BOOTPROTO=dhcp          # dhcp:自動獲取地址;none 或 static:手工配置地址
IPADDR=192.168.12.3     # 手工配置地址
PREFIX=24               # 子網掩碼相當於:NETMASK=255.255.255.0
ONBOOT=yes              # 網卡是否禁用
GATEWAY=192.168.37.200  # 網關

cat /proc/sys/net/ipv4/ip_forward # 該內核參數改為 1,開啟內核轉發
traceroute [目標主機 IP] # 或 mtr [目標主機 IP]追蹤路由

位於中間的路由器不能加默認路由

  配置動態路由:

  通過守護進程獲取動態路由
    安裝 quagga 包
    支援多種路由協議:RIP、OSPF 和 BGP
    命令 vtysh
    RIP 協議:由經過的路由器少的路線生成路由記錄
    OSPF 協議:判斷頻寬生成路由記錄

4.2 網路配置和故障排錯

  netstat 命令:顯示網路連接

netstat -[t|u|w|l|a|n|e|p]
  -t tcp # 協議相關   -u udp # 協議相關   -w raw socket # 相關   -l # 處於監聽狀態**   -a # 所有狀態   -n # 以數字顯示 IP 和埠   -e # 擴展格式   -p # 顯示相關進程及 PID**
推薦使用 ss 命令代替 netstat 命令
常用組合:
  -tan -uan -unl
顯示路由表:route -n 等價於 netstat -nr
  -r 顯示內核路由表
  -n 數字格式
顯示介面統計數據:
  netstat -i
  netstat -I=IFACE
  ifocnfig -s eth0
watch -n1 netstat -Iens32    # watch -n1 一秒查看一次 netstat -l ens32 命令結果

  ip 命令:配置 Linux 網路屬性

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 addr 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 { link | addr | route } # 鏈路層、網路層、路由 ip addr add 1.1.1.1/24 dev ens34 # 添加地址,del 刪除地址 ip a a 3.3.3.3/24 dev ens34 label ens34:2 # 添加別名(a a:addr add) ip addr del 3.3.3.3/24 dev ens34 # 刪除 ip a flush dev ens34 # 將該網卡上的 Ip 資訊都刪了

  改網卡名:

先禁用網卡:
ip link set eth1 down
再更改網卡名稱:
ip link set eth1 name heiehi

  配置路由:

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 del TARGET
    顯示路由:ip route show|list
    清空路由表:ip route flush [dev IFACE] [via PREFIX]
        ip route flush dev eth0

例:
加路由:
ip route add 10.0.0.0/8 via 172.16.0.123

加默認路由:
ip route add default via 172.16.0.123

加 metric(走路由的費用)
ip route add default via 172.16.0.123 metric 200 # 相當於優先順序,路由優先走低的

  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=:sshorsport=:ssh)'


常見用法:
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 詳細資訊

常見組合:
ss -nt # 正處於連接狀態的 tcp
-tan, -tanl, -tanlp, -uan

  網路配置文件:

IP、MASK、GW、DNS 相關配置文件:
/etc/sysconfig/network-scripts/ifcfg-<name>

路由相關的配置文件:
/etc/sysconfig/network-scripts/route-<name>/etc/sysconfig/network-scripts/ifcfg-<name>

說明參考/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",YES 將允許 dhcp server 分配的 DNS 伺服器資訊直接覆蓋至/etc/resolv.conf 文件,NO 不允許修改 resolv.conf

網卡配置文件實例:

  DNS 伺服器:

  路由設置永久生效:

/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

  網卡別名永久有效:

vim ifcfg-ens34:2
DEVICE=ens34:2


對虛擬主機有用
將多個 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

  CentOS6 建議停掉 NetworkManager 服務

service NetworkManager stop
chkconfig NetworkManager off     # 下次開機不啟動

  網路介面配置-bonding

  將多塊網卡綁定同一 IP 地址對外提供服務,可以實現高可用或者負載均衡。直接給兩塊網卡設置同一 Ip 地址是不可以的。通過 bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的 MAC 地址。

  企業伺服器內置多塊網卡,CPU 很快、固態硬碟速度也快,相對來說網卡成為瓶頸,也為了網卡容錯,進而推進多網卡綁定。

  Bonding 工作模式:
  Mode 0(balance-rr)
  輪轉(Round-robin)策略:假設有三塊網卡,第一個數據包第一個網卡處理,第二個數據包第二個網卡處理…輪著來,網卡分擔流量,本模式提供負載均衡和容錯的能力。

  Mode 1(active-backup)
  活動-備份(主備)策略:主網卡工作,備網卡不工作,當主網卡出現故障時,備網卡工作。為了避免交換機發生混亂,此時綁定的 MAC 地址只有一個外部埠上可見。

  Mode 3(broadcast)
  廣播策略:在所有的 slave 介面上傳送所有的報文,提供容錯能力

  Active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要交換機以便整合鏈接。如:Cisco 交換機需要在模式 0/2 和 3 中使用 EnterChannel,但在模式 4 需要 LACP 和 EnterChannel。

  Bonding 配置

創建 bonding 設備的配置文件:
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= "miimon=100 mode=0"    # 監控間隔,100 毫秒
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

查看 bond0 狀態:
/proc/net/bonding/bond0

兩塊網卡都進行配置:

重啟網路服務

  CentOS7 網路屬性配置

   

 

Tags: