網絡相關知識筆記

網絡協議和管理

網絡概念:

常見的網絡物理組建

RJ-45連接器、路由器、交換機、網絡接口卡等…

VPN(虛擬私有網絡)

openVPN

網絡協議

網絡模型

網絡拓撲

  • 總線拓撲
    • 所有設備均可接收信息
  • 星型拓撲
    • 通過中心點傳輸
    • 單一故障點(缺點)
  • 擴展星型拓撲結構
  • 環形拓撲
    • 信號繞環傳輸
    • 單一故障點
  • 雙環拓撲
    • 信號沿相反方向傳輸
    • 比單環的復原能力更強
    • 同一臺網絡設備連接有兩條鏈路
  • 全網狀拓撲
    • 容錯能力強
    • 實施成本高
  • 部分網狀拓撲
    • 在容錯能力與成本之間尋求平衡

邏輯拓撲

hub		集線器
bridge	網橋
switch	交換機
router	路由器

OSI標準

OSI英文名稱

  • application
  • presention
  • session
  • transport
  • network
  • data link
  • physical

特點

  • 降低複雜性
  • 標準化接口
  • 簡化模塊化設計
  • 確保技術的互操作性
  • 加快發展速度
  • 簡化教學

通訊模式

  • 單工
  • 半雙工 HALF Duplex,HD
  • 全雙工 FULL Duplex,FD
  • 單播UNICAST、廣播BROADCAST、組播或多播MULTCAST

查看網卡的屬性

ethtool eth0
# or
mii-tool -v eth0

局域網Local Area Network

WAN Wide

LAN Local

LAN組成

  • computer
  • interconnections
  • Network devices
  • Protocols(協議)
    • Ethernet
    • IP
    • ARP
    • DHCP

網絡線纜和接口

  • Twisted-Pair,雙絞線
  • Coaxial,同軸電纜
  • Fiber-Optic,光纖

UTP

橙白、橙、白綠、藍、白藍、綠、白棕、棕

100M實際用到12/36兩組線

1、2用來發送 TX

3、6用來接收 RX

1000M實際用到12/36/45/78四祖線

GBICs

光纖轉換器

Ethernet Evolution

image-20200604000640719.png

MAC地址

MAC地址,物理地址,每個網絡設備都有獨立的MAC地址

6個字節bytes,前三個標明生產廠家,後三個是廠家獨立自由設置的地址

前3個字節中的第一個1字節中的第8位:

  • 0:unicast單播

  • 1:multicast多播組播

  • 當所有字節都爲1時,即ff:ff:ff:ff 代表廣播BROADCAST

衝突檢測的載波偵聽多路訪問CSMA/CD

  1. 偵聽線路是否有數據正在發送
  2. 有衝突時利用算法後延若干毫秒,直至傳輸成功

特點:

​ 不適合太多網絡設備

衝突域

廣播域

wireshark

安裝

使用

以太網

  • 數據鏈路層設備

撥號網絡PPP

撥號網絡PPPOE

  • 屬於數據鏈路層

Hub集線器

多端口中繼器

flow泛洪:Hub並不記憶該信息包發給哪個MAC而是廣播的形式

特點:

  • 共享帶寬
  • 半雙工

工作在數據鏈路層

第一層(物理層)設備

網卡是工作在數據鏈路層

網橋

簡介:

網橋中有CAM功能,內存記錄連接網橋內的Port和MAC

CAM:內容可尋址存儲器CAM(Coment-Addressable Memo-ry)

  • 包含MAC和port
  • 隔斷衝突域
  • 不能隔斷廣播

鏡像端口:

  • 可以監聽所有的數據報文
  • 數據鏈路層設備

Switch交換機

交換機每個端口便是一個衝突域

連接wifi後掃描網路中的設備,可以截獲信息

交換器是第二層設備

Router路由器

  • 隔斷廣播域,路由器隔開的便是一個網段
  • 選擇路由表中到達目標的最好路徑,路由器只記錄最優的路徑
  • 維護和檢查路由信息,每個電腦主機
  • 連接局域網與廣域網,一般認爲路由器是廣域網設備
  • 標準路由器是第三層(網絡層)設備

window查看路由表

route print

linux查看路由表

[root@localhost ~]# route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0


Iface	接口:信息從哪個口發出去
Gateway	網絡關口:下一個路由器臨近我的接口的IP,下一跳的地址

添加路由

route add -net IP gw netmask dev eth0

刪除路由

route del....

默認路由

route add -net 0.0.0.0/0 gw ip
#or
route add default  gw 192.168.37.123

全部路由都不匹配時才走該路由,未知網絡都走默認路由
當刪除默認路由時,則連不了外網

抓包

tcpdump -i dev icmp -nn

通過寫文件的方式永久保存網絡設置信息

網卡配置文件

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
# 網絡配置文件
[root@localhost network-scripts]# ls
ifcfg-ens33  ifdown-ipv6    ifdown-TeamPort  ifup-ippp   ifup-routes       network-functions
ifcfg-lo     ifdown-isdn    ifdown-tunnel    ifup-ipv6   ifup-sit          network-functions-ipv6
ifdown       ifdown-post    ifup             ifup-isdn   ifup-Team
ifdown-bnep  ifdown-ppp     ifup-aliases     ifup-plip   ifup-TeamPort
ifdown-eth   ifdown-routes  ifup-bnep        ifup-plusb  ifup-tunnel
ifdown-ib    ifdown-sit     ifup-eth         ifup-post   ifup-wireless
ifdown-ippp  ifdown-Team    ifup-ib          ifup-ppp    init.ipv6-global

# 該文件下的內容都是腳本文件,開啓時會自動運行


[root@localhost network-scripts]# vim ifcfg-ens33 

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp	# 更改爲DHCP後之後的IP設置會無效 需要設置爲none或static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33	# 圖形上顯示的名稱
UUID=4406dfba-d1de-401b-8837-28ab4d9524e9
DEVICE=ens33	# 配置的目標網卡
ONBOOT=no	# 是否禁用該網卡

#IPADDR=
#NETMASK=
#PREFIX=

#########################

service NetworkManager restart
# 重新啓動服務,或
service Network restart
#在CentOS7中
systemctl restart network
# 該服務經常會和Network衝突

Linux啓用路由功能:路由轉發

cat /proc/sys/net/ipv4/ip_forward
0
# 開啓路由轉發功能
echo 1 > /proc/sys/ney/ipv4/ip_forward

禁用防火牆

chkconfig iptables off
service iptables stop

跟蹤路由

traceroute DESTIP

#or
tracepath DESTIP

#or 
mtr DESTIP
#q退出

路由表

即使兩臺機器在同一個網段中,沒有路由表的話依然無法通訊

迴環網卡上的路由是沒有路由表的,不能網絡通訊,所以只能自己連自己

直連網絡路由是直接生成的

NETID目標網絡 INTERFACE接口 GATEWAY網關

配置動態路由

用數學算法編寫數學協議運行在路由器上自動生成路由表

  • RIP
  • OSPF
  • BGP

quagga軟件包

包內含有多種動態路由協議

開啓ospf協議

service ospfd start

配置路由器

vtysh

操作語句

show running-config

config terminal

exit

學習判斷最佳路徑的方法

RIP

  • 經過路徑最少判斷爲最優

OSPF

  • 區別帶寬

netstate命令與ss命令

netstate

Linux netstat 命令用於顯示網絡狀態。

利用 netstat 指令可讓你得知整個 Linux 系統的網絡情況。

語法

netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]

參數說明

  • -a或–all 顯示所有連線中的Socket。
  • -A<網絡類型>或–<網絡類型> 列出該網絡類型連線中的相關地址。
  • -c或–continuous 持續列出網絡狀態。
  • -C或–cache 顯示路由器配置的快取信息。
  • -e或–extend 顯示網絡其他相關信息。
  • -F或–fib 顯示FIB。
  • -g或–groups 顯示多重廣播功能羣組組員名單。
  • -h或–help 在線幫助。
  • -i或–interfaces 顯示網絡界面信息表單。
  • -l或–listening 顯示監控中的服務器的Socket。
  • -M或–masquerade 顯示僞裝的網絡連線。
  • -n或–numeric 直接使用IP地址,而不通過域名服務器。
  • -N或–netlink或–symbolic 顯示網絡硬件外圍設備的符號連接名稱。
  • -o或–timers 顯示計時器。
  • -p或–programs 顯示正在使用Socket的程序識別碼和程序名稱。
  • -r或–route 顯示Routing Table。
  • -s或–statistics 顯示網絡工作信息統計表。
  • -t或–tcp 顯示TCP傳輸協議的連線狀況。
  • -u或–udp 顯示UDP傳輸協議的連線狀況。
  • -v或–verbose 顯示指令執行過程。
  • -V或–version 顯示版本信息。
  • -w或–raw 顯示RAW傳輸協議的連線狀況。
  • -x或–unix 此參數的效果和指定"-A unix"參數相同。
  • –ip或–inet 此參數的效果和指定"-A inet"參數相同。
netstate -n
netstate -nt	#tcp
netstate -ntu	#udp
netstate -ntul	#顯示監聽端口

顯示詳細的網絡狀況

# netstat -a

顯示當前戶籍UDP連接狀況

# netstat -nu

顯示UDP端口號的使用情況

# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name  
udp    0   0 *:32768           *:*                   -          
udp    0   0 *:nfs            *:*                   -          
udp    0   0 *:641            *:*                   3006/rpc.statd   
udp    0   0 192.168.0.3:netbios-ns   *:*                   3537/nmbd      
udp    0   0 *:netbios-ns        *:*                   3537/nmbd      

查詢監聽端口的程序

lsof -i :6000
netstate -ntulpe

顯示網卡列表

# 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

顯示組播組的關係

# 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

顯示網絡統計信息

# netstat -s
Ip:
  184695 total packets received
  0 forwarded
  0 incoming packets discarded
  184687 incoming packets delivered
  143917 requests sent out
  32 outgoing packets dropped
  30 dropped because of missing route
Icmp:
  676 ICMP messages received
  5 input ICMP message failed.
  ICMP input histogram:
    destination unreachable: 44
    echo requests: 287

顯示監聽的套接口

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State   
tcp    0   0 *:32769           *:*             LISTEN   
tcp    0   0 *:nfs            *:*             LISTEN   
tcp    0   0 *:644            *:*             LISTEN   
tcp    0   0 *:1002           *:*             LISTEN   
tcp    0   0 *:netbios-ssn        *:*             LISTEN   
tcp    0   0 *:sunrpc          *:*             LISTEN   
tcp    0   0 vm-dev:ipp         *:*             LISTEN

查看網卡吞吐量

netstate -I=eth1
netstate -Ieth1

每秒觀察吞吐量

watch -n1 netstate -Ieth1
# watch方法,每秒觀察一次

watch

watch可以幫你監測一個命令的運行結果,來監測你想要的一切命令的結果變化

常見命令參數

Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>] [--no-title] [--version] <command>
  -d, --differences[=cumulative]        highlight changes between updates
                (cumulative means highlighting is cumulative)
  -h, --help                            print a summary of the options
  -n, --interval=<seconds>              seconds to wait between updates
  -v, --version                         print the version number
  -t, --no-title                        turns off showing the header

每隔一秒高亮顯示網絡鏈接數的變化情況

watch -n 1 -d netstat -ant 【-n 設置間隔,-d,difference,高亮顯示不同】
 
   watch -d 'ls /home/omd'       【-d 高亮顯示】
 
   watch -t 'ls /home/omd'       【-t會關閉watch命令在頂部的時間間隔】
 
說明: 切換終端: Ctrl+x     退出watch:Ctrl+g

每隔一秒高亮顯示http鏈接數的變化情況

watch -n 1 -d 'pstree|grep http'
 
實時查看模擬攻擊客戶機建立起來的連接數
 
watch -n 1 -d 'netstat -an | grep "21" | egrep "192.168.25.100"| wc -l'
 
監測當前目錄中 scf' 的文件的變化
 
watch -d 'ls -l|grep scf'
 
10秒一次輸出系統的平均負載
 
watch -n 1 -d "uptime"

ip命令

在Centos6中安裝bash-completion包來支持ip命令的參數補全

用ip命令來代替ifconfig

設置和刪除Ip地址

要給你的機器設置一個IP地址,可以使用下列ip命令:

# ip addr add 192.168.17.30/24 dev eth0
# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.17.129/24 brd 192.168.17.255 scope global eth0
    inet 192.168.17.30/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe84:c21/64 scope link
       valid_lft forever preferred_lft forever

你也可以使用相同的方式來刪除IP地址,只需用del代替add

列出路由表條目

# ip route show

192.168.17.0/24 dev eth0  proto kernel  scope link  src 192.168.17.129
169.254.0.0/16 dev eth0  scope link  metric 1002
default via 192.168.17.2 dev eth0

更改默認路由

# ip route add default via 192.168.17.3

顯示網絡統計數據

# ip -s link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast  
    0          0        0       0       0       0     
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0     
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast  
    135268     1134     0       0       0       0     
    TX: bytes  packets  errors  dropped carrier collsns
    134830     960      0       0       0       0

當你需要獲取一個特定網絡接口的信息時,在網絡接口名字後面添加選項ls即可。使用多個選項-s會給你這個特定接口更詳細的信息。特別是在排除網絡連接故障時,這會非常有用。

ip -s -s link ls p2p1

ARP條目

# ip neighbour

激活和停止網卡

# ip link set eth0 down
  
# ip link set eth0 up

獲取幫助

# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
       ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]

修改物理地址(邏輯上)

查看MAC地址信息

[root@localhost ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:85:00:0e brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:55:45:d1 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:55:45:d1 brd ff:ff:ff:ff:ff:ff

打開網卡配置文件

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="205b51bf-479e-4f00-8b6a-39703c79e967"
DEVICE="ens33"
ONBOOT="yes"
MACADDR=11:33:44:55:66
~                                      

socket套接字

通過寫入與讀取socket套接字文件來實現數據傳輸的效果

WIFI簡介

無限局域網標準:WIFI

國內無限局域網絡標準:WAPI

WLAN:無線局域網統稱

  • 包括WIFI、WAPI等

VLAN

虛擬局域網,隔斷廣播域

trunk鏈路:所有廣播域共用的端口線路

trunk協議:IEEE 802.1Q 幀結構

以太網幀需要加一個VLAN片段:

  • 該片段4個字節

  • 其中12bit內容爲VLAN變化(理論4096(2^12)個vlan網絡)

    • 但當雲技術出現,需要的網絡數大於4096個vlan網絡時,這時候需要的新的虛擬化 技術解決——vxlan

    • vxlan介紹

  • 單臂路由、帶路由功能交換機,可以解決跨vlan通訊

  • 事實上的網絡拓撲與邏輯上的網絡拓撲可能有區別

  • 通過物理上的MAC加上邏輯上的IP網段區別不同VLAN

  • 屬於數據鏈路層

分層的網絡架構

  1. 訪問層 Access Layer
    • 將設備接入網絡的層級(終端接入)
    • 交換機設備
  2. 分佈層 Distribution Layer
    • 隔斷廣播域,路由,安全,遠程接入,訪問層匯聚
    • 路由器設備、VLAN
  3. 核心層 Core Layer
    • 企業級應用快速轉發
    • 存儲服務器、磁盤整列、核心層交換機:背板寬帶要求非常高(每個網口都是萬兆的)

TCP/IP協議棧

TCP/IP協議棧

TCP協議

  • 面向連接協議

  • 確認機制

  • 將數據打包成段、排序

  • 工作在傳輸層

  • 半關閉

  • 錯誤檢查

  • 數據恢復、重傳

  • 流量控制、滑動窗口

  • 擁塞控制、慢啓動和擁塞避免算法

  • man 7 tcp

應用

  • E-mail
  • File sharing
  • Downloading

TCP報文頭

TCP_head.png)]

常見服務及其使用的端口號

cat /etc/services

可用端口號範圍爲

0-65535

IANA:互聯網數字分配機構(負責域名、數字資源、協議分配)

0-1023
# 系統端口或特權端口(僅管理員可用),衆所周知,永久分配給固定的系統應用使用:22/tcp(ssh)	80/tcp(http)	433/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

顯示主機上正在使用的端口號

ss -ntul

顯示主機上正在使用的端口號和使用該端口的程序

ss -ntulp
lsof -i :6010

window中

C:\Users\Administrator>tasklist | findstr TIM
TIM.exe                      17328 Console                    1    217,088 K

查詢該端口對應信息

C:\Users\Administrator>netstat -no | findstr 17328
  TCP    192.168.1.3:5369       61.129.7.17:443        CLOSE_WAIT      17328
  TCP    192.168.1.3:13637      117.41.243.27:80       ESTABLISHED     17328
  
  # 17328是進程編號

TCP滑動窗口

  • ACK:希望下次發幾號包
  • Window Size=Window size value * Window size scaling factor(固定的,64)

窗口大小決定通訊效率,窗口大小會隨時變化

六個標記位

  • URG:0表示緊急指針無效
  • ACK:1則表示確認字號段有效
  • PSH:1則不經過緩存直接交給應用
    • 默認:網卡緩衝區buffer——>內核緩存區buffer——>應用
  • RST:1說明主機連接出現嚴重錯誤,必須重新鏈接
  • SYN:同步
    • SYN=1 seq=x,第一次握手標誌
  • FIN:結束

sync半連接和accept全連接隊列

  • sync queue:sync半連接隊列,隊列長度是有限的
    • 查看未完成連接隊列大小,建議調整大小爲1024以上
      • cat /proc/sys/net/ipv4/tcp_max_syn_backlog
    • 查看完成隊列大小,建議調整大小爲1024以上
      • cat /proc/sys/net/core/somaxconn
    • 當連接數滿時,訪問將被拒絕(黑客攻擊方式)

STP生成樹協議

spaining tree protocol

  • 避免網絡迴環出現網絡風暴
  • 選擇一個鏈路進行禁用,邏輯上禁用;當其他路斷開時,此鏈路重新啓用。

TCP四次揮手

  • FIN=1,seq=u
  • ACK=1,seq=v,ack=u+1
  • FIN=1,ACK=1,seq=w,ack=u+1
  • ACK=1,seq=u+1,ack=w+1

有限狀態機FSM

img

  • 粗實線箭頭表示對客戶進程的正常變遷。

  • 粗虛線箭頭表示對服務器進程的正常變遷。

  • 另一種細線箭頭表示異常變遷。

MSL

數據生存時間

孤兒連接狀態

連接長時間地停留在FIN_WAIT_2狀態,即服務器不發送關閉連接,客戶端執行半關閉。此時客戶端連接由內核接管

Linux在內核中定義了兩個內核參數:

# 指定內核能接管的孤兒連接數目
/proc/sys/net/ipv4/tcp_max_orphans

# 指定孤兒連接在內核中生存的時間
/proc/sys/net/ipv4/tcp_fin_timeout

TCP超時重傳

tcp超時重傳功能使得連接會更加可靠

實驗

模擬網絡連接中斷

# 將收到192.168.37.7 的包直接丟棄,造成網絡連接中斷現象
iptables -A INPUT -s 192.168.37.7 -j DROP

# 監聽http服務的80端口
tcpdump -i eth0 -nn port 80

連接測試

# 使用curl命令
curl 192.168.37.8

與TCP超時重傳相關的兩個內核參數

# 指定在底層IP接管之前TCP最少執行的重傳次數,默認爲3
/pro/sys/net/ipv4/tcp_retries1

# 指定連接放棄前TCP最多可以執行重傳次數,默認值15(對應13~30min)
/pro/sys/net/ipv4/tcp_retires2

擁塞控制

TCP擁塞控制的標準文檔是RFC 5681,其中詳細介紹了擁塞控制的四個部分:慢啓動(slow start)、擁塞避免(congestion avoidance)、快速重傳(fast retransmit)和快速恢復(fast recovery)。擁塞控制算法在Linux下有多種實現,比如reno算法、vegas算法和cubic算法等。它們或者部分或者全部實現了上述四個部分

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

UDP協議

  • 工作在傳輸層
  • 提供不可靠的網絡訪問
  • 非面向連接協議
  • 有限的錯誤檢查
  • 傳輸性能高
  • 無數據恢復特性
  • man 7 udp

應用場景

  • vioce streaming
  • video streaming

Internet層

協議:

IP協議

  • PDU報頭

http://www.malaoshi.top/upload/0/0/1EF2boAmI25c.png

注意:標誌有3位,只有後兩位纔有意義

  • DF(不允許分片):Don’t Fragment 中間的一位,只有當DF=0 時才允許分片
  • MF(有分片):More Fragment 最後一位,MF=1表示後面還有分片,MF=0表示最後一個分片

IP地址

  • 他們可唯一標識IP網絡中的每臺設備

  • 每臺主機、網絡設備、外圍設備必須具有唯一地址

  • IP地址由兩部分組成

    • 網絡ID
      • 標識網絡
      • 每個網段分配一個網絡ID
    • 主機ID
      • 標識單個主機
      • 由組織分配給各設備
    • 網絡數:
      • 2^可變的網絡ID位
    • 主機數:
      • 2^主機ID位-2
      • 10.0.0.0與10.255.255.255不能要
  • A類:前8位是網絡ID,後24位是主機ID

    • 0XXXXXXX.X.Y.Z
    • 1-126.X.Y.Z
    • 0開頭,初始地址
    • 127開頭:迴環地址
    • 2^24-2=16777214臺主機
  • B類:前16位網絡ID,後16位是主機ID

    10XXXXXX.X.Y.Z
    
    128-192.x.y.z
    
    10000000	128
    
    10111111	192
    
    • 網絡數:
      • 2^14=16384
    • 主機數:
      • 2^16-2=65534
  • C類:前24位網絡ID,後8位是主機ID

    110XXXXX.X.Y.Z
    
    192-223.X.Y.Z
    
    11000000	192
    
    11011111	223
    
    • 網絡數:
      • 2^21=2097152
    • 主機數:
      • 2^8-2=254
  • D類:多播、組播

    224-239.X.Y.Z
    
  • E類:科研用

    240-254.X.Y.Z
    
  • 無類:

    • 網絡ID、主機ID任意位

    • CIDR表示法:無類域間路由

      • IP/網絡ID位數

        10.0.0.0/8
        172.16.0.100/16
        
        
        

netmask:子網掩碼

在這裏插入圖片描述

功能:確定網絡ID位數,32位的二進制數據,對應IP網絡ID位爲1,對應IP中主機ID爲0

202.123.180.200/20 求netmask

ICMP 協議

  • 網絡層。在該層中ip的上層

  • # 可以查看數據鏈路層協議
    tcpdump -i eth0 -nn icmp -e -X
    
  • 禁用ICMP協議內核參數

    /proc/sys/net/ipv4/icmp_echo_ignore_all
    # 改完立即生效
    
  • 網絡ID=iP 與 netmask

    0與任何都是0 ,1與任何數都是其原值
    
    203.110.200.123/21
    1.netmask?
    2.網絡ID
    3.網絡中最多主機數?
    
    200的二進制爲:11001 000
    123的二進制位:01111011
    1. 255.255.248.0
    2. 203.110.200.0
    3. 2^(32-21)-2 = 2046
    
    ########
    
    222.100.140.1/19
    1.netmask?255.255.224.0
    2.網絡ID	222.100.128.0
    3.網絡中最多主機數? 2^(32-19)-2 = 8190
    4.此網絡中最小IP與最大IP
    222.100.10000000.1~222.100.10011111.254
    222.100.128.1~222.100.159.254
    

判斷網絡ID是否相同,即是否在同一個網段

  • 用自己的IP和自己的子網掩碼相與
  • 再用自己的子網掩碼和對方的IP相與
  • 再比較是否相同
A:192.168.37.7/16
B:192.168.36.6/19

A:172.16.129.100/16
B:178.16.128.100/17

私有IP地址

mage-20200607225301966.png

只在局域網中使用

非唯一

公有地址

查看公有地址

[root@localhost ~]# curl ipinfo.io/ip

要上網必須要用公有地址

劃分子網

將一個大網絡(主機多,主機ID位多)分割成多個小網絡(主機少,主機ID位少),所以,原有的網絡ID位變少,網絡ID向主機ID借位

子網數:2^網絡ID向主機ID借的位數

問題1:10.0.0.0/8 給32個省,每個省分配獨立的子網
1. 每個省的子網絡對應netmask?
2. 每個省的子網絡主機多少
3. 最小的子網絡的網絡ID
4. 最大的子網絡的IP範圍


1. 2^n=32;n=5
即:10.00000 000.0.0/13 
10.11111 000.0.0 	255.248.0.0

2. 10.0.0.1-10.7.255.254 
2^(32-13)-2
524286

3. 10.00000 000.0.0/13

4. 10.11111 000.0.1/13 ~ 10.11111 111.255.254

#############################################
問題2:將第10個子網分配河南省,河南省再次分18個子網給各個地市使用。
1. 每個地市的子網絡對應netmask?
2. 每個地市的子網絡主機多少
3. 最小的子網絡的網絡ID
4. 最大的子網絡的IP範圍

1. 10.01001 000.00 (借5位) 000000.0/18 255.255.192.0
2. 2^14-2 = 16382
3. 10.01001 000.00 000000.00000000/18
4. 10.01001 111.11 000000.00000001/18~10.01001 111.11  111111.11111110
	10.79.192.1~10.79.255.254

合併網絡

將多個子網合併成一個大網,也稱超網;即主機ID向網絡ID借位

220.78.168.0/24
220.78.169.0
220.78.170.0
220.78.171.0
220.78.172.0
220.78.173.0
220.78.174.0
220.78.175.0

# 
220.78.10101 000.0
220.78.10101 001.0
220.78.10101 010.0
220.78.10101 011.0
...
220.78.10101 111.0

# 借位合併後
220.78.168.0/21

跨網絡通信

路由:

  • 主機路由
  • 網絡路由
  • 默認路由

優先級:精度越高、優先級越高

動態主機配置協議DHCP自動獲取IP

  • 需要DHCP服務器

image-20200608003500784.png

獲取:IP、網關、租期

基本網絡配置

  • 主機名
  • IP
  • netmask
  • 路由:默認網關
  • DNS服務器
    • 主DNS服務器
    • 次DNS服務器
    • 第三DNS服務器

CentOS6網卡名稱

網卡名控制

[root@localhost ~]# ls /etc/udev/rules.d/
60-fprint-autosuspend.rules  90-hal.rules
60-pcmcia.rules              97-bluetooth-serial.rules
60-raw.rules                 98-kexec.rules
70-persistent-cd.rules       99-fuse.rules
70-persistent-net.rules      99-vmware-scsi-udev.rules
90-alsa.rules

[root@localhost ~]# cat /etc/udev/rules.d/70-persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e5:c3:0b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

卸載網卡驅動、再重新加載

rmmod e1000
#or
modprobe -r e1000

加載

modprobe e1000

ip命令設置網卡

# CentOS7
[root@centos7 ~]# ip 
address      help         link         monitor      neigh        ntable       tcp_metrics  tuntap
addrlabel    ila          macsec       mroute       netconf      route        token        vrf
fou          l2tp         maddress     mrule        netns        rule         tunnel       xfrm

ipv6

fe80::97cf:b445:cc42:aa08/64

ipv6 是128位,128/16=8 有8塊16進制字符組成
其中::中的內容都是0

廣播

正常情況下個主機是不響應廣播ping的,將下方內容該爲0則相應廣播ping

cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

ARP協議

arp先於三次握手

  • 第一次通訊會發送一次廣播,並將響應記錄在廣播表中

  • arp緩存表:arp -n

    • 記錄緩存地址的時間默認一般爲10min

    • 假冒機器網關

    • ARP欺騙

    • 解決方案,手工綁定網關

      arp -s IP MAC
      
  • 不能跨網段(路由器)通訊,解決方案:通過網關

    • 跨網關通訊中IP地址始終不變
    • MAC地址會與網關MAC互換

RARP協議

  • 反向ARP:通過MAC找尋IP

  • 確認網絡中不會有相同的IP地址

  • 自問自答形式,當其他主機回覆時,自答的IP將會

IGMP數據包

當對方系統是較老的系統時。發送大量的IGMP數據包,系統會崩潰

網關Gateway

路由器接口地址

查看網關:

route -n

修改主機名

vim /etc/sysconfig/network

DNS

利用dns服務器進行名詞解析

dns配置文件

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.247.2

排錯順序

主機網絡故障的排查思路

# ping網關 rounte -n
# 	如果網關無法ping通,說明與網關之間通信中斷,檢查路由表、網卡、是否添加了2條默認路由

# ping另一個網段主機
#	如果ping不同,說明路由器轉發問題

# 查看dns

抓包工具查看:wireshark

多網卡綁定bonding

冗餘、高可用及負載均衡

工作模式

Mode 0:balance-rr

輪轉策略Round-robin:從頭到尾順序的在每一個slave接口上面發送數據表,本模式提供負載均衡和容錯能力

Mode 1:active-backup

活動-備份(主備)策略:只有一個slave被激活,當且僅當活動的slave接口失敗時纔會激活其他slave,爲了避免交換機發生混亂,此綁定的MAC地址只有一個外部端口可見

Mode 3:broadcast

廣播策略:在所有的slave接口上傳送所有的報文,提供容錯能力

配置

加一個bond虛擬網卡的配置文件

vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS="miimon=100 mode=0" #mode是上述中的3種模式

在被綁定網卡配置文件中加入

MASTER=bond0
SLAVE=yes

查看配置信息

cat /proc/net/bond/bond0

更改網卡名

# 修改文件
vim /etc/default/grub
...
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
...


#之後運行命令,生成配置文件
grub2-mkconfig -o /etc/grub2/grub.cfg #CentOS7

grub-mkconfig -o /etc/grun/grun.cfg	#Ubuntu

# 重啓系統
reboot

Centos7上修改主機名

hostnamectl set-hostname NEWNAME

hostnamectl status

Centos7網絡配置工具

圖形工具
	nm-connection-editor
字符配置tui工具
	nmtui
命令行工具
	nmcli(推薦)

nmcli命令詳解

爲網卡設置多套配置文件

需要哪個就啓用哪個

創建

nmcli connection add con-name eth1-test ifname eth1 type ethernet ipv4.method manual ipv4.addresses 1.1.1.1/24

啓用配置文件

nmcli connection up eth1-test

如果是直接複製並修改文件的方式需要reload

nmcli connetcion reload

刪除配置文件

nmcli connection delete eth1-test2

網橋實現

橋接:

創建軟件網橋

nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0

查看配置文件

cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0

工具包

yum install bridge-utils

查看網橋

brctl show

查看CAM表

brctl showmacs br0

添加和刪除網橋

brctl addbr | delbr br0

添加和刪除網橋中網卡

brctl addif | delif eth0

注意:NetworkManager只支持以太網接口接口連接到網橋,不支持聚合接口

Ubuntu網絡配置

官網文檔

網卡名稱

默認ubuntu的網卡名稱和CentOS 7類似,如:ens33,ens38等

修改工卡名稱爲傳統命名方式:

  • 修改配置文件爲下面形式
vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
  • 生效新的grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg
  • reboot

配置自動獲取IP

cat /etc/netplan/01-netcfg.yaml
network:
	version: 2
	renderer: networkd
	ethernets:
	ens33:
		dhcp4: yes

# 嚴格縮進
修改網卡配置文件後需執行命令生效:netplan apply

配置靜態IP

cat /etc/netplan/01-netcfg.yaml
network:
	version: 2
	renderer: networkd
	ethernets:
	eth0:
		addresses:
			- 192.168.6.10/24
			- 10.10.10.10/24
		gateway4: 192.168.6.1
		nameservers:
			search: [mydomain, otherdomain]# 自動補全
			addresses: [223.5.5.5, 8.8.8.8, 1.1.1.1]# DNS

查看ip和gateway

ip addr
route -n

查看DNS

ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf


systemd-resolve –status

修改主機名

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