路由配置

第1章  靜態路由配置          

1.1  網路

通過介質把物體連接起來能夠互相通訊稱為網路。

1.1.1 網路的重要性

所有的系統都有網路!

我們的生活已經離不開網路。

運維生涯50%的生產故障都是網路故障!

1.1.2  網線  8芯   水晶頭反過來    

網線製作(線序):568A:綠白-1,綠-2,橙白-3,藍-4,藍白-5,橙-6,棕白-7,棕-8

                568B:橙白-1,橙-,綠白-3,藍-4,藍白-5,綠-6,棕白-7,棕-8。常用線序

4芯正常可用1236  一根網線正常可以帶兩台電腦

4芯額外供電   POE設備     反向供電箱—>305

網線的有線距離100米–>超過100米   加設備  HUB 交換機

1.2  如何通過網路實現多台主機之間的通訊

1.2.1  在兩台主機之間需要有傳輸介質(網線、光纖、無線等)

1.2.2  在兩台主機上面需要有網卡設備

    在發送資訊時:將二進位(數字訊號)資訊轉換為高低電壓(電訊號)   #調至過程

    在接收資訊時:將高低電壓(電訊號)資訊轉換為二進位數(數字訊號)  #解調過程

1.2.3  在進行數據傳輸之前,需要協商網路傳輸速率。

    網卡速度參數  100Mbps==100M bit 每秒==每秒鐘傳輸多少個bit(0或1)

    100000k==100000000 bit/s=1bit/xxns

    網路傳輸數據單位:比特  bit    1bit=1/8byte

    磁碟存儲數據單位:位元組  byte   1byte=8bit

1.2.4  光纖

多模光纖    傳輸距離近2公里

單模光纖    傳輸距離遠20公里

1.2.5  無線網路 4G  5G

1.2.6  電腦之間通訊需要硬體地址  網卡   唯一標識    出廠就是惟一的 MAC地址16進位

PS: 如果在公網環境或者區域網中MAC兩台PC手機平板相同 會出現一台電腦或者兩台電腦沒網路

PS:如果區域網內的MAC和路由器的MAC相同 整個區域網無法上網

1.2.7  電腦之間通訊還需要邏輯地址 IP地址 (可變)

  網路的傳輸單位

  網卡傳輸的速率  100Mbps==100M bit 每秒==每秒鐘傳輸多少個bit(0或1

我家買了一個100M 的頻寬 但是我DIAN測試沒有達到100M

100Mb  bit 1/8位元組

1Byte=8bit

磁碟的計算單位:

100Mbit=12.5MB

1.3  交換機 只負責數據轉發 沒有路由的功能 不能配置IP地址

1.3.1  在數據前面設置目標地址和源地址,目標地址和源地址用mac地址進行標識

      mac稱為物理地址,每塊網卡上都有的一個標識身份資訊的
      mac地址全球唯一,不能進行修改,mac地址用16進位標識    

1.3.2  在網路通訊初期,會利用廣播方式進行發送數據包,在通訊的過程,數據包的發送一定是有去有回的。

      在一個交換網路中,如果產生了大量廣播數據包時會產生廣播風暴,影響主機性能,這樣的問題稱為廣播風暴問題      
#解決廣播風暴問題思路:
減少廣播產生數量,將一個大的交換網路切割為幾個小的交換網路(區域網,廣播域)

1.3.3  交換機的種類

    傻瓜交換機(TP-link/Dlink/水星...)
    程式控制交換機(存儲程式控制交換機,配置管理,思科、華為、華三)

1.4  路由器 進行路由的選擇 隔離廣播域 可以配置IP地址

IP地址由兩部分組成: 交換網路標識資訊+主機地址標識資訊===網段地址+主機地址

192.168.1     網段  網路標識

63         主機地址

1.4.1  需要有身份標識資訊:ip地址

  邏輯地址(可以改變的地址/???) 利用10進位方式進行顯示

   IP地址由兩部分組成: 交換網路標識資訊+主機地址標識資訊===網段地址+主機地址

   內網卡—交換機   192.168.11.0/24(192.168.11.1~192.168.11.254)

   外網卡—運營商   122.71.227.79(鐵通)

1.4.2   查公網ip的方法

Windows打開瀏覽器,訪問百度,搜IP即可

linux:curl ifconfig.me

高級路由器還有上網行為管理器和防火牆功能

論壇:鴻鵠論壇(網路工程師)

1.4.3  路由實現數據傳輸通訊時,會根據路由表資訊進行數據包路由

   實現不同網段之間通訊需要經過一條必經之路,這條路稱為網關

1.5  路由器靜態路由配置

路由器維護者路由表資訊

路由器1:

網路標識1       IP地址 網關

192.168.1        1.254

192.168.2      2.254

路由器1配置:

Router>     # 命令提示符 用戶模式 只能操作部分命令
Router>enable   # 進入特權模式 在特權模式查看大部分的配置 ? 查看所有當前模式可以執行命令
Router#show ip route  # 查看路由表資訊
路由器配置介面IP地址 從特權模式 進入到配置模式 簡寫config t
Router#configure terminal   (conf t)
Router(config)# # 配置模式

1.5.1  第一步:進入路由器的網卡  PS: exit 退出到上一個模式

Router(config)#interface gigabitEthernet 0/0

Router(config-if)# # 進入到了g0/0

outer(config-if)#ip ad

1.5.2  第二步: 配置IP地址和子網掩碼

Router(config-if)#ip address ?

A.B.C.D  IP address

dhcp     IP Address negotiated via DHCP

Router(config-if)#ip address 192.168.1.254 ?

A.B.C.D  IP subnet mask

Router(config-if)#ip address 192.168.1.254 255.255.255.0 ?

<cr>

Router(config-if)#ip address 192.168.1.254 255.255.255.0 

1.5.3  第三步: 啟動網卡

Router(config)#interface gigabitEthernet 0/0

Router(config-if)#no

Router(config-if)#no shu

Router(config-if)#no shutdown 

1.5.4  第四步: 查看配置

在特權模式下查看      

Router#show interfaces gigabitEthernet 0/0

在特權模式下pingIP地址  出現.代表不通 出現!代表可以通訊

Router#ping 192.168.1.1
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/1 ms
Router(config)#interface g0/1
Router(config-if)#ip add
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shu
Router(config-if)#no shutdown
Router(config-if)#
%LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to up

修改路由器的提示符名稱

Router(config)#hostname R3
R3(config)#
R3(config)#
R3(config)#

————————————–

路由器

       家用路由器:  TP-Link 騰達 小米 華為 穿牆王…

       企業路由器:  CISCO 華為 銳捷 中興 H3C 瑞斯康達…

路由器維護者路由表資訊

       路由器R1:

   網路標識1          IP地址 網關

   192.168.1          1.254   G0/0     ----> pc---IP 192.168.1.1----4.254通訊

   192.168.2        2.254   G0/2

S  192.168.4.0     via 192.168.2.2

路由器R2

192.168.2                 2.2    G0/0
192.168.3                 3.1    G0/1
S   192.168.4.0       via 192.168.3.2
S   192.168.1.0       via 192.168.2.1

    路由器R3

192.168.3         3.2     G0/0
192.168.4        4.254    G0/1     ------> 1.1 找到了 4.1 給1.1進行回復
S    192.168.1.0      via 192.168.3.1          

       數據包不知道下一步該往哪裡走? 我們手動給它指定方向道路 稱為靜態路由

       靜態路由配置命令格式:

       ip route add 去哪裡 指定哪裡走

       網路中的稱呼: 在做回來的路由配置時候 稱為路由回指(指定下個介面的IP地址,自身的不用指定)

       配置靜態路由:

       R1配置  下個介面的IP地址 稱為 下一跳

   R1(config)#ip route 192.168.4.0 255.255.255.0 192.168.2.2

       R2配置

  R2(config)#ip route 192.168.4.0 255.255.255.0 192.168.3.2
  R2(config)#ip route 192.168.1.0 255.255.255.0 192.168.2.1

       R3配置

R3(config)#ip route 192.168.1.0 255.255.255.0 192.168.3.1
192.168.1.0 255.255.255.0  可用IP地址1-254  我指定的靜態路由可以和區域網192.168.1.1-192.168.1.254 任意的主機通訊

       取消靜態路由:

 no ip route 192.168.1.0 255.255.255.0 192.168.3.1 

1.6  動態路由:

       rip ospf BGP EIGRP(CISCO) ISIS

       路由器1配置:

Router>     # 命令提示符 用戶模式 只能操作部分命令
Router>enable   # 進入特權模式在特權模式查看大部分的配置  ? 查看所有當前模式可以執行命令
Router#show ip route  # 查看路由表資訊
路由器配置介面IP地址 從特權模式 進入到配置模式 簡寫config t
Router#configure terminal
Router(config)#    # 配置模式

1.6.1  第一步:進入路由器的網卡  PS: exit 退出到上一個模式

Router(config)#interface gigabitEthernet 0/0
Router(config-if)#    # 進入到了g0/0
outer(config-if)#ip add

1.6.2  第二步: 配置IP地址和子網掩碼

Router(config-if)#ip address ?
A.B.C.D  IP address
dhcp     IP Address negotiated via DHCP
Router(config-if)#ip address 192.168.1.254 ?
A.B.C.D  IP subnet mask
Router(config-if)#ip address 192.168.1.254 255.255.255.0 ?
<cr>
Router(config-if)#ip address 192.168.1.254 255.255.255.0 

1.6.3      第三步: 啟動網卡

Router(config)#interface gigabitEthernet 0/0
Router(config-if)#no
Router(config-if)#no shu
Router(config-if)#no shutdown 

1.6.4      第四步: 查看配置

       在特權模式下查看

Router#show interfaces gigabitEthernet 0/0

 在特權模式下pingIP地址  出現. 代表不通 出現!代表可以通訊

    Router#ping 192.168.1.1
   .!!!!
   Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/1 ms
   Router(config)#interface g0/1
   Router(config-if)#ip add
   Router(config-if)#ip address 192.168.2.1 255.255.255.0
   Router(config-if)#no shu
   Router(config-if)#no shutdown
   Router(config-if)#
   %LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to up

   ————————————————————————–

   修改路由器的提示符名稱

   Router(config)#hostname R3
   R3(config)# 

1.7 路由器的分類

          家用路由器:  TP-Link 騰達 小米 華為 穿牆王…

        企業路由器:  CISCO 華為 銳捷 中興 H3C 瑞斯康達…

       動態路由: 動態的自動的去學習路由

RIP OSPF BGP EIGRP(CISCO) ISIS            

       初始路由表資訊:

       路由器R1: 

       網路標識1           IP地址 網關           

192.168.1           1.254   G0/0          
192.168.2        2.254   G0/2
R    192.168.3.0/24         via 192.168.2.2
R    192.168.4.0/24 [120/2]   via 192.168.2.2 

 路由器R2        學習(RIP)    

192.168.2       2.2    G0/0            
192.168.3       3.1    G0/1        
R    192.168.1.0/24       via 192.168.2.1
R    192.168.4.0/24 [120/1] via 192.168.3.2, 00:00:09

   路由器R3      學習(RIP)      

192.168.3       3.2   G0/0             
192.168.4       4.254  G0/1          
R    192.168.1.0/24 [120/2] via 192.168.3.1
R    192.168.2.0/24 [120/1] via 192.168.3.1    

       配置RIP動態協議 最短路徑優先 最大隻支援16 

       1)取消靜態路由

no ip route 192.168.4.0 255.255.255.0 192.168.3.2
no ip route 192.168.1.0 255.255.255.0 192.168.2.1   
no ip route 192.168.2.0 255.255.255.0 192.168.3.1
no ip route 192.168.1.254 255.255.255.255 192.168.3.1
no ip route 192.168.1.1 255.255.255.255 192.168.3.1 

       2) 配置RIP協議

 

   R1:
   R1(config)#route rip
   R1(config-router)#network 192.168.1.0
   R1(config-router)#network 192.168.2.0   
   R2:
   R2(config)#route rip
   R2(config-router)#network 192.168.2.0
   R2(config-router)#network 192.168.3.0
   R3:
   R3(config)#route rip
   R3(config-router)#network 192.168.3.0
   R3(config-router)#network 192.168.4.0
   OSPF-->BGP--> 路由重發布 案例 運營商網路快取案例

第2章 網路架構

2.1  網路層次結構

核心層:主要部署路由器設備,用於連接外網線路,還要具備冗餘能力(安全備份)

匯聚層:主要部署三層交換設備,用於相應安全訪問控制 進行鏈路匯聚

接入層:主要部署二層交換設備,用於終端設備接入.

                                 基本網路層次劃分示意圖

 

2.2  網路類型

區域網:本地私有的一個網路範圍。規模較大的區域網,也會稱為園區網。

城域網:網路的覆蓋面積達到了一個城市,就可以稱為城域網。

廣域網:覆蓋面積達到了全國或全球,就稱為廣域網,全球最大的廣域網就是Internet互聯網。

2.3  網路層次模型(OSI7模型)

OSI是Open System Interconnection的縮寫,意為開放式系統互聯。國際標準化組織(ISO)制定了OSI模型,該模型定義了不同電腦互聯的標準,是設計和描述電腦網路通訊的基本框架。OSI模型把網路通訊的工作分為7層,分別是物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。

OSI7層模型(公司的組織架構)

    層次模型結構:由上置下

   管理部   公司決策                          應用層

   行政部   傳達領導要求 組織活動           表示層

   財務部   發工資 公司賬目                   會話層

   市場部   推廣宣傳                          傳輸層

   銷售部   銷售產品                          網路層

   物流部   運輸產品                         數據鏈路層

   倉儲部   保存看管物品                      物理層

   每一個層級對應每一個層級,不能跨溝通

   層次模型結構: 由上至下

2.4  OSI七層模型功能介紹

2.5 OSI七層模型詳解

2.5.1  應用層

 

作用: 主要就是提供應用程式可以接入網路介面,並根據程式的不同對應不同的介面協議。

2.5.2  表示層

2.5.3  會話層

2.5.4  傳輸層

負責網路中端到端的連接(TCP、UDP)

2.5.5  網路層

 

 

2.5.6數據鏈路層

 

 

2.5.7  物理層

Layer1物理層:物理層標準規定了訊號、連接器和電纜要求、介面類型、線纜類型、設備(集線器hub)。

單工:(廣播電台)通訊時候。只有一方作為發送方,另一方作為接受方.

半雙工:(對講機) 通訊的某一時刻,只有一方作為發送方,另一方作為接受方,通訊時刻發生轉變,發送方可以變為接收方,接收方可以變為發送方.              

全雙工:(電話) 同一時刻,雙方皆可以是發送方,又可以是接收方.

2.6  數據包封裝與解封裝

2.6.1  封裝

封裝過程:由上至下進行封裝

             應用層、表示層、會話層  PDU 數據

                傳輸層:分段 TCP協議

                網路層:打包 TCP協議+IP地址

                數據鏈路層:成幀  TCP協議+IP地址+MAC地址

                物理層:位  數據成為比特

2.6.2  解封裝

拆包過程:由下至上進行拆包

物理層:位  比特

數據鏈路層:查看MAC地址

網路層:查看IP地址

傳輸層:查看TCP協議

前三層:數據內容

不知名埠:1024以上的埠稱為不知名埠

cat /proc/sys/net/ipv4/ip_local_port_range

2.7  TCP/IP模型(4層模型)

2.7.1  OSI7層模型與TCP/IP模型(DOD)對應關係

2.7.2 TCP/IP 協議簇相關協議匯總

    TCP協議: 傳輸控制協議  — 面向連接的網路協議

在線發送文件==面向連接

發送文件 –> 對端點擊接收

優點: 數據傳輸可靠性高

缺點: 數據傳輸效率低

       UDP協議: 用戶報文協議  — 無連接的網路協議

 離線發送文件==無連接

 發送文件 –> 直接發送了

優點: 數據傳輸效率高

 缺點: 數據傳輸可靠性低

QQ離線傳輸文件/在線傳輸文件: TCP協議

在線傳輸

PC 傳輸文件 – 交換機 – 檢查目標QQ主機是否在區域網中

路由器 – 目標主機

離線傳輸

PC 傳輸文件 – 互聯網 – QQ公司伺服器(臨時存儲伺服器) — 對端QQ是否登錄在線

2.7.3 應用層協議介紹

FTP         21          明文協議,文件傳輸協議,基於TCP

TFTP        69          簡單文件傳輸協議,基於UDP

SSH         22          安全外殼協議,遠程連接,加密

Telnet      23          明文協議,遠程連接

SNMP        161/162     簡單網路管理協議,基於UDP

SMTP       25        簡單郵件傳輸協議,基於TCP

HTTP        80        超文本傳輸協議

HTTPS       443         超文本傳輸安全協議

DHCP        67/68/546   動態主機設置協議,C(67),S(68),546(V6)

DNS         53

2.8  DHCP原理圖

DHCP 動態獲取IP地址

      伺服器是否需要DHCP功能?

      訪問網站—>訪問IP地址—>MAC地址

      域名—>IP進行綁定

      區域網中使用DHCP服務

ICMP(在防火牆中禁止了ICMP協議 其他所有的用戶 都無法ping通  禁ping)

禁traceroute

APR解析: 地址解析協議 把IP地址解析成MAC地址

DNS稱為域名系統,在網站運行中起到了至關重要的作用,主要作用是負責把網站域名解析為對應的IP地址。

一般域名提供商,提供的dns伺服器,都是走udp53埠的。

2.9  DNS解析過程

2.9.1  域名解析

舉個例子,//www.baidu.com,這個其實並不是域名,其中https是指協議,去掉https後www.baidu.com.(注意最後面有一個點號)才是真正的域名。

每個域名的最後面都有一個點號 “.” 表示根域名,為了方便在實際使用的時候被省略了。

根域名的下一級就是頂級域名了,.com 也就是頂級域名,常見的頂級域名後綴有.com、.cn、.net、.org 等,這些都是固定的,用戶不能自己修改,只能選擇。

頂級域名的下一級又是權威域名,如baidu.com中的.baidu,這個權威域名就是我們自己可註冊的域名。

頂級域名下就是主機名了,www是指主機名,這個是我們可以自己定義的,通常在http伺服器如nginx中可以修改。

 

 

下面就還以www.baidu,com這個網址來分析一下dns的解析過程。

當瀏覽器拿到輸入的www.baidu.com後,首先會去瀏覽器的dns快取中去查詢是否有對應記錄,如果查詢到記錄就可以直接返回ip地址,完成解析。

如果瀏覽器沒有快取,那就再去查詢作業系統的快取,同樣的,如果查詢到記錄就可以直接返回ip地址,完成解析。

如果作業系統也沒有快取,那就再去查看本地host文件,Windows下host文件一般位於 “C:\Windows\System32\drivers\etc”。

近幾年網上流傳的通過修改本地host文件來避免雙11女友剁手的段子,其實就是將淘寶的支付介面解析到錯誤的ip地址,從而導致支付不成功。

如果本地host文件也沒有相應記錄,那就需要求助於本地dns伺服器了,所以應該要知道本地dns的ip地址。

本地dns伺服器ip地址一般是由本地網路服務商如移動、電信提供,一般是通過DHCP自動分配,當然你也可以自己手動配置。目前用的比較多的是Google提供的公用dns 8.8.8.8和中國的公用dns 114.114.114.114及阿里的223.5.5.5。

你之前可能有遇到過電腦可以正常上QQ但是就是不能打開網頁的怪現象,這種情況大多數可能就是dns域名解析出問題了,你可以嘗試手動把dns設置為公用dns。

找到本地dns後,它也會先去查詢一遍它自己的快取,如果有記錄就返回,如果沒有記錄,它將開始要去我們前面提到的根域名伺服器查詢了。注意由於根域名伺服器ip地址一般都是固定的,所以本地dns伺服器一般都內置了根域名伺服器ip地址。//www.uedbox.com/post/50977/

目前全球一共有13個根域名伺服器(這裡並不是指13台伺服器,是指13個ip地址,按字母a-m編號),為了能更高效完成全球所有域名的解析請求,根域名伺服器本身並不會直接去解析域名,而是會把不同的解析請求分配給下面的其他伺服器去完成,下面是dns域名系統的樹狀結構圖。

 

 

注意dns域名伺服器一般分三種,分別是根域名伺服器(.)、頂級域名伺服器(.com)、權威域名服務(.baidu.com) 。

當根域名接收到本地dns的解析請求後,發現是後綴是.com,於是就把負責.com的頂級域名伺服器ip地址返給本地dns。

本地dns拿著返回的ip地址再去找到對應的頂級域名伺服器,頂級域名又把負責該域名的權威伺服器ip返回去。

本地dns又拿著ip去找對應的權威伺服器,權威伺服器最終把對應的主機ip的解析記錄(俗稱A記錄)返回給本地dns。

本地dns會將解析後的ip地址資訊進行快取,快取好將A記錄資訊返回給客戶端。

客戶端收到本地dns響應的A記錄資訊,會將A記錄快取到本地,然後使用解析後的ip地址訪問www.baidu.com。

至此就完成了域名解析的全過程。

下面用一張圖來展示上面迭代查詢的過程。

解析期間涉及到兩個特殊查詢:

客戶端—本地dns快取:遞歸查詢

本地dns伺服器—根域名伺服器  頂級域名伺服器  權威域名伺服器:迭代查詢

所謂遞歸查詢過程就是 「查詢的遞交者」 更替, 而迭代查詢過程則是 「查詢的遞交者」不變。

A記錄:

從域名到IP的解析過程,被稱為A記錄;www.baidu.com—1.1.1.1

獲取A記錄命令方法:

1) dig www.baidu.com

    dig @223.5.5.5 www.baidu.com +trace   —顯示完整DNS解析過程

2) nslookup www.baidu.com

3) host www.baidu.com

4) ping www.baidu.com

 

 

2.10  主機到主機層協議介紹

TCP: 傳輸控制協議,是一種面向連接的、可靠的、基於位元組流的傳輸層通訊協議。

特點:面向連接,可靠,傳輸效率低.

應用場景:web瀏覽器,電子郵件,文件傳輸程式.

UDP: 用戶數據報協議,屬於無連接的傳輸協議.   

特點:無連接、不可靠、快速傳輸.

應用場景:域名系統(DNS),視屏流,IP語音(VOIP). 

TCP UDP協議埠號範圍 1 – 65535 (可以的),真正埠號總數為2的16次方=65536   

面向連接:是指通訊雙方在通訊時,要事先建立一條通訊線路,其有三個過程:建立連接、使用連接和釋放連接。

面向無連接:是指通訊雙方不需要事先建立一條通訊線路,而是把每個帶有目的地址的包(報文分組)送到線路上,由系統自主選定路線進行傳輸。

2.11  控制欄位介紹

ACK:表示確認控制欄位,確認數據是否接收到.    

SYN:表示請求建立連接欄位,和主機建立連接時使用.   

FIN:表示請求斷開連接欄位,和主機斷開連接時使用.   

PSH: 表示有DATA數據傳輸,PSH為1表示的是有真正的TCP數據包內容被傳遞

RST: 表示連接重置。一般是在FIN之後才會出現為1的情況,表示的是連接重置。

seq序列號:將大的數據進行拆分後標記序列資訊,便於接收方將拆分後的數據資訊進行組裝,在原有序列號基礎上+1進行回復,告知發送方下次再給我發送的數據是什麼.

2.12  TCP三次握手

TCP是面向連接的,無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。

剛開始, 客戶端和伺服器都處於CLOSED狀態.

此時, 客戶端向伺服器主動發出連接請求, 伺服器被動接受連接請求.

1. TCP伺服器進程先創建傳輸控制塊TCB, 時刻準備接受客戶端進程的連接請求, 此時伺服器就進入了LISTEN(監聽)狀態.

2. TCP客戶端進程也是先創建傳輸hu控制塊TCB, 然後向伺服器發出連接請求報文,此時報文首部中的同步標誌位SYN=1, 同時選擇一個初始序列號seq = x, 此時TCP客戶端進程進入了SYN-SENT(同步已發送狀態)狀態。TCP規定, SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個序號。

3. TCP伺服器收到請求報文後, 如果同意連接, 則發出確認報文。確認報文中的ACK=1, SYN=1, 確認序號是x + 1, 同時也要為自己初始化一個序列號seq = y, 此時TCP伺服器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據, 但是同樣要消耗一個序號。

4. TCP客戶端進程收到確認後還要向伺服器給出確認。確認報文的ACK=1,確認序號是y + 1,自己的序列號是x + 1。

5. 此時TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態。當伺服器收到客戶端的確認後也進入ESTABLISHED狀態,此後雙方就可以開始通訊了。

舉個例子:

TCP三次握手好比在一個夜高風黑的夜晚,你一個人在小區里散步,不遠處看見小區里的一位漂亮妹子迎面而來,但是因為路燈有點暗等原因不能100%確認,所以要通過招手的方式來確定對方是否認識自己。

你首先向妹子招手(syn),妹子看到你向自己招手後,向你點了點頭擠出了一個微笑(ack)。同時妹子也向你招了招手(syn),你看到妹子向自己招手後知道對方是在尋求自己的確認,於是也點了點頭擠出了微笑(ack)。

於是兩人加快步伐,走到了一起。

我們來回顧一下,這個過程中總共有四個動作,

你招手

妹子點頭微笑

妹子招手

你點頭微笑

其中妹子連續進行了兩個動作,先是點頭微笑(回復對方),然後再次招手(尋求確認),實際上我們可以將這兩個動作合成一個動作,招手的同時點頭和微笑(syn+ack)。於是這四個動作就簡化成了三個動作。

你招手

妹子點頭微笑並招手

你點頭微笑

這就是三次握手的本質,中間的一次動作是兩個動作的合併。通過這個案例,不知你對TCP三次握手,有沒有進一步的理解

 

2.13  TCP四次揮手

數據傳輸完畢後,雙方都可以釋放連接.

此時客戶端和伺服器都是處於ESTABLISHED狀態,然後客戶端主動斷開連接,伺服器被動斷開連接.

1. 客戶端進程發出連接釋放報文,並且停止發送數據。

釋放數據報文首部,FIN=1,其序列號為seq = u(等於前面已經傳送過來的數據的最後一個位元組的序號加1),此時客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。

2. 伺服器收到連接釋放報文,發出確認報文,ACK=1,確認序號為 u + 1,並且帶上自己的序列號seq = v,此時服務端就進入了CLOSE-WAIT(關閉等待)狀態。

TCP伺服器通知高層的應用進程,客戶端向伺服器請求了斷開連接,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是伺服器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。

3. 客戶端收到伺服器的確認請求後,此時客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待伺服器發送連接釋放報文(在這之前還需要接受伺服器發送的最終數據)。

4. 伺服器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,確認序號為v + 1,由於在半關閉狀態,伺服器很可能又發送了一些數據,假定此時的序列號為seq = w,此時伺服器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。

5. 客戶端收到伺服器的連接釋放報文後,必須發出確認,ACK=1,確認序號為w + 1,而自己的序列號是u + 1,此時客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。

6. 伺服器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,伺服器結束TCP連接的時間要比客戶端早一些。

小知識點:在網路傳輸層,tcp模組中有一個tcb(傳輸控制模組,transmitcontrolblock),它用於記錄tcp協議運行過程中的變數。對於有多個連接的tcp,每個連接都有一個tcb。tcb結構的定義包括這個連接使用的源埠、目的埠、目的ip、序號、應答序號、對方窗口大小、己方窗口大小、tcp狀態、top輸入/輸出隊列、應用層輸出隊列、tcp的重傳有關變數。

2.13.1 TCP四次揮手的原因

那四次分手又是為何呢?TCP協議是一種面向連接的、可靠的、基於位元組流的傳輸層通訊協議。TCP是全雙工模式,這就意味著,當主機1發出FIN報文段時,只是表示主機1已經沒有數據要發送了,主機1告訴主機2,它的數據已經全部發送完畢了;但是,這個時候主機1還是可以接受來自主機2的數據;當主機2返回ACK報文段時,表示它已經知道主機1沒有數據發送了,但是主機2還是可以發送數據到主機1的;當主機2也發送了FIN報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,主機1收到主機2的FIN報文段時,回復ACK,表示知道主機2也沒有數據傳輸了,之後彼此就會愉快的中斷這次TCP連接。

2.13.2  TIME_WAIT狀態還需要等2*MSL秒之後才能返回到CLOSED狀態的原因

因為雖然雙方都同意關閉連接了,而且握手的4個報文也都發送完畢,按理可以直接回到CLOSED狀態(就好比從SYN_SENT狀態到ESTABLISH狀態那樣),但是我們必須假想網路是不可靠的,你無法保證你最後發送的ACK報文一定會被對方收到,就是說對方處於LAST_ACK狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發可能丟失的ACK報文。

2.14  TCP協議的十一種狀態集轉換

2.15  TCP十一種狀態集表示含義

各個狀態的意義如下:

CLOSED:  初始狀態,表示TCP連接是「關閉著的」或「未打開的」。 

LISTEN:  表示伺服器端的某個SOCKET處於監聽狀態,可以接受客戶端的連接。

SYN_RCVD:表示伺服器接收到了來自客戶端請求連接的SYN報文。在正常情況下,這個狀態是伺服器端的SOCKET在建立TCP連接時的三次握手會話過程中的一個中間狀態,很短暫,基本上用netstat很難看到這種狀態,除非故意寫一個監測程式,將三次TCP握手過程中最後一個ACK報文不予發送。當TCP連接處於此狀態時,再收到客戶端的ACK報文,它就會進入到ESTABLISHED狀態。

SYN_SENT :這個狀態與SYN_RCVD狀態相呼應,當客戶端SOCKET執行connect()進行連接時,它首先發送SYN報文,然後隨即進入到SYN_SENT狀態,並等待服務端的發送三次握手中的第2個報文。SYN_SENT狀態表示客戶端已發送SYN報文。

ESTABLISHED :表示TCP連接已經成功建立。

FIN_WAIT_1:這個狀態得好好解釋一下,其實FIN_WAIT_1和FIN_WAIT_2兩種狀態的真正含義都是表示等待對方的FIN報文。而這兩種狀態的區別是:FIN_WAIT_1狀態實際上是當SOCKET在ESTABLISHED狀態時,它想主動關閉連接,向對方發送了FIN報文,此時該SOCKET進入到FIN_WAIT_1狀態。而當對方回應ACK報文後,則進入到FIN_WAIT_2狀態。當然在實際的正常情況下,無論對方處於任何種情況下,都應該馬上回應ACK報文,所以FIN_WAIT_1狀態一般是比較難見到的,而FIN_WAIT_2狀態有時仍可以用netstat看到。

FIN_WAIT_2 :上面已經解釋了這種狀態的由來,實際上FIN_WAIT_2狀態下的SOCKET表示半連接,即有一方調用close()主動要求關閉連接。注意:FIN_WAIT_2是沒有超時的(不像TIME_WAIT狀態),這種狀態下如果對方不關閉(不配合完成4次揮手過程),那這個FIN_WAIT_2狀態將一直保持到系統重啟,越來越多的FIN_WAIT_2狀態會導致內核崩潰。

TIME_WAIT:表示收到了對方的FIN報文,並發送出了ACK報文。TIME_WAIT狀態下的TCP連接會等待2*MSL(Max Segment Lifetime,最大分段生存期,指一個TCP報文在Internet上的最長生存時間。每個具體的TCP協議實現都必須選擇一個確定的MSL值,RFC 1122建議是2分鐘,但BSD傳統實現採用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本機的這個值),然後即可回到CLOSED可用狀態了。如果FIN_WAIT_1狀態下,收到了對方同時帶FIN標誌和ACK標誌的報文時,可以直接進入到TIME_WAIT狀態,而無須經過FIN_WAIT_2狀態。(這種情況應該就是四次揮手變成三次揮手的那種情況)

CLOSING :這種狀態在實際情況中應該很少見,屬於一種比較罕見的例外狀態。正常情況下,當一方發送FIN報文後,按理來說是應該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文。但是CLOSING狀態表示一方發送FIN報文後,並沒有收到對方的ACK報文,反而卻也收到了對方的FIN報文。什麼情況下會出現此種情況呢?那就是當雙方几乎在同時close()一個SOCKET的話,就出現了雙方同時發送FIN報文的情況,這是就會出現CLOSING狀態,表示雙方都正在關閉SOCKET連接。

CLOSE_WAIT:表示正在等待關閉。怎麼理解呢?當對方close()一個SOCKET後發送FIN報文給自己,你的系統毫無疑問地將會回應一個ACK報文給對方,此時TCP連接則進入到CLOSE_WAIT狀態。接下來呢,你需要檢查自己是否還有數據要發送給對方,如果沒有的話,那你也就可以close()這個SOCKET並發送FIN報文給對方,即關閉自己到對方這個方向的連接。有數據的話則看程式的策略,繼續發送或丟棄。簡單地說,當你處於CLOSE_WAIT狀態下,需要完成的事情是等待你去關閉連接。

LAST_ACK :當被動關閉的一方在發送FIN報文後,等待對方的ACK報文的時候,就處於LAST_ACK狀態。當收到對方的ACK報文後,也就可以進入到CLOSED可用狀態了。

第3章  網際網路層協議介紹

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

RARP  反向地址轉換協議

ARP   地址解析協議,是根據IP地址獲取物理地址的一個TCP/IP協議。作用:有效的避免廣播風暴的產生

動態ARP:自動完善ARP表資訊,會定時更新ARP條目,自動更新ARP表時會消耗伺服器性能,適用於主機更換頻繁網路。

靜態ARP:手工配置ARP表資訊,不會實時更新ARP條目,節省伺服器性能,適用於主機更換不頻繁網路。

第4章 IP地址

4.1  IP地址基本概念

IP地址(Internet Protocol Address)是指互聯網協議地址,又譯為網際協議地址。

IP地址在網路層將不同的物理網路地址統一到了全球唯一的IP地址上(屏蔽物理網路差異),是唯一標識互聯網上電腦的邏輯地址(相當於手機號碼,可以通過唯一的手機號碼找到手機),所以IP地址也被稱為互聯網地址(可見其重要性)。

4.2  IP地址格式

我們目前常用的IPv4中規定,IP地址長度為32位二進位,在表示時,一般將32位地址拆分為4個8位二進位,再轉為4個十進位數表示,每個數字之間用點隔開,如127.0.0.1(localhost),這種描述方式被稱為「點-數表示法」。

IP地址層次:分為網路號和主機號兩個層次。網路號表示主機所屬網路,主機號表示主機本身。網路號與主機號的位數與IP地址分類有關。

4.3  IP地址分配

IP地址分配的基本原則是:要為同一網路(子網、網段)內不同主機分配相同的網路號,不同的主機號。

4.4  IP地址類型

#公有地址

公有地址(Public address)由Inter NIC(Internet Network Information Center網際網路資訊中心)負責。這些IP地址分配給註冊並向Inter NIC提出申請的組織機構。通過它直接訪問網際網路。全球唯一,不能出現重複.

#私有地址

私有地址(Private address)屬於非註冊地址,專門為組織機構內部使用。緩解了地址枯竭 是可以重複使用的(不同區域網內)

#以下列出留用的內部私有地址

   A類 10.0.0.0–10.255.255.255

   B類 172.16.0.0–172.31.255.255

   C類 192.168.0.0–192.168.255.255

需要實現配置私網地址的伺服器可以訪問外網(互聯網

NAT — 網路地址轉換技術(化妝),將私網地址轉換為公網地址

4.5  特殊的IP地址

1.每一個位元組都為0的地址(「0.0.0.0」)對應於當前主機;

2.IP地址中的每一個位元組都為1的IP地址(「255.255.255.255」)是當前子網的廣播地址;

3.IP地址中凡是以「11110」開頭的E類IP地址都保留用於將來和實驗使用。

4.IP地址中不能以十進位「127」作為開頭,該類地址中數字127.0.0.1到127.255.255.255用於迴路測試,如:127.0.0.1可以代表本機IP地址,用「//127.0.0.1」就可以測試本機中配置的Web伺服器。

5.169.254.0.0~169.254.255.255,是開啟了dhcp服務的設備但又無法獲取到dhcp的會隨機使用這個網段的ip

第5章  子網掩碼

子網掩碼又叫網路掩碼、地址掩碼

上面我們說到IP地址分為網路號與主機號,但是路由如何區分網路號與主機號呢?就需要通過子網掩碼。子網掩碼必須與IP地址結合使用,A、B、C類的子網掩碼分別為255.0.0.0,255.255.0.0與255.255.255.0(網路號位元組為255,主機號位元組為0)。

也就是說給你一個IP地址,那麼怎麼知道它的網路號和主機號各是多少位呢?

如果不指定,就不知道哪些位是網路號、哪些是主機號,這就需要通過子網掩碼來實現

子網掩碼的重要作用:就是將某個IP地址劃分成網路地址和主機地址兩部分。

子網掩碼的位數就是網路的位數。

A類網路的網路位數是8位,子網掩碼就是255.0.0.0,

B類網路的網路位數是16位,子網掩碼是255.255.0.0,

C類是24位,255.255.255.0。

5.1  不同子網下的主機能否直接通訊(是否在同一網路下/段下)

假設兩個IP地址分別是172.20.0.18和172.20.1.16,子網掩碼都是255.255.255.0。

我們可以知道兩者的網路標識分別是172.20.0和172.20.1,無法直接通訊,也就無法PING通。要想能相互通訊,需要將子網掩碼改成255.255.0.0

5.2  如何理解172.20.1.0/18

為什麼要子網劃分

一個大的地址範圍區域,你不進行劃分的時候,會造成地址浪費

一個大的地址範圍區域,可能會產生大量廣播風暴,影響主機性能

一個大的地址訪問區域,可能會造成網關路由器負載過高

將一個大的網段切割成一個一個小的區域網段,就稱為子網劃分

一個網段中可以有多少個地址=2的n次方-2 n表示的就是這個網段中有多少個主機位

-2 表示網路地址不能用  表示廣播地址不能用

一個區域網中的地址在使用時要預留一個作為網關地址

5.3  如何理解172.20.1.0/26

上文中的26代表主機ID的掩碼地址長度,從前往後有26位,即子網掩碼的地址是255.255.255.192。

子網掩碼還可以用來將網路劃分為更小的子網,將IP的兩極結構擴充成三級結構,節約地址空間,減輕路由器負擔。

子網掩碼的劃分

如果要將一個網路劃分為多個子網,如何確定子網掩碼?步驟如下:

第一步:將要劃分的子網數目轉換為2的m次方。如果不是恰好是2的多少次方,則按照取大原則。

第二步:將上一步確定的冪m按照高序佔用主機地址前m位,再轉化為十進位。如m為3,表示主機位中有3位被劃分為網路標識號佔用,因網路標識號都為1,故如是C類地址,主機號對應的位元組變為11100000,轉化為十進位後為224,故子網掩碼為255.255.255.224,如果是B類網路,則子網掩碼為255.255.224.0。

第6章 網關

上文中的26代表主機ID的掩碼地址長度,從前往後有26位,即子網掩碼的地址是255.255.255.192。

子網掩碼還可以用來將網路劃分為更小的子網,將IP的兩極結構擴充成三級結構,節約地址空間,減輕路由器負擔。

子網掩碼的劃分

如果要將一個網路劃分為多個子網,如何確定子網掩碼?步驟如下:

第一步:將要劃分的子網數目轉換為2的m次方。如果不是恰好是2的多少次方,則按照取大原則。

第二步:將上一步確定的冪m按照高序佔用主機地址前m位,再轉化為十進位。如m為3,表示主機位中有3位被劃分為網路標識號佔用,因網路標識號都為1,故如是C類地址,主機號對應的位元組變為11100000,轉化為十進位後為224,故子網掩碼為255.255.255.224,如果是B類網路,則子網掩碼為255.255.224.0。

第7章 抓包方式

抓包方式:wireshark抓包軟體在windows中使用

Linux抓包命令tcpdump是一個抓包工具,用於抓取互聯網上傳輸的數據包

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以列印出所有經過網路介面的數據包的頭資訊。

tcpdump命令工作時先要把網卡的工作模式切換到混雜模式。所以tcpdump命令需要以root身份運行。tcpdump命令是linux下使用最廣泛的網路協議分析工具。使用tcpdump命令時,必須精通TCP/IP協議工作原理。

語法格式: tcpdump [參數]

常用參數:

-a

嘗試將網路和廣播地址轉換成名稱

-c<數據包數目>

收到指定的數據包數目後,就停止進行傾倒操作

-d

把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出

-dd

把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出

-ddd

把編譯過的數據包編碼轉換成十進位數字的格式,並傾倒到標準輸出

-e

在每列傾倒資料上顯示連接層級的文件頭

-f

用數字顯示網際網路地址

-F<表達文件>

指定內含表達方式的文件

-i<網路介面>

使用指定的網路截面送出數據包

-l

使用標準輸出列的緩衝區

-n

不把主機的網路地址轉換成名字

-N

不列出域名

-O

不將數據包編碼最佳化

-p

不讓網路介面進入混雜模式

-q

快速輸出,僅列出少數的傳輸協議資訊

-r<數據包文件>

從指定的文件讀取數據包數據

-s<數據包大小>

設置每個數據包的大小

-S

用絕對而非相對數值列出TCP關聯數

-t

在每列傾倒資料上不顯示時間戳記

-tt

在每列傾倒資料上顯示未經格式化的時間戳記

-T<數據包類型>

強制將表達方式所指定的數據包轉譯成設置的數據包類型

-v

詳細顯示指令執行過程

-vv

更詳細顯示指令執行過程

-x

用十六進位字碼列出數據包資料

-w<數據包文件>

把數據包數據寫入指定的文件

參考實例

監視指定網路介面的數據包:

[root@linuxcool ~]# tcpdump -i eth1

監視指定主機的數據包:

[root@linuxcool ~]# tcpdump host linuxcool

截獲主機192.168.10.10 和主機192.168.10.20 或192.168.10.30的通訊:

[root@linuxcool ~]# tcpdump host 192.168.10.10 and \ (192.168.10.20 or 192.168.10.30 \)

抓取80埠的HTTP報文,以文本形式展示:

[root@linuxcool ~]# tcpdump -i any port 80 -A

7.1  默認啟動

tcpdump -vv       #普通情況下,直接啟動tcpdump將監視第一個網路介面上所有流過的數據包。

 過濾主機

tcpdump -i eth1 host 192.168.1.1       #抓取所有經過eth1,目的或源地址是192.168.1.1的網路數據

tcpdump -i eth1 src host 192.168.1.1   #指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1   #指定目的地址,192.168.1.1

7.2  過濾埠

tcpdump -i eth1 port 80        #抓取所有經過eth1,目的或源埠是80的網路數據

tcpdump -i eth1 src port 80    #指定源埠

tcpdump -i eth1 dst port 80    #指定目的埠

7.3  協議過濾

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某埠的數據包

tcpdump -i eth0 tcp port 21 -nn

7.4  常用表達式

非 : ! or “not” (去掉雙引號)

且 : && or “and”

或 : || or “or”

#抓取所有經過eth1,目的地址是192.168.1.254或192.168.1.200埠是80的TCP數

tcpdump -i eth1 ‘((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))’

#抓取所有經過eth1,目標MAC地址是00:01:02:03:04:05的ICMP數據

tcpdump -i eth1 ‘((icmp) and ((ether dst host 00:01:02:03:04:05)))’

#抓取所有經過eth1,目的網路是192.168,但目的主機不是192.168.1.200的TCP數據

tcpdump -i eth1 ‘((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))’

第8章  Linux常用網路命令

8.1  網卡命令規則

CentOS-6之前基於傳統的命名方式如eth1,eth0….

Centos-7提供了不同的命名規則,默認是基於韌體、拓撲、位置資訊來分配。這樣做的優點是命名是全自動的、可預知的,缺點是比eth0、wlan0更難讀。比如enp5s0

biosdevnamenet.ifnames兩種命名規範

#net.ifnames的命名規範為:   

設備類型+設備位置+數字

#設備類型:

   en 表示Ethernet

   wl 表示WLAN

   ww 表示無線廣域網WWAN

#實際的例子:

    eno1 #板載網卡

   enp0s2  #pci網卡

   ens33   #pci網卡

   wlp3s0  #PCI無線網卡

   wwp0s29f7u2i2   #4G modem

   wlp0s2f1u4u1   #連接在USB Hub上的無線網卡

#biosdevname的命名規範為:

    根據系統BIOS提供的資訊對網路介面進行重命名。

   em[1-N] #表示主板(嵌入式)NIC (對應機箱標籤) 

   pci   #表示PCI插槽中的卡,埠1至N 

實際的例子:

    em1   #板載網卡

   p3p4 #pci網卡

   p3p4_1   #虛擬網卡

CentOS-7

默認內核參數(biosdevname=0(dell伺服器默認是1),net.ifnames=1):  網卡名 “enp5s2”

biosdevname=1,net.ifnames=0:網卡名 “em1”

biosdevname=0,net.ifnames=0:網卡名 “eth0” (最傳統的方式,eth0 eth1)

#定義網卡命令規則

在安裝系統時,選擇安裝選項,按tab鍵,在跳出的一行內容後面添加net.ifnames=0 biosdevname=0

#命令行設置網卡名稱規則

[root@qls ~]# cd /etc/sysconfig/network-scripts/  #修改網卡配置文件

[root@qls network-scripts]# mv ifcfg-ens33 ifcfg-eth0

[root@qls network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0

[root@qls ~]# vim /etc/sysconfig/grub  #GRUB添加kernel參數

GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"

[root@qls ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

[root@qls ~]# reboot   #重啟系統生效

8.2  網卡配置文件詳解

#動態ip

[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"             網路類型:乙太網
PROXY_METHOD="none"         代理方式:關閉狀態
BROWSER_ONLY="no"           只是瀏覽器(yes|no)
BOOTPROTO="dhcp"            設置網卡獲得ip地址的方式(static|dhcp|none|bootp)
DEFROUTE="yes"              設置為默認路由(yes|no)
IPV4_FAILURE_FATAL="no"     是否開啟IPV4致命錯誤檢測(yes|no)
IPV6INIT="yes"              IPV6是否自動初始化
IPV6_AUTOCONF="yes"         IPV6是否自動配置
IPV6_DEFROUTE="yes"         IPV6是否可以為默認路由
IPV6_FAILURE_FATAL="no"     是否開啟IPV6致命錯誤檢測
IPV6_ADDR_GEN_MODE="stable-privacy"  IPV6地址生成模型
NAME="eth0"                 網卡物理設備名稱
UUID="fb32c09d-5a9f-40b9-852b-0f44ff2202ed"  UUID識別碼
DEVICE="eth0"                網卡設備名稱
ONBOOT="yes"                 開機自啟(yes|no)
#靜態ip                      IP地址
[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"              網路類型:乙太網
BOOTPROTO="static"           設置靜態模式
NAME="eth0"                   網卡名稱
DEVICE="eth0"                 網卡設備名稱
ONBOOT="yes"                  開機自啟(yes|no)
IPADDR="10.0.0.200"         IP地址
NETMASK="255.255.255.0"     子網掩碼
GATEWAY="10.0.0.254"         網關
DNS1="223.5.5.5"             備用DNS1伺服器
DNS2="223.6.6.6"                備用DNS2伺服器

8.3  網路管理命令

ping 命令

ping命令主要用來測試主機之間網路的連通性,也可以用於。執行ping指令會使用ICMP傳輸協議,發出要求回應的資訊,若遠端主機的網路功能沒有問題,就會回應該資訊,因而得知該主機運作正常。

語法格式:ping [參數] [目標主機]

常用參數:

-d

使用Socket的SO_DEBUG功能

-c

指定發送報文的次數

-i

指定收發資訊的間隔時間

-I

使用指定的網路介面送出數據包

-l

設置在送出要求資訊之前,先行發出的數據包

-n

只輸出數值

-p

設置填滿數據包的範本樣式

-q

不顯示指令執行過程

-R

記錄路由過程

-s

設置數據包的大小

-t

設置存活數值TTL的大小

-v

詳細顯示指令的執行過程

參考實例

檢測與linuxcool網站的連通性:

[root@linuxcool ~]# ping www.linuxcool.com

 連續ping4次:

[root@linuxcool ~]# ping -c 4 www.linuxcool.com 

設置次數為4,時間間隔為3秒:

[root@linuxcool ~]# ping -c 4 -i 3 www.linuxcool.com

利用ping命令獲取指定網站的IP地址

[root@linuxcool ~]# ping -c 1 linuxcool.com | grep from | cut -d " " -f4
220.181.57.216

nc  命令

常用參數:

-l

使用監聽模式,管控傳入的資料

-p

設置本地主機使用的通訊埠

-s

設置本地主機送出數據包的IP地址

-u

使用UDP傳輸協議

-v

顯示指令執行過程

-w

設置等待連線的時間

-z

使用0輸入/輸出模式,只在掃描通訊埠時使用

參考實例

掃描80埠:

[root@linuxcool ~]# nc -nvv 192.168.3.1 80

掃描UDP埠:

[root@linuxcool ~]# nc -u -z -w2 192.168.0.1 1-1000

掃描TCP埠:

[root@linuxcool ~]# nc -v -z -w2 192.168.0.3 1-100

nmap 命令

語法格式:nmap [參數]

常用參數:

–traceroute

掃描主機埠並跟蹤路由

-p

掃描指定埠和埠範圍

-sP

對目標主機進行ping掃描

-A

使用高級功能進行掃描

-PE

強制執行直接的ICMPping

-sV

探測服務版本資訊

-d

增加調試資訊地輸出

-PU

發送udp ping

-ps

發送同步(SYN)報文

參考實例

掃描主機並跟蹤路由:

[root@linuxcool ~]# nmap --traceroute www.linuxcool.com

使用-p參數探測80、443埠:

[root@linuxcool ~]# nmap -p80,443 www.linuxcool.com

探測伺服器的1-10000埠範圍:

[root@linuxcool ~]# nmap -p1-10000 www.linuxcool.com

使用-A參數進行高級掃描:

[root@linuxcool ~]# nmap -A www.linuxcool.com

telnet 命令一種遠程登錄的工具。

同樣可以檢查某個主機是否開啟某個埠

語法格式: telnet [參數]

常用參數:

-8

允許使用8位字元資料,包括輸入與輸出

-a

嘗試自動登入遠端系統

-b

使用別名指定遠端主機名稱

-c

不讀取用戶專屬目錄里的.telnetrc文件

-d

啟動排錯模式

-e

設置脫離字元

-E

濾除脫離字元

-f

此參數的效果和指定」-F」參數相同

-F

使用Kerberos V5認證時,加上此參數可把本地主機的認證數據上傳到遠端主機

-k

使用Kerberos認證時,加上此參數讓遠端主機採用指定的領域名,而非該主機的域名

-K

不自動登入遠端主機

-l

指定要登入遠端主機的用戶名稱

-L

允許輸出8位字元資料

-n

指定文件記錄相關資訊

-r

使用類似rlogin指令的用戶介面

-S

設置telnet連線所需的IP TOS資訊

-x

假設主機有支援數據加密的功能,就使用它

-X

關閉指定的認證形態

參考實例

登錄遠程主機:

[root@linuxcool ~]# telnet 192.168.0.5

連接本地主機,埠號為23

[root@linuxcool ~]# telnet localhost23
#用法  
[C:\~]$ telnet 10.0.0.99 22

Connecting to 10.0.0.99:22...

Connection established.

To escape to local shell, press 'Ctrl+Alt+]'.

SSH-2.0-OpenSSH_7.4

netstat 命令

netstat 命令用於顯示各種網路相關資訊,如網路連接,路由表,介面狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。

語法格式netstat [參數]

常用參數:

-a

顯示所有連線中的Socket

-p

顯示正在使用Socket的程式識別碼和程式名稱

-u

顯示UDP傳輸協議的連線狀況

-i

顯示網路介面資訊表單

-n

直接使用IP地址,不通過域名伺服器

參考實例

顯示詳細的網路狀況:

[root@linuxcool ~]# netstat -a

顯示當前戶籍UDP連接狀況:

[root@linuxcool ~]# netstat -nu

顯示UDP埠號的使用情況:

[root@linuxcool ~]# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name   
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*      4000/dhclient      
udp        0      0 localhost:323           0.0.0.0:*      3725/chronyd       
udp6       0      0 localhost:323           [::]:*         3725/chronyd 

顯示網卡列表:

[root@linuxcool ~]# netstat -i
Kernel Interface table
Iface MTU Met  RX-OK  RX-ERR  RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500   0  181864   0      0       0     141278   0     0     0    BMRU
lo   16436  0   3362    0      0       0     3362     0     0     0    LRU

顯示組播組的關係:

[root@linuxcool ~]# netstat -g
IPv6/IPv4 Group Memberships Interface   
RefCnt Group
--------------- ------ ---------------------
lo        1   ALL-SYSTEMS.MCAST.NET
eth0      1   ALL-SYSTEMS.MCAST.NET lo       1   ff02::1
eth0      1   ff02::1:ff0a:b0c eth0          1   ff02::1

ss 命令

語法格式:ss [參數]

ss命令用來顯示處於活動狀態的套接字資訊。

常用參數:

-n

不解析服務名稱,已數字方式顯示

-a

顯示所有套接字

-l

顯示處於監聽狀態的套接字

-o

顯示計時器資訊

-e

顯示詳細的套接字資訊

-m

顯示套接字的記憶體使用情況

-p

顯示使用套接字的進程

-i

顯示內部的TCP資訊

-s

顯示套接字使用概況

-4

僅顯示ipv4的套接字

-6

僅顯示ipv6的套接字

-0

顯示PACKET套接字

-t

只顯示TCP套接字

-u

只顯示UDP套接字

-d

只顯示DCCP套接字

-w

只顯示RAW套接字

-x

只顯示 Unix套接字

-D

將原始TCP套接字資訊轉儲到文件

參考實例

顯示TCP套接字:

[root@linuxcool ~]# ss -t -a
State     Recv-Q     Send-Q     Local Address:Port     Peer Address:Port  
LISTEN    0          128        0.0.0.0:ssh            0.0.0.0:*                                
ESTAB     0          52         192.168.60.19:ssh      192.168.30.21:59321              
LISTEN    0          128        *:websm                *:*              
LISTEN    0          128        [::]:ssh               [::]:* 

顯示UDP套接字:

[root@linuxcool ~]# ss -u -a
State     Recv-Q     Send-Q     Local Address:Port     Peer Address:Port             
UNCONN    0          0          0.0.0.0:bootpc         0.0.0.0:*                
UNCONN    0          0          127.0.0.1:323          0.0.0.0:*                
UNCONN    0          0          [::1]:323              [::]:*  

顯示套接字使用概況:

[root@linuxcool ~]# ss -s
Total: 185
TCP:   4 (estab 1, closed 0, orphaned 0, timewait 0)
Transport Total     IP        IPv6
RAW       1         0         1        
UDP       3         2         1       
TCP       4         2         2       
INET      8         4         4       
FRAG      0         0         0      

tracert 命令

(windows) 路由跟蹤(檢查你與目標之間每個路口是否暢通)
#常用選項

   -d   #禁止把IP解析為對應的域名(主機名)

traceroute   追蹤數據包在網路上的傳輸時的全部路徑

語法格式:traceroute [參數] [域名或者IP]

常用參數:

-d

使用Socket層級的排錯功能

-f<存活數值>

設置第一個檢測數據包的存活數值TTL的大小

-F

設置勿離斷位

-g<網關>

設置來源路由網關,最多可設置8

-i<網路介面>

使用指定的網路介面送出數據包

-I

使用ICMP回應取代UDP資料資訊

-m<存活數值>

設置檢測數據包的最大存活數值TTL的大小

-n

直接使用IP地址而非主機名稱

-p<通訊埠>

設置UDP傳輸協議的通訊埠

-r

忽略普通的Routing Table,直接將數據包送到遠端主機上

-s<來源地址>

設置本地主機送出數據包的IP地址

-t<服務類型>

設置檢測數據包的TOS數值

-v

詳細顯示指令的執行過程

-w

設置等待遠端主機回報的時間

-x

開啟或關閉數據包的正確性檢驗

參考實例

追蹤本地數據包到www.linuxprobe.com的傳輸路徑:

[root@linuxcool ~]# traceroute www.linuxprobe.com

跳數設置:

[root@linuxcool ~]# traceroute -m 7 www.linuxprobe.com

顯示IP地址,不查主機名

[root@linuxcool ~]# traceroute -n www.linuxprobe.com

把探測包的個數設置為值4

[root@linuxcool ~]# traceroute -q 4 www.linuxprobe.com

把對外發探測包的等待響應時間設置為3秒:

[root@linuxcool ~]# traceroute -w 3 www.linuxprobe.com

iftop 命令

iftop是一款實時流量監控工具,監控TCP/IP連接等,缺點就是無報表功能。必須以root身份才能運行。

iftop介面說明:

介面上面顯示的是類似刻度尺的刻度範圍,為顯示流量圖形的長條作標尺用的。

中間的<= =>這兩個左右箭頭,表示的是流量的方向。

TX:發送流量

RX:接收流量

TOTAL:總流量

Cumm:運行iftop到目前時間的總流量

peak:流量峰值

rates:分別表示過去 2s 10s 40s 的平均流量

#常用選項

-i                  #設定監測的網卡

-B                 #以bytes為單位顯示流量(默認是bits)

-n                  #使host資訊默認直接都顯示IP

-P                   #使host資訊及埠資訊默認就都顯示

-m                  #設置介面最上邊的刻度的最大值,刻度分五個大段顯示

按q退出監控。

glances  命令

glances是一個相對比較新的系統監控工具,用 Python 編寫的,使用 psutil 庫從系統獲取資訊。可以用它來監控 CPU、平均負載、記憶體、網路介面、磁碟 I/O,文件系統空間利用率、掛載的設備、所有活動進程以及消耗資源最多的進程。

語法格式:glances [參數]

常用參數:

-b

顯示網路連接速度 Byte/

-s

設置 glances 運行模式為伺服器

-B

綁定伺服器端 IP 地址或者主機名稱

-c

連接 glances 伺服器端

-t

設置螢幕刷新的時間間隔,單位為秒,默認值為 2 秒,數值許可範圍:1~32767

參考實例

192.168.10.10 主機啟動 glances 服務:

[root@linuxcool ~]# glances -s -B 192.168.10.10 &

從另一台主機查看 192.168.10.10 主機的系統負載狀態:

[root@linuxcool ~]# glances -c 192.168.10.10 

顯示網路連接速度 Byte/ 秒:

[root@linuxcool ~]# glances -b

設置螢幕刷新的時間間隔為6秒:

[root@linuxcool ~]# glances -t 6

8.4  常見面試題

【問題1】為什麼連接的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。
【問題2】為什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?
答:雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網路是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。在Client發送出最後的ACK回復,但該ACK可能丟失。Server如果沒有收到ACK,將不斷重複發送FIN片段。所以Client不能立即關閉,它必須確認Server接收到了該ACK。Client會在發送出ACK之後進入到TIME_WAIT狀態。Client會設置一個計時器,等待2MSL的
間。如果在該時間內再次收到FIN,那麼Client會重發ACK並再次等待2MSL。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指一個片段在網路中最大的存活時間,2MSL就是一個發送和一個回復所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那麼Client推斷ACK已經被成功接收,則結束TCP連接。
【問題3】為什麼不能用兩次握手進行連接?
答:3次握手完成兩個重要的功能,既要雙方做好發送數據的準備工作(雙方都知道彼此已準備好),也要允許雙方就初始序列號進行協商,這個序列號在握手過程中被發送和確認。
       現在把三次握手改成僅需要兩次握手,死鎖是可能發生的。作為例子,考慮電腦S和C之間的通訊,假定C給S發送一個連接請求分組,S收到了這個分組,並發 送了確認應答分組。按照兩次握手的協定,S認為連接已經成功地建立了,可以開始發送數據分組。可是,C在S的應答分組在傳輸中被丟失的情況下,將不知道S 是否已準備好,不知道S建立什麼樣的序列號,C甚至懷疑S是否收到自己的連接請求分組。在這種情況下,C認為連接還未建立成功,將忽略S發來的任何數據分 組,只等待連接確認應答分組。而S在發出的分組超時後,重複發送同樣的分組。這樣就形成了死鎖。

問題4】如果已經建立了連接,但是客戶端突然出現故障了怎麼辦?
TCP還設有一個保活計時器,顯然,客戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。伺服器每收到一次客戶端的請求後都會重新複位這個計時器,時間通常是設置為2小時,若兩小時還沒有收到客戶端的任何數據,伺服器就會發送一個探測報文段,以後每隔75秒鐘發送一次。若一連發送10個探測報文仍然沒反應,伺服器就認為客戶端出了故障,接著就關閉連接。

第9章   Linux配置多IP地址

9.1  每個網卡都可以配置多個公網IP 內網IP

9.1.1  可以配置任意介面

給eth0網卡配置10.0.0.201     臨時生效       重啟失效

[root@oldboyedu ~]#ip addr add 10.0.0.201/24 dev eth0

永久生效

    /etc/rc.local

擴展:配置網卡的子介面  eth0:0 eth0:1  了解   綁定多網卡

[root@oldboyedu-lnb ~]# ip addr del 10.0.0.251/24 dev eth0

9.2   指定默認網關  筆試題

查看默認的網關

9.2.1  route -n

[root@oldboyedu ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

9.2.2  查看網卡配置

9.2.2.1      刪除默認的網關

第一種方法:

[root@oldboyedu ~]# route del default gw 10.0.0.2

第二種方法:使用靜態路由的方式刪除網關

[root@oldboyedu ~]# ip route del 0/0 via 10.0.0.2

9.2.2.2      設置默認網關

第一種方法:

[root@oldboyedu ~]# route add  default gw 10.0.0.2

第二種方法:

[root@oldboyedu ~]#ip route add 0/0 via 10.0.0.2

9.2.2.3      工作中臨時+永久

在命令行執行

ip route del default gw 10.0.0.2               #刪除默認網關
ip route add default gw 10.0.0.254             #添加默認網關
vim /etc/sysconfig/network-scripts/ifcfg-eth0  #修改默認網卡

9.2.2.4      修改默認網關

ip route  replace  直接修改  不需要先刪除後添加
ip route replace default via 10.0.0.2 dev eth0

9.2.2.5      指定默認路由

ip route add 192.168.1.100 via 10.0.0.2
route add  10.0.0.1 netmask
route –net 202.106.0.20 netmask 255.255.255.0 dev

9.2.2.6      策略路由:

     案例:如果伺服器使用pptp撥號

1)      業務需要pptp撥號

2)      購買pptp帳號

3)      撥號pptpset up

4)      安裝pptp命令

[root@oldboyedu-lnb ~]# yum -y install pptp-setup

5)      Linux系統撥號  Windows如何撥號 vpn的帳號?  擴展

a. 刪除默認的網關

 b. 指定去往vpn伺服器默認的路由

 ping shh.91ip.vip
ip route add 115.207.30.130 via 172.17.159.253
[root@oldboyedu-lnb ~]# pptpsetup  --create test --server shh.91ip.vip --username 66951 --password 1234  --start

6) 測試網路通訊

7) 指定默認的路由走ppp0介面

[root@oldboyedu-lnb ~]#  route add -net 0.0.0.0 netmask 0.0.0.0 ppp0

8) 無法通過SSH連接伺服器

9) 使用策略路由 來給SSH進行回包

      路由表:

      /etc/iproute2/rt_tables

      可以給裡面的表名字 配置一個默認的路由

[root@oldboyedu-lnb ~]#  ip route add 0/0 via 172.17.159.253 table test

給test表配置了一個靜態路由 去往任意IP網關為172.17.159.253

配置策略

[root@oldboyedu-lnb ~]# ip rule add from 39.153.181.202 table test

PS:DNS作用:

域名解析  把域名解析成IP  我們和解析到的IP地址建立通訊

沒有域名   直接可以使用IP地址

linux的網卡配置文件 /etc/resolv.conf   #  工作中建議使用