網絡協議和管理
網絡概念:
常見的網絡物理組建
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
MAC地址
MAC地址,物理地址,每個網絡設備都有獨立的MAC地址
6個字節bytes,前三個標明生產廠家,後三個是廠家獨立自由設置的地址
前3個字節中的第一個1字節中的第8位:
-
0:unicast單播
-
1:multicast多播組播
-
當所有字節都爲1時,即ff:ff:ff:ff 代表廣播BROADCAST
衝突檢測的載波偵聽多路訪問CSMA/CD
- 偵聽線路是否有數據正在發送
- 有衝突時利用算法後延若干毫秒,直至傳輸成功
特點:
不適合太多網絡設備
衝突域
廣播域
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
-
-
-
單臂路由、帶路由功能交換機,可以解決跨vlan通訊
-
事實上的網絡拓撲與邏輯上的網絡拓撲可能有區別
-
通過物理上的MAC加上邏輯上的IP網段區別不同VLAN
-
屬於數據鏈路層
分層的網絡架構
- 訪問層 Access Layer
- 將設備接入網絡的層級(終端接入)
- 交換機設備
- 分佈層 Distribution Layer
- 隔斷廣播域,路由,安全,遠程接入,訪問層匯聚
- 路由器設備、VLAN
- 核心層 Core Layer
- 企業級應用快速轉發
- 存儲服務器、磁盤整列、核心層交換機:背板寬帶要求非常高(每個網口都是萬兆的)
TCP/IP協議棧
TCP協議
-
面向連接協議
-
確認機制
-
將數據打包成段、排序
-
工作在傳輸層
-
半關閉
-
錯誤檢查
-
數據恢復、重傳
-
流量控制、滑動窗口
-
擁塞控制、慢啓動和擁塞避免算法
-
man 7 tcp
應用
- File sharing
- Downloading
TCP報文頭
)]
常見服務及其使用的端口號
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
- 當連接數滿時,訪問將被拒絕(黑客攻擊方式)
- 查看未完成連接隊列大小,建議調整大小爲1024以上
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
-
粗實線箭頭表示對客戶進程的正常變遷。
-
粗虛線箭頭表示對服務器進程的正常變遷。
-
另一種細線箭頭表示異常變遷。
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報頭
注意:標誌有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不能要
- 網絡ID
-
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地址
只在局域網中使用
非唯一
公有地址
查看公有地址
[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服務器
獲取: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