第十五篇:计算机网络
网络基础知识
网络简介
- 网络:通过网络传输介质将各种网络设备连接起来的结构,用于数据传输与资源共享
- 网络传输介质
- 网线(cat5、cat5e、六类网线、七类网线)
- WiFi(无线路由器、ap接入点)
- 光纤(FC接口、ST接口、SC接口、LC接口)
网络设备
交换机(switch)⭐⭐
- 功能
- 数据帧转发:交换机能过接收、处理并转发数据帧,根据目标MAC地址将数据帧转发到对应的端口
- MAC地址学习:交换机会记录连接到每个端口的设备的MAC地址,形成一个MAC地址表
- 特点
- 在一个交换机的端口上所连接的所有终端设备,均在一个网段(局域网)
- 交换机工作在数据链路层
- 广播域的隔离(创建VLAN虚拟局域网)
- 交换机可以隔离冲突域,每一个端口就是一个冲突域
路由器(router)⭐⭐
- 功能
- 数据包转发:路由器负责在不同的网络之间转发数据包
- 路由:传输数据的过程(传输数据的路径)
- 网络地址转换(NAT):将私有IP地址转换成共有IP地址,实现多个设备共享一个共有地址
- 特点
- 路由器工作在网络层
- 由于连接不同的网络
- 路由器的地址一般会作为网关的地址
网络架构⭐⭐⭐⭐⭐
IP地址分类⭐⭐
OSI七层模型⭐⭐⭐⭐⭐
open system interconnect 开放系统互连参考模型
OSI 七层 | 作用 | |
⑦ 应用层 | 提供用户与网络之间的接口,处理特定的应用程序、服务/协议(HTTP、HTTPS) | http,https,smtp,dns |
⑥ 表示层 | 负责数据的格式化和表示(编码、解码,加密、解密,压缩、解压缩) | |
⑤ 会话层 | 负责会话的建立、维持、终止 | |
④ 传输层 | 负责数据传输方式(可靠传输TCP、不可靠传输UDP) | tcp/udp 端口 |
③ 网络层 | 使用逻辑地址(IP地址),进行数据包的寻址和路由 | ip地址 |
② 数据链路层 | 负责数据帧的传输 | mac地址 |
① 物理层 | 负责物理媒体上传输比特流信号 | 网卡,传输介质 |
应用层
- 处理特定的应用程序、服务协议
- 提供用户与网络之间的接口
应用层中常见的协议 | ||
协议 | 含义 | 端口 |
http | 超文本传输协议:网站基础协议之一 | 80 |
https | 基于http进行对数据加密 | 443 |
smtp | 简单邮件传输协议(smtp:未加密,smtps加秘) | 25,465 |
dns | 域名解析服务 | 53 |
表示层
- 数据的编码和解码
- 数据的加密和解密
- 数据的压缩和解压缩
会话层
- 建立、维护、管理应用程序之间的会话
传输层
- 传输层用于管理或控制连接(端到端连接)
- 指定可靠连接和不可靠连接
- 可靠连接 tcp
- 不可靠连接 udp
- 通过指定端口号与对方连接
网络层
- 负责将数据从源地址传输到目的地址
- 提供IP地址(DHCP)
- 进行路由(路由表)
- 设备
- 三层路由器
- 三层交换机
数据链路层
- 将数据转换为帧
- 数据链路层加工数据的时候,增加了MAC地址
- 数据可以通过mac地址在局域网内进行精准传输
物理层
- 通过网卡将数据转换成网络介质中可以传输的信号
OSI七层模型抓包⭐⭐⭐⭐
- windows抓包
- linux抓包⭐⭐⭐⭐
# 下载安装nginx服务 yum install -y nginx systemctl enable nginx # 将服务设置为开机自启动 systemctl start nginx # 立即启动服务 systemctl status nginx # 显示服务的当前状态 # 关闭防火墙 systemctl stop firewalld # 停止防火墙 systemctl disable firewalld # 禁用开机自启动 # 关闭SELinux 通过修改/etc/selinux/config,永久关闭SELinux SELINUX=disabled 临时关闭SELinux setenforce 0
osi七层模型之数据传输
TCP/IP协议(OSI7层精简模型)
TCP三次握手四次挥手⭐⭐⭐⭐⭐
- tcp建立连接的时候要经过3次握手(稳定、可靠)
- tcp三次握手目标:与端口建立连接
- udp直接建立连接
TCP中常见的标记 | |
SYN | (Synchronize)客服端向服务端建立连接请求,并同步初始序列号 |
ACK | (Acknowledge)客户端已经收到服务端的请求和相应 |
SYN/ACK | 服务器同意建立连接 |
FIN | (Finish)断开连接请求 |
PSH | (Push)表示传输数据 |
TCP三次握手(建立连接)⭐⭐⭐⭐⭐
- seq序列号
- ack确认号
- 客户端发送一个带有SYN标志的报文到服务端,同时随机生成一个序列号seq,进入SYN-SENT状态
- 服务端接收到SYN报文后,会发送一个带有SYN/ACK标志的报文作为应答,同时将确认号设置为客户端的序列号+1,并随机生成一个序列号,服务端进入SYN-RECEIVED状态
- 客户端收到服务端的SYN/ACK报文后,会发送一个带有ACK标记的报文作为应答,同时将确认号设置为服务端的序列号+1
TCP四次挥手(断开连接)⭐⭐⭐⭐⭐
- 客户端发送一个带有FIN标志的报文到服务端,进入FIN-WAIT-1状态
- 服务端接收到FIN报文后,会发送一个带有ACK标志的报文作为应答,并进入CLOSE-WAIT状态
- 服务器完成数据传输后,会发送一个带有FIN标志的报文给客户端,并进入LAST-ACK状态
- 客户端接收到FIN报文后,会发送一个带有ACK标志的报文作为应答,然后进入TIME-WAIT状态
- 经过一段时间后(2MSL),双方进入CLOSED状态,连接断开
TCP三次握手抓包(nc命令)⭐⭐⭐
nc命令是linux系统中的一个强大的网络工具,用于创建TCP/UDP套接字连接
nc 参数 | 英文名称 | 描述 |
-l | listen mode | 使对应的端口处于监听模式 |
-p | local port | 指定本地端口 |
-u | UDP mode | 使用udp协议,不指定-u则是tcp协议 |
-k | keep listening | 处理完一个连接后继续监听 |
-s | specific address | 指定源ip地址 |
-v | verbose mode | 显示详细信息 |
TCP/UDP区别⭐⭐⭐
传输控制协议(TCP) | 数据报协议(UDP) |
面向连接 | 无连接 |
可靠传输 | 不可靠传输 |
控流(检查数据是否丢失,丢失重新发送) | 丢包 |
使用TCP应用:WEB浏览器、电子邮件、文件传输程序 | 使用UDP应用:域名系统(DNS)、视频流、IP语音 |
TCP连接11种状态11种状态11种状态⭐⭐⭐⭐⭐
CLOSING状态
核心掌握:CLOSED,ESTABLISHED,LISTEN,TIME_WAIT,CLOSE_WAIT
逐渐掌握:FIN_WAIT1,FIN_WAIT2,CLOSING,SYN_SENT,LAST_ACK
常见网络协议⭐⭐⭐
- DNS(域名解析服务/协议):将域名转换成IP地址
- ARP(地址解析协议):将网络层地址(ip地址)转换成数据链路层地址(MAC地址)
- ICMP(互联网控制报文协议):在网络设备之间传递控制消息和错误消息
- DHCP(动态主机配置协议):自动为网络中的设备分配IP地址和其他网络配置参数
DNS(域名解析服务/协议)
将域名转换成IP地址
域名结构
完整域名:www.blog.example.com
- 根域名:互联网域名系统的最高级别,通常”.“表示(全球有13台根域名服务器)
- 顶级域名:.com .cn .org
- 二级域名:代表特定组织、公司或服务
- 三级域名:进一步细分特定服务或子站点
DNS解析详细流程
DNS解析命令⭐⭐⭐
# windows ipconfig # windows中查看计算机网络配置的命令 ipconfig /displaydns # 显示DNS解析器缓存中的所有条目 ipconfig /flushdns # 清空DNS缓存 Windows hosts文件 C:\Windows\System32\drivers\etc\hosts # Linux dig:Linux中查询DNS信息命令 dig +trace:递归查询域名解析的整个过程 dig www.baidu.com dig +trace www.baidu.com
ARP(地址解析协议)
将IP地址转换成mac地址(ARP是网络层协议,但工作在数据链路层)
ARP解析流程
- 10.0.0.200---->10.0.0.220
- 广播发出:发出arp请求,发送广播找10.0.0.220的mac地址
- 单播回复:所有局域网设备都接收到广播,只有10.0.0.220机器进行响应
- 缓存mac地址
抓包
# arp -n # 查看当前系统arp缓存表 # arp -d # 删除arp缓存 ping -c 1 10.0.0.220 arp -d 10.0.0.220
ICMP(互联网控制报文协议)
ping 使用的就是网络控制报文协议
网卡配置
网卡命名
安装系统时修改
系统安装完成后修改
# 1.修改/boot/grub2/grub.cfg配置 搜索linux16的行,在该行结尾加上 net.ifnames=0 biosdevname=0 # 2.修改网卡配置文件 修改网卡配置文件中NAME和DEVICE两个部分 网卡配置问价的名字修改为eth0 修改完成后重启Linux
网卡配置文件⭐⭐⭐
/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet # 网络接口类型,通常为Ethernet(以太网) PROXY_METHOD=none # 指定不使用代理方法 BROWSER_ONLY=no # 指定该接口不是浏览器专用的 BOOTPROTO=none # 网卡固定ip还是自动获取ip (自动获取BOOTPROTO=dhcp,手动获取BOOTPROTO=none或static) DEFROUTE=yes # 允许通过次接口设置为默认路由 IPV4_FAILURE_FATAL=no # 指定如果IPv4失败,系统不会停止网络服务 IPV6INIT=yes # 启用IPv6地址配置 IPV6_AUTOCONF=yes # 启用IPv6自动配置(自动生成IPv6地址) IPV6_DEFROUTE=yes # 表示IPv6使用该接口作为默认路由 IPV6_FAILURE_FATAL=no # 如果IPv6失败,系统不会停止网络服务 IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 # 设备名字 UUID=654890b9-0d8c-468a-9914-7e19520ba021 # 唯一标识符 DEVICE=eth0 # 设备名字 ONBOOT=yes # 网卡是否开机自启动 IPADDR=10.0.0.200 PREFIX=24 # 子网掩码,设置这个局域网中最多能有多少台机器 GATEWAY=10.0.0.2 # 默认网关,系统将使用这个地址来访问其他网络 DNS1=223.5.5.5 # 首选DNS服务器地址 DNS2=223.6.6.6 # 备选DNS服务器地址 IPV6_PRIVACY=no
用户访问网络过程
用户访问www.baidu.com整个过程
- 过程概述
- DNS解析:域名-->ip
- 与对应服务器的端口(80或443)建立连接:3次握手
- 数据的请求与响应:http协议,传输数据
- 断开连接:4次挥手
局域网用户上网流程
虚拟机上网流程
网络管理命令
yum install -y net-tools lsof nethogs iftop telnet nc nmap
- 检查端口
- 查看连接情况
- 网络速度与程序占用情况
- DNS解析
- 追踪名命令
检查端口
案例01:检查是否存在22端口
ss/netstat:查看网络连接的命令 | |
-l | 仅显示监听状态的套接字 |
-n | 以数字格式显示地址和端口号 |
-t | 仅显示tcp套接字 |
-u | 仅显示udp套接字 |
-p | 显示每个套接字相关的进程信息 |
lsof:查看当前系统中打开的文件和对应的进程信息 | |
-n | 以数字格式显示网络地址(不要将ip反向解析为主机名、域名) |
-i | 显示打开的网络连接 |
-P | 指定进程ID所打开的文件(不要把端口解析为对应的服务) |
# 方法01 ss -lntup |grep 22 # 方法02 netstat -lntup |grep -w 22 # grep -w 精确过滤 # 方法03 lsof -nPi :22
案例02:检查是否可以访问22端口
# 方法01 telnet 10.0.0.200 22 # 命令行中推荐使用(检查是否有Connected标记) # 方法02 nc -v 10.0.0.200 22 # 一般用于shell脚本中检查端口是否开启 # 方法03(nmap 网路扫描工具) nmap -p 22 10.0.0.200 # nmap结果中只要有端口,则表示该端口开启 nmap -p100-1000 10.0.0.200 # 指定要扫描的端口范围 nmap -p 22 10.0.0.0/24 taobao.com # 表示要扫描ip地址的范围
网络速度
iftop:一个用于实时监控网络流量的命令 | |
-n | 不对IP地址进行反向解析(显示IP地址而不是主机名) |
-i | 指定要监控的网络接口(网卡) |
-P | 显示端口号 |
-N | 禁止对端口进行反向解析 |
总体速度
进程流量
nethogs:按进程显示网络带宽使用情况
DNS解析
- dig dns解析查询
- host
- nslookup
追踪命令
- ping
- traceroute(Linux)
- tracert(Windows)
网络命令总结⭐⭐⭐⭐⭐
网络命令 | Linux | windows |
查询ip地址 | ip/ifconfig | ipconfig |
检查端口号 | ss/netstat/lsof nc/telnet/nmap | netstat -ant |
检查连接状况 | ss -ant /netstat -ant | |
检查速度 | iftop /nethogs | |
dns解析 | dig/host/nslookup | nslookup |
路径追踪 | traceroute | tracert |
查询当前系统配置的网关路由信息 | ip route/route -n | route print |
抓包⭐⭐⭐
概述
抓出指定协议、指定端口、指定ip的数据包
抓包工具 | 特点 |
Wireshark | 可视化抓包工具 |
tcpdump | 命令行工具(可以将捕获到的数据保存到文件中,使用Wireshark进行分析) |
Fiddler | 侧重于HTTP/HTTPS流量抓取和分析的调试代理工具 |
BurpSuite | 攻击(测试)web应用的集成平台 |
Wireshark过滤器过滤
比较大小 | |
== | != |
<= | >= |
与或非 | |
and && | 并且 |
or || | 或者 |
! | 取反 |
过滤指定协议数据包
- icmp
- tcp
- udp
- http
- arp
- 过滤https数据包:tls
- 排除arp包:!arp 或 not arp
过滤指定端口数据包
tcp.port == 80 # 过滤出源端口和目标端口是80的数据包 tcp.srcport == 80 # 过滤出源端口是80的数据包 udp.dstport == 53 # 过滤出目标端口是53的数据包
tcp.port >= 1 and tcp.port <= 80 # 过滤端口范围
过滤指定ip的数据包
ip.addr == 10.0.0.200 # 过滤出源ip和目标ip是10.0.0.200的数据包 ip.src == 10.0.0.200 # 过滤出源ip为10.0.0.200的数据包 ip.dstport == 10.0.0.200 # 过滤出源ip为10.0.0.200的数据包
正则过滤⭐⭐⭐
- Wireshark中不是所有的指标都支持正则
- 字段的内容是字符串才能使用正则
matches 或 ~ # 过滤出http协议中包含www.baidu.com数据包 http ~ "www.baidu.com" # 过滤出http.host用户请求的域名中包含[0-9]+(.com|.cn)的数据包 http.host ~ "[0-9]+(.com|.cn)"
tcpdump 过滤
yum install -y tcpdump
参数 | 说明 |
-i | 指定要监听的网络接口(网卡) |
-n | ip地址不进行反向解析 |
-v | 显示详细信息 |
-w | 将捕获的数据写入文件 |
# 过滤协议 tcpdump -vv -nn icmp # 过滤指定端口号 tcpdump -nn src port 80 tcpdump -nn dst port 80 # 过滤指定主机 tcpdump -nn host 10.0.0.200 # 过滤指定ip和端口的数据包 tcpdump -nnn src host 10.0.0.200 and port 80
抓包小结⭐⭐⭐
tcpdump无法过滤应用层、表示层、会话层上协议的数据包,
过滤条件 | wireshark | tcpdump |
过滤指定协议 | osi七层上的协议 | osi下四层协议 |
过滤指定端口 |
tcp.port == 80 tcp.srcport == 80 |
port 80 tcp src port 80 |
过滤指定ip的数据包 |
ip.addr == 10.0.0.200 ip.src == 10.0.0.200 |
host 10.0.0.200 src host 10.0.0.200 |
正则 | 字段的内容为字符串 ~或matches 匹配正则 |
不支持 |
与 | && and | and |
或 | || or | or |
非 | ! | ! |
选项 | 无 |
-w 保存数据包 -i 指定网卡 -v 显示详细信息 -n 地址不支持反向解析 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了