一、网络简介

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

网络介质:网线、光纤、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)⑦应用层

大部分软件、服务运行在应用层

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

接口:别人定义好的规范,这里的接口指的是软件的接口,用于软件之间、服务之间相互使用

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

协议含义端口
httpHyper Text Transfer Protocol,超文本传输协议,网站的基础协议之一80
httpsHypertext 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、命令小结
网络命令LinuxWindows
查询ip地址ip、ifconfigipconfig
检查端口号ss、netstat、lsof、nc、telnet、nmapnetstat -ant
检查连接情况ss -ant、netstat -antnetstat -ant
检查速度iftop、nethogs
dns解析dig、host、nslookupnslookup
路由追踪traceroutetracert
查询当前的网关、路由信息ip ro、route -nroute 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)使用

过滤条件wiresharttcpdump
抓出指定协议icmp、tcp、httpicmp、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
指定ipip.addr == 192.168.10.100host 192.168.10.100
源ipip.src == 192.168.10.100src host 192.168.10.100
目标ipip.dst == 192.168.10.100dst host 192.168.10.100
正则字段(指标)字符串:~ 或matches 匹配正则
&&、andand
||、oror
!!
选项-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共五类

类别8Bits8Bits8Bits8Bitsip取值范围
A类0NNNNNNNHostHostHost1.0.0.0 – 126.255.255.254
B类10NNNNNNNetworkHostHost128.0.0.1 – 191.255.255.254
C类110NNNNNNetworkNetworkHost192.0.0.1 – 223.255.255.254
D类1110NNNNMulticast groupMulticast groupMulticast group224.0.0.1 – 239.255.255.254
E类Research

例外:127.0.0.1为回环地址(本地网卡lo),不属于上述五类

2、子网掩码

子网掩码:用于对局域网(网段中)最多有多少台机器

有两种写法:

PREFIX=24 或 NETMASK=255.255.255.0

分类: Linux系统基础