目录
- 1网络基础
- 1.1 网络概念
- 1.2常见的网络物理组件
- 1.3网络应用程序
- 1.3.1各种网络应用
- 1.3.2应用程序对网络的要求
- 1.4网络的特征
- 1.4.1速度(带宽)
- 1.4.2网络拓扑
- 1.5网络
- 1.5.1网络准和分层
- 1.5.2开放系统互联`OSI`
- 1.5.3网络的通信过程
- 1.5.3.1数据封装和数据解封
- 1.5.3.2协议数据单元`PDU`
- 1.5.3.3三种通讯模式
- 1.5.3.4冲突域和广播域
- 1.5.3.5三种通讯机制
- 2局域网 `Local Area Network`
- 2.1概述
- 2.1.1特点
- 2.1.2 主要功能
- 2.1.3 优点
- 2.1.4 标准
- 2.2 组网设备
- 2.2.1 网络线缆和接口
- 2.2.2.1 网线标准
- 2.2.2.2 网线线序和规范
- 2.2.2.3 光纤和接口`Fiber-Optic`
- 2.2.2 网络适配器
- 2.2.3 中继器和集线器
- 2.2.3.1 中继器 `repeater`
- 2.2.3.2 集线器 `hub`
- 2.3.4 网桥和交换机
- 2.3.4.1 网桥`Bridge`
- 2.3.4.2 交换机`switch`
- 2.3.5 路由器 `router`
- 2.3 以太网技术
- 2.3.1 概述
- 2.3.2 以太网MAC帧格式
- 2.3.3 MAC地址
- 2.3.4 冲突检测的载波侦听多路访问`CSMA/CD`
- 2.4 虚拟局域网 `VLAN`
- 2.4.1 VLAN 原理
- 2.4.2 IEEE 802.1Q 结构
- 2.5 分层的网络架构
- 3 `TCP/IP` 协议栈
- 3.1 TCP/IP 标准
- 3.1.1 TCP/IP 介绍
- 3.1.2 TCP/IP 分层
- 3.1.3 TCP/IP 通信过程
- 3.1.4 TCP/IP和OSI模型的比较
- 3.2 `transport` 传输层
- 3.2.1 TCP ( `Transmission Control Protocol` 传输控制协议)
- 3.2.1.1 TCP特性
- 3.2.1.2 TCP包头结构
- 3.2.1.3 TCP协议PORT
- 3.2.1.4 三次握手和四次挥手
- 3.2.1.5 有限状态机 ( FSM:`Finite State Machine` )
- 3.2.1.6 `sync`半连接和`accept`全连接队列
- 3.2.1.7 TCP超时重传
- 3.2.1.8 拥塞控制
- 3.2.1.9 内核TCP参数优化
- 3.2.2 UDP ( `User Datagram Protocol` 用户数据段协议 )
- 3.2.2.1 UDP特性
- 3.2.2.2 UDP包头
- 3.3 `Internet`层
- 3.3.1 `Internet Control Message Protocol`(Internet控制消息协议)
- 3.3.2 `Address Resolution Protocol` (地址解析协议)
- 3.2.2.1 `ARP`
- 3.2.2.2 Gratuitous ARP
- 3.3.3 `Reverse Address Resolution Protocol` (反向ARP)
- 3.3.4 `Internet` 协议
- 3.3.4.1 Internet 协议特征
- 3.3.4.2 IP PDU 报头
- 3.4 主机到主机的包传递完整过程
- 3.5 IP地址
- 3.5.1 IP地址组成
- 3.5.2 IP地址分类
- 3.5.3 公共和私有IP地址
- 3.5.4 特殊地址
- 3.5.5 保留地址
- 3.5.6 子网掩码`netmask`
- **相关公式:**
- 3.5.7 划分子网
- 3.5.8 优化IP地址分配
- 3.5.9 跨网络通信
- 3.5.10 动态主机配置协议 `DHCP`
- 4 网络配置
- 4.1 基本网络配置
- 4.2 CentOS 6 之前版本网卡名称
- 4.3 网络配置命令
- 4.3.1 网络配置方式
- 4.3.2 `ifconfig`命令
- 4.3.3 `route`命令
- 4.3.4 配置动态路由
- 4.3.5 `netstat`命令
- 4.3.6 显示接口统计数据
- 4.3.7 ip 命令
- 4.3.7.1 配置Linux网络属性
- 4.3.7.2 管理路由
- 4.3.8 `ss` 命令
- 4.4 网络配置文件
- 4.4.1 网络基本配置文件
- 4.4.2配置当前主机的主机名
- 4.4.3 本地主机名数据库和IP地址的映射
- 4.4.4 DNS域名解析
- 4.4.5 修改 `/etc/hosts`和`DNS`的优先级
- 4.4.6 路由相关的配置文件:
- 4.5 网卡别名
- 4.6 多网卡 `bonding`
- 4.6.1 `Bonding`工作模式
- 4.6.2 Bonding配置
- 4.7 CentOS 7 以上版网络配置
- 4.7.1 网卡命名机制
- 4.7.2 主机名
- 4.7.3 网络配置工具`nmcli`
- 4.7.4 `nmcli`实现`bonding`
- 4.7.5 网络组 `Network Teaming`
- 4.8 网桥
- 4.8.1 桥接原理
- 4.8.2 配置实现网桥
- 4.9 网络测试诊断工具
- 4.9.1 `tcpdump`
- 4.9.2 `nmap`
- 5 Ubuntu网络配置
- 5.1 主机名
- 5.2 网卡名称
- 5.3 Ubuntu网卡配置
- 5.3.1 配置自动获取IP
- 5.2.2 配置静态IP
- 5.3.3 配置多网卡静态IP和静态路由
- 5.3.4 单网卡桥接
- 5.3.5 多网卡桥接
- 5.3.6 双网卡绑定
- 5.3.7 双网卡绑定+桥接
- 5.3.8 网卡的多组绑定
- 5.3.9 网卡多组绑定+多组桥接
1网络基础
1.1 网络概念
计算机网络是一组计算机或网络设备通过有形的线缆或无形的媒介如无线,连接起来,按照一定的规则,进行通信的集合。
网络功能和优点
- 数据和应用程序
- 资源
- 网络存储
- 备份设备
作用范围分类
- 广域网(WAN,Wide Area Network)
- 城域网(MAN,Metropolitan Area Network)
- 局域网(LAN,Local Area Network)
1.2常见的网络物理组件
- 路由器
- 交换机
- PC
- 网络接口卡
- RJ-45连接器
1.3网络应用程序
1.3.1各种网络应用
- Web 浏览器 (Chrome、IE、Firefox等)
- 即时消息 (QQ、微信、钉钉等)
- 电子邮件 (Outlook、foxmail 等)
- 协作 (视频会议、VNC、Netmeeting、WebEx 等)
- web网络服务 (apache,nginx,IIS)
- 文件网络服务 (ftp,nfs,samba)
- 数据库服务 (MySQL,MariaDB,MongoDB)
- 中间件服务 (Tomcat,JBoss)
- 安全服务 (Netfilter)
1.3.2应用程序对网络的要求
批处理应用程序
- FTP、TFTP、库存更新
- 无需直接人工交互
- 带宽很重要,但并非关键性因素
交互式应用程序
- 库存查询、数据库更新
- 人机交互
- 因为用户需等待响应,所以响应时间很重要,但并非关键性因素,除非要等待很长时间
实时应用程序
- VoIP、视频
- 人与人的交互
- 端到端的延时至关重要
1.4网络的特征
- 速度
- 成本
- 安全性
- 可用性
- 可扩展性
- 可靠性
- 拓扑
1.4.1速度(带宽)
1Byts=8byts
100Mbps=102400Kbps/8=12800KBps=12.8M/s
1.4.2网络拓扑
拓扑结构一般是指由点和线排列成的几何图形
计算机网络的拓扑结构是指一个网络的通信链路和计算机结点相互连接构成的几何图形
拓扑分类
物理拓扑描述了物理设备的布线方式
逻辑拓扑描述了信息在网络中流动的方式
-
总线拓扑 所有设备均可接收信号
-
星型拓扑 通过中心点传输,单一故障点
-
扩展星型拓扑 比星型拓扑的复原能力更强
-
环拓扑 信号绕环传输,单一故障点
-
双环拓扑 信号沿相反方向传输,比单环的复原能力更强
-
全网状拓扑 容错能力强,实施成本高
-
部分网状拓扑 在容错能力与成本之间寻求平衡
1.5网络
1.5.1网络准和分层
旧模型:专有产品,由一个厂商控制应用程序和嵌入的软件
基于标准的模型:多厂商软件,分层方法
层次划分的必要性
计算机网络是曲许多硬件、软件和协议交织起来的复杂系统。由于网络设计十分复杂,如何设计、组织和实现计算机网络是一个挑战,必须要采用科学有效的方法
层次划分的方法
- 网络的第一层应当具有相对独立的功能
- 梳理功能之间的关系,使一个功能可以为实现另一个功能提供必要的服务,从而形成系统的层次结构
- 为提高系统的工作效率,相同或相近的功能仅在一个层次中实现,而且尽可能在较高的层次中实现
- 每一层只为相邻的上一层提供服务
层次划分的优点
- 各层之间相互独立,每一层只实现一种相对独立的功能,使问题复杂程度降低
- 灵活性好,各层内部的操作不会影响其他层
- 结构上可分割开,各层之间都可以采用最合适的技术来实现
- 易于实现和维护,因为整个系统已被分解成相对独立的子系统
- 能促进标准化工作,因为每一层的功能及其提供的服务都有了精确的说明
1.5.2开放系统互联OSI
在制定计算机网络标准方面,起着重大作用的两大国际组织是: 国际电信联盟电信标准化部门,与国际标准组织(ISO),虽然它们工作领域不同,
但随着科学技术的发展,通信与信息处理之间的界限开始变得比较模糊,这也成了国际电信联盟电信标准化部门和ISO共同关心的领域。1984年,
ISO发布了著名的OS(Open System Interconnection
)标准,它定义了网络互联的7层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型****:
第7层 应用层
应用层(Application Layer
)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP.、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等
第6层 表示层
主条目: 表示层(Presentation Layer) 把数据转换为能与接收者的系统格式兼容并适合传输的格式
第5层 会话层
会话层 (Session Layer) 负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接
第4层 传输层
专输层(Transport Layer)把传输表头 (TH加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议 (TCP) 等。
第3层 网络层
网络层(Network Layer)决定数据的路径选择和转寄,将网络表头 (NH加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议 (IP)等。包括Router路由器
第2层 数据链接层
数据链路层(Data Link Layer) 负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame)。数据链表头 (DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-F)和通用分组无线服务(GPRS)等。分为两个子层逻辑链路控制 (logical link control,LLC) 子层和介质访问控制 (Media access control,MAC)子层。包括switch交换机,网卡等
第1层 物理层
物理层(Physical Layer)在局部局域网上传送数据(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、hub集线器、中继器、网卡、主机接口卡等
1.5.3网络的通信过程
1.5.3.1数据封装和数据解封
向下封装->向上解封
FCS:校验位
1.5.3.2协议数据单元PDU
PDU:ProtocolData Unit,协议数据单元是指对等层次之间传递的数据单位
- 物理层的PDU是数据位 bit
- 数据链路层的PDU是数据frame
- 网络层的PDU是数据包packet
- 传输层的PDU是数据段segment
- 其他更高层次的PDU统称消息message
1.5.3.3三种通讯模式
- 单播
unicast
- 广播
broadcast
- 组播
multicast
1.5.3.4冲突域和广播域
- **冲突域:**两个网络设备同时发送数据,如果发生了冲突,则两个设备处于同一个冲突域,反之,则各自处于不同的冲突域
- **广播域:**一个网络设备发送广播,另一个设备收到了,则两个设备处于同一个广播域,反之,则各自处于不同的广播域
1.5.3.5三种通讯机制
- 单工通信:只有一个方向的通信
- 半双工通信HD Half: 通信双方都可以发送和接收信息,但不能同时发送,也不能同时接收
- 全双工通信FD Full: 通信双方可以同时发送和同时接收
[root@CentOS8 ~]#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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 显示up
link/ether 00:0c:29:02:76:5a brd ff:ff:ff:ff:ff:ff
[root@CentOS8 ~]#ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: No
Supported FEC modes: Not reported
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 10000Mb/s
Duplex: Full
Auto-negotiation: off
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
MDI-X: Unknown
Supports Wake-on: uag
Wake-on: d
Link detected: yes 显示yes
[root@CentOS8 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:02:76:5a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe02:765a/64 scope link
valid_lft forever preferred_lft forever
2局域网 Local Area Network
2.1概述
2.1.1特点
- 网络为一个单位所拥有
- 地理范围和站点数目均有限
2.1.2 主要功能
资源共享和数据通信
2.1.3 优点
- 能方便地共享昂贵的外部设备、主机以及软件、数据。从一个站点可以访问全网
- 便于系统的扩展和逐渐演变,各设备的位置可灵活的调整和改变
- 提高系统的可靠性、可用性和易用性
2.1.4 标准
IEEE(国际电子电气工程师协会)于1980年2月成立了局域网标准委员会(简称IEEE802委员会),专门从事局域网标准化工作,并制定了IEEE802标准。802标准所描述的局域网参考模型只对应OSI参考模型的数据链路层与物理层,它将数据链路层划分为逻辑链路层LLC子层和介质访问控制MAC子层
LLC子层负责向其上层提供服务
MAC子层的主要功能包括数据顿的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控等,MAC子层的存在屏蔽了不同物理链路种类的差异性
局域网标准
-
IEEE 802.1标准
局域网体系结构、网络互连、以及网络管理和性能测试
-
IEEE 802.2标准
逻辑链路控制LLC子层功能与服务
-
IEEE 802.3标准 主流
带冲突检测的载波侦听多路访问CSMA/CD总线介质访问控制子层与物理层规范
-
IEEE 802.4标准
令牌总线(
Token Bus
)介质访问控制子层与物理层规范 -
IEEE 802.5标准
令牌环 (
Token Ring
)介质访问控制子层与物理层规范 -
IEEE 802.6标准
城域网MAN介质访问控制子层与物理层规范
-
IEEE 802.7标准
宽带网络技术
-
IEEE802.8标准
光纤传输技术
-
EEE8U2.9标准
综合语音与数据局域网(IVD LAN)技术
-
IEEE 802.10标准
可互操作的局域网安全性规范(SILS)
-
IEEE 802.11标准
**无线**局域网技术
-
IEEE802.12标准
优先度要求的访问控制方法
-
IEEE802.13标准
未使用
-
IEEE 802.14标准
交互式电视网
-
IEEE80215标准
无线个人局域网(WPAN)的MAC子层和物理层规范。代表技术为蓝牙 (
Bluetooth
) -
IEEE 802.16标准
宽带无线局域网网络
-
IEEE802.20标准
移动宽带无线接入系统(MBWA,Mobile Broadband Wireless Access)
-
IEEE 802.22标准
无线地域网络 (Wireless RegionalArea Networks,WRAN)
无线网络标准
中国国家无线网络标准:WAPI
2.2 组网设备
- Router:路由器
- Switch:交换机
- Hub:集线器
2.2.1 网络线缆和接口
Twisted-Pair:双绞线
Coaxial:同轴电缆。10Base2:最大传输距离185m≈200m;10Base5=500m
2.2.2.1 网线标准
上世纪80年代初,诞生了最早的网线标准(CAT),这个标准一直沿用至今,主要根据带宽和传输速率来区分,从一类网线CAT1–八类网线CAT8
-
一类网线:主要用于传输语音,不同于数据传输主要用于八十年代初之前的电话线缆,已淘汰
-
二类网线:传输带宽为1MHZ,用于语音传输,最高数据传输速率4Mbps,常见于使用4Mbps规范令牌传递协议的旧的令牌网(Token Ring),已被淘汰
-
三类网线:该电缆的传输带宽16MHZ,用于语音传输及最高传输速率为10Mbps的数据传输,主要用于10BASE–T,被ANSI/TIA-568.C.2作为最低使用等级。
-
四类网线:该类电缆的传输频率为20MHZ,用于语音传输和最高传输速率16Mbps(指的是16Mbit/s令牌环)的数据传输,主要用于基于令牌的局域网和 10BASE-T/100BASE-T。最大网段长为100m,采用RJ形式的连接器。未被广泛采用。
-
五类线:可溯到1995年,传输带宽为100MHZ,可支持10Mbps和100Mbps传输速率(虽然现实中与理论值有一定差距),主要用于双绞线以太网(10BASE-T/100BASE-T),目前仍可使用,不过在新网络建设中已经难看到。
-
超五类线:标准于2001年被提出,传输带宽为100MHZ,近距离情况下传输速率已可达1000Mbps。它具有衰减小、串扰少,比五类线增加了近端串音功率和测试要求,所以它也成为了当前应用最为厂泛的网线
-
六类线:继CAT5e之后,CAT6标准被提出,传输带宽为250MHZ,最适用于传输速率为1Gbps的应用。改善了在串扰以及回波损耗方面的性能,这一点对于新一代全双工的高速网络应用而言是极重要的,还有一个特点是在4个双绞线中间加了十字形的骨架
-
超六类线: 超六类线是六类线的改进版,发布于2008年,同样是ANSI/TIA-568C.2和ISO/IEC 11801超六类/EA级标准中规定的一种双绞线电缆,主要应用于万兆位网络中。传输频率500 MHZ,最大传输速度也可达到10Gbps在外部串扰等方面有较大改善。
-
七类线:该线是ISO/IEC 11801 7类/F级标准中于2002年认可的一种双绞线,它主要为了适应万兆以太网技术的应用和发展。但它不再是一种非屏蔽双绞线了,而是一种屏蔽双绞线,所以它的传输频率至少可达600 MHz.传输速率可达10Gbps。
-
超七类线:相对于CAT7最大区别在于,支持的频率带宽提升到了1000MHz,在国内而言,七类网线已经有很少地方使用了,超七类就更加没有广泛的进入人们的生活,目前使用范围最广的是超五类、六类等网线
-
八类线CAT8:相关标准由美国通信工业协会(TIA)TR-43委员会在2016年正式发布,支持2000MHZ带宽
支持40Gbps以太网络,主要应用于数据中心
2.2.2.2 网线线序和规范
非屏蔽式双绞线(Unshielded Twisted-Pair Cable UTP
)
T568B和T568A
RJ-45 Connector和Jack
UTP直通线(Straight-Through)
UTP交叉线(Crossover)
TUP直通线和交叉线
双绞线针脚定义
注:BI:双向数据;RX:接收数据;Receive Data TX:传送数据;Transmit Data
2.2.2.3 光纤和接口Fiber-Optic
- Short wavelength(1000BASE-SX) 最远几百米
- Long wavelength/long haul(1000BASE-LX/LH) 最远几公里
- Extended distance(1000BASE-ZX)最远上百公里
2.2.2 网络适配器
MAC地址:media access control 媒体访问控制
作用
- 进行串行/并行转换
- 数据缓存
- 在计算机操作系统中安装设备驱动程序
- 实现以太网协议
类型
-
按总线接口类型进行分类
分为ISA网卡、PCI网卡、PCI-X 网卡、PCMCIA网卡和USB网卡等几种类型
-
按传输介质接口分类
细同轴电缆的BNC接口网卡、粗同轴电缆AUI接口网卡、以太网双绞线R)-5接口网卡、光纤F/0接口网卡、无线网卡等
-
按传输速率(带宽)分类
10Mbps网卡、100Mbps以太网卡、10Mbps/100Mbps自适应网卡、1000Mbps千兆以太网卡、40Gbps自适应网卡等
2.2.3 中继器和集线器
2.2.3.1 中继器 repeater
实际上是一种信号再生放大器,可将变弱的信号和有失真的信号进行整形与放大,输出信号比原信号的强度将大大提高,中继器不解释、不改变收到的数字信息,而只是将其整形放大后再转发出去
优点
- 易于操作
- 很短的等待时间
- 价格便宜
- 突破线缆的距离限制来扩展局域网段的距离
- 可用来连接不同的物理介质
缺点
- 采用中继器连接网络分支的数目要受具体的网络体系结构限制
- 中继器不能连接不同类型的网络
- 中继器没有隔离和过滤功能,无路由选择、交换、纠错/检错功能,一个分支出现故障可能会影响到其他的每一个网络分支
- 使用中继器扩充网络距离是最简单最廉价的方法,但当负载增加时,网络性能急剧下降,所以只有当网终负载很轻和网络时延要求不高的条件下才能使用
2.2.3.2 集线器 hub
集线器(Hub)工作在物理层,是中继器的一种形式,是一种集中连接缆线的网络组件,可以认为集线器是一个多端口的中继器,集线器能够提供多端口服务,主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上
Hub并不记忆报文是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口
Hub的特点:
- 共享带宽
- 半双工
2.3.4 网桥和交换机
2.3.4.1 网桥Bridge
网桥(Bridge)也叫桥接器,是连接两个局域网的一种存储/转发设备,根据MAC地址表对数据进行转发,可隔离碰撞域
网桥将网络的多个网段在数据链路层连接起来,并对网络数据进行管理
网桥的内部结构
优点
- 过滤通信量
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层、不同 MAC子层和不同速率(如10 Mb/s和100 Mb/s 以太网)的局域网
缺点
- 存储转发增加了时延
- 在MAC子层并没有流量控制功能
- 具有不同MAC子层的网段桥接在一起时时延更大
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而
- 产生网络拥塞。这就是所谓的广播风暴
2.3.4.2 交换机switch
交换机是工作在OSI参考模型数据链路层的设备,外表和集线器相似
它通过判断数据帧的目的MAC地址,从而将数据顿从合适端口发送出去
交换机是通过MAC地址的学习和维护更新机制来实现数据顿的转发
内部结构
工作原理
- 交换机根据收到数据中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中
- 交换机将数据顿中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发
- 如数据中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪 (flood)
- 广播恢和组播恢向所有的端口转发
集线器与交换机的比较
- 交换机属于数据链路层设备,而集线器属于物理层设备
- 集线器在转发帧时,不对传输介质进行检测,交换机在转发之前必须执行 CSMA/CD 算法。若在发送过程中出现碰撞,就必须停止发送和进行退避。所以交换机能隔离冲突,而集线器却只能增加冲突
- 交换机的每个端口可提供专用的带宽,而集线器的所有端口只能共享带宽
- 集线器只能实现半双工传送,而交换机可支持全双工传送
- 集线器和交换机都无法隔离广播域
2.3.5 路由器 router
为了实现路由,路由器需要做下列事情:
- 分隔广播域和冲突域
- 选择路由表中到达目标最好的路径
- 维护和检查路由信息
- 连接广域网
- 路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成
2.3 以太网技术
2.3.1 概述
以太网(Ethernet)是一种产生较早且使用相当广泛的局域网,由美国Xerox(施乐)公司的Palo Alto研究中心(简称为PARC)于20世纪70年代初期开始研究并于1975年研制成功
2.3.2 以太网MAC帧格式
2.3.3 MAC地址
在局域网中,硬件地址又称为物理地址或MAC地址 (因为这种地址用在MAC中)
IEEE 802标准为局域网规定了一种48位的全球地址(一般都简称为"地址,是局域网中每一台计算机固化在网卡ROM中的地址
IEEE的注册管理机构RA负责向厂家分配地址字段的前三个字节(即高位24位)
地址字段中的后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符,必须保证生产出的话配器没有重复地址
2.3.4 冲突检测的载波侦听多路访问CSMA/CD
工作原理
- 先听后发
- 边发边听
- 冲突停止
- 延迟重发
2.4 虚拟局域网 VLAN
2.4.1 VLAN 原理
虚拟局域网VLAN是由一些局域网网段构成的与物理位置无关的逻辑组
这些网段具有某些共同的需求。每一个VLAN 的都有一个明确的标识符,指明发送这个的工作站是属于哪-个VLAN。虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网
可以隔离广播域
优点
- 更有效地共享网络资源。如果用交换机构成较大的局域网,大量的广播报文就会使网络性能下降。VLAN能将广播报文限制在本VLAN范围内,从而提升了网络的效能
- 简化网络管理。当结点物理位置发生变化时,如跨越多个局域网,通过逻辑上配置VLAN即可形成网络设备的逻辑组,无需重新布线和改变IP地址等。这些逻辑组可以跨越一个或多个二层交换机
- 提高网络的数据安全性。一个VLAN中的结点接收不到另一个VLAN中其他结点的帧
虚拟局域网的实现技术
- 基于端口的VLAN
- 基于MAC地址的VLAN
- 基于协议的VLAN
- 基于网络地址的VLAN
2.4.2 IEEE 802.1Q 结构
IEEE 802.1Q 帧结构
VLAN 标签各字段含义
- TPID: Tag Protocolldentifier (标签协议标识符),2Byte,表示类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.10的设备收到这样的帧,会将其丢弃,各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时,为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致
- PRI: Priority,3bit,表示数据的802.1p (是IEEE 80210的扩展协议)优先级。取值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧
- CF: Canonical Format lndicator (标准格式指示位),1bit,表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0
- VID:VLANID,12bit,表示该数据所属VLAN的编号。VLAN D取值范围是04095。由于0和4095为协议保留取值,所以VLANID的有效取值范围是14094
2.5 分层的网络架构
3 TCP/IP
协议栈
3.1 TCP/IP 标准
3.1.1 TCP/IP 介绍
Transmission ControlProtocol/lnternet Protocol 传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
最早发源于1969年美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
3.1.2 TCP/IP 分层
共定义4层,与OSI参考模型的分层有对应关系
TCP/IP 应用层
3.1.3 TCP/IP 通信过程
3.1.4 TCP/IP和OSI模型的比较
相同点
- 两者都是以协议栈的概念为基础
- 协议栈中的协议彼此相互独立
- 下层对上层提供服务
不同点
- OSI是先有模型;TCP/IP是先有协议,后有模型
- OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
- 层次数量不同
3.2 transport
传输层
TCP and UDP
3.2.1 TCP ( Transmission Control Protocol
传输控制协议)
3.2.1.1 TCP特性
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
- 拥塞控制,慢启动和拥塞避免算法
更多关于tcp的内核参数,可参看man 7tcp
3.2.1.2 TCP包头结构
TCP包头
- **源端口、目标端口:**计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2/16个,即65536
- **序列号:**表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始
- **确认号:**表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方: 我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
- 数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
- **URG:**表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
- **ACK:**表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
- **PSH:**提示接收端应用程序应该立即从TP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为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报文段称为结束报文段
- 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling
- factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
- 校验和:提供额外的可靠性
- 紧急指针:标记紧急数据在数据字段中的位置
- 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2A4-1)*4-20=40字节
TCP包头常见选项:
-
最大报文段长度MSS(Maximum Segment Size),通常1460字节
指明自己期望对方发送TCP报文段时那个数据字段的长度。比如: 1460字节。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/41。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
MTU和MSS倩的关系:MTUEMSS+IP Header+TCP Header
甬信双方最终的MSS值=较小MTU-IP Header-TCP Header
-
窗口扩大Window Scale
为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535,但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项
-
时间戳Timestamps
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2A32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文
3.2.1.3 TCP协议PORT
传输层通过port号,确定应用层协议,范围0-65535
维基百科: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
IANA互联网数字分配机构负责域名,数字资源,协议分配
- 0-1023:系统端口或特权端口(仅管理员可用),众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh),80/tcp(http),443/tcp(https)
- 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer),1521/tcp(oracle)3306/tcp(mysql),11211/tcp/udp(memcached)
- 49152-65535:动态或私有端口,客户端随机使用端口,范围定义: /proc/sys/net/ipv4/ip_local_port_range
[root@CentOS8 ~]#cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
临时修改:
[root@CentOS8 ~]#echo 20000 60000 > /proc/sys/net/ipv4/ip_local_port_range
[root@CentOS8 ~]#cat /proc/sys/net/ipv4/ip_local_port_range
20000 60000
Linux里,/etc/services文件保存了常见服务器程序的端口号:
[root@CentOS8 ~]#grep 3306 /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
mysqlx 33060/tcp # MySQL Database Extended Interface
在Windows里,C:\Windows\System32\drivers\etc的services文件同样保存了常见程序的端口号:
例:监听与连接
TCP:
服务端:
[root@CentOS8 ~]#nc -l 9527
客户端:
[root@centos8_2 ~]#nc 10.0.0.201 9527
[root@CentOS8 ~]#ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 10.0.0.201:22 10.0.0.1:51460
ESTAB 0 0 10.0.0.201:9527 10.0.0.209:59712
此时可以互相发消息,因为TCP是全双工(不过,nc只能连接1个)
[root@CentOS8 ~]#nc -l 9527
hello ,C8
c8_2
[root@centos8_2 ~]#nc 10.0.0.201 9527
hello ,C8
c8_2
-------------------------------------------------------------------------------------------------
UDP:
服务端:加个-u即可
[root@CentOS8 ~]#nc -l 7777 -u
hello
客户端:
[root@centos8_2 ~]#nc 10.0.0.201 7777 -u
hello
[root@CentOS8 ~]#ss -ntu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp ESTAB 0 0 10.0.0.201:7777 10.0.0.209:58046
例:端口被占用,查看占用端口的应用程序
[root@CentOS8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@CentOS8 ~]#nc -l 22
Ncat: bind to :::22: Address already in use. QUITTING.
[root@CentOS8 ~]#ss -ntlp 方法1
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=899,fd=4))
LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=984,fd=10))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=899,fd=6))
[root@CentOS8 ~]#lsof -i :22 方法2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 899 root 4u IPv4 28779 0t0 TCP *:ssh (LISTEN)
sshd 899 root 6u IPv6 28781 0t0 TCP *:ssh (LISTEN)
sshd 88022 root 5u IPv4 732769 0t0 TCP CentOS8.Joyce.person1:ssh->10.0.0.1:51460 (ESTABLISHED)
sshd 88024 root 5u IPv4 732785 0t0 TCP CentOS8.Joyce.person1:ssh->10.0.0.1:51461 (ESTABLISHED)
sshd 88039 root 5u IPv4 732769 0t0 TCP CentOS8.Joyce.person1:ssh->10.0.0.1:51460 (ESTABLISHED)
例:判断端口是否打开
方法1:
[root@CentOS8 ~]#echo :8008 | grep ":80\>"
[root@CentOS8 ~]#echo :80 | grep ":80\>"
:80
方法2:
[root@CentOS8 ~]#< /dev/tcp/10.0.0.201/22
[root@CentOS8 ~]#echo $?
0
[root@CentOS8 ~]#< /dev/tcp/10.0.0.201/80
-bash: connect: Connection refused
-bash: /dev/tcp/10.0.0.201/80: Connection refused
[root@CentOS8 ~]#echo $?
1
例:重定向访问百度
[root@centos8 ~]#exec 8<>/dev/tcp/www.baidu.com/80
[root@CentOS8 ~]#ll /proc/$$/fd
total 0
lrwx------ 1 root root 64 Aug 5 13:49 0 -> /dev/pts/2
lrwx------ 1 root root 64 Aug 5 13:49 1 -> /dev/pts/2
lrwx------ 1 root root 64 Aug 5 13:49 2 -> /dev/pts/2
lrwx------ 1 root root 64 Aug 5 13:49 255 -> /dev/pts/2
lr-x------ 1 root root 64 Aug 5 13:49 3 -> /var/lib/sss/mc/passwd
lrwx------ 1 root root 64 Aug 5 13:49 4 -> 'socket:[741410]'
lrwx------ 1 root root 64 Aug 5 13:57 8 -> 'socket:[753998]' 8
[root@centos8 ~]#echo -e 'GET / HTTP/1.1\n' >& 8
[root@centos8 ~]#cat <& 8
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 9508
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html
Date: Sat, 05 Aug 2023 05:56:06 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
TCP端口号通信过程
TCP序列(Sequence number)号和确认(Acknowledgment number)号
但效率较低,每次都要确定
TCP确认和固定窗口
size = 1,每一个包,即发一次确认一次,和上面基本相同
size = 3,每3个包确认一次
但size是固定的,无法修改。因此出现滑动窗口
TCP滑动窗口
可以根据Receiver的接受能力来调整自己的发送包的数量
3.2.1.4 三次握手和四次挥手
建立连接
TCP三次握手
TCP四次挥手
3.2.1.5 有限状态机 ( FSM:Finite State Machine
)
虚线:服务器 ;实线:客户端
- CLOSED:没有任何连接状态
- LISTEN:侦听状态,等待来自远方TCP端口的连接请求
- SYN-SENT:在发送连接请求后,等待对方确认
- SYN-RECEIVED:在收到和发送一个连接请求后,等待对方确认
- ESTABLISHED:代表传输连接建立,双方进入数据传送状态
- FIN-WAIT-1 :主动关闭,主机已发送关闭连接请求,等待对方确认
- FIN-WAIT-2:主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
- TIME-WAIT:完成双向传输连接关闭,等待所有分组消失
- CLOSE-WAIT :被动关闭,收到对方发来的关闭连接请求,并已确认
- LAST-ACK :被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
- CLOSING :双方同时尝试关闭传输连接,等待对方确认
客户端先发送一个FIN给服务端,自己进入FIN_WAIT1状态,这时等待接收服务端报文,该报文会有三种可能:
- 只有服务端的ACK
- 只有服务端的FIN
- 基于服务端的ACK,又有FIN
- 只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间,RFC 1122标准的建议值是2min)。客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
- 只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
- 同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态
客户端的典型状态转移
客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态
此后connect系统调用可能因为如下两个原因失败返回:
- 如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME WAT状态的连接所占用,则服务器将给客户端发送一个复位报文段,connect调用失败。
- 如果目标端口存在,但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 指定孤儿连接在内核中生存的时间
客户机端的三次握手和四次挥手的状态转换
服务器端的三次握手和四次挥手的状态转换
3.2.1.6 sync
半连接和accept
全连接队列
/proc/sys/net/ipv4/tcp_max_syn_backlog
未完成连接队列大小,默认值128,建议调整大小为1024以上/proc/sys/net/core/somaxconn
全连接队列,完成连接队列大小,默认值128,建议调整大小为1024以上
3.2.1.7 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)
3.2.1.8 拥塞控制
网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分: 慢启动(slow start)、拥塞避免(congestion avoidance) 、快速重传 (fast retransmit) 和快速恢复 (fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
当前所使用的拥塞控制算法:/proc/sys/net/ipv4/tcp_congestion_control
[root@CentOS8 ~]#cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
3.2.1.9 内核TCP参数优化
参看帮助:man tcp
编辑文件/etc/sysctl.conf,加入以下内容: 然后执行 sysctl -p 让参数生效
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_orphans = 16384
net.core.somaxconn = 16384
net.core.netdev_max_back1og = 16384
作用说明:
- net.ipv4.tcp_fin_timeout 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认值是60秒。该参数对应系统路径为: /proc/sys/net/ipv4/tcp_fin_timeout 60
- net.ipv4.tcp_tw_reuse 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认值为0,表示关闭。该参数对应系统路径为: /proc/sys/net/ipv4/tcp_tw_reuse 0
- net.ipv4.tcp_tw_recycle 表示开启TCP连接中TIME-WAIT sockets的快速回收。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0,表示关闭。提示: reuse和recycle这两个参数是为防止生产环境下Web、Squid等业务服务器time_wait网络状态数量过多设置的。
- net.ipv4.tcp_syncookies 表示开启SYN Cookies功能。当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,这个参数也可以不添加。该参数对应系统路径为: /proc/sys/net/ipv4/tcp_syncookies,默认值为1
- net.ipv4.tcp_keepalive_time 表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,建议改为10分钟。该参数对应系统路径为: /proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒。
- net.ipv4.ip_local_port_range 该选项用来设定允许系统打开的端口范围,即用于向外连接的端口范围。该参数对应系统路径为: /proc/sys/net/ipv4/ip_local_port_range32768 61000
- net.ipv4.tcp_max_syn_backlog 表示SYN队列的长度,即半连接队列长度,默认为1024,建议加大队列的长度为8192或更多,这样可以容纳更多等待连接的网络连接数。该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值。该参数对象系统路径为: /proc/sys/net/ipv4/tcp_max_syn_backlog
- net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,对于Apache、Nginx等服务器来说可以将其调低一点,如改为5000~30000,不通业务的服务器也可以给大一点,比如LVS、Squid。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_maxtw_buckets
- netipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认值为5
- netipv4.tcp_syn_retries 表示在内核放弃建立连接之前发送SYN包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries默认值为6
- netipv4.tcp_max_orphans 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数值,孤立连接将被立即被复位并打印出警告信息。这个限制只有为了防止简单的DoS攻击,不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。该参数对应系统路径为: /proc/sys/net/ipv4/tcp_maxorphans,默认值8192
- net.core.somaxconn 同时发起的TCP的最大连接数,即全连接队列长度,在高并发请求中,可能会导致链接超时或重传,一般结合并发请求数来调大此值。该参数对应系统路径为: /proc/sys/net/core/somaxconn,默认值是128
- net.core.netdev_max backlog 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数。该参数对应系统路径为: /proc/sys/net/core/netdev max backlog,默认值为1000
3.2.2 UDP ( User Datagram Protocol
用户数据段协议 )
3.2.2.1 UDP特性
- 工作在传输层
- 提供不可靠的网络访问
- 非面向连接协议
- 有限的错误检查
- 传输性能高
- 无数据恢复特性
更多关于udp的内核参数,可参看man 7udp
3.2.2.2 UDP包头
3.3 Internet
层
3.3.1 Internet Control Message Protocol
(Internet控制消息协议)
范例: 利用icmp协议判断网络状态
[rootacentos7 ~]#ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data
64 bytes from 10.0.0.8: icmp_seq=1 tt1=64 time=0.307 ms
64 bytes from 10.0.0.8: icmp_seq=2 tt1=64 time=0.344 ms
64 bytes from 10.0.0.8: icmp_seq=3 tt1=64 time=0.335 ms
64 bytes from 10.0.0.8: icmp_seg=4 tt1=64 time=0.441 ms
[root@centos7 ~]#ping 10.0.0.81
PING 10.0.0.81 (10.0.0.81) 56(84) bytes of data.
From 10.0.0.7 icmp_seq=l Destination Host Unreachable
From 10.0.0.7 icmp_seq=2 Destination Host Unreachable
[root@centos7 ~]#ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
From 10.0.0.8 icmp_seq=l Destination port unreachable
From 10.0.0.8 icmp_seq=2 Destination port Unreachable
[root@centos8 ~]#ping www.magedu.org
ping: www.magedu.org: Name or service not known
[root@centos8 ~]#ping -s 65508 10.0.0.8
Error: packet size 65508 is too large. Maximum is 65507
[root@centos8 ~]#ping -s 65507 -f 10.0.0.8
PING 172.16.21.111 (172.16.21.111) 65507(65535) bytes of data.
3.3.2 Address Resolution Protocol
(地址解析协议)
3.2.2.1 ARP
ARP 地址解析协议由互联网工程任务组(IETF)在1982年11月发布的RFC 826中描述制定,是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存
同网段的ARP
跨网段的ARP
例:ARP静态绑定(将IP和mac,防止ARP欺骗)
[root@centos8 ~]#arp -s 10.0.0.6 00:0c:29:32:80:38
[root@centos8 ~]#arp -n
Address Hwtype Hwaddress FTags Mask Iface
10.0.0.6 ether 00:0c:29:32:80:38 CM eth0
10.0.0.7 ether 00:0c:29:32:80:38 C eth0
10.0.0.1 ether 00:50:56:c0:00:08 C eth0
范例:kali 系统实现arp 欺骗上网流量劫持
#启动路由转发功能
[root@kali ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
#安装包
[root@kali ~]# apt-get install dsniff
#欺骗目标主机,本机是网关
[root@kali ~]# arpspoof -i eth0 -t 被劫持的目标主机IP 网关IP
#欺骗网关,本机是目标主机
[root@kali ~]# arpspoof -i eth0 -t 网关IP 被劫持的目标主机工P
3.2.2.2 Gratuitous ARP
Gratuitous ARP也称为免费ARP,无故ARP。Gratuitous ARP不同于一般的ARP请求,它并非期待得到ip对应的mac地址,而是当主机启动的时候,将发送一个Gratuitous arp请求,即请求自己的ip地址的mac地址
免费ARP可以有两个方面的作用:
- 验证IP是否冲突:一个主机可以通过它来确定另一个主机是否设置了相同的IP地址
- 更换物理网卡:如果发送ARP的主机正好改变了物理地址(如更换物理网卡),可以使用此方法通知网络中其它主机及时更新ARP缓存
3.3.3 Reverse Address Resolution Protocol
(反向ARP)
RARP即将MAC转换成IP
3.3.4 Internet
协议
3.3.4.1 Internet 协议特征
- 运行于OSI 网络层
- 面向无连接的协议
- 独立处理数据包
- 分层编址
- 尽力而为传输
- 无数据恢复功能
3.3.4.2 IP PDU 报头
IP PDU报文格式:
-
版本:占4位指IP协议的版本目前的IP协议版本号为4
-
首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过,后改名为区分服务只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
-
总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元MTU
-
标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1,也用于数据包分片,在同一个包的若千分片中,该值是相同的
-
标志(flag):占3位目前只有后两位有意义
DF: Don’t Fragment 中间的一位,只有当DF=0 时才允许分片
MF: More Fragment 最后一位,MF=1表示后面还有分片,MF=0 表示最后一个分片
IP PDU 报头
-
片偏移:占13位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
-
生存时间:占8位记为**TTL(Time To Live)**数据报在网络中可通过的路由器数的最大值TTL 字段是由发送端初始设置一个8 bit字段.推荐的初始值由分配数字 RFC指定,当前值为64。发送ICMP 回显应答时经常把 TTL设为最大值255
Windows里ttl:128;Linux:64;某些网络设备:255
-
协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程,1表示为ICMP协议,2表示为IGMP 协议,6表示为TCP 协议17表示为UDP协议
-
首部检验和:占16位,只检验数据报的首部不检验数据部分,这里不采用 CRC 检验码而采用简单的计算方法
-
源地址和目的地址:都各占4字节,分别记录源地址和目的地址
例:判断IP地址冲突
[root@centos8 ~]#arping 10.0.0.6
ARPING 10.0.0.6 from 10.0.0.8 etho
Unicast reply from 10.0.0.6 [00:0C:29:E0:2F:37] 0.779ms
Unicast reply from 10.0.0.6 [00:0c:29:32:80:38] 0.798ms
Unicast reply from 10.0.0.6 [00:0C:29:32:80:38] 0.926ms
Unicast reply from 10.0.0.6 [00:0C:29:32:80:38] 0.864ms
Acsent 3 probes (1 broadcast(s))
Received 4 response(s)
协议域:
3.4 主机到主机的包传递完整过程
两个主机程序进行通信:
- 知道对方IP,间接或直接的方式
- 是否在同一网段。路由
- ARP IP ----> MAC
- 三次握手(TCP)
- 通信
3.5 IP地址
3.5.1 IP地址组成
它们可唯一标识IP 网络中的每台设备,每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
IP地址由两部分组成
- 网络ID:标识网络,每个网段分配一个网络ID,处于高位
- 主机ID:标识单个主机,由组织分配给各设备,处于低位
IPv4地址格式:点分十进制记法
3.5.2 IP地址分类
网段数:2^可变网络ID的位数
主机数:2^主机ID的位数-2
A类:
- 0 0000000 - 0 1111111.X.Y.Z:0-127.X.Y.Z(最开头固定是0,后面7位可变,但127回环,所以最终可用范围是1-126)
- 前8位高位:网络ID;后24位低位:主机ID
- 网络数:126=2^7去除0和127
- 每个网络中的主机数:2^24-2=16777214,去除主机ID全为1和全为0的
- 默认子网掩码:255.0.0.0
- 私网地址: 10.0.0.0
- 范例:114.114.114.114,8.8.8.8,1.1.1.1
B类
- 10 000000-10 111111.X.Y.Z:128-191.X.Y.Z
- 前16位高位:网络ID;后16位低位:主机ID
- 网络数:2^14=16384
- 每个网络中的主机数:2^16-2=65534
- 默认子网掩码:255.255.0.0
- 私网地址:172.16.0.0-172.31.0.0
- 例:180.76.76.76,172.16.0.1
C类
- 110 00000-110 11111.X.Y.Z:192-223.X.Y.Z
- 前24位高位:网络ID;后8位低位:主机ID
- 网络数:2^21=2097152
- 每个网络中的主机数:2^8-2=254
- 默认子网掩码:255.255.255.0
- 私网地址: 192.168.0.0-192.168.255.0
- 范例:223.6.6.6
D类:组/多播,1110 0000-1110 1111.XY.Z:224-239.X.Y.Z
E类:保留未使用,240-255
3.5.3 公共和私有IP地址
私有IP地址:不直接用于互联网,通常在局域网中使用
类 | 私有地址范围 | 数量 |
---|---|---|
A | 10.0.0.0 - 10.255.255.255 | 256个网段 |
B | 172.16.0.0 - 172.31.255.255 | 16个网段 |
C | 192.168.0.0 - 192.168.255.255 | 256个网段 |
公有IP地址:互联网上设备拥有的唯一地址
3.5.4 特殊地址
-
0.0.0.0
0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络
-
255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
-
127.0.0.1——127.255.255.254
本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的 数据包
-
224.0.0.0——239.255.255.255
组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
-
169.254.x.x
如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址
3.5.5 保留地址
如:172.16.0.0网络中的两个地址
- 172.16.0.0:后面16个0,网络本身
- 172.16.255.255:后面16个1,又称子网广播
3.5.6 子网掩码netmask
-
CIDR无类域间路由:目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围
-
CIDR无类域间路由表示法: IP/网络ID位数,如: 172.16.0.100/16
-
netmask子网掩码:32位(IPV4)或128位(IPV6)的数字,和IP成对使用,用来确认IP地址中的网络ID和主机ID,对应网络
ID的位为1,对应主机ID的位为0,范例:255.255.255.0
子网掩码的八位
相关公式:
- 一个网络的最多的主机数=2^主机ID位数-2
- 网络(段)数=2网络ID中可变的位数
- 网络ID=IP与netmask,即netmaskID = IP ^ netmask,可以判断当前主机在哪个网段
- 划分子网:将大网分成若干个小网,网络ID向主机ID借N位,可以划分为2^N个子网
- 超网:把多个小网合并成一个大网,主机ID向网络ID借位
例:
分配给120个主机使用,求子网掩码:
先算主机数:2^x-2 >= 120,得x=7,所以网络ID位数=32-7=25
所以子网掩码有25个1,即11111111 11111111 11111111 10000000
即255.255.255.128,或表示为 /25
判断对方主机是否在同一个网段:
用自已的子网掩码分别和自已的IP及对方的IP相与,比较结果,相同则同一网络,不同则不同网段
例:判断A:192.168.1.100 /24 和 B:192.168.2.100 /24 是否在同一网段
A:192.168.1.100 /24 = netmask:255.255.255.0
B:192.168.2.100 /24 = netmask:255.255.255.0
192.168.1.100 = 11000000 10101000 00000001 1100100
^255.255.255.0 = 11111111 11111111 11111111 0000000
= 11000000 10101000 00000001 0000000
= 192.168.1.0
同理:192.168.2.100 ^255.255.255.0 = 192.168.2.0 != 192.168.1.0,所以不等
例:判断A:192.168.1.100 /16 和 B:192.168.2.100 /16 是否在同一网段
A:192.168.1.100 /16 = netmask:255.255.0.0
B:192.168.2.100 /16 = netmask:255.255.0.0
192.168.1.100 = 11000000 10101000 00000001 1100100
^255.255.0.0 = 11111111 11111111 00000000 0000000
= 11000000 10101000 00000000 0000000
= 192.168.0.0
同理:192.168.2.100 ^255.255.255.0 = 192.168.0.0 == 192.168.0.0,所以等
例:判断A:192.168.1.100 /24 和 对方B:192.168.2.100 /16 是否在同一网段
A:192.168.1.100 /24 = netmask:255.255.255.0
B:192.168.2.100 /16 = netmask:255.255.0.0
192.168.1.100 = 11000000 10101000 00000001 1100100
^255.255.255.0 = 11111111 11111111 11111111 0000000
= 11000000 10101000 00000001 0000000
A = 192.168.1.0
同理:192.168.2.100 ^255.255.255.0 = 192.168.2.0 != 192.168.1.0,所以不等
#不过,如果是B访问A,则是用B的子网掩码分别与B和A的IP,这时候结果相同,则可以直接ARP广播
#因此,网络具有方向性,不同方向可能有不同的结果
注意:判断对方主机是否和自己一个网段,要用自己的子网掩码分别和自己的IP以及对方的IP与,再判断结果。
范例:
172.16.1.100/28
1. 此主机所在的网段最多有多少主机数?
2^(32-28)-2=16-2=14
2. 网络ID?
172.16.1.100 ^ 255.255.255.240
=172.16.1.01100100 ^1111 0000
=172.16.1.0110 0000
=172.16.1.96
3. 此网段中的主机中主机最小的IP?最大的IP?
172.16.1.0110 0000
0000最小,大1,即0001,172.16.1.0110 0001 = 172.16.1.97
1111最大,小1,即1110,172.16.1.0110 1110 = 172.16.1.110 = 96+2+4+8
203.110.228.200 / 28
1. 此主机所在的网段最多有多少主机数?
2^(32-28)-2=16-2=14
2. 网络ID? 200=128+64+8 = 1100 1000
203.110.228.200 ^ 255.255.255.240
=203.110.228.1100 1000 ^1111 0000
=203.110.228.1100 0000
=203.110.228.192
3. 此网段中的主机中主机最小的IP?最大的IP?
203.110.228.1100 1000
0000最小,大1,即0001, 203.110.228.1100 0001 = 203.110.228.193
1111最大,小1,即1110, 203.110.228.1100 1110 = 203.110.228.206 = 128+64+8+4+2
3.5.7 划分子网
划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID位数变多,网络ID位向主机ID位借位
可变子网掩码
Subnet地址
例:
10.0.0.0 /
借1位:
10.0 000 0000.0.0/8
10.1 000 0000.0.0/8
未分时最小的IP地址10.0 000 0000.0.1
最大10.1 111 1111.255.254
网络ID向主机ID借1位,划分了2^1=2个子网
第一个子网网络ID:10.0.0.0/9 = 10.0000 0000.0.0/9
第二个子网网络ID:10.128.0.0/9 = 10.1000 0000.0.0/9
每个子网主机个数:2^23-2=
借2位:
10.00 00 0000.0.0/8
10.01 00 0000.0.0
10.10 00 0000.0.0/8
10.11 00 0000.0.0
最小10.00 00 0000.0.1
最大10.11 11 1111.255.254
网络ID向主机ID借2位,划分了2^2=4个子网
第一个子网网络ID:10.0.0.0/10 = 10.0000 0000.0.0/10
第二个子网网络ID:10.64.0.0/10 = 10.0100 0000.0.0/10
第三个子网网络ID:10.128.0.0/10 = 10.1000 0000.0.0/10
第四个子网网络ID:10.192.0.0/10 = 10.1100 0000.0.0/10
每个子网主机个数:2^22-2=
例:中国移动10.0.0.0/8 给32个各省公司划分对应的子网
1、每个省对应一个子网,netmask
划分32个子网,需要2^5=32即5位
10.11111 000.0.0 = 255.248.0.0
2、每个省公司的子网的主机数有多少?
2^(32-8-5)-2=524286
3、河南省得到第10个子网,网络ID?
第一个子网的网络ID:
10.00000 000.0.0
第十个:(加9,同时记得在前面网络ID加,而不是后面主机ID)
10.00000 000.0.0+9 = 10.01001 000.0.0 = 10.72.0.0 /13
4、河南省得到第10个子网的最小IP和最大IP
第十个子网:
10.72.0.0/13 = 10.0100 1000.0.0
最小:10.0100 1000.0.0000 0001 = 10.72.0.1,全变000 0,最后+1即可
最大:10.0100 1111.255.254 = 10.79.255.254,变1111,最后-1即可
5、所有子网中,最小的和最大的子网的网络ID
10.00000 000.0.0 = 10.0.0.0
10.11111 000.0.0 = 10.248.0.0
3.5.8 优化IP地址分配
合并超网:将多个小网络合并成一个大网,主机ID位向网络ID位借位
8个C类网段
220.78.168.0/24
220.78.169.0/24
220.78.170.0/24
220.78.171.0/24
220.78.172.0/24
220.78.173.0/24
220.78.174.0/24
220.78.175.0/24
220.78.168.0/24 220.78.10101 000.0
220.78.169.0/24 220.78.10101 001.0
220.78.170.0/24 220.78.10101 010.0
......
220.78.175.0/24 220.78.10101 111.0
前21位都相同
合并成
220.78.168.0/21
3.5.9 跨网络通信
跨网络通信:路由,选择路径
路由分类
- 主机路由,更精确,详细到每个主机
- 网络路由
- 默认路由,唯一的口
优先级:精度越高,优先级越高
3.5.10 动态主机配置协议 DHCP
DHCP:走UDP
服务端:67
客户端:68
4 网络配置
4.1 基本网络配置
将Linux主机接入到网络,需要配置网络相关设置
一般包括如下内容
-
主机名
-
IP/netmask
-
路由:默认网关
-
DNS服务器
主DNS服务器
次DNS服务器
第三个DNS服务器
4.2 CentOS 6 之前版本网卡名称
接口命名方式: CentOS 6
以太网: eth[0,1,2...]
ppp: ppp[0,1,2....]
网络接口识别并命名相关的udev配置文件
/etc/udev/rules.d/70-persistent-net.rules
查看网卡:
dmesg|grep -i eth
ethtool-i eth0
卸载网卡驱动
modprobe-r e1000
rmmode1000
装载网卡驱动
modprobe e1000
例:修改网卡名称:
1、修改文件
[root@CentOS6 ~]#vim /etc/udev/rules.d/70-persistent-net.rules 修改文件
[root@CentOS6 ~]#modprobe-r e1000 卸载网卡驱动
[root@CentOS6 ~]#modprobe e1000 重装网卡驱动
2、命令直接修改,临时生效
[root@CentOS6 ~]#ip link set eth0 down 禁用网卡
[root@CentOS6 ~]#ip link set eth0 name eth000 修改名为eth000
[root@CentOS6 ~]#lp link set eth000 up 启用网卡
4.3 网络配置命令
4.3.1 网络配置方式
-
静态指定:
ifconfig,route,netstat
ip:object (link,addr,route),ss,tc
system-config-network-tui,setup
配置文件
-
动态分配:DHCP:Dynamic Host Configuration Protocol 动态主机配置协议
4.3.2 ifconfig
命令
来源于net-tools包,推荐使用 ip 命令代替
ifconfig [interface]
ifconfig -a
ifconfig IFACE[up|down] 启用与禁用网卡
ifconfig interface [aftype] options | address
...
ifconfig IFACE IP/netmask [up]
ifconfig IFACE IP netmask NETMASK
注意:立即生效
启用混杂模式:[-]promisc
例:
清空eth1上的地址
[root@CentOS8 ~]#ifconfig eth1 0.0.0.0/24
[root@CentOS8 ~]#ifconfig eth1 down 禁用网卡
[root@CentOS8 ~]#ifconfig eth1 up 启用网卡
为eth0分配一个新的名eth0:1,以及新的地址192.168.1.1
[root@CentOS8 ~]#ifconfig eth0:1 192.168.1.1/24
[root@CentOS8 ~]#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.201 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe02:765a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:02:76:5a txqueuelen 1000 (Ethernet)
RX packets 237104 bytes 241769748 (230.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 276875 bytes 130935863 (124.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:02:76:5a txqueuelen 1000 (Ethernet)
删除eth0:1的别名
[root@CentOS8 ~]#ifconfig eth0:1 down
[root@CentOS8 ~]#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.201 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe02:765a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:02:76:5a txqueuelen 1000 (Ethernet)
RX packets 237134 bytes 241772352 (230.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 276898 bytes 130938335 (124.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
例:查看网卡流量情况
[root@CentOS8 ~]#ifconfig -s [网卡名] 不过运行后即结束
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 237226 0 0 0 276964 0 0 0 BMRU
lo 65536 795 0 0 0 795 0 0 0 LRU
实时监控流量变化,跟踪式:
[root@CentOS8 ~]#watch -n1 ifconfig -s
4.3.3 route
命令
路由表管理命令
路由表主要构成
- Destination:目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有末知网络,又称为默认路由,优先级最低
- Genmask:目标网络对应的netmask
- lface:接口,到达对应网络,应该从当前主机哪个网卡发送出来
- Gateway:网关,到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络gateway是0.0.0.0。和当前设备在同一网段
- Metric:开销cost,值越小路由记录的优先级最高
查看路由表
route
route -n
添加: route add
route add [-net|-host|default] target [netmask Nm] [gw Gw] [[dev] If]
删除: route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
例:
#目标: 192.168.1.3 网关: 172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
#目标: 192.168.0.0 网关: 172.16.0.1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev etho
route add -net 192.168.8.0/24 dev ethl metric 200
#默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add -net .0.0.0/0 gw 172.16.0.1
route add default gw 172.16.0.1
#目标: 192.168.1.3 网关: 172.16.0.1
route de1 -host 192.168.1.3
#目标: 192.168.0.0 网关: 172.16.0.1
route de1 -net 192.168.0.0 netmask 255.255.255.0
例:配置三个路由器,使A可以连接到B
首先需要分别给路由器R1/R2/R3添加路由表
对于R1:与网段1和网段2直连,因此系统已经自动分配路由,不用添加
网段3:
route add -net 172.20.0.0/16 gw 172.18.0.201 dev eth1
网段4:
route add -net 172.22.0.0/16 gw 172.18.0.201 dev eth1
网络ID=主机ID^NETMASK 接口
由于都是在R1右侧,因此可以合并成默认路由:
route add default gw 172.18.0.201dev eth1
同理R3:
网段1:
route add -net 172.18.0.0/16 gw 172.20.0.200 dev eth1
网段2:
route add -net 172.20.0.0/16 gw 172.20.0.200 dev eth1
由于都是在R3左侧,因此可以合并成默认路由:
route add default gw 172.20.0.20dev eth0
R2:网段2/3直连R2,因此无需配置,只需添加1/4
网段1:
route add -net 172.16.0.0/16 gw 172.18.0.200 dev eth0
网段4:
route add -net 172.22.0.0/16 gw 172.20.0.201 dev eth1
注意:因为我们使用Linux来模拟路由器,正常情况下Linux接收到非自己地址的数据后会将其抛弃而无法传给下一个模拟的路由器,因此需要修改设置以转发数据
echo > /proc/sys/net/ipv4/ip_forward=1
不过这是临时修改内存数据,无法持久保存
此时A可以直接ping通B
注意:这是静态路由,手工添加。在较大的企业中,使用自动获取
4.3.4 配置动态路由
通过守护进程获取动态路由
安装quagga包通过命令vtysh配置
支持多种路由协议: RIP、OSPF和BGP
- RIP:往往选择较短的路由
- OSPF:往往选择速度较快的路由
4.3.5 netstat
命令
推荐使用 ss 命令代替
显示网络连接
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
常用选项
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口
-e: 扩展格式
-p: 显示相关进程及PID
常用组合
-tan, -uan, -tnl, -un7
显示路由表
netstat {--route|-r} [--numeric|-n]
-r: 显示内核路由表
-n: 数字格式
4.3.6 显示接口统计数据
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend |-e] [--program |-p] [--numeric|-n]
netstat -i
netstat -I=IFACE
ifconfig -s IFACE
例:
[root@CentOS8 ~]#netstat -I
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 607741 0 0 0 644164 0 0 0 BMRU
lo 65536 931 0 0 0 931 0 0 0 LRU
[root@CentOS8 ~]#ifconfig -s
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 607766 0 0 0 644181 0 0 0 BMRU
lo 65536 931 0 0 0 931 0 0 0 LRU
[root@CentOS8 ~]#ifconfig -s eth0
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 607782 0 0 0 644192 0 0 0 BMRU
[root@CentOS8 ~]#netstat -I=eth0 这里加=号,不能空格隔开
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 607803 0 0 0 644206 0 0 0 BMRU
4.3.7 ip 命令
来自于iproute包代替ifconfig
4.3.7.1 配置Linux网络属性
ip [ OPTIONS ] OBJECT { COMMAND | help }
ip 命令说明:
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可设置属性: up and down: 激活或禁用指定接口,相当于 ifup/ifdown
show [dev IFACE] [up]: : 指定接口 ,up 仅显示处于激活状态的接口
ip 地址管理
ip addr { add | del } IFADDR dev STRING [label LABEL] [scope {global | link | host}]
[broadcast ADDRESS]
[label LABEL]: 添加地址时指明网卡别名
[scope {global | link | host}]: 指明作用域:global: 全局可用;link: 仅链接可用;host: 仅本机可用
[broadcast ADDRESS]: 指明广播地址
ip address show
ip addr flush dev wangka 清空网卡上的所有地址
例:
[root@CentOS8 ~]#ip link set eth0 down 禁用eth0网卡
[root@CentOS8 ~]#ip link set eth0 up 启用eth0网卡
[root@CentOS8 ~]#ip link set eth0 name eth000 将eth0网卡改名为eth000(网卡禁用才能改)
[root@CentOS8 ~]#ip addr flush dev eth0 清空eth0网卡上的所有地址
[root@CentOS8 ~]#nmcli connection up eth0 重新加载eth0网卡上的配置文件里的内容
[root@CentOS8 ~]#ip a a 8.8.8.8/24 dev eth0:1 添加地址
[root@CentOS8 ~]#ip route 等价于route -n;每行dev前的信息可以直接拿来使用,如下面的del
default via 10.0.0.2 dev eth0 proto static metric 100
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.201 metric 100
[root@CentOS8 ~]#ip route del default via 10.0.0.2 删除默认路由
4.3.7.2 管理路由
ip route 用法:
#添加路由:
ip route add TARGET via GW dev IFACE srC SOURCE_IP
TARGET:
主机路由: IP
网络路由: NETWORK/MASK
#添加网关:
ip route add defau1t via Gw dev IFACE
#删除路由:
ip route del TARGET
#显示路由:
ip route show|list
#清空路由表:
ip route flush [dev IFACE] [via PREFIX]
2个互相没有路由地址的设备要想跨网段通讯,使用单臂路由
[root@CentOS7 ~]#ip route add default via 7.7.7.200
[root@CentOS8 ~]#ip route add default via 8.8.8.200
或者不使用路由器,使用默认路由
[root@CentOS8 ~]#ip route add default dev eth0
因为两个地址本身物理上相通,但没有方向,即逻辑上不通,加上路由逻辑就通了
4.3.8 ss
命令
netstat 通过遍历/proc来获取 socket信息,ss 使用netlink与内核 tcp_diag 模块通信获取 socket 信息
格式
ss [OPTION]... [FILTER]
选项:
-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 =
常用组合
-tan,-tanl,-tanlp,-uan
#显示本地打开的所有窗口
ss -l
#显示每个进程具体打开的socket
ss -pl
#显示所有tcp socket
ss -t -a
#显示所有的UDP socekt
ss -u -a
#显示所有已建立的ssh连接
ss -o state established '( dport = :ssh or sport = :ssh )'
[root@CentOS8 ~]#ss -o state established '( dport = :ssh or sport = :ssh )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp 0 0 10.0.0.201:ssh 10.0.0.1:50898 timer:(keepalive,78min,0)
tcp 0 48 10.0.0.201:ssh 10.0.0.1:50897 timer:(on,233ms,0)
#显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
#列出当前socket详细信息
ss -s
[root@CentOS8 ~]# ss -s
Total: 222
TCP: 8 (estab 2, closed 0, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 0 0 0
UDP 4 2 2
TCP 8 5 3
INET 12 7 5
FRAG 0 0 0
4.4 网络配置文件
4.4.1 网络基本配置文件
IP、MASK、GW、DNS相关的配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE
说明参考:
/usr/share/doc/initcripts-*/sysconfig.txt
常用配置
设置 | 说明 |
---|---|
TYPE | 接口类型,常见有的Ethernet,Bridge |
NAME | 此配置文件应用到的设备 |
DEVICE | 设备名 |
HWADDR | 对应的设备的MAC地址 |
UUID | 设备的惟一标识 |
BOOTPROTO | 激活此设备时使用的地址配置协议,常用的dhcp,static,none,bootp |
IPADDR | 指明IP地址 |
NETMASK | 子网掩码如:255.255.2550 |
PREFIX | 网络ID的位数如:24 和NETMASK二选一写 |
GATEWAY | 默认网关 |
DNS1 | |
DNS2 | 备用 |
ONBOOT | 是否启动网卡:yes / no |
4.4.2配置当前主机的主机名
临时修改主机名
[root@CentOS8 ~]#hostname 主机名
4.4.3 本地主机名数据库和IP地址的映射
4.4.4 DNS域名解析
4.4.5 修改 /etc/hosts
和DNS
的优先级
4.4.6 路由相关的配置文件:
创建并修改该文件内容即可使路由持久生效
/etc/sysconfig/network-scripts/route-IFACE
两种风格:
(1) TARGET via GW
如: 10.0.0.0/8 via 172.16.0.1
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
4.5 网卡别名
将多个IP地址绑定到一个NIC上
每个IP绑定到独立逻辑网卡,即网络别名,命名格式:ethX:Y,如: eth0:1 、eth0:3、eth0:2
范例: ifconfig命令
ifconfig eth0:0 192.168.1.100/24 up
ifconfig eth0:0 down
范例:ip命令
ip addr add 172.16.1.1/16 dev etho
ip addr add 172.16.1.2/16 dev etho label etho:0
ip addr de1 172.16.1.2/16 dev etho label etho:0
ip addr flush dev etho Tabel etho:0
为每个设备别名生成独立的接口配置文件,格式为: ifcfgethX:xxx
例:
[root@centos8 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.100
PREFIX=8
注意:
- 建议C6关闭NetworkManager 服务
- 网卡别名必须使用静态地址,不可动态获取
4.6 多网卡 bonding
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
4.6.1 Bonding
工作模式
共7种模式:0-6 Mode
- Mode 0(balance-rr): 轮询(Round-robin)策略,从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
- Mode 1(active-backup): 活动-备份(主备)策略,只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave,为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
- Mode 3(broadcast): 广播策略,在所有的slave接口上传送所有的报文,提供容错能力
说明:
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如: Cisco 交换机需要在模式0、2和3中使用EtherChannel,但在模式4中需要 LACP和EtherChannel
4.6.2 Bonding配置
详细帮助:
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt
例:以模式1创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=bond #模式必须写bond
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.0.0.100
PREFIX=8
#miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
BONDING_OPTS="mode=1 miimon=100
#修改另外2张网卡
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0 #继承bond0,不自己设地址
SLAVE=yes
ONB0OT=yes
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none #继承bond0,不自己设地址
MASTER=bond0
SLAVE=yes
ONB0OT=yes
查看bondo状态
/proc/net/bonding/bondo
删除bondo
ifconfig bond0 down 禁用网卡
rmmod bonding 或 modprobe -r bonding 卸载模块
4.7 CentOS 7 以上版网络配置
C6之前,网络接口使用连续号码命名: eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
C7以上版使用基于硬件,设备拓扑和设置类型命名
4.7.1 网卡命名机制
systemd对网络设备的命名方式
- 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,如: eno1
- 如果Firmware或BIOS为PCI-E扩展槽(外置)所提供的索引信息可用,且可预测,则根据此索引进行命名,如: ens1
- 如果硬件接口的物理位置信息可用,则根据此信息命名,如: enp2s0
- 如果用户显式启动,也可根据MAC地址进行命名,如:enx2387a1dc56
- 上述均不可用时,则使用传统命名机制
基于BIOS支持启用biosdevname软件
内置网卡: em1,em2
pci卡: pYpX Y: slot ,x:port
网卡组成格式
en: Ethernet 有线局域网
wl: wlan 无线局域网
ww: wwan无线广域网
o<index>: 集成设备的设备索引号
s<slot>: 扩展槽的索引号
X<MAC>: 基于MAC地址的命名
p<bus>s<s]ot>: enp2s1
使用传统命名方式C7/C8:
-
编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0" 如果不是dell服务器,可以不使用biosdevname
-
为grub2生成其配置文件
grub2-mkconfig -o /etc/grub2.cfg
-
重启系统
4.7.2 主机名
配置文件:
/etc/hostname
默认没有此文件,通过DNS反向解析获取主机名,主机名默认为: localhost.localdomain
设置主机名:
hostnamectl set-hostname centos7.magedu.com
删除文件/etc/hostname将恢复主机名localhost.localdomain
显示主机名信息:
hostname
hostnamectl status
4.7.3 网络配置工具nmcli
图形工具:nm-connection-editor
字符配置tui工具
- nmtui
- nmtui-connect
- nmtui-edit
- nmtui-hostname
命令行工具:nmcli
以上工具都依赖NetworkManager服务,此服务是管理和监控网络设置的守护进程
nmcli命令
参考文档: 3.3. Configuring IP Networking with nmcli Red Hat Enterprise Linux 7 | Red Hat Customer Portal
nmcli命令相关术语
- 设备即网络接口
- 连接是对网络接口的配置,一个网络接口可有多个连接配置,但同时只有一个连接配置生效
格式
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help
connection - start, stop, and manage network connections
nmcli connection help
修改IP地址等属性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property: ipv4.addresses ipv4.gateway ipv4.dnsl ipv4.method manual | auto
修改配置文件执行生效::
nmcli con reload
nmcli con up con-name
nmcli con mod | ifcfg**.***文件 |
---|---|
ipv4.method manua | BOOTPROTO=none |
ipv4.method auto | BOOTPROTO=dhcp |
ipv4.addresses 192.168.2.1/24 | IPADDR=192.168.2.1 PREFIX=24 |
ipv4.gateway 172.16.0.200 | GATEWAY=192.0.2.254 |
ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 |
ipv4.dns-search example.com | DOMAIN=example.com |
ipv4.ignore-auto-dns true | PEERDNS=no |
connection.autoconnect yes | ONBOOT=yes |
connection.id etho | NAME=eth0 |
connection.interface-name etho | DEVICE=eth0 |
802-3-ethernet.mac-address… | HWADDR=… |
范例:
#查看帮助
nmcli con add help
#使用nmcli配置网络
nmcli con show
#显示所有活动连接
nmcli con show --active
#显示网络连接配置
nmcli con show "System eth0"
#显示设备状态
nmcli dev status
#显示网络接口属性
nmcli dev show eth0
#创建新连接defau1t,IP自动通过dhcp获取
4.7.4 nmcli
实现bonding
#添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
#添加从属接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
#注: 如无为从属接口提供连接名,则该名称是接口名称加类型构成
#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
#启动绑定
nmcli con up mybond0
4.7.5 网络组 Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现
多种方式 runner
- broadcast
- roundrobin
- activebackup
- oadbalance
- lacp (implements the 802.3ad Link Aggregation Control Protocol)
网络组特点
- 启动网络组接口不会自动启动网络组中的port接口
- 启动网络组接口中的port接口总会自动启动网络组接口
- 禁用网络组接口会自动禁用网络组中的port接口
- 没有port接口的网络组接口可以启动静态IP连接
- 启用DHCP连接时,没有port接口的网络组会等待port接口的加入
例:
#创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON]
CNAME 连接名
INAME 接口名
JSON 指定runner方式,格式: '{"runner": {"name":"METHOD"}}'
METHOD 可以是broadcast,roundrobin,activebackup,Toadbalance,lacp
#创建port接口
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
CNAME 连接名,连接名若不指定,默认为team-slave-IFACE
INAME 网络接口名
TEAM 网络组接口名
#断开和启动
nmcli dev dis INAME
nmcli con up CNAME
INAME 设备名 CNAME 网络组接口名或port接口
例:
nmcli con add type team con-name myteam0 ifname team0 config '{"runner": {"name":"loadbalance"}}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
nmcli con add con-name team0-ethl type team-slave ifname ethl master team0
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
nmcli con up myteam0
nmcTi con up teamO-ethl
nmcli con up teamO-eth2
teamdctl team0 state 查看team0的状态
ping -I team0 192.168.0.254
nmcli dev dis eth1
teamdctl team0 state
nmcli con up team0-port1
nmcli dev dis eth2
teamdctl team0 state
nmcli con up team0-port2
teamdctl team0 state
管理网络组配置文件:
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="[ "runner ": "name ": "broadcast "}}!
BOOTPRoTO=none
IPADDR0=172.16.0.100
PREFIX0=24
NAME=team0
ONB00T=yes
管理网络组配置文件
/etc/sysconfig/network-scripts/ifcfg-teamO-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBO0T=yes
删除网络组
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete teamO-eth0
nmcli connectioni delete teamO-ethl
nmcli connection show
4.8 网桥
4.8.1 桥接原理
桥接:把一台机器上的若千个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D
4.8.2 配置实现网桥
工具包: bridge-utils目前C8无此包
[root@CentOS8 ~]#yum info bridge-utils
Last metadata expiration check: 2:12:46 ago on Thu 10 Aug 2023 05:41:18 PM CST.
Available Packages
Name : bridge-utils
Version : 1.7.1
Release : 2.el8
Architecture : x86_64
Size : 40 k
Source : bridge-utils-1.7.1-2.el8.src.rpm
Repository : epel
Summary : Utilities for configuring the linux ethernet bridge
URL : https://wiki.linuxfoundation.org/networking/bridge
License : GPLv2+
Description : This package contains utilities for configuring the linux ethernet
: bridge. The linux ethernet bridge can be used for connecting multiple
: ethernet devices together. The connecting is fully transparent: hosts
: connected to one ethernet device see hosts connected to the other
: ethernet devices directly.
:
: Install bridge-utils if you want to use the linux ethernet bridge.
yum install bridge-utils
#查看网桥
brctl show
#查看CAM(content addressable memory内容可寻址存储器)表
brctl showmacs br0
#添加和删除网桥
brctl addbr|delbr br0
#添加和删除网桥中网卡
brctl addif|delif brO etho
#默认br0 是down,必须启用
ifconfig br0 up
注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
spanning tree protocol - STP:生成树协议,防止网络瘫痪
启用生成树协议
brctl stp br0 on
nmcli命令创建软件网桥:
nmcli con add con-name mybro type bridge ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual ip地址只为远程管理
nmcli con add con-name brO-port0 type bridge-slave ifname eth0 aster bro
查看配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-porto
例:
#1创建网桥
nmcli con add type bridge con-name br0 ifname br0
nmcli connection modify br0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con up br0
#2加入物理网卡
nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0
nmcli con add type bridge-slave con-name br0-port1 ifname ethl master br0
nmcli con up br0-port0
nmcli con up br0-port1
#3查看网桥配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
STP=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.100
PREFIX=24
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
TYPE=Ethernet
NAME=br0-port0
DEVICE=eth0
ONB00T=yes
BRIDGE=br0
UUID=23f41d3b-b57c-4e26-9b17-d5f02dafd12d
#4安装管理软件包:
yum install bridge-utils
brctl show
#5删除br0
nmcli con down br0
rm /etc/sysconfig/network-scripts/ifcfg-br0*
nmcli con reload
4.9 网络测试诊断工具
测试网络连通性
-
ping
目标网络unreachable不可达:多为路由问题
目标主机不可达:有路由但可能路径错误
名字或服务未知:IP可ping通,但无法把网址解析成ip地址,DNS问题
显示正确的路由表
- ip route
跟踪路由
- traceroute
- tracepath
- mtr
确定名称服务器使用
- nslookup
- host
- dig
抓包工具
- tcpdump
- wireshark
安全扫描工具
- nmap
- netcat - nc:网络界的瑞士军刀
流量控制工具
- tc
范例:
tc qdisc add dev etho root netem loss 50% 设置丢包率
tc qdisc add dev etho root netem delay 1000ms 设置延迟
tc qdisc show dev etho
tc qdisc del
4.9.1 tcpdump
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。
语法:
tcpdump [-adeflnNopqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
-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<数据包文件> 把数据包数据写入指定的文件。
例:
#不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
tcpdump
#监听特定网卡
tcpdump -i en0
#监听特定主机,监听主机10.0.0.100 的通信包,注意: 出、入的包都会被监听.
tcpdump host 10.0.0.100
#特定来源、目标地址的通信
#特定来源
tcpdump src host hostname
#特定目标地址
tcpdump dst host hostname
#指定来源和目标地址,如果要指定协议,要放在src之前,然后and src ...
tcpdump src host hostname and dst host hostname
#如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
tcpdump host hostname
#特定端口
tcpdump port 3000
#监听TCP/UDP,服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包
tcpdump tcp
#来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100
#监听特定主机之间的通信
tcpdump ip host 10.0.0.101 and 10.0.0.102
#10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and !10.0.0.1
实例:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析
#限制抓包的数量,如下,抓到1000个包后,自动退出
tcpdump -c 1000
#保存到本地,tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘,可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap
4.9.2 nmap
扫描远程主机工具,功能远超越用世人皆知的 Ping工具发送简单的ICMP 回声请求报
官方帮助: https://nmap.org/book/man.html
格式:
nmap [Scan Type(s)] [Options] {target specification}
命令选项:
-sT TCP connect()扫描,这是最基本的 TCP 扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息
-ss TCP 同步扫描 (TCP SYN),因为不必全部打开一个 TCP 连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志
-sF,-sX,-sN 秘密 FIN 数据包扫描、圣诞树 (Xmas Tree)、空 (Null) 扫描模式。这些扫描方式的理论依括是:关闭的端口需要对你的探测包回应 RST 包,而打开的端口必需忽略有问题的包
-sP ping 扫描,用 ping 方式检查网络上哪些主机正在运行。当主机阻塞 ICMP echo 请求包是 ping 扫描是无效的。nmap 在任何情况下都会进行 ping 扫描,只有目标主机处于运行状态,才会进行后续的扫描
-sU UDP 的数据包进行扫描,想知道在某台主机上提供哪些 UDP 服务,可以使用此选项
-A ACK 扫描,这项高级的扫描方法通常可以用来穿过防火墙。
-sW 滑动窗口扫描,非常类似于 ACK 的扫描
-sR RPC 扫描,和其它不同的端口扫描方法结合使用。
-b FTP 反弹攻击 (bounce attack),连接到防火墙后面的一台 FTP 服务器做代理,接着进行端口扫描。
-P0 在扫描之前,不 ping 主机。
-PT 扫描之前,使用 TCP ping 确定哪些主机正在运行
-PS 对于 root 用户,这个选项让 nmap 使用 SYN 包而不是 ACK 包来对目标主机进行扫描。
-PI 设置这个选项,让 nmap 使用真正的 ping(ICMP echo 请求) 来扫描目标主机是否正在运行。
-PB 这是默认的 ping 扫描选项。它使用 ACK(-PT) 和 ICMP(-PI) 两种扫类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O 这个选项激活对 TCP/IP 指纹特征 (fingerprinting) 的扫描,获得远程主机的标志,也就是操作系统类型
-I 打开 nmap 的反向标志扫描功能。
-f 使用碎片 IP 数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图
-v 冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。
-S <IP> 在一些情况下,nmap 可能无法确定你的源地址 。在这种情况使用这个选项给出指定 IP 地址
-g port 设置扫描的源端口
-oN 把扫描结果重定向到一个可读的文件 logfilename 中
-Os 扫描结果输出到标准输出。
--host_timeout设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制
-max rtt timeout 设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约 9000 毫秒
-min_rtt_timeout 设置 nmap 对每次探测至少等待你指定的时间,以毫秒为单位
-M count 设置进行 TP connect() 扫描时,最多使用多少个套接字进行并行的扫描
例:
#Tcp ack 扫描,并发2000,速度快
[rootacentos8 ~]#nmap -n -PA --min-parallelism 2000 172.16.0.0/16
#仅列出指定网段上的每台主机,不发送任何报文到目标主机.
[root@CentOS8 ~]#nmap -sL 10.0.0.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2023-08-11 16:18 CST
Nmap scan report for 10.0.0.0
Nmap scan report for 10.0.0.1
...
Nmap scan report for 10.0.0.254
Nmap scan report for 10.0.0.255
Nmap done: 256 IP addresses (0 hosts up) scanned in 1.04 seconds
#可以指定一个IP地址范围
[root@CentOS8 ~]# nmap -sP 10.0.0.1-10 | grep "Nmap scan"
Nmap scan report for 10.0.0.1
Nmap scan report for 10.0.0.2
[root@CentOS8 ~]# nmap -sP 10.0.0.1-10 | grep "Nmap scan" | cut -d" " -f5
10.0.0.1
10.0.0.2
[root@CentOS8 ~]# nmap -sP 10.0.0.1-10 | grep "Nmap scan" | sed 's/Nmap scan report for //'
10.0.0.1
10.0.0.2
[root@CentOS8 ~]# nmap -sP 10.0.0.1-10 | sed -n '/^Nmap scan/s/Nmap scan report for //p'
10.0.0.1
10.0.0.2
#批量扫描一个网段的主机存活数
[rootacentos8 ~]#nmap -sP -v 10.0.0.0/24
[rootacentos8 ~]#nmap -v -sn ip/24
#有些主机关闭了ping检测,所以可以使用-P0跳过ping的探测,可以加快扫描速度
[rootacentos8 ~]#nmap -P0 192.168.1.100
#扫描主机
[rootacentos8 ~]#nmap -v -A 10.0.0.203
#一次性扫描多台目标主机
[rootacentos8 ~]#nmap 10.0.0.6 10.0.0.7
#从一个文件中导入IP地址,并进行扫描
[root@centos8 ~]#cat hosts.txt
10.0.0.7
10.0.0.6
58.87.87.99
[root@centos8 ~]#nmap -iL hosts.txt
#探测目标主机开放的端口,可指定一个以逗号分隔的端口列表(如-PS22,443,80)
[root@centos8 ~]#nmap -PS22,80,443 10.0.0.1
#使用SYN半开放扫描
[root@centos8 ~]#nmap -ss 10.0.0.1
#扫描开放了TCP端口的设备
[root@centos8 ~]#nmap -sT 10.0.0.1
#扫描开放了UDP端口的设备
[root@centos8 ~]#nmap -sU 10.0.0.1
#只扫描UDP端口
nmap -e eth1 -SU -O 10.0.0.1
#扫描TCP和UDP端口
nmap -STU -O 10.0.0.1
#用于扫描目标主机服务版本号
[root@centos8 ~]#nmap -SV 10.0.0.7
#查看主机当前开放的端口
nmap localhost
#查看主机端口 (1024-65535) 中开放的端口
nmap -p 1024-65535 localhost
#探测目标主机开放的端口
nmap -PS 10.0.0.1
#探测所列出的目标主机端口
nmap -PS22,80,3306 10.0.0.1
#探测目标主机操作系统类型
nmap -O 10.0.0.1
#探测目标主机操作系统类型
nmap -A 10.0.0.1
5 Ubuntu网络配置
5.1 主机名
修改主机名
hostnamectl set-hostname NewName
root@Ubuntu1804:~# hostnamectl set-hostname Ubuntu20.04
root@Ubuntu1804:~# cat /etc/hostname
Ubuntu20.04
root@Ubuntu1804:~# hostname
Ubuntu20.04
而对于HOSTNAME变量,需要重新登陆才会生效
root@Ubuntu1804:~# echo $HOSTNAME
Ubuntu1804
root@Ubuntu1804:~# exit
logout
joyce@Ubuntu1804:~$ sudo -i
root@Ubuntu20:~# echo $HOSTNAME
Ubuntu20.04
5.2 网卡名称
默认Ubuntu的网卡名称和 C7 类似,如:ens33、ens38等
修改网卡名称为传统命名方式:
#修改配置文件为下面形式
#1、使用vim交互式修改
root@Ubuntu20:~# vim /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0'
#2、使用sed命令直接修改
root@Ubuntu20:~# sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=0"#' /etc/default/grub
#生效新的grub.cfg文件 Ubuntu
root@Ubuntu20:~# grub-mkconfig -o /boot/grub/grub.cfg
#或者
root@Ubuntu20:~# update-grub
#C7或C8的启动文件:
[root@CentOS8 ~]#cat /boot/grub2/grub.cfg
#重启生效
reboot
#不过生效后,会没有地址,接下来开始配置网卡:
5.3 Ubuntu网卡配置
官网文档:
- https://help.ubuntu.com/
- Configuring networks | Ubuntu
配置网卡,使生成的eth0网卡可以获取地址
root@Ubuntu20:~# cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
随后执行命令使配置生效
root@Ubuntu20:~# netplan apply 使生效
5.3.1 配置自动获取IP
5.2.2 配置静态IP
注意:yaml格式缩进2个空格
例:
root@ubuntu1804:~#vim /etc/netplan/01-netcfg.yam7
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [192.168.8.10/24,10.0.0.10/8] #或者用下面两行,两种格式不能混用
- 192.168.8.10/24
- 10.0.0.10/8
gateway4: 192.168.8.1
nameservers :
search: magedu.com, magedu.org]
addresses: [180.76.76.76,8.8.8.8,1.1.1.1]
查看ip和gateway
rootaubuntu1804:~#ip addr
rootaubuntu1804:~#route -n
查看DNS
root@Ubuntu20:~# ll /etc/resolv.conf 不再存放网卡的dns信息等
lrwxrwxrwx 1 root root 39 May 31 01:43 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
root@Ubuntu20:~# resolvectl status 查看dns
或
root@Ubuntu20:~# systemd-resolve --status
root@Ubuntu20:~# systemd-resolve --status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
5.3.3 配置多网卡静态IP和静态路由
root@ubuntu1804:~#vim /etc/netplan/01-netcfg.yam7
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.18/16]
gateway4: 10.0.0.2
nameservers :
addresses: [223.6.6.6]
eth1:
dhcp4: no
dhcp6: no
addresses:[10.20.0.18/16]
routes :
- to: 10.30.0.0/16
via: 10.20.0.1
- to: 10.40.0.0/16
via: 10.20.0.1
- to: 10.50.0.0/16
to: 10.60.0.0/16
via: 10.20.0.1
rootaubuntu1804:~#netplan apply
rootaubuntu1804:~#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.0.0 U 0 0 0 eth0
10.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
10.30.0.0 10.20.0.1 255.255.0.0 UG 0 0 0 eth1
10.40.0.0 10.20.0.1 255.255.0.0 UG 0 0 0 eth1
10.50.0.0 10.20.0.1 255.255.0.0 UG 0 0 0 eth1
10.60.0.0 10.20.0.1 255.255.0.0 UG 0 0 0 eth1
#或每个网卡一个配置文件
rootaubuntu1804:~#cat /etc/netplan/01-netcfg.yaml
rootaubuntu1804:~#cat /etc/netplan/02-netcfg.yaml
5.3.4 单网卡桥接
root@ubuntu1804:~# apt install -y bridge-utis
root@ubuntu1804:~# dpkg -L bridge-utils
sbin/brctl #临时,不能持久
...
root@ubuntu1804:~# cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets :
eth0:
dhcp4: yes 自动获取地址
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
bridges :
br0:
dhcp4: no
dhcp6: no
addresses: [10.0.0.18/16]
gateway4: 10.0.0.2
nameservers :
addresses: [223.6.6.6]
interfaces:
- ethl
- eth2
root@ubuntu1804:~# netplan apply
root@ubuntu1804:~# ifconfig br0
br0: fTags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.18 netmask 255.255.0.0 broadcast 10.0.255.255
inet6 fe80::9cbe:ldff:fe85:6601 prefixlen 64 scopeid 0x20<link>
ether 9e:be:1d:85:66:01 txqueuelen 1000 (Ethernet)
RX packets 158 bytes 19534 (19.5 KB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 colisions 0
root@ubuntu1804:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.9ebeld856601 no ethl
eth2
5.3.5 多网卡桥接
5.3.6 双网卡绑定
支持多网卡绑定七种模式:
-
第一种模式: mod=0,即:(balance-rr) Round-robin policy (平衡抢循环策略)
特点: 传输数据包顺序是依次传输(即: 第1个包走etho,下一个包就走eth1…一直循坏下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力。
-
第二种模式: mod=1,即: (active-backup) Active-backup policy (主-备份策略)
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混刮。此模式只提供了容错能力:由此可见此算法的优点是可以提供网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 个网络接口的情况下,资源利用率为1/N。
-
第三种模式: mod=2,即: (balance-xor) XOR policy (平衡策略)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址》% s ave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力。
-
第四种模式: mod=3,即: broadcast (广播策略)
特点: 在每个slave接口上传输每个数据包,此模式提供了容错能力。
-
第五种模式: mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation (IEEE 802.3ad 动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
必要条件:
条件1: ethtoo1持获取每个save的速率和双工设定。
条件2: switch(交换机)支持IEEE 802.3ad Dynamic link aggregation。
条件3:多数switch(交换机)需要经过特定配置才能支持802.3ad模式。
-
第六种模式: mod=5,即:(balance-tlb) Adaptive transmit load balancing (适配器传输负载均衡)
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
该模式的必要条件:
ethtoo1支持获取每个slave的速率
-
第七种模式: mod=6,即:(balance-alb) Adaptive load balancing (适配器适应性负载均衡)
特点: 该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance,r1b),而且不需要任何switch(交换机)的支持
root@ubuntu1804:~# vim /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
...
5.3.7 双网卡绑定+桥接
网卡绑定用于提供网卡接口几余以及高可用和端口聚合功能,桥接网卡再给需要桥接设备的服务使用
root@ubuntu1804:~# cat /etc/netplan/01-netcfg.yam1
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
ethl:
dhcp4: no
dhcp6: no
bonds :
bond0 :
intorfaces:
...
5.3.8 网卡的多组绑定
可以实现网卡的多组绑定,比如: eth0,eth1绑定至bond0,eth2和eth3绑定bond1
root@ubuntu1804:~#cat
/etc/netplan/01-netcfg.yam1
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets :
eth0:
dhcp4: no
dhcp6: no
eth1:
dhcp4: no
dhcp6: no
eth2:
dhcp4: no
dhcp6: no
eth3:
dhcp4: no
dhcp6: no
bonds :
bond0 :
interfaces:
- eth0
- eth1
addresses: [10.0.0.18/16]
gateway4: 10.0.0.1
nameservers :
addresses: [223.6.6.6,223.5.5.5]
parameters:
mode: active-backup
mii-monitor-interval: 100
bond1:
interfaces :
- eth2
- eth3
addresses: [10.10.0.18/16]
parameters:
mode: active-backup
mii-monitor-interval: 100
routes :
- to: 10.20.0.0/16
via: 10.10.0.1
- to: 10.30.0.0/16
via: 10.10.0.1
- to: 10.40.0.0/16
via: 10.10.0.1
- to: 10.50.0.0/16
via: 10.10.0.1
root@ubuntu1804:~# netplan apply
root@ubuntu1804:~# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.0.18 netmask 255.255.0.0 broadcast 10.0.255.255
inet6 fe80::2820:b7ff:fea8:5837 prefixlen 64 scopeid 0x20<link>
ether 2a:20:b7:a8:58:37 txqueuelen 1000 (Ethernet)
RX packets 273 bytes 23591 (23.5 KB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 364 bytes 42455 (42.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
bond1: fTags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.10.0.18 netmask 255.255.0.0 broadcast 10.10.255.255
inet6 fe80::c035:83ff:feal:abbb prefixlen 64 scopeid 0x20<link>
ether c2:35:83:al:ab:bb txqueuelen 1000 (Ethernet)
RX packets 8 bytes 480 (480.0 B)
RX errors 0 dropped O overruns 0 frame 0
Tx packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 2a:20:b7:a8 :58 :37 txqueueTen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped O overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 2a:20:b7:a8:58:37 txqueuelen 1000 (Ethernet)
RX packets 269 bytes 23351 (23.3 KB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 364 bytes 42455 (42.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether c2:35:83:al:ab:bb txqueuelen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped O overruns O frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth3: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether c2:35:83:al:ab:bb txqueuelen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped o overruns 0 frame 0
TX packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: fags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
1oop txqueuelen 1000 (Loca1 Loopback)
RX packets 120 bytes 8344 (8.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 120 bytes 8344 (8.3 KB)
Tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@ubuntu1804:~# route -n
root@ubuntu1804:~# cat /proc/net/bonding/bond0
Ethernet channe1 Bonding Driver: v3.7.1 (Apri1 27,2011)
5.3.9 网卡多组绑定+多组桥接
两组网卡先绑定,再桥接
eth3:
dhcp4: no
dhcp6: no
bonds :
bond0 :
interfaces:
- eth0
- eth1
addresses: [10.0.0.18/16]
gateway4: 10.0.0.1
nameservers :
addresses: [223.6.6.6,223.5.5.5]
parameters:
mode: active-backup
mii-monitor-interval: 100
bond1:
interfaces :
- eth2
- eth3
addresses: [10.10.0.18/16]
parameters:
mode: active-backup
mii-monitor-interval: 100
routes :
- to: 10.20.0.0/16
via: 10.10.0.1
- to: 10.30.0.0/16
via: 10.10.0.1
- to: 10.40.0.0/16
via: 10.10.0.1
- to: 10.50.0.0/16
via: 10.10.0.1
root@ubuntu1804:~# netplan apply
root@ubuntu1804:~# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.0.0.18 netmask 255.255.0.0 broadcast 10.0.255.255
inet6 fe80::2820:b7ff:fea8:5837 prefixlen 64 scopeid 0x20
ether 2a:20:b7:a8:58:37 txqueuelen 1000 (Ethernet)
RX packets 273 bytes 23591 (23.5 KB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 364 bytes 42455 (42.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
bond1: fTags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 10.10.0.18 netmask 255.255.0.0 broadcast 10.10.255.255
inet6 fe80::c035:83ff:feal:abbb prefixlen 64 scopeid 0x20
ether c2:35:83:al🆎bb txqueuelen 1000 (Ethernet)
RX packets 8 bytes 480 (480.0 B)
RX errors 0 dropped O overruns 0 frame 0
Tx packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 2a:20:b7:a8 :58 :37 txqueueTen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped O overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 2a:20:b7:a8:58:37 txqueuelen 1000 (Ethernet)
RX packets 269 bytes 23351 (23.3 KB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 364 bytes 42455 (42.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether c2:35:83:al🆎bb txqueuelen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped O overruns O frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth3: fTags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether c2:35:83:al🆎bb txqueuelen 1000 (Ethernet)
RX packets 4 bytes 240 (240.0 B)
RX errors 0 dropped o overruns 0 frame 0
TX packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: fags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
1oop txqueuelen 1000 (Loca1 Loopback)
RX packets 120 bytes 8344 (8.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 120 bytes 8344 (8.3 KB)
Tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@ubuntu1804:~# route -n
root@ubuntu1804:~# cat /proc/net/bonding/bond0
Ethernet channe1 Bonding Driver: v3.7.1 (Apri1 27,2011)
### 5.3.9 网卡多组绑定+多组桥接
两组网卡先绑定,再桥接