一、网络简介
网络:简单的说,通过网络介质把各种设备连接起来形成的结构
网络介质:网线、光纤、wifi/ap、无线5G。。。
网络传输单位:字节,1字节(bytes)=8位(bit)
b:bit,位
B:bytes,字节
网络中传输速度一般指的是位,而不是字节。
比如,1000M宽带,指的是1000Mbps
1000/8=125MB/S
二、网络设备与架构
1、交换机(switch)
交换机的特点:
1、在一个交换机的端口上所连接的所有终端设备,均在一个网段上(称为一个广播域)
2、产生广播消耗设备cpu资源
3、终端用户的设备接入,连接交换机
4、一个网段会有一个统一的网络标识(网段、局域网id、vlan id)
5、交换机一般会有一些基本的安全功能(一般是带网管功能的交换机)
6、交换机可以隔离冲突域,每一个端口就是一个冲突域
广播:网络设备发出给所有人的消息,所有人需要接受。
2、路由器
路由器,连接不同的网络(网段),用于指路(路由功能)
路由器特点:
1)路由协议的转发(路由选择,指路)
路由,类似于现实生活中,从A地去B地,可能需要先步行,再坐车,最后坐飞机才能到B地,这样的整个过程,在网络中对应数据的传递过程就成为路由。因此,一个数据信息跨越不同的网段传递到目的地址,就可以把传递数据的过程称为路由,也可以看做每条传递数据的路径。
2)数据转发,会维护一个路由表(相当于一个地图)
3)路由器会作为网关(数据的出入口),一般会在网络出口的位置放一个路由器
4)路由器用于连接广域网(公网)
三、OSI 7层模型
说明:
封包:数据如何通过软件加工,一层一层处理,变化成网络介质可以传输的形式。
解包:对方收到数据包后,又如何一层一层拆开
1、概述
OSI:Open System Interconnect,开放系统互联参考模型,由ISO(国际标准化组织)定义。
7层如下:
7、应用层:大部分软件运行在一层,http、https、smtp、dns
6、表示层:负责数据加密、解密、压缩
5、会话层:主要负责会话管理,维护
4、传输层:主要负责数据传输方式,tcp/udp
3、网络层:主要负责路由与寻址(根据地址找人),ip地址
2、数据链路层:将分组数据封装成帧,mac地址
1、物理层:物理链路,网卡,本质:把数据转换成2进制形式,通过线缆传输
2、OSI 7层模型详解
1)⑦应用层
大部分软件、服务运行在应用层
详细含义:暴露很多借口,提供给其他服务软件使用,主要就是提供应用程序可以接入网络的接口,并根据程序的不同对应不同的接口协议
接口:别人定义好的规范,这里的接口指的是软件的接口,用于软件之间、服务之间相互使用
应用层中常见的服务/协议:
协议 | 含义 | 端口 |
---|---|---|
http | Hyper Text Transfer Protocol,超文本传输协议,网站的基础协议之一 | 80 |
https | Hypertext Transfer Protocol Secure,对数据加密了 | 443 |
smtp | 简单邮件传输协议,发邮件 | 25 |
dns | 域名解析服务 | 53 |
2)⑥表示层
表示层的作用:数据的解码和编码、加密和解密、压缩和解压缩
3)⑤会话层
会话层:会话连接,建立、维护、管理应用程序之间的会话
功能:对话控制、同步
4)④传输层
这一层主要用于决定数据如何建立与对方连接(端到端连接)
数据如何传输给对方,丢失了如何处理?
· 可靠的连接:tcp
·不可靠的连接:udp
通过端口与对方连接,例如访问百度网站,连接百度的80端口或443端口
传输层的作用:负责建立端到端的连接,保证报文在端到端直接的传输
传输层主要功能:服务点编址、分段与重组、连接控制、流量控制、差错控制
5)③网络层
网络层负责将分组数据从源端传输到目的端
主要作用:就是路由(指路)和寻址(根据ip地址找人)
· 提供ip地址(源ip,目的ip),通过ip地址访问到对方
· 进行路由功能(问路、指路)
设备:3层路由器,3层交换机
网络层功能:为网络设备提供逻辑地址;进行路由选择、分组转发
6)②数据链路层
把上层数据进行转换为帧
这一层的核心:通过mac地址访问对应的机器
Mac地址:网卡的物理地址,每个mac地址都是全球唯一
设备:2层交换
数据链路层的作用:在不可靠的物理链路上,提供可靠的数据传输服务,把帧从一跳(结点)移动到另一跳(结点)。
数据链路层功能:组帧、物理编址、流量控制、差错控制、接入控制
7)①物理层
网卡:把上面的数据转为网络介质可以传输的信号
就是把数据转换成由0、1组成的内容,然后通过传输介质传递给对方
3、抓包工具
抓包工具Wireshark,打开后界面如下:

双击某个网卡,就进入抓包界面,如下:

输入http,就可以过滤http的内容:

4、TCP/IP协议

5、TCP 3次握手
tcp中3次握手表示与服务的端口建立连接的流程。
也是tcp为何叫为可靠的连接的原因
示意图:

比如,现在抓包看一下远程连接(ssh,端口22)

由于VMware虚拟机使用nat网络模式,所有选择VMnet8

输入tcp
然后在物理机输入:telnet 192.168.10.100 22

然后,抓包工具,就有数据了,如下:

看到有SYN,ACK等信息,这就是3次握手的过程。双击第一条记录,进入详细界面:

点开SYN就可以看到ack

seq:

上图所示,seq的原始值是:2071494387,但为了好记,所以使用0
6、TCP 4次挥手
示意图:

常见TCP中的标记位
SYN:sync,同步请求,与服务器端口建立建立连接
ACK:ack,确认(回复:收到)
FIN:Finnish/final,结束,断开连接
PSH:表示传输数据
7、tcp、udp
1)概述
TCP:Transmission Control Protocol
UDP:User Datagram Protocol
4层协议 | |
---|---|
TCP | 传输控制协议:基于3次握手和4次挥手,可靠连接 |
UDP | 用户数据报协议:不可靠连接 |
TCP与UDP区别
传输控制协议(TCP) | 数据报协议(UDP) |
---|---|
面向连接(3次握手4次挥手,建立,断开连接) | 无连接 |
可靠传输 | 不可靠传输 |
流控(检查数据是否丢失、丢失重新发送) | 尽力而为、尽力传递 |
使用TCP的应用:web浏览器、电子邮件、文件传输程序等 | 使用UDP的应用:DNS(域名系统、视频流、媒体流、VoIP(IP语音) |
nc命令:可以创建udp连接,,nc -ul 端口
[root@linux-87-01 ~]# nc -ul 12306
8、TCP 11种状态
1)3次握手的状态
3次握手状态转换说明
01、首先,建立连接之前服务端和客户端的状态都为CLOSED
02、服务端创建socket后开始监听(服务端启动后,启动服务)。变为LISTEN状态
03、客户端请求创建连接,向服务器发送SYN报文,客户端的状态为:SYN_SENT
04、服务端收到客户端的报文后,向客户端发送ACK和SYN报文,此时服务端状态为:SYN_RCVD(收到了客户端发送的SYN请求)
05、然后,客户端收到ACK、SYN,就行服务端发送ACK,客户端状态变为:ESTABLISHED
06、服务端收到客户端的ACK后,也变为ESTABLISHED。
此时3次握手完成,建立连接。
2)4次挥手的状态
01)首先,客户端向服务端发送FIN报文,请求断开连接,其状态为FIN_WAIT1
02)服务端收到FIN后,向客服端发送ACK,服务端状态为CLOSE_WAIT
03)客户端收到ACK后,进入FIN_WAIT2状态,此时连接已经断开了一半。如果服务端还有数据要发送给客户端,就会继续发送。
04)直到数据发完了,就发送FIN报文,此时服务端进入LAST_ACK状态
05)客户端收到服务端的FIN后,就马上发送ACK给服务端,此时客户端进入TIME_WAIT状态,再过了2MSL长的时间后,进入CLOSED状态
06)服务端收到客户端的最后一个ACK后就进入CLOSED状态
到此,断开连接
共有10种状态,另外还有1种特殊状态CLOSING
说明:客户端发了FIN,但FIN_WAIT1状态时没有收到服务端的ACK确认字段,却收到了服务端的FIN字段,这种情况发生在服务端发送的ACK丢包的时候,因为网络传输有时会有意外。
查看状态:ss -ant
[root@linux-87-01 ~]# 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 *:*
ESTAB 0 0 192.168.10.100:22 192.168.10.1:54653
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
[root@linux-87-01 ~]#
9、常见网络协议
1)DNS:域名解析服务
一般公共dns服务器:223.5.5.5、223.6.6.6、114.114.114.114、114.114.115.115
域名解析过程:
1、系统在本地dns缓存(Windows)查找是否有域名的对应ip
Windows查看本地缓存:ipconfig /displaydns
linux本地域名解析配置文件:/etc/hosts
2、系统的hosts文件是否配置域名对应的ip
3、访问本地DNS服务,询问是否知晓域名对应的ip地址
4、本地DNS访问根域名解析服务器(根的DNS),但是根DNS只有顶级域的记录,根就告诉我们了顶级域(比如,.cn、.com等等)的DNS地址
5、本地DNS访问顶级域的DNS是否知晓域名对应的ip,但是顶级域告诉我们二级域的DNS
6、本地DNS访问二级域名的DNS,知晓我们的域名对应的ip地址,ip返回给本地dns
7、本地dns把域名与ip对应关系给浏览器\命令访问,并缓存
dig 域名:可以查看解析
[root@linux-87-01 ~]# dig www.ddylive.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> www.ddylive.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4602
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1408
;; QUESTION SECTION:
;www.ddylive.com. IN A
;; ANSWER SECTION:
www.ddylive.com. 3600 IN A 144.34.203.170
;; Query time: 2399 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Mon Jun 05 21:21:30 CST 2023
;; MSG SIZE rcvd: 60
[root@linux-87-01 ~]#
+trace选项:表示重头开始找,默认从缓存中找
2)ARP协议:ip地址转换为网卡物理地址
ARP协议是3层协议,但工作在2层
解析流程:
比如:10.0.0.200 —> 10.0.0.2
1、发出arp请求,发送广播找人,谁知道10.0.0.2的mac地址,请告诉10.0.0.200
2、单播:所有局域网的设备都收到广播,只有10.0.0.2这个机器进行响应(回复):我是10.0.0.2,mac地址是:xxxx
3、缓存mac地址
查看缓存:
[root@linux-87-01 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.10.1 ether 00:50:56:c0:00:08 C eth0
192.168.10.2 ether 00:50:56:e3:00:b1 C eth0
[root@linux-87-01 ~]#
arp -d ip:删除缓存
抓包如下:

如上图:
Broadcast:广播,谁是192.168.10.2?请告诉192.168.10.100
3)icmp协议
icmp协议:Internet控制报文协议
ping使用的就是icmp协议
10、网络管理命令
1)ss:查看连接情况
ss -nat:查看连接情况
[root@linux-87-01 ~]# ss -nat
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 52 192.168.10.100:22 192.168.10.1:50480
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
[root@linux-87-01 ~]#
解释:
t:tcp
a:all,所有
n:转成ip显示
ss -lntup:查看端口对应的服务、进程信息
u:udp
p:显示端口对应的服务进程号
2)dig:检查dns
四、用户访问流程
1、网卡配置
1)网卡命名
网卡命令规则:ensXX、ethXX
修改网卡名称为:eth0
方法1:安装系统的时候,编辑内核,输入:net.ifnames=0 biosdevname=0
方法2:安装完成后修改(修改系统启动的配置文件、网卡配置文件)
安装完成系统后,修改网卡名称为eth0:
1、第1步:修改/boot/grub2/grub.cfg配置
搜索linux16这一行,在这行的结尾加上:net.ifnames=0 biosdevname=0
注意:linux16有两行,两行都要改
#修改之后检查内容
[root@linux-87-01 ~]# grep -n linux16 /boot/grub2/grub.cfg
2、第2步:修改网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-ensXX)
把ifcfg-ensXX文件名改成ifcfg-eth0
3、第3步:修改ifcfg-eth0文件内容
把DEVICE=ens33改成:DEVICE=eth0
NAME也改成:NAME=eth0
2)网卡配置文件
网卡配置文件内容,主要如下:
TYPE=Ethernet #基本固定,网络类型:Ethernet,以太网
BOOTPROTO=none #网卡ip是固定还是自动获取(dhcp,自动分配)
#BOOTPROTO=dhcp #自动获取(公有云DHCP)(物理机)
#BOOTPROTO=none或static #手动设置ip(物理机)
NAME=eth0 #网卡名称
DEVICE=eth0 #设备名称
UUID=4bcc5327-020e-4c4b-b4eb-05e5f1d53fe8 #统一识别符
#HWADDR=网卡的mac地址
ONBOOT=yes #网卡是否开机启动,yes:是,no:否
IPADDR=192.168.10.100 #ip地址
PREFIX=24 #子网掩码,设置这个局域网中最多有多少台机器。
#NETMASK=255.255.255.0
GATEWAY=192.168.10.2 #网关,网络环境中的流量入口,一般是3层路由
DNS1=223.5.5.5 #主DNS地址
DNS2=223.6.6.6 #备DNS
使用uuidgen可以生成随机识别符:
[root@linux-87-01 ~]# uuidgen
daf0671f-7bd5-437e-98fe-668242f6e8cf
[root@linux-87-01 ~]#
DNS配置文件
1、网卡配置文件中设置(优先)
2、/etc/resolv.conf文件配置,实时生效
/etc/resolv.conf文件:
[root@linux-87-01 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 223.6.6.6
[root@linux-87-01 ~]#
2、用户访问互联网
比如访问www.baidu.com的流程
过程概述
1、DNS解析过程:域名--->ip
2、与对应服务器的端口(80或443)建立连接:3次握手
3、数据的请求与响应(http协议,传输数据)
4、端口连接:4次挥手
五、网络管理命令
安装相关工具
[root@linux-87-01 ~]# yum install -y net-tools lsof nethogs iftop telnet nc nmap
1、端口检查
检查端口是否开启,是否可以访问
案例01:检查是否存在22端口
#方法1:(推荐)
[root@linux-87-01 ~]# ss -lntup | grep 22
或
[root@linux-87-01 ~]# ss -lntu
-p:表示显示对应端口的进程的信息
#方法2:
[root@linux-87-01 ~]# netstat -lntup | grep 22
#方法3:
lsof -i:22
lsof -ni:22
lsof -nPi:22
-n:不要把ip反向解析为主机名、域名
-P:不要把端口解析为对应的服务
案例02:检查是否可以访问22端口
#方法01
[root@linux-87-01 ~]# telnet 192.168.10.100 22 #检查是否有connected标记
#方法02
#nc netcat ncat
[root@linux-87-01 ~]# nc -v 192.168.10.100 22 #一般用于shell脚本中检查端口是否开启
#方法03
[root@linux-87-01 ~]# nmap -p22 192.168.10.100 #结果中只要有 端口 open就是开启
#nmap进阶使用
nmap:网络扫描工具
nmap -p1-1024 192.168.10.100
nmap -p22 192.168.10.0/24 jd.com taobao.com
小结:检查端口是否存在
ss -lntup
netstat -lntup
lsof -i:端口
telnet ip 端口
nc ip 端口
nmap -p端口 ip
2、检查tcp连接状态
使用命令:
ss -ant
netstat -ant
统计各个状态的数量:
[root@linux-87-01 ~]# ss -ant | awk 'NR>1{print $1}' | sort | uniq -c
1 ESTAB
4 LISTEN
[root@linux-87-01 ~]#
压力测试:
#ab命令属于httpd-tools软件包
[root@linux-87-01 ~]# ab -n 1000 -c 3 https://www.baidu.com/
3、查看流量
工具:iftop、nethogs
iftop -i :指定网卡
iftop -n :ip反向解析域名、主机名
iftop -P :显示端口
iftop -N :不要把端口解析为服务名
例如:
iftop -nNP -i eth0 #显示端口,不要把ip解析为域名,不要把端口解析为服务,指定网卡为eth0
4、DNS解析
dns解析命令:dig、host、nslookup
#方法1: dig [域名]
[root@linux-87-01 ~]# dig
#方法2:host
[root@linux-87-01 ~]# host baidu.com
#方法3:nslookup
[root@linux-87-01 ~]# nslookup baidu.com
5、追踪命令
检查线路是否通畅:ping、tracert(Windows)、traceroute(Linux)
#路由追踪traceroute
-I:使用icmp协议,默认使用udp
[root@linux-87-01 ~]# traceroute -nI www.baidu.com
tracert -d 域名:

6、命令小结
网络命令 | Linux | Windows |
---|---|---|
查询ip地址 | ip、ifconfig | ipconfig |
检查端口号 | ss、netstat、lsof、nc、telnet、nmap | netstat -ant |
检查连接情况 | ss -ant、netstat -ant | netstat -ant |
检查速度 | iftop、nethogs | 无 |
dns解析 | dig、host、nslookup | nslookup |
路由追踪 | traceroute | tracert |
查询当前的网关、路由信息 | ip ro、route -n | route print |
六、抓包
1、概述
抓出指定的协议数据、端口、ip等
抓包工具
1、wireshark:可视化抓包工具,win、mac、Linux都有对应的版本
2、fiddler:商业软件,代理,所有流量走fiddler,然后出去
3、科来
4、tcpdump:Linux自带,抓4层
5、burpsuite:抓包,修改数据,安全去使用
2、wireshark过滤器规则
wireshart界面:

选择VMnet8如下:

1)抓出指定协议
1、icmp
2、tcp
3、udp
4、http
5、arp
6、过滤https数据包:tls
直接在过滤器栏输入想要抓的协议,即可。例如:抓arp

2)抓出指定端口
1、tcp.port == 80 #过滤tcp出源端口或目标端口是80的数据包
2、udp.port == 53 #过滤udp端口53的数据包
3、tcp.srcport == 80 #过滤出源端口80
4、tcp.dstport == 80 #过滤出目标端口50
3)抓出指定ip的数据包
1、ip.addr == 192.168.10.100 #过滤出源ip或目标ip是192.168.10.100的数据包
2、ip.src == 192.168.10.100 #过滤出源i是192.168.10.100的数据包
3、ip.dst == 192.168.10.100# 过滤出目标ip是192.168.10.100的数据包
3)抓出指定ip的数据包
1、ip.addr == 192.168.10.100 #过滤出源ip或目标ip是192.168.10.100的数据包
2、ip.src == 192.168.10.100 #过滤出源i是192.168.10.100的数据包
3、ip.dst == 192.168.10.100# 过滤出目标ip是192.168.10.100的数据包
4)不固定内容的过滤-比较大小
过滤出目标端口小于等于1024的数据包
tcp.dstport <= 1024
== :等于
<= :小于等于
>= :大于等于
> :大于
< :小于
!= :不等于
5)正则过滤
过滤出http协议中包含baidu.com的数据包
http ~ "baidu.com"
2、http.host 用户请求的域名中包含xxx
http.host ~ "[0-9]+(.com|.cn)"
matches 或 ~ 如:
http.host matches "[0-9]+(.com|.cn)
6)与、或、非
1、&& 、 and:与
#过滤出端口大于等于20且小于等于1024
tcp.port >= 20 && tcp.port <= 1024
tcp.port >= 20 and tcp.port <= 1024
2、|| 、or :或
#过滤出端口小于等于20或者大于等于1024
tcp.port <= 20 || tcp.port >= 1024
tcp.port <= 20 or tcp.port >= 1024
3、!:非
#过滤端口不是20
tcp.port != 20
3、tcpdump
tcpdump抓包并保存,通过wireshart查看与分析
1)安装tcpdump
[root@linux-87-01 ~]# yum install -y tcpdump
2)使用
过滤条件 | wireshart | tcpdump |
---|---|---|
抓出指定协议 | icmp、tcp、http | icmp、tcp、udp(不能直接过滤http) |
指定端口 | tcp.port == 80 | [tcp 或 udp] port 80 |
源端口 | tcp.srcport == 80 | [tcp 或 udp] src port 80 |
目标端口 | tcp.dstport == 80 | [tcp 或 udp] dst port 80 |
指定ip | ip.addr == 192.168.10.100 | host 192.168.10.100 |
源ip | ip.src == 192.168.10.100 | src host 192.168.10.100 |
目标ip | ip.dst == 192.168.10.100 | dst host 192.168.10.100 |
正则 | 字段(指标)字符串:~ 或matches 匹配正则 | 无 |
与 | &&、and | and |
或 | ||、or | or |
非 | ! | ! |
选项 | 无 | -w:保存 – i:指定网卡 |
tcpdump -nn -v
n:ip不解析为主机名、域名
v:显示过程
例如:
[root@linux-87-01 ~]# tcpdump -nn -vv icmp
把结果保存下来,使用-w选项,例如:
#把结果保存到tcpdump.pcap文件
[root@linux-87-01 ~]# tcpdump -nn -vv -w tcpdump.pcap
#使用ctrl + c则停止
把tcpdump.pcap文件放到Windows,然后通过wireshart分析
案例01:过滤80端口(tcp、udp)
[root@linux-87-01 ~]# tcpdump -nn -vv port 80
案例02:过滤tcp 80端口
[root@linux-87-01 ~]# tcpdump -nn -vv tcp port 80
七、ip地址
1、ip地址
ip地址:ipv4(点分十进制32位)、ipv6(128位)
ip地址组成:网络位(类似于居住的小区)(Network)+主机位(楼房间)(Host)
子网掩码用于划分网络位和主机位
ipv4分A、B、C、D、E共五类
类别 | 8Bits | 8Bits | 8Bits | 8Bits | ip取值范围 |
---|---|---|---|---|---|
A类 | 0NNNNNNN | Host | Host | Host | 1.0.0.0 – 126.255.255.254 |
B类 | 10NNNNNN | Network | Host | Host | 128.0.0.1 – 191.255.255.254 |
C类 | 110NNNNN | Network | Network | Host | 192.0.0.1 – 223.255.255.254 |
D类 | 1110NNNN | Multicast group | Multicast group | Multicast group | 224.0.0.1 – 239.255.255.254 |
E类 | Research |
例外:127.0.0.1为回环地址(本地网卡lo),不属于上述五类
2、子网掩码
子网掩码:用于对局域网(网段中)最多有多少台机器
有两种写法:
PREFIX=24 或 NETMASK=255.255.255.0