Linux 网络管理

发布时间 2023-08-09 11:06:18作者: 宁采臣open

Linux 网络管理

一. 什么是网络?

1.1 网络的定义

  • 定义: 网络: internet 不同设备通过介质连接在一起,互相通信.
    IOT=物联网,Internet OF Things

1.2 网络传输介质

  • 1位bit 1个0或1位置
  • 1字节byte=8bit
#01 在两台主机之间需要有传输介质 网线    
网线分类: Cat5-cat7  

568B做法线序

直线:用于不同设备之间互连(交换机-PC)
白橙—橙—白绿—蓝—白蓝—绿—白棕—棕

光纤:
数据亮大,速度要求高,延迟低.


#02 在两台主机上面需要有网卡设备
网卡核心作用: 二进制(系统)<-网卡->高低电压(传输介质)

在发送信息时:将二进制(数字信号)信息转换为高低电压(电信号)      #
调至过程
在接收信息时:将高低电压(电信号)信息转换为二进制数(数字信号)     #
解调过程
调制解调器-model 猫 宽带   ADSL 非对称式网络(下载快,上传慢)



#03 在进行数据传输之前,需要协商网络传输速率。
1位bit  1个0或1位置
1字节byte=8bit   

500Mb/s 每秒传输500M个二进制位     实际下载速度是多少? 500/8=62.5 MB


解释下:
		什么时候是字节?什么时候是位? 一般标准:
      小写的一般是bit 		位 比特
      大写的一般是Byte   		 字节



1.3 网络设备

1. 交换机

  • 实现同一个局域网通信工具
  • 网络交换机,是一个扩大网络的器材,能为子网络中提供更多的连接端
    口,以便连接更多的计算机。
#01 如何利用交换机实现通讯
   1. 在数据前面设置目标地址和源地址,目标地址和源地址用mac地址进行标
识
     mac称为物理地址,每块网卡上都有的一个标识身份信息的
     mac地址全球唯一,不能进行修改,mac地址用12位(48bit)16进制标识
 
 
   2. 在网络通讯初期,会利用广播方式进行发送数据包,在通讯的过程,数据
包的发送一定是有去有回的。
     在一个交换网路中,如果产生了大量广播数据包时会产生广播风暴,影响
主机性能,这样的问题称为广播风暴问题

#02 解决广播风暴问题思路:
   减少广播产生数量,将一个大的交换网络切割为几个小的交换网络(局域
网,广播域)

#03 交换机的种类
   傻瓜交换机(TP-link/Dlink/水星...)
   程控交换机(存储程序控制交换机,配置管理,思科、华为、华三)   二
层交换(正常交换机) 三层交换(带管理功能的交换机)

2. 路由器

  • 路由器: 实现多个网段数据传输
  • 根据路由表路由和寻址
#01 linux查看路由
route -n  查看路由表


#windows路由追踪命令
[C:\~]$ tracert -d www.baidu.com 
通过最多 30 个跃点跟踪
到 www.a.shifen.com [110.242.68.3] 的路由:


  • 路由器相关知识点
#01 需要有身份标识信息:ip地址 格式: 点分十进制   点分割的4位十进制数   每个位置0-255
                               
 解释下:
 			IP地址由两部分组成: 交换网络标识信息+主机地址标识信息===网段地址+ 主机地址    
                      
   			10.0.0   			.  100
   			网段地址       主机地址  0-255  0无法使用 255广播地区  1或254 给网关用的
                                                   
#02 查公网ip的方法:
   
windows,打开浏览器,访问百度,搜IP即可
   
linux:curl cip.cc
   
   
高级路由器还有上网行为管理器和防火墙功能

3. 网关路由

  • 实现不同网段之间通讯需要经过一条必经之路,这条路称为网关
#01 路由实现数据传输通讯时,会根据路由表信息进行数据包路由
####   实现不同网段之间通讯需要经过一条必经之路,这条路称为网关

gateway (交换机,路由器) 默认的出口/入口

[root@aliyun ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.26.143.253  0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.26.128.0    0.0.0.0         255.255.240.0   U     0      0        0 eth0

Destination  第1列 目标网段
Gateway      第2列 默认网关 如果是 ip默认网关   如果是 0.0.0.0 路由条目
Genmask      第3列 子网掩码     
Use Iface    最后一列   网卡(网络接口) 进出的接口


4. 区别

交换机 路由器
转发数据,同一个局域网/网段处理数据 段处理数据转发数据,处理不同网段/局域网的数据
识别的是mac地址 识别的ip地址
产生广播风暴 隔离广播风暴,每个路由器的接口可以是不同的网段
多个接口24/48/ 接口较少4/8
mac地址缓存表(指路) 路由条目(静态/动态)
工作层次: 二层交换机 三层交换机 三层设备

二. Linux处理数据包过程

4.1 详解

![image-20230728135311022](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728135311022.png)

#01 解释下含义
User Space 			用户态
kernel Space 		内核态

#02 具体流程
1)当向外界主机发送数据时,在它从网卡流入后需要对它做路由决策,根据其目标决定是流入本机数据还是转发给其他主机

2)如果是流入本机的数据,则数据会从内核空间进入用户空间(被应用程序接收、处理)

3)当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出

4)如果不是流入本机的,而是要转发给其他主机的,则必然涉及到另一个流出网卡,此时数据包必须从流入网卡完整地转发给流出网卡,这要求Linux主机能够完成这样的转发

5) 但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发


4.2 开启 内核转发

#01 临时开启内核转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1

#02 永久开启内核转发
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf

#03 检查
[root@xuexi ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

[root@xuexi ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@xuexi ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0


三. OSI 7层网络模型

3.1 定义

  • 从低到高物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
  • 物数网传会表应
含义 涉及协议或内容
应用层 应用软件,接口,各种协议 http https dns smtp .....
表示层 对数据转换,加密解密 压缩解压 Telnet, Rlogin, SNMP, Gopher
会话层 建立终止会话 SMTP, DNS
传输层 数据如何传输到对端,建立端到端之间的连接 tcp udp 端口
网络层 网络路由和寻址 IP 3CMP, ARP 路由器
数据链路层 通过mac地址识别设备,进行传输 mac 2层交换机
物理层 数据转换为010101010,通过网络介质传递 IEEE 802.1A, IEEE 802.2到IEEE 802.11

3.2 每层解释

#01 应用层含义
应用软件 接口 各种协议,(例如;http https dns smtp)
			
#02 表示层含义
对数据进行转换 加密压缩

#03 会话层
建立管理和终止会话

#04 传输层 (分段)
主要作用: 负责网络中 端到端之间的连接,保证端到端之间的传输(将上层的数据分段处理)
  tcp 传输速度慢 但是可靠(如果对面没收到 则再发送一次)(和用户有关的 重要数据)
  udp 不可靠的传输,速度快 (应用场景 直播 音频)
			
#05 网络层 (打包)
主要作用:将分组数据从源端传输到目的源 (对应的设备 有路由器)(IP 3层交换机)
主要功能:就是路由(指路)和寻址(根据ip 地址找人) 接触的是IP协议即ip地址
对应的设备有 路由器(IP 地址 )
			
#06 数据链路层 (成帧,祯就是本地局域网中传输数据的一个单元)
主要作用: 通过识别mac地址 进行数据传输 (mac 2层交换机)
主要是识别mac标识 12位(48 bit)16进制
1个16进制数 相当于4个比特 bit 
		
#07 物理层 (变位 bit)
主要作用:把数据转换为010101 内容 通过介质传递给对方
  • 经典图示

![image-20230727160702035](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230727160702035.png)

四. TCP/IP (四层模型)

4.1 TCP和UDP区别

  • 7层模型中的传输层
传输控制协议 (TCP) 用户数据报协议(UDP)
面向连接 无连接
可靠连接 不可靠连接
流控 (检查数据是否丢失 丢失重新发送) 尽力而为 尽力传递
使用TCP 应用场景 web 浏览器 电子邮件 文件传输程序 使用UDP 的应用场景 域名系统(DNS) 视频流 IP 语音
  • Tcp 数据包

![image-20230728114833850](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728114833850.png)

  • UDP没有序列号字段和确认字段 所以是不安全协议
##解释下 本数据包固定首部长度 20 
#01 源端口:
即本地发起连接的端口
前4个字节来标识了发送方的端口号和接收方的端口号,即该数据包由谁发送,由谁接收。前2个字节标识源端口号,紧接着2个字节标识目的端口号

#02 目标端口:
即要访问的服务的端口

#03 序列号:
因为传输层会将上层的数据进行分段,因此需要对分段数据进行编号,同
时也便于数据的重组。

#04 确认号(ack)
用于对数据的进行验证
ack:确认序号,更确切地说,是接收端所期望收到的下一个序号。
确认序号为上次接收的最后一个字节序号加1.只有确认标志位(ACK)为1的时候,确认序号才有效

4.2 TCP 3次握手

  • 图示

![image-20230728112441766](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728112441766.png)

#TCp 三次握手
01. 由主机 A 发送建立 TCP 连接的请求报文,其中报文中包含 seq 序列号,
	是由发送端随机生成的,并且还将报文中 SYN 字段置为 1,表示需要建立 TCP 连接请求。

02. 主机 B 会回复 A 发送的 TCP 连接请求报文,其中包含 seq 序列号,也
	是由回复端随机生成的,并且将回复报文的 SYN 字段置 1,而且会产生
	ACK 验证字段,ACK 验证字段数值是在 A 发过来的 seq 序列号基础上加
	1 进行回复;并且还会回复 ack 确认控制字段,以便 A 收到信息时,知
	晓自己的 TCP 建立请求已得到了确认。

03. A 端收到 B 端发送的 TCP 建立请求后,会使自己的原有序列号加 1 进行
	再次发送序列号,并且再次回复 ACK 验证请求,在 B 端发送过来的 seq
	基础上加 1,进行回复;同时也会回复 ack 确认控制字段,以便 B 收到
	信息时,知晓自己的 TCP 建立请求已经得到了确认。


##tcp三次握手的 状态变化说明

\01. 首先,建立连接之前服务器和客户端的状态都为CLOSED。

\02. 服务器创建socket后开始监听(启动服务),变为LISTEN状态。

\03. 客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。

\04. 服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD。

\05. 然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED

\06. 服务器收到客户端的ACK后也变为ESTABLISHED。
此时3次握手完成,连接建立!

4.3 TCP 4次握手

  • 图示

![image-20230728112424598](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728112424598.png)

#TCP 四次挥手断开过程说明:
01. 主机 A 发送断开 TCP 连接请求的报文,其中报文中包含 seq 序列号,是
由发送端随机生成的,并且还将报文中 FIN 字段置为 1,表示需要断开
TCP 连接。

02. 主机 B 会回复 A 发送的 TCP 断开请求报文,其中包含 seq 序列号,是
由回复端随机生成的,而且会产生 ACK 验证字段,ACK 验证字段数值是
在 A 发过来的 seq 序列号基础上加 1 进行回复;并且还会回复 ack 确认
控制字段,以便 A 收到信息时,知晓自己的 TCP 断开请求已得到了确认。

03. 主机 B 在回复完 A 的 TCP 断开请求确认控制字段后,不会马上就进行
TCP 连接的断开,主机 B 会先确保断开前,所有传输到 A 的数据是否已
经传输完毕,一旦确认传输数据完毕就会将控制报文中 FIN 字段置 1,进
行发送断开请求

syn 与你建立连接请求
seq 随机序列号
ack 确认控制字段
FIN 断开连接请求

##白话文
01. 客户端先向服务端发送FIN报文,请求断开连接,其状态变为FIN_WAIT1。
02. 服务器收到FIN后向客户端发送ACK,服务器状态变为CLOSE_WAIT。
03. 客户端收到ACK后就进入FIN_WAIT2状态。此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送。
04. 直到发完了,就发送FIN报文,此时服务器进入LAST_ACK状态。
05. 客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL长的时间后进入CLOSED状态。服务器收到
客户端的ACK就进入CLOSED状态。

4.4 TCP 11中状态

状态出现方式 状态出现环境 状态名称 状态描述
TCP 建立过程 涉及5种状态 服务端/客户端 CLOSED 默认初始化状态
服务端 listen 建立socket 进入监听状态
客户端 syn_sent 发送syn报文 进入syn发送状态
服务端 syn_rcvd 接收syn报文 并回复ack及syn报文
客户端/服务端 established 接收syn报文 回复ack 建立连接(客户端)
接收ack报文 建立连接(服务端)
TCP 断开过程 涉及的6种状态 服务端/客户端 established 默认断开前初始化状态(连接中)
客户端 fin_wait1 发送断开连接请求 fin 报文
服务端 close wait 收到fin后 向客户端发送ack (如有数据,需要传输完,再发送fin)
客户端 fin wait2 收到服务端返回的ack报文 等待数据传输
服务端 last ack 数据传完了 发送fin 报文
客户端 time wait 回复fin断开连接请求 发送ack
服务端/客户端 closed 收到ack后报文后 立刻断开连接
等待2MSL 后 断开连接(客户端)11中国
11种 客户端 closing 没有收到回复fin报文的ack 直接收到fin

五. 因特网层-网络层

  • 就是7层中的网络层
  • 核心协议是: IP协议 , ARP协议

4.1 ARP 协议

1. 定义

ARP协议说明 地址解析协议

  • 功能

    ①. 将IPv4地址解析MAC地址

    ②. 维护映射的缓存

2. ARP 解析流程

ARP解析流程:

  1. 用户查询本地arp缓存,看看有没有对应的mac缓存记录
  2. 客户发出APR 广播10.1.1.2的mac地址是什么?请告诉我(10.1.1.1)
  3. 局域网汇中所有机器收到广播信息,只有10.1.1.2 通过单播进行回复,说
    10.1.1.2mac地址是........
  4. 客户收到后把10.1.1.2 mac 缓存下.
#01 提示信息:
网络层对应的是IP地址,是跨网段使用的;
链路层地址对应的是MAC地址,是物理地址,是在局域网内部使用
的;
MAC地址就好比自己的小名一样,只有本地局域网有效



3. 命令使用

##基本语法
arp (命令) 管理系统的arp缓存。ip<< >> mac			
arp: 显示所有的表项。
	-d  address: 删除一个arp表项。				
	-a 使用bsd形式输出。(没有固定的列)
	-n 使用数字形式显示ip地址,而不是默认的主机名

#01 查看arp 信息
[root@centos_4c8g ~]# arp -a
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.5.241            ether   f8:bc:12:45:86:ac   C                     ens3
192.168.5.15             ether   52:54:00:a8:f8:ac   C                     ens3
gateway                  ether   58:25:75:bc:cb:87   C                     ens3
172.17.0.2               ether   02:42:ac:11:00:02   C                     docker0
192.168.5.8              ether   52:54:00:2e:b5:46   C                     ens3

4. arp 欺骗

ARP 欺骗是一种以 ARP 地址解析协议为基础的一种网络攻击方式

在讲 ARP 欺骗之前我们先来了解一下正常情况下一台主机是如何通过路由器上网的:

![image-20230728113724173](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728113724173.png)

如上图, 我们以 A 主机 ping 8.8.8.8 为例:

  1. 主机 A 上执行 ping 8.8.8.8
  2. 主机 A 准备根据默认路由将数据包发送给 192.168.0.1, 但是最开始的时候主机 A 不知道 192.168.0.1 的 Mac 地址, 所以主机 A 广播一条 ARP Request, 询问 192.168.0.1 的 Mac 地址是什么
  3. 路由器收到该 ARP 请求, 发现自己是 192.168.0.1 于是向主机 A 回复一条 ARP Reply, 告诉主机 A 192.168.0.1 的 Mac 地址是 xxxGW.
  4. 主机 A 收到该 ARP Reply, 并使用该 Reply 中的 MAC 地址封一个 ICMP Request 包, 然后将包发出去
  5. 路由器收到该 ICMP 包, 发现目标 IP 是公网 IP, 便将该包放送到公网, 公网返回 ICMP Reply 给路由器
  6. 路由器准备将 ICMP Reply 发送给 192.168.0.100, 但是同第2步, 路由器最开始的时候也不知道 192.168.0.100 的 Mac 地址是多少, 所以路由器会广播一条 ARP Request, 询问 192.168.0.100 的 Mac 地址是什么
  7. 主机 A 收到 ARP Request, 发现自己是 192.168.0.100, 于是向路由器回复 ARP Reply, 告诉路由器 192.168.0.100 的 Mac 地址是 xxxA.
  8. 路由器收到 ARP Reply, 并使用该 Reply 中的 MAC 地址将第5步收到 ICMP Reply 包重新封包, 并发送出去
  9. 主机 A 收到 ICMP Reply

至此, 正常的上网流程结束. 然后对照上面的流程回答下面两个问题:

  1. 如果主机 B 无脑的向主机 A 发送 ARP Reply, 告诉 A 192.168.0.1 的 MAC 是 xxxB, 会发生什么?
  2. 如果主机 B 无脑的向路由器 GW 发送 ARP Reply, 告诉 GW 192.168.0.100 的 MAC 是 xxxB, 会发生什么?

答案如下图

![image-20230728113826654](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728113826654.png)

如果主机 B 做了上面说的两件事的话, 那么主机 A 访问网络的所有数据都会先经过主机 B, 并且回来的数据也都会经过 B, 至此, 整个 ARP 欺骗完成.

于实际操作, 在自己的机器上安装一个 arpspoof 工具便可以, Ubuntu 下可以直接使用如下命令安装:

apt install dsniff

安装好之后先打开 IP 转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

然后使用 arpspoof 命令进行欺骗, 命令使用方法如下:

arpspoof -i <网卡名> -t <欺骗的目标> <我是谁>

比如上面我举得例子, 分别开两个终端:

终端1, 欺骗主机 A 我是网关

arpspoof -i eth0 -t 192.168.0.100 192.168.0.1

终端2, 欺骗网关我是主机 A

arpspoof -i eth0 -t 192.168.0.1 192.168.0.100

欺骗成功之后可以通过抓包工具查看主机 A 所有的流量, 这里不再多说.

4.2 IP地址 详解

1. 什么是IP地址

#01 几个问题
我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采用网卡设备本身就有的世界唯一标识物理地址(MAC地址)呢?

IP地址的使用到底是基于什么考虑呢?    

#02 答案
IP地址可唯一标识IP网络中的每台设备的所在位置,这才是它真正存在的意义,而MAC地址顶多能标识它是哪个厂家生产的,并不能标识它所处于网络架构的网络位置。

#03 IP地址的组成
每台主机(计算机、网络设备、外围设备)必须具有唯一的地址
IP地址由两部分组成
网络ID:
标识网络
每个网段分配一个网络ID
身份证 唯一性

主机 ID:
标识单个主机
由组织分配给各设备

2. IPv4地址格式

  • 点分十进制

![image-20230728115023301](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728115023301.png)

3. 十进制和二进制之间的转换

2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
十进制 256 128 64 32 16 8 4 2 1
二进制 掩码 1000 0000 0100 0000 0010 0000 0001 0000 0000 1000 0000 0100 0000 0010 0000 00001
  • 简述 口算
#01 十进制----> 2进制
0000 0110 6
0000 0011 3

解释下:	  0000 0110  = 6
					根据上方表格对于数字  4 +2 +0

#02 掩码计算可用IP公式 例如掩码 /28:
	2^(32-24) -2 其中28为掩码 (-2 ,广播地址和0 两个IP 不可用  所有减2  二进制都为111111时 为广播地址) 
	32位减去网络位 等于主机位,2^(32-28) 2的次幂 为主机可用ip

  • Linux ibase
  • bc 计算器
  • 二进制转十进制:ibase=10
  • 十进制转二进制:obase=2
#01 我们ping一个IP地址
[root@node101.yinzhengjie.org.cn ~]# ping -w 3 192.168.30.1      
[root@aliyun ~]# ping -w 4  172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from 172.17.0.1: icmp_seq=4 ttl=64 time=0.048 ms
64 bytes from 172.17.0.1: icmp_seq=5 ttl=64 time=0.050 ms

--- 172.17.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.041/0.048/0.053/0.006 ms



# 设置转换的进制:配个 bc
bc 计算器
二进制转十六进制:ibase=10 
十六进制转二进制:obase=2

#02 紧接着我们将ip地址 172.17.0.1 转为二进制。
[root@aliyun ~]# echo "obase=2;172" | bc
10101100
[root@aliyun ~]# echo "obase=2;17" | bc
10001
[root@aliyun ~]# echo "obase=2;0" | bc
0
[root@aliyun ~]# echo "obase=2;1" | bc
1

解释下:计算器前面的 0默认不显示 自己补全8位即可
			例如: 10001  =  00010001
						0			 =  00000000
						1			 =  00000001

#03 二进制转位十进制
[root@aliyun ~]# echo "ibase=2;00000001" | bc
1
[root@aliyun ~]# echo "ibase=2;00000000" | bc
0
[root@aliyun ~]# echo "ibase=2;00010001" | bc
17
[root@aliyun ~]# echo "ibase=2;10101100" | bc
172

#04 将以上十进制IP地址 一起转位二进制(了解即可)
[root@aliyun ~]# echo "ibase=2;10101100000100010000000000000001" |bc
2886795265
[root@aliyun ~]# ping 2886795265
PING 2886795265 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.047 ms
^C
--- 2886795265 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.039/0.043/0.047/0.004 ms

解释下:使用上面计算的数字去ping,发现照样ping的地址是 172.17.0.1


4. IP地址分类

  • 图示

![image-20230728133925728](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728133925728.png)

类别 8bits 8bits 8bits 8bits IP 取值范围
A 类型 网络位 1-126
B 类型 网络位 网络位 128-191
C 类型 网络位 网络位 网络位 192-223
D 类型(多播) 224-239
E 类型(实验室地址) research
  • 特殊类别
#01 简述下 D类
  多播地址,或组播地址。

  多播地址最高4位必须是1110,那么地址范围就是:"224.0.0.0"到"239.255.255.255"。

  224.0.0.1特质所有主机。

#02 E类
实验室使用地址,即保留未使用,那么地址范围就是:"240.0.0.0"到"255.255.255.255"




  • 特殊地址
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服务器获取地址,系统会为主机分配这样地址



5. 公私网IP范围

  • 公网IP范围

![image-20230728135112959](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728135112959.png)

  • 私网IP范围

![image-20230728134751402](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728134751402.png)

六. DNS

6.1 dns解析定义

  • dns 域名解析器

  • DNS的用处:

    • A记录:域名解析为IP
    • 2.CNAME别名记录:给设置别名 cname
  • 解析流程

![image-20230728141454880](/Users/ningcaichen/04-个人文档/01-Markdown/man-文档总计/1-Linux核心基础入门/Linux 网络管理.assets/image-20230728141454880.png)


dns域名解析服务 (域名解析为ip)
			
			DNS的用处:
			1.A记录:域名解析为IP
			2.CNAME别名记录:给设置别名 cname 
		
	域名解析的过程
		首先检查本地dns缓存 和hosts 配置文件内 有没有相对应的记录
		然后 联系到本地dns 服务器-->> 根域名服务器-->> 
		从根域名服务器开始一层一层寻找,找到后返回 生成缓存,方便并加速下次访问
			
		dig 查询解析DNS过程 (dig +域名 ) 			
		dig +trace www.baidu.com 显示详细过程

6.2 dns 相关命令

#01 dig命令  		查询解析DNS过程 (dig +域名 ) 
[root@aliyun ~]# dig www.baidu.com

			
#02 nslookup命令 	查询域名对应的ip (nslookup www.baidu.com
[root@aliyun ~]# nslookup ww.baidu.com
Server:		100.100.2.136
Address:	100.100.2.136#53

Non-authoritative answer:
ww.baidu.com	canonical name = ps_other.a.shifen.com.
Name:	ps_other.a.shifen.com
Address: 110.242.68.66

#03 host 查询域名对应的ip cname记录域名的别名 
[root@aliyun ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 112.80.248.75
www.a.shifen.com has address 112.80.248.76
  
#04 ping命令
[root@aliyun ~]# ping www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=52 time=7.79 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=52 time=7.81 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 7.793/7.803/7.813/0.010 ms


6.3 dns配置文件

/etc/resolv.conf是DNS客户机的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式比较简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。

resolv.conf的关键字主要有4个,分别为:

  • nameserver:定义DNS服务器的IP地址
  • domain:定义本地域名
  • search:定义域名的搜索列表
  • sortlist:对返回的域名进行排序
    注意:这里最主要的就是nameserver关键字,如果没有指定nameserver就找不到DNS服务,其它关键字是可选的。

1.1 参数解释

  • nameserver
    表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。
  • domain
    声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。
  • search
    它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。
  • sortlist
    允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。

1.2 举例说明

cat /etc/resolv.conf
domain  51osos.com
search  www.51osos.com  51osos.com
nameserver 202.102.192.68
nameserver 202.102.192.69

1)nameserver:表示域名解析时,使用该地址指定的主机为域名服务器,其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver
2)domain:声明主机的域名,很多程序会用到,如邮件系统。当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点(.)前面的内容。
3)search:它的多个参数指明域名查询顺序,当要查询没有域名的主机,主机将在由search声明的域中分别查找。
注意:search和domain不能共存,如果同时存在,后面出现的将会被使用。
4)sortlist:运行将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。

"search domainname.com"表示当提供了一个不包含完全域名的主机名时,在该主机名后添加domainname.com的后缀;"nameserver"表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的。其中domain和search可以同时存在,也可以只有一个,nameserver可以指定多个。

6.4 常见的dns服务器

#公共的DNS服务器地址
##阿里云
223.5.5.5
223.6.6.6

##114
114.114.114.114
114.114.115.115


##google
8.8.8.8


##云服务器自动设置, 物理服务器机房提供

##其他dns
https://dnsdaquan.com/#8.8.8.8

七. 网络配置

7.1 网络相关配置文件

1. 网卡配置文件

  • /etc/sysconfig/network-scripts/ifcfg* 配置网卡信息
  • /etc/sysconfig/network 配置主机名和网关
#01 定义 
在/etc/sysconfig/network-scripts/目录下有不少文件,绝大部分都是脚本类的文件,但有一类ifcfg开头的文件为网卡配置文件(interface config),所有ifcfg开头的文件在启动网络服务的时候都会被加载读取,但具体的文件名ifcfg-XX的XX可以随意命名。


#02 配置文件每行含义
[root@oldboy-c7 ~]# cat /etc/sysconfig/networkscripts/ifcfg-ens32
TYPE=Ethernet 	#网络类型 互联网(以太网)
BOOTPROTO=none 	#网卡获取ip方式, dhcp(自动获取),	none/static 	固定ip地址
ONBOOT=yes 		#网卡开机的时候(或重启网络的时候)是否自启动
NAME=ens33 		#网卡名字
DEVICE=ens33 	#设备名称
UUID=b5ac98d2-6350-4aae-bdec-08455218d340 #设备统一识别符 #HWADDR=xxxx #Hard Ware
Addresss 			硬件地址 mac地址
IPADDR=10.0.0.100 	#ip地址
PREFIX=24 			#子网掩码
NETMASK=255.255.255.0
GATEWAY=10.0.0.2	 #默认网关 给可以访问公网网卡设置
DNS1=223.5.5.5 		 #配置当前系统使用的DNS服务的地址
DNS2=223.6.6.6


#03 重启网卡
#systemctl stop NetworkManager #nmtui nmcli(可以尝试研究)

#重启所有网卡
systemctl restart network #vi修改配置文件 然后restart
network 重启网卡生效

#重启某一块网卡
ifdown ens33 && ifup ens33


# 查询帮助
less /usr/share/doc/initscripts-9.49.53/sysconfig.txt



2. DNS配置文件

  • /etc/resolv.conf
  • /et/hosts
#01 /etc/hosts
[root@aliyun ~]# cat  /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6

127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4

172.26.138.198	zhangyuzhou.cn

属于本地文件解析  ip 域名方式

#02 /etc/resolv.conf
[root@aliyun ~]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.136
nameserver 100.100.2.138

dns服务器配置文件

4. /etc/services

  • 该文件中记录的是端口和服务的对应关系。
[root@aliyun ~]# grep '^ftp\|^ssh' /etc/services
ftp-data        20/tcp
ftp-data        20/udp
ftp             21/tcp
ftp             21/udp          fsp fspd
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol
ftp-data        20/sctp                 # FTP
ftp             21/sctp                 # FTP
ssh             22/sctp                 # SSH
ftp-agent       574/tcp                 # FTP Software Agent System
ftp-agent       574/udp                 # FTP Software Agent System
sshell          614/tcp                 # SSLshell
sshell          614/udp                 #       SSLshell
ftps-data       989/tcp                 # ftp protocol, data, over TLS/SSL
ftps-data       989/udp                 # ftp protocol, data, over TLS/SSL
ftps            990/tcp                 # ftp protocol, control, over TLS/SSL
ftps            990/udp                 # ftp protocol, control, over TLS/SSL
ssh-mgmt        17235/tcp               # SSH Tectia Manager
ssh-mgmt        17235/udp               # SSH Tectia Manager

7.2 网卡管理-增删改IP

  • 增加临时IP
#01 增加IP地址 ifconfig
1) 临时增加IP
[root@aliyun ~]# ifconfig eth0:0 10.0.0.200/24 up
[root@aliyun ~]# ip a s eth0:0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:12:d1:c0 brd ff:ff:ff:ff:ff:ff
    inet 172.26.138.198/20 brd 172.26.143.255 scope global dynamic eth0
       valid_lft 265678079sec preferred_lft 265678079sec
    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe12:d1c0/64 scope link
       valid_lft forever preferred_lft forever

2)删除IP
[root@aliyun ~]# ip addr del  10.0.0.121/24 dev eth0 label eth0:1
删除ip, add换成 del



#02 方式二 ip addr 
1) 增加临时IP
[root@aliyun ~]# ip addr add 10.0.0.121/24 dev eth0 label eth0:1
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:12:d1:c0 brd ff:ff:ff:ff:ff:ff
    inet 172.26.138.198/20 brd 172.26.143.255 scope global dynamic eth0
       valid_lft 265677949sec preferred_lft 265677949sec
    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0:0
       valid_lft forever preferred_lft forever
    inet 10.0.0.121/24 scope global secondary eth0:1


2)删除IP
[root@aliyun ~]# ifconfig eth0:0 down
ifconfig eth0:0 down  删除eth:0 ip地址


*详细第九条会讲*

  • 永久增加IP
#配置永久ip

#01 增加10.0.0.200ip  命名为 ens33:0
[root@oldboy-c7 ~]# cat /etc/sysconfig/networkscripts/ifcfg-ens33:0
NAME=ens33:0
DEVICE=ens33:0
IPADDR=10.0.0.200
PREFIX=24

#02 重启网络服务
#重启所有网卡
systemctl restart network #vi修改配置文件 然后restart
network 重启网卡生效

#重启某一块网卡
ifdown ens33 && ifup ens33


八. 防火墙

8.1 firewalld防火墙

#01 查看firewalld服务状态
systemctl status firewalld  

出现 Active: active (running)高亮显示则表示是启动状态。
出现 Active: inactive (dead)灰色表示停止,看单词也行。

#02 查看firewalld的状态
firewall-cmd --state

#03 开启、重启、关闭firewalld.service服务
1)开启
service firewalld start

2)重启
service firewalld restart

3)关闭
service firewalld stop

#05 查看防火墙规则
firewall-cmd --list-all 
  

###查询、开放、关闭端口
1)查询端口是否开放
firewall-cmd --query-port=8080/tcp

2)开放80端口
firewall-cmd --permanent --add-port=80/tcp

3)移除端口
firewall-cmd --permanent --remove-port=8080/tcp

4)重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

##6、参数解释
1)firwall-cmd:是Linux提供的操作firewall的一个工具;
2)--permanent:表示设置为持久;
3)--add-port:标识添加的端口;


8.2 selinux

8.3 iptables

九. 网络常用命令

9.1 ifconfig

  • 具体参数
ifconfig [ interface | -a ]
ifconfig interface options

选项说明:
interface:指定被操作的网络接口名,如eth0
up       :激活指定的网络接口,如果在命令行中为网络接口分配了IP地址,则默认会up
down     :将指定的接口设置为down状态
[-]arp   :启用或禁用该接口上使用ARP协议,如"ifconfig eth0 -arp"
mtu N    :设置指定接口的最大传输单元(MTU)
netmask  :设置该接口的IP netmask,默认会采用A/B/C类地址的掩码位数
address  :要分配给该接口的IP地址


  • 案例
[root@xuexi ~]# ifconfig eth0:1 192.168.100.20 netmask 255.255.255.0 up  # 添加IP地址
[root@xuexi ~]# ifconfig eth0:1 192.168.100.20/24 up                     # 也可使用CIDR格式掩码
[root@xuexi ~]# ifconfig eth1 up       # 激活该网络接口
[root@xuexi ~]# ifconfig eth1 down     # 临时down掉eth1接口
[root@xuexi ~]# ifconfig eth1 -arp     # 抑制eth1上的arp
[root@xuexi ~]# ifconfig eth1 arp      # 启用eth1上的arp


需要注意的是,ifconfig所有的配置都是应用于内核的,所以只会临时生效,重启网络服务后会立即失效。

对于slave地址,即别名地址,若要永久生效,应该建立对应的别名接口配置文件,如/ets/sysconfig/network-scripts/ifcfg-eth0:0,然后在该文件中的DEVICE关键字上给定eth0:0名称,该DEVICE项必须配置正确。


9.2 ifcfg

  • 具体语法
ifcfg DEV [[add|del [ADDR[/LEN]] | stop]
       add - add new address
       del - delete address
       stop - completely disable IP

  • 简单使用
[root@xuexi ~]# ifcfg eth1:0 add 192.168.100.20/24   # 添加一个地址
[root@xuexi ~]# ifcfg eth1:0 del 192.168.100.20      # 删除一个地址
[root@xuexi ~]# ifcfg eth1 stop      # 临时禁用eth1

9.3 hostname

  • 用于设置主机名,但也有几个其它好用的功能。
hostname [-I] [-f] [-d] [-s] [hostname]

选项说明:
-I         :获取该主机上所有非环回IP地址,该选项不依赖于主机名解析
-f,--fqdn  :获取fqdn
-d,--domain:获取fqdn的域名部分,等价于命令dnsdomainname
-s,--short :获取fqdn的主机名部分,严格地说是获取第一个"."前的部分,例如"www.baidu.com"将获取为"www"


  • 简单使用

使用-I选项可以直接获取该主机上的所有IP地址,包括别名地址,这在某些时候太方便了。

[root@xuexi ~]# hostname -I
192.168.100.54 172.16.10.10

hostname修改的主机名为临时生效,它修改的其实是/proc/sys/kernel/hostname文件。

[root@xuexi ~]# cat /proc/sys/kernel/hostname
xuexi.longshuai.com

9.4 route 网关路由

1. 定义

#01 路由解释
主机路由:直接指明到某台具体的主机怎么走,主机路由也就是所谓的静态路由
网络路由:指明某类网络怎么走
默认路由:不走主机路由的和网络路由的就走默认路由。操作系统上设置的默认路由一般也称为网关。


#02 优先级
若Linux上到某主机有多条路由可以选择,这时候会挑选优先级高的路由。在Linux中,路由条目的优先级确定方式是先匹配掩码位长度,再比较管理距离(比如metric)。也就是说,掩码位长的路由条目优先级一定比掩码位短的优先级高,所以主机路由的优先级最高,然后是直连网络(即同网段)的路由(也算是网络路由)次之,再是网络路由,最后才是默认路由。若路由条目的掩码长度相同,则比较节点之间的管理距离,管理距离短的生效。


#03 解释
route命令用于显示和管理路由表。当使用了add或del选项时,route命令将设置路由条目,否则route命令将显示路由表。

要显示路由表信息,只需简单的route -n即可,其中-n选项表示不解析主机名


2 简单使用

  • 基本语法
#01 查看当前路由表信息
[root@xuexi ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 eth0
172.16.10.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.0.0     192.168.100.70  255.255.0.0     UG    0      0        0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.100.78  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

[复制代码](javascript:void(0)?

例如:

(1).添加和删除默认路由

shell> route add default gw 192.168.100.10
shell> route del default
shell> route del default gw 192.168.100.10   # 若有多条默认路由,则再加上gw即可唯一删除指定条目

因为默认路由的目的地是0.0.0.0,所以操作默认路由也可以使用0.0.0.0替代default关键字,但这样就麻烦的多了。

(2).添加和删除网络路由

shell> route add -net 172.16.10.0/24 gw 192.168.100.70
shell> route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70

若实在不知道下一跳给谁,那么指定本机接口也是可以的。

shell> route add -net 172.16.10.0/24 dev eth0

删除路由可以直接在增加路由的语句上将add改为del关键字。如

shell> route del -net 172.16.10.0/24 gw 192.168.100.70
shell> route del -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
shell> route del -net 172.16.10.0/24 dev eth0

但大多数时候,可以偷懒,只要能唯一确定删除的是哪条路由即可。如:

shell> route del -net 172.16.10.0/24

(3)添加和删除主机路由

shell> route add -host 172.16.10.55 gw 192.168.10.20
shell> route del -host 172.16.100.55

13.4.2 配置永久路由

根据接口创建路由配置文件/etc/syconfig/network-scripts/route-ethX,要从那个接口出去X就是几。

路由配置文件的配置格式非常简单,每一行一个路由条目,先是要到达的目标,然后是via关键字,最后是下一跳地址。要求下一跳必须能到达,且一般都和ethX同网段。

DEST    via     nexthop

例如eth0网卡的IP地址是192.168.10.123,要通过网卡eth0出去到达10.0.0.10,那么下一跳的地址要和eth0的地址在同网段,如192.168.10.222。

10.0.0.0 via 192.168.10.222

添加主机路由、默认路由、网段路由示例如下,其中dev是可以省略的,因为没有任何用处,配置在哪个eth文件中就会从哪个接口出去。

#默认路由
default     via 192.168.100.1
0.0.0.0/0   via 192.168.100.1

#网段路由
192.168.10.0/24   via 192.168.100.1

#主机路由
192.168.100.52/32 via 192.168.100.33 dev eth1

[复制代码](javascript:void(0)?

配置完后,重启network服务即可立即生效。

route-ethX文件的还有另外一种永久路由的配置写法,但上面的方法更简单快捷,所以此处就不多说了。

配置永久路由时,需要注意几点:

(1).route-ethX的对应网卡配置文件ifcfg-ethX必须存在,否则路由无效。(对于虚拟机,通常新添加的网卡都没有对应的ifcfg-ethX文件,但ifconfig却能找到该网卡)

(2).如果在文件中配置永久默认路由,则必须保证所有使用了DHCP服务的网卡配置文件ifcfg-ethX中的DEFROUTE指令设置为"no",表示DHCP不设置默认路由。

(3).如果在route-ethX文件中配置永久路由,且该网卡使用了DHCP服务分配地址,则必须保证该网卡的ifcfg-ethX文件中的PEERROUTES指令设置为"no",表示DHCP设置的路由允许被覆盖。

9.5 ip 和 ip address

  • ip

这是一个极其强大的命令,前面所有的网络信息显示和管理的命令,都可以由ip命令来替代完成。它是一个严格模式化的命令。

1. 获取ip命令的帮助

先简单说明下ip命令的基础和获取帮助的方法。

[root@xuexi ~]# ip -h

Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] }

可见命令非常复杂,有很多options,还有很多object,每个Object又对应不同的命令。但其实能用到的就几个object:addr/route/neigh/link。

使用ip object help可以获取到该object的语法帮助。例如:

[root@xuexi ~]# ip addr help

在ip命令行下,任何object都可以写其全名,也可以写其缩写名,例如address这个object,可以简写为addr,也可以简写为一个字母a

[root@xuexi ~]# ip a help      # 等价于ip address help和ip addr help

尽管还有一个a开头的object为addrlabel。这时因为ip会从上述语法给出的object顺序从前向后匹配,例如"ip m"将匹配到"ip maddr",如果想匹配别的,如addrlabel,则写长一点即可"ip addrl"。

对于CentOS 6,man ip时会输出整个ip的帮助文档,包括每个object的命令和说明。在CentOS 7中,则要对每个object独立进行man,例如addr这个object。

[root@xuexi ~]# man ip-address

以下是所有Object的man列表。

[复制代码](javascript:void(0)?

[root@xuexi ~]# rpm -ql iproute | grep "man8/ip-"
/usr/share/man/man8/ip-address.8.gz
/usr/share/man/man8/ip-addrlabel.8.gz
/usr/share/man/man8/ip-l2tp.8.gz
/usr/share/man/man8/ip-link.8.gz
/usr/share/man/man8/ip-maddress.8.gz
/usr/share/man/man8/ip-monitor.8.gz
/usr/share/man/man8/ip-mroute.8.gz
/usr/share/man/man8/ip-neighbour.8.gz
/usr/share/man/man8/ip-netconf.8.gz
/usr/share/man/man8/ip-netns.8.gz
/usr/share/man/man8/ip-ntable.8.gz
/usr/share/man/man8/ip-route.8.gz
/usr/share/man/man8/ip-rule.8.gz
/usr/share/man/man8/ip-tcp_metrics.8.gz
/usr/share/man/man8/ip-token.8.gz
/usr/share/man/man8/ip-tunnel.8.gz
/usr/share/man/man8/ip-xfrm.8.gz

[复制代码](javascript:void(0)?

2. ip addr

ip addr用于管理网络设备上的ip地址,也可以查看ip地址的属性信息。在老版本的Linux中,一块网卡上设置多个IP,这些IP称为别名IP,但是从CentOS 6开始,这些IP称为secondary IP或slave IP,因为这些IP自身也可以附带属性。

(1).ip addr add/del

[复制代码](javascript:void(0)?

ip address { add | del } IFADDR dev STRING
IFADDR := PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label STRING ]

以add为例:
dev NAME:指定要设置IP地址的网卡
local ADDRESS (default):接口的IP地址。IP地址的格式依赖于是ipv4还是ipv6。对于ipv4而言,给定地址,可能还需要给定cidr的掩码位长度
broadcast ADDRESS:接口的广播地址
label NAME:为该接口的IP地址设置label名,label名称必须以网络接口名开头后接冒号,如eth0:X

del和add的参数相同,且dev是必须要给定的,其余的参数可选,因为del的时候是通配del,如果删除时有多个满足条件的条目,则删除第一个条目。

[复制代码](javascript:void(0)?

例如:

[root@xuexi ~]``# ip addr add 192.168.100.45 dev eth0``[root@xuexi ~]``# ip addr add 192.168.100.35/24 dev eth1

此方式添加的地址不会在ifconfg命令中显示,ifconfg能捕捉到的是别名,所以可以为地址加上label,以让secondary被ifconfig查看到。例如:

[root@xuexi ~]# ip addr add 192.168.100.45 dev eth0 label eth0:0

要删除ip,则简单的多,但必须指定dev,且最好也指定cidr的掩码长度。

[root@xuexi ~]# ip addr del 192.168.100.45 dev eth0
[root@xuexi ~]# ip addr del 192.168.100.35/24 dev eth1

(2).ip addr show

虽然也有几个选项,但是感觉没什么用,直接ip addr show就够了。因为ip命令可以缩写,所以可以写为

[复制代码](javascript:void(0)?

[root@xuexi ~]# ip a show
[root@xuexi ~]# ip a s
[root@xuexi ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:71:81:64 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.70/24 brd 192.168.100.255 scope global eth0
    inet6 fe80::20c:29ff:fe71:8164/64 scope link
       valid_lft forever preferred_lft forever

[复制代码](javascript:void(0)?

(3).ip addr flush

用于批量删除地址,该命令其实非常危险,一个不小心就会误伤无辜,所幸的是flush的时候不给定任何参数或者没有任何条目可以匹配上的时候将不执行flush动作,总之该命令要小心使用。同样也必须给定dev参数。

例如删除eth1上所有地址。

[root@xuexi ~]# ip a flush dev eth1

删除eth1上所有的secondary地址。

[root@xuexi ~]# ip a f secondary dev eth1

3. ip route

该命令维护和查看内核中的路由表。

(1).ip route add/del/change/append/replace

语法格式为:

ip route { add | del | change | append | replace } dest[/cidr_mask] [ via ADDRESS ] [ dev STRING ]

其中dest为目标地址,可以是主机地址、网段地址,一般在地址后都会带上cidr格式的掩码长度,不带时默认为32位长度。如果dest为"0/0"或者写为"default",则表示默认路由。

例如添加/修改/替换普通路由:

[root@xuexi ~]# ip route add/change/replace 172.16.10.0/24 via 192.168.10.20

添加/修改/替换默认路由:

[root@xuexi ~]# ip route add/change/replace default via 192.168.10.20
[root@xuexi ~]# ip route add/change/replace 0/0 via 192.168.100.2

删除某路由:

[root@xuexi ~]# ip route del 172.16.10.0/24
[root@xuexi ~]# ip route del default   # 删除默认路由

(2).ip route show

列出路由表。

语法格式为:

ip route show [to [ root | match | exact ] ADDR_pattern ] [ via ADDR ]

其中to关键字是默认关键字,用来匹配路由的目标地址。其后可以跟上修饰符root/match/exact,exact为默认修饰符,表示精确匹配掩码位长度,root修饰符表示匹配的掩码位长度大于或等于ADDR_pattern给定的掩码位长度,match修饰符匹配短于或等于ADDR_pattern掩码位长度。例如"to match 16.0/16"将能匹配到"16.0/16"、"16/8"和"0/0",但却无法匹配"16.1/16"和"16.0/24"以及"16.0.1/24",而"to root 16.0/16"将能匹配"16.0/24"和"16.0.1/24"。

via是根据下一跳的方式来列出路由条目。

例如:

img

img

[root@xuexi ~]# ip route show to match 192.168/24 | column -t     
default  via  192.168.100.2  dev  eth0  proto  static  metric  100

img

其实无需那么花哨,简简单单的"ip r"多方便。

(3).ip route flush

批量删除路由表条目。参数和ip route show的参数一样。

例如删除由eth1出去的路由条目。

[root@xuexi ~]# ip route flush eth1

删除下一跳为192.168.100.70的路由条目。

[root@xuexi ~]# ip r flush via 192.168.100.70

删除目标为192.168.0.0/16网段的路由

[root@xuexi ~]# ip route flush 192.168/16

(4).ip route save/restore

用于保存当前的路由表以及恢复路由表。保存路由表时,路由表将以二进制裸数据的格式输出,也就是看不懂的二进制文件。恢复路由表时,要求设备的设置和保存路由表时是一样的,恢复时已存在于路由表中的路由条目将被忽略。

例如当前路由表信息如下:

[root@xuexi ~]# ip r
default via 192.168.100.2 dev eth0  proto static  metric 100
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.20
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.20  metric 100
192.168.100.0/24 dev eth0  proto kernel  scope link  src 192.168.100.54  metric 100
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.74  metric 101

保存当前路由表。

[root@xuexi ~]# ip route save > /tmp/route.txt

删除几条路由表。

[root@xuexi ~]# ip route flush dev eth0

[root@xuexi ~]# ip r
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.74  metric 101

恢复路由表。

[root@xuexi ~]# ip route restore < /tmp/route.txt