九、定时任务、网络基础与进阶

发布时间 2023-07-01 01:12:44作者: lichengbo

一、 定时任务

1. 人生中第一个服务:定时任务

1.1 定时任务概述

  • 目标:熟练书写定时任务规则,实现定时/重复执行指令/脚本

  • 应用场景:主要用于定时任务+脚本备份的日常操作

  • 定时任务:相当于Linux闹钟,可以在指定的(日期,时间)去执行一些指定任务,重复性或经常性的任务就可以交给定时任务。

1.2 定时任务使用

1)预备姿势(服务与配置)

a)软件

cronie (软件包)

crond(服务名)

系统默认就运行的服务,并且开机自启动
systemctl status crond

[root@lichengbo-nb ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-05-29 00:10:35 CST; 15min ago
 Main PID: 1009 (crond)
   CGroup: /system.slice/crond.service
           └─1009 /usr/sbin/crond -n

May 29 00:10:35 lichengbo-nb systemd[1]: Started Command Scheduler.
May 29 00:10:35 lichengbo-nb crond[1009]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 28% if used.)
May 29 00:10:35 lichengbo-nb crond[1009]: (CRON) INFO (running with inotify support)

b)配置文件

定时任务配置文件
用户定时任务:
/var/spool/cron/root????? root用户名,以用户名命名的配置文件
系统定时任务:
/etc/cron.daily/ 每天运行(系统)
/etc/cron.hourly/ 每小时运行(系统)
/etc/cron.weekly 每周运行(系统)
/etc/cron.monthly 每月运行(系统)
/etc/crontab 定时任务的配置文件(很少用)
/etc/cron.deny 拒绝哪些用户使用定时任务
/var/spool/cron/  #默认是空的  如果有点事任务下面以用户名命名

[root@lichengbo-nb ~]# ll /var/spool/cron/
total 0

c)定时任务管理命令

  • visudo ====>vi /etc/sudoers
  • crontab ====> vi /var/spool/cront/用户名(root)
定时任务管理命令格式
crontab -l (list) 查看定时任务
crontab -e (edit) 编辑定时任务
2)配置文件的格式
  • 按照行为单位进行配置(一行是一个定时任务)
  • 每个任务分为两大部分: 什么时间 做什么
  • 什么时间:分时日月周
  • 做什么:命令/脚本
#定时任务格式:小例子
每天早上8:30去学校(go to school)

30 08 * * * go to school

每天晚上12点上床睡觉(go to bed)

00 00 * * * go to bed

表示整点,其他日期的时候没有表述哪个分钟,一般写个00即可 12点整 晚上12点

如果不加则表示每分钟

3)定时任务的其他格式
定时任务特殊符号
*** 星号** 所有,全部 (比如:* 在分钟位置上,表示0-59,每分钟)
(* 在小时的位置上,表示0-23小时,每小时)
/ 斜线 每隔多久运行一次==*/2 * * * * #每隔两分钟运行一次
- 减号 从哪里来到哪里去,表示时间的范围 每天早上9点-中午12点,每个小时运行cmd命令
, 逗号 独立,互不相干的时间。每天半夜12点,上午7点,下午14点,运行cmd
#每天早上9点-中午12点,每个小时运行cmd命令
00 09-12 * * * cmd

#每天半夜12点,上午7点,下午14点,运行cmd
00 00,07,14 * * * cmd
4)案例

a)案例01 每分钟输出oldboy追加到/tmp/name.log中

`定时任务书写流程
1.根据题目选择命令,测试命令/脚本,进行测试。
echo oldboy >>/tmp/name.log

2.对应的命令写入到定时任务的配置文件中(crontab -e/-l)
[root@lichengbo-nb ~]# crontab -l
#1.echo 一个名字到文件中
* * * * * echo oldboy >>/tmp/name.log

3.等待运行与检查结果与查看定时任务的日志
[root@lichengbo-nb ~]# cat /tmp/name.log
oldboy
oldboy

查看定时任务的日志
tail -f /var/log/cron

b)案例02 每2分钟同步系统的时间ntpdaew

1.根据题目选择命令,测试命令/脚本,进行测试。
ntpdate ntp1.aliyun.com

2.对应的命令写入到定时任务的配置文件中(crontab -e/-l)
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com   #注意不在/bin下的命令,需要写绝对路径

3.等待运行与检查结果与查看定时任务的日志
date -s '20230512' #临时修改一个时间,看时间能不能同步回来

查看定时任务的日志
tail -f /var/log/cron

c)案例03 每天晚上12点整备份/etc/目录到/backup下面,每天的备份不同

1.根据题目选择命令,测试命令/脚本,进行测试。
1)测试命令
mkdir /backup
date +%F
tar zcf /backup/etc-`date +%F`.tar.gz  /etc/

2)测试脚本(初级脚本)
[root@lichengbo-nb ~]# mkdir -p /server/scrips/            创建脚本目录
[root@lichengbo-nb ~]# vim /server/scrips/01.bak-etc.sh    编辑脚本
[root@lichengbo-nb ~]# cat /server/scrips/01.bak-etc.sh
tar zcf /backup/etc-`date +%F`.tar.gz  /etc/
[root@lichengbo-nb ~]# sh /server/scrips/01.bak-etc.sh     执行脚本
[root@lichengbo-nb ~]# ll /backup                          检查备份结果
total 10300
-rw-r--r-- 1 root root 10544691 May 30 01:09 etc-2023-05-30.tar.gz


2.对应的命令写入到定时任务的配置文件中(crontab -e/-l)
#1)每分钟
* * * * * sh /server/scrips/01.bak-etc.sh
#2)如果每分钟没问题,在改为指定时间半夜12点执行
00 00 * * * sh /server/scrips/01.bak-etc.sh
3.等待运行与检查结果与查看定时任务的日志

  • 为何使用脚本:
    • 大部分命令,处理简单命令,其他命令建议放入脚本中
    • 初级使用脚本,命令大礼包
    • 脚本进阶使用,在脚本中使用变量

c)案例03 每天晚上12点整备份/etc/目录到/backup下面,每天的备份不同 (使用变量方法)

oldboy=666                              #创建变量
echo $oldboy                            #echo输出  输出变量内容  echo 666
touch $oldboy                           #创建以变量内容的文件   touch 666


cat /server/scrips/01.bak-etc.sh        #脚本内容 
time=`date +%F`                         #命令date +%F的结果赋予给time变量中
tar zcf /backup/etc-$time.tar.gz  /etc/

1.3 定时任务书写规范及案例

1) 书写流程
#1. 根据要求选出对应的命令,书写脚本,测试
#2. 写入定时任务
1)先按照每分钟执行
2)在再修改为对应的时间
#3 测试,检查
1)看结果
2)看日志
2)为何要用绝对路径?
现象:定时任务中或脚本中命令,非/bin目录下的命令,使用绝对路径
原因:定时任务在运行命令脚本的时候,只能识别位于/bin和/usr/bin的命令,导致位于其他目录的命令,点事任务无法识别
解决:
#方法01:非/bin目录下的命令,都用绝对路径
#方法02:在脚本的开头重新定义或加载下命令的路径
         export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
         . /etc/profile

3)灵异的邮件提示:You have new mail in /var/spool/mail/root

现象:突然出现一个你有新邮件提示。
、
原因:定时任务中命令或脚本有输出,默认通过邮件发送给root用户,
      root进行操作的时候命令就会有收到新邮件的提示,You have new mail in /var/spool/mail/root
      如果系统中的邮件服务关闭,你不会收到邮件,这样系统憋的很难受,系统会把没有发送出去的邮件临时存放起来,日积月累,会有大量       小文件,最后导致inode不足。

解决方法:让定时任务执行命令或脚本的输出(无论是正确或错误的),定向到空(黑洞/dev/null)
例子:# * * * * * sh /server/scrips/01.bak-etc.sh &>/dev/null

4)定时任务书写注意事项

  • 增加注释说明
  • 书写定时任务的时候尽量使用脚本,提高要求(使用变量)
  • 定时任务执行命令或者脚本,加上定向到空或者追加到文件
  • 定时任务文件的路径:使用绝对路径
  • 调试脚本的时候,根据我们书写的流程进行调试(提高要求:调试脚本可以使用sh -x)
  • 书写定时任务:就是大象放冰箱一步一步来⚠️

1.4 定时任务小结

  • 格式整体简单
  • 定时任务通过使用各种命令或脚本实现目标
  • 熟练掌握:案例
  • 熟练掌握:书写流程,注意事项
  • 逐渐理解:绝对路径,定向到空

二、 网络入门与进阶

1. 网络简介

  • 网络:

    • 简单说通过网络介质把各种设备连接起来形成的结构。
  • 网络介质:

    • 网线:六类网线、七类网线
    • 光纤
    • wifi
    • 无线5G
  • 网速/传输速度:

    • 1000Mb/s 网络中传输速度一般指的是位,而不是字节.
    • 1字节=8位. 1000/8 125M字节/s
    • 一般辨别方法 Mb(位) MB(字节)

2 网络设备与架构

2.1 交换机

  • switch (开关,交换机)

  • 交换机特点:

    • 在一个交换机的端口上所连接的所有终端设备,均在一个网段上(称为一个广播域)
    • 并且一个网段会有一个统一的网络标识,会产生广播消耗设备CPU资源
    • 终端用的设备接入,连接交换机
    • 交换机会有一些基本的安全功能
    • 了解:广播域的隔离(创建VLAN 虚拟局域网)
    • 了解:交换机可以隔离冲突域,每一个端口就是一个冲突域

2.2 路由器

  • 连接不同的网络
  • 用于直路

路由器特点:

  • 路由协议的转发(路由选路,指路)
  • 路由类似于现实生活中从A地去往B地可能需要先不行,在坐车,在做飞机才能到达B地,这样的整个过程在网络中对应数据的传递过程就称为路由,因此一个数据信息跨越不同网段传递到目的地址,就可以把传递数据的过程称为路由,也可以看做每条传递数据的路径。
  • 数据转发,会维护一个路由表(相当于一个地图)
  • 路由会作为网关(数据的出入口,类似于大楼的大门),一般会在网络除垢的位置摆放一台路由器
  • 路由器用于连接广域网(公网)

2.3 通用网站网络架构

小结:

  • 交换机与路由器特点
  • 一遍网站网络部分的架构图

3. OSI7层模型

3.1 概述

  • 目标:

    • 熟练掌握7层模型包含了什么

    • 逐渐掌握7层模型每一层特点

    • 逐渐掌握7层模型与数据发送(封包,打包),数据接受过程(解包,拆包)

    • 数据传输中的加工过程(打包,解包)

    • 7层模型规定了数据在通过软件处理的时候增加了什么信息,对方收到的时候如何进行拆解

3.2 OSI7层模型

  • open system interconnect 开放系统互联参考模型,是由ISO(国际标准化组织)定义的。
OSI7层 每一层概述
7️⃣应用层 大部分软件运行在这一层 http,https
6️⃣表示层 复制数据加密,解密,压缩.......
5️⃣会话层 主要负责会话管理,维护
4️⃣传输层 主要负责数据传输方式
3️⃣网络层 主要负责路由与寻址
2️⃣数据链路层 将分组数据封装成帧
1️⃣物理层 物理链路,网卡 本质:把数据转换为二进制形式,通过线缆传输。

4. OSI7层模型详解

4.1 应用层

  • 大部分软件,服务运行在应用层中。

  • 详细含义:暴露很多接口,提供个给其他服务软件使用,主要就是提供应用程序可以接入网络的接口,并根据程序的不同对应不同的接口协议。

  • 接口:跟USB接口一样,这里的接口指的是软件的接口,用于软件之间,服务之间的相互使用。(就是别人定义好的规范)

  • 应用层中常见的服务/协议:

    • http:超文本传输协议,网站基础协议之一
    • https:通同,只是多了个对数据加密
    • smtp:简单邮传输协议,发邮件
    • dns:域名解析服务
协议 端口
http 80
https 443
smtp 35
dns 53

4.2 表示层(了解)

4.3 会话层(了解)

4.4 传输层(重点)

  • 建立与对方的连接
  • 数据如何传输给对方,丢失了如何处理
    • 可靠的连接——tcp
    • 不可靠连接——udp
  • 通过端口与对方连接

4.5 网络层

  • 复制讲数据从源传输到目的

  • 主要功能:

    • 提供ip地址
    • 进行路由
  • 设备:三层路由器

4.6 数据链路层

  • 把上层数据进行转换转换为帧
  • 通过mac地址访问对应的机器

mac地址:网卡物理地址,世界独一无二的地址

4.7 物理层

  • 网卡:把上面的数据转换为网络介质可以传输的信号
  • 把数据转换为0101010内容,通过传输介质传递给对方

小结:

OSI7层模型 含义 协议
7️⃣应用层 应用之间相互调度使用,提供接口 http(80),httos(443),smtp(25),dns(53)
6️⃣表示层 数据加密,解密,编码,解码,压缩,解压缩
5️⃣会话层 负责建立,管理卫华会话信息
4️⃣传输层 负责连接建立,传输是否可靠 tcp/udp,核心概念:端口
3️⃣网络层 负责路由与寻址 核心概念:IP地址
2️⃣数据链路层 负责数据到达局域网后传输 核心概念:mac地址
1️⃣物理层 负责把数据转换为介质可以识别的信号,通过介质传输 网卡,传输介质

5. 数据传输与OSI7层模型

给对方发送:"天凉了,多喝热水?"发生了什么

5.1 封包过程

  • 把"天凉了,多喝热水" 从应用层开始一层层层增加内容(封包).
  • 最后通过网络介质传输出去.

5.2 网络设备处理包的过程

5.3 对方解包的过程

5.4 抓包查看

6. TCP/IP 协议(OSI7层精简模型)-了解

7. TCP 3次握手-重点

  • 与服务建立连接的流程

  • 1️⃣客户端发出建立连接请求:SYN建立连接请求,同时发出seq的随机数(sep=100)

  • 2️⃣服务端收到客户端请求:ACK(确认),SYN(与客户端建立连接),发出ack=seq+1(101),seq=随机

  • 3️⃣客户端收到服务端请求与确认:发出ACK确认建立连接,发出ack=seq+1(667) seq=ack(101)

  • 4️⃣到此,连接建立,开始传输数据

8. TCP 4次挥手-重点

  • 1️⃣客户端:发送断开连接请求:FIN断开连接请求,seq=随机数
  • 2️⃣服务端:收到客户端请求,确认:ACK确认断开,seq=随机数 ack=seq+1
  • 3️⃣服务端:向客户端发出断开连接请求,FIN度拿开连接请求,seq=随机数 ack=seq+1
  • 4️⃣客户端:确认手抖啊请求,断开连接, ACK确认收到请求,seq=随机数 ack=seq+1
  • 5️⃣断开连接

9. 抓包分析-3次握手与4次挥手

1) 准备

工具

  • wireshark(win)
  • linux 安装nc软件

知识点

常见TCP中的标记位
SYN sync 同步请求,与服务器端口建立连接.
ACK ack 确认.(回复:收到.)
FIN finnish/final 结束,断开连接.
PSH 表示传输数据.

seq, ack

seq与ack
seq sequence 序列号,随机.
ack ack 确认号.

2) 三次握手 - 熟悉(能够抓取三次握手数据包即可)

#linux 下面通过nc命令创建一个端口.
yum install -y nc
nc -kl 12306   #创建12306端口
ss  -lntup     #检查端口
#windows通过本地shell 连接12306端口
telnet  10.0.0.200 12306
如果要断开,请按ctrl+alt+]

注意需要关闭防火墙和selinux.

#关闭防火墙
systemctl stop firewalld  
systemctl disable firewalld
#检查防火墙
systemctl   status firewalld 
#关闭selinux
setenforce   0  
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'
/etc/selinux/config
#检查selinux
getenforce  #结果为 disable 或 permissive 即可.

开始抓包: 过滤器中输入: tcp.port =12306 抓取端口是12306的数据包

客户端:请求建立连接:SYN

服务端:确认请求(ACK),并且请求建立连接(SYN)

客户端: 确认建立连接(ACK)

10. TCP/UDP 区别

4层协议
TCP 传输控制协议:基于3次握手四次挥手,可靠连接。
UDP 用户数据报协议:不可靠连接
传输控制协议(TCP) 数据服务协议(UDP)
面向连接(3次握手,4次挥手,建立,断开连接) 无连接
可靠传输 不可靠传输
流控(检查数据是否丢失,丢失重新发送) 尽力而为,尽力传递
使用TCP应用:WEB浏览器;电子邮件;文件传输程序 使用UDP的应用:域名系统(DNS);视频流,IP语音(VoIP)

10.1 TCP

10.2 UDP

11. TCP 11种状态

11.1 三次握手状态

  • 1️⃣首先,建立连接之前服务器和客户端的状态都为CLOSED。
  • 2️⃣服务器创建socket后开始监听(服务端启动后),变为LISTEN状态。
  • 3️⃣客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。
  • 4️⃣服务器收到客户端的报文向客户端发送ACK和SYN报文,此时服务器的状态变为SUN_RCVD(收到了客户端发送的SYN请求)。
  • 5️⃣然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED.
  • 6️⃣服务器收到客户端的ACK后也变为ESTABLISHED,此时三次握手完成,连接建立。

11.2 四处挥手的状态

  • 1️⃣客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1.
  • 2️⃣服务器收到FIN后向客户端发送ACK,服务器状态变为CLOSE_WAIT。
  • 3️⃣客户端收到ACK后就进入FIN_WAIT2状态,此时连接已经断开了一半了,如果服务器还有数据要发送给客户端,就会继续发送。
  • 4️⃣知道发完了,就发送FIN报文,此时服务器进入LAST_ACK状态。
  • 5️⃣客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,在过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。

11.3 第11种状态补充

CLOSING状态表示:

客户端发送了FIN,但FIN_WAIT1状态时没有收到服务器的ACK确认字段,缺收到了服务器的FIN字段,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

12. 常见网络协议

12.1 DNS

  • DNS:域名解析服务/协议

详细的DNS解析流程

DNS解析

  • 通过命令查看DNS解析详细流程
#缓存 windows 命令
##系统级别
ipconfig   /displaydns  #显示
ipconfig   /flushdns    #清空缓存


#详细解析过程    linux命令
[root@lichengbo-nb ~]# dig nbre.oldboylinux.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> nbre.oldboylinux.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12158
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1408
;; QUESTION SECTION:
;nbre.oldboylinux.com.		IN	A

;; AUTHORITY SECTION:
oldboylinux.com.	600	IN	SOA	dns11.hichina.com. hostmaster.hichina.com. 2022052002 3600 1200 86400 600

;; Query time: 251 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Sat Jun 10 23:55:00 CST 2023
;; MSG SIZE  rcvd: 110


#详细 DNS解析流程
[root@lichengbo-nb ~]# dig +trace nbre.oldboylinux.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> +trace nbre.oldboylinux.com
;; global options: +cmd
.			14	IN	NS	f.root-servers.net.
.			14	IN	NS	m.root-servers.net.
.			14	IN	NS	j.root-servers.net.
.			14	IN	NS	a.root-servers.net.
.			14	IN	NS	i.root-servers.net.
.			14	IN	NS	h.root-servers.net.
.			14	IN	NS	l.root-servers.net.
.			14	IN	NS	k.root-servers.net.
.			14	IN	NS	b.root-servers.net.
.			14	IN	NS	e.root-servers.net.
.			14	IN	NS	d.root-servers.net.
.			14	IN	NS	g.root-servers.net.
.			14	IN	NS	c.root-servers.net.
;; Received 239 bytes from 223.5.5.5#53(223.5.5.5) in 10 ms

com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			86400	IN	DS	30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.			86400	IN	RRSIG	DS 8 1 86400 20230623050000 20230610040000 60955 . Z6zyPmTGm2OSUV8H8WDesZVY8O5Q4fa8zyPL4ZhH1TH6uP6autJHg2e3 lfiyfOvWYV7B5xPFI5TOOBBh6/YSPO1lDHC0tKDPjX8LQWDfQXH9ajVS KEiYQR9u5ntiUKbjOF1JQ0XbFFRlMWZ38iZ74humxbqRuDYCAUry5GZr 45RN/v4W0RBkh5jBVyZUVRyWxrCp00SI/sxnIDPGtI5kYkicz26kilYD IQlXXFKlnRo9rn5f/3dkGY2DOg08ECrVCty2XdA0BKp31JSatFybiUBe eY2W2UlbEqcrBS8sf1Y2tH1djVJToH0xKfJAKT+cvB1Mt+pM2ACtxWXv pTIoog==
;; Received 1180 bytes from 199.7.83.42#53(l.root-servers.net) in 7 ms

oldboylinux.com.	172800	IN	NS	dns11.hichina.com.
oldboylinux.com.	172800	IN	NS	dns12.hichina.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230615042524 20230608031524 46551 com. opW1EZF0WaMz+df3vPSEQppiJ1Lj//YDFV/jDliPAJW+mSiYmFbJVQrq aNXtOgLzSD9VGKZ1ct/giCaP4pMt6RCCFaIKgpf7VwTCKtvOfV2IImZ5 y9iV8EQqx3oSFAD4BrchjjgsVzo+6k9pp1tyLdlbfO83DUibCyFuRNAc Tnsahwk274qiOF40DtdAXdxT1AMGusu4KTOOKoaW/hicxw==
M00FIMFI7PFCSP98ONH4HM4R2LB0A7EN.com. 86400 IN NSEC3 1 1 0 - M00G03Q79M1ER78C7S0U9R7K35BSGH0Q NS DS RRSIG
M00FIMFI7PFCSP98ONH4HM4R2LB0A7EN.com. 86400 IN RRSIG NSEC3 8 2 86400 20230617050425 20230610035425 46551 com. SzQwgeDoAJBz5b+sessfEvpYwsZGgrp+0ajJbJjB/2G5GHD6PisKCSvi ax0LVDezFKA31gFhH8tz31ZX2IrkL+sxhSnfOGxTAqlUMa2WSPTO4G6z af8u0HWgWXoIfKTgi+kcde3fDYUaQ/kK4nADnHY01iAlTr/5zrcWHdJA oDBvPSvCl12bySLZcCDmClAWCl/C6NBH0TGwsjXNJ2uWhw==
;; Received 958 bytes from 192.26.92.30#53(c.gtld-servers.net) in 238 ms

oldboylinux.com.	600	IN	SOA	dns11.hichina.com. hostmaster.hichina.com. 2022052002 3600 1200 86400 600
;; Received 124 bytes from 120.76.107.42#53(dns11.hichina.com) in 36 ms

12.2 DNS故障

  • 通过域名访问:ping 域名 dig解析域名报错 yum 安装软件失败

  • ping 公网ip可以访问。

  • 此时需要检测与配置一下DNS(网卡配置)

#排查 是否DNS有问题
1. ping 域名
2. ping 公网ip
[root@lichengbo-nb ~]# ping baidu.com 
ping: baidu.com: Name or service not known
[root@lichengbo-nb ~]# ping 223.5.5.5 
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128
time=6.41 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=128
time=6.69 ms

12.3 ARP协议

  • DNS 域名----->ip
  • ARP IP------>MAC地址
  • ARP地址解析协议:ip地址转换为网卡物理地址(MAC地址)

ARP 协议是3层协议,工作在2层

解析流程:

  • 10.0.0.200----->10.0.02
  • 1️⃣发送arp请求,发送广播找人,谁知道10.0.0.2的mac地址,请告诉10.0.0.200
  • 2️⃣所有局域网的设备都收到广播,只有10.0.0.2这个机器进行响应(回复):我是10.0.0.2 我的mac地址是.......
  • 3️⃣缓存mac地址

抓包查看过程:

#10.0.0.200(都在这台机器操作)
arp -n #查看当前系统arp缓存表
ping 10.0.0.201
arp -d 10.0.0.201 #删除arp缓存
#10.0.0.201

12.4 ICMP协议 Internet控制报文协议

  • ping 就是ICMP协议

12.5 网络协议小结

协议 名字 特点
DNS 域名解析系统/服务 域名解析为ip地址
ARP 地址解析协议 IP地址解析为mac地址
ICMP 因特网控制报文协议 ping背后使用的协议

13. 网卡配置(ip,DNS)

13.1 网卡命名

网卡命名规则:
ens33

eth0
  • 修改网卡名字为eth0
    • 1️⃣安装系统的时候修改
    • 2️⃣安装完成后修改
#安装完成后修改
第一步:修改/boot/grub2/grub.cfg配置
在linux16这一行结尾添加
net.ifnames=0   biosdevname=0

#修改网卡配置文件
[root@lichengbo-nb ~]# grep eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 
NAME=eth0
DEVICE=eth0

#修改网卡配置文件名为eth0
[root@lichengbo-nb ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0

安装系统时修改

安装系统的时候选择第一个让后按TAB键。在最后写入net.ifnames=0 biosdevname=0

13.2 网卡配置文件

  • 网卡配置文件绝对路径:/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet                #基本固定,网络类型:以太网
       
BOOTPROTO=none               #网卡固定ip还是自动获取ip(DHCP  自动分配ip)
                             #BOOTPROTO=dhcp  自动获取
                             #BOOTPROTO=none或static 手动获取

DEFROUTE=yes                 #是否可以自动以路由规则

NAME=eth0                    #网卡名字
DEVICE=eth0                  #网卡名字

UUID=9965f5fa-a9e4-458f-a30c-221e07a448f2   #统一设备符

ONBOOT=yes                   #网卡是否自动运行(开机,重启网卡)

IPADDR=10.0.0.200            #ip地址

PREFIX=24                    #子网掩码,设置这个局域网中最多有多少台机器

GATEWAY=10.0.0.2             #网关

DNS1=223.5.5.5               #主配置dns地址
IPV6_PRIVACY=no              
  • DNS地址的选择:首选默认,如果没有默认的,选择当前网络环境的(找运营商);最后在使用公共DNS

14. 用户访问www.baidu.com整个过程

14.1 过程概述

  • 1️⃣DNS:域名----->ip
  • 2️⃣用户与ip+端口 建立连接 3次握手
  • 3️⃣数据的请求与响应
  • 4️⃣用户断开连接 4次挥手

14.2 过程详解

14.3 抓包详解

15. 局域网上网原理与虚拟机上网原理 了解

15.1 局域网上网原理

15.2 虚拟机上网原理

16. 网络管理命令

端口

连接情况

网络速度

DNS解析

追踪命令

16.1 检查端口

端口是否开启。

端口是否能访问(连接)

a)案例01 检查是否存在22端口
#方法01
[root@lichengbo-nb ~]# ss -lntup  |grep 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=1404,fd=3))
tcp    LISTEN     0      128    [::]:22                 [::]:*                   users:(("sshd",pid=1404,fd=4))

#精确过滤
[root@lichengbo-nb ~]# ss -lntup  |grep 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=1404,fd=3))
tcp    LISTEN     0      10        *:6622                  *:*                   users:(("nc",pid=1777,fd=4))
tcp    LISTEN     0      128    [::]:22                 [::]:*                   users:(("sshd",pid=1404,fd=4))
tcp    LISTEN     0      10     [::]:6622               [::]:*                   users:(("nc",pid=1777,fd=3))
[root@lichengbo-nb ~]# ss -lntup  |grep -w 22  
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=1404,fd=3))
tcp    LISTEN     0      128    [::]:22                 [::]:*                   users:(("sshd",pid=1404,fd=4))


#方法02 
[root@lichengbo-nb ~]# netstat -lntup  |grep -w 22  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1404/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      1404/sshd           

#方法03
[root@lichengbo-nb ~]# lsof  -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1404 root    3u  IPv4  24027      0t0  TCP *:ssh (LISTEN)
sshd    1404 root    4u  IPv6  24029      0t0  TCP *:ssh (LISTEN)
sshd    1466 root    3u  IPv4  24155      0t0  TCP lichengbo-nb:ssh->10.0.0.1:51925 (ESTABLISHED)
sshd    1753 root    3u  IPv4  25338      0t0  TCP lichengbo-nb:ssh->10.0.0.1:52138 (ESTABLISHED)

lsof  -n  不要把ip反向解析为主机名,域名。
lsof  -P  不要把端口解析为对应的服务。
b) 案例02 检查是否可以访问22端口
#方法01
[root@lichengbo-nb ~]# telnet 10.0.0.200 22      #检查是否有connected标记。
Trying 110.242.68.66...
Connected to baidu.com.
Escape character is '^]'.

#方法02
[root@lichengbo-nb ~]# nc 10.0.0.200 22    #这个一般用于shell脚本中检查端口是否开启
SSH-2.0-OpenSSH_7.4

#方法03
[root@lichengbo-nb ~]# nmap -p22 10.0.0.200
Starting Nmap 6.40 ( http://nmap.org ) at 2023-06-15 23:22 CST
Nmap scan report for 10.0.0.200
Host is up (0.00010s latency).
PORT   STATE SERVICE
22/tcp open  ssh   #nmap结果中只要有 端口 open就是开启。

#nmap进阶使用
nmap  -p1-1024 10.0.0.200
nmap  -p22  10.0.0.0/24  jd.com  taobo.com 
c)企业面试题:如何检查端口是否存在
ss -lntup
netstat -lntup
lsof -i:22

telnet 10.0.0.200 22
nc 10.0.0.200 22
nmap -p22 10.0.0.200

16.2 检查TCP连接状态

[root@lichengbo-nb ~]# ss -ant
State       Recv-Q Send-Q               Local Address:Port                              Peer Address:Port            LISTEN      0      128                                *:22                                            *:*          LISTEN      0      100                        127.0.0.1:25                                            *:*       LISTEN      0      10                               *:6622                                            *:*           ESTAB       0      0                         10.0.0.200:22                                  10.0.0.1:52138         ESTAB       0      52                        10.0.0.200:22                                  10.0.0.1:51925         LISTEN      0      128                             [::]:22                                           [::]:*         LISTEN      0      100                             [::1]:25                                          [::]:*       LISTEN      0      10                              [::]:6622                                         [::]:* 

未来统计:
企业案例:每种状态的次数  sort+uniq

企业案例:网站并发情况
并发:同一时间内,用户连接数量
方法:过滤estab状态的数量
[root@lichengbo-nb ~]# ss -ant | grep -i estab 
ESTAB      0      0      10.0.0.200:22                 10.0.0.1:52138              
ESTAB      0      52     10.0.0.200:22                 10.0.0.1:51925              
[root@lichengbo-nb ~]# ss -ant | grep -i estab |wc -l
2

16.3 网络速度

1)总体速度查看
iftop

iftop -n  #ip反向解析为域名/主机名
iftop -i  #指定网卡
iftop -P  #显示端口
iftop -N  #不要把端口解析为服务名

#最终使用
iftop -nNP -i erh0   #显示端口号,不要把IP解析为域名,不要把端口解析为服务,监视指定网卡eth0
2)进程流量
查看进程的流量情况
方法01
##iftop找出端口
[root@lichengbo-nb ~]# iftop -nNP
interface: eth0
IP address is: 10.0.0.200
MAC address is: 00:0c:29:c3:30:a7
##ss找出端口对应的进程号(pid)
[root@lichengbo-nb ~]# ss -lntup |grep -w 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=1404,fd=3))
tcp    LISTEN     0      128    [::]:22                 [::]:*                   users:(("sshd",pid=1404,fd=4))
##ps根据pid过滤进程名字
[root@lichengbo-nb ~]# ps aux |grep 1404
root       1404  0.0  0.2 112900  4304 ?        Ss   Jun15   0:00 /usr/sbin/sshd -D
root       2046  0.0  0.0 112808   964 pts/0    S+   00:03   0:00 grep --color=auto 1404

方法02:
nethogs

16.4 DNS解析

  • dig dns解析查询
  • host
  • nslookup
#方法01 dig
[root@lichengbo-nb ~]# dig baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37172
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1408
;; QUESTION SECTION:
;baidu.com.			IN	A

;; ANSWER SECTION:
baidu.com.		204	IN	A	39.156.66.10
baidu.com.		204	IN	A	110.242.68.66

;; Query time: 11 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Fri Jun 16 00:11:45 CST 2023
;; MSG SIZE  rcvd: 70

#方法02 host
[root@lichengbo-nb ~]# host baidu.com
baidu.com has address 110.242.68.66
baidu.com has address 39.156.66.10
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 20 usmx01.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.

#方法03 nslookup
[root@lichengbo-nb ~]# nslookup www.baidu.com
Server:		223.5.5.5
Address:	223.5.5.5#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 180.101.50.242
Name:	www.a.shifen.com
Address: 180.101.50.188

16.5 追踪命令

#01 两点之间
ping baidu.com

#02
tracert (windows)
[c:\~]$ tracert -d www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [180.101.50.188] 的路由:

  1     2 ms     2 ms     2 ms  192.168.31.1 
  2     3 ms     2 ms     2 ms  192.168.71.1 
  3     9 ms     4 ms     3 ms  100.82.64.1 
  4     5 ms     8 ms     3 ms  61.172.74.25 
  5     9 ms    10 ms     9 ms  61.172.74.34 
  6    33 ms    41 ms     6 ms  202.97.54.133 
  7    15 ms    11 ms    10 ms  58.213.95.214 
  8     *        *        *     请求超时。
  9    11 ms    13 ms    11 ms  58.213.96.50 
 10     *        *        *     请求超时。
 11     *        *        *     请求超时。
 12     *        *        *     请求超时。
 13     *        *        *     请求超时。
 14    12 ms    13 ms    12 ms  180.101.50.188 

跟踪完成。

16.6 命令小结

网络命令
查询ip地址 ip ifconfig
检查端口 ss netstat lsof nc telnet nmap
检查连接情况 ss -ant netstat -ant
检查速度 iftop nethogs
DNS解析 dig host nslookup
路径追踪 tracert
查询当前系统配置的网关/路由信息 ip ro route -n
#查询当前系统配置的网关/路由信息
#方法01
[root@lichengbo-nb ~]# grep -i gateway   /etc/sysconfig/network-scripts/ifcfg-eth0 
GATEWAY=10.0.0.2
#方法02
[root@lichengbo-nb ~]# 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    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0

17. 抓包

17.1 概述

  • 目标:
    • 抓出指定协议的数据包
    • 抓出指定端口
    • 抓出指定IP
抓包工具 特点
wireshark 可视化抓包工具
fiddler 代理,所有流量走fiddler,然后出去
tcpdump linux下面,经典的抓包工具,linux系统重抓包必备
burpsuite 抓包,修改数据包

17.2 wireshark

#抓出指定协议
icmp   #ping  数据包
tcp
udp
http
arp

#抓指定端口
tcp.port == 80 #过滤出源端口或目标端口是80的数据包
tcp.srcport == 80 #过滤出源端口是80的数据包
tcp.dscport == 80 #过滤出目标端口是80的数据包

#抓出指定IP数据包
ip.addr == 10.0.0.200  #过滤出源IP或目标是10.0.0.200 数据包
ip.src == 10.0.0.200   #过滤出源ip10.0.0.200 数据包
ip.dst == 10.0.0.200   #过滤出目标ip10.0.0.200 数据包

#组合   过滤出端口是80并且ip地址是10.0.0.200
and #并且  &&
or  #或者  ||
!  #取反

tcp.port == 80 && ip.addr == 10.0.0.200  #并且
tcp.port == 22 || ip.addr == 10.0.0.200  #或者

17.3 tcpdump 过滤

过滤条件 wireshark tcpdump
抓出指定协议 icmp/tcp/http icmp/tcp/udp
抓出指定端口 tcp.port == 端口 port 端口
过滤出源端口 tcp.srcport == 端口 src port 端口
过滤出目标端口 tcp.dstport == 端口 dst port 端口
抓出指定ip的数据包 ip.addr == ip地址 host ip地址
过滤出源ip ip.src == ip地址 src host ip地址
过滤出目标ip ip.dst == ip地址 dst host ip地址

抓包模拟环境 :

#nc -kl 80 创建 80端口   #虚拟机 10.0.0.200  
#telnet 10.0.0.200 80 进行连接 #虚拟机 10.0.0.201

抓包案例:

#过滤协议
tcpdump icmp
tcpdump -vvv  -nnn icmp
#过滤指定端口号 80端口
tcpdump  -nnn   port 80
tcpdump  -nnn src port 80
tcpdump  -nnn dst port 80
#抓住指定主机
tcpdump  -nnn host  10.0.0.200 
#抓取指定ip和端口的数据包
tcpdump  -nnn src host  10.0.0.200 and   port 80
tcpdump  -nnn dst host  10.0.0.200 and   port 80

#
tcpdump  -i ens33 
#组合 过滤出 端口是80 并且 ip地址是10.0.0.200 
and #并且    
or  #或者   
!   #取反
  • 注意:tcpdump无法过滤出7层的数据包,需要指定端口号过滤并保存,然后通过wireshark查看

17.4 案例 tcodump + wirshark抓包流程

  • tcpdump linux抓包并保存
  • sz命令下载
  • wireshark分析
tcpdump抓包的时候通过-w保存
sz命令下载到windows,通过wireshark分析

18. IP - 了解

18.1 格式与分类

  • 点分十进制(IPV4)
  • 网络位,主机位

18.2 子网掩码

  • 子网掩码:用来决定局域网(网段中)最多有多少台机器。