网络协议与管理2
要点:TCP报文头部
- 网络划分
- 跨网络配置路由器
- 网卡配置文件
- 了解网络管理工具
1. Internet层协议
- IP
ICMP
- Destination Unreachable
Echo(Ping)
- 命令ping发送icmp请求数据包,取得返回值,判断网络状态
有些软件也会用ping命令判断软件状态,回应pang,这种ping与ICMP协议不同
例如:ping :unknown host www.baidu.com 初步判断为DNS解析的原因 例如:connect:Network is unreachable 初步判断为没有路由
指定数据包大小来ping指定ip
例如:发送数据包大小为64个字节的包到192.168.32.6 ping 192.168.32.6 -s 64 -s :指定包大小,最大为65507
尽最大能力去ping对方主机
ping -f ip 测网络的稳定性
禁止其他客户端ping自己,将一下文件值改为1
$cat /proc/sys/net/ipv4/icmp_echo_ignore_all 1 文件内容0表示回应,1表示忽略回应
-IGMP 组管理协议,用于多播 与ICMP相似
-ARP 地址解析协议 Map IP —>Ethernet(MAC地址)
全称为Address Resolution Protocol,是根据IP地址获取物理地址的一个TCP/IP协议。
ARP工作概要
- 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址
- 收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源,改为静态绑定可以在重启之前一直保存
- 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存,由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
arp -s ip mac 绑定地址
- 理论上ARP协议只能在同一个网络中工作,跨网络ARP工作,必须要配网关
- 特殊ARP
- 电脑启动时候要使用的Gratuitous ARP
- 判断主机ip是否冲突,向网络中发送广播IP地址是否被占用。
反向ARP,将mac地址解析成IP地址
- 设置DHCP服务器,在服务器上有记录网络中电脑的MAC地址和IP的表格
- 一台电脑想知道自己的IP地址,于是发出广播协议,然后被服务器分配了一个IP地址
ARP跨网络工作,需要配合路由,示例如下
- A要与B跨网段建立通讯,ARP广播拿到本网段路由器R1接口1的MAC地址
- 路由器通过IP1收到数据包,通过查路由表得知发送到B的路径,下一网段临近的路由器R2的接口3,
- 接口3拿到数据包,通过接口4发送个B
这里如果C假冒网关,A的数据就会发给C,C抛弃包,导致无法通讯,甚至转发出去,以收集A的信息。
arp -n 查看ARP表 arp -d ip 主动删除arp表某条记录 ip neigh 也可以查看ARP表
1.1 Internet协议特征
- 运行在OSI网络层
- 非面向连接,没有三次握手
- 独立处理数据包
- 分层编址
- 尽力而为传输,不确保数据能到
- 无数据恢复功能
2. IP PDU报头
每行范围在0-31位,固定的为5行,每行4个字节,所以最下为20个字节报文头部
- 版本:ipv4、ipv6,据说有中国的v9版
- 原地址和目的地址:各占4个字节,分别记录源地址和目标地址
- 首部长度:固定部分和可变部分,占4位也就是2的4次方,可表示的最大数值是16个单位,一个单位为4字节,因此IP首部长度的最大值是64字节
- 区分服务:标识特定服务的,用的不多
- 总长度:头和数据的总长度16位(与首部长度16个单位计算方式不同),也就是最大65536个字节
- 标识:将超过1500字节的数据包切片,同一个包的若干分片中,该值是相同的,用于标识同一数据包
- 片偏移:数据切割的分片在原数据包中的相对位置,显示的单位是字节除8的结果,如下图
- 标志(flag):占3位,目前只有后两位有意义
- DF:Don’t Fragment ,中间的一位,只有当DF=0时才允许分片
MF:More Fragment,最后一位,MF=1表示后面还有分片。MF=表示最后一个分片
例如 一个3500的包,假设分为三个包为按顺序为A、B、C,大小为1500、1500、500 A的MF=1,B的MF=1,C最后一个包MF=0
- 生命期ttl:可修改,/proc/sys/net/ipv4/ip_default_ttl
- 协议:显示上层协议 ,国际组织定义的编号可以查看/etc/protocols
- 首部检验和:检查数据包是否坏了
3. IP地址分类与转换
介绍
- 概念IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
ip地址只有32位(二进制),所以最多有2^32(4 294 967 296)个
示例:ip地址个进制转换,拿到172.20.112.176 转换为二进制10101100000101000111000010110000 $bc <== 对应的十进制为 ibase=2 10101100000101000111000010110000 2887020720 $ping 2887020720 <==ping 10进制数 64 bytes from 172.20.112.176: icmp_seq=1 ttl=64 time=1.26 ms
每台主机必须有一个唯一的ID
命令arping ip 可以查看这个ip地址属于哪个主机- IP地址由两部分组成
- 网络ID
标识网段 就像城市区号
每个网段分配一个网络ID
网络ID位在高位 - 主机ID
标识单个主机 就像具体电话号码
由组织分配给各设备
主机ID位排在网络ID后
- 网络ID
3.1 IP地址分类
IP地址有两种分类,一种是Internet委员会定义的五种类别,另一种是根据公有私有
3.1.1 IP委员会定义的
A类,最高位为0,前八位为网络ID,后24位为主机ID
- 第一段地址为0的为位置地址,为127的是回环网卡,都不算在IP分类中
- 第一段地址范围为00000001-011111111,所以第一段为1-126为A类
一个网段可以有 2^24-2=16777214
示例:比如10.*.*.*的网段 10.0.0.0 最小 不能算在可用ID里,表示的是本网段地址 10.255.255.255 最大 不能算,表示为本地网络广播地址
B类前2位为10,前16位为网络ID,后16为主机ID
- 与A类算法相同
- 128-191开头的为B类
- C类前3位为110,前24位是网络ID,后8位是主机ID
- 192-223开头的为C类
D类前4位为1110,不能给主机分配,属于多波(一些计算机的集合)地址
- 224-239开头的为D类 ,多波地址
- MAC地址高8位最后一位为1是多波地址
E类为保留未使用的高5位为11110
网段数=2^可变的网络ID位数
一个网段可以有多少计算机=2^主机ID位数(32-网络ID位数)-2
3.1.2公有私有网络
- 公有地址(Public address)
由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。 - 私有地址
私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
以下列出留用的内部私有地址
A类 10.0.0.0–10.255.255.255
B类 172.16.0.0–172.31.255.255
C类 192.168.0.0–192.168.255.255
3.1.3 特殊地址
- 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服务器获取地址,系统会为主机分配这样地址,Linux中没有。可以彼此间通信,但不稳定。
3.2 CIDR无类别域间路由
尽管已针对整个IPv4地址空间进行分类,但没类网络数量相对扔然非常少,而且花费网段时不是太大就是太小,为了解决这种问题,就出现了无类域名。其特点为,网络ID位数不确定,根据实际情况更改,可以为任意位,配合可变长子网掩码VLSM,来确定网络ID位数。
优点
- 可以根据网络规模大小选择拥有适当可用IPv4地址的IPv4地址段,这样可以减少地址的闲置和浪费
- 降低广播风暴产生的可能
- 提高路由效率
- 提高广域网中的网络安全
子网掩码
32位二进制,前多少位高位为1,低位为0,为1的即为网络ID位,为0的就是主机ID位
所以可能的子网掩码为下表所示
二进制 | 十进制 |
---|---|
00000000 | 0 |
10000000 | 128 |
11000000 | 192 |
11100000 | 224 |
11110000 | 240 |
11111000 | 248 |
11111100 | 252 |
11111110 | 254 |
11111111 | 255 |
CIDR表示法
- IP/网络ID位数 ,例如192.168.32.17/24 子网掩码为255.255.255.0
1. 子网掩码换算成二进制为11111111.11111111.11111111.00000000,前24位为1,在CIDR表示法中以/24出现
- IP/网络ID位数 ,例如192.168.32.17/24 子网掩码为255.255.255.0
网络ID的计算示例
- 示例一:10.0.0.200/19,求子网掩码,所在网络最多主机
- 子网掩码
/19,表示网络ID为19位,即11111111.11111111.11100000.00000000
换算成十进制255.255.224.0 - 所在网络一个网段最多有多少主机
套用算法:一个网段可以有多少计算机=2^主机ID位数(32-网络ID位数)-2
2^13-2
- 子网掩码
示例二:2000台主机,都放在同一网段中,netmask怎么分配合理?
- 主机2000<=2^主机ID数-2,也就是2^11
- 所以netmask为11111111.11111111.11111000.00000000
- 换算成十进制255.255.248.0
示例三:判断IP地址是否为同一网段
A:192.168.32.1/24 255.255.255.0 192.168.32.0
B:192.168.33.1/24 255.255.255.0 192.168.33.0- 判断是否在同一网段,即比较网络ID
算法:网络ID=IP与netmask - 转换为二进制相与,上面为IP地址,下面为netmask,与运算0&0=0;0&1=0;1&0=0;1&1=1
网络ID不同,所以不在同一网段
A 11000000.10101000.00100000.00000001 11111111.11111111.11111111.00000000 11000000.10101000.00100000.00000000 <==结果为192.168.32.0 B 11000000.10101000.00100001.00000001 11111111.11111111.11111111.00000000 11000000.10101000.00100000.00000000 <==结果为192.168.33.0
- 判断是否在同一网段,即比较网络ID
示例四:A 192.168.32.1/16 255.255.0.0
B 192.168.33.1/24 255.255.255.0- 假设A有B的IP地址,不知道子网掩码,这时候判断都是和A的子网掩码做与运算,判断为在同一个网段
- 再假设B有A的IP地址,不知道其子网掩码,判断式和B的子网掩码做与运算,判断为不再同一网段。
- 结果如下,虽然都ping不通,但是原理不同
- A判断B:A的网络ID192.168.0.0 ; B的网络ID192.168.0.0
在同一网段,可以向B发ARP广播,但收不到回应 - B判断A A192.168.32.0 B192.168.33.0
不在同一网段
- A判断B:A的网络ID192.168.0.0 ; B的网络ID192.168.0.0
- 示例一:10.0.0.200/19,求子网掩码,所在网络最多主机
3.3 划分子网:将一个大网(主机ID位多)分割成多个小网
实现方法:网络ID位向主机ID借位,把一部分原来属于主机ID的部分变成网络ID,通常称为子网ID,借n位将得到2的n次方子网,原网络ID+子网ID=新网络ID
例一:10.0.0.0/8划分32个子网
- 子网netmask
32个子网需要多少位:32<=2^n
网络ID为:8+5=13
255.11111000.0.0 = 255.248.0.0 - 每个子网主机是多少
2^(32-13)-2=524286 - 最小的子网IP范围
10.00000 000.0.1-10.00000 111.255.254 = 10.0.0.1/13-10.7.0.1/13 - 最大的子网网络ID
10.11111 000 .0.0=10.248.0.0/13
- 子网netmask
例二:10.20.0.0/13 划分18个子网
- 子网netmask
2^n>18 13+5=18
255.255.11 000000.0 = 255.255.192.0 - 每个子网主机是多少
2^(32-18)-2=16382 - 最小、最大的网络ID是多少
10.00011000.00 000000.0 = 10.24.0.0/18
10.00011100.01 000000.0 = 10.28.64.0/18 - 最大的子网ip范围
10.00011100 .01000000.1 =10.28.64.1/18
10.00011100.011111111.254 = 10.28.127.254/18
- 子网netmask
示例:10.28.64.1/18,划分10个子网
- 子网netmask
2^n>10 18+4=22
255.255.111111100.0 =255.255.252.0 - 每个子网主机是多少
2^10-2=1022 - 最小、最大的网络ID是多少
10.28.01 0000 00.0 = 10.28.64.0/22
10.28.01 1001 00.0 = 10.28.100.0/22 - 最大的子网ip范围
10.28.01 1001 00.000000001 = 10.28.100.1
10.28.01 1001 11.111111110 = 10.28.103.254
- 子网netmask
3.4 合并超网:将多个小网合并成一个大网
- 用途:节约路由表的消耗,提升查询速度
- 算法:主机ID向网络ID借位,取最大公约数,转化成二进制取
- 例如:220.78.168.0/24 220.78.10101 000.0/24
- 200.78.169.0/24 220.78.10101 001.0/24
- 200.78.175.0/24 220.78.10101 111.0/24
取网络ID相同的位为新网ID,多出来的为借给主机ID的位
所以合并后的网络ID为220.78.168.0/21
3.5 跨网络通讯
- 跨网络通信:路由
- 路由分类:
- 主机路由
精确到主机,目标网络写的是单个IP地址 - 网络路由
精确到网段,目标网络写的是网段IP,计算机只要配地址就会自动生成所在网段的路由记录。 - 默认路由
只是把目的地ip和子网掩码改成0.0.0.0和0.0.0.0。由于默认路由只能存在末梢网络中,是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由。
- 主机路由
- 优先级:精度越高,优先级越高
4. 动态主机配置协议DHCP
DHCP的工作流程
- 客户机请求IP(DHCPdiscover)
客户机将使用0.0.0.0作为源地址,使用255.255.255.255作为目标地址来广播请求IP地址的信息。广播信息中包含DHCP客户机的MAC地址和计算机名 - 服务器响应(DHCPoffer)
- 服务器收到请求后先针对该次请求的信息所携带的MAC地址与DHCP主机本身的设置值进行对比。
- 如果DHCP主机的设置中有针对该MAC 提供的静态IP(每次都给一个固定IP),则提供给客户机相关的固定IP与相关的网络参数
- 如果该信息的MAC并不在DHCP主机的设置中,则DHCP主机会选取当前网段内没有使用的IP给客户机使用!当然这里的响应,服务器也是采用255.255.255.255的广播。
- 客户机选择IP(DHCPrequest)
- 如果同一网段内有多台DHCP服务器,那么客户机是谁先响应就选择谁
- 收到响应包后,会在网段内发送广播确认IP地址是否被占用,则不接受,再次请求
- 确认未被占用,发送广播通知接受的DHCP服务器,同时也通知其它的DHCP服务器,让这些DHCP服务器将本预分配给客户机的IP释放掉
- 服务器确认IP租约(DHCPack/DHCPnak)
DHCP服务器收到客户机选择IP的广播后,则以DHCPack消息的形式向客户机广播成功的确认。DHCPack包含:IP、掩码、网关、DNS、租期等
- 客户机请求IP(DHCPdiscover)
IP地址时间限制。
- 租期即将到期,续租过程,当IP地址租期到达一半时间,客户端就会向服务器发出续租请求,服务器收到并同意,客户端就会获得一个新的租期,
- 如果服务器没有响应,当租期达到7/8时,客户端就会广播向其他服务器发送请求,获得新的IP。
5. 基本网络配置
将Linux接入到网络,需要配置网络相关设置
- 配置内容
- 主机名:Linux默认情况下主机名是有本地意义的,不能跨网络通讯,要想跨网络通讯需要配合名字解析服务。
- 推荐:根据功能,服务器等统一格式命名
- 优点:统一主机名可以用在以后配合DNS做名字解析统一管理各种服务器
- 例如web_nginx01_magedu.com,
意思是作为web服务器利用nginx第01服务器搭建的后面为公司域名,
- IP/netmask: 必须要配的
- 路由:默认网关 跨网络要配的
- DNS服务器 名字解析功能
- 主机名:Linux默认情况下主机名是有本地意义的,不能跨网络通讯,要想跨网络通讯需要配合名字解析服务。
变更主机名
在CentOS6中更改主机名
改文件配置/etc/sysconfig/network
#vim /etc//sysconfig/network HOSTNAME=hai6 <==修改主机名
修改文件 /etc/hosts作用是名字解析服务。
cat /etc/hosts或者getent hosts查看文件内容#vim /etc/hosts ::1 localhost ...localdomain6 hai6 <==在后面追加上主机名就可以
- 生效
- 重启
- 命令栏执行一次 hostname hai6,(hai6为更改后的主机名)来更改内存
- exec bash
在CentOS7中更改主机名
方法一
- 配置文件/etc/hostname
- 同样建议修改 /etc/hosts
方法二
命令 hostnamectl +选项 修改主机名的选项为set-hostname
$hostnamectl set-hostname hai7 <==hai7为主机名
修改 /etc/hosts文件
DNS与hosts文件名字解析优先级,默认就好
/etc/nsswitch.conf 可以更改DNS和hosts优先级,下图谁在前,谁优先
示例: hosts文件的作用,在hosts文件中,增加以下内容,当输入对应网站时,实际打开的就是IP所在,钓鱼网站常用
1. $vim /etc/hosts 172.20.129.251 www.icbc.com www.ccb.com 2. $ping www.icbc.com PING www.icbc.com (172.20.129.251) 56(84) bytes of data. 实际上ping的为文件中修改的IP地址
6. 配置IP地址
6.1
- CentOS6网卡命名方式
- 以太网:eth[0、1、2。。。]
- ppp (与广域网通讯用的网卡) : ppp[0,1,2…]
- lo(loopback):回环网卡,与物理网卡没关系,只要安装了tcp协议,就会有,127.0.0.1本机IP,只能访问本机,出不去,因为没有127的路由
更改命名:
- 只要是硬件的命名规则是由udev内置的,怎么命名rules.d来定义
网卡命名文件/etc/udev/rules.d/70-persistent-ne
# PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:6c:a2:54", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
ATTR{address}==”00:0c:29:6c:a2:54”,mac地址,选择需要修改网卡对应的行,修改NAME项
- 生效方法
- 重启
- 卸载网卡驱动模块,再加载上
命令dmesg查看的是所有硬件信息,截取网卡
$dmesg|grep eth
lsmod 列出所有的加载到内存中的模块
ethtool -i 网卡名 可查看网卡驱动名称
modprobe -r 驱动名 卸载驱动程序
modprobe 驱动名 加载驱动程序
6.2 网络配置工具
- 静态指定:
- net-tools中的工具,比较传统
ifconfig, route, netstat - 官方推荐使用的新工具
ip: object {link, addr, route}, ss, tc
system-config-network-tui,setup
配置文件
- net-tools中的工具,比较传统
动态分配IP:
DHCP: Dynamic Host Configuration Protocol动态路由
动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表。当网络拓扑结构改变时动态路由协议可以自动更新路由表,并负责决定数据传输最佳路径。管理员不再需要与静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表中的路由表项- 动态路由协议的优点:
- 可以自动适应网络状态的变化。
- 自动维护路由信息而不需要网络管理员的参与。
- 动态路由协议的缺点:
- 由于需要相互交换路由信息,因而占用网络带宽与系统资源。
- 安全性不如静态路。
- 支持多种路由协议:RIP、OSPF和BGP
- RIP协议在判断路径时,选择通过路由器少的路径
- OSPF协议不仅判断通过路由器的数量,还会同时参考带宽,综合选择
- 安装quagga包 ,可以模拟专业路由器进行设置
- 动态路由协议的优点:
6.2.1 ifconfig命令
常见用法
- ifconfig -a 显示所有网卡,包括禁用的
ifconfig [interface] 跟单个接口名,显示指定的接口信息
$ifconfig eth0 查看指定接口的IP信息 eth0 Link encap:Ethernet HWaddr 00:0C:29:6C:A2:5E inet addr:192.168.169.128 Bcast:192.168.169.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe6c:a25e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5249 errors:0 dropped:0 overruns:0 frame:0 TX packets:317 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:53666860 (51.1 MiB) TX bytes:939707 (917.6 KiB) eth0: 网卡代号 HWaddr: MAC地址 inte addr: IPv4地址,Bcast与Mask分别代表广播地址,子网掩码 inte6 addr:IPv6地址 MTU: 以太网所能传送的数据量最大值 RX: 网络启动到目前封包接收情况,packets(封包数),errors(出错包数),dropped(有问题丢弃的包) TX: 启动到目前发送包情况 collisions:代表封包碰撞情况,发生次数越多,代表网络状况越不好 txqueuelen:代表从来传输数据的缓冲区储存长度 RX bytes,TX bytes:总接收、发送的字节总量
ifconfig interface [up|down] 启动停用接口
ifdown也可以 只是将网络层down,数据链路层还在,所以在查看信息时,仍然显示为UP,但确实已经断掉,依赖于配置文件,没加配置文件不能使用ifconfig interface [aftype] options address … 设定和修改接口,临时性的 ,重启失效
- ifconfig eth1 172.18.0.123/16
- ifconfig eth1 172.18.0.123 netmask 255.255.0.0 与上面格式效果相同
- ifconfig eth1 172.18.0.123 netmask 255.255.0.0 mtu 5000 同时修改IP和mtu值
- 给网卡配别名
- 添加子接口,为eth0接口配置子接口9,IP为1.1.1.1/24
ifconfig eth0:9 1.1.1.1/24 - 取消子接口网卡
ifconfig eth0:9 down - 为一个网卡同时配置静态IP和动态IP
实现方法为建立子接口
自动获取的IP是不能放在别名里,别名只能放手动
为每个设备别名生成独立的接口配置文件
- 添加子接口,为eth0接口配置子接口9,IP为1.1.1.1/24
6.2.2保存IP网络配置文件
修改/etc/sysconfig/network-scripts目录下的ifcfg-etho文件,其中ifcfg为固定写法,-后面的为描述可以自由自定
- 常用配置内容
- 动态配置
DEVICE=ethX
BOOTPROTO=dhcp
ONBOOT=yes
Type=Ethernet - 静态配置
DEVICE=ethX
IPADDR=192.168.0.123
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
ONBOOT=yes
Type=Ethernet
- 动态配置
- 修改生效
- CentOS6:service network restart 重启网络服务
- CentOS7:systemctl restart network
- 配置好后会自动生成一个路由记录,用于和本网段主机通讯,如果删掉路由记录就不能通讯了
- 修改后自动生效的话是CentOS6系统中service NetworkManager status服务,使其生效,但不稳定,与service network restart冲突,建议停用,停用方法:
- chkconfig NetworkManager off 停止开机启动
- service NetworkManager stop 停用服务
- 这个服务特殊作用是在图形界面,增加网络图标
- 如果设置了DNS,会自动生成 /etc/resolv.conf文件,此文件生效DNS才算生效
- 常用配置内容
保存路由表网络配置文件
- 在/etc/sysconfig/network-scripts/下新建文件route-IFACE
IFACE为路由表对应的接口,有几个记录分别对应几个接口就建几个文件
帮助文档列出完整选项列表:/usr/share/doc/initcripts-9.49.30/sysconfig.txt 格式
- 目标网络ID via 网关
如:10.0.0.0/8 via 172.16.0.1 - 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
- 目标网络ID via 网关
注意:需service network restart生效
- 在/etc/sysconfig/network-scripts/下新建文件route-IFACE
网卡配置相关参数 | 含义 |
---|---|
DEVICE | 此配置文件应用到的设备 |
HWADDR | 对应的设备的MAC地址,建议不加此项,更换网卡会影响启动 |
BOOTPROTO | 激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp |
NM_CONTROLLED | NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no” |
ONBOOT=yes|no | 在系统引导时是否激活此设备 ,不写为yes |
TYPE | 接口类型;常见有的Ethernet, Bridge |
UUID | 设备的惟一标识 |
IPADDR | 指明IP地址 |
NETMASK | 子网掩码 |
NAME | 注释性文字,说明这个配置文件是干嘛的 |
GATEWAY | 默认网关 |
DNS1 | 第一个DNS服务器指向,一般至少配2个,防止DNS服务器当机 |
DNS2 | 第二个DNS服务器指向,8.8.8.8谷歌的,1.1.1.1澳大利亚的 |
DOMAIN=常用网址 | 不要www.如baidu.com,再ping www时就会连接百度 |
USERCTL=yes|no | 普通用户是否可控制此设备 |
PEERDNS | 如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中 |
修改MAC地址
修改MAC地址 在网卡配置文件中加上MACADDR=新MAC地址,可以逻辑上修改MAC地址。
配置文件中HWADDR=MAC这个是不能改的,不然配置文件会出错,导致网卡服务起不来,功能同DEVICE=名,写两者之一就可以识别是哪个网卡的配置文件
6.2.2 rout路由管理命令
常见用法
- 查看路由表 rout -n
- 添加 rout add [-net|host] target [netmask Nm] [gw GW] [[dev] If]
- -host主机路由
- -net网段路由
- 删除rout del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] - 设置未知路由
- route add -net default gw gateway
- route add -net 0.0.0.0/0 gw gateway
查看通讯路径
- 命令mtr ip,查看跨网段通讯信息
- 命令traceroute ip ,同上
示例一:隔3个路由器设置IP,达成A与B通讯
将电脑当成路由器使用,也就是收到包会转发,功能需要启用
/proc/sys/net/ipv4/ip_forward这个文件值为0是不转发,为1是转发
重启失效,修改配置文件/etc/sysctl.conf 中net.ipv4.ip_forward=0 将值改为1,CentOS7次文件要手动写。- 规划拓扑图A与B为客户端,R1、R2与R3位路由器,各接口IP地址如图所示
各接口的路由表为
A
-未知网段记录,网关为172.20.50.201
-本网段记录Destination Gateway Genmask Flags Metric Ref Use Iface default 172.20.50.201 0.0.0.0 UG 0 0 0 ethA 172.20.0.0 0.0.0.0 255.255.0.0 U 1 0 0 ethA
R1
-未知网段记录
-本网段记录Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 0 0 0 eth2 172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
R2
-net2网段记录
-net3网段记录
-R1网关记录
-R3网关记录Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.169.0 55.168.50.129 255.255.255.0 UG 0 0 0 eth4 20.168.50.0 0.0.0.0 255.255.255.0 U 104 0 0 eth3 55.168.50.0 0.0.0.0 255.255.255.0 U 103 0 0 eth4 172.20.0.0 20.168.50.9 255.255.0.0 UG 0 0 0 eth3
R3
-未知网段记录
-net1网段记录Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 0 0 0 eth5 192.168.169.0 0.0.0.0 255.255.255.0 U 0 0 0 eth6
B
-未知网段记录
-net1网段记录Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 0 0 0 ethB 192.168.169.0 0.0.0.0 255.255.255.0 U 100 0 0 ethB
- 规划拓扑图A与B为客户端,R1、R2与R3位路由器,各接口IP地址如图所示
示例二:
将不同VLAN中的两个客户端连接通讯,使用单臂路由器
A客户端的ip为192.168.32.6/24 B客户端的ip为172.20.0.6/16- 以图形界面配置网卡,右键单击击图形界面网络图标,选择edit connections,选择需要编辑网卡
- 选择edit
- 选择IPV4 Settings ,在method栏中选择Manual,激活Addresser栏,点击Add,添加IP地址
- 查看文件网卡配置/etc/sysconfig/network-scripts/ifcfg-eth0,保留必要项
- DEVICE=eth0
- IPADDR2=172.20.50.201
- PREFIX2=16
- cp ifcfg-eth0 ifcfg-eth1,将配置文件改为
- DEVICE=eth0:1
- IPADDR2=192.168.169.100
- PREFIX2=24
- 为A客户端,配置网关
- DEVICE=eth0
- IPADDR2=192.168.169.129
- PREFIX2=24
- GATEWAY=192.168.169.100
- 为B客户端,配置网关
- DEVICE=eth0
- IPADDR2=172.20.129.251/16
- PREFIX2=16
- GATEWAY=172.20.50.201
6.2.3 netstat命令
可以查看网络连接状态,也可以统计主机连接次数,看其并发量,判断是否是恶意连接
格式
netstat [–tcp|-t] [–udp|-u] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]- 默认显示所有网络状态,包括本地的套接字
- -t:tcp协议相关,常与-n一起使用,显示通过tcp协议和远程那些主机相连
- -u: udp协议相关
- -w: raw socket相关 裸套接字,不通过TCP和UDP协议,直接与IP通讯的方式
- -l: 处于监听状态
- -a: 所有状态
- -n: 以数字显示IP和端口
- -e:扩展格式 ,更多的信息,可以显示连接着身份,节点编号等
- -p: 显示相关进程及程序名,可以查看通过使用哪个应用程序与对方通讯
常用组合
-tan:显示所有处于tcp协议连接
-uan:显示所有处于tcp协议连接
-tnl :显示处于tcp协议连接,以及监听状态的请求
-unl:显示处于udp协议连接,以及监听状态的请求- 显示路由表:
netstat {–route|-r} [–numeric|-n]
- -r: 显示内核路由表
- -n: 数字格式
显示接口统计数据:
格式:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]- netstat -i 统计所有接口的数据包,MTU大小,收发数量,错误数量,丢弃数量等
- netstat -I=IFACE (大写i)可以指定接口 与ifconfig -s eth0效果相同
例如 netstat -Ietho中间不加空格;也可以netstat -I=etho
测试工具
watch 命令 每多久扫描一次命令的执行结果
例如:watch -n0.5 `netstat -i` 每0.5秒更新一次命令执行结果软件包https-tools
yum install httpd-tools包内工具ab
ab -c1000 -n 2000 http://192.168.32.6 同时发送#(1000)个数据包
6.2.4 ip命令
查看、显示、修改ip和路由表,相对较新的工具,通过子命令来实现功能,可通过tab补全查看
- 格式
ip [ OPTIONS ] OBJECT { COMMAND | help } - 选项
-s :显示设备的的统计数据 OBJECT 针对那些网络对象进行操作
addr 关于ip管理
- 格式:ip addr [add|del] [ip参数] [dev 设备名] [参数]
选项:
show:显示信息
add|del:进行相关参数的增加或删除参数:
IP参数:ip地址的设定
dev:ip地址所要设定的接口
broadcast:设定广播域,系统默认设置生成就行
label:设备别名,如ens33:1
scope:作用域,分以下几类,系统默认就好- global: 全局可用 单主机有2块网卡,两个地址都在内核中,任意网卡收到数据包,都会做出回应
- link: 仅链接可用 数据包只有发送到对应网卡才可以得到回应,否则丢弃
- host: 本机可用 只有本机内两个地址互通,外部不通
显示相关
ip addr|a 显示所有网卡地址
ip addr show up 显示启用的设备
ip addr show [dev device] 指定需要查看的设备$ip addr show ens37 <==查看设备名为ens37的信息
增加IP地址
在设备ens33上增加172.20.192.201/24IP,并取别名为ens33:2$ip addr add 172.20.192.201/24 dev ens33 label ens33:2
删除IP地址
删除ens33上指定的一条地址ip addr del 172.20.192.201/24 dev ens33
删除ens33上的所有地址
ip addr flush ens33
link 只显示数据链路层的信息,如MAC地址,MTU等
选项:
- show:显示信息
ip [-s] link show [device] set:设定项目
up|down:启动或关闭接口
$ip link set ens33 up
- address:支持修改MAC地址name:
修改设备名
$ip link set ens37 down <==先关闭接口 $ip link set ens37 name hai
mtu:最大传输单元
$ip link set ens33 mtu 2000
- show:显示信息
route 路由管理项
- 格式:ip route [add|del] [ip] via [gw] dev 设备
- 选项:
show:显示出路由表,也可使用list
add|del :增加或删除路由 示例:添加路由
ip route add 192.168.0.0/24 via 172.20.50.100 dev ens33
示例:添加默认路由
ip route add default via 172.16.0.1
示例:删除路由
ip route del 192.168.1.13 via 172.16.0.1
示例:显示路由
ip route show|list
示例:清空路由表
ip route flush dev eth0
6.2.5 ss命令
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。 速度比netstat快
格式:
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 ] 定义条件进行筛选
dport =
sport =
示例:’( dport = :ssh or sport = :ssh )’
- 选项:
常用组合:
-tan, -tanl, -tanlp, -uan常见用法
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established ‘( dport = :ssh or sport = :ssh )’ 显示所有已建立的ssh连接
ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立的HTTP连接
ss -s 列出当前socket详细信息socket文件
同一个电脑上2个应用程序发送数据互相交换时,都将数据发送到socket文件中,2个程序分别在socket文件中读取数据
7. 多网卡绑定同一IP
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
Bonding工作模式
- 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
- Mode 0 (balance-rr)
实现步骤
实验时,确保参与网卡在同一网段创建bonding设备的配置文件,文件名ifcfg-自定义
/etc/sysconfig/network-scripts/ifcfg-bond0IPADDR=172.20.129.150 NETMASK=255.255.0.0 DEVICE=bond0 对应文件名后缀 BOOTPROTO=none 表示静态配地址 BONDING_OPTS= “miimon=100 mode=0” 定义工作模式 mode 工作模式 0、1、3等 miimon 查询工作网卡状态,单位为毫秒
创建网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth33 ,几个网卡就配几个文件。DEVICE=eth33 BOOTPROTO=none MASTER=bond0 <==绑定到bond0 SLAVE=yes <==表示为从属设备 USERCTL=no
- 重启服务,系统不同采用对应命令
systemctl restart network - 查看bond0状态:/proc/net/bonding/bond0
删除bond0
- ifconfig bond0 down 先禁用bonding网卡
- rmmod bonding 或者 modprobe -r bonding 卸载模块
- 删除配置文件,将物理网卡配置文件改回去
帮助文档
需要先安装kernel-doc这个包
$yum install kernel-doc
找到bonding.txt
rpm -al kernel-dov |grep bond
8. CentOS 7网络属性配置
8.1 CentOS 7网卡命名方式
CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡时,系统可能将新网卡识别为eth0,原网卡被改为eth1,造成识别不了配置文件。
CentOS 7使用基于硬件,设备拓扑和设置类型命名:
- 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1
- 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1
- 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0
- 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56
- 上述均不可用时,则使用传统命名机
使用传统命名方式
在实际工作中,网卡更换情况较少,统一网卡名称有利于自动化管理编辑/etc/default/grub配置文件 ,找到下面这行
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
在行后加上net.ifnames=0
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0"
重新生成生效文件
$grub2-mkconfig -o /boot/grub2/grub.cfg
查看文件/boot/grub2/grub.cfg,找到Linux16行确定行尾加了net.ifnames=0
linux16 /vmlinuz-0-rescue-e2c96d58ccbf4eb796063f25db8f0029 root=UUID=f5362972-e8db-456e-b3e3-88436aa6b865 ro crashkernel=auto rhgb quiet net.ifnames=0
重启生效
8.2 CentOS 7网络配置工具
- 图形工具:nm-connection-editor
- 字符配置tui工具:nmtui与CentOS6中的setup类似
- 命令行工具:nmcli
nmcli命令
常见用法
显示当前网卡的链接名称
$nmcli connection NAME UUID TYPE DEVICE ens33 b13613d0-a8bb-4302-a521-810475eda15d ethernet ens33 连接名 设备名 一个连接名对应一个配置文件,一个物理网卡可以生成多个配置文件,根据不同的环境切换配置文件即可。
增加配置文件
$nmcli connection add con-name ens33-home ifname ens33 type ethernet ipv4.addresses 172.20.129.205/16 add 增加连接 con-name 新增连接名 ifname 针对哪个设备进行设置 type 类型,例使用的是以太网 ipv4.addresses 指定ip地址,还可以指定dns,gateway等,不加此项为动态获取
修改配置文件
第2步中,配置文件依然使用动态获取,需要修改为静态指定$ nmcli connection modify ens33-home ipv4.method manual
这里是为演示修改,正常情况下应该是一条可以搞定
$nmcli connection add con-name ens33-home ifname ens33 type ethernet ipv4.method manual ipv4.addresses 172.20.129.205/16
显示网卡的详细信息
$nmcli connection show ens33-home
启动eth0-home配置连接
$nmcli connection up ens33-home
修改连接名,即修改配置文件中的NAME=项
$nmcli connection modify ens33-home con-name ens33-office
删除连接
$nmcli connection delete ens33-office
修改为禁用网卡,配置文件中ONBOOT项
$nmcli connection modify ens33-home connection.autoconnect no
增加子IP
$nmcli connection modify ens33-home +ipv4.addresses 172.20.50.100/24 增加子IP
删除子IP
$nmcli connection modify ens33-home -ipv4.addresses 172.20.50.100/24 删除子IP
断开网卡防止被激活
$nmcli device disconnect ens33
恢复连接
$nmcli device connect ens33
nmcli实现bonding
添加bonding接口,并添加配置文件
nmcli connect add type bond con-name mybond0 ifname mybond0 mode active-backup
添加从属接口 ,修改配置文件
nmcli con add type bond-slave ifname ens1 master mybond0 nmcli con add type bond-slave ifname ens0 master mybond0 注:如没有为从属接口提供连接名,则该名称是接口名称加类型构成
要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0 nmcli con up bond-slave-eth1
启动绑定
nmcli con up mybond0
9. 网络组Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
- 网络组不同于旧版中bonding技术,提供更好的性能和扩展性
- 网络组由内核驱动和teamd守护进程实现.
多种方式runner
- broadcast 广播策略
- roundrobin 轮转
- activebackup 主备
- loadbalance 根据网卡负载,选择较空闲的网卡接收数据
- lacp (implements the 802.3ad Link Aggregation Control Protocol)国际规范的聚合方式
网络组接口启动顺序
- 启动网络组接口不会自动启动网络组中的port接口
- 启动网络组接口中的port接口总会自动启动网络组接口
- 禁用网络组接口会自动禁用网络组中的port接口 ,网卡是工作在内核集的所以可以
- 没有port接口的网络组接口可以启动静态IP连接 ,没有物理网卡也可以配置静态IP
- 启用DHCP连接时,没有port接口的网络组会等待port接口的加入 ,启用DHCP需要物理网卡
创建网络组
- 格式
nmcli con add type team con-name CNAME ifname INAME [config JSON] 参数
CNAME 连接名
INAME 接口名
JSON 语法格式,指定runner方式- 格式:’{“runner”: {“name”: “METHOD”}}’
- METHOD :{broadcast | roundrobin | activebackup | loadbalance | lacp}
- 格式
创建网络组物理网卡
- 格式
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM - 参数
CNAME 连接名 ,连接名若不指定,默认为team-slave-IFACE
INAME 网络接口名
TEAM 网络组接口名
- 格式
9.1 示例
创建网络组
创建team网络组
nmcli con add type team con-name team0 ifname team0 config ‘{"runner": {"name": "loadbalance"}}' type :类型为 team con-name:指定组名为team0 ifname:这里由于还没有生成,所以也是team0 config:后面加JSON 语法指定组模式
指定静态IP地址
nmcli con mod team0 ipv4.addresses 192.168.1.100/24
将配置文件修改为手动指定
nmcli con mod team0 ipv4.method manual
添加物理网卡eth1
nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
添加物理网卡eth2,配置文件会出现,DEVICETYPE=TeamPort
nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
启动网络组
nmcli con up team0
启动组物理网卡 team0-eth1
nmcli con up team0-eth1
启动组物理网卡team0-eth2
nmcli con up team0-eth2
查看网络组工作状况
teamdctl team0 state;
断开物理网卡
nmcli dev dis eth1
重新连接
nmcli dev connect etho
更换网络组工作模式
修改网络组工作模式,直接修改配置文件如下项
TEAM_CONFIG=”{\”runner\”:{\”name\”:\”activebackup\”}}”
关闭网络工作组
nmcli con down team0
加载配置文件
nmcli connection reload
启动组物理网卡 team0-eth1
nmcli con up team0-eth1
启动组物理网卡team0-eth2
nmcli con up team0-eth2
删除网络组
关闭网络组
nmcli connection down team0
删除网络组物理网卡eth0
nmcli connectioni delete team0-eth0
删除网络组物理网卡eth1
nmcli connectioni delete team0-eth1
9.2 配置文件
网络组配置文件team
/etc/sysconfig/network-scripts/ifcfg-team0DEVICE=team0 DEVICETYPE=Team TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}" BOOTPROTO=none IPADDR0=172.25.5.100 PREFIX0=24 NAME=team0 ONBOOT=yes
组物理网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-team0-eth1DEVICE=eth1 DEVICETYPE=TeamPort TEAM_MASTER=team0 NAME=team0-eth1 ONBOOT=yes
10 测试网络工具总结
- 测试网络连通性
ping
mtr - 显示正确的路由表
ip route - 测试DNS服务使用:
nslookup
host
dig - 跟踪路由
traceroute 可以跟踪穿过多少路由器
tracepath - 抓包命令
tcpdump -i ens33(网卡) icmp(协议) - 补全功能
在6系统中,配置EPEL源,bash-completion安装上可以增加补全功能如同7系统 网络客户端工具
ftp:交互式命令
登录使用匿名账户ftp|anonymose
密码:随便敲- 子命令
ls :查看文件列表
get:可以下载选中的文件至当前目录
lcd:显示当前在客户端目录
!ls:查看本机的文件列表
put:上传,如果有权限
mput/mget:上传下载多个文件
- 子命令
lftp:交互式命令登录不需要账户密码
- 也可以指定账户登录
lftp [-p port] [-u user[,password]] SERVER 非交互式下载ftp服务器文件
lftpget URL例如 lftpget ftp://172.20.0.1/pub/getty
- 也可以指定账户登录
wget [option]… [URL]… 同时支持http与ftp
选项:
-q: 静默模式
-c: 断点续传
-P:保存在指定目录
-O: 保存为指定的文件名wget http://172.20.0.1/centos/7/EULA -o /data/111 将下载的文件EULA另存至/data下取名111
–limit-rate=: 指定传输速率,单位K,M等
links URL
–dump 只显示文字
–source 查看源代码网络排错思路
- 物理设备,网线,交换机等
- 查看网关设置,测试是否畅通,局域网检测
- 查看互联网,ping 114.114.114.114等,外网检测
- 如果ping的通,还不能上网,可能是DNS的问题