一、Linux网络相关概念
1、网卡的命名规则
centos6的网卡命名方式:它会根据情况有所改变而非唯一且固定,在centos6之前,网络接口使用连续号码命名:eth0,eth1等,当增加或删除网卡时,名称可能会发生变化
centos7采用dmidecode采集命名方案,以此来得到主板信息,它可以实现网卡名字永久唯一(dmidecode这个命令可以采集有关硬件方面的信息)
对网络设备的命名方式:
1.如果Firmware(固件)或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,例:ifcfg-ens33
2.如果Firmware (固件)或BIOS为PCI-E扩展槽所提供的索引信息可用,则根据此索引进行命名,例如:ifcfg-enp33
3.如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如:enp2s0
上述均不可用时,则使用传统命名机制
扩展:
在centos7中,en表示:ethernet以太网,就是咱们现在使用的局域网
enX(X常见有下面3种类型)
s:热插拔网卡,usb之类,扩展槽的索引号
o:主板板载网卡,集成设备的设备索引号
p:独立网卡,PCI网卡
nnn(数字)表示:MAC地址+主板信息计算得出唯一的序列
在centos8当中网卡名称延续了ens的格式
二、网络配置命令
1、ifconfig
基础用法:在不带任何选项和参数执行ifconfig命令时,将显示当前主机中已启用的网络接口信息
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
#该接口已启用,支持广播,正在允许,支持组播 最大传输单元1500字节
inet 192.168.246.77 netmask 255.255.255.0 broadcast 192.168.246.255
inet6 fe80::e5b8:7444:11fc:c1c3 prefixlen 64 scopeid 0x20<link>
#IPV6地址 子网长度 作用域link表示仅该接口有效
ether 00:0c:29:3a:75:18 txqueuelen 1000 (Ethernet)
#mac地址 传输队列长度(传输缓存大小) 接口类型
RX packets 6393 bytes 438583 (428.3 KiB)
#接收 报文个数 总和字节数
RX errors 0 dropped 0 overruns 0 frame 0
#接收 错误 丢弃 溢出 冲突帧数
TX packets 1562 bytes 135632 (132.4 KiB)
#发送 报文个数 总字节数
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#错误 丢失 溢出 载荷数 冲突数
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 222 bytes 19240 (18.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 222 bytes 19240 (18.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:06:e1:30 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
常用格式:
ifconfig | 只显示具体网卡的详细信息(无论该网卡是否启动) |
ifconfig -a | 表示显示所有网卡包括没有启动的网卡 |
ifconfig 网卡名称 [up/down] | 表示开启或关闭网卡 |
ifconfig ens33:0 地址 | 设置临时虚拟网卡 |
ifconfig -s | 网络通讯情况 |
ip addr delete | 删除临时ip |
ip addr show | 查看IP地址 |
2、永久修改网卡地址
vim查看网卡配置文件:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
红帽下修改网络地址:
3、hostname
查看或设置当前主机名
hostname [主机名] 临时生效
永久修改主机名:
永久修改当时不会生效,重启或重新打开一个终端才会改变
4、route
查看或设置主机中路由表信息
route [-n]
-n :将路由记录中的地址信息显示为数字形式
路由表主要构成:
Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低
Genmask:目标网络对应的netmask
Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络,gateway是0.0.0.0
Metric: 开销cost,值越小,路由记录的优先级最高
常用命令:
route add -net 网段地址 gw IP地址 | 添加指定网段的路由记录 |
route del -net 网段地址 | 删除指定网段的路由记录 |
route add default gw IP地址 | 向路由表中添加默认网关记录 |
route del default gw IP地址 | 删除路由表中默认的网关记录 |
路由文件的配置
/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
5、netstat
查看网络连接情况netstat
netstat选项:
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-t | 查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限) |
-r | 显示路由表信息 |
-l | 显示处于监听(Listening)状态的网络连接及端口信息 |
-u | 显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息 |
6、ss(socket statistics)
ss命令:可以查看网络连接情况,主要用于获取socket统计信息,它可以显示和netstat命令类似的输出内容。但ss的优势在于它能够显示更多更详细的有关TCP和UDP连接状态的信息,而且比 netstat 更快速更高效,当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux内核中第一手的信息,这就确保了ss的快捷高效,ss命令是Linux CentOS 7中iproute软件包的一部分,默认已经安装。
命令格式: ss [选项]
选项 | 说明 |
-t | tcp协议相关 |
-u | udp协议相关 |
-w | 裸套接字相关 |
-x | unix sock相关 |
-l | listen状态的连接 |
-a | 所有 |
-n | 数字格式 |
-p | 相关的程序及PID |
-e | 扩展的信息 |
-m | 内存用量 |
-o | 计时器信息 |
-r | --resolve 把IP 解释为域名,把端口号解释为协议名称 |
7、ping
测试网络连通性,使用ICMP协议
命令格式:ping [选项] 目标主机
选项 | 说明 |
-c | 发送多少个包 |
-w | 等待多少秒 |
-t | 无终止ping,一直ping |
8、traceroute
路由追踪
命令格式:traceroute IP地址
9、nslookup
域名解析
命令格式: nslookup 域名
dig可以显示出更多详细信息
域名解析配置文件
/etc/resolv.conf 保存的是DNS服务器的地址
/etc/hosts文件 保存主机名与IP地址的映射记录
- 默认情况下,系统首先从 hosts 文件查找解析记录
- hosts 文件只对当前的主机有效
- hosts 文件可减少 DNS 查询过程,从而加快访问速度
10、scp
远程同步
[root@fuck opt]#scp /opt/passwd [email protected]:/opt/passwd
命令字 本地文件地址 对方用户名@地址冒号对面地址
[root@fuck opt]#scp [email protected]:/opt/passwd /opt/
命令字 对方用户名@地址冒号对面地址 本地地址
11、多网卡绑定
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
Bonding聚合链路工作模式
- mod=0 ,即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。负载均衡—所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。性能问题—一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。需要交换机进行端口绑定。
- mod=1,即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。容错能力—只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。无负载均衡—此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。
- mod=2,即:(balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文负载均衡—基于指定的传输HASH策略传输数据包。容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。性能问题—该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有流量是通过单个路由器,由于只有一个网关,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。需要交换机配置为port channel
- mod=3,即:broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。
- mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。负载均衡—基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。对比blance-xor,这种模式定期发送LACPDU报文维护链路聚合状态,保证链路质量。需要交换机支持LACP协议
- mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。需要ethtool支持获取每个slave的速率
- mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量
常用的模式为0,1,3,6
mode1,5,6不需要交换机设置
mode0,2,3,4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需
要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模
式4中需要 LACP和 EtherChannel
实际操作:
1.添加一个双网卡
添加完成后在系统中设置参数,激活网卡
可以看到ens35网卡以及配置成功
2.创建bonding设备的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-bond0
#miimon指定链路监测时间间隔。如果miimnotallow=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
vim /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts/ifcfg-ens35
[root@localhost network-scripts]# systemctl restart network
现在断开一块网卡,再次ping还是可以ping通
两块网卡都是通过bond0通信,断了一块还是可以通信
3.nmcli实现bonding
#创建新连接static ,指定静态IP,不自动连接
nmcti con add con-name static ifname eth0 autoconnect no type Ethernet
ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
nmcli connection modify ens33 ipv4.addresses 192.168.91.100/2
nmcli connection up ens33
#添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.91.123/24
#添加从属接口
nmcli con add type bond-slave ifname ens33 master bond0
nmcli con add type bond-slave ifname ens36 master bond0
#注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens36
#启动绑定
nmcli con up mybond0
12、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 | <数据包文件> 把数据包数据写入指定的文件 |
[root@localhost ~]# tcpdump -D #查看网卡
tcpdump #不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
tcpdump -i ens33 #指定查看ens33 网卡
tcpdump host 192.168.246.77 -i ens33 #监听特定主机,监听主机10.0.0.100 的通信包,注意:出、入的包都会被监听。
tcpdump src host hostname #特定来源
tcpdump dst host hostname #特定目标地址
tcpdump host hostname #如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
[root@localhost ~]#tcpdump ip host 192.168.246.77 and 192.168.246.87 -i ens33 #只抓取 特定主机之间的数据包.
[root@localhost ~]#tcpdump -i ens33 -nn icmp and src host 192.168.91.101 and dst host 192.168.91.100 #扩展
三、DHCP
1、概述
主机获取网络配置可以通过两种方式:
1.指定
2.动态获取
DHCP: Dynamic Host Configuration Protocol,动态主机配置协议
UDP协议,C/S模式,dhcp server: 67/udp,dhcpv4 client :68/udp, dhcpv6 client: 546/udp 主要用途:
- 用于内部网络和网络服务供应商自动分配IP地址给用户
- 用于内部网络管理员作为对所有电脑作集中管理的手段
- 自动化安装系统
当有多个服务器,已客户机先收到谁的 offer报文为准
1.首先客户机加入到当前网络中是没有地址的,他会发送一个dhcp discover广播报文来寻找dhcp服务器
2.服务器接收到discover报文会回复offer(ip地址(合法地址地址中挑出),子网掩码,dns地址,网关等信息)
3.客户机收到offer以后会发送一个request的报文告诉服务器我收到了你的offer,并且我很满意你的地址,我就使用它了,不要再分配给别人了
4.当服务器收到request的报文以后好了解会发送一个ack报文确认消息告诉客户端你放心使用,不会再给别人分配你的ip地址
2、DHCP共有八种报文:
DHCP DISCOVER | 客户端到服务器 |
DHCP OFFER | 服务器到客户端 |
DHCP REQUEST | 客户端到服务器 |
DHCPACK | 服务器到客户端 |
DHCPNAK | 服务器到客户端通知用户无法分配合适的IP地址 |
DHCP DECLINE | 客户端到服务器,指示地址已被使用 |
DHCP RELEASE | 客户端到服务器,放弃网络地地口取消剩余的租约时间 |
DHCP INFORM | 客户端到服务器,客户端如果需要从DHCP服务器端获取更为单ffl的配置信息,则 发送Inform报文向服务器进行请求,极少用到 |
3、配置dhcp动态获取实验
1.安装dhcp
2.将本机的网段加入配置文件,调成仅主机模式
配置完后修改本机网卡
启动dhcp服务